Backup manager update : improved code handling file filtering + refactored PaperBackupManager + new Bungee backup manager
This commit is contained in:
@@ -6,7 +6,7 @@ import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BackupConfig {
|
||||
public class PaperBackupConfig {
|
||||
public boolean worldBackupEnabled = true;
|
||||
public boolean workdirBackupEnabled = true;
|
||||
public boolean logsBackupEnabled = true;
|
@@ -26,41 +26,48 @@ public class PaperBackupManager extends BackupManager implements Listener {
|
||||
|
||||
private final Map<String, PaperWorldProcess> compressWorlds = new HashMap<>();
|
||||
|
||||
BackupConfig config;
|
||||
PaperBackupConfig config;
|
||||
|
||||
public PaperBackupManager(BackupConfig config) {
|
||||
public PaperBackupManager(PaperBackupConfig config) {
|
||||
super(config.backupDirectory);
|
||||
setConfig(config);
|
||||
|
||||
|
||||
|
||||
for (final World world : Bukkit.getWorlds()) {
|
||||
initWorldProcess(world.getName());
|
||||
}
|
||||
|
||||
initWorkdirProcess();
|
||||
|
||||
addProcess(new PaperWorkdirProcess(this));
|
||||
addProcess(new RotatedLogsBackupProcess(this, true, new File("logs"), "[0-9]{4}-[0-9]{2}-[0-9]{2}(-[0-9]+)?\\.log\\.gz"));
|
||||
|
||||
Bukkit.getServer().getPluginManager().registerEvents(this, PandaLibPaper.getPlugin());
|
||||
|
||||
}
|
||||
|
||||
public void setConfig(BackupConfig config) {
|
||||
@Override
|
||||
protected void addProcess(BackupProcess process) {
|
||||
updateProcessConfig(process);
|
||||
super.addProcess(process);
|
||||
}
|
||||
|
||||
public void setConfig(PaperBackupConfig config) {
|
||||
this.config = config;
|
||||
for (BackupProcess process : backupQueue) {
|
||||
if (process instanceof PaperWorkdirProcess) {
|
||||
process.setEnabled(config.workdirBackupEnabled);
|
||||
process.setBackupCleaner(config.workdirBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
}
|
||||
else if (process instanceof PaperWorldProcess) {
|
||||
process.setEnabled(config.worldBackupEnabled);
|
||||
process.setBackupCleaner(config.worldBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
}
|
||||
else if (process instanceof RotatedLogsBackupProcess) {
|
||||
process.setEnabled(config.logsBackupEnabled);
|
||||
}
|
||||
backupQueue.forEach(this::updateProcessConfig);
|
||||
}
|
||||
|
||||
|
||||
public void updateProcessConfig(BackupProcess process) {
|
||||
if (process instanceof PaperWorkdirProcess) {
|
||||
process.setEnabled(config.workdirBackupEnabled);
|
||||
process.setBackupCleaner(config.workdirBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
process.setIgnoreList(config.workdirIgnoreList);
|
||||
}
|
||||
else if (process instanceof PaperWorldProcess) {
|
||||
process.setEnabled(config.worldBackupEnabled);
|
||||
process.setBackupCleaner(config.worldBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
}
|
||||
else if (process instanceof RotatedLogsBackupProcess) {
|
||||
process.setEnabled(config.logsBackupEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,20 +97,10 @@ public class PaperBackupManager extends BackupManager implements Listener {
|
||||
if (compressWorlds.containsKey(worldName))
|
||||
return;
|
||||
PaperWorldProcess process = new PaperWorldProcess(this, worldName);
|
||||
process.setEnabled(config.worldBackupEnabled);
|
||||
process.setBackupCleaner(config.worldBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
addProcess(process);
|
||||
compressWorlds.put(worldName, process);
|
||||
}
|
||||
|
||||
private void initWorkdirProcess() {
|
||||
PaperWorkdirProcess process = new PaperWorkdirProcess(this);
|
||||
process.setEnabled(config.workdirBackupEnabled);
|
||||
process.setBackupCleaner(config.workdirBackupCleaner);
|
||||
process.setScheduling(config.scheduling);
|
||||
addProcess(process);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -12,37 +12,19 @@ public class PaperWorkdirProcess extends PaperBackupProcess {
|
||||
protected PaperWorkdirProcess(PaperBackupManager bm) {
|
||||
super(bm, "workdir");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public BiPredicate<File, String> getFilenameFilter() {
|
||||
return new BiPredicate<File, String>() {
|
||||
|
||||
@Override
|
||||
public boolean test(File file, String path) {
|
||||
if (globalExcluded(file, path))
|
||||
return false;
|
||||
for (String exclude : getBackupManager().config.workdirIgnoreList) {
|
||||
if (exclude.startsWith("/")) { // relative to source of workdir
|
||||
if (path.matches(exclude.substring(1)))
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
String name = path.substring(path.lastIndexOf("/") + 1);
|
||||
if (name.matches(exclude))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean globalExcluded(File file, String path) {
|
||||
if (file.isDirectory() && new File(file, "level.dat").exists())
|
||||
return true;
|
||||
return false;
|
||||
if (new File(getSourceDir(), "logs").equals(file))
|
||||
return true;
|
||||
return false;
|
||||
if (file.isFile() && file.getName().endsWith(".lck"))
|
||||
return true;
|
||||
return false;
|
||||
return false;
|
||||
return PaperWorkdirProcess.super.getFilenameFilter().test(file, path);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -27,11 +27,6 @@ public class PaperWorldProcess extends PaperBackupProcess {
|
||||
}
|
||||
|
||||
|
||||
public BiPredicate<File, String> getFilenameFilter() {
|
||||
return (f, s) -> true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public File getSourceDir() {
|
||||
return WorldUtil.worldDir(worldName);
|
||||
|
Reference in New Issue
Block a user