Added folder size file limit
parent
a1bb7ed8f3
commit
5aebbdbf75
|
@ -32,7 +32,9 @@ dependencies {
|
||||||
include "io.github.cottonmc:Jankson-Fabric:2.0.0+j1.2.0"
|
include "io.github.cottonmc:Jankson-Fabric:2.0.0+j1.2.0"
|
||||||
include "io.github.cottonmc.cotton:cotton-logging:1.0.0-rc.4"
|
include "io.github.cottonmc.cotton:cotton-logging:1.0.0-rc.4"
|
||||||
include "io.github.cottonmc.cotton:cotton-config:1.0.0-rc.7"
|
include "io.github.cottonmc.cotton:cotton-config:1.0.0-rc.7"
|
||||||
|
|
||||||
include "org.apache.commons:commons-compress:1.8.1"
|
include "org.apache.commons:commons-compress:1.8.1"
|
||||||
|
include "org.apache.commons:commons-io:2.6"
|
||||||
|
|
||||||
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
|
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
|
||||||
// You may need to force-disable transitiveness on them.
|
// You may need to force-disable transitiveness on them.
|
||||||
|
|
|
@ -41,6 +41,9 @@ public class ConfigHandler {
|
||||||
@Comment("\nMaximum age of backups to keep in seconds.\n if 0 then backups will not be deleted based on age \n")
|
@Comment("\nMaximum age of backups to keep in seconds.\n if 0 then backups will not be deleted based on age \n")
|
||||||
public int maxAge = 0;
|
public int maxAge = 0;
|
||||||
|
|
||||||
|
@Comment("\nMaximum size of backup folder in kilo bytes. \n")
|
||||||
|
public int maxSize = 0;
|
||||||
|
|
||||||
@Comment("\nCompression level \n0 - 9\n")
|
@Comment("\nCompression level \n0 - 9\n")
|
||||||
public int compression = 1;
|
public int compression = 1;
|
||||||
|
|
||||||
|
|
|
@ -24,19 +24,20 @@ import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.TranslatableText;
|
||||||
import net.szum123321.textile_backup.TextileBackup;
|
import net.szum123321.textile_backup.TextileBackup;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileFilter;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class BackupHelper {
|
public class BackupHelper {
|
||||||
|
|
||||||
public static void log(String s, ServerCommandSource ctx){
|
public static void log(String s, ServerCommandSource ctx){
|
||||||
if(ctx != null)
|
if(ctx != null)
|
||||||
ctx.sendFeedback(new TranslatableText(s), true);
|
ctx.sendFeedback(new TranslatableText(s), false);
|
||||||
|
|
||||||
if(TextileBackup.config.log)
|
if(TextileBackup.config.log)
|
||||||
TextileBackup.logger.info(s);
|
TextileBackup.logger.info(s);
|
||||||
|
@ -81,11 +82,13 @@ public class BackupHelper {
|
||||||
public static void executeFileLimit(ServerCommandSource ctx){
|
public static void executeFileLimit(ServerCommandSource ctx){
|
||||||
File root = getBackupRootPath();
|
File root = getBackupRootPath();
|
||||||
|
|
||||||
|
FileFilter filter = f -> f.getName().endsWith("zip");
|
||||||
|
|
||||||
if(root.isDirectory() && root.exists()){
|
if(root.isDirectory() && root.exists()){
|
||||||
if(TextileBackup.config.maxAge > 0){
|
if(TextileBackup.config.maxAge > 0){
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
for(File f: Objects.requireNonNull(root.listFiles())){
|
Arrays.stream(root.listFiles()).forEach(f ->{
|
||||||
if(f.exists() && f.isFile()){
|
if(f.exists() && f.isFile()){
|
||||||
LocalDateTime creationTime = LocalDateTime.from(
|
LocalDateTime creationTime = LocalDateTime.from(
|
||||||
getDateTimeFormatter().parse(
|
getDateTimeFormatter().parse(
|
||||||
|
@ -98,14 +101,15 @@ public class BackupHelper {
|
||||||
f.delete();
|
f.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(TextileBackup.config.backupsToKeep > 0 && Objects.requireNonNull(root.listFiles()).length > TextileBackup.config.backupsToKeep){
|
if(TextileBackup.config.backupsToKeep > 0 && root.listFiles().length > TextileBackup.config.backupsToKeep){
|
||||||
int var1 = Objects.requireNonNull(root.listFiles()).length - TextileBackup.config.backupsToKeep;
|
int var1 = root.listFiles().length - TextileBackup.config.backupsToKeep;
|
||||||
|
|
||||||
File[] files = root.listFiles();
|
File[] files = root.listFiles(filter);
|
||||||
assert files != null;
|
assert files != null;
|
||||||
|
|
||||||
Arrays.sort(files);
|
Arrays.sort(files);
|
||||||
|
|
||||||
for(int i = 0; i < var1; i++) {
|
for(int i = 0; i < var1; i++) {
|
||||||
|
@ -113,6 +117,15 @@ public class BackupHelper {
|
||||||
files[i].delete();
|
files[i].delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(TextileBackup.config.maxSize > 0 && FileUtils.sizeOfDirectory(root) / 1024 > TextileBackup.config.maxSize){
|
||||||
|
Arrays.stream(root.listFiles()).sorted().forEach(e -> {
|
||||||
|
if(FileUtils.sizeOfDirectory(root) / 1024 > TextileBackup.config.maxSize){
|
||||||
|
log("Deleting: " + e.getName(), ctx);
|
||||||
|
e.delete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue