From cafb12f22ad304970a197a7dd793b599b16cd5f8 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Wed, 19 Apr 2023 21:44:49 +0200 Subject: [PATCH] Fix OFF for subtitles --- .../impl/MkvFileProcessor.java | 10 +++++++--- .../kernel/CoherentAttributeUpdaterKernel.java | 3 ++- .../model/FileInfoDto.java | 16 +++++++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java index 39c5956..2a8113d 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java @@ -111,9 +111,10 @@ public class MkvFileProcessor implements FileProcessor { Optional desiredAudio = detectDesiredTrack(config.getAudioLanguage(), audioTracks).findFirst(); Optional desiredSubtitle = detectDesiredSubtitleTrack(config.getSubtitleLanguage(), subtitleTracks).findFirst(); - if (desiredAudio.isPresent() && desiredSubtitle.isPresent()) { + if (desiredAudio.isPresent() && ("OFF".equals(config.getSubtitleLanguage()) || desiredSubtitle.isPresent())) { + info.setMatchedConfig(config); info.setDesiredAudioLane(desiredAudio.get()); - info.setDesiredSubtitleLane(desiredSubtitle.get()); + info.setDesiredSubtitleLane(desiredSubtitle.orElse(null)); break; } } @@ -169,7 +170,9 @@ public class MkvFileProcessor implements FileProcessor { sb.append(format(DISABLE_DEFAULT_TRACK, track.getId())); } } - sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredSubtitleLane().getId())); + if (fileInfo.getDesiredSubtitleLane() != null) { + sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredSubtitleLane().getId())); + } } if (fileInfo.areForcedTracksDifferent()) { @@ -178,6 +181,7 @@ public class MkvFileProcessor implements FileProcessor { } } + log.info(sb.toString()); InputStream inputstream = Runtime.getRuntime().exec(sb.toString()).getInputStream(); String output = IOUtils.toString(new InputStreamReader(inputstream)); log.debug(output); 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 9ade781..ef81d41 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/CoherentAttributeUpdaterKernel.java @@ -85,7 +85,8 @@ public class CoherentAttributeUpdaterKernel extends AttributeUpdaterKernel { processor.detectDesiredTracks(fileInfo, nonForcedTracks, nonCommentaryTracks, config); } - if (fileInfos.stream().allMatch(elem -> elem.getDesiredSubtitleLane() != null && elem.getDesiredAudioLane() != null)) { + if (fileInfos.stream().allMatch(elem -> ("OFF".equals(config.getSubtitleLanguage()) || elem.getDesiredSubtitleLane() != null) + && elem.getDesiredAudioLane() != null)) { log.info("Found {}/{} match for {}", config.getAudioLanguage(), config.getSubtitleLanguage(), file.getAbsolutePath()); fileInfos.forEach(this::updateFile); return; // match found, end process here diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java index e0e2239..b98c4d4 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java @@ -18,15 +18,25 @@ public class FileInfoDto { private Set desiredForcedSubtitleLanes; private FileAttribute desiredAudioLane; private FileAttribute desiredSubtitleLane; + private AttributeConfig matchedConfig; public boolean isAudioDifferent() { return desiredAudioLane != null && - (defaultAudioLanes == null || !defaultAudioLanes.contains(desiredAudioLane)); + (defaultAudioLanes == null || !defaultAudioLanes.contains(desiredAudioLane) || defaultAudioLanes.size() > 1); } public boolean isSubtitleDifferent() { - return desiredSubtitleLane != null && - (defaultSubtitleLanes == null || !defaultSubtitleLanes.contains(desiredSubtitleLane)); + return isSubtitleMatchDifferent() || isSubtitleOFF(); + } + + private boolean isSubtitleMatchDifferent() { + return desiredSubtitleLane != null + && (defaultSubtitleLanes == null || !defaultSubtitleLanes.contains(desiredSubtitleLane) || defaultAudioLanes.size() > 1); + } + + private boolean isSubtitleOFF() { + return desiredSubtitleLane == null && "OFF".equals(matchedConfig.getSubtitleLanguage()) && + (defaultAudioLanes != null || !defaultAudioLanes.isEmpty()); } public boolean areForcedTracksDifferent() {