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;
}