diff --git a/.github/ISSUE_TEMPLATE/default-bug-report.md b/.github/ISSUE_TEMPLATE/default-bug-report.md index e8b0645..a9fe01e 100644 --- a/.github/ISSUE_TEMPLATE/default-bug-report.md +++ b/.github/ISSUE_TEMPLATE/default-bug-report.md @@ -8,19 +8,16 @@ assignees: RatzzFatzz --- **Environment** - Java Version: [e.g. 8, 11, 17] - MKV Audio Subtitle Changer version: [e.g. v1.1, v2.0] **Describe the bug** - A clear and concise description of what the bug is. **Expected behavior** - A clear and concise description of what you expected to happen. **Additional context** - Add any other context about the problem here. + +### Please attach logs diff --git a/.github/ISSUE_TEMPLATE/default-feature-request.md b/.github/ISSUE_TEMPLATE/default-feature-request.md index 3aad13b..995d547 100644 --- a/.github/ISSUE_TEMPLATE/default-feature-request.md +++ b/.github/ISSUE_TEMPLATE/default-feature-request.md @@ -7,6 +7,5 @@ labels: feature-request --- **Describe your feature** - A clear and concise description of the expected behaviour. diff --git a/README.md b/README.md index 95de9a9..3ac781c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This program helps to change audio and subtitle lines of mkv files. ### Requirements - - Java 8 or higher + - Java 11 or higher - mkvtoolnix installation ### Running diff --git a/pom.xml b/pom.xml index ac31c61..858dec5 100644 --- a/pom.xml +++ b/pom.xml @@ -32,14 +32,6 @@ - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - org.apache.maven.plugins maven-jar-plugin diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java new file mode 100644 index 0000000..94f5012 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java @@ -0,0 +1,13 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; + +public class FileFilter { + static boolean accept(File pathName, String[] fileExtensions) { + return StringUtils.endsWithAny(pathName.getAbsolutePath().toLowerCase(), fileExtensions) + && Config.getInstance().getIncludePattern().matcher(pathName.getName()).matches(); + } +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileCollector.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileCollector.java index 0023dce..cdd739e 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileCollector.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileCollector.java @@ -1,6 +1,5 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import lombok.extern.log4j.Log4j2; import java.io.File; @@ -15,27 +14,17 @@ import java.util.stream.Stream; @Log4j2 public class MkvFileCollector implements FileCollector { + private static final String[] fileExtensions = new String[]{".mkv", ".mka", ".mks", ".mk3d"}; @Override public List loadFiles(String path) { - File file = new File(path); - if (file.isFile() && file.getAbsolutePath().endsWith(".mkv")) { - return new ArrayList<>() {{ - add(file); - }}; - } else if (file.isDirectory()) { - try (Stream paths = Files.walk(Paths.get(path))) { - return paths - .filter(Files::isRegularFile) - .map(Path::toFile) - .filter(f -> f.getAbsolutePath().endsWith(".mkv")) - .filter(f -> Config.getInstance().getIncludePattern().matcher(f.getName()).matches()) - .collect(Collectors.toList()); - } catch (IOException e) { - log.error("Couldn't find file or directory!", e); - return new ArrayList<>(); - } - } else { + try (Stream paths = Files.walk(Paths.get(path))) { + return paths.filter(Files::isRegularFile) + .map(Path::toFile) + .filter(file -> FileFilter.accept(file, fileExtensions)) + .collect(Collectors.toList()); + } catch (IOException e) { + log.error("Couldn't find file or directory!", e); return new ArrayList<>(); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java index bfb63c5..3b7c10d 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/MkvFileProcessor.java @@ -2,7 +2,6 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LogUtils; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; @@ -62,7 +61,7 @@ public class MkvFileProcessor implements FileProcessor { } } - LogUtils.ifDebug(log, fileAttributes); + log.debug(fileAttributes); } catch (IOException e) { e.printStackTrace(); log.error("File could not be found or loaded!"); @@ -77,19 +76,20 @@ public class MkvFileProcessor implements FileProcessor { .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), forcedKeywords)) .collect(Collectors.toList()); - detectCurrentConfiguration(attributes, info, nonForcedTracks); - detectDesiredConfiguration(info, nonForcedTracks); - LogUtils.ifDebug(log, info); + detectDefaultTracks(attributes, info, nonForcedTracks); + detectDesiredTracks(info, nonForcedTracks); + log.debug(info); return info; } - private void detectCurrentConfiguration(List attributes, FileInfoDto info, List nonForcedTracks) { + private void detectDefaultTracks(List attributes, FileInfoDto info, List nonForcedTracks) { Set detectedForcedSubtitleLanes = new HashSet<>(); for (FileAttribute attribute : attributes) { - if (attribute.isDefaultTrack() && AUDIO.equals(attribute.getType())) info.setDefaultAudioLane(attribute); + if (attribute.isDefaultTrack() && AUDIO.equals(attribute.getType())) + info.getDefaultAudioLanes().add(attribute); if (attribute.isDefaultTrack() && SUBTITLES.equals(attribute.getType())) - info.setDefaultSubtitleLane(attribute); + info.getDefaultSubtitleLanes().add(attribute); if (attribute.isForcedTrack() && SUBTITLES.equals(attribute.getType())) detectedForcedSubtitleLanes.add(attribute); } @@ -101,7 +101,7 @@ public class MkvFileProcessor implements FileProcessor { ); } - private void detectDesiredConfiguration(FileInfoDto info, List nonForcedTracks) { + private void detectDesiredTracks(FileInfoDto info, List nonForcedTracks) { for (AttributeConfig config : Config.getInstance().getAttributeConfig()) { FileAttribute desiredAudio = null; FileAttribute desiredSubtitle = null; @@ -125,14 +125,18 @@ public class MkvFileProcessor implements FileProcessor { sb.append(format("\"%s\" ", Config.getInstance().getPathFor(MkvToolNix.MKV_PROP_EDIT))); sb.append(format("\"%s\" ", file.getAbsolutePath())); if (fileInfo.isAudioDifferent()) { - if (fileInfo.getDefaultAudioLane() != null) { - sb.append(format(DISABLE_DEFAULT_TRACK, fileInfo.getDefaultAudioLane().getId())); + if (fileInfo.getDefaultAudioLanes() != null && !fileInfo.getDefaultSubtitleLanes().isEmpty()) { + for (FileAttribute track: fileInfo.getDefaultAudioLanes()) { + sb.append(format(DISABLE_DEFAULT_TRACK, track.getId())); + } } sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredAudioLane().getId())); } if (fileInfo.isSubtitleDifferent()) { - if (fileInfo.getDefaultSubtitleLane() != null) { - sb.append(format(DISABLE_DEFAULT_TRACK, fileInfo.getDefaultSubtitleLane().getId())); + if (fileInfo.getDefaultSubtitleLanes() != null && !fileInfo.getDefaultSubtitleLanes().isEmpty()) { + for (FileAttribute track: fileInfo.getDefaultSubtitleLanes()) { + sb.append(format(DISABLE_DEFAULT_TRACK, track.getId())); + } } sb.append(format(ENABLE_DEFAULT_TRACK, fileInfo.getDesiredSubtitleLane().getId())); } @@ -143,6 +147,6 @@ public class MkvFileProcessor implements FileProcessor { } InputStream inputstream = Runtime.getRuntime().exec(sb.toString()).getInputStream(); - LogUtils.ifDebug(log, IOUtils.toString(new InputStreamReader(inputstream))); + log.debug(IOUtils.toString(new InputStreamReader(inputstream))); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java index fc68e25..3208cc6 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/AttributeConfig.java @@ -1,25 +1,21 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.log4j.Log4j2; @Log4j2 @Getter +@AllArgsConstructor public class AttributeConfig { private final String audioLanguage; private final String subtitleLanguage; - public AttributeConfig(String audioLanguage, String subtitleLanguage) { - this.audioLanguage = audioLanguage; - this.subtitleLanguage = subtitleLanguage; - } - @Override public String toString() { - final StringBuffer sb = new StringBuffer("AttributeConfig{"); - sb.append("audioLanguage='").append(audioLanguage).append('\''); - sb.append(", subtitleLanguage='").append(subtitleLanguage).append('\''); - sb.append('}'); - return sb.toString(); + return "AttributeConfig{" + + "audioLanguage='" + audioLanguage + '\'' + + ", subtitleLanguage='" + subtitleLanguage + '\'' + + '}'; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java index 77ee777..203b4b2 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java @@ -1,5 +1,8 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public enum ConfigProperty { CONFIG_PATH("config", "Path to config file"), LIBRARY("library", "Path to library"), @@ -15,11 +18,6 @@ public enum ConfigProperty { private final String property; private final String description; - ConfigProperty(String property, String description) { - this.property = property; - this.description = description; - } - public String desc() { return description; } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java index 1a5b449..cf115f5 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java @@ -1,10 +1,12 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.log4j.Log4j2; @Log4j2 @Getter +@AllArgsConstructor public class FileAttribute { private final int id; private final String language; @@ -13,25 +15,14 @@ public class FileAttribute { private final boolean forcedTrack; private final LaneType type; - public FileAttribute(int id, String language, String trackName, boolean defaultTrack, boolean forcedTrack, LaneType type) { - this.id = id; - this.language = language; - this.trackName = trackName; - this.defaultTrack = defaultTrack; - this.forcedTrack = forcedTrack; - this.type = type; - } - @Override public String toString() { - final StringBuffer sb = new StringBuffer("["); - sb.append("id=").append(id); - sb.append(", language='").append(language).append('\''); - sb.append(", trackName='").append(trackName).append('\''); - sb.append(", defaultTrack=").append(defaultTrack); - sb.append(", forcedTrack=").append(forcedTrack); - sb.append(", type=").append(type); - sb.append(']'); - return sb.toString(); + return "[" + "id=" + id + + ", language='" + language + '\'' + + ", trackName='" + trackName + '\'' + + ", defaultTrack=" + defaultTrack + + ", forcedTrack=" + forcedTrack + + ", type=" + type + + ']'; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java index 8fd9e0f..e498689 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileInfoDto.java @@ -3,13 +3,14 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; import lombok.Getter; import lombok.Setter; +import java.util.HashSet; import java.util.Set; @Getter @Setter public class FileInfoDto { - private FileAttribute defaultAudioLane; - private FileAttribute defaultSubtitleLane; + private Set defaultAudioLanes = new HashSet<>(); + private Set defaultSubtitleLanes = new HashSet<>(); private Set desiredForcedSubtitleLanes; private FileAttribute desiredAudioLane; private FileAttribute desiredSubtitleLane; @@ -19,7 +20,7 @@ public class FileInfoDto { } public boolean isAlreadySuitable() { - return desiredAudioLane == defaultAudioLane && desiredSubtitleLane == defaultSubtitleLane; + return defaultAudioLanes.contains(desiredAudioLane) && defaultSubtitleLanes.contains(desiredSubtitleLane); } public boolean isChangeNecessary() { @@ -28,12 +29,12 @@ public class FileInfoDto { public boolean isAudioDifferent() { return desiredAudioLane != null && - (defaultAudioLane == null || defaultAudioLane.getId() != desiredAudioLane.getId()); + (defaultAudioLanes == null || !defaultAudioLanes.contains(desiredAudioLane)); } public boolean isSubtitleDifferent() { return desiredSubtitleLane != null && - (defaultSubtitleLane == null || defaultSubtitleLane.getId() != desiredSubtitleLane.getId()); + (defaultSubtitleLanes == null || !defaultSubtitleLanes.contains(desiredSubtitleLane)); } public boolean areForcedTracksDifferent() { @@ -42,13 +43,11 @@ public class FileInfoDto { @Override public String toString() { - final StringBuffer sb = new StringBuffer("["); - sb.append("defaultAudioLane=").append(defaultAudioLane); - sb.append(", defaultSubtitleLane=").append(defaultSubtitleLane); - sb.append(", desiredForcedSubtitleLanes=").append(desiredForcedSubtitleLanes); - sb.append(", desiredAudioLane=").append(desiredAudioLane); - sb.append(", desiredSubtitleLane=").append(desiredSubtitleLane); - sb.append(']'); - return sb.toString(); + return "[" + "defaultAudioLanes=" + defaultAudioLanes + + ", defaultSubtitleLanes=" + defaultSubtitleLanes + + ", desiredForcedSubtitleLanes=" + desiredForcedSubtitleLanes + + ", desiredAudioLane=" + desiredAudioLane + + ", desiredSubtitleLane=" + desiredSubtitleLane + + ']'; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/LaneType.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/LaneType.java index 0145370..36f18b3 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/LaneType.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/LaneType.java @@ -3,12 +3,4 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; public enum LaneType { AUDIO, SUBTITLES; - - LaneType() { - } - - @Override - public String toString() { - return name(); - } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/MkvToolNix.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/MkvToolNix.java index a4ee572..5bf698b 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/MkvToolNix.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/MkvToolNix.java @@ -1,15 +1,14 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public enum MkvToolNix { MKV_MERGER("mkvmerge.exe"), MKV_PROP_EDIT("mkvpropedit.exe"); private final String file; - MkvToolNix(String file) { - this.file = file; - } - @Override public String toString() { return file; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LogUtils.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LogUtils.java deleted file mode 100644 index 2dec9c8..0000000 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LogUtils.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; - -import org.apache.logging.log4j.Logger; - -public class LogUtils { - - public static void ifDebug(Logger log, T object) { - if (log.isDebugEnabled()) { - log.debug(object); - } - } -}