From 7055caf60285e911c8d5bf18adabdab1f02ffe23 Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Thu, 28 Jul 2022 15:24:05 +0200 Subject: [PATCH] feat: custom watchlist --- package.json | 2 +- src/renderer/src/modules/anilist.js | 39 +++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 85cf74b..75b878b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Miru", - "version": "2.10.2", + "version": "2.10.3", "author": "ThaUnknown_ ", "main": "src/index.js", "homepage": "https://github.com/ThaUnknown/miru#readme", diff --git a/src/renderer/src/modules/anilist.js b/src/renderer/src/modules/anilist.js index ac7aa1a..9011947 100644 --- a/src/renderer/src/modules/anilist.js +++ b/src/renderer/src/modules/anilist.js @@ -61,6 +61,14 @@ const codes = { } export const alID = !!alToken && alRequest({ method: 'Viewer', token: alToken }) +if (alID) { + alID.then(result => { + const lists = result?.data?.Viewer?.mediaListOptions?.animeList?.customLists || [] + if (!lists.includes('Watched using Miru')) { + alRequest({ method: 'CustomList', lists }) + } + }) +} function printError (error) { console.warn(error) @@ -96,23 +104,28 @@ export function alEntry (filemedia) { if (media.status === 'FINISHED' || media.status === 'RELEASING') { // some anime/OVA's can have a single episode, or some movies can have multiple episodes const singleEpisode = (!media.episodes || (media.format === 'MOVIE' && media.episodes === 1)) && 1 - const videoEpisode = filemedia.episodeNumber || singleEpisode + const videoEpisode = Number(filemedia.episodeNumber) || singleEpisode const mediaEpisode = media.nextAiringEpisode?.episode || media.episodes || singleEpisode // check episode range if (videoEpisode && mediaEpisode && mediaEpisode >= videoEpisode) { // check user's own watch progress + const lists = media.mediaListEntry?.customLists.filter(list => list.enabled).map(list => list.name) if (!media.mediaListEntry || media.mediaListEntry?.progress <= videoEpisode || singleEpisode) { const variables = { method: 'Entry', repeat: 0, id: media.id, status: 'CURRENT', - episode: videoEpisode + episode: videoEpisode, + lists } if (videoEpisode === mediaEpisode) { variables.status = 'COMPLETED' if (media.mediaListEntry?.status === 'COMPLETED' || media.mediaListEntry.status === 'REPEATING') variables.repeat = media.mediaListEntry.repeat + 1 } + if (!lists.includes('Watched using Miru')) { + variables.lists.push('Watched using Miru') + } alRequest(variables) } } @@ -181,6 +194,7 @@ mediaListEntry { progress, repeat, status, + customLists(asArray: true), score(format: POINT_10) }, source, @@ -286,7 +300,12 @@ query { medium }, name, - id + id, + mediaListOptions { + animeList { + customLists + } + } } }` break @@ -363,9 +382,10 @@ query ($page: Int, $perPage: Int, $sort: [MediaSort], $type: MediaType, $search: variables.status = opts.status variables.episode = opts.episode variables.score = opts.score + variables.lists = opts.lists query = /* js */` - mutation ($id: Int, $status: MediaListStatus, $episode: Int, $repeat: Int, $score: Int) { - SaveMediaListEntry (mediaId: $id, status: $status, progress: $episode, repeat: $repeat, scoreRaw: $score) { + mutation ($lists: [String], $id: Int, $status: MediaListStatus, $episode: Int, $repeat: Int, $score: Int) { + SaveMediaListEntry (mediaId: $id, status: $status, progress: $episode, repeat: $repeat, scoreRaw: $score, customLists: $lists) { id, status, progress, @@ -413,6 +433,15 @@ query ($page: Int, $perPage: Int, $sort: [MediaSort], $type: MediaType, $search: } }` break + } case 'CustomList':{ + variables.lists = ['Watched using Miru', ...opts.lists] + query = /* js */` + mutation($lists: [String]) { + UpdateUser(animeListOptions: { customLists: $lists }){ + id + } + }` + break } } options.body = JSON.stringify({