diff --git a/package.json b/package.json index 42f368b..22385a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Miru", - "version": "4.1.8", + "version": "4.1.9", "author": "ThaUnknown_ ", "description": "Stream anime torrents, real-time with no waiting for downloads.", "main": "build/main.js", diff --git a/src/renderer/modules/providers/tosho.js b/src/renderer/modules/providers/tosho.js index 9f1ff49..a3ab6d3 100644 --- a/src/renderer/modules/providers/tosho.js +++ b/src/renderer/modules/providers/tosho.js @@ -52,20 +52,35 @@ function getRelation (list, type) { } // TODO: https://anilist.co/anime/13055/ -async function getAniDBEpisodeFromAL ({ media, episode }, { episodes, episodeCount }) { +async function getAniDBEpisodeFromAL ({ media, episode }, { episodes, episodeCount, specialCount }) { console.log('getting AniDB EpID for Mal EP', { episode, episodes }) if (!episode || !Object.values(episodes).length) return - if (media.episodes && media.episodes === episodeCount && episodes[Number(episode)]) return episodes[Number(episode)] + // if media has no specials or their episode counts don't match + if (!specialCount || (media.episodes && media.episodes === episodeCount && episodes[Number(episode)])) return episodes[Number(episode)] console.log('EP count doesn\'t match, checking by air date') const res = await alRequest({ method: 'EpisodeDate', id: media.id, ep: episode }) const alDate = new Date((res.data.AiringSchedule?.airingAt || 0) * 1000) if (!+alDate) return episodes[Number(episode)] || episodes[1] // what the fuck, are you braindead anilist?, the source episode number to play is from an array created from AL ep count, so how come it's missing? - // find closest episode by air date + // find closest episodes by air date, multiple episodes can have the same air date distance // ineffcient but reliable - return Object.values(episodes).reduce((prev, curr) => { - return Math.abs(new Date(curr.airdate) - alDate) < Math.abs(new Date(prev.airdate) - alDate) ? curr : prev + const closestEpisodes = Object.values(episodes).reduce((prev, curr) => { + if (!prev[0]) return [curr] + const prevDate = Math.abs(new Date(prev[0]?.airdate) - alDate) + const currDate = Math.abs(new Date(curr.airdate) - alDate) + if (prevDate === currDate) { + prev.push(curr) + return prev + } + if (currDate < prevDate) return [curr] + return prev + }, []) + + console.log({ closestEpisodes }) + + return closestEpisodes.reduce((prev, curr) => { + return Math.abs(curr.episodeNumber - episode) < Math.abs(prev.episodeNumber - episode) ? curr : prev }) } diff --git a/src/renderer/modules/scroll.js b/src/renderer/modules/scroll.js index 295c2f8..ca1079a 100644 --- a/src/renderer/modules/scroll.js +++ b/src/renderer/modules/scroll.js @@ -1,4 +1,4 @@ -export default function scroll (t, { speed = 120, smooth = 15 } = {}) { +export default function scroll (t, { speed = 120, smooth = 10 } = {}) { let moving = false let pos = 0 let scrollTop = 0 @@ -9,17 +9,8 @@ export default function scroll (t, { speed = 120, smooth = 15 } = {}) { if (!moving) update() }, { capture: true, passive: false }) - let scrollBar = false - - t.addEventListener('pointerdown', e => { - if (e.offsetX > t.clientWidth) scrollBar = true - }) - - t.addEventListener('pointerup', () => { scrollBar = false }) - - t.addEventListener('scroll', () => { - if (scrollBar) pos = scrollTop = t.scrollTop - }, { capture: false, passive: true }) + // TODO: this needs to be the scrollend event once we update electron + t.addEventListener('pointerup', () => { pos = scrollTop = t.scrollTop }) function update () { const delta = pos - scrollTop === smooth * 2 ? 0 : ((pos - scrollTop) / smooth)