diff --git a/src/main/java/tv/mangrana/worker/FailedImportFixer.java b/src/main/java/tv/mangrana/worker/FailedImportFixer.java index 30d3519..6d14c29 100644 --- a/src/main/java/tv/mangrana/worker/FailedImportFixer.java +++ b/src/main/java/tv/mangrana/worker/FailedImportFixer.java @@ -3,20 +3,18 @@ package tv.mangrana.worker; import tv.mangrana.sonarr.api.schema.queue.Record; public class FailedImportFixer { - private final String elementTitle; private final Record queueRecord; - private FailedImportFixer(String elementTitle, Record queueRecord) { - this.elementTitle = elementTitle; + private FailedImportFixer(Record queueRecord) { this.queueRecord = queueRecord; } - static FailedImportFixer of(String elementTitle, Record queueRecord) { - return new FailedImportFixer(elementTitle, queueRecord); + static FailedImportFixer of(Record queueRecord) { + return new FailedImportFixer(queueRecord); } void fix() { - System.out.printf("fixing: %s%n",elementTitle); - System.out.printf(">> located in: %s%n%n",queueRecord.getOutputPath()); + System.out.printf("fixing: %s%n" ,queueRecord.getTitle()); + System.out.printf(">> located in: %s%n%n", queueRecord.getOutputPath()); } } diff --git a/src/main/java/tv/mangrana/worker/MainWorker.java b/src/main/java/tv/mangrana/worker/MainWorker.java index 3aa9770..267aea4 100644 --- a/src/main/java/tv/mangrana/worker/MainWorker.java +++ b/src/main/java/tv/mangrana/worker/MainWorker.java @@ -7,6 +7,11 @@ public class MainWorker { private final QueueFixer queueFixer; + public static void main(String[] args) throws IncorrectWorkingReferencesException { + var worker = new MainWorker(); + worker.work(); + } + public MainWorker() throws IncorrectWorkingReferencesException { ConfigFileLoader configFileLoader = new ConfigFileLoader(); queueFixer = new QueueFixer(configFileLoader); @@ -15,9 +20,4 @@ public class MainWorker { private void work() { queueFixer.fix(); } - - public static void main(String[] args) throws IncorrectWorkingReferencesException { - var worker = new MainWorker(); - worker.work(); - } } diff --git a/src/main/java/tv/mangrana/worker/QueueFixer.java b/src/main/java/tv/mangrana/worker/QueueFixer.java index 12334d2..7425e2f 100644 --- a/src/main/java/tv/mangrana/worker/QueueFixer.java +++ b/src/main/java/tv/mangrana/worker/QueueFixer.java @@ -4,13 +4,14 @@ import tv.mangrana.config.ConfigFileLoader; import tv.mangrana.sonarr.api.client.gateway.SonarrApiGateway; import tv.mangrana.sonarr.api.schema.queue.Record; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class QueueFixer { - final static String ID_IMPORT_FAILURE = "Found matching series via grab history, but release was matched to series by ID. Automatic import is not possible. See the FAQ for details."; + final static String IMPORT_FAILURE_BECAUSE_MATCHED_BY_ID = "Found matching series via grab history, but release was matched to series by ID. Automatic import is not possible. See the FAQ for details."; private final SonarrApiGateway sonarrApiGateway; QueueFixer(ConfigFileLoader configFileLoader) { @@ -18,30 +19,38 @@ public class QueueFixer { } void fix() { - var queue = sonarrApiGateway.getFullQueue(); - List recordsWithImportFailure = queue.getRecords().stream() - .filter(this::recordsWithImportFailure) - .collect(Collectors.toList()); - fixFailedImports(recordsWithImportFailure); + List sonarQueue = retrieveQueueRecordsFromSonarr(); + Collection records = deduplicate(sonarQueue); + List recordsToFix = filterFailedImportsOfIdProblem(records); + recordsToFix.forEach(this::fixFailedImport); } - private boolean recordsWithImportFailure(Record record) { + private List retrieveQueueRecordsFromSonarr() { + return sonarrApiGateway.getFullQueue().getRecords(); + } + + private Collection deduplicate(List repetitiveRecords) { + Map recordsByTitle = new HashMap<>(); + repetitiveRecords.forEach(record -> + recordsByTitle.putIfAbsent(record.getTitle(), record)); + return recordsByTitle.values(); + } + + private List filterFailedImportsOfIdProblem(Collection records) { + return records.stream() + .filter(this::recordsWithImportFailureBecauseIdMatching) + .collect(Collectors.toList()); + } + + private boolean recordsWithImportFailureBecauseIdMatching(Record record) { return record.getStatusMessages().stream() .flatMap(status -> status.getMessages().stream()) - .anyMatch(ID_IMPORT_FAILURE::equals); + .anyMatch(IMPORT_FAILURE_BECAUSE_MATCHED_BY_ID::equals); } - private void fixFailedImports(List recordsWithImportFailure) { - Map recordsByTitle = new HashMap<>(); - recordsWithImportFailure.forEach(record -> - recordsByTitle.putIfAbsent(record.getTitle(), record)); - - recordsByTitle.entrySet().forEach(this::fixFailedImport); - } - - private void fixFailedImport(Map.Entry recordEntry) { + private void fixFailedImport(Record record) { FailedImportFixer - .of(recordEntry.getKey(), recordEntry.getValue()) + .of(record) .fix(); }