From e3baae55d9c5990c6a8939c82cb3221a9d258e3c Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Mon, 3 Apr 2023 21:36:11 +0200 Subject: [PATCH] Expand date filter by last execution overwrite --- .../config/validator/ConfigValidator.java | 21 ++++++++++-- .../config/validator/DateValidator.java | 33 +++++++++++++++++-- .../impl/FileFilter.java | 10 +++--- .../util/DateUtils.java | 4 +-- 4 files changed, 56 insertions(+), 12 deletions(-) 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 3b67666..f736602 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java @@ -11,12 +11,11 @@ import org.apache.commons.lang3.StringUtils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.function.BiFunction; import java.util.function.Predicate; -import java.util.stream.Collectors; @RequiredArgsConstructor public abstract class ConfigValidator { @@ -38,7 +37,9 @@ public abstract class ConfigValidator { Optional cmdResult = provideDataCmd().apply(cmd, property); Optional yamlResult = provideDataYaml().apply(yaml, property); - if (cmdResult.isPresent()) { + if (isOverwritingNecessary()){ + result = overwriteValue(); + } else if (cmdResult.isPresent()) { result = cmdResult.get(); } else if (yamlResult.isPresent()) { result = yamlResult.get(); @@ -98,6 +99,14 @@ public abstract class ConfigValidator { }; } + protected boolean isOverwritingNecessary() { + return false; + } + + protected FieldType overwriteValue() { + return null; + } + /** * Parse input parameter to desired format. * @@ -145,5 +154,11 @@ 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; + } } 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 e61ea33..a4de56d 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java @@ -1,22 +1,51 @@ 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 lombok.extern.slf4j.Slf4j; +import java.io.IOException; 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); + public DateValidator(ConfigProperty property, boolean required) { super(property, required, null); } + @Override + protected boolean isOverwritingNecessary() { + return Config.getInstance().isOnlyNewFiles(); + } + + @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) { + log.error("Couldn't open last-execution.properties"); + return DEFAULT_DATE; + } + } + @Override Date parse(String value) { - return DateUtils.convert(value); // TODO fix null return value + return DateUtils.convert(value, DEFAULT_DATE); } @Override boolean isValid(Date result) { - return result != null; + return !result.equals(DEFAULT_DATE); + } + + protected static Set getDependentValidators() { + return Set.of(PathValidator.getWeight(), BooleanValidator.getWeight()); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java index c3d6fd0..ff1559c 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java @@ -48,10 +48,10 @@ public class FileFilter { } private static boolean isNewerThanLastExecution(File pathName) { - if (Config.getInstance().isOnlyNewFiles()) { - return isNewer(pathName); - } - return true; -// return Config.getInstance().isOnlyNewFiles() && isNewer(pathName); +// if (Config.getInstance().isOnlyNewFiles()) { +// return isNewer(pathName); +// } +// return true; + return !Config.getInstance().isOnlyNewFiles() || isNewer(pathName); } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java index 6f2eec5..2f0e4a7 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java @@ -15,11 +15,11 @@ public class DateUtils { * Convert String to date. * @return parsed date, null if exception occurs */ - public static Date convert(String date) { + public static Date convert(String date, Date defaultDate) { try { return dateFormat.parse(date); } catch (ParseException e) { - return null; + return defaultDate; } } }