Fail closed on tracked series title mismatch

This commit is contained in:
sascha 2026-09-16 07:19:20 +02:00
parent e205763bba
commit 63a48d541a

View file

@ -2,7 +2,7 @@
* @name Sonarr - Trigger Manual Import * @name Sonarr - Trigger Manual Import
* @description Safely trigger Sonarr ManualImport for exactly one processed episode file. * @description Safely trigger Sonarr ManualImport for exactly one processed episode file.
* @author FileFlows + Sascha * @author FileFlows + Sascha
* @revision 12 * @revision 13
* @output Import erfolgreich * @output Import erfolgreich
* @output Fehler * @output Fehler
* @param {string} URL Sonarr root URL and port * @param {string} URL Sonarr root URL and port
@ -293,10 +293,24 @@ function resolvePackEpisode(matches, episodePattern, sonarr) {
.map(item => Number(item?.seriesId)) .map(item => Number(item?.seriesId))
.filter(Boolean) .filter(Boolean)
.filter((value, index, values) => values.indexOf(value) === index); .filter((value, index, values) => values.indexOf(value) === index);
if (seriesIds.length !== 1) return null; if (seriesIds.length !== 1) {
Logger.WLog('Tracked season-pack rows point to multiple series; refusing fallback parsing.');
return { conflict: true };
}
try { try {
const seriesId = seriesIds[0]; const seriesId = seriesIds[0];
const trackedSeries = sonarr.fetchJson(`series/${seriesId}`) || {};
const cleanTitle = normalizeReleaseTitle(trackedSeries.cleanTitle || trackedSeries.title || '');
const normalizedPattern = normalizeReleaseTitle(episodePattern);
if (!cleanTitle || !normalizedPattern.startsWith(cleanTitle)) {
Logger.WLog(
`Tracked release title '${episodePattern}' does not match Sonarr series `
+ `'${trackedSeries.title || seriesId}'; refusing fallback parsing.`
);
return { conflict: true };
}
const query = buildQueryParams({ seriesId }); const query = buildQueryParams({ seriesId });
const episodes = sonarr.fetchJson('episode', query) || []; const episodes = sonarr.fetchJson('episode', query) || [];
const candidates = episodes.filter(item => const candidates = episodes.filter(item =>