|
@@ -6,13 +6,14 @@ import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
|
|
-import com.gmail.nossr50.config.Config;
|
|
|
import com.gmail.nossr50.mcMMO;
|
|
|
+import com.gmail.nossr50.config.Config;
|
|
|
|
|
|
public class CleanBackupsTask extends BukkitRunnable {
|
|
|
private static final String BACKUP_DIRECTORY = mcMMO.getMainDirectory() + "backup" + File.separator;
|
|
@@ -21,7 +22,7 @@ public class CleanBackupsTask extends BukkitRunnable {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
List<Integer> savedDays = new ArrayList<Integer>();
|
|
|
- List<Integer> savedWeeks = new ArrayList<Integer>();
|
|
|
+ HashMap<Integer, List<Integer>> savedYearsWeeks = new HashMap<Integer, List<Integer>>();
|
|
|
List<File> toDelete = new ArrayList<File>();
|
|
|
int amountTotal = 0;
|
|
|
int amountDeleted = 0;
|
|
@@ -51,20 +52,29 @@ public class CleanBackupsTask extends BukkitRunnable {
|
|
|
cal.setTime(date);
|
|
|
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
|
|
|
int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
|
|
|
+ int year = cal.get(Calendar.YEAR);
|
|
|
|
|
|
if (isPast24Hours(date) && Config.getInstance().getKeepLast24Hours()) {
|
|
|
// Keep all files from the last 24 hours
|
|
|
continue;
|
|
|
}
|
|
|
- else if (isLastWeek(date) && !savedDays.contains(dayOfWeek) && Config.getInstance().getKeepDailyLastWeek()) {
|
|
|
+ else if (isLastWeek(date) && !savedDays.contains(dayOfWeek) && Config.getInstance().getKeepDailyLastWeek()) {
|
|
|
// Keep daily backups of the past week
|
|
|
savedDays.add(dayOfWeek);
|
|
|
continue;
|
|
|
}
|
|
|
- else if (!savedWeeks.contains(weekOfYear) && Config.getInstance().getKeepWeeklyPastMonth()) {
|
|
|
- // Keep one backup of each week
|
|
|
- savedWeeks.add(weekOfYear);
|
|
|
- continue;
|
|
|
+ else {
|
|
|
+ List<Integer> savedWeeks = savedYearsWeeks.get(year);
|
|
|
+ if (savedWeeks == null) {
|
|
|
+ savedWeeks = new ArrayList<Integer>();
|
|
|
+ savedYearsWeeks.put(year, savedWeeks);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!savedWeeks.contains(weekOfYear) && Config.getInstance().getKeepWeeklyPastMonth()) {
|
|
|
+ // Keep one backup of each week
|
|
|
+ savedWeeks.add(weekOfYear);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
amountDeleted++;
|