10 Commits

Author SHA1 Message Date
b86c7b98a5 Fix logging for portable 2025-05-01 22:55:11 +02:00
Michael
69c192c08b Update README.md 2025-02-22 20:37:04 +01:00
Michael
7dd01234b6 Merge pull request #57 from RatzzFatzz/dev
Fix execution on linux
2025-02-18 19:23:08 +01:00
RatzzFatzz
8f38abcf3a Fix execution on linux 2025-02-18 19:15:02 +01:00
Michael
fc4e80ead0 Merge pull request #55 from RatzzFatzz/dev
Release v4.0
2025-02-06 22:27:06 +01:00
RatzzFatzz
e81b06f6fa Improve logging 2025-02-06 00:18:49 +01:00
RatzzFatzz
dc770c9325 Fix file count if no info was found 2025-02-06 00:00:28 +01:00
RatzzFatzz
471255a09b Fix windows installer build 2025-02-05 23:32:01 +01:00
RatzzFatzz
9c8315aec7 Remove config-template 2025-02-05 23:13:54 +01:00
Michael
a075dfb27c Remove forced audio tracks & minor refactoring 2024-05-27 22:31:34 +02:00
10 changed files with 30 additions and 64 deletions

View File

@@ -92,11 +92,11 @@ jobs:
with: with:
timezoneWindows: "Berlin Standard Time" timezoneWindows: "Berlin Standard Time"
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v4.7.0 uses: actions/setup-java@v4.7.0
with: with:
distribution: temurin distribution: temurin
java-version: 17 java-version: 21
- name: Setup workspace - name: Setup workspace
run: mkdir artifacts run: mkdir artifacts

View File

@@ -12,13 +12,11 @@ A streamlined solution for managing MKV files, this program leverages MKVToolNix
## Execution ## Execution
### Minimal usage ### Minimal usage
Portable: `java -jar mkvaudiosubtitlechanger-<version>.jar --library "X:/Files" --attribute-config eng:ger eng:OFF` Portable: `java -jar mkvaudiosubtitlechanger-<version>.jar --library "X:/Files" --attribute-config eng:ger eng:OFF`
Windows & Linux (installed): `mkvaudiosubtitlechanger --library "X:/Files" --attribute-config eng:ger eng:OFF`
Windows (installed): `mkvaudiosubtitlechanger.jar --library "X:/Files" --attribute-config eng:ger eng:OFF`
### Safe usage (best for testing before applying to whole library) ### Safe usage (best for testing before applying to whole library)
Portable: `java -jar mkvaudiosubtitlechanger-<version>.jar --library "X:/Files" --attribute-config eng:ger eng:OFF --safe-mode` Portable: `java -jar mkvaudiosubtitlechanger-<version>.jar --library "X:/Files" --attribute-config eng:ger eng:OFF --safe-mode`
Windows & Linux (installed): `mkvaudiosubtitlechanger --library "X:/Files" --attribute-config eng:ger eng:OFF --safe-mode`
Windows (installed): `mkvaudiosubtitlechanger.jar --library "X:/Files" --attribute-config eng:ger eng:OFF --safe-mode`
**Attribute-config must be entered in pairs: `audio:subtitle`; Example: `jpn:eng`. More about this topic **Attribute-config must be entered in pairs: `audio:subtitle`; Example: `jpn:eng`. More about this topic
[here](https://github.com/RatzzFatzz/MKVAudioSubtitleChanger/wiki/Attribute-Config).** [here](https://github.com/RatzzFatzz/MKVAudioSubtitleChanger/wiki/Attribute-Config).**

View File

@@ -1,34 +0,0 @@
mkvtoolnix: C:\Program Files\MKVToolNix
library: X:/Files
attribute-config:
1:
audio: ger
subtitle: OFF
2:
audio: eng
subtitle: ger
# Recommendations for data stored on HDDs, increase when using SSDs
#threads: 2
#forced-keywords: ["forced", "signs"]
#commentary-keywords: ["commentary", "director"]
#preferred-subtitles: ["unstyled"]
#exclude-directories:
# - "D:/Path/To/File.mkv"
# - "D:/Path/To/Directory"
# If pattern is negated, can be used to exclude files
#include-pattern: "regex"
# Only files newer than
#filter-date: 20.03.2021-10:11:12
safe-mode:
#coherent:
#force-coherent:
#only-new-files:

View File

@@ -14,10 +14,6 @@
<destName>${project.artifactId}.jar</destName> <destName>${project.artifactId}.jar</destName>
<outputDirectory>/</outputDirectory> <outputDirectory>/</outputDirectory>
</file> </file>
<file>
<source>${project.basedir}/config-template.yaml</source>
<outputDirectory>/</outputDirectory>
</file>
<file> <file>
<source></source> <source></source>
</file> </file>

View File

@@ -6,7 +6,7 @@
<groupId>at.pcgamingfreaks</groupId> <groupId>at.pcgamingfreaks</groupId>
<artifactId>MKVAudioSubtitleChanger</artifactId> <artifactId>MKVAudioSubtitleChanger</artifactId>
<version>4.0.0</version> <version>4.0.2</version>
<properties> <properties>
<mainClass>at.pcgamingfreaks.mkvaudiosubtitlechanger.Main</mainClass> <mainClass>at.pcgamingfreaks.mkvaudiosubtitlechanger.Main</mainClass>
@@ -27,8 +27,7 @@
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<includes> <includes>
<include>log4j2.yml</include> <include>log4j2.yaml</include>
<include>log4j2-debug.yml</include>
</includes> </includes>
</resource> </resource>
</resources> </resources>

View File

@@ -39,16 +39,17 @@ public class MkvFileProcessor implements FileProcessor {
Map<String, Object> jsonMap; Map<String, Object> jsonMap;
List<FileAttribute> fileAttributes = new ArrayList<>(); List<FileAttribute> fileAttributes = new ArrayList<>();
try { try {
String command = format("\"%s\"", Config.getInstance().getPathFor(MkvToolNix.MKV_MERGE)); String[] command = new String[]{
String[] arguments = new String[]{ Config.getInstance().getPathFor(MkvToolNix.MKV_MERGE),
command,
"--identify", "--identify",
"--identification-format", "--identification-format",
"json", "json",
file.getAbsoluteFile().toString() file.getAbsolutePath()
}; };
InputStream inputStream = Runtime.getRuntime().exec(arguments).getInputStream(); log.debug("{}", String.join(" ", command));
InputStream inputStream = Runtime.getRuntime().exec(command)
.getInputStream();
jsonMap = mapper.readValue(inputStream, Map.class); jsonMap = mapper.readValue(inputStream, Map.class);
List<Map<String, Object>> tracks = (List<Map<String, Object>>) jsonMap.get("tracks"); List<Map<String, Object>> tracks = (List<Map<String, Object>>) jsonMap.get("tracks");
if (tracks == null) { if (tracks == null) {
@@ -184,7 +185,7 @@ public class MkvFileProcessor implements FileProcessor {
} }
} }
log.info(sb.toString()); log.debug(sb.toString());
InputStream inputstream = Runtime.getRuntime().exec(sb.toString()).getInputStream(); InputStream inputstream = Runtime.getRuntime().exec(sb.toString()).getInputStream();
String output = IOUtils.toString(new InputStreamReader(inputstream)); String output = IOUtils.toString(new InputStreamReader(inputstream));
log.debug(output); log.debug(output);

View File

@@ -19,7 +19,6 @@ import me.tongfei.progressbar.ProgressBar;
import me.tongfei.progressbar.ProgressBarBuilder; import me.tongfei.progressbar.ProgressBarBuilder;
import me.tongfei.progressbar.ProgressBarStyle; import me.tongfei.progressbar.ProgressBarStyle;
import net.harawata.appdirs.AppDirsFactory; import net.harawata.appdirs.AppDirsFactory;
import picocli.CommandLine;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -100,6 +99,12 @@ public abstract class AttributeUpdaterKernel {
FileInfoDto fileInfo = new FileInfoDto(file); FileInfoDto fileInfo = new FileInfoDto(file);
List<FileAttribute> attributes = processor.loadAttributes(file); List<FileAttribute> attributes = processor.loadAttributes(file);
if (attributes == null || attributes.isEmpty()) {
statistic.total();
statistic.failure();
return;
}
List<FileAttribute> nonForcedTracks = processor.retrieveNonForcedTracks(attributes); List<FileAttribute> nonForcedTracks = processor.retrieveNonForcedTracks(attributes);
List<FileAttribute> nonCommentaryTracks = processor.retrieveNonCommentaryTracks(attributes); List<FileAttribute> nonCommentaryTracks = processor.retrieveNonCommentaryTracks(attributes);
@@ -122,7 +127,7 @@ public abstract class AttributeUpdaterKernel {
statistic.shouldChange(); statistic.shouldChange();
commitChange(fileInfoDto); commitChange(fileInfoDto);
break; break;
case UNABLE_TO_APPLY: case NO_SUITABLE_CONFIG:
statistic.noSuitableConfigFound(); statistic.noSuitableConfigFound();
break; break;
case ALREADY_SUITED: case ALREADY_SUITED:

View File

@@ -40,8 +40,9 @@ public class FileInfoDto {
} }
private boolean isSubtitleOFF() { private boolean isSubtitleOFF() {
return desiredDefaultSubtitleLane == null && "OFF".equals(matchedConfig.getSubtitleLanguage()) && return desiredDefaultSubtitleLane == null
(existingDefaultSubtitleLanes != null && !existingDefaultSubtitleLanes.isEmpty()); && (matchedConfig != null && "OFF".equals(matchedConfig.getSubtitleLanguage()))
&& (existingDefaultSubtitleLanes != null && !existingDefaultSubtitleLanes.isEmpty());
} }
public boolean areForcedTracksDifferent() { public boolean areForcedTracksDifferent() {
@@ -50,7 +51,7 @@ public class FileInfoDto {
public FileStatus getStatus() { public FileStatus getStatus() {
if (isChangeNecessary()) return FileStatus.CHANGE_NECESSARY; if (isChangeNecessary()) return FileStatus.CHANGE_NECESSARY;
if (isUnableToApplyConfig()) return FileStatus.UNABLE_TO_APPLY; if (isUnableToApplyConfig()) return FileStatus.NO_SUITABLE_CONFIG;
if (isAlreadySuitable()) return FileStatus.ALREADY_SUITED; if (isAlreadySuitable()) return FileStatus.ALREADY_SUITED;
return FileStatus.UNKNOWN; return FileStatus.UNKNOWN;
} }

View File

@@ -2,7 +2,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.model;
public enum FileStatus { public enum FileStatus {
CHANGE_NECESSARY, CHANGE_NECESSARY,
UNABLE_TO_APPLY, NO_SUITABLE_CONFIG,
ALREADY_SUITED, ALREADY_SUITED,
UNKNOWN; UNKNOWN;
} }

View File

@@ -3,8 +3,8 @@ Configuration:
Appenders: Appenders:
RollingFile: RollingFile:
name: FileAppender name: FileAppender
fileName: /var/log/MKVAudioSubtitleChanger/application.log fileName: ${sys:user.home}/.local/mkvaudiosubtitlechanger/logs/application.log
filePattern: /var/log/MKVAudioSubtitleChanger/archive/application-%d{yyyy-MM-dd}-%i.log.gz filePattern: ${sys:user.home}/.local/mkvaudiosubtitlechanger/logs/archive/application-%d{yyyy-MM-dd}-%i.log.gz
PatternLayout: PatternLayout:
Pattern: "%d{DEFAULT} | %-5level | %thread | %msg %n %throwable" Pattern: "%d{DEFAULT} | %-5level | %thread | %msg %n %throwable"
ThresholdFilter: ThresholdFilter: