From 0a7996f0495a7defbc4b63fe97a8da274edfe770 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Fri, 24 May 2024 01:09:11 +0200 Subject: [PATCH] Remove forced audio tracks & minor refactoring --- pom.xml | 2 +- .../impl/MkvFileProcessor.java | 51 ++++++++++--------- .../CoherentAttributeUpdaterKernel.java | 10 ++-- .../model/FileInfoDto.java | 41 ++++++++------- .../util/TestUtil.java | 8 +-- 5 files changed, 59 insertions(+), 53 deletions(-) diff --git a/pom.xml b/pom.xml index 7e31377..575e36e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ at.pcgamingfreaks MKVAudioSubtitleChanger - 3.0.1 + 3.0.2 clean package diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java index ec0ac0f..f57d66a 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java @@ -30,6 +30,7 @@ public class MkvFileProcessor implements FileProcessor { private static final String DISABLE_DEFAULT_TRACK = "--edit track:%s --set flag-default=0 "; private static final String ENABLE_DEFAULT_TRACK = "--edit track:%s --set flag-default=1 "; + private static final String DISABLE_FORCED_TRACK = "--edit track:%s --set flag-forced=0 "; private static final String ENABLE_FORCED_TRACK = "--edit track:%s --set flag-forced=1 "; @SuppressWarnings("unchecked") @@ -69,8 +70,8 @@ public class MkvFileProcessor implements FileProcessor { log.debug(fileAttributes.toString()); } catch (IOException e) { - e.printStackTrace(); - log.error("File could not be found or loaded!"); + log.error("File could not be found or loaded: ", e); + System.out.println("File could not be found or loaded: " + file.getAbsolutePath()); } return fileAttributes; } @@ -80,21 +81,17 @@ public class MkvFileProcessor implements FileProcessor { */ @Override public void detectDefaultTracks(FileInfoDto info, List attributes, List nonForcedTracks) { - Set detectedForcedSubtitleLanes = new HashSet<>(); for (FileAttribute attribute : attributes) { - if (attribute.isDefaultTrack() && AUDIO.equals(attribute.getType())) - info.getDefaultAudioLanes().add(attribute); - if (attribute.isDefaultTrack() && SUBTITLES.equals(attribute.getType())) - info.getDefaultSubtitleLanes().add(attribute); - if (attribute.isForcedTrack() && SUBTITLES.equals(attribute.getType())) - detectedForcedSubtitleLanes.add(attribute); - } + if (AUDIO.equals(attribute.getType())) { + if (attribute.isDefaultTrack()) info.getExistingDefaultAudioLanes().add(attribute); + if (attribute.isForcedTrack()) info.getExistingForcedAudioLanes().add(attribute); + } else if (SUBTITLES.equals(attribute.getType())) { + if (attribute.isDefaultTrack()) info.getExistingDefaultSubtitleLanes().add(attribute); - info.setDesiredForcedSubtitleLanes(attributes.stream() - .filter(e -> !nonForcedTracks.contains(e)) - .filter(e -> !detectedForcedSubtitleLanes.contains(e)) - .collect(Collectors.toSet()) - ); + if (attribute.isForcedTrack()) info.getExistingForcedSubtitleLanes().add(attribute); + else if (!nonForcedTracks.contains(attribute)) info.getDesiredForcedSubtitleLanes().add(attribute); + } + } } /** @@ -113,8 +110,8 @@ public class MkvFileProcessor implements FileProcessor { if (desiredAudio.isPresent() && ("OFF".equals(config.getSubtitleLanguage()) || desiredSubtitle.isPresent())) { info.setMatchedConfig(config); - info.setDesiredAudioLane(desiredAudio.get()); - info.setDesiredSubtitleLane(desiredSubtitle.orElse(null)); + info.setDesiredDefaultAudioLane(desiredAudio.get()); + info.setDesiredDefaultSubtitleLane(desiredSubtitle.orElse(null)); break; } } @@ -156,22 +153,28 @@ public class MkvFileProcessor implements FileProcessor { sb.append(format("\"%s\" ", file.getAbsolutePath())); if (fileInfo.isAudioDifferent()) { - if (fileInfo.getDefaultAudioLanes() != null && !fileInfo.getDefaultAudioLanes().isEmpty()) { - for (FileAttribute track: fileInfo.getDefaultAudioLanes()) { + if (fileInfo.getExistingDefaultAudioLanes() != null && !fileInfo.getExistingDefaultAudioLanes().isEmpty()) { + for (FileAttribute track: fileInfo.getExistingDefaultAudioLanes()) { sb.append(format(DISABLE_DEFAULT_TRACK, track.getId())); } } - sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredAudioLane().getId())); + sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredDefaultAudioLane().getId())); + } + + if (!fileInfo.getExistingForcedAudioLanes().isEmpty()) { + for (FileAttribute track: fileInfo.getExistingForcedAudioLanes()) { + sb.append(format(DISABLE_FORCED_TRACK, track.getId())); + } } if (fileInfo.isSubtitleDifferent()) { - if (fileInfo.getDefaultSubtitleLanes() != null && !fileInfo.getDefaultSubtitleLanes().isEmpty()) { - for (FileAttribute track: fileInfo.getDefaultSubtitleLanes()) { + if (fileInfo.getExistingDefaultSubtitleLanes() != null && !fileInfo.getExistingDefaultSubtitleLanes().isEmpty()) { + for (FileAttribute track: fileInfo.getExistingDefaultSubtitleLanes()) { sb.append(format(DISABLE_DEFAULT_TRACK, track.getId())); } } - if (fileInfo.getDesiredSubtitleLane() != null) { - sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredSubtitleLane().getId())); + if (fileInfo.getDesiredDefaultSubtitleLane() != null) { + sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredDefaultSubtitleLane().getId())); } } 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 ef81d41..0a5c12b 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java @@ -11,9 +11,7 @@ import me.tongfei.progressbar.ProgressBarBuilder; 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 @@ -85,16 +83,16 @@ public class CoherentAttributeUpdaterKernel extends AttributeUpdaterKernel { processor.detectDesiredTracks(fileInfo, nonForcedTracks, nonCommentaryTracks, config); } - if (fileInfos.stream().allMatch(elem -> ("OFF".equals(config.getSubtitleLanguage()) || elem.getDesiredSubtitleLane() != null) - && elem.getDesiredAudioLane() != null)) { + if (fileInfos.stream().allMatch(elem -> ("OFF".equals(config.getSubtitleLanguage()) || elem.getDesiredDefaultSubtitleLane() != null) + && elem.getDesiredDefaultAudioLane() != null)) { log.info("Found {}/{} match for {}", config.getAudioLanguage(), config.getSubtitleLanguage(), file.getAbsolutePath()); fileInfos.forEach(this::updateFile); return; // match found, end process here } fileInfos.forEach(f -> { - f.setDesiredAudioLane(null); - f.setDesiredSubtitleLane(null); + f.setDesiredDefaultAudioLane(null); + f.setDesiredDefaultSubtitleLane(null); }); } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java index 8037fd9..bd6abc6 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java @@ -13,16 +13,21 @@ import java.util.Set; @RequiredArgsConstructor public class FileInfoDto { private final File file; - private Set defaultAudioLanes = new HashSet<>(); - private Set defaultSubtitleLanes = new HashSet<>(); - private Set desiredForcedSubtitleLanes; - private FileAttribute desiredAudioLane; - private FileAttribute desiredSubtitleLane; + + private Set existingDefaultAudioLanes = new HashSet<>(); + private Set existingForcedAudioLanes = new HashSet<>(); + + private Set existingDefaultSubtitleLanes = new HashSet<>(); + private Set existingForcedSubtitleLanes = new HashSet<>(); + + private Set desiredForcedSubtitleLanes = new HashSet<>(); + private FileAttribute desiredDefaultAudioLane; + private FileAttribute desiredDefaultSubtitleLane; private AttributeConfig matchedConfig; public boolean isAudioDifferent() { - return desiredAudioLane != null && - (defaultAudioLanes == null || !defaultAudioLanes.contains(desiredAudioLane) || defaultAudioLanes.size() > 1); + return desiredDefaultAudioLane != null && + (existingDefaultAudioLanes == null || !existingDefaultAudioLanes.contains(desiredDefaultAudioLane) || existingDefaultAudioLanes.size() > 1); } public boolean isSubtitleDifferent() { @@ -30,13 +35,13 @@ public class FileInfoDto { } private boolean isSubtitleMatchDifferent() { - return desiredSubtitleLane != null - && (defaultSubtitleLanes == null || !defaultSubtitleLanes.contains(desiredSubtitleLane) || defaultSubtitleLanes.size() > 1); + return desiredDefaultSubtitleLane != null + && (existingDefaultSubtitleLanes == null || !existingDefaultSubtitleLanes.contains(desiredDefaultSubtitleLane) || existingDefaultSubtitleLanes.size() > 1); } private boolean isSubtitleOFF() { - return desiredSubtitleLane == null && "OFF".equals(matchedConfig.getSubtitleLanguage()) && - (defaultSubtitleLanes != null && !defaultSubtitleLanes.isEmpty()); + return desiredDefaultSubtitleLane == null && "OFF".equals(matchedConfig.getSubtitleLanguage()) && + (existingDefaultSubtitleLanes != null && !existingDefaultSubtitleLanes.isEmpty()); } public boolean areForcedTracksDifferent() { @@ -51,24 +56,24 @@ public class FileInfoDto { } private boolean isUnableToApplyConfig() { - return desiredAudioLane == null && desiredSubtitleLane == null; + return desiredDefaultAudioLane == null && desiredDefaultSubtitleLane == null; } private boolean isAlreadySuitable() { - return defaultAudioLanes.contains(desiredAudioLane) && defaultSubtitleLanes.contains(desiredSubtitleLane); + return existingDefaultAudioLanes.contains(desiredDefaultAudioLane) && existingDefaultSubtitleLanes.contains(desiredDefaultSubtitleLane); } private boolean isChangeNecessary() { - return isAudioDifferent() || isSubtitleDifferent() || areForcedTracksDifferent(); + return isAudioDifferent() || isSubtitleDifferent() || areForcedTracksDifferent() || !existingForcedSubtitleLanes.isEmpty(); } @Override public String toString() { - return "[" + "defaultAudioLanes=" + defaultAudioLanes + - ", defaultSubtitleLanes=" + defaultSubtitleLanes + + return "[" + "defaultAudioLanes=" + existingDefaultAudioLanes + + ", defaultSubtitleLanes=" + existingDefaultSubtitleLanes + ", desiredForcedSubtitleLanes=" + desiredForcedSubtitleLanes + - ", desiredAudioLane=" + desiredAudioLane + - ", desiredSubtitleLane=" + desiredSubtitleLane + + ", desiredAudioLane=" + desiredDefaultAudioLane + + ", desiredSubtitleLane=" + desiredDefaultSubtitleLane + ']'; } } diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java index 960e383..0c08e15 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java @@ -31,15 +31,15 @@ public class TestUtil { public static FileInfoDto createFileInfo(Set defaultAudio, FileAttribute desiredAudio) { FileInfoDto fileInfoDto = new FileInfoDto(null); - fileInfoDto.setDefaultAudioLanes(defaultAudio); - fileInfoDto.setDesiredAudioLane(desiredAudio); + fileInfoDto.setExistingDefaultAudioLanes(defaultAudio); + fileInfoDto.setDesiredDefaultAudioLane(desiredAudio); return fileInfoDto; } public static FileInfoDto createFileInfo(Set defaultSubtitle, FileAttribute desiredSubtitle, AttributeConfig config) { FileInfoDto fileInfoDto = new FileInfoDto(null); - fileInfoDto.setDefaultSubtitleLanes(defaultSubtitle); - fileInfoDto.setDesiredSubtitleLane(desiredSubtitle); + fileInfoDto.setExistingDefaultSubtitleLanes(defaultSubtitle); + fileInfoDto.setDesiredDefaultSubtitleLane(desiredSubtitle); fileInfoDto.setMatchedConfig(config); return fileInfoDto; }