diff --git a/src/main/java/tv/mangrana/worker/FileCopier.java b/src/main/java/tv/mangrana/worker/FileCopier.java index d1e60f5..e83cfc9 100644 --- a/src/main/java/tv/mangrana/worker/FileCopier.java +++ b/src/main/java/tv/mangrana/worker/FileCopier.java @@ -25,7 +25,7 @@ class FileCopier { private void createDestinationFolderIfApply(Path destinationFile) throws IOException { var destinationFolder = destinationFile.getParent(); if (isTemporaryDestination(destinationFolder) && !Files.exists(destinationFolder)) { - System.out.printf("destination folder %s will be created", destinationFolder); + System.out.printf("destination folder %s will be created%n", destinationFolder); if (!ConfigLoader.isTestMode()) Files.createDirectories(destinationFile); } diff --git a/src/main/java/tv/mangrana/worker/QueueFixer.java b/src/main/java/tv/mangrana/worker/QueueFixer.java index f73c5cc..7944dc8 100644 --- a/src/main/java/tv/mangrana/worker/QueueFixer.java +++ b/src/main/java/tv/mangrana/worker/QueueFixer.java @@ -9,6 +9,8 @@ import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; public class QueueFixer { 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."; @@ -16,9 +18,12 @@ public class QueueFixer { private final SonarrApiGateway sonarrApiGateway; private final FailedImportFixer.Factory fixerFactory; + private final SonarrDeferredRefresher sonarrDeferredRefresher; + QueueFixer(SonarrApiGateway sonarGateway) { sonarrApiGateway = sonarGateway; fixerFactory = FailedImportFixer.factory(); + sonarrDeferredRefresher = new SonarrDeferredRefresher(); } void fix() { @@ -27,6 +32,7 @@ public class QueueFixer { var recordsToFix = filterFailedImportsOfIdProblem(distinctRecords); recordsToFix.forEach(this::try2FixFailedImport); cleanWorkedElementsFromQueue(sonarQueue, recordsToFix); + refreshSeries(recordsToFix); } private List retrieveQueueRecordsFromSonarr() { @@ -87,4 +93,11 @@ public class QueueFixer { .map(Record::getId) .toList(); } + + private void refreshSeries(List recordsToFix) { + Set seriesToRefresh = recordsToFix.stream() + .map(Record::getSeriesId) + .collect(Collectors.toSet()); + sonarrDeferredRefresher.refreshSeries(seriesToRefresh); + } } diff --git a/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java b/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java new file mode 100644 index 0000000..77611c5 --- /dev/null +++ b/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java @@ -0,0 +1,22 @@ +package tv.mangrana.worker; + +import tv.mangrana.config.ConfigLoader; +import tv.mangrana.sonarr.Sonarr; +import tv.mangrana.sonarr.api.client.gateway.SonarrApiGateway; + +import java.util.Set; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +public class SonarrDeferredRefresher { + private static final ScheduledExecutorService deferredRefresher = new ScheduledThreadPoolExecutor(1); + private final SonarrApiGateway sonarrApiGateway = Sonarr.api(); + public void refreshSeries(Set seriesToRefresh) { + for (var serieId : seriesToRefresh) { + Runnable refreshTask = () -> sonarrApiGateway.refreshSerie(serieId); + if (!ConfigLoader.isTestMode()) + deferredRefresher.schedule(refreshTask, 5, TimeUnit.SECONDS); + } + } +}