diff --git a/common/modules/sections.js b/common/modules/sections.js index 54bfc0a..9d9344b 100644 --- a/common/modules/sections.js +++ b/common/modules/sections.js @@ -100,6 +100,24 @@ function createSections () { }, hide: !Helper.isAuthorized() || Helper.isMalAuth() // disable this section when authenticated with MyAnimeList. API for userLists fail to return relations and likely will never be fixed on their end. }, + { + title: 'Stories You Missed', variables : { sort: 'POPULARITY_DESC', userList: true, missedList: true, disableHide: true }, + load: (page = 1, perPage = 50, variables = {}) => { + if (Helper.isMalAuth()) return {} // same as Sequels You Missed + const res = Helper.userLists(variables).then(res => { + const mediaList = res.data.MediaListCollection.lists.find(({ status }) => status === 'COMPLETED')?.entries + const excludeIds = res.data.MediaListCollection.lists.reduce((filtered, { status, entries }) => { return (['CURRENT', 'REPEATING', 'COMPLETED', 'DROPPED', 'PAUSED'].includes(status)) ? filtered.concat(entries) : filtered}, []).map(({ media }) => media.id) || [] + if (!mediaList) return {} + const ids = mediaList.flatMap(({ media }) => { + return media.relations.edges.filter(edge => !['SEQUEL', 'CHARACTER', 'OTHER'].includes(edge.relationType)) + }).map(({ node }) => node.id) + if (!ids.length) return {} + return anilistClient.searchIDS({ page, perPage, id: ids, id_not: excludeIds, ...SectionsManager.sanitiseObject(variables), status: ['FINISHED', 'RELEASING'] }) + }) + return SectionsManager.wrapResponse(res, perPage) + }, + hide: !Helper.isAuthorized() || Helper.isMalAuth() + }, { title: 'Continue Watching', variables: { sort: 'UPDATED_TIME_DESC', userList: true, continueWatching: true, disableHide: true }, load: (page = 1, perPage = 50, variables = {}) => { diff --git a/common/views/Home/Home.svelte b/common/views/Home/Home.svelte index 1228be9..4346722 100644 --- a/common/views/Home/Home.svelte +++ b/common/views/Home/Home.svelte @@ -17,7 +17,7 @@ for (const sectionTitle of settings.value.homeSections) manager.add(mappedSections[sectionTitle]) if (Helper.getUser()) { - const userSections = ['Continue Watching', 'Sequels You Missed', 'Planning List', 'Completed List', 'Paused List', 'Dropped List', 'Watching List'] + const userSections = ['Continue Watching', 'Sequels You Missed', 'Stories You Missed', 'Planning List', 'Completed List', 'Paused List', 'Dropped List', 'Watching List'] Helper.getClient().userLists.subscribe(value => { if (!value) return for (const section of manager.sections) {