diff --git a/src/main/java/tv/mangrana/worker/FailedImportFixer.java b/src/main/java/tv/mangrana/worker/FailedImportFixer.java index 5b8f2a2..18e0a69 100644 --- a/src/main/java/tv/mangrana/worker/FailedImportFixer.java +++ b/src/main/java/tv/mangrana/worker/FailedImportFixer.java @@ -45,7 +45,7 @@ public class FailedImportFixer { } private List resolveTorrentFiles() throws IOException { - return getVideoFilesFrom(Path.of(queueRecord.getOutputPath())); + return getVideoFilesFrom(torrentPath); } private List resolveSonarrFiles() throws IOException { diff --git a/src/main/java/tv/mangrana/worker/MissingFilesDetector.java b/src/main/java/tv/mangrana/worker/MissingFilesDetector.java index 92ec98f..cbcf583 100644 --- a/src/main/java/tv/mangrana/worker/MissingFilesDetector.java +++ b/src/main/java/tv/mangrana/worker/MissingFilesDetector.java @@ -8,18 +8,24 @@ import java.util.stream.Collectors; public class MissingFilesDetector { private Map> sonarrFilesByLength; + private Map> torrentFileLengths; List getMissingFilesAtDestination(List torrentFiles, List sonarrFiles) { System.out.printf("going to compare %d torrent files with %d sonar files%n", torrentFiles.size(), sonarrFiles.size()); - Map> torrentFileLengths = getFileLengthsMapFrom(torrentFiles); - if (hasFilesWithSameSize(torrentFileLengths)) - return torrentFiles; - sonarrFilesByLength = getFileLengthsMapFrom(sonarrFiles); - if (hasFilesWithSameSize(sonarrFilesByLength)) - return torrentFiles; + digestTorrentFiles(torrentFiles); + digestSonarrFiles(sonarrFiles); + return resolveMissingFiles(); + } - return resolveMissingFiles(torrentFileLengths); + private void digestTorrentFiles(List torrentFiles) { + torrentFileLengths = getFileLengthsMapFrom(torrentFiles); + throwIfDuplicatedSizes(torrentFileLengths); + } + + private void digestSonarrFiles(List sonarrFiles) { + sonarrFilesByLength = getFileLengthsMapFrom(sonarrFiles); + throwIfDuplicatedSizes(sonarrFilesByLength); } Map> getFileLengthsMapFrom(List files) { @@ -27,6 +33,11 @@ public class MissingFilesDetector { .collect(Collectors.groupingBy(p -> p.toFile().length())); } + private void throwIfDuplicatedSizes(Map> torrentFileLengths) { + if (hasFilesWithSameSize(torrentFileLengths)) + throw new InsecureScenario(); + } + boolean hasFilesWithSameSize(Map> torrentFileLengths) { return torrentFileLengths .values() @@ -44,8 +55,8 @@ public class MissingFilesDetector { return false; } - private List resolveMissingFiles(Map> torrentFilesByLength) { - return torrentFilesByLength.entrySet() + private List resolveMissingFiles() { + return torrentFileLengths.entrySet() .stream() .filter(this::missingAtDestination) .map(Map.Entry::getValue) @@ -57,4 +68,5 @@ public class MissingFilesDetector { return !sonarrFilesByLength.containsKey(torrentFileEntry.getKey()); } + private static final class InsecureScenario extends RuntimeException {} } \ No newline at end of file diff --git a/src/main/java/tv/mangrana/worker/QueueFixer.java b/src/main/java/tv/mangrana/worker/QueueFixer.java index d38ac81..601fdeb 100644 --- a/src/main/java/tv/mangrana/worker/QueueFixer.java +++ b/src/main/java/tv/mangrana/worker/QueueFixer.java @@ -10,7 +10,6 @@ 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 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."; @@ -43,7 +42,7 @@ public class QueueFixer { private List filterFailedImportsOfIdProblem(Collection records) { return records.stream() .filter(this::recordsWithImportFailureBecauseIdMatching) - .collect(Collectors.toList()); + .toList(); } private boolean recordsWithImportFailureBecauseIdMatching(Record record) {