diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileProcessor.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileProcessor.java index dff66fb..4364558 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileProcessor.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileProcessor.java @@ -1,6 +1,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; import at.pcgamingfreaks.mkvaudiosubtitlechanger.exceptions.MkvToolNixException; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfoDto; @@ -31,8 +32,14 @@ public interface FileProcessor { * @param info to be populated * @param nonForcedTracks List of all not forced tracks * @param nonCommentaryTracks List of all not commentary tracks + * @param configs */ - void detectDesiredTracks(FileInfoDto info, List nonForcedTracks, List nonCommentaryTracks); + void detectDesiredTracks(FileInfoDto info, List nonForcedTracks, List nonCommentaryTracks, + AttributeConfig... configs); + + List retrieveNonForcedTracks(List attributes); + + List retrieveNonCommentaryTracks(List attributes); /** * Update the file. diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java index 8bbd657..a5423f6 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java @@ -6,6 +6,7 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*; import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.SetUtils; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.core.util.IOUtils; import java.io.File; @@ -95,8 +96,9 @@ public class MkvFileProcessor implements FileProcessor { * {@inheritDoc} */ @Override - public void detectDesiredTracks(FileInfoDto info, List nonForcedTracks, List nonCommentaryTracks) { - for (AttributeConfig config : Config.getInstance().getAttributeConfig()) { + public void detectDesiredTracks(FileInfoDto info, List nonForcedTracks, List nonCommentaryTracks, + AttributeConfig... configs) { + for (AttributeConfig config : configs) { FileAttribute desiredAudio = null; FileAttribute desiredSubtitle = null; for (FileAttribute attribute : SetUtils.retainOf(nonForcedTracks, nonCommentaryTracks)) { @@ -113,6 +115,23 @@ public class MkvFileProcessor implements FileProcessor { } } + @Override + public List retrieveNonForcedTracks(List attributes) { + return attributes.stream() + .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), + Config.getInstance().getForcedKeywords().toArray(new CharSequence[0]))) + .filter(elem -> !elem.isForcedTrack()) + .collect(Collectors.toList()); + } + + @Override + public List retrieveNonCommentaryTracks(List attributes) { + return attributes.stream() + .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), + Config.getInstance().getCommentaryKeywords().toArray(new CharSequence[0]))) + .collect(Collectors.toList()); + } + /** * {@inheritDoc} */ diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java index 9ad07a7..1f0acf8 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java @@ -3,11 +3,16 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.FileCollector; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.FileProcessor; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfoDto; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.io.File; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Slf4j @@ -42,6 +47,43 @@ public class CoherentAttributeUpdaterKernel extends AttributeUpdaterKernel { */ @Override void process(File file) { + List fileInfos = collector.loadFiles(file.getAbsolutePath()) + .stream().map(FileInfoDto::new) + .collect(Collectors.toList()); + Map> fileAttributeCache = new HashMap<>(); + for (FileInfoDto fileInfo : fileInfos) { + if (!Config.getInstance().getIncludePattern().matcher(fileInfo.getFile().getAbsolutePath()).matches()) { + statistic.excluded(); + continue; + } + fileAttributeCache.put(fileInfo, processor.loadAttributes(fileInfo.getFile())); + } + + for (AttributeConfig config : Config.getInstance().getAttributeConfig()) { + for (FileInfoDto fileInfo : fileInfos) { + List attributes = fileAttributeCache.get(fileInfo); + + List nonForcedTracks = processor.retrieveNonForcedTracks(attributes); + List nonCommentaryTracks = processor.retrieveNonCommentaryTracks(attributes); + + processor.detectDefaultTracks(fileInfo, attributes, nonForcedTracks); + processor.detectDesiredTracks(fileInfo, nonForcedTracks, nonCommentaryTracks, config); + } + + if (fileInfos.stream().allMatch(elem -> elem.getDesiredSubtitleLane() != null && elem.getDesiredAudioLane() != null)) { + log.debug("Found {}/{} match for {}", config.getAudioLanguage(), config.getSubtitleLanguage(), file.getAbsolutePath()); + break; + } + + fileInfos.forEach(f -> { + f.setDesiredAudioLane(null); + f.setDesiredSubtitleLane(null); + }); + } + + // apply config + + // apply default process if nothing was found (if parameter is set) } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/DefaultAttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/DefaultAttributeUpdaterKernel.java index b40b8c5..e6ab6e7 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/DefaultAttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/DefaultAttributeUpdaterKernel.java @@ -39,16 +39,8 @@ public class DefaultAttributeUpdaterKernel extends AttributeUpdaterKernel { FileInfoDto fileInfo = new FileInfoDto(file); List attributes = processor.loadAttributes(file); - // TODO: extract this to a attributeProcessor? - List nonForcedTracks = attributes.stream() - .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), - Config.getInstance().getForcedKeywords().toArray(new CharSequence[0]))) - .filter(elem -> !elem.isForcedTrack()) - .collect(Collectors.toList()); - List nonCommentaryTracks = attributes.stream() - .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), - Config.getInstance().getCommentaryKeywords().toArray(new CharSequence[0]))) - .collect(Collectors.toList()); + List nonForcedTracks = processor.retrieveNonForcedTracks(attributes); + List nonCommentaryTracks = processor.retrieveNonCommentaryTracks(attributes); processor.detectDefaultTracks(fileInfo, attributes, nonForcedTracks); processor.detectDesiredTracks(fileInfo, nonForcedTracks, nonCommentaryTracks);