Compare commits

..
5 Commits
Author SHA1 Message Date
Quentin Robert c47001c580 Merge pull request #147 from Masutayunikon/release-please--branches--main
chore(main): release 3.23.1
2026-09-12 02:37:42 +02:00
Quentin Robert 529173a472 chore(main): release 3.23.1 2026-09-12 02:37:19 +02:00
Quentin Robert f64d2e19f7 Merge pull request #146 from Nackophilz/main
fix(scrap): Correction fallback si scraper KO
2026-09-12 02:36:56 +02:00
ElPouki 6348cc40cb fix(scrap): Correction fallback si scraper KO 2026-09-11 23:36:28 +02:00
github-actions[bot] 66a4675321 chore: update version.txt to v3.23.0 2026-09-11 21:29:00 +00:00
5 changed files with 18 additions and 14 deletions

No files matched your search

+8
View File
@@ -1,5 +1,13 @@
# Changelog
## [3.23.1](https://github.com/Masutayunikon/FanKarr/compare/v3.23.0...v3.23.1) (2026-09-12)
### Bug Fixes
* **scrap:** Correction fallback si scraper KO ([f64d2e1](https://github.com/Masutayunikon/FanKarr/commit/f64d2e19f7f9ab838cee6d33f5523fabb22b5cf7))
* **scrap:** Correction fallback si scraper KO ([6348cc4](https://github.com/Masutayunikon/FanKarr/commit/6348cc40cb42dd23e3b3e77aa1e96f813b9d2687))
## [3.23.0](https://github.com/Masutayunikon/FanKarr/compare/v3.22.0...v3.23.0) (2026-09-11)
+3 -2
View File
@@ -109,10 +109,11 @@ function readOrganized(): Record<string, Record<string, any>> {
function getOrganizedEpisodeIds(sd: any, organized: Record<string, Record<string, any>>): Set<number> {
const ids = new Set<number>()
const manual = organized['manual'] ?? {}
// Sous n'importe quel hash : évite de retélécharger un épisode importé via un torrent disparu du scraper
const tracked = new Set(Object.values(organized).flatMap(eps => Object.keys(eps)))
for (const season of sd.seasons ?? [])
for (const ep of season.episodes ?? [])
if (manual[String(ep.id)]) ids.add(ep.id)
if (tracked.has(String(ep.id))) ids.add(ep.id)
for (const t of sd.torrents ?? []) {
const orgFiles = organized[t.infohash?.toLowerCase()] ?? {}
+3 -9
View File
@@ -246,15 +246,9 @@ export function computeSerieDownloadState(serieData: any | null, organized: Reco
}
}
const manualOrg = organized['manual'] ?? {}
for (const season of serieData.seasons ?? []) {
for (const ep of season.episodes ?? []) {
if (manualOrg[String(ep.id)]) {
const key = epIdToKey.get(ep.id)
if (key) organizedEpKeys.add(key)
}
}
}
const trackedIds = new Set(Object.values(organized).flatMap(eps => Object.keys(eps)))
for (const [id, key] of epIdToKey)
if (trackedIds.has(String(id))) organizedEpKeys.add(key)
if (uniqueEpKeys.size === 0 || organizedEpKeys.size === 0) return 'none'
if (organizedEpKeys.size >= uniqueEpKeys.size) return 'complete'
+3 -2
View File
@@ -58,10 +58,11 @@ router.get('/series/:id', requireAuth, async (req, res) => {
const integraleTorrents : any[] = []
const organizedEpisodeIds = new Set<number>()
const manualOrg = organized['manual'] ?? {}
// Importé = une entrée pour l'épisode sous n'importe quel hash : les torrents du scraper peuvent disparaître
const trackedIds = new Set(Object.values(organized).flatMap(eps => Object.keys(eps)))
for (const season of seasonsWithEpisodes) {
for (const ep of season.episodes) {
if (manualOrg[String(ep.id)]) organizedEpisodeIds.add(ep.id)
if (trackedIds.has(String(ep.id))) organizedEpisodeIds.add(ep.id)
}
}
if (serieData) {
+1 -1
View File
@@ -1 +1 @@
3.23.0
3.23.1