feat: add lookup for absolute episode numbering for nyaa

This commit is contained in:
ThaUnknown 2022-04-06 21:26:56 +02:00
parent 83637c7581
commit 881ca0f0e1
3 changed files with 19 additions and 13 deletions

View file

@ -1,6 +1,6 @@
{
"name": "Miru",
"version": "1.1.5",
"version": "1.2.0",
"author": "ThaUnknown_ <ThaUnknown@users.noreply.github.com>",
"main": "src/index.js",
"homepage": "https://github.com/ThaUnknown/miru#readme",

View file

@ -47,6 +47,7 @@
<script>
import { add } from '@/modules/torrent.js'
import { episodeRx } from '@/modules/anime.js'
import { findEdge, resolveSeason } from '@/modules/anime.js'
$: parseRss($rss)
@ -65,12 +66,17 @@
]
.join(')|(')
.replace(/&/g, '%26')
const ep =
(media.episodes !== 1 &&
(media.status === 'FINISHED' && settings.rssBatch
? `"01-${media.episodes}"|"01~${media.episodes}"|"Batch"|"Complete"|"+${episode > 9 ? episode : `0${episode}`}+"|"+${episode > 9 ? episode : `0${episode}`}v"|"S01"`
: `"+${episode > 9 ? episode : `0${episode}`}+"|"+${episode > 9 ? episode : `0${episode}`}v"`)) ||
''
const absolute = !!findEdge(media, 'PREQUEL')?.node && (await resolveSeason({ media, episode, force: true })).offset + episode
const episodes = [episode, absolute].filter(e => e)
let ep = ''
if (media.episodes !== 1) {
if (media.status === 'FINISHED' && settings.rssBatch) {
ep = `"01-${media.episodes}"|"01~${media.episodes}"|"Batch"|"Complete"|"+${episode > 9 ? episode : `0${episode}`}+"|"+${episode > 9 ? episode : `0${episode}`}v"|"S01"`
} else {
ep = `(${episodes.map(episode => `"+${episode > 9 ? episode : `0${episode}`}+"|"+${episode > 9 ? episode : `0${episode}`}v"`).join('|')})`
}
}
const excl = ['DTS', 'AC3', 'HEVC', 'x265', 'H.265'].join('|')
const quality = `"${settings.rssQuality}"` || '"1080p"'
const trusted = settings.rssTrusted === true ? 2 : 0

View file

@ -167,20 +167,20 @@ export async function resolveFileMedia (opts) {
return fileMedias.length === 1 ? fileMedias[0] : fileMedias
}
function findEdge (media, type, formats = ['TV', 'TV_SHORT'], skip) {
const res = media.relations.edges.find(edge => {
export function findEdge (media, type, formats = ['TV', 'TV_SHORT'], skip) {
let res = media.relations.edges.find(edge => {
if (edge.relationType === type) {
return formats.includes(edge.node.format)
}
return false
})
// this is hit-miss
// if (!res && !skip) res = findEdge(media, type, formats = ['TV', 'TV_SHORT', 'MOVIE', 'ONA', 'OVA'], true)
if (!res && !skip) res = findEdge(media, type, formats = ['TV', 'TV_SHORT', 'MOVIE'], true)
return res
}
// note: this doesnt cover anime which uses partially relative and partially absolute episode number, BUT IT COULD!
async function resolveSeason (opts) {
export async function resolveSeason (opts) {
// media, episode, increment, offset, force
if (!opts.media || !opts.episode) throw new Error('No episode or media for season resolve!')
@ -188,8 +188,8 @@ async function resolveSeason (opts) {
const rootHighest = (rootMedia.nextAiringEpisode?.episode || rootMedia.episodes)
const prequel = !increment && findEdge(media, 'PREQUEL', undefined, force)?.node
const sequel = !prequel && (increment || increment == null) && findEdge(media, 'SEQUEL', undefined, force)?.node
const prequel = !increment && findEdge(media, 'PREQUEL')?.node
const sequel = !prequel && (increment || increment == null) && findEdge(media, 'SEQUEL')?.node
const edge = prequel || sequel
increment = increment ?? !prequel