Skip to content

Commit 0c298bd

Browse files
committed
update fenrir to v2
1 parent 5be7a59 commit 0c298bd

File tree

1 file changed

+49
-17
lines changed

1 file changed

+49
-17
lines changed

plugins/english/fenrirrealm.ts

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
3838
name = 'Fenrir Realm';
3939
icon = 'src/en/fenrirrealm/icon.png';
4040
site = 'https://fenrirealm.com';
41-
version = '1.0.12';
41+
version = '1.0.13';
4242
imageRequestInit?: Plugin.ImageRequestInit | undefined = undefined;
4343

4444
hideLocked = storage.get('hideLocked');
@@ -60,15 +60,33 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
6060
filters,
6161
}: Plugin.PopularNovelsOptions<typeof this.filters>,
6262
): Promise<Plugin.NovelItem[]> {
63-
// let sort = "updated";
64-
let sort = filters.sort.value;
65-
if (showLatestNovels) sort = 'latest';
66-
const genresFilter = filters.genres.value
67-
.map(g => '&genres%5B%5D=' + g)
68-
.join('');
69-
const res = await fetchApi(
70-
`${this.site}/api/series/filter?page=${pageNo}&per_page=20&status=${filters.status.value}&order=${sort}${genresFilter}`,
71-
).then(r =>
63+
const sort = showLatestNovels ? 'latest' : filters.sort.value;
64+
const params = new URLSearchParams({
65+
page: pageNo.toString(),
66+
per_page: '12',
67+
status: filters.status.value,
68+
order: sort,
69+
});
70+
71+
const includeGenres = filters.genres.value.include;
72+
const excludeGenres = filters.genres.value.exclude;
73+
74+
includeGenres.forEach(genre => {
75+
params.append('genres[]', genre);
76+
});
77+
78+
if (includeGenres.length > 1) {
79+
const condition = filters.genre_condition.value ? 'and' : 'or';
80+
params.append('genre_condition', condition);
81+
}
82+
83+
excludeGenres.forEach(genre => {
84+
params.append('exclude_genres[]', genre);
85+
});
86+
87+
const url = `${this.site}/api/new/v2/series?${params.toString()}`;
88+
89+
const res = await fetchApi(url).then(r =>
7290
r.json().catch(() => {
7391
throw new Error(
7492
'There was an error fetching the data from the server. Please try to open it in WebView',
@@ -112,7 +130,7 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
112130
.text();
113131

114132
let chapters = await fetchApi(
115-
this.site + '/api/novels/chapter-list/' + novelPath,
133+
this.site + '/api/new/v2/series/' + novelPath + '/chapters',
116134
).then(r => r.json());
117135

118136
if (this.hideLocked) {
@@ -162,9 +180,15 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
162180
searchTerm: string,
163181
pageNo: number,
164182
): Promise<Plugin.NovelItem[]> {
165-
return await fetchApi(
166-
`${this.site}/api/series/filter?page=${pageNo}&per_page=20&search=${encodeURIComponent(searchTerm)}`,
167-
)
183+
const params = new URLSearchParams({
184+
page: pageNo.toString(),
185+
per_page: '12',
186+
search: searchTerm,
187+
status: 'any',
188+
sort: 'latest',
189+
});
190+
191+
return await fetchApi(`${this.site}/api/new/v2/series?${params.toString()}`)
168192
.then(r => r.json())
169193
.then(r =>
170194
r.data.map((novel: APINovel) => this.parseNovelFromApi(novel)),
@@ -175,7 +199,7 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
175199
return {
176200
name: apiData.title,
177201
path: apiData.slug,
178-
cover: this.site + '/' + apiData.cover,
202+
cover: new URL(apiData.cover, this.site).href,
179203
summary: apiData.description,
180204
status: apiData.status,
181205
genres: apiData.genres.map(g => g.name).join(','),
@@ -210,9 +234,12 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
210234
],
211235
},
212236
genres: {
213-
type: FilterTypes.CheckboxGroup,
237+
type: FilterTypes.ExcludableCheckboxGroup,
214238
label: 'Genres',
215-
value: [],
239+
value: {
240+
include: [],
241+
exclude: [],
242+
},
216243
options: [
217244
{ 'label': 'Action', 'value': '1' },
218245
{ 'label': 'Adult', 'value': '2' },
@@ -284,6 +311,11 @@ class FenrirRealmPlugin implements Plugin.PluginBase {
284311
{ 'label': 'Yuri', 'value': '35' },
285312
],
286313
},
314+
genre_condition: {
315+
type: FilterTypes.Switch,
316+
label: 'Genres (OR/AND)',
317+
value: false,
318+
},
287319
} satisfies Filters;
288320
}
289321

0 commit comments

Comments
 (0)