fix: improve episode resolve

This commit is contained in:
ThaUnknown 2023-07-09 11:56:11 +02:00
parent 98cf51a8e6
commit 68d2cfe6ed
3 changed files with 24 additions and 18 deletions

View file

@ -1,6 +1,6 @@
{
"name": "Miru",
"version": "4.1.8",
"version": "4.1.9",
"author": "ThaUnknown_ <ThaUnknown@users.noreply.github.com>",
"description": "Stream anime torrents, real-time with no waiting for downloads.",
"main": "build/main.js",

View file

@ -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
})
}

View file

@ -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)