diff --git a/src/components/accordions/SearchNovels/index.tsx b/src/components/accordions/SearchNovels/index.tsx index 4760c686b..decdf4355 100644 --- a/src/components/accordions/SearchNovels/index.tsx +++ b/src/components/accordions/SearchNovels/index.tsx @@ -9,13 +9,13 @@ export default function SearchNovels() { const plugin = useAppStore(state => state.plugin); const [searchTerm, setSearchTerm] = useState(''); - const [page] = useState(1); - const [novels, setNovels] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [novels, setNovels] = useState([]); const [loading, setLoading] = useState(false); const [fetchError, setFetchError] = useState(''); - const fetchNovels = () => { + const fetchNovels = (page: number) => { if (plugin) { setLoading(true); plugin @@ -28,6 +28,10 @@ export default function SearchNovels() { } }; + useEffect(() => { + setCurrentPage(1); + }, [plugin]); + return ( {fetchError && {fetchError}} @@ -40,12 +44,19 @@ export default function SearchNovels() { /> - @@ -56,7 +67,7 @@ export default function SearchNovels() { }} > - {novels.map((novel, index) => ( + {novels?.map((novel, index) => ( ))} diff --git a/src/plugins/english/allnovelfull.ts b/src/plugins/english/allnovelfull.ts index 9b5aacc8c..d69ceb15b 100644 --- a/src/plugins/english/allnovelfull.ts +++ b/src/plugins/english/allnovelfull.ts @@ -9,7 +9,7 @@ class AllNovelFullPlugin implements Plugin.PluginBase { name = 'AllNovelFull'; icon = 'src/en/allnovelfull/icon.png'; site = 'https://allnovelfull.net'; - version = '1.0.0'; + version = '1.0.1'; parseNovels(loadedCheerio: CheerioAPI) { const novels: Plugin.NovelItem[] = []; @@ -145,6 +145,15 @@ class AllNovelFullPlugin implements Plugin.PluginBase { const body = await result.text(); const loadedCheerio = parseHTML(body); + const lastPage = loadedCheerio('.pagination-container ul li a') + .last() + .attr('data-page'); + if (!lastPage) { + // no pagination + if (page > 1) return []; + } else { + if (parseInt(lastPage) && page > parseInt(lastPage)) return []; + } return this.parseNovels(loadedCheerio); } diff --git a/src/plugins/english/freewebnovel.ts b/src/plugins/english/freewebnovel.ts index 506105f27..2d2bfd0b1 100644 --- a/src/plugins/english/freewebnovel.ts +++ b/src/plugins/english/freewebnovel.ts @@ -7,9 +7,16 @@ class FreeWebNovel implements Plugin.PluginBase { id = 'FWN.com'; name = 'Free Web Novel'; site = 'https://freewebnovel.com/'; - version = '1.1.1'; + version = '1.1.2'; icon = 'src/en/freewebnovel/icon.png'; + lastSearch: number | null = null; + searchInterval = 3200; + + async sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + async getCheerio(url: string): Promise { const r = await fetchApi(url); if (!r.ok) @@ -124,6 +131,10 @@ class FreeWebNovel implements Plugin.PluginBase { } async searchNovels(searchTerm: string): Promise { + const now = Date.now(); + if (this.lastSearch && now - this.lastSearch <= this.searchInterval) { + await this.sleep(this.searchInterval); + } const r = await fetchApi(this.site + 'search', { headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -131,6 +142,7 @@ class FreeWebNovel implements Plugin.PluginBase { method: 'POST', body: new URLSearchParams({ searchkey: searchTerm }).toString(), }); + this.lastSearch = Date.now(); if (!r.ok) throw new Error( 'Could not reach site (' + r.status + ') try to open in webview.',