Skip to content

Commit

Permalink
resolve #58
Browse files Browse the repository at this point in the history
  • Loading branch information
SkyDynamic committed Oct 5, 2024
1 parent 3a08980 commit dff8c83
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,9 @@ private static int disableScheduleBackup(ServerCommandSource commandSource) {
private static int enableScheduleBackup(ServerCommandSource commandSource) {
try {
Config.INSTANCE.setScheduleBackup(true);
if (Config.TEMP_CONFIG.scheduler != null) Config.TEMP_CONFIG.scheduler.shutdown();
if (Config.TEMP_CONFIG.scheduler != null) {
Config.TEMP_CONFIG.scheduler.shutdown();
}
startSchedule(commandSource);
return 1;
} catch (SchedulerException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import net.fabricmc.api.EnvType;
import net.minecraft.server.MinecraftServer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.quartz.Scheduler;

public class QbmTempConfig {
Expand All @@ -10,7 +12,7 @@ public class QbmTempConfig {
public String backupSlot;
public EnvType env;
public String worldName;
public Scheduler scheduler;
public @Nullable Scheduler scheduler;
public long latestScheduleExecuteTime;

public void setIsBackupValue(Boolean value) {
Expand All @@ -33,7 +35,7 @@ public void setWorldName(String worldName) {
this.worldName = worldName;
}

public void setScheduler(Scheduler scheduler) {
public void setScheduler(@NotNull Scheduler scheduler) {
this.scheduler = scheduler;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.io.FileWriter;
import java.lang.reflect.Field;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -96,7 +97,7 @@ public void setConfigStorage(ConfigStorage configStorage) {

public List<String> getIgnoredFiles() {
synchronized (lock) {
List<String> list = configStorage.getIgnoredFiles();
List<String> list = new ArrayList<>(configStorage.getIgnoredFiles());
list.add("session.lock");
return list;
}
Expand Down Expand Up @@ -132,6 +133,12 @@ public String getScheduleMode() {
}
}

public int getScheduleMaxBackup() {
synchronized (lock) {
return configStorage.getMaxScheduleBackup();
}
}

public Config.AutoRestartMode getAutoRestartMode() {
synchronized (lock) {
return configStorage.getAutoRestartMode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private static MutableText getSlotText(String name, int page, int num, long back
backText.styled(style ->
style.withClickEvent(
new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
ClickEvent.Action.SUGGEST_COMMAND,
"/qb back " + name)
)
).styled(style ->
Expand Down Expand Up @@ -131,7 +131,7 @@ private static MutableText getSlotText(String name, int page, int num, long back
nameText.styled(style ->
style.withClickEvent(
new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
ClickEvent.Action.SUGGEST_COMMAND,
"/qb show " + name)
)
).styled(style ->
Expand Down Expand Up @@ -228,7 +228,7 @@ public static MutableText show(String name) {
MutableText deleteText = Messenger.literal(tr("quickbackupmulti.show.delete_button"));
backText.styled(style ->
style.withClickEvent(
new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/qb back " + name)
new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/qb back " + name)
)
).styled(style ->
style.withHoverEvent(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.skydynamic.quickbackupmulti.utils;

import io.github.skydynamic.increment.storage.lib.database.index.type.StorageInfo;
import io.github.skydynamic.increment.storage.lib.util.IndexUtil;
import io.github.skydynamic.quickbackupmulti.QbmConstant;
import io.github.skydynamic.quickbackupmulti.config.Config;
Expand All @@ -26,8 +27,10 @@
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

import static io.github.skydynamic.quickbackupmulti.QuickBackupMulti.LOGGER;
import static io.github.skydynamic.quickbackupmulti.QuickBackupMulti.getDataBase;
import static io.github.skydynamic.quickbackupmulti.QuickBackupMulti.getStorager;
import static io.github.skydynamic.quickbackupmulti.i18n.Translate.supportLanguage;
import static io.github.skydynamic.quickbackupmulti.i18n.Translate.tr;
Expand Down Expand Up @@ -115,6 +118,11 @@ public static void createBackupDir(Path path) {
if (!path.toFile().exists()) path.toFile().mkdirs();
}

public static List<StorageInfo> getScheduleBackupList() {
Stream<StorageInfo> backupStream = getDataBase().getDatastore().find(StorageInfo.class).stream();
return backupStream.filter(it -> it.getName().startsWith("ScheduleBackup-")).toList();
}

public static ConfigStorage verifyConfig(ConfigStorage c, PlayerEntity player) {
ServerCommandSource commandSource = player.getCommandSource();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package io.github.skydynamic.quickbackupmulti.utils.schedule;

import io.github.skydynamic.increment.storage.lib.database.index.type.StorageInfo;
import io.github.skydynamic.quickbackupmulti.utils.Messenger;
import io.github.skydynamic.quickbackupmulti.config.Config;
import io.github.skydynamic.quickbackupmulti.utils.QbmManager;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import org.quartz.Job;
import org.quartz.JobExecutionContext;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

import static io.github.skydynamic.quickbackupmulti.i18n.Translate.tr;
import static io.github.skydynamic.quickbackupmulti.utils.MakeUtils.scheduleMake;
Expand All @@ -20,17 +24,34 @@ public static String generateName() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
return "ScheduleBackup-" + dateFormat.format(System.currentTimeMillis());
}

private static void checkAndDeleteOldScheduleBackup() {
List<StorageInfo> scheduleList = QbmManager.getScheduleBackupList();
if (scheduleList.size() >= Config.INSTANCE.getScheduleMaxBackup()) {
StorageInfo oldest;
Optional<StorageInfo> oldestOpt = scheduleList.stream().min(
Comparator.comparingLong(StorageInfo::getTimestamp)
);
if (oldestOpt.isPresent()) {
oldest = oldestOpt.get();
QbmManager.delete(oldest.getName());
}
}
}

@Override
public void execute(JobExecutionContext context) {
if (Config.TEMP_CONFIG.server != null) {
MinecraftServer server = Config.TEMP_CONFIG.server;
checkAndDeleteOldScheduleBackup();
if (scheduleMake(server.getCommandSource(), generateName())) {
List<ServerPlayerEntity> finalPlayerList = new ArrayList<>(server.getPlayerManager().getPlayerList());
Config.TEMP_CONFIG.setLatestScheduleExecuteTime(System.currentTimeMillis());
String nextExecuteTime = "";
switch (Config.INSTANCE.getScheduleMode()) {
case "interval" : {
nextExecuteTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis() + Config.INSTANCE.getScheduleInterval() * 1000L);
nextExecuteTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(System.currentTimeMillis() + Config.INSTANCE.getScheduleInterval() * 1000L);
break;
}
case "cron" : {
Expand Down

0 comments on commit dff8c83

Please sign in to comment.