From c439b56795b7cb4dcdc1f6d16902d7a8420b62df Mon Sep 17 00:00:00 2001 From: Batorian <53831711+Batorian@users.noreply.github.com> Date: Sun, 14 Jul 2024 12:26:20 +0200 Subject: [PATCH] fix: [Scribble Hub]: Add Page and Correct Filters (#1054) * scribble-hub: edit filters * scribble-hub: add search params * scribble-hub: fix * scribble-hub: revert version --- src/plugins/english/scribblehub.ts | 113 +++++++++++++++-------------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/src/plugins/english/scribblehub.ts b/src/plugins/english/scribblehub.ts index af77a98..d0d2c42 100644 --- a/src/plugins/english/scribblehub.ts +++ b/src/plugins/english/scribblehub.ts @@ -6,10 +6,11 @@ import dayjs from 'dayjs'; class ScribbleHubPlugin implements Plugin.PluginBase { id = 'scribblehub'; - name = 'ScribbleHub'; + name = 'Scribble Hub'; icon = 'src/en/scribblehub/icon.png'; site = 'https://www.scribblehub.com/'; - version = '1.0.0'; + version = '1.0.1'; + parseNovels(loadedCheerio: CheerioAPI) { const novels: Plugin.NovelItem[] = []; @@ -39,43 +40,45 @@ class ScribbleHubPlugin implements Plugin.PluginBase { filters, }: Plugin.PopularNovelsOptions, ): Promise { - let link = `${this.site}`; - if (showLatestNovels) link += 'latest-series/'; - // if (filters.genres.value.include?.length || - // filters.genres.value.exclude?.length) - else link += 'series-finder/?sf=1'; - // else - // link += "series-ranking/"; - // TODO, series-ranking filters when hideOnSelect come out + let url = `${this.site}`; + if (showLatestNovels) { + url += `latest-series/?pg=${page}`; + } else if (filters) { + const params = new URLSearchParams(); + if (filters.genres.value.include?.length) { + params.append('gi', filters.genres.value.include.join(',')); + } + if ( + filters.genres.value.include?.length || + filters.genres.value.exclude?.length + ) { + params.append('mgi', filters.genre_operator.value); + } + if (filters.genres.value.exclude?.length) { + params.append('ge', filters.genres.value.exclude.join(',')); + } + if (filters.content_warning.value.include?.length) { + params.append('cti', filters.content_warning.value.include.join(',')); + } + if ( + filters.content_warning.value.include?.length || + filters.content_warning.value.exclude?.length + ) { + params.append('mct', filters.content_warning_operator.value); + } + if (filters.content_warning.value.exclude?.length) { + params.append('cte', filters.content_warning.value.exclude.join(',')); + } + params.append('cp', filters.storyStatus.value); + params.append('sort', filters.sort.value); + params.append('order', filters.order.value); + params.append('pg', page.toString()); + url += `series-finder/?sf=1&${params.toString()}`; + } else { + url += `series-finder/?sf=1&sort=ratings&order=desc&pg=${page}`; + } - if (filters.genres.value.include?.length) - link += '&gi=' + filters.genres.value.include.join(','); - - if (filters.genres.value.exclude?.length) - link += '&ge=' + filters.genres.value.exclude.join(','); - - if ( - filters.genres.value.include?.length || - filters.genres.value.exclude?.length - ) - link += '&mgi=' + filters.genre_operator.value; - - if (filters.content_warning.value.include?.length) - link += '&cti=' + filters.content_warning.value.include.join(','); - - if (filters.content_warning.value.exclude?.length) - link += '&cte=' + filters.content_warning.value.exclude.join(','); - - if ( - filters.content_warning.value.include?.length || - filters.content_warning.value.exclude?.length - ) - link += '&mct' + filters.content_warning_operator.value; - - link += '&sort=' + filters.sort.value; - link += '&order=' + filters.order.value; - - const body = await fetchApi(link).then(result => result.text()); + const body = await fetchApi(url).then(result => result.text()); const loadedCheerio = parseHTML(body); return this.parseNovels(loadedCheerio); @@ -188,7 +191,7 @@ class ScribbleHubPlugin implements Plugin.PluginBase { value: 'ratings', options: [ { label: 'Chapters', value: 'chapters' }, - { label: 'Chapters per week', value: 'frequency' }, + { label: 'Chapters per Week', value: 'frequency' }, { label: 'Date Added', value: 'dateadded' }, { label: 'Favorites', value: 'favorites' }, { label: 'Last Updated', value: 'lastchdate' }, @@ -203,7 +206,7 @@ class ScribbleHubPlugin implements Plugin.PluginBase { type: FilterTypes.Picker, }, order: { - label: 'Order by', + label: 'Order By', value: 'desc', options: [ { label: 'Descending', value: 'desc' }, @@ -212,8 +215,8 @@ class ScribbleHubPlugin implements Plugin.PluginBase { type: FilterTypes.Picker, }, storyStatus: { - label: 'Story Status (Translation)', - value: '', + label: 'Story Status', + value: 'all', options: [ { label: 'All', value: 'all' }, { label: 'Completed', value: 'completed' }, @@ -222,6 +225,15 @@ class ScribbleHubPlugin implements Plugin.PluginBase { ], type: FilterTypes.Picker, }, + genre_operator: { + value: 'and', + label: 'Genres (And/Or)', + options: [ + { label: 'And', value: 'and' }, + { label: 'Or', value: 'or' }, + ], + type: FilterTypes.Picker, + }, genres: { label: 'Genres', value: { @@ -263,12 +275,12 @@ class ScribbleHubPlugin implements Plugin.PluginBase { ], type: FilterTypes.ExcludableCheckboxGroup, }, - genre_operator: { + content_warning_operator: { value: 'and', - label: 'Genre And/Or', + label: 'Mature Content (And/Or)', options: [ - { label: 'OR', value: 'or' }, - { label: 'AND', value: 'and' }, + { label: 'And', value: 'and' }, + { label: 'Or', value: 'or' }, ], type: FilterTypes.Picker, }, @@ -285,15 +297,6 @@ class ScribbleHubPlugin implements Plugin.PluginBase { ], type: FilterTypes.ExcludableCheckboxGroup, }, - content_warning_operator: { - value: 'and', - label: 'Mature Content And/Or', - options: [ - { label: 'OR', value: 'or' }, - { label: 'AND', value: 'and' }, - ], - type: FilterTypes.Picker, - }, } satisfies Filters; }