1
0
Fork 0

move file management to commons library

This commit is contained in:
xeviff 2022-10-15 11:35:02 +02:00
parent bd2a013283
commit f9a3399303
3 changed files with 211 additions and 0 deletions

View File

@ -0,0 +1,72 @@
package tv.mangrana.jobs;
import tv.mangrana.config.LocalEnvironmentManager;
import java.io.File;
import static tv.mangrana.jobs.JobFile.JobLocation.*;
import static tv.mangrana.utils.PathUtils.shiftFileFolder;
public abstract class JobFile<E> {
public enum JobLocation {
PATH_TODO("to_do"),
PATH_DOING("doing"),
PATH_DONE("done");
private final String folderName;
private static final String LOCAL_WORKING_PATH = "local_test";
JobLocation(String folderName) {
this.folderName=folderName;
}
public String getFolderName(){
return getLocalNameIfNecessary(this);
}
private String getLocalNameIfNecessary(JobLocation location) {
if (LocalEnvironmentManager.isLocal()
&& (location.equals(JobLocation.PATH_TODO) || location.equals(JobLocation.PATH_DOING))) {
return LOCAL_WORKING_PATH;
}
return location.folderName;
}
}
protected JobFile(File jobFile) {
this.jobFile = jobFile;
}
public abstract String getInfo(E key);
public abstract boolean hasNoInfo();
protected File jobFile;
public File getFile () {
return jobFile;
}
public void markDoing() {
if (jobFile.getAbsolutePath().contains(PATH_TODO.getFolderName())) {
jobFile = shiftFileFolder(jobFile, PATH_TODO, PATH_DOING);
}
}
public void markDone() {
jobFile = shiftFileFolder(jobFile, PATH_DOING, PATH_DONE);
}
public void forceMarkDone() {
if (jobFile.getAbsolutePath().contains(PATH_DOING.getFolderName())) {
jobFile = shiftFileFolder(jobFile, PATH_DOING, PATH_DONE);
} else if (jobFile.getAbsolutePath().contains(PATH_TODO.getFolderName())) {
jobFile = shiftFileFolder(jobFile, PATH_TODO, PATH_DONE);
}
}
public void driveBack() {
if (jobFile.getAbsolutePath().contains(PATH_DOING.getFolderName())) {
jobFile = shiftFileFolder(jobFile, PATH_DOING, PATH_TODO);
}
}
}

View File

@ -0,0 +1,65 @@
package tv.mangrana.jobs;
import tv.mangrana.config.LocalEnvironmentManager;
import tv.mangrana.utils.PathUtils;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static tv.mangrana.config.LocalEnvironmentManager.NAS_ACCESS_FOLDER_FROM_MAC;
import static tv.mangrana.jobs.JobFile.JobLocation;
import static tv.mangrana.jobs.JobFile.JobLocation.PATH_DOING;
import static tv.mangrana.jobs.JobFile.JobLocation.PATH_TODO;
import static tv.mangrana.utils.PathUtils.addSubFolder;
import static tv.mangrana.utils.PathUtils.rootFolder;
public class JobFileManager {
private JobFileManager(){}
public static final String JOBS_FOLDER = "jobs";
public enum JobFileType {
SONARR_JOBS("sonarr"),
RADARR_JOBS("radarr");
private final String folderName;
JobFileType(String folderName) {
this.folderName=folderName;
}
public String getFolderName(){
return folderName;
}
}
public static void moveUncompletedJobsToRetry(JobFileType appType) {
File jobsDir = new File(getAbsolutePath(PATH_DOING, appType));
File[] files = jobsDir.listFiles();
List<File> uncompleted = files!=null
? Arrays.asList(files)
: Collections.emptyList();
uncompleted.forEach(file -> PathUtils.shiftFileFolder(file, PATH_DOING, PATH_TODO));
}
public static List<File> retrieveJobFiles(String fileIdentifierRegex, JobFileType appType) {
File jobsDir = new File(getAbsolutePath(PATH_TODO, appType));
File[] files = jobsDir.listFiles();
return files==null
? Collections.emptyList()
: Arrays.stream(files)
.filter(file -> file.getName().matches(fileIdentifierRegex))
.sorted(PathUtils::compareFileCreationDate)
.collect(Collectors.toList());
}
public static String getAbsolutePath(JobLocation location, JobFileType appType) {
String jobsFolder = LocalEnvironmentManager.isLocal()
? addSubFolder(rootFolder(NAS_ACCESS_FOLDER_FROM_MAC), JOBS_FOLDER)
: rootFolder(JOBS_FOLDER);
String appFolderPath = addSubFolder(jobsFolder, appType.getFolderName());
return addSubFolder(appFolderPath, location.getFolderName());
}
}

View File

@ -0,0 +1,74 @@
package tv.mangrana.utils;
import tv.mangrana.jobs.JobFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
public class PathUtils {
public static final char SEPARATOR = '/';
private PathUtils(){}
public static String addSubFolder(String parentFolder, String childFolder) {
return parentFolder+ SEPARATOR +childFolder;
}
public static String rootFolder(String rootFolderName){
return addSubFolder("",rootFolderName);
}
public static String getParentFromFullPath(String absolutePath){
return Paths
.get(absolutePath)
.getParent()
.getFileName()
.toString();
}
public static String getCurrentFromFullPath(String absolutePath) {
return absolutePath.substring(absolutePath.lastIndexOf(SEPARATOR)+1);
}
public static File shiftFileFolder(File jobFile, JobFile.JobLocation folderOrigin, JobFile.JobLocation folderDestination) {
try {
Path newPath = Files.move(
jobFile.toPath()
, Paths.get(jobFile.getAbsolutePath()
.replaceFirst(folderOrigin.getFolderName(), folderDestination.getFolderName())));
log(Output.msg("moved job file <{2}> from -{0}- to -{1}-", folderOrigin, folderDestination, jobFile.getAbsolutePath()));
return newPath.toFile();
} catch (IOException e) {
log(Output.msg("COULD NOT MOVE file {2} from -{0}- to -{1}-", folderOrigin, folderDestination, jobFile.getAbsolutePath()));
return jobFile;
}
}
public static int compareFileCreationDate (File o1, File o2) {
final String creationTimeAttr = "creationTime";
int res = 0;
try {
FileTime o1Birthday = (FileTime) Files.getAttribute(o1.toPath(), creationTimeAttr);
FileTime o2Birthday = (FileTime) Files.getAttribute(o2.toPath(), creationTimeAttr);
res = o1Birthday.compareTo(o2Birthday);
} catch (IOException e) {
log("there was a problem trying to compare creation date between "
+ o1.getName() + " and " + o2.getName());
}
return res;
}
private static void log(String msg){
Output.log("PathUtils: "+msg);
}
public static String getRootProjectPath() {
return System.getProperty("user.dir");
}
}