fix miruro seasons

This commit is contained in:
janisslsm committed 2026-10-27 12:23:07 +02:00
1 parent 8c0fd70b7b
commit 07367a22d7
2 files changed
+46

No files matched your search

+13
View File
@@ -816,6 +816,19 @@ async function resolveSeasonEpisode(seed, mapping, identifier, season, episode)
if (fromTags) { if (fromTags) {
return { anime: seed, episode: fromTags }; return { anime: seed, episode: fromTags };
} }
const continuation = related.filter((anime) => !isMovieFormat(anime) && seasonOf(anime) != null && seasonOf(anime) >= requestedSeason && entryBelongsToRequest(anime, mapping, identifier)).sort((first, second) => seasonOf(first) - seasonOf(second) || clusterPosition(first) - clusterPosition(second));
let offset = 0;
for (const anime of continuation) {
const episodes = anime.id === seed.id ? seedEpisodes : await listEpisodes(anime.id);
if (episodes.length === 0) {
continue;
}
const index = requestedEpisode - 1 - offset;
if (index >= 0 && index < episodes.length) {
return { anime, episode: episodes[index] };
}
offset += episodes.length;
}
const local = seedEpisodes.find((item) => Number(item.episode_number) === requestedEpisode); const local = seedEpisodes.find((item) => Number(item.episode_number) === requestedEpisode);
return local ? { anime: seed, episode: local } : null; return local ? { anime: seed, episode: local } : null;
} }
+33
View File
@@ -446,6 +446,39 @@ async function resolveSeasonEpisode(seed, mapping, identifier, season, episode)
return { anime: seed, episode: fromTags }; return { anime: seed, episode: fromTags };
} }
// TMDB sometimes keeps one season while the catalog splits the same run
// into several seasons (The Ramparts of Ice: TMDB S1 episode 15 is catalog
// season 2 episode 1). Walk catalog seasons at or after the requested one
// in order, carrying an episode offset, so those episodes stay reachable.
const continuation = related
.filter((anime) => (
!isMovieFormat(anime) &&
seasonOf(anime) != null &&
seasonOf(anime) >= requestedSeason &&
entryBelongsToRequest(anime, mapping, identifier)
))
.sort((first, second) => (
seasonOf(first) - seasonOf(second) ||
clusterPosition(first) - clusterPosition(second)
));
let offset = 0;
for (const anime of continuation) {
const episodes = anime.id === seed.id ? seedEpisodes : await listEpisodes(anime.id);
if (episodes.length === 0) {
continue;
}
const index = requestedEpisode - 1 - offset;
if (index >= 0 && index < episodes.length) {
return { anime, episode: episodes[index] };
}
offset += episodes.length;
}
const local = seedEpisodes.find((item) => Number(item.episode_number) === requestedEpisode); const local = seedEpisodes.find((item) => Number(item.episode_number) === requestedEpisode);
return local ? { anime: seed, episode: local } : null; return local ? { anime: seed, episode: local } : null;