Update yummyanime/yummyanime.js

This commit is contained in:
aka paul
2026-02-14 17:46:48 +00:00
parent 76c135dab9
commit 984881911e
+39 -7
View File
@@ -49,13 +49,14 @@ function _dubbingRank(name) {
const order = [ const order = [
"anilibria", "anilibria",
"ani libria", "aniliberty",
"jam", "jam",
"anidub", "anidub",
"ani dub",
"shiza", "shiza",
"studio band", "studio band",
"studioband",
"dream cast", "dream cast",
"dreamcast",
"crunchyroll", "crunchyroll",
"sub", "sub",
"субтит" "субтит"
@@ -178,7 +179,7 @@ async function extractEpisodes(animeIdOrUrl) {
}); });
// Group by episode number // 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) { for (const v of kodikVids) {
const num = parseFloat(v?.number) || 0; 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 } ? { start: v.skips.ending.time, stop: v.skips.ending.time + v.skips.ending.length }
: undefined; : 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; const duration = Number.isFinite(v?.duration) && v.duration > 0 ? v.duration : undefined;
if (!byNum.has(num)) { 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); const ep = byNum.get(num);
@@ -217,10 +238,15 @@ async function extractEpisodes(animeIdOrUrl) {
if (!ep.ending && ending) ep.ending = ending; if (!ep.ending && ending) ep.ending = ending;
if (!ep.duration && duration) ep.duration = duration; if (!ep.duration && duration) ep.duration = duration;
// keep first raw skips object if present
if (!ep.skips && skips) ep.skips = skips;
ep.options.push({ ep.options.push({
dubbing, dubbing,
player, player,
iframe_url: iframeUrl iframe_url: iframeUrl,
opening,
ending
}); });
} }
@@ -242,8 +268,14 @@ async function extractEpisodes(animeIdOrUrl) {
title: `Episode ${ep.num}` title: `Episode ${ep.num}`
}; };
if (ep.opening) item.opening = ep.opening; // Use skips from the first (sorted) voiceover option
if (ep.ending) item.ending = ep.ending; 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; if (ep.duration) item.duration = ep.duration;
return item; return item;