diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java index aa2f135..967838c 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java @@ -1,9 +1,13 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix; +import org.apache.logging.log4j.util.Strings; import picocli.CommandLine; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Properties; public class ProjectUtil implements CommandLine.IVersionProvider { @@ -18,15 +22,32 @@ public class ProjectUtil implements CommandLine.IVersionProvider { } // TODO: add mkvmerge and mkvpropedit version - public String[] getVersion() { + public String[] getVersion() throws IOException { + String mkvpropeeditVersion = getVersion(MkvToolNix.MKV_PROP_EDIT); + String mkvmergeVersion = getVersion(MkvToolNix.MKV_MERGE); + return new String[] { getProjectName() + " " + PROJECT_PROPERTIES.getProperty("version"), "Java ${java.version} (${java.vendor} ${java.vm.name} ${java.vm.version})", - "${os.name} ${os.version} ${os.arch}" + "${os.name} ${os.version} ${os.arch}", + (!Strings.isBlank(mkvpropeeditVersion) ? mkvpropeeditVersion : "MkvPropEdit not found") + ", " + (!Strings.isBlank(mkvmergeVersion) ? mkvmergeVersion : "MkvMerge not found") }; } public static String getProjectName() { return PROJECT_PROPERTIES.getProperty("project_name"); } + + public static String getVersion(MkvToolNix app) throws IOException { + ProcessBuilder processBuilder = new ProcessBuilder(app.toString(), "--version"); + Process process = processBuilder.start(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + String version = reader.readLine(); + int exitCode = process.waitFor(); + + if (exitCode == 0) return version; + } catch (IOException | InterruptedException ignored) {} + return null; + } }