Make auto-sync options consistent with UI
This commit is contained in:
parent
6e2a539232
commit
d88462e827
6 changed files with 60 additions and 43 deletions
|
@ -16,7 +16,7 @@ import java.util.List;
|
|||
import java.util.function.BiConsumer;
|
||||
|
||||
public class AutoSync {
|
||||
public static final String MAIN_SYNC_CATEGORY = "client_sync";
|
||||
public static final String SYNC_CATEGORY = "auto_sync";
|
||||
public final static SyncFolderDescriptor SYNC_FOLDER = new SyncFolderDescriptor("BCLIB-SYNC", FabricLoader.getInstance()
|
||||
.getGameDir()
|
||||
.resolve("bclib-sync")
|
||||
|
@ -31,37 +31,41 @@ public class AutoSync {
|
|||
@Environment(EnvType.CLIENT)
|
||||
static class ClientConfig {
|
||||
public static boolean shouldPrintDebugHashes() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "debugHashes", true);
|
||||
return Configs.CLIENT_CONFIG.getBoolean(SYNC_CATEGORY, "debugHashes", true);
|
||||
}
|
||||
|
||||
public static boolean isAllowingAutoSync() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "enabled", true);
|
||||
return Configs.CLIENT_CONFIG.getBoolean(SYNC_CATEGORY, "enabled", true);
|
||||
}
|
||||
|
||||
public static boolean isAcceptingMods() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(SYNC_CATEGORY, "acceptMods", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isAcceptingConfigs() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(SYNC_CATEGORY, "acceptConfigs", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isAcceptingFiles() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "acceptFiles", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isAcceptingFolders() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "acceptFolders", true) && isAllowingAutoSync();
|
||||
return Configs.CLIENT_CONFIG.getBoolean(SYNC_CATEGORY, "acceptFolders", true) && isAllowingAutoSync();
|
||||
}
|
||||
}
|
||||
|
||||
static class Config {
|
||||
public static boolean isAllowingAutoSync() {
|
||||
return Configs.MAIN_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "enabled", true);
|
||||
return Configs.SERVER_CONFIG.getBoolean(SYNC_CATEGORY, "enabled", true);
|
||||
}
|
||||
|
||||
public static boolean isOfferingConfigs() {
|
||||
return Configs.SERVER_CONFIG.getBoolean(SYNC_CATEGORY, "offerConfigs", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isOfferingFiles() {
|
||||
return Configs.MAIN_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "offerFiles", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isOfferingFolders() {
|
||||
return Configs.MAIN_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "offerFolders", true) && isAllowingAutoSync();
|
||||
return Configs.SERVER_CONFIG.getBoolean(SYNC_CATEGORY, "offerFolders", true) && isAllowingAutoSync();
|
||||
}
|
||||
|
||||
public static boolean isOfferingMods() {
|
||||
return Configs.MAIN_CONFIG.getBoolean(MAIN_SYNC_CATEGORY, "offerMods", true) && isAllowingAutoSync();
|
||||
return Configs.SERVER_CONFIG.getBoolean(SYNC_CATEGORY, "offerMods", true) && isAllowingAutoSync();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -165,7 +169,7 @@ public class AutoSync {
|
|||
|
||||
//we call this from HelloServer to prepare transfer
|
||||
protected static void loadSyncFolder() {
|
||||
if (Configs.MAIN_CONFIG.getBoolean(AutoSync.MAIN_SYNC_CATEGORY, "offersSyncFolders", true)) {
|
||||
if (Configs.MAIN_CONFIG.getBoolean(AutoSync.SYNC_CATEGORY, "offersSyncFolders", true)) {
|
||||
syncFolderDescriptions.forEach(desc -> desc.loadCache());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,27 +97,28 @@ public class HelloClient extends DataHandler.FromServer {
|
|||
buf.writeInt(0);
|
||||
}
|
||||
|
||||
if (Config.isOfferingFiles()) {
|
||||
if (Config.isOfferingFiles() || Config.isOfferingConfigs()) {
|
||||
//do only include files that exist on the server
|
||||
final List<AutoFileSyncEntry> existingAutoSyncFiles = AutoSync
|
||||
.getAutoSyncFiles()
|
||||
.stream()
|
||||
.filter(e -> e.fileName.exists())
|
||||
.collect(Collectors.toList());
|
||||
.getAutoSyncFiles()
|
||||
.stream()
|
||||
.filter(e -> e.fileName.exists())
|
||||
.filter(e -> (e.isConfigFile() && Config.isOfferingConfigs()) || (e instanceof AutoFileSyncEntry.ForDirectFileRequest && Config.isOfferingFiles()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
//send config Data
|
||||
buf.writeInt(existingAutoSyncFiles.size());
|
||||
for (AutoFileSyncEntry entry : existingAutoSyncFiles) {
|
||||
entry.serialize(buf);
|
||||
BCLib.LOGGER.info(" - Offering File " + entry);
|
||||
BCLib.LOGGER.info(" - Offering " + (entry.isConfigFile()?"Config ":"File ") + entry);
|
||||
}
|
||||
}
|
||||
else {
|
||||
BCLib.LOGGER.info("Server will not offer Files.");
|
||||
BCLib.LOGGER.info("Server will neither offer Files nor Configs.");
|
||||
buf.writeInt(0);
|
||||
}
|
||||
|
||||
if (Config.isOfferingFolders()) {
|
||||
if (Config.isOfferingFiles()) {
|
||||
buf.writeInt(AutoSync.syncFolderDescriptions.size());
|
||||
AutoSync.syncFolderDescriptions.forEach(desc -> {
|
||||
BCLib.LOGGER.info(" - Offering Folder " + desc.localFolder + " (allowDelete=" + desc.removeAdditionalFiles + ")");
|
||||
|
@ -183,7 +184,7 @@ public class HelloClient extends DataHandler.FromServer {
|
|||
|
||||
@Environment(EnvType.CLIENT)
|
||||
private void processAutoSyncFolder(final List<AutoSyncID> filesToRequest, final List<AutoSyncID.ForDirectFileRequest> filesToRemove) {
|
||||
if (!ClientConfig.isAcceptingFolders()) {
|
||||
if (!ClientConfig.isAcceptingFiles()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -329,7 +330,10 @@ public class HelloClient extends DataHandler.FromServer {
|
|||
//Both client and server need to know about the folder you want to sync
|
||||
//Files can only get placed within that folder
|
||||
|
||||
if ((filesToRequest.size() > 0 || filesToRemove.size() > 0) && ClientConfig.isAcceptingFiles()) {
|
||||
if (
|
||||
(filesToRequest.size() > 0 || filesToRemove.size() > 0)
|
||||
&& (ClientConfig.isAcceptingMods() || ClientConfig.isAcceptingConfigs() || ClientConfig.isAcceptingFiles())
|
||||
) {
|
||||
showSyncFilesScreen(client, filesToRequest, filesToRemove);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import net.fabricmc.api.EnvType;
|
|||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import ru.bclib.BCLib;
|
||||
|
@ -29,7 +28,7 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "send_files"), SendFiles::new, false, false);
|
||||
|
||||
protected List<AutoFileSyncEntry> files;
|
||||
private String token = "";
|
||||
private String token;
|
||||
|
||||
public SendFiles() {
|
||||
this(null, "");
|
||||
|
@ -85,7 +84,7 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
@Environment(EnvType.CLIENT)
|
||||
@Override
|
||||
protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||
if (ClientConfig.isAcceptingFiles()) {
|
||||
if (ClientConfig.isAcceptingConfigs() || ClientConfig.isAcceptingFiles() || ClientConfig.isAcceptingMods()) {
|
||||
token = readString(buf);
|
||||
if (!token.equals(RequestFiles.currentToken)) {
|
||||
RequestFiles.newToken();
|
||||
|
@ -101,8 +100,20 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
for (int i = 0; i < size; i++) {
|
||||
Triple<AutoFileSyncEntry, byte[], AutoSyncID> p = AutoFileSyncEntry.deserializeContent(buf);
|
||||
if (p.first != null) {
|
||||
receivedFiles.add(p);
|
||||
BCLib.LOGGER.info(" - " + p.first + " (" + PathUtil.humanReadableFileSize(p.second.length) + ")");
|
||||
final String type;
|
||||
if (p.first.isConfigFile() && ClientConfig.isAcceptingConfigs()) {
|
||||
receivedFiles.add(p);
|
||||
type = "Accepted Config ";
|
||||
} else if (p.first instanceof AutoFileSyncEntry.ForModFileRequest && ClientConfig.isAcceptingMods()){
|
||||
receivedFiles.add(p);
|
||||
type = "Accepted Mod ";
|
||||
} else if (ClientConfig.isAcceptingFiles()){
|
||||
receivedFiles.add(p);
|
||||
type = "Accepted File ";
|
||||
} else {
|
||||
type = "Ignoring ";
|
||||
}
|
||||
BCLib.LOGGER.info(" - " + type + p.first + " (" + PathUtil.humanReadableFileSize(p.second.length) + ")");
|
||||
}
|
||||
else {
|
||||
BCLib.LOGGER.error(" - Failed to receive File " + p.third + ", possibly sent from a Mod that is not installed on the client.");
|
||||
|
@ -114,7 +125,7 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
@Environment(EnvType.CLIENT)
|
||||
@Override
|
||||
protected void runOnClientGameThread(Minecraft client) {
|
||||
if (ClientConfig.isAcceptingFiles()) {
|
||||
if (ClientConfig.isAcceptingConfigs() || ClientConfig.isAcceptingFiles() || ClientConfig.isAcceptingMods()) {
|
||||
BCLib.LOGGER.info("Writing Files:");
|
||||
|
||||
//TODO: Reject files that were not in the last RequestFiles.
|
||||
|
@ -131,15 +142,14 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public static void writeSyncedFile(AutoSyncID e, byte[] data, File fileName) {
|
||||
static void writeSyncedFile(AutoSyncID e, byte[] data, File fileName) {
|
||||
if (!PathUtil.MOD_BAK_FOLDER.toFile().exists()){
|
||||
PathUtil.MOD_BAK_FOLDER.toFile().mkdirs();
|
||||
}
|
||||
|
||||
Path path = fileName!=null?fileName.toPath():null;
|
||||
Path removeAfter = null;
|
||||
if (e instanceof AutoFileSyncEntry.ForModFileRequest){
|
||||
AutoFileSyncEntry.ForModFileRequest mase = (AutoFileSyncEntry.ForModFileRequest)e;
|
||||
if (e instanceof AutoFileSyncEntry.ForModFileRequest mase){
|
||||
removeAfter = path;
|
||||
int count = 0;
|
||||
String name = "bclib_synced_" + mase.modID + "_" + mase.version.replace(".", "_") + ".jar";
|
||||
|
@ -193,7 +203,7 @@ public class SendFiles extends DataHandler.FromServer {
|
|||
protected void showConfirmRestart(Minecraft client) {
|
||||
client.setScreen(new ConfirmRestartScreen(() -> {
|
||||
Minecraft.getInstance()
|
||||
.setScreen((Screen) null);
|
||||
.setScreen(null);
|
||||
client.stop();
|
||||
}));
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ public class SyncFolderDescriptor {
|
|||
}
|
||||
|
||||
public void serialize(FriendlyByteBuf buf) {
|
||||
final boolean debugHashes = Configs.CLIENT_CONFIG.getBoolean(AutoSync.MAIN_SYNC_CATEGORY, "debugHashes", false);
|
||||
final boolean debugHashes = Configs.CLIENT_CONFIG.getBoolean(AutoSync.SYNC_CATEGORY, "debugHashes", false);
|
||||
loadCache();
|
||||
|
||||
DataHandler.writeString(buf, folderID);
|
||||
|
|
|
@ -6,20 +6,17 @@ import ru.bclib.BCLib;
|
|||
|
||||
public class Configs {
|
||||
public static final PathConfig GENERATOR_CONFIG = new PathConfig(BCLib.MOD_ID, "generator");
|
||||
public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main");
|
||||
public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main", true, true);
|
||||
public static final String MAIN_PATCH_CATEGORY = "patches";
|
||||
|
||||
public static final PathConfig RECIPE_CONFIG = new PathConfig(BCLib.MOD_ID, "recipes");
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public static final PathConfig CLIENT_CONFIG = new PathConfig(BCLib.MOD_ID, "client");
|
||||
public static final PathConfig CLIENT_CONFIG = new PathConfig(BCLib.MOD_ID, "client", false);
|
||||
public static final PathConfig SERVER_CONFIG = new PathConfig(BCLib.MOD_ID, "server", false);
|
||||
|
||||
public static void save() {
|
||||
MAIN_CONFIG.saveChanges();
|
||||
RECIPE_CONFIG.saveChanges();
|
||||
|
||||
if (BCLib.isClient()) {
|
||||
CLIENT_CONFIG.saveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
2
src/main/java/ru/bclib/config/NamedPathConfig.java
Normal file
2
src/main/java/ru/bclib/config/NamedPathConfig.java
Normal file
|
@ -0,0 +1,2 @@
|
|||
package ru.bclib.config;public class NamedPathConfig {
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue