Compare commits

...
4 Commits
2 changed files with 41 additions and 12 deletions

No files matched your search

+7
View File
@@ -1,5 +1,12 @@
# Changelog # Changelog
## [2.3.3](https://github.com/Masutayunikon/FanKarr/compare/v2.3.2...v2.3.3) (2026-03-24)
### Bug Fixes
* recuperation des episodes avec un delai ([dfc6c13](https://github.com/Masutayunikon/FanKarr/commit/dfc6c1300e3dd8323e422ce3e71465bac77f94cf))
## [2.3.2](https://github.com/Masutayunikon/FanKarr/compare/v2.3.1...v2.3.2) (2026-03-24) ## [2.3.2](https://github.com/Masutayunikon/FanKarr/compare/v2.3.1...v2.3.2) (2026-03-24)
+34 -12
View File
@@ -279,16 +279,36 @@ function normalizeEpisode(ep: any): any {
// Fetche /seasons/{id}/episodes pour chaque saison et injecte original_filename // Fetche /seasons/{id}/episodes pour chaque saison et injecte original_filename
// dans chaque épisode du serieData, indexé par episode_id // dans chaque épisode du serieData, indexé par episode_id
async function enrichSeriesDataWithOriginalFilenames(seriesData: any[]): Promise<any[]> { async function enrichSeriesDataWithOriginalFilenames(seriesData: any[]): Promise<any[]> {
return Promise.all(seriesData.map(async (sd) => { const results: any[] = []
if (!sd) return sd
const enrichedSeasons = await Promise.all((sd.seasons ?? []).map(async (season: any) => { for (const sd of seriesData) {
if (!sd) { results.push(sd); continue }
const enrichedSeasons: any[] = []
for (const season of sd.seasons ?? []) {
let epsData: any[] = [] let epsData: any[] = []
try { try {
const res = await fankaiGet(`/seasons/${season.id}/episodes`) // 2 tentatives en cas d'erreur réseau ponctuelle
epsData = Array.isArray(res) ? res : (res.episodes ?? []) let lastErr: any
} catch { return season } for (let attempt = 0; attempt < 2; attempt++) {
try {
const res = await fankaiGet(`/seasons/${season.id}/episodes`)
epsData = Array.isArray(res) ? res : (res.episodes ?? [])
break
} catch (e) {
lastErr = e
if (attempt === 0) await new Promise(r => setTimeout(r, 500))
}
}
if (epsData.length === 0 && lastErr) throw lastErr
} catch {
enrichedSeasons.push(season)
continue
}
// Petit délai pour ne pas saturer l'API
await new Promise(r => setTimeout(r, 50))
// Index episode_id → original_filename + formatted_name
const origMap = new Map<number, { original_filename: string; formatted_name: string }>() const origMap = new Map<number, { original_filename: string; formatted_name: string }>()
for (const ep of epsData) { for (const ep of epsData) {
if (ep.id) origMap.set(ep.id, { if (ep.id) origMap.set(ep.id, {
@@ -297,17 +317,19 @@ async function enrichSeriesDataWithOriginalFilenames(seriesData: any[]): Promise
}) })
} }
// Injecter dans les épisodes du serieData
const enrichedEpisodes = (season.episodes ?? []).map((ep: any) => ({ const enrichedEpisodes = (season.episodes ?? []).map((ep: any) => ({
...ep, ...ep,
original_filename: origMap.get(ep.id)?.original_filename ?? null, original_filename: origMap.get(ep.id)?.original_filename ?? null,
formatted_name : origMap.get(ep.id)?.formatted_name ?? null, formatted_name : origMap.get(ep.id)?.formatted_name ?? null,
})) }))
return { ...season, episodes: enrichedEpisodes } enrichedSeasons.push({ ...season, episodes: enrichedEpisodes })
})) }
return { ...sd, seasons: enrichedSeasons }
})) results.push({ ...sd, seasons: enrichedSeasons })
}
return results
} }
// Helper réutilisable : charge + enrichit toutes les seriesData du cache // Helper réutilisable : charge + enrichit toutes les seriesData du cache