mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-11-15 03:31:15 +03:00
[FIX] ProfileProvider support overwrite profile
This commit is contained in:
parent
9bffe07d36
commit
af2dcec8cd
3 changed files with 24 additions and 18 deletions
|
@ -9,10 +9,7 @@
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.FileVisitResult;
|
import java.nio.file.*;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.SimpleFileVisitor;
|
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -40,8 +37,21 @@ public Set<ClientProfile> getProfiles() {
|
||||||
@Override
|
@Override
|
||||||
public void addProfile(ClientProfile profile) throws IOException {
|
public void addProfile(ClientProfile profile) throws IOException {
|
||||||
Path profilesDirPath = Path.of(profilesDir);
|
Path profilesDirPath = Path.of(profilesDir);
|
||||||
Path target = IOHelper.resolveIncremental(profilesDirPath,
|
ClientProfile oldProfile;
|
||||||
profile.getDir(), "json");
|
Path target = null;
|
||||||
|
for(var e : profilesMap.entrySet()) {
|
||||||
|
if(e.getValue().getUUID().equals(profile.getUUID())) {
|
||||||
|
target = e.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(target == null) {
|
||||||
|
target = IOHelper.resolveIncremental(profilesDirPath,
|
||||||
|
profile.getTitle(), "json");
|
||||||
|
oldProfile = profilesMap.get(target);
|
||||||
|
if(oldProfile != null && !oldProfile.getUUID().equals(profile.getUUID())) {
|
||||||
|
throw new FileAlreadyExistsException(target.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
try (BufferedWriter writer = IOHelper.newWriter(target)) {
|
try (BufferedWriter writer = IOHelper.newWriter(target)) {
|
||||||
Launcher.gsonManager.configGson.toJson(profile, writer);
|
Launcher.gsonManager.configGson.toJson(profile, writer);
|
||||||
}
|
}
|
||||||
|
@ -61,6 +71,13 @@ public void deleteProfile(ClientProfile profile) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addProfile(Path path, ClientProfile profile) {
|
private void addProfile(Path path, ClientProfile profile) {
|
||||||
|
for(var e : profilesMap.entrySet()) {
|
||||||
|
if(e.getValue().getUUID().equals(profile.getUUID())) {
|
||||||
|
profilesMap.remove(e.getKey());
|
||||||
|
profilesList.remove(e.getValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
profilesMap.put(path, profile);
|
profilesMap.put(path, profile);
|
||||||
profilesList.add(profile);
|
profilesList.add(profile);
|
||||||
}
|
}
|
||||||
|
@ -83,10 +100,9 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
|
||||||
profile = Launcher.gsonManager.gson.fromJson(reader, ClientProfile.class);
|
profile = Launcher.gsonManager.gson.fromJson(reader, ClientProfile.class);
|
||||||
}
|
}
|
||||||
profile.verify();
|
profile.verify();
|
||||||
profile.setProfileFilePath(file);
|
|
||||||
|
|
||||||
// Add SIGNED profile to result list
|
// Add SIGNED profile to result list
|
||||||
result.put(file, profile);
|
result.put(file.toAbsolutePath(), profile);
|
||||||
return super.visitFile(file, attrs);
|
return super.visitFile(file, attrs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,6 @@ public void invoke(String... args) throws Exception {
|
||||||
} catch (IllegalArgumentException ex) {
|
} catch (IllegalArgumentException ex) {
|
||||||
profile = server.config.profileProvider.getProfile(profileName);
|
profile = server.config.profileProvider.getProfile(profileName);
|
||||||
}
|
}
|
||||||
server.config.profileProvider.deleteProfile(profile);
|
|
||||||
server.config.profileProvider.addProfile(profile);
|
server.config.profileProvider.addProfile(profile);
|
||||||
}
|
}
|
||||||
server.syncProfilesDir();
|
server.syncProfilesDir();
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
public final class ClientProfile implements Comparable<ClientProfile> {
|
public final class ClientProfile implements Comparable<ClientProfile> {
|
||||||
private static final FileNameMatcher ASSET_MATCHER = new FileNameMatcher(
|
private static final FileNameMatcher ASSET_MATCHER = new FileNameMatcher(
|
||||||
new String[0], new String[]{"indexes", "objects"}, new String[0]);
|
new String[0], new String[]{"indexes", "objects"}, new String[0]);
|
||||||
private transient Path profileFilePath;
|
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private String title;
|
private String title;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
|
@ -392,14 +391,6 @@ public List<CompatibilityFlags> getFlags() {
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Path getProfileFilePath() {
|
|
||||||
return profileFilePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProfileFilePath(Path profileFilePath) {
|
|
||||||
this.profileFilePath = profileFilePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ClassLoaderConfig {
|
public enum ClassLoaderConfig {
|
||||||
AGENT, LAUNCHER, MODULE, SYSTEM_ARGS
|
AGENT, LAUNCHER, MODULE, SYSTEM_ARGS
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue