From 430910958385e8de440c5a592467f8fef74b42ed Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Tue, 4 Apr 2023 23:14:37 +0200 Subject: [PATCH] Expand date filter by reading from last-execution.yml --- pom.xml | 10 ++++-- project.properties | 2 ++ .../config/ConfigLoader.java | 11 +++--- .../config/validator/ConfigPathValidator.java | 5 +++ .../config/validator/ConfigValidator.java | 8 ++--- .../config/validator/DateValidator.java | 34 ++++++++++++------- .../util/DateUtils.java | 4 +++ .../util/ProjectUtil.java | 25 ++++++++++++++ .../util/VersionUtil.java | 18 ---------- version.properties | 1 - 10 files changed, 75 insertions(+), 43 deletions(-) create mode 100644 project.properties create mode 100644 src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java delete mode 100644 src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/VersionUtil.java delete mode 100644 version.properties diff --git a/pom.xml b/pom.xml index 3160cd7..d641cfe 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - MKVAudioSubtileChanger + at.pcgamingfreaks MKVAudioSubtitleChanger 3.0 @@ -20,7 +20,7 @@ ./ language-codes - version.properties + project.properties true @@ -194,6 +194,12 @@ YAML-Parser 2.0-SNAPSHOT + + + net.harawata + appdirs + 1.2.1 + \ No newline at end of file diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..fc543c7 --- /dev/null +++ b/project.properties @@ -0,0 +1,2 @@ +version=${project.version} +project_name=${project.artifactId} \ No newline at end of file diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java index 926b025..176a908 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java @@ -2,7 +2,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator.*; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.VersionUtil; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; import at.pcgamingfreaks.yaml.YAML; import at.pcgamingfreaks.yaml.YamlInvalidContentException; import org.apache.commons.cli.*; @@ -11,14 +11,17 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf; public class ConfigLoader { - private static final List> VALIDATORS = List.of( + private static final List> VALIDATORS = Stream.of( new ConfigPathValidator(CONFIG_PATH, false), new PathValidator(LIBRARY, true, null), new ThreadValidator(THREADS, false, 2), @@ -34,7 +37,7 @@ public class ConfigLoader { new AttributeConfigValidator(), new CoherentConfigValidator(COHERENT, false), new BooleanValidator(FORCE_COHERENT, false) - ); + ).sorted(Comparator.comparing((ConfigValidator validator) -> validator.getWeight()).reversed()).collect(Collectors.toList()); public static void initConfig(String[] args) { HelpFormatter formatter = new HelpFormatter(); @@ -100,7 +103,7 @@ public class ConfigLoader { private static void exitIfVersion(CommandLine cmd) { if (cmd.hasOption(VERSION.prop())) { - System.out.printf("MKV Audio Subtitle Changer Version %s%n", VersionUtil.getVersion()); + System.out.printf("MKV Audio Subtitle Changer Version %s%n", ProjectUtil.getVersion()); System.exit(0); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java index 6790e75..c051ca1 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java @@ -27,4 +27,9 @@ public class ConfigPathValidator extends PathValidator { protected boolean isValid(File result) { return super.isValid(result) && (result.getAbsolutePath().endsWith(".yml") || result.getAbsolutePath().endsWith(".yaml")); } + + @Override + public int getWeight() { + return 100; + } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java index f736602..4d2590e 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java @@ -154,11 +154,7 @@ public abstract class ConfigValidator { && StringUtils.equalsIgnoreCase(method.getName().replace("get", ""), property.prop().replace("-", "")); } - protected static Set getDependentValidators() { - return Set.of(); - } - - public static int getWeight() { - return getDependentValidators().stream().sorted().findFirst().orElse(100) - 1; + public int getWeight() { + return 50; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java index a4de56d..0976452 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java @@ -3,16 +3,21 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; +import at.pcgamingfreaks.yaml.YAML; +import at.pcgamingfreaks.yaml.YamlInvalidContentException; import lombok.extern.slf4j.Slf4j; +import net.harawata.appdirs.AppDirsFactory; +import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.Date; -import java.util.Properties; -import java.util.Set; @Slf4j public class DateValidator extends ConfigValidator { - private static final Date DEFAULT_DATE = new Date(0); + private static final Date INVALID_DATE = new Date(0); + private static final Date DEFAULT_DATE = new Date(1); public DateValidator(ConfigProperty property, boolean required) { super(property, required, null); @@ -25,27 +30,32 @@ public class DateValidator extends ConfigValidator { @Override protected Date overwriteValue() { - Properties prop = new Properties(); try { - prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("/last-execution.properties")); - return parse(prop.getProperty(Config.getInstance().getLibraryPath().getAbsolutePath())); - } catch (IOException e) { + String filePath = AppDirsFactory.getInstance().getUserConfigDir(ProjectUtil.getProjectName(), null, null); + File lastExecutionFile = Path.of(filePath + "/last-execution.yml").toFile(); + if (!lastExecutionFile.exists()) { + return DEFAULT_DATE; + } + YAML yaml = new YAML(lastExecutionFile); + return parse(yaml.getString(Config.getInstance().getLibraryPath().getAbsolutePath(), DateUtils.convert(DEFAULT_DATE))); + } catch (YamlInvalidContentException | IOException e) { log.error("Couldn't open last-execution.properties"); - return DEFAULT_DATE; + return INVALID_DATE; } } @Override Date parse(String value) { - return DateUtils.convert(value, DEFAULT_DATE); + return DateUtils.convert(value, INVALID_DATE); } @Override boolean isValid(Date result) { - return !result.equals(DEFAULT_DATE); + return !result.equals(INVALID_DATE); } - protected static Set getDependentValidators() { - return Set.of(PathValidator.getWeight(), BooleanValidator.getWeight()); + @Override + public int getWeight() { + return 40; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java index 2f0e4a7..1421c9f 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java @@ -22,4 +22,8 @@ public class DateUtils { return defaultDate; } } + + public static String convert(Date date) { + return dateFormat.format(date); + } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java new file mode 100644 index 0000000..0e2c013 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java @@ -0,0 +1,25 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class ProjectUtil { + private static final Properties PROJECT_PROPERTIES = new Properties(); + + static { + try (InputStream propertiesStream = ProjectUtil.class.getClassLoader().getResourceAsStream("project.properties")) { + PROJECT_PROPERTIES.load(propertiesStream); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } + } + + public static String getVersion() { + return PROJECT_PROPERTIES.getProperty("version"); + } + + public static String getProjectName() { + return PROJECT_PROPERTIES.getProperty("project_name"); + } +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/VersionUtil.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/VersionUtil.java deleted file mode 100644 index e1e5e3a..0000000 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/VersionUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -public class VersionUtil { - public static String getVersion() { - try (InputStream propertiesStream = VersionUtil.class.getClassLoader().getResourceAsStream("version.properties")) { - Properties properties = new Properties(); - properties.load(propertiesStream); - - return properties.getProperty("version"); - } catch (IOException e) { - throw new RuntimeException(e.getMessage()); - } - } -} diff --git a/version.properties b/version.properties deleted file mode 100644 index e5683df..0000000 --- a/version.properties +++ /dev/null @@ -1 +0,0 @@ -version=${project.version} \ No newline at end of file