diff --git a/build.gradle b/build.gradle index 832633a..e11d4de 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,9 @@ dependencies { 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-config:1.0.0-rc.7" + 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. // You may need to force-disable transitiveness on them. diff --git a/src/main/java/net/szum123321/textile_backup/ConfigHandler.java b/src/main/java/net/szum123321/textile_backup/ConfigHandler.java index 971b2cb..a51ee49 100644 --- a/src/main/java/net/szum123321/textile_backup/ConfigHandler.java +++ b/src/main/java/net/szum123321/textile_backup/ConfigHandler.java @@ -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") public int maxAge = 0; + @Comment("\nMaximum size of backup folder in kilo bytes. \n") + public int maxSize = 0; + @Comment("\nCompression level \n0 - 9\n") public int compression = 1; diff --git a/src/main/java/net/szum123321/textile_backup/core/BackupHelper.java b/src/main/java/net/szum123321/textile_backup/core/BackupHelper.java index d0b0835..471a1d3 100644 --- a/src/main/java/net/szum123321/textile_backup/core/BackupHelper.java +++ b/src/main/java/net/szum123321/textile_backup/core/BackupHelper.java @@ -24,19 +24,20 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.TranslatableText; import net.szum123321.textile_backup.TextileBackup; +import org.apache.commons.io.FileUtils; import java.io.File; +import java.io.FileFilter; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.Objects; public class BackupHelper { public static void log(String s, ServerCommandSource ctx){ if(ctx != null) - ctx.sendFeedback(new TranslatableText(s), true); + ctx.sendFeedback(new TranslatableText(s), false); if(TextileBackup.config.log) TextileBackup.logger.info(s); @@ -81,11 +82,13 @@ public class BackupHelper { public static void executeFileLimit(ServerCommandSource ctx){ File root = getBackupRootPath(); + FileFilter filter = f -> f.getName().endsWith("zip"); + if(root.isDirectory() && root.exists()){ if(TextileBackup.config.maxAge > 0){ LocalDateTime now = LocalDateTime.now(); - for(File f: Objects.requireNonNull(root.listFiles())){ + Arrays.stream(root.listFiles()).forEach(f ->{ if(f.exists() && f.isFile()){ LocalDateTime creationTime = LocalDateTime.from( getDateTimeFormatter().parse( @@ -98,14 +101,15 @@ public class BackupHelper { f.delete(); } } - } + }); } - if(TextileBackup.config.backupsToKeep > 0 && Objects.requireNonNull(root.listFiles()).length > TextileBackup.config.backupsToKeep){ - int var1 = Objects.requireNonNull(root.listFiles()).length - TextileBackup.config.backupsToKeep; + if(TextileBackup.config.backupsToKeep > 0 && 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; + Arrays.sort(files); for(int i = 0; i < var1; i++) { @@ -113,6 +117,15 @@ public class BackupHelper { 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(); + } + }); + } } }