[FEATURE] Profile clone command

This commit is contained in:
Gravita 2024-02-10 14:47:13 +07:00
parent 80fc2900c8
commit 0b59d6c0ed
6 changed files with 108 additions and 5 deletions

View file

@ -5,6 +5,9 @@
import pro.gravit.launchserver.command.hash.*;
import pro.gravit.launchserver.command.modules.LoadModuleCommand;
import pro.gravit.launchserver.command.modules.ModulesCommand;
import pro.gravit.launchserver.command.profiles.MakeProfileCommand;
import pro.gravit.launchserver.command.profiles.ProfilesCommand;
import pro.gravit.launchserver.command.profiles.SaveProfilesCommand;
import pro.gravit.launchserver.command.service.*;
import pro.gravit.launchserver.command.sync.*;
import pro.gravit.launchserver.command.tools.SignDirCommand;
@ -37,8 +40,7 @@ public static void registerCommands(pro.gravit.utils.command.CommandHandler hand
updates.registerCommand("downloadAsset", new DownloadAssetCommand(server));
updates.registerCommand("downloadClient", new DownloadClientCommand(server));
updates.registerCommand("sync", new SyncCommand(server));
updates.registerCommand("saveProfiles", new SaveProfilesCommand(server));
updates.registerCommand("makeProfile", new MakeProfileCommand(server));
updates.registerCommand("profile", new ProfilesCommand(server));
Category updatesCategory = new Category(updates, "updates", "Update and Sync Management");
handler.registerCategory(updatesCategory);

View file

@ -0,0 +1,73 @@
package pro.gravit.launchserver.command.profiles;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pro.gravit.launcher.base.Launcher;
import pro.gravit.launcher.base.profiles.ClientProfile;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.command.Command;
import pro.gravit.utils.helper.IOHelper;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;
public class CloneProfileCommand extends Command {
private final transient Logger logger = LogManager.getLogger(CloneProfileCommand.class);
public CloneProfileCommand(LaunchServer server) {
super(server);
}
@Override
public String getArgsDescription() {
return "[profile file name] [new profile title]";
}
@Override
public String getUsageDescription() {
return "clone profile and profile dir";
}
@Override
public void invoke(String... args) throws Exception {
verifyArgs(args, 2);
var profilePath = server.profilesDir.resolve(args[0].concat(".json"));
if(!Files.exists(profilePath)) {
logger.error("File {} not found", profilePath);
}
ClientProfile profile;
try(Reader reader = IOHelper.newReader(profilePath)) {
profile = Launcher.gsonManager.gson.fromJson(reader, ClientProfile.class);
}
profile.setTitle(args[1]);
profile.setUUID(UUID.randomUUID());
if(profile.getServers().size() == 1) {
profile.getServers().getFirst().name = args[1];
}
logger.info("Copy {} to {}", profile.getDir(), args[1]);
var src = server.updatesDir.resolve(profile.getDir());
var dest = server.updatesDir.resolve(args[1]);
try (Stream<Path> stream = Files.walk(src)) {
stream.forEach(source -> {
try {
IOHelper.copy(source, dest.resolve(src.relativize(source)));
} catch (IOException e) {
throw new RuntimeException(e);
}
});
}
profile.setDir(args[1]);
var targetPath = server.profilesDir.resolve(args[1].concat(".json"));
try(Writer writer = IOHelper.newWriter(targetPath)) {
Launcher.gsonManager.gson.toJson(profile, writer);
}
logger.info("Profile {} cloned from {}", args[1], args[0]);
server.syncProfilesDir();
server.syncUpdatesDir(List.of(args[1]));
}
}

View file

@ -1,4 +1,4 @@
package pro.gravit.launchserver.command.hash;
package pro.gravit.launchserver.command.profiles;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

View file

@ -0,0 +1,28 @@
package pro.gravit.launchserver.command.profiles;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.command.Command;
public class ProfilesCommand extends Command {
public ProfilesCommand(LaunchServer server) {
super(server);
this.childCommands.put("make", new MakeProfileCommand(server));
this.childCommands.put("save", new SaveProfilesCommand(server));
this.childCommands.put("clone", new CloneProfileCommand(server));
}
@Override
public String getArgsDescription() {
return "[subcommand] [args...]";
}
@Override
public String getUsageDescription() {
return "manage profiles";
}
@Override
public void invoke(String... args) throws Exception {
invokeSubcommands(args);
}
}

View file

@ -1,4 +1,4 @@
package pro.gravit.launchserver.command.hash;
package pro.gravit.launchserver.command.profiles;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@ -1 +1 @@
Subproject commit cd920b0eda048771ea3c225074db32943d27503b
Subproject commit 1c3646c8161f38c44d6578ba7aeabce27823556f