From 5cf2357976a81a1d7d55143f2f0c71f4a099fcb2 Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Tue, 20 Aug 2024 23:46:45 +0200 Subject: [PATCH] feat: sort continue watching by last updated --- common/modules/anilist.js | 3 +-- common/modules/sections.js | 12 ++++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/common/modules/anilist.js b/common/modules/anilist.js index 63a0e15..c2fafa5 100644 --- a/common/modules/anilist.js +++ b/common/modules/anilist.js @@ -264,7 +264,6 @@ class AnilistClient { body: JSON.stringify({ query: query.replace(/\s/g, '').replaceAll(' ', ' '), variables: { - sort: 'TRENDING_DESC', page: 1, perPage: 30, status_in: '[CURRENT,PLANNING]', @@ -550,7 +549,7 @@ class AnilistClient { variables.id = userId const query = /* js */` query($id: Int) { - MediaListCollection(userId: $id, type: ANIME, forceSingleCompletedList: true) { + MediaListCollection(userId: $id, type: ANIME, forceSingleCompletedList: true, sort: UPDATED_TIME_DESC) { lists { status, entries { diff --git a/common/modules/sections.js b/common/modules/sections.js index 04c8ff6..eaecb26 100644 --- a/common/modules/sections.js +++ b/common/modules/sections.js @@ -84,7 +84,7 @@ function createSections () { { title: 'Continue Watching', load: (page = 1, perPage = 50, variables = {}) => { - const res = anilistClient.userLists.value.then(res => { + const res = anilistClient.userLists.value.then(async res => { const mediaList = res.data.MediaListCollection.lists.reduce((filtered, { status, entries }) => { return (status === 'CURRENT' || status === 'REPEATING') ? filtered.concat(entries) : filtered }, []) @@ -93,7 +93,15 @@ function createSections () { return media.mediaListEntry?.progress < media.nextAiringEpisode?.episode - 1 }).map(({ media }) => media.id) if (!ids.length) return {} - return anilistClient.searchIDS({ page, perPage, id: ids, ...SectionsManager.sanitiseObject(variables) }) + // if custom search is used, respect it, otherwise sort by last updated + if (Object.values(variables).length !== 0) { + return anilistClient.searchIDS({ page, perPage, id: ids, ...SectionsManager.sanitiseObject(variables) }) + } + + const index = (page - 1) * perPage + const idsRes = await anilistClient.searchIDS({ page, perPage, id: ids.slice(index, index + perPage), ...SectionsManager.sanitiseObject(variables) }) + idsRes.data.Page.media.sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id)) + return idsRes }) return SectionsManager.wrapResponse(res, perPage) },