From 0362170e9b8896387b18edb7a7d0c8cf20a6618b Mon Sep 17 00:00:00 2001 From: drtshock Date: Mon, 20 Jan 2014 12:21:45 -0700 Subject: [PATCH] Cleanup task --- pom.xml | 2 +- .../drtshock/playervaults/PlayerVaults.java | 5 ++++ .../drtshock/playervaults/tasks/Cleanup.java | 30 +++++++++++++++++++ .../vaultmanagement/VaultManager.java | 3 ++ src/main/resources/config.yml | 13 +++++++- 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/drtshock/playervaults/tasks/Cleanup.java diff --git a/pom.xml b/pom.xml index f650b4a..5b3dbff 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.drtshock PlayerVaults - 3.4.4 + 3.4.5-SNAPSHOT PlayerVaults http://dev.bukkit.org/server-mods/playervaults/ diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index f7a4486..1791304 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -19,6 +19,7 @@ package com.drtshock.playervaults; import com.drtshock.playervaults.commands.Commands; import com.drtshock.playervaults.commands.SignSetInfo; import com.drtshock.playervaults.listeners.Listeners; +import com.drtshock.playervaults.tasks.Cleanup; import com.drtshock.playervaults.util.Lang; import com.drtshock.playervaults.util.Metrics; import com.drtshock.playervaults.util.Updater; @@ -92,6 +93,10 @@ public class PlayerVaults extends JavaPlugin { new File(DIRECTORY + File.separator + "backups").mkdirs(); VM = new VaultManager(this); + + if(getConfig().getBoolean("cleanup.enable", false)) { + getServer().getScheduler().runTaskAsynchronously(this, new Cleanup(getConfig().getInt("cleanup.lastEdit", 30))); + } } private void startMetrics() { diff --git a/src/main/java/com/drtshock/playervaults/tasks/Cleanup.java b/src/main/java/com/drtshock/playervaults/tasks/Cleanup.java new file mode 100644 index 0000000..a27a4c7 --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/tasks/Cleanup.java @@ -0,0 +1,30 @@ +package com.drtshock.playervaults.tasks; + +import com.drtshock.playervaults.PlayerVaults; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.File; + +public class Cleanup extends BukkitRunnable { + + private long diff; + + public Cleanup(int diff) { + this.diff = diff * 86400; + } + + + @Override + public void run() { + File file = new File(PlayerVaults.DIRECTORY); + if(!file.exists()) return; + + long time = System.currentTimeMillis(); + for(File f : file.listFiles()) { + if(time - f.lastModified() > diff) { + f.delete(); + PlayerVaults.PLUGIN.getLogger().info("Deleting vault file: " + f.getName()); + } + } + } +} diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 929ff03..6989dbe 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -204,6 +204,9 @@ public class VaultManager { public void deleteVault(CommandSender sender, String holder, int number) throws IOException { String name = holder.toLowerCase(); File file = new File(directory + File.separator + name.toLowerCase() + ".yml"); + if(!file.exists()) { + return; + } FileConfiguration playerFile = YamlConfiguration.loadConfiguration(file); if (file.exists()) { playerFile.set("vault" + number, null); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 73ed193..dee7c07 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -16,4 +16,15 @@ economy: # Cost to create a vault. You can give players playervaults.free to bypass this. cost-to-create: 100 cost-to-open: 10 - refund-on-delete: 50 \ No newline at end of file + refund-on-delete: 50 + +# Cleanup +# Should we cleanup vaults that haven't been used in awhile? +# Only checks on restarts. Runs on another thread so it won't +# lag the server. +cleanup: + enable: false + + # If a file hasn't been edited for this long, we'll clean it up. + # Time is in days. + lastEdit: 30 \ No newline at end of file