mirror of
https://github.com/RatzzFatzz/MKVAudioSubtitleChanger.git
synced 2026-02-11 02:05:56 +01:00
Add dir loading for coherent feature
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger;
|
||||
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ConfigLoader;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.AttributeUpdaterKernel;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.CoherentAttributeUpdaterKernel;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.DefaultAttributeUpdaterKernel;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.MkvFileCollector;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.MkvFileProcessor;
|
||||
@@ -11,7 +13,9 @@ import lombok.extern.slf4j.Slf4j;
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
ConfigLoader.initConfig(args);
|
||||
AttributeUpdaterKernel kernel = new DefaultAttributeUpdaterKernel(new MkvFileCollector(), new MkvFileProcessor());
|
||||
AttributeUpdaterKernel kernel = Config.getInstance().getCoherent() != null
|
||||
? new CoherentAttributeUpdaterKernel(new MkvFileCollector(), new MkvFileProcessor())
|
||||
: new DefaultAttributeUpdaterKernel(new MkvFileCollector(), new MkvFileProcessor());
|
||||
kernel.execute();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ public class ConfigLoader {
|
||||
new SetValidator(FORCED_KEYWORDS, false, true),
|
||||
new SetValidator(COMMENTARY_KEYWORDS, false, true),
|
||||
new SetValidator(EXCLUDED_DIRECTORY, false, true),
|
||||
new AttributeConfigValidator()
|
||||
new AttributeConfigValidator(),
|
||||
new CoherentConfigValidator(COHERENT, false)
|
||||
);
|
||||
|
||||
public static void initConfig(String[] args) {
|
||||
|
||||
@@ -17,6 +17,6 @@ public class CoherentConfigValidator extends ConfigValidator<Integer> {
|
||||
|
||||
@Override
|
||||
boolean isValid(Integer result) {
|
||||
return result > 0;
|
||||
return result >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,4 +10,13 @@ public interface FileCollector {
|
||||
* @return list of all files within the directory
|
||||
*/
|
||||
List<File> loadFiles(String path);
|
||||
|
||||
/**
|
||||
* Load all directories from path, but only until depth is reached.
|
||||
*
|
||||
* @param path leads to a directory which will be loaded recursively until depth
|
||||
* @param depth limit directory crawling
|
||||
* @return list of directory until depth
|
||||
*/
|
||||
List<File> loadDirectories(String path, int depth);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,9 @@ import java.util.stream.Stream;
|
||||
public class MkvFileCollector implements FileCollector {
|
||||
private static final String[] fileExtensions = new String[]{".mkv", ".mka", ".mks", ".mk3d"};
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public List<File> loadFiles(String path) {
|
||||
try (Stream<Path> paths = Files.walk(Paths.get(path))) {
|
||||
@@ -28,4 +31,19 @@ public class MkvFileCollector implements FileCollector {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public List<File> loadDirectories(String path, int depth) {
|
||||
try (Stream<Path> paths = Files.walk(Paths.get(path), depth)) {
|
||||
return paths.map(Path::toFile)
|
||||
.filter(File::isDirectory)
|
||||
.collect(Collectors.toList());
|
||||
} catch (IOException e) {
|
||||
log.error("Couldn't find file or directory!", e);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,10 +15,12 @@ import me.tongfei.progressbar.ProgressBarStyle;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@@ -57,6 +59,16 @@ public abstract class AttributeUpdaterKernel {
|
||||
statistic.printResult();
|
||||
}
|
||||
|
||||
protected List<File> loadExcludedFiles() {
|
||||
List<File> excludedFiles = Config.getInstance().getExcludedDirectories().stream()
|
||||
.map(collector::loadFiles)
|
||||
.flatMap(Collection::stream)
|
||||
.collect(Collectors.toList());
|
||||
statistic.increaseTotalBy(excludedFiles.size());
|
||||
statistic.increaseExcludedBy(excludedFiles.size());
|
||||
return excludedFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load files or directories to update.
|
||||
* Remove excluded directories.
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel;
|
||||
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.FileCollector;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.FileProcessor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
public class CoherentAttributeUpdaterKernel extends AttributeUpdaterKernel {
|
||||
@@ -19,7 +22,19 @@ public class CoherentAttributeUpdaterKernel extends AttributeUpdaterKernel{
|
||||
*/
|
||||
@Override
|
||||
List<File> loadFiles(String path) {
|
||||
return null;
|
||||
List<File> excludedFiles = loadExcludedFiles();
|
||||
List<File> directories = collector.loadDirectories(path, Config.getInstance().getCoherent())
|
||||
.stream().filter(file -> !excludedFiles.contains(file))
|
||||
.collect(Collectors.toList());
|
||||
return directories.stream()
|
||||
.filter(dir -> isParentDirectory(dir, directories))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private boolean isParentDirectory(File directory, List<File> directories) {
|
||||
String path = directory.getAbsolutePath();
|
||||
return directories.stream()
|
||||
.noneMatch(dir -> dir.getAbsolutePath().contains(path) && !StringUtils.equals(path, dir.getAbsolutePath()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,12 +25,7 @@ public class DefaultAttributeUpdaterKernel extends AttributeUpdaterKernel {
|
||||
*/
|
||||
@Override
|
||||
List<File> loadFiles(String path) {
|
||||
List<File> excludedFiles = Config.getInstance().getExcludedDirectories().stream()
|
||||
.map(collector::loadFiles)
|
||||
.flatMap(Collection::stream)
|
||||
.collect(Collectors.toList());
|
||||
statistic.increaseTotalBy(excludedFiles.size());
|
||||
statistic.increaseExcludedBy(excludedFiles.size());
|
||||
List<File> excludedFiles = loadExcludedFiles();
|
||||
return collector.loadFiles(Config.getInstance().getLibraryPath().getAbsolutePath()).stream()
|
||||
.filter(file -> !excludedFiles.contains(file))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@@ -15,7 +15,7 @@ public enum ConfigProperty {
|
||||
CONFIG_PATH("config-path", "Path to config file", "p", 1),
|
||||
MKV_TOOL_NIX("mkvtoolnix", "Path to mkv tool nix installation", "m", 1),
|
||||
SAFE_MODE("safe-mode", "Test run (no files will be changes)", "s", 0),
|
||||
COHERENT("coherent", "Try to match whole series with same config", null, 0),
|
||||
COHERENT("coherent", "Try to match whole series with same config", "c", 1),
|
||||
WINDOWS("windows", "Is operating system windows", null, 0),
|
||||
THREADS("threads", "Thread count (default: 2)", "t", 1),
|
||||
INCLUDE_PATTERN("include-pattern", "Include files matching pattern (default: \".*\")", "i", 1),
|
||||
|
||||
Reference in New Issue
Block a user