mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
[FIX} New API bug fixes
This commit is contained in:
parent
c90a13af71
commit
f1559183a1
11 changed files with 109 additions and 12 deletions
|
@ -1,6 +1,7 @@
|
|||
package pro.gravit.launcher.runtime.backend;
|
||||
|
||||
import pro.gravit.launcher.core.LauncherNetworkAPI;
|
||||
import pro.gravit.launcher.core.api.features.AuthFeatureAPI;
|
||||
import pro.gravit.launcher.core.backend.UserSettings;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
@ -19,5 +20,24 @@ public static class AuthorizationData {
|
|||
public String refreshToken;
|
||||
@LauncherNetworkAPI
|
||||
public long expireIn;
|
||||
|
||||
public AuthFeatureAPI.AuthToken toToken() {
|
||||
return new AuthFeatureAPI.AuthToken() {
|
||||
@Override
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getExpire() {
|
||||
return expireIn;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,8 @@ CompletableFuture<LauncherBackendAPI.ReadyProfile> downloadProfile(ClientProfile
|
|||
AtomicReference<DownloadedDir> clientRef = new AtomicReference<>();
|
||||
AtomicReference<DownloadedDir> assetRef = new AtomicReference<>();
|
||||
AtomicReference<DownloadedDir> javaRef = new AtomicReference<>();
|
||||
return downloadDir(profile.getDir(), profile.getClientUpdateMatcher(), settings.view, callback).thenCompose((clientDir -> {
|
||||
return LauncherAPIHolder.profile().changeCurrentProfile(profile)
|
||||
.thenCompose(vv -> downloadDir(profile.getDir(), profile.getClientUpdateMatcher(), settings.view, callback)).thenCompose((clientDir -> {
|
||||
clientRef.set(clientDir);
|
||||
return downloadAsset(profile.getAssetDir(), profile.getAssetUpdateMatcher(), profile.getAssetIndex(), callback);
|
||||
})).thenCompose(assetDir -> {
|
||||
|
@ -53,7 +54,7 @@ CompletableFuture<LauncherBackendAPI.ReadyProfile> downloadProfile(ClientProfile
|
|||
|
||||
CompletableFuture<DownloadedDir> downloadAsset(String dirName, FileNameMatcher matcher, String assetIndexString, LauncherBackendAPI.DownloadCallback callback) {
|
||||
Path targetDir = DirBridge.dirUpdates.resolve(dirName);
|
||||
Path assetIndexPath = targetDir.resolve("indexes").resolve(assetIndexString);
|
||||
Path assetIndexPath = targetDir.resolve("indexes").resolve(assetIndexString+".json");
|
||||
return LauncherAPIHolder.profile().fetchUpdateInfo(dirName).thenComposeAsync((response) -> {
|
||||
callback.onStage(LauncherBackendAPI.DownloadCallback.STAGE_ASSET_VERIFY);
|
||||
return verifyAssetIndex(assetIndexString, response, assetIndexPath, targetDir);
|
||||
|
@ -116,7 +117,7 @@ CompletableFuture<DownloadedDir> downloadDir(Path targetDir, ProfileFeatureAPI.U
|
|||
callback.onStage(LauncherBackendAPI.DownloadCallback.STAGE_HASHING);
|
||||
HashedDir realFiles = new HashedDir(targetDir, matcher, false, true);
|
||||
callback.onStage(LauncherBackendAPI.DownloadCallback.STAGE_DIFF);
|
||||
return realFiles.diff(updateInfo.getHashedDir(), matcher);
|
||||
return updateInfo.getHashedDir().diff(realFiles, matcher);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -165,7 +166,12 @@ private List<Downloader.SizedFile> collectFilesAndCreateDirectories(Path dir, Ha
|
|||
List<Downloader.SizedFile> files = new ArrayList<>();
|
||||
mismatch.walk(File.separator, (path, name, entry) -> {
|
||||
if(entry.getType() == HashedEntry.Type.DIR) {
|
||||
Files.createDirectory(dir.resolve(path));
|
||||
var dirPath = dir.resolve(path);
|
||||
if(!Files.exists(dirPath)) {
|
||||
Files.createDirectory(dirPath);
|
||||
} else if (!Files.isDirectory(dirPath)) {
|
||||
throw new IOException(String.format("%s is not a directory", path));
|
||||
}
|
||||
return HashedDir.WalkAction.CONTINUE;
|
||||
}
|
||||
String pathFixed = path.replace(File.separatorChar, '/');
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
import pro.gravit.launcher.core.backend.exceptions.LauncherBackendException;
|
||||
import pro.gravit.launcher.core.backend.extensions.Extension;
|
||||
import pro.gravit.launcher.runtime.NewLauncherSettings;
|
||||
import pro.gravit.launcher.runtime.client.DirBridge;
|
||||
import pro.gravit.launcher.runtime.client.ServerPinger;
|
||||
import pro.gravit.launcher.runtime.debug.DebugMain;
|
||||
import pro.gravit.launcher.runtime.managers.SettingsManager;
|
||||
|
@ -73,6 +74,7 @@ private void doInit() throws Exception {
|
|||
allSettings = settingsManager.getConfig();
|
||||
backendSettings = (BackendSettings) getUserSettings("backend", (k) -> new BackendSettings());
|
||||
permissions = new ClientPermissions();
|
||||
DirBridge.dirUpdates = DirBridge.defaultUpdatesDir;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -102,6 +104,14 @@ public CompletableFuture<LauncherInitData> init() {
|
|||
}, executorService);
|
||||
}
|
||||
|
||||
public AuthFeatureAPI.AuthToken getAuthToken() {
|
||||
return backendSettings.auth.toToken();
|
||||
}
|
||||
|
||||
public AuthMethod getAuthMethod() {
|
||||
return authMethod;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectAuthMethod(AuthMethod method) {
|
||||
this.authMethod = method;
|
||||
|
@ -175,9 +185,11 @@ public ClientProfileSettings makeClientProfileSettings(ProfileFeatureAPI.ClientP
|
|||
var settings = backendSettings.settings.get(profile.getUUID());
|
||||
if(settings == null) {
|
||||
settings = new ProfileSettingsImpl((ClientProfile) profile);
|
||||
settings.backend = this;
|
||||
settings.updateEnabledMods();
|
||||
} else {
|
||||
settings = settings.copy();
|
||||
settings.initAfterGson((ClientProfile) profile, this);
|
||||
//settings.initAfterGson((ClientProfile) profile, this);
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
@ -211,6 +223,7 @@ public CompletableFuture<List<Java>> getAvailableJava() {
|
|||
return e;
|
||||
});
|
||||
}
|
||||
return availableJavasFuture;
|
||||
}
|
||||
return CompletableFuture.completedFuture(availableJavas);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
import pro.gravit.utils.helper.JavaHelper;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class ProfileSettingsImpl implements LauncherBackendAPI.ClientProfileSettings {
|
||||
transient ClientProfile profile;
|
||||
|
@ -120,6 +121,30 @@ public JavaHelper.JavaVersion getSelectedJava() {
|
|||
return selectedJava;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JavaHelper.JavaVersion getRecommendedJava() {
|
||||
JavaHelper.JavaVersion result = null;
|
||||
try {
|
||||
for(var java : backend.getAvailableJava().get()) {
|
||||
if(isRecommended(java)) {
|
||||
return (JavaHelper.JavaVersion) java;
|
||||
}
|
||||
if(isCompatible(java)) {
|
||||
if(result == null) {
|
||||
result = (JavaHelper.JavaVersion) java;
|
||||
continue;
|
||||
}
|
||||
if(result.getMajorVersion() < java.getMajorVersion()) {
|
||||
result = (JavaHelper.JavaVersion) java;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelectedJava(LauncherBackendAPI.Java java) {
|
||||
selectedJava = (JavaHelper.JavaVersion) java;
|
||||
|
@ -138,6 +163,7 @@ public boolean isCompatible(LauncherBackendAPI.Java java) {
|
|||
@Override
|
||||
public ProfileSettingsImpl copy() {
|
||||
ProfileSettingsImpl cloned = new ProfileSettingsImpl();
|
||||
cloned.backend = backend;
|
||||
cloned.profile = profile;
|
||||
cloned.ram = new HashMap<>(ram);
|
||||
cloned.flags = new HashSet<>(flags);
|
||||
|
@ -155,7 +181,9 @@ public void updateEnabledMods() {
|
|||
for(var e : view.enabled) {
|
||||
enabled.add(e.name);
|
||||
}
|
||||
saveJavaPath = selectedJava.getPath().toAbsolutePath().toString();
|
||||
if(selectedJava != null) {
|
||||
saveJavaPath = selectedJava.getPath().toAbsolutePath().toString();
|
||||
}
|
||||
}
|
||||
|
||||
public void initAfterGson(ClientProfile profile, LauncherBackendImpl backend) {
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package pro.gravit.launcher.runtime.backend;
|
||||
|
||||
import pro.gravit.launcher.base.Launcher;
|
||||
import pro.gravit.launcher.base.events.request.AuthRequestEvent;
|
||||
import pro.gravit.launcher.base.profiles.ClientProfile;
|
||||
import pro.gravit.launcher.base.profiles.ClientProfileBuilder;
|
||||
import pro.gravit.launcher.base.profiles.PlayerProfile;
|
||||
import pro.gravit.launcher.core.api.LauncherAPIHolder;
|
||||
import pro.gravit.launcher.core.api.features.ProfileFeatureAPI;
|
||||
import pro.gravit.launcher.core.backend.LauncherBackendAPI;
|
||||
import pro.gravit.launcher.runtime.client.ClientLauncherProcess;
|
||||
|
@ -61,9 +63,14 @@ public void run(LauncherBackendAPI.RunCallback callback) {
|
|||
builder.setUpdateExclusions(new ArrayList<>());
|
||||
profile = builder.createClientProfile();
|
||||
}
|
||||
process = new ClientLauncherProcess(clientDir.path(), assetDir.path(), settings.getSelectedJava(), clientDir.path().resolve("resourcepacks"),
|
||||
var java = settings.getSelectedJava();
|
||||
if(java == null) {
|
||||
java = settings.getRecommendedJava();
|
||||
}
|
||||
process = new ClientLauncherProcess(clientDir.path(), assetDir.path(), java, clientDir.path().resolve("resourcepacks"),
|
||||
profile, new PlayerProfile(backend.getSelfUser()), settings.view, backend.getSelfUser().getAccessToken(),
|
||||
clientDir.dir(), assetDir.dir(), javaDir == null ? null : javaDir.dir());
|
||||
clientDir.dir(), assetDir.dir(), javaDir == null ? null : javaDir.dir(),
|
||||
new AuthRequestEvent.OAuthRequestEvent(backend.getAuthToken()), backend.getAuthMethod().getName());
|
||||
process.params.ram = (int) (settings.getReservedMemoryBytes(LauncherBackendAPI.ClientProfileSettings.MemoryClass.TOTAL) >> 20);
|
||||
if (process.params.ram > 0) {
|
||||
process.jvmArgs.add("-Xms" + process.params.ram + 'M');
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
import pro.gravit.launcher.base.Launcher;
|
||||
import pro.gravit.launcher.base.LauncherConfig;
|
||||
import pro.gravit.launcher.base.events.request.AuthRequestEvent;
|
||||
import pro.gravit.launcher.client.ClientLauncherEntryPoint;
|
||||
import pro.gravit.launcher.client.ClientParams;
|
||||
import pro.gravit.launcher.runtime.LauncherEngine;
|
||||
|
@ -70,6 +71,12 @@ public ClientLauncherProcess(Path clientDir, Path assetDir,
|
|||
public ClientLauncherProcess(Path clientDir, Path assetDir, JavaHelper.JavaVersion javaVersion, Path resourcePackDir,
|
||||
ClientProfile profile, PlayerProfile playerProfile, OptionalView view, String accessToken,
|
||||
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
||||
this(clientDir, assetDir, javaVersion, resourcePackDir, profile, playerProfile, view, accessToken, clientHDir, assetHDir, jvmHDir, null, null);
|
||||
}
|
||||
|
||||
public ClientLauncherProcess(Path clientDir, Path assetDir, JavaHelper.JavaVersion javaVersion, Path resourcePackDir,
|
||||
ClientProfile profile, PlayerProfile playerProfile, OptionalView view, String accessToken,
|
||||
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir, AuthRequestEvent.OAuthRequestEvent oAuthRequestEvent, String authId) {
|
||||
this.javaVersion = javaVersion;
|
||||
this.workDir = clientDir.toAbsolutePath();
|
||||
this.executeFile = IOHelper.resolveJavaBin(this.javaVersion.jvmDir);
|
||||
|
@ -78,6 +85,8 @@ public ClientLauncherProcess(Path clientDir, Path assetDir, JavaHelper.JavaVersi
|
|||
this.params.resourcePackDir = resourcePackDir.toAbsolutePath().toString();
|
||||
this.params.assetDir = assetDir.toAbsolutePath().toString();
|
||||
this.params.timestamp = System.currentTimeMillis();
|
||||
this.params.oauth = oAuthRequestEvent;
|
||||
this.params.authId = authId;
|
||||
Path nativesPath;
|
||||
if(profile.hasFlag(ClientProfile.CompatibilityFlags.LEGACY_NATIVES_DIR)) {
|
||||
nativesPath = workDir.resolve("natives");
|
||||
|
@ -120,10 +129,8 @@ private void applyClientProfile() {
|
|||
if (params.ram > 0) {
|
||||
this.jvmArgs.add("-Xmx" + params.ram + 'M');
|
||||
}
|
||||
this.params.oauth = Request.getOAuth();
|
||||
if (this.params.oauth == null) {
|
||||
throw new UnsupportedOperationException("Legacy session not supported");
|
||||
} else {
|
||||
this.params.oauth = Request.getOAuth();
|
||||
this.params.authId = Request.getAuthId();
|
||||
this.params.oauthExpiredTime = Request.getTokenExpiredTime();
|
||||
this.params.extendedTokens = Request.getExtendedTokens();
|
||||
|
|
|
@ -87,6 +87,12 @@ public OAuthRequestEvent(String accessToken, String refreshToken, long expire) {
|
|||
this.expire = expire;
|
||||
}
|
||||
|
||||
public OAuthRequestEvent(AuthFeatureAPI.AuthToken token) {
|
||||
this.accessToken = token.getAccessToken();
|
||||
this.refreshToken = token.getRefreshToken();
|
||||
this.expire = token.getExpire();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package pro.gravit.launcher.base.request;
|
||||
|
||||
import pro.gravit.launcher.base.Launcher;
|
||||
import pro.gravit.launcher.base.profiles.ClientProfile;
|
||||
import pro.gravit.launcher.base.request.auth.*;
|
||||
import pro.gravit.launcher.base.request.auth.password.*;
|
||||
import pro.gravit.launcher.base.request.update.ProfilesRequest;
|
||||
|
@ -89,6 +90,8 @@ private AuthRequest.AuthPasswordInterface convertAuthPassword(AuthMethodPassword
|
|||
return new AuthCodePassword(oauth.redirectUrl());
|
||||
} else if(password instanceof AuthRequest.AuthPasswordInterface custom) {
|
||||
return custom;
|
||||
} else if(password == null) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException();
|
||||
|
@ -164,6 +167,11 @@ public CompletableFuture<List<ProfileFeatureAPI.ClientProfile>> getProfiles() {
|
|||
return request.request(new ProfilesRequest()).thenApply(response -> (List) response.profiles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> changeCurrentProfile(ClientProfile profile) {
|
||||
return request.request(new SetProfileRequest((pro.gravit.launcher.base.profiles.ClientProfile) profile)).thenApply(response -> null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<UpdateInfo> fetchUpdateInfo(String dirName) {
|
||||
return request.request(new UpdateRequest(dirName)).thenApply(response -> new UpdateInfoData(response.hdir, response.url));
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
public interface ProfileFeatureAPI extends FeatureAPI {
|
||||
CompletableFuture<List<ClientProfile>> getProfiles();
|
||||
CompletableFuture<Void> changeCurrentProfile(ClientProfile profile);
|
||||
CompletableFuture<UpdateInfo> fetchUpdateInfo(String dirName);
|
||||
|
||||
interface UpdateInfo {
|
||||
|
|
|
@ -63,6 +63,7 @@ interface ClientProfileSettings {
|
|||
void enableOptional(ProfileFeatureAPI.OptionalMod mod, ChangedOptionalStatusCallback callback);
|
||||
void disableOptional(ProfileFeatureAPI.OptionalMod mod, ChangedOptionalStatusCallback callback);
|
||||
Java getSelectedJava();
|
||||
Java getRecommendedJava();
|
||||
void setSelectedJava(Java java);
|
||||
boolean isRecommended(Java java);
|
||||
boolean isCompatible(Java java);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
id 'org.openjfx.javafxplugin' version '0.1.0' apply false
|
||||
}
|
||||
group = 'pro.gravit.launcher'
|
||||
version = '5.6.8'
|
||||
version = '5.7.0-SNAPSHOT'
|
||||
|
||||
apply from: 'props.gradle'
|
||||
|
||||
|
|
Loading…
Reference in a new issue