forked from 50n50/sources
Update yummyanime/yummyanime.js
This commit is contained in:
@@ -49,13 +49,14 @@ function _dubbingRank(name) {
|
||||
|
||||
const order = [
|
||||
"anilibria",
|
||||
"ani libria",
|
||||
"aniliberty",
|
||||
"jam",
|
||||
"anidub",
|
||||
"ani dub",
|
||||
"shiza",
|
||||
"studio band",
|
||||
"studioband",
|
||||
"dream cast",
|
||||
"dreamcast",
|
||||
"crunchyroll",
|
||||
"sub",
|
||||
"субтит"
|
||||
@@ -178,7 +179,7 @@ async function extractEpisodes(animeIdOrUrl) {
|
||||
});
|
||||
|
||||
// Group by episode number
|
||||
const byNum = new Map(); // num -> { num, options: [...], opening?, ending?, duration? }
|
||||
const byNum = new Map(); // num -> { num, options: [...], opening?, ending?, duration?, skips? }
|
||||
|
||||
for (const v of kodikVids) {
|
||||
const num = parseFloat(v?.number) || 0;
|
||||
@@ -204,10 +205,30 @@ async function extractEpisodes(animeIdOrUrl) {
|
||||
? { start: v.skips.ending.time, stop: v.skips.ending.time + v.skips.ending.length }
|
||||
: undefined;
|
||||
|
||||
// raw timecode format (time + length)
|
||||
const skips =
|
||||
(v?.skips?.opening && Number.isFinite(v.skips.opening.time) && Number.isFinite(v.skips.opening.length)) ||
|
||||
(v?.skips?.ending && Number.isFinite(v.skips.ending.time) && Number.isFinite(v.skips.ending.length))
|
||||
? {
|
||||
opening:
|
||||
v?.skips?.opening &&
|
||||
Number.isFinite(v.skips.opening.time) &&
|
||||
Number.isFinite(v.skips.opening.length)
|
||||
? { time: v.skips.opening.time, length: v.skips.opening.length }
|
||||
: null,
|
||||
ending:
|
||||
v?.skips?.ending &&
|
||||
Number.isFinite(v.skips.ending.time) &&
|
||||
Number.isFinite(v.skips.ending.length)
|
||||
? { time: v.skips.ending.time, length: v.skips.ending.length }
|
||||
: null
|
||||
}
|
||||
: undefined;
|
||||
|
||||
const duration = Number.isFinite(v?.duration) && v.duration > 0 ? v.duration : undefined;
|
||||
|
||||
if (!byNum.has(num)) {
|
||||
byNum.set(num, { num, options: [], opening, ending, duration });
|
||||
byNum.set(num, { num, options: [], opening, ending, duration, skips });
|
||||
}
|
||||
|
||||
const ep = byNum.get(num);
|
||||
@@ -217,10 +238,15 @@ async function extractEpisodes(animeIdOrUrl) {
|
||||
if (!ep.ending && ending) ep.ending = ending;
|
||||
if (!ep.duration && duration) ep.duration = duration;
|
||||
|
||||
// keep first raw skips object if present
|
||||
if (!ep.skips && skips) ep.skips = skips;
|
||||
|
||||
ep.options.push({
|
||||
dubbing,
|
||||
player,
|
||||
iframe_url: iframeUrl
|
||||
iframe_url: iframeUrl,
|
||||
opening,
|
||||
ending
|
||||
});
|
||||
}
|
||||
|
||||
@@ -242,8 +268,14 @@ async function extractEpisodes(animeIdOrUrl) {
|
||||
title: `Episode ${ep.num}`
|
||||
};
|
||||
|
||||
if (ep.opening) item.opening = ep.opening;
|
||||
if (ep.ending) item.ending = ep.ending;
|
||||
// Use skips from the first (sorted) voiceover option
|
||||
const primary = ep.options[0];
|
||||
if (primary?.opening) item.opening = primary.opening;
|
||||
if (primary?.ending) item.ending = primary.ending;
|
||||
|
||||
// raw timecodes (time + length)
|
||||
if (ep.skips) item.skips = ep.skips;
|
||||
|
||||
if (ep.duration) item.duration = ep.duration;
|
||||
|
||||
return item;
|
||||
|
||||
Reference in New Issue
Block a user