fix(availability-sync): prevent incorrect season deletion when media server is unreachable (#2302)

This commit is contained in:
fallenbagel
2026-01-16 14:47:47 +05:00
committed by GitHub
parent 3f35b8c886
commit 448a25e2a4

View File

@@ -300,7 +300,6 @@ class AvailabilitySync {
// Sonarr finds that season, we will change the final seasons value // Sonarr finds that season, we will change the final seasons value
// to true. // to true.
const filteredSeasonsMap: Map<number, boolean> = new Map(); const filteredSeasonsMap: Map<number, boolean> = new Map();
media.seasons media.seasons
.filter( .filter(
(season) => (season) =>
@@ -311,48 +310,7 @@ class AvailabilitySync {
filteredSeasonsMap.set(season.seasonNumber, false) filteredSeasonsMap.set(season.seasonNumber, false)
); );
// non-4k
const finalSeasons: Map<number, boolean> = new Map();
if (mediaServerType === MediaServerType.PLEX) {
plexSeasonsMap.forEach((value, key) => {
finalSeasons.set(key, value);
});
filteredSeasonsMap.forEach((value, key) => {
if (!finalSeasons.has(key)) {
finalSeasons.set(key, value);
}
});
sonarrSeasonsMap.forEach((value, key) => {
if (!finalSeasons.has(key)) {
finalSeasons.set(key, value);
}
});
} else if (
mediaServerType === MediaServerType.JELLYFIN ||
mediaServerType === MediaServerType.EMBY
) {
jellyfinSeasonsMap.forEach((value, key) => {
finalSeasons.set(key, value);
});
filteredSeasonsMap.forEach((value, key) => {
if (!finalSeasons.has(key)) {
finalSeasons.set(key, value);
}
});
sonarrSeasonsMap.forEach((value, key) => {
if (!finalSeasons.has(key)) {
finalSeasons.set(key, value);
}
});
}
const filteredSeasonsMap4k: Map<number, boolean> = new Map(); const filteredSeasonsMap4k: Map<number, boolean> = new Map();
media.seasons media.seasons
.filter( .filter(
(season) => (season) =>
@@ -363,44 +321,32 @@ class AvailabilitySync {
filteredSeasonsMap4k.set(season.seasonNumber, false) filteredSeasonsMap4k.set(season.seasonNumber, false)
); );
// 4k let finalSeasons: Map<number, boolean>;
const finalSeasons4k: Map<number, boolean> = new Map(); let finalSeasons4k: Map<number, boolean>;
if (mediaServerType === MediaServerType.PLEX) { if (mediaServerType === MediaServerType.PLEX) {
plexSeasonsMap4k.forEach((value, key) => { finalSeasons = new Map([
finalSeasons4k.set(key, value); ...filteredSeasonsMap,
}); ...plexSeasonsMap,
...sonarrSeasonsMap,
filteredSeasonsMap4k.forEach((value, key) => { ]);
if (!finalSeasons4k.has(key)) { finalSeasons4k = new Map([
finalSeasons4k.set(key, value); ...filteredSeasonsMap4k,
} ...plexSeasonsMap4k,
}); ...sonarrSeasonsMap4k,
]);
sonarrSeasonsMap4k.forEach((value, key) => { } else {
if (!finalSeasons4k.has(key)) { // Jellyfin/Emby
finalSeasons4k.set(key, value); finalSeasons = new Map([
} ...filteredSeasonsMap,
}); ...jellyfinSeasonsMap,
} else if ( ...sonarrSeasonsMap,
mediaServerType === MediaServerType.JELLYFIN || ]);
mediaServerType === MediaServerType.EMBY finalSeasons4k = new Map([
) { ...filteredSeasonsMap4k,
jellyfinSeasonsMap4k.forEach((value, key) => { ...jellyfinSeasonsMap4k,
finalSeasons4k.set(key, value); ...sonarrSeasonsMap4k,
}); ]);
filteredSeasonsMap4k.forEach((value, key) => {
if (!finalSeasons4k.has(key)) {
finalSeasons4k.set(key, value);
}
});
sonarrSeasonsMap4k.forEach((value, key) => {
if (!finalSeasons4k.has(key)) {
finalSeasons4k.set(key, value);
}
});
} }
if ( if (
@@ -993,8 +939,8 @@ class AvailabilitySync {
existsInJellyfin = true; existsInJellyfin = true;
} }
} catch (ex) { } catch (ex) {
if (!ex.message.includes('404' || '500')) { if (!ex.message.includes('404') && !ex.message.includes('500')) {
existsInJellyfin = false; existsInJellyfin = true;
preventSeasonSearch = true; preventSeasonSearch = true;
logger.debug( logger.debug(
`Failure retrieving the ${is4k ? '4K' : 'non-4K'} ${ `Failure retrieving the ${is4k ? '4K' : 'non-4K'} ${