From 414b9e37277dd19faa03a6e8ef7b70f30b8aae09 Mon Sep 17 00:00:00 2001 From: io42630 Date: Mon, 4 Apr 2022 18:29:17 +0200 Subject: [PATCH] _ fix separator in Record _ fix Record not using absolute path _ add ignore mechanism --- src/main/java/com/olexyn/ensync/MainApp.java | 6 ++++ .../olexyn/ensync/artifacts/Constants.java | 2 ++ .../ensync/artifacts/SyncDirectory.java | 32 +++++++++++++------ src/main/resources/syncignore | 2 ++ 4 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/syncignore diff --git a/src/main/java/com/olexyn/ensync/MainApp.java b/src/main/java/com/olexyn/ensync/MainApp.java index 54b99e9..b884faf 100644 --- a/src/main/java/com/olexyn/ensync/MainApp.java +++ b/src/main/java/com/olexyn/ensync/MainApp.java @@ -8,11 +8,14 @@ import org.json.JSONObject; import java.io.File; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; public class MainApp { final public static Thread FLOW_THREAD = new Thread(new Flow(), "flow"); + public static List IGNORE = new ArrayList<>(); final private static Tools tools = new Tools(); public static void main(String[] args) throws JSONException { @@ -30,6 +33,9 @@ public class MainApp { DataRoot.get().put(bundleKey, syncBundle); } + String ignorePath = System.getProperty("user.dir") + "/src/main/resources/syncignore"; + IGNORE = tools.fileToLines(new File(ignorePath)); + FLOW_THREAD.start(); } } diff --git a/src/main/java/com/olexyn/ensync/artifacts/Constants.java b/src/main/java/com/olexyn/ensync/artifacts/Constants.java index c6edff8..52645ae 100644 --- a/src/main/java/com/olexyn/ensync/artifacts/Constants.java +++ b/src/main/java/com/olexyn/ensync/artifacts/Constants.java @@ -4,6 +4,8 @@ public interface Constants { String STATE_FILE_NAME = "record.ensync"; String SPACE = " "; + String SLASH = "/"; String EMPTY = ""; + String RECORD_SEPARATOR = "-_record_-"; } diff --git a/src/main/java/com/olexyn/ensync/artifacts/SyncDirectory.java b/src/main/java/com/olexyn/ensync/artifacts/SyncDirectory.java index 20b6d06..09b858d 100644 --- a/src/main/java/com/olexyn/ensync/artifacts/SyncDirectory.java +++ b/src/main/java/com/olexyn/ensync/artifacts/SyncDirectory.java @@ -1,13 +1,13 @@ package com.olexyn.ensync.artifacts; import com.olexyn.ensync.LogUtil; +import com.olexyn.ensync.MainApp; import com.olexyn.ensync.Tools; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; -import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; @@ -19,12 +19,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import java.util.stream.Collectors; import java.util.stream.Stream; import static com.olexyn.ensync.artifacts.Constants.EMPTY; -import static com.olexyn.ensync.artifacts.Constants.SPACE; +import static com.olexyn.ensync.artifacts.Constants.RECORD_SEPARATOR; /** * A SyncDirectory is a singular occurrence of a directory in the filesystems. @@ -71,15 +72,17 @@ public class SyncDirectory { List lines = tools.fileToLines(record.getPath().toFile()); for (String line : lines) { - // this is a predefined format: " " - var lineArr = line.split(SPACE); + // this is a predefined format: "RECORD_SEPARATOR" + var lineArr = line.split(RECORD_SEPARATOR); long modTime = Long.parseLong(lineArr[0]); String sFilePath = lineArr[1]; - RecordFile sfile = new RecordFile(this, sFilePath); + String absolutePath = directoryPath + sFilePath; + RecordFile recordFile = new RecordFile(this, absolutePath); - sfile.setTimeModifiedFromRecord(modTime); - - filemap.put(sFilePath, sfile); + recordFile.setTimeModifiedFromRecord(modTime); + if (!shouldIgnore(recordFile.toPath())) { + filemap.put(sFilePath, recordFile); + } } return filemap; } @@ -145,21 +148,32 @@ public class SyncDirectory { String relativePath = file.getAbsolutePath() .replace(record.getTargetPath().toString(), EMPTY); var line = String.join( - SPACE, + RECORD_SEPARATOR, String.valueOf(file.lastModified()), relativePath ); outputList.add(line); }); + LOGGER.info("Writing " + outputList.size() + " files to " + record.getPath()); tools.writeStringListToFile(record.getPath().toString(), outputList); } + private boolean shouldIgnore(Path path) { + for (var entry : MainApp.IGNORE) { + if (path.toString().contains(entry)) { + return true; + } + } + return false; + } + private Stream getFiles() { try { return Files.walk(directoryPath) .filter(Files::isRegularFile) .map(Path::toFile) + .filter(file -> !shouldIgnore(file.toPath())) .filter(file -> !file.getName().equals(Constants.STATE_FILE_NAME)); } catch (IOException e) { LOGGER.severe("Could walk the file tree : Record will be empty."); diff --git a/src/main/resources/syncignore b/src/main/resources/syncignore new file mode 100644 index 0000000..d528580 --- /dev/null +++ b/src/main/resources/syncignore @@ -0,0 +1,2 @@ +collection\wallpapers +record.ensync \ No newline at end of file