diff --git a/src/main/java/GUI.java b/src/main/java/GUI.java index 92caeee..6538719 100644 --- a/src/main/java/GUI.java +++ b/src/main/java/GUI.java @@ -1,5 +1,5 @@ +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import lombok.extern.log4j.Log4j2; -import model.FileAttribute; import query.QueryBuilder; import javax.swing.*; diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java new file mode 100644 index 0000000..0a87fab --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java @@ -0,0 +1,4 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger; + +public class AttributeUpdaterKernel { +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfig.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfig.java new file mode 100644 index 0000000..d467e32 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfig.java @@ -0,0 +1,4 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.config; + +public class AttributeConfig { +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/FileCollector.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/FileCollector.java new file mode 100644 index 0000000..b369067 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/FileCollector.java @@ -0,0 +1,12 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.intimpl; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; + +import java.io.File; +import java.util.List; + +public interface FileCollector { + List loadFiles(String path); + + List loadAttributes(File file); +} diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/MkvFileCollector.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/MkvFileCollector.java new file mode 100644 index 0000000..f1b6065 --- /dev/null +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/intimpl/MkvFileCollector.java @@ -0,0 +1,86 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.intimpl; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; +import com.fasterxml.jackson.databind.ObjectMapper; +import config.MKVToolProperties; +import lombok.extern.log4j.Log4j2; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Log4j2 +public class MkvFileCollector implements FileCollector { + private ObjectMapper mapper = new ObjectMapper(); + + /** + * @param path Is entered path, which leads to one file directly or a directory which will be loaded recursive + * @return list of all files within the directory, if it's only a file, the file will be returned in a list + */ + @Override + public List loadFiles(String path) { + File file = new File(path); + if(file.isFile() && file.getAbsolutePath().endsWith(".mkv")){ + return new ArrayList() {{ + add(file); + }}; + }else if(file.isDirectory()){ + try(Stream paths = Files.walk(Paths.get(path))){ + return paths + .filter(Files::isRegularFile) + .map(Path::toFile) + .filter(f -> f.getAbsolutePath().endsWith(".mkv")) + .collect(Collectors.toList()); + }catch(IOException e){ + log.error("Couldn't find file or directory!", e); + return null; + } + }else{ + return null; + } + } + + /** + * @param file Takes the file from which the attributes will be returned + * @return list of all important attributes + */ + @Override + public List loadAttributes(File file) { + Map jsonMap; + List fileAttributes = new ArrayList<>(); + try(InputStream inputStream = + Runtime.getRuntime().exec("\"" + MKVToolProperties.getInstance().getMkvmergePath() + + "\" --identify --identification-format json \"" + file.getAbsolutePath() + "\"").getInputStream()){ + jsonMap = mapper.readValue(inputStream, Map.class); + List> tracks = (List>) jsonMap.get("tracks"); + + for(Map attribute : tracks){ + if(! "video".equals(attribute.get("type"))){ + Map properties = (Map) attribute.get("properties"); + fileAttributes.add(new FileAttribute( + (int) properties.get("number"), + (String) properties.get("language"), + (String) properties.get("track_name"), + (Boolean) properties.get("default_track"), + (Boolean) properties.get("forced_track"), + (String) attribute.get("type"))); + } + } + }catch(IOException e){ + log.error("File could not be found or loaded!"); + } + return fileAttributes; + } + + private boolean verifyFile(File file) { + return false; + } +} diff --git a/src/main/java/model/FileAttribute.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java similarity index 96% rename from src/main/java/model/FileAttribute.java rename to src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java index 00c3dbc..28a50f4 100644 --- a/src/main/java/model/FileAttribute.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/FileAttribute.java @@ -1,4 +1,4 @@ -package model; +package at.pcgamingfreaks.mkvaudiosubtitlechanger.model; import lombok.Getter; import lombok.extern.log4j.Log4j2; diff --git a/src/main/java/query/QueryBuilder.java b/src/main/java/query/QueryBuilder.java index a0d1521..4362659 100644 --- a/src/main/java/query/QueryBuilder.java +++ b/src/main/java/query/QueryBuilder.java @@ -1,9 +1,9 @@ package query; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import com.fasterxml.jackson.databind.ObjectMapper; import config.MKVToolProperties; import lombok.extern.log4j.Log4j2; -import model.FileAttribute; import javax.swing.*; import java.io.IOException;