From 7ee51421e07dfebe3cb9880a645eebe84371cd66 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Sun, 2 Apr 2023 20:11:42 +0200 Subject: [PATCH 1/6] Add basic date filter --- .../config/Config.java | 2 + .../config/ConfigLoader.java | 2 + .../config/validator/DateValidator.java | 22 ++++++++++ .../impl/FileFilter.java | 42 ++++++++++++++++++- .../model/ConfigProperty.java | 2 + .../util/DateUtils.java | 25 +++++++++++ 6 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java create mode 100644 src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java index 69a4d02..baf1913 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java @@ -38,6 +38,8 @@ public class Config { private Integer coherent; private boolean forceCoherent; + private boolean onlyNewFiles; + private Date filterDate; private Set forcedKeywords = new HashSet<>(Arrays.asList("forced", "signs", "songs")); private Set commentaryKeywords = new HashSet<>(Arrays.asList("commentary", "director")); diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java index adf87af..926b025 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java @@ -24,6 +24,8 @@ public class ConfigLoader { new ThreadValidator(THREADS, false, 2), new MkvToolNixPathValidator(MKV_TOOL_NIX, true, Path.of("C:\\Program Files\\MKVToolNix").toFile()), new BooleanValidator(SAFE_MODE, false), + new BooleanValidator(ONLY_NEW_FILES, false), + new DateValidator(FILTER_DATE, false), new PatternValidator(INCLUDE_PATTERN, false, Pattern.compile(".*")), new SetValidator(FORCED_KEYWORDS, false, true), new SetValidator(COMMENTARY_KEYWORDS, false, true), diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java new file mode 100644 index 0000000..e61ea33 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java @@ -0,0 +1,22 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; + +import java.util.Date; + +public class DateValidator extends ConfigValidator { + public DateValidator(ConfigProperty property, boolean required) { + super(property, required, null); + } + + @Override + Date parse(String value) { + return DateUtils.convert(value); // TODO fix null return value + } + + @Override + boolean isValid(Date result) { + return result != null; + } +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java index 3588a2a..c3d6fd0 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java @@ -2,18 +2,56 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Date; +@Slf4j public class FileFilter { static boolean accept(File pathName, String[] fileExtensions) { - if (StringUtils.endsWithAny(pathName.getAbsolutePath().toLowerCase(), fileExtensions) - && Config.getInstance().getIncludePattern().matcher(pathName.getName()).matches()) { + if (hasProperFileExtension(pathName, fileExtensions) && isIncluded(pathName) && isNewer(pathName)) { return true; } ResultStatistic.getInstance().excluded(); return false; } + + private static boolean hasProperFileExtension(File pathName, String[] fileExtensions) { + return StringUtils.endsWithAny(pathName.getAbsolutePath().toLowerCase(), fileExtensions); + } + + private static boolean isIncluded(File pathName) { + return Config.getInstance().getIncludePattern().matcher(pathName.getName()).matches(); + } + + private static boolean isNewer(File pathName) { + Config config = Config.getInstance(); + if (config.getFilterDate() == null) return true; + try { + BasicFileAttributes attributes = Files.readAttributes(pathName.toPath(), BasicFileAttributes.class); + return isNewer(DateUtils.convert(attributes.creationTime().toMillis())); + } catch (IOException e) { + log.warn("File attributes could not be read. This could have XX reason"); // TODO + } + return true; + } + + private static boolean isNewer(Date creationDate) { + return creationDate.toInstant().isAfter(Config.getInstance().getFilterDate().toInstant()); + } + + private static boolean isNewerThanLastExecution(File 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/model/ConfigProperty.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java index 38f9977..c410000 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ConfigProperty.java @@ -18,6 +18,8 @@ public enum ConfigProperty { COHERENT("coherent", "Try to match all files in dir of depth with the same config", "c", 1), FORCE_COHERENT("force-coherent", "Force coherent and don't update anything if config fits not whole config (default: false)", "cf", 0), WINDOWS("windows", "Is operating system windows", null, 0), + ONLY_NEW_FILES("only-new-files", "Sets filter-date to last successful execution (Overwrites input of filter-date)", "n", 0), + FILTER_DATE("filter-date", "Only consider files created newer than entered date (format: \"dd.MM.yyyy-HH:mm:ss\")", "d", 1), THREADS("threads", "Thread count (default: 2)", "t", 1), INCLUDE_PATTERN("include-pattern", "Include files matching pattern (default: \".*\")", "i", 1), EXCLUDED_DIRECTORY("excluded-directories", "Directories to be excluded, combines with config file", "e", Option.UNLIMITED_VALUES), diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java new file mode 100644 index 0000000..6f2eec5 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java @@ -0,0 +1,25 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateUtils { + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy-HH:mm:ss"); + + public static Date convert(long millis) { + return new Date(millis); + } + + /** + * Convert String to date. + * @return parsed date, null if exception occurs + */ + public static Date convert(String date) { + try { + return dateFormat.parse(date); + } catch (ParseException e) { + return null; + } + } +} From e3baae55d9c5990c6a8939c82cb3221a9d258e3c Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Mon, 3 Apr 2023 21:36:11 +0200 Subject: [PATCH 2/6] 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; } } } From 430910958385e8de440c5a592467f8fef74b42ed Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Tue, 4 Apr 2023 23:14:37 +0200 Subject: [PATCH 3/6] 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 From 094b77225799864488ff13fd7d8cb79e93711395 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Wed, 5 Apr 2023 23:19:56 +0200 Subject: [PATCH 4/6] Implement last-execution creation --- .../impl/kernel/AttributeUpdaterKernel.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java index e48a7b4..b13b364 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java @@ -8,16 +8,23 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfoDto; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil; +import at.pcgamingfreaks.yaml.YAML; +import at.pcgamingfreaks.yaml.YamlInvalidContentException; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import me.tongfei.progressbar.ProgressBar; import me.tongfei.progressbar.ProgressBarBuilder; import me.tongfei.progressbar.ProgressBarStyle; +import net.harawata.appdirs.AppDirsFactory; import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -57,6 +64,8 @@ public abstract class AttributeUpdaterKernel { executor.awaitTermination(1, TimeUnit.DAYS); } + endProcess(); + statistic.stopTimer(); statistic.printResult(); } @@ -139,4 +148,24 @@ public abstract class AttributeUpdaterKernel { log.warn("File couldn't be updated: '{}', Error: {}", fileInfo.getFile().getAbsoluteFile(), e.getMessage()); } } + + protected void endProcess() { + try { + String filePath = AppDirsFactory.getInstance().getUserConfigDir(ProjectUtil.getProjectName(), null, null); + + File configDir = Path.of(filePath).toFile(); + if (!configDir.exists()) configDir.mkdirs(); + + File lastExecutionFile = Path.of(filePath + "/last-execution.yml").toFile(); + if (!lastExecutionFile.exists()) { + lastExecutionFile.createNewFile(); + } + + YAML yaml = new YAML(lastExecutionFile); + yaml.set(Config.getInstance().getLibraryPath().getAbsolutePath(), DateUtils.convert(new Date())); + yaml.save(lastExecutionFile); + } catch (IOException | YamlInvalidContentException e) { + log.error("last-execution.yml could not be created: ", e); // TODO + } + } } From 9330deb75fefa5d121a1878d7ba6188ad59ae335 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Sat, 8 Apr 2023 21:07:44 +0200 Subject: [PATCH 5/6] Fix last-execution file saving --- .../config/Config.java | 27 +- .../config/validator/ConfigValidator.java | 270 +++++++++--------- .../config/validator/DateValidator.java | 4 +- .../impl/kernel/AttributeUpdaterKernel.java | 6 +- 4 files changed, 163 insertions(+), 144 deletions(-) diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java index baf1913..77382e1 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java @@ -72,17 +72,22 @@ public class Config { @Override public String toString() { return new StringJoiner(", ", Config.class.getSimpleName() + "[", "]") - .add("parser=" + parser).add("\n") - .add("formatter=" + formatter).add("\n") - .add("configPath=" + configPath).add("\n") - .add("libraryPath=" + libraryPath).add("\n") - .add("isSafeMode=" + safeMode).add("\n") - .add("forcedKeywords=" + forcedKeywords).add("\n") - .add("commentaryKeywords=" + commentaryKeywords).add("\n") - .add("excludedDirectories=" + excludedDirectories).add("\n") - .add("threadCount=" + threads).add("\n") - .add("includePattern=" + includePattern).add("\n") - .add("mkvToolNixPath='" + mkvToolNix + "'").add("\n") + .add("parser=" + parser) + .add("formatter=" + formatter) + .add("configPath=" + configPath) + .add("libraryPath=" + libraryPath) + .add("mkvToolNix=" + mkvToolNix) + .add("threads=" + threads) + .add("includePattern=" + includePattern) + .add("safeMode=" + safeMode) + .add("coherent=" + coherent) + .add("forceCoherent=" + forceCoherent) + .add("onlyNewFiles=" + onlyNewFiles) + .add("filterDate=" + filterDate) + .add("forcedKeywords=" + forcedKeywords) + .add("commentaryKeywords=" + commentaryKeywords) + .add("excludedDirectories=" + excludedDirectories) + .add("preferredSubtitles=" + preferredSubtitles) .add("attributeConfig=" + attributeConfig) .toString(); } 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 4d2590e..cb15f34 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java @@ -6,155 +6,165 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; import at.pcgamingfreaks.yaml.YAML; import at.pcgamingfreaks.yaml.YamlKeyNotFoundException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.cli.CommandLine; import org.apache.commons.lang3.StringUtils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.List; import java.util.Optional; -import java.util.Set; +import java.util.StringJoiner; import java.util.function.BiFunction; import java.util.function.Predicate; +@Slf4j @RequiredArgsConstructor public abstract class ConfigValidator { - protected final ConfigProperty property; - protected final boolean required; - protected final FieldType defaultValue; + protected final ConfigProperty property; + protected final boolean required; + protected final FieldType defaultValue; - /** - * Validate the user input. Parameters of cmd are prioritised. - * - * @param yaml config file - * @param cmd command line parameters - * @return {@link ValidationResult} containing validity of input. - */ + /** + * Validate the user input. Parameters of cmd are prioritised. + * + * @param yaml config file + * @param cmd command line parameters + * @return {@link ValidationResult} containing validity of input. + */ public ValidationResult validate(YAML yaml, CommandLine cmd) { - System.out.printf("%s: ", property.prop()); - FieldType result; + System.out.printf("%s: ", property.prop()); + FieldType result; - Optional cmdResult = provideDataCmd().apply(cmd, property); - Optional yamlResult = provideDataYaml().apply(yaml, property); + Optional cmdResult = provideDataCmd().apply(cmd, property); + Optional yamlResult = provideDataYaml().apply(yaml, property); - if (isOverwritingNecessary()){ - result = overwriteValue(); - } else if (cmdResult.isPresent()) { - result = cmdResult.get(); - } else if (yamlResult.isPresent()) { - result = yamlResult.get(); - } else { - if (defaultValue != null) { - if (setValue(defaultValue)) { - System.out.println("default"); - return ValidationResult.DEFAULT; - } else { - System.out.println("invalid"); - return ValidationResult.INVALID; - } - } - if (required) { - System.out.println("missing"); - return ValidationResult.MISSING; - } else { - System.out.println("ok"); - return ValidationResult.NOT_PRESENT; - } - } + if (isOverwritingNecessary()) { + result = overwriteValue(); + } else if (cmdResult.isPresent()) { + result = cmdResult.get(); + } else if (yamlResult.isPresent()) { + result = yamlResult.get(); + } else { + if (defaultValue != null) { + if (setValue(defaultValue)) { + System.out.println("default"); + return ValidationResult.DEFAULT; + } else { + System.out.println("invalid"); + return ValidationResult.INVALID; + } + } + if (required) { + System.out.println("missing"); + return ValidationResult.MISSING; + } else { + System.out.println("ok"); + return ValidationResult.NOT_PRESENT; + } + } - if (!isValid(result) || !setValue(result)) { - System.out.println("invalid"); - return ValidationResult.INVALID; - } + if (!isValid(result) || !setValue(result)) { + System.out.println("invalid"); + return ValidationResult.INVALID; + } - System.out.println("ok"); - return ValidationResult.VALID; - } - - /** - * @return parsed input of yaml config for property - */ - protected BiFunction> provideDataYaml() { - return (yaml, property) -> { - if (yaml.isSet(property.prop())) { - try { - return Optional.of(parse(yaml.getString(property.prop()))); - } catch (YamlKeyNotFoundException e) { - throw new RuntimeException(e); - } - } - return Optional.empty(); - }; - } - - /** - * @return parsed input of command line parameters config for property - */ - protected BiFunction> provideDataCmd() { - return (cmd, property) -> { - if (cmd.hasOption(property.prop())) { - return Optional.of(parse(cmd.getOptionValue(property.prop()))); - } - return Optional.empty(); - }; - } - - protected boolean isOverwritingNecessary() { - return false; - } - - protected FieldType overwriteValue() { - return null; - } - - /** - * Parse input parameter to desired format. - * - * @param value input parameter - * @return parsed property - */ - abstract FieldType parse(String value); - - /** - * Validate if the data has the desired and allowed format. - * - * @param result parsed property - * @return true if data is in desired format. - */ - abstract boolean isValid(FieldType result); - - /** - * Sets valid properties to {@link Config} via reflections. - * - * @param result parsed property - * @return false if method invocation failed - */ - protected boolean setValue(FieldType result) { - for (Method method: Config.getInstance().getClass().getDeclaredMethods()) { - if(containsSetterOf(property).test(method)) { - try { - method.invoke(Config.getInstance(), result); - return true; - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - } - - return false; + System.out.println("ok"); + return ValidationResult.VALID; } - protected Predicate containsSetterOf(ConfigProperty property) { - return method -> StringUtils.startsWith(method.getName(), "set") - && StringUtils.equalsIgnoreCase(method.getName().replace("set", ""), property.prop().replace("-", "")); - } + /** + * @return parsed input of yaml config for property + */ + protected BiFunction> provideDataYaml() { + return (yaml, property) -> { + if (yaml.isSet(property.prop())) { + try { + return Optional.of(parse(yaml.getString(property.prop()))); + } catch (YamlKeyNotFoundException e) { + throw new RuntimeException(e); + } + } + return Optional.empty(); + }; + } - protected Predicate containsGetterOf(ConfigProperty property) { - return method -> StringUtils.startsWith(method.getName(), "get") - && StringUtils.equalsIgnoreCase(method.getName().replace("get", ""), property.prop().replace("-", "")); - } + /** + * @return parsed input of command line parameters config for property + */ + protected BiFunction> provideDataCmd() { + return (cmd, property) -> { + if (cmd.hasOption(property.prop())) { + return Optional.of(parse(cmd.getOptionValue(property.prop()))); + } + return Optional.empty(); + }; + } - public int getWeight() { - return 50; - } + protected boolean isOverwritingNecessary() { + return false; + } + + protected FieldType overwriteValue() { + return null; + } + + /** + * Parse input parameter to desired format. + * + * @param value input parameter + * @return parsed property + */ + abstract FieldType parse(String value); + + /** + * Validate if the data has the desired and allowed format. + * + * @param result parsed property + * @return true if data is in desired format. + */ + abstract boolean isValid(FieldType result); + + /** + * Sets valid properties to {@link Config} via reflections. + * + * @param result parsed property + * @return false if method invocation failed + */ + protected boolean setValue(FieldType result) { + for (Method method : Config.getInstance().getClass().getDeclaredMethods()) { + if (containsSetterOf(property).test(method)) { + try { + method.invoke(Config.getInstance(), result); + return true; + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } + } + + return false; + } + + protected Predicate containsSetterOf(ConfigProperty property) { + return method -> StringUtils.startsWith(method.getName(), "set") + && StringUtils.equalsIgnoreCase(method.getName().replace("set", ""), property.prop().replace("-", "")); + } + + protected Predicate containsGetterOf(ConfigProperty property) { + return method -> StringUtils.startsWith(method.getName(), "get") + && StringUtils.equalsIgnoreCase(method.getName().replace("get", ""), property.prop().replace("-", "")); + } + + public int getWeight() { + return 50; + } + + @Override + public String toString() { + return new StringJoiner(", ", ConfigValidator.class.getSimpleName() + "[", "]") + .add("property=" + property) + .add("required=" + required) + .add("defaultValue=" + defaultValue) + .toString(); + } } 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 0976452..c783f42 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java @@ -17,7 +17,7 @@ import java.util.Date; @Slf4j public class DateValidator extends ConfigValidator { private static final Date INVALID_DATE = new Date(0); - private static final Date DEFAULT_DATE = new Date(1); + private static final Date DEFAULT_DATE = new Date(1000); public DateValidator(ConfigProperty property, boolean required) { super(property, required, null); @@ -37,7 +37,7 @@ public class DateValidator extends ConfigValidator { return DEFAULT_DATE; } YAML yaml = new YAML(lastExecutionFile); - return parse(yaml.getString(Config.getInstance().getLibraryPath().getAbsolutePath(), DateUtils.convert(DEFAULT_DATE))); + return parse(yaml.getString(Config.getInstance().getLibraryPath().getAbsolutePath().replace("\\", "/"), DateUtils.convert(DEFAULT_DATE))); } catch (YamlInvalidContentException | IOException e) { log.error("Couldn't open last-execution.properties"); return INVALID_DATE; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java index b13b364..239a4de 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java @@ -150,6 +150,10 @@ public abstract class AttributeUpdaterKernel { } protected void endProcess() { + if (Config.getInstance().isSafeMode()) { + return; + } + try { String filePath = AppDirsFactory.getInstance().getUserConfigDir(ProjectUtil.getProjectName(), null, null); @@ -162,7 +166,7 @@ public abstract class AttributeUpdaterKernel { } YAML yaml = new YAML(lastExecutionFile); - yaml.set(Config.getInstance().getLibraryPath().getAbsolutePath(), DateUtils.convert(new Date())); + yaml.set(Config.getInstance().getLibraryPath().getAbsolutePath().replace("\\", "/"), DateUtils.convert(new Date())); yaml.save(lastExecutionFile); } catch (IOException | YamlInvalidContentException e) { log.error("last-execution.yml could not be created: ", e); // TODO From 285533bb28f30339e438ac7d3e9f222f7891525f Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Sun, 9 Apr 2023 21:07:49 +0200 Subject: [PATCH 6/6] Clean-up --- .../mkvaudiosubtitlechanger/config/Config.java | 4 ++++ .../config/validator/ConfigValidator.java | 6 ++++++ .../config/validator/DateValidator.java | 2 +- .../impl/FileFilter.java | 18 ++++++------------ .../impl/kernel/AttributeUpdaterKernel.java | 8 +++----- .../util/DateUtils.java | 2 +- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java index 77382e1..dc8d6a5 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java @@ -69,6 +69,10 @@ public class Config { mkvToolNix.getAbsolutePath() + "/" + application; } + public String getNormalizedLibraryPath() { + return this.getLibraryPath().getAbsolutePath().replace("\\", "/"); + } + @Override public String toString() { return new StringJoiner(", ", Config.class.getSimpleName() + "[", "]") 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 cb15f34..791ee77 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java @@ -100,10 +100,16 @@ public abstract class ConfigValidator { }; } + /** + * @return true if overwriting this property is necessary. + */ protected boolean isOverwritingNecessary() { return false; } + /** + * @return {@link FieldType} to overwrite result with. + */ protected FieldType overwriteValue() { return null; } 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 c783f42..f376af1 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java @@ -37,7 +37,7 @@ public class DateValidator extends ConfigValidator { return DEFAULT_DATE; } YAML yaml = new YAML(lastExecutionFile); - return parse(yaml.getString(Config.getInstance().getLibraryPath().getAbsolutePath().replace("\\", "/"), DateUtils.convert(DEFAULT_DATE))); + return parse(yaml.getString(Config.getInstance().getNormalizedLibraryPath(), DateUtils.convert(DEFAULT_DATE))); } catch (YamlInvalidContentException | IOException e) { log.error("Couldn't open last-execution.properties"); return INVALID_DATE; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java index ff1559c..20b5c21 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilter.java @@ -15,7 +15,9 @@ import java.util.Date; @Slf4j public class FileFilter { static boolean accept(File pathName, String[] fileExtensions) { - if (hasProperFileExtension(pathName, fileExtensions) && isIncluded(pathName) && isNewer(pathName)) { + if (hasProperFileExtension(pathName, fileExtensions) + && hasMatchingPattern(pathName) + && isNewer(pathName)) { return true; } @@ -27,18 +29,18 @@ public class FileFilter { return StringUtils.endsWithAny(pathName.getAbsolutePath().toLowerCase(), fileExtensions); } - private static boolean isIncluded(File pathName) { + private static boolean hasMatchingPattern(File pathName) { return Config.getInstance().getIncludePattern().matcher(pathName.getName()).matches(); } private static boolean isNewer(File pathName) { Config config = Config.getInstance(); if (config.getFilterDate() == null) return true; - try { + try { BasicFileAttributes attributes = Files.readAttributes(pathName.toPath(), BasicFileAttributes.class); return isNewer(DateUtils.convert(attributes.creationTime().toMillis())); } catch (IOException e) { - log.warn("File attributes could not be read. This could have XX reason"); // TODO + log.warn("File attributes could not be read.", e); } return true; } @@ -46,12 +48,4 @@ public class FileFilter { private static boolean isNewer(Date creationDate) { return creationDate.toInstant().isAfter(Config.getInstance().getFilterDate().toInstant()); } - - private static boolean isNewerThanLastExecution(File 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/impl/kernel/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java index 239a4de..9a1be4f 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java @@ -161,15 +161,13 @@ public abstract class AttributeUpdaterKernel { if (!configDir.exists()) configDir.mkdirs(); File lastExecutionFile = Path.of(filePath + "/last-execution.yml").toFile(); - if (!lastExecutionFile.exists()) { - lastExecutionFile.createNewFile(); - } + if (!lastExecutionFile.exists()) lastExecutionFile.createNewFile(); YAML yaml = new YAML(lastExecutionFile); - yaml.set(Config.getInstance().getLibraryPath().getAbsolutePath().replace("\\", "/"), DateUtils.convert(new Date())); + yaml.set(Config.getInstance().getNormalizedLibraryPath(), DateUtils.convert(new Date())); yaml.save(lastExecutionFile); } catch (IOException | YamlInvalidContentException e) { - log.error("last-execution.yml could not be created: ", e); // TODO + log.error("last-execution.yml could not be created or read.", e); } } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java index 1421c9f..61eaa20 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/DateUtils.java @@ -13,7 +13,7 @@ public class DateUtils { /** * Convert String to date. - * @return parsed date, null if exception occurs + * @return parsed date, defaultDate if exception occurs */ public static Date convert(String date, Date defaultDate) { try {