Add handler for only new files parameter

This commit is contained in:
RatzzFatzz
2026-01-08 22:03:06 +01:00
parent 1165dd8380
commit a5aae0acf4
12 changed files with 178 additions and 29 deletions

View File

@@ -39,13 +39,14 @@ public class CommandRunner implements Runnable {
System.out.println("Safemode active. No files will be changed!"); System.out.println("Safemode active. No files will be changed!");
} }
FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate()); LastExecutionHandler lastExecutionHandler = config.isOnlyNewFiles() ? new LastExecutionHandler("./last-executions.yml") : null;
FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate(), lastExecutionHandler);
FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter)); FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter));
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired()); AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired());
AttributeUpdater kernel = config.getCoherent() != null AttributeUpdater kernel = config.getCoherent() != null
? new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor) ? new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor, lastExecutionHandler)
: new SingleFileAttributeUpdater(config, fileProcessor, attributeChangeProcessor); : new SingleFileAttributeUpdater(config, fileProcessor, attributeChangeProcessor, lastExecutionHandler);
kernel.execute(); kernel.execute();
} }
} }

View File

@@ -9,9 +9,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
import java.util.Date; import java.util.*;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -21,6 +19,7 @@ public class FileFilter {
private final Set<String> excluded; private final Set<String> excluded;
private final Pattern includePattern; private final Pattern includePattern;
private final Date filterDate; private final Date filterDate;
private final LastExecutionHandler lastExecutionHandler;
private final String EXTENSION_GROUP = "extension"; private final String EXTENSION_GROUP = "extension";
private final Pattern extensionPattern = Pattern.compile(String.format(".*(?<%s>\\..*)", EXTENSION_GROUP)); private final Pattern extensionPattern = Pattern.compile(String.format(".*(?<%s>\\..*)", EXTENSION_GROUP));
@@ -33,8 +32,9 @@ public class FileFilter {
} }
if (!hasMatchingPattern(pathName) if (!hasMatchingPattern(pathName)
|| !isNewer(pathName) || isExcluded(pathName, new HashSet<>(excluded))
|| isExcluded(pathName, new HashSet<>(excluded))) { || lastExecutionHandler != null && !isNewOrChanged(pathName)
|| !isNewer(pathName, filterDate)) {
log.debug("Excluded {}", pathName); log.debug("Excluded {}", pathName);
ResultStatistic.getInstance().excluded(); ResultStatistic.getInstance().excluded();
return false; return false;
@@ -52,19 +52,20 @@ public class FileFilter {
return includePattern.matcher(pathName.getName()).matches(); return includePattern.matcher(pathName.getName()).matches();
} }
private boolean isNewer(File pathName) { private boolean isNewer(File pathName, Date date) {
if (filterDate == null) return true; if (date == null) return true;
try { try {
BasicFileAttributes attributes = Files.readAttributes(pathName.toPath(), BasicFileAttributes.class); BasicFileAttributes attributes = Files.readAttributes(pathName.toPath(), BasicFileAttributes.class);
return isNewer(DateUtils.convert(attributes.creationTime().toMillis())); return isNewer(DateUtils.convert(attributes.creationTime().toMillis()), date)
|| isNewer(DateUtils.convert(attributes.lastModifiedTime().toMillis()), date);
} catch (IOException e) { } catch (IOException e) {
log.warn("File attributes could not be read", e); log.warn("File attributes could not be read", e);
} }
return true; return true;
} }
private boolean isNewer(Date creationDate) { private boolean isNewer(Date creationDate, Date compareDate) {
return creationDate.toInstant().isAfter(filterDate.toInstant()); return creationDate.toInstant().isAfter(compareDate.toInstant());
} }
private boolean isExcluded(File pathName, Set<String> excludedDirs) { private boolean isExcluded(File pathName, Set<String> excludedDirs) {
@@ -86,4 +87,9 @@ public class FileFilter {
return false; return false;
} }
private boolean isNewOrChanged(File pathname) {
Date lastExecutionDate = lastExecutionHandler.get(pathname.getAbsolutePath());
return lastExecutionDate == null || isNewer(pathname, lastExecutionDate);
}
} }

View File

@@ -0,0 +1,61 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl;
import at.pcgamingfreaks.yaml.YAML;
import at.pcgamingfreaks.yaml.YamlInvalidContentException;
import at.pcgamingfreaks.yaml.YamlKeyNotFoundException;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;
import java.time.Instant;
import java.util.Date;
@Slf4j
public class LastExecutionHandler {
private final File file;
private YAML lastFileExecution;
public LastExecutionHandler(String path) {
file = new File(path);
try {
lastFileExecution = loadLastFileExecution(file);
} catch (YamlInvalidContentException | IOException e) {
log.warn("Couldn't find or read {}", path, e);
}
}
public YAML loadLastFileExecution(File file) throws YamlInvalidContentException, IOException {
if (file.exists() && file.isFile()) {
return new YAML(file);
}
return new YAML("");
}
public Date get(String path) {
if (!lastFileExecution.isSet(path)) return null;
try {
return Date.from(Instant.parse(lastFileExecution.getString(path)));
} catch (YamlKeyNotFoundException e) {
throw new RuntimeException(e);
}
}
public void update(String path) {
update(path, Date.from(Instant.now()));
}
public void update(String path, Date execution) {
if (lastFileExecution == null) return;
lastFileExecution.set(path, execution.toInstant());
}
public void persist() {
try {
lastFileExecution.save(file);
} catch (IOException e) {
log.warn("", e);
}
}
}

View File

@@ -1,6 +1,7 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.exceptions.MkvToolNixException; import at.pcgamingfreaks.mkvaudiosubtitlechanger.exceptions.MkvToolNixException;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic;
@@ -25,14 +26,16 @@ public abstract class AttributeUpdater {
protected final InputConfig config; protected final InputConfig config;
protected final FileProcessor fileProcessor; protected final FileProcessor fileProcessor;
protected final AttributeChangeProcessor attributeChangeProcessor; protected final AttributeChangeProcessor attributeChangeProcessor;
protected final LastExecutionHandler lastExecutionHandler;
protected final ResultStatistic statistic = ResultStatistic.getInstance(); protected final ResultStatistic statistic = ResultStatistic.getInstance();
private final ExecutorService executor; private final ExecutorService executor;
public AttributeUpdater(InputConfig config, FileProcessor fileProcessor, AttributeChangeProcessor attributeChangeProcessor) { public AttributeUpdater(InputConfig config, FileProcessor fileProcessor, AttributeChangeProcessor attributeChangeProcessor, LastExecutionHandler lastExecutionHandler) {
this.config = config; this.config = config;
this.fileProcessor = fileProcessor; this.fileProcessor = fileProcessor;
this.attributeChangeProcessor = attributeChangeProcessor; this.attributeChangeProcessor = attributeChangeProcessor;
this.lastExecutionHandler = lastExecutionHandler;
this.executor = Executors.newFixedThreadPool(config.getThreads()); this.executor = Executors.newFixedThreadPool(config.getThreads());
} }
@@ -62,7 +65,7 @@ public abstract class AttributeUpdater {
executor.awaitTermination(1, TimeUnit.DAYS); executor.awaitTermination(1, TimeUnit.DAYS);
} }
// writeLastExecutionDate(); lastExecutionHandler.persist();
statistic.stopTimer(); statistic.stopTimer();
statistic.print(); statistic.print();
@@ -84,6 +87,7 @@ public abstract class AttributeUpdater {
* @param fileInfo contains information about file and desired configuration. * @param fileInfo contains information about file and desired configuration.
*/ */
protected void checkStatusAndUpdate(FileInfo fileInfo) { protected void checkStatusAndUpdate(FileInfo fileInfo) {
if (lastExecutionHandler != null) lastExecutionHandler.update(fileInfo.getFile().getAbsolutePath());
if (!fileInfo.getChanges().isEmpty()) { if (!fileInfo.getChanges().isEmpty()) {
statistic.changePlanned(); statistic.changePlanned();

View File

@@ -1,5 +1,6 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
@@ -15,8 +16,8 @@ import java.util.Set;
@Slf4j @Slf4j
public class CoherentAttributeUpdater extends SingleFileAttributeUpdater { public class CoherentAttributeUpdater extends SingleFileAttributeUpdater {
public CoherentAttributeUpdater(InputConfig config, FileProcessor processor, AttributeChangeProcessor attributeChangeProcessor) { public CoherentAttributeUpdater(InputConfig config, FileProcessor processor, AttributeChangeProcessor attributeChangeProcessor, LastExecutionHandler lastExecutionHandler) {
super(config, processor, attributeChangeProcessor); super(config, processor, attributeChangeProcessor, lastExecutionHandler);
} }
@Override @Override

View File

@@ -1,5 +1,6 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -12,8 +13,8 @@ import java.util.List;
@Slf4j @Slf4j
public class SingleFileAttributeUpdater extends AttributeUpdater { public class SingleFileAttributeUpdater extends AttributeUpdater {
public SingleFileAttributeUpdater(InputConfig config, FileProcessor processor, AttributeChangeProcessor attributeChangeProcessor) { public SingleFileAttributeUpdater(InputConfig config, FileProcessor processor, AttributeChangeProcessor attributeChangeProcessor, LastExecutionHandler lastExecutionHandler) {
super(config, processor, attributeChangeProcessor); super(config, processor, attributeChangeProcessor, lastExecutionHandler);
} }
@Override @Override

View File

@@ -53,8 +53,8 @@ public class InputConfig implements CommandLine.IVersionProvider {
private boolean forceCoherent; private boolean forceCoherent;
// TODO: implement usage // TODO: implement usage
// @Option(names = {"-n", "--only-new-file"}, description = "sets filter-date to last successful execution (overwrites input of filter-date)") @Option(names = {"-n", "--only-new-file"}, description = "ignores all files unchanged and previously processed")
// private boolean onlyNewFiles; private boolean onlyNewFiles;
@Option(names = {"-d", "--filter-date"}, defaultValue = Option.NULL_VALUE, description = "only consider files created newer than entered date (format: \"dd.MM.yyyy-HH:mm:ss\")") @Option(names = {"-d", "--filter-date"}, defaultValue = Option.NULL_VALUE, description = "only consider files created newer than entered date (format: \"dd.MM.yyyy-HH:mm:ss\")")
private Date filterDate; private Date filterDate;
@Option(names = {"-i", "--include-pattern"}, defaultValue = ".*", description = "include files matching pattern") @Option(names = {"-i", "--include-pattern"}, defaultValue = ".*", description = "include files matching pattern")

View File

@@ -71,7 +71,7 @@ class FileFilterTest {
when(file.toPath()).thenReturn(Path.of(TEST_FILE)); when(file.toPath()).thenReturn(Path.of(TEST_FILE));
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
FileFilter fileFilter = new FileFilter(excludedDirs, Pattern.compile(pattern), new Date(currentTime + filterDateOffset)); FileFilter fileFilter = new FileFilter(excludedDirs, Pattern.compile(pattern), new Date(currentTime + filterDateOffset), null);
try (MockedStatic<DateUtils> mockedFiles = Mockito.mockStatic(DateUtils.class)) { try (MockedStatic<DateUtils> mockedFiles = Mockito.mockStatic(DateUtils.class)) {
mockedFiles mockedFiles

View File

@@ -0,0 +1,72 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.time.Instant;
import static org.junit.jupiter.api.Assertions.*;
class LastExecutionHandlerTest {
private static final String LAST_EXECUTION_YML = "./last-execution.yml";
@AfterEach
void destruct() {
File file = new File("./last-execution.yml");
if (file.exists()) file.delete();
}
@Test
void missingFile() throws IOException {
LastExecutionHandler underTest = new LastExecutionHandler("./last-execution.yml");
assertNull(underTest.get("/arst"));
underTest.update("/arst");
assertNotNull(underTest.get("/arst"));
underTest.persist();
File file = new File("./last-execution.yml");
assertTrue(file.exists());
assertTrue(Files.readString(file.toPath()).contains("/arst: "));
}
@Test
void emptyFile() throws IOException {
File file = new File(LAST_EXECUTION_YML);
file.createNewFile();
missingFile(); // does the checks needed for empty file case
}
@Test
void existingFileNoChanges() throws IOException {
File file = new File(LAST_EXECUTION_YML);
file.createNewFile();
Files.writeString(file.toPath(), "/arst: \"" + Instant.now() + "\"");
String expected = Files.readString(file.toPath());
LastExecutionHandler underTest = new LastExecutionHandler(LAST_EXECUTION_YML);
assertNotNull(underTest.get("/arst"));
underTest.persist();
File file1 = new File(LAST_EXECUTION_YML);
assertTrue(file1.exists());
assertEquals(expected, Files.readString(file.toPath()));
}
@Test
void existingFileWithChanges() throws IOException {
File file = new File(LAST_EXECUTION_YML);
file.createNewFile();
Files.writeString(file.toPath(), "/arst: \"" + Instant.now() + "\"");
String expected = Files.readString(file.toPath());
LastExecutionHandler underTest = new LastExecutionHandler(LAST_EXECUTION_YML);
assertNotNull(underTest.get("/arst"));
underTest.update("/arst");
assertNotNull(underTest.get("/arst"));
underTest.persist();
File file1 = new File(LAST_EXECUTION_YML);
assertTrue(file1.exists());
assertNotEquals(expected, Files.readString(file.toPath()));
}
}

View File

@@ -1,5 +1,6 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
@@ -36,7 +37,7 @@ class AttributeUpdaterTest {
InputConfig config = new InputConfig(); InputConfig config = new InputConfig();
config.setThreads(1); config.setThreads(1);
config.setSafeMode(true); config.setSafeMode(true);
AttributeUpdater underTest = new AttributeUpdater(config, null, null) { AttributeUpdater underTest = new AttributeUpdater(config, null, null, new LastExecutionHandler("")) {
@Override @Override
protected List<File> getFiles() { protected List<File> getFiles() {
return List.of(); return List.of();

View File

@@ -1,12 +1,12 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CommandRunner; import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CommandRunner;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.TrackAttributes; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.TrackAttributes;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
@@ -66,7 +66,8 @@ class CoherentAttributeUpdaterTest {
new CommandLine(commandRunner).parseArgs("-a", "ger:ger", "/arst"); new CommandLine(commandRunner).parseArgs("-a", "ger:ger", "/arst");
InputConfig config = commandRunner.getConfig(); InputConfig config = commandRunner.getConfig();
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired()); AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired());
CoherentAttributeUpdater updater = new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor); LastExecutionHandler lastExecutionHandler = new LastExecutionHandler("");
CoherentAttributeUpdater updater = new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor, lastExecutionHandler);
Set<FileInfo> matchedFiles = new HashSet<>(fileInfoMock.size() * 2); Set<FileInfo> matchedFiles = new HashSet<>(fileInfoMock.size() * 2);
List<File> files = new ArrayList<>(); List<File> files = new ArrayList<>();
@@ -193,7 +194,8 @@ class CoherentAttributeUpdaterTest {
doReturn(testMkvFiles).when(fileProcessor).loadFiles(any()); doReturn(testMkvFiles).when(fileProcessor).loadFiles(any());
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(new String[]{"pref"}, Set.of("forced"), Set.of("commentary"), Set.of("SDH")); AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(new String[]{"pref"}, Set.of("forced"), Set.of("commentary"), Set.of("SDH"));
CoherentAttributeUpdater underTest = new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor); LastExecutionHandler lastExecutionHandler = new LastExecutionHandler("");
CoherentAttributeUpdater underTest = new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor, lastExecutionHandler);
underTest.process(new File("")); underTest.process(new File(""));

View File

@@ -1,10 +1,10 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors; package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.LastExecutionHandler;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.TrackAttributes; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.TrackAttributes;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.MethodSource;
@@ -16,7 +16,6 @@ import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_DIR; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_DIR;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_FILE;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TrackAttributeUtil.*; import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.TrackAttributeUtil.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@@ -78,7 +77,8 @@ class SingleFileAttributeUpdaterTest {
FileProcessor fileProcessor = spy(FileProcessor.class); FileProcessor fileProcessor = spy(FileProcessor.class);
doReturn(fileInfo).when(fileProcessor).readAttributes(any()); doReturn(fileInfo).when(fileProcessor).readAttributes(any());
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(new String[]{"pref"}, Set.of("forced"), Set.of("commentary"), Set.of("SDH")); AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(new String[]{"pref"}, Set.of("forced"), Set.of("commentary"), Set.of("SDH"));
SingleFileAttributeUpdater underTest = new SingleFileAttributeUpdater(config, fileProcessor, attributeChangeProcessor); LastExecutionHandler lastExecutionHandler = new LastExecutionHandler("");
SingleFileAttributeUpdater underTest = new SingleFileAttributeUpdater(config, fileProcessor, attributeChangeProcessor, lastExecutionHandler);
underTest.process(fileInfo.getFile()); underTest.process(fileInfo.getFile());