diff --git a/src/main/java/tv/mangrana/worker/FailedImportFixer.java b/src/main/java/tv/mangrana/worker/FailedImportFixer.java index a9dfe29..63c6a2d 100644 --- a/src/main/java/tv/mangrana/worker/FailedImportFixer.java +++ b/src/main/java/tv/mangrana/worker/FailedImportFixer.java @@ -7,13 +7,13 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; public class FailedImportFixer { public static final int MINIMUM_FILE_SIZE_TO_BE_CONSIDERED_A_VIDEO = 300000; private final Record queueRecord; private final SonarrSerie serie; + private final MissingFilesDetector missingFilesDetector = new MissingFilesDetector(); private FailedImportFixer(Record queueRecord, SonarrSerie serie) { this.queueRecord = queueRecord; @@ -29,11 +29,11 @@ public class FailedImportFixer { System.out.printf(">> located in: %s%n", queueRecord.getOutputPath()); var torrentPath = Path.of(queueRecord.getOutputPath()); - List torrentFiles = getVideoFilesFrom(torrentPath); var sonarPath = Path.of(serie.getPath()); + List torrentFiles = getVideoFilesFrom(torrentPath); List sonarFiles = getVideoFilesFrom(sonarPath); - printDifferencesBetween(torrentFiles, sonarFiles); + missingFilesDetector.printDifferencesBetween(torrentFiles, sonarFiles); } private List getVideoFilesFrom(Path torrentPath) throws IOException { @@ -45,14 +45,4 @@ public class FailedImportFixer { } } - private void printDifferencesBetween(List torrentFiles, List sonarrFiles) { - Map> torrentFileLengths = getFileLengthsMapFrom(torrentFiles); - Map> sonarrFileLengths = getFileLengthsMapFrom(sonarrFiles); - //TODO checks & prints - } - - private Map> getFileLengthsMapFrom(List files) { - return files.stream() - .collect(Collectors.groupingBy(p -> p.toFile().length())); - } } diff --git a/src/main/java/tv/mangrana/worker/MissingFilesDetector.java b/src/main/java/tv/mangrana/worker/MissingFilesDetector.java new file mode 100644 index 0000000..7a3f817 --- /dev/null +++ b/src/main/java/tv/mangrana/worker/MissingFilesDetector.java @@ -0,0 +1,51 @@ +package tv.mangrana.worker; + +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class MissingFilesDetector { + + void printDifferencesBetween(List torrentFiles, List sonarrFiles) { + Map> torrentFileLengths = getFileLengthsMapFrom(torrentFiles); + if (hasFilesWithSameSize(torrentFileLengths)) + return; + Map> sonarrFileLengths = getFileLengthsMapFrom(sonarrFiles); + if (hasFilesWithSameSize(sonarrFileLengths)) + return; + + torrentFileLengths.keySet().forEach(fileSize -> + takeDecisionForComparing(fileSize, torrentFileLengths)); + + } + + Map> getFileLengthsMapFrom(List files) { + return files.stream() + .collect(Collectors.groupingBy(p -> p.toFile().length())); + } + + boolean hasFilesWithSameSize(Map> torrentFileLengths) { + return torrentFileLengths + .values() + .stream() + .anyMatch(this::hasMultipleElements); + } + + boolean hasMultipleElements(List paths) { + if (paths.size() > 1) { + var sampleFile = paths.get(0).toFile(); + System.out.printf("There is more than one file with the same size of %s. Name: %s %n", + sampleFile.length(), sampleFile.getName()); + return true; + } + return false; + } + + void takeDecisionForComparing(Long fileSize, Map> torrentFileLengths) { + var alreadyExists = torrentFileLengths.containsKey(fileSize); + if (!alreadyExists) { + System.out.printf("- needs to copy %s%n", torrentFileLengths.get(fileSize)); + } + } +} \ No newline at end of file