[FEATURE][EXPERIMENTAL] New API: TextureUploadExtension

This commit is contained in:
Gravita 2024-06-09 16:21:25 +07:00
parent f6b3a62497
commit 3afe77bf34
No known key found for this signature in database
GPG key ID: 543A8F335C9CD633
7 changed files with 77 additions and 2 deletions

View file

@ -15,6 +15,7 @@
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
public final class ClientProfile implements Comparable<ClientProfile>, ProfileFeatureAPI.ClientProfile { public final class ClientProfile implements Comparable<ClientProfile>, ProfileFeatureAPI.ClientProfile {
private static final FileNameMatcher ASSET_MATCHER = new FileNameMatcher( private static final FileNameMatcher ASSET_MATCHER = new FileNameMatcher(
@ -287,10 +288,25 @@ public String toString() {
return String.format("%s (%s)", title, uuid); return String.format("%s (%s)", title, uuid);
} }
@Override
public String getName() {
return title;
}
public UUID getUUID() { public UUID getUUID() {
return uuid; return uuid;
} }
@Override
public String getDescription() {
return info;
}
@Override
public List<ProfileFeatureAPI.OptionalMod> getOptionalMods() {
return updateOptional.stream().collect(Collectors.toUnmodifiableList());
}
public boolean hasFlag(CompatibilityFlags flag) { public boolean hasFlag(CompatibilityFlags flag) {
return flags.contains(flag); return flags.contains(flag);
} }

View file

@ -2,11 +2,12 @@
import pro.gravit.launcher.core.LauncherNetworkAPI; import pro.gravit.launcher.core.LauncherNetworkAPI;
import pro.gravit.launcher.base.profiles.optional.actions.OptionalAction; import pro.gravit.launcher.base.profiles.optional.actions.OptionalAction;
import pro.gravit.launcher.core.api.features.ProfileFeatureAPI;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
public class OptionalFile { public class OptionalFile implements ProfileFeatureAPI.OptionalMod {
@LauncherNetworkAPI @LauncherNetworkAPI
public List<OptionalAction> actions; public List<OptionalAction> actions;
@LauncherNetworkAPI @LauncherNetworkAPI
@ -57,6 +58,16 @@ public String getName() {
return name; return name;
} }
@Override
public String getDescription() {
return info;
}
@Override
public String getCategory() {
return category;
}
public boolean isVisible() { public boolean isVisible() {
return visible; return visible;
} }

View file

@ -3,6 +3,7 @@
import pro.gravit.launcher.core.hasher.HashedDir; import pro.gravit.launcher.core.hasher.HashedDir;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -15,12 +16,16 @@ interface UpdateInfo {}
interface ClientProfile { interface ClientProfile {
String getName(); String getName();
UUID getUUID(); UUID getUUID();
String getDescription();
List<OptionalMod> getOptionalMods(); List<OptionalMod> getOptionalMods();
String getProperty(String name);
Map<String, String> getProperties();
} }
interface OptionalMod { interface OptionalMod {
String getName(); String getName();
String getDescription(); String getDescription();
String getCategory(); String getCategory();
boolean isVisible();
} }
} }

View file

@ -0,0 +1,20 @@
package pro.gravit.launcher.core.api.features;
import pro.gravit.launcher.core.api.model.Texture;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
public interface TextureUploadFeatureAPI {
CompletableFuture<TextureUploadInfo> fetchInfo();
CompletableFuture<Texture> upload(String name, byte[] bytes, UploadSettings settings);
interface TextureUploadInfo {
Set<String> getAvailable();
boolean isRequireManualSlimSkinSelect();
}
record UploadSettings(boolean slim) {
}
}

View file

@ -1,10 +1,12 @@
package pro.gravit.launcher.core; package pro.gravit.launcher.core.backend;
import pro.gravit.launcher.core.api.features.ProfileFeatureAPI; import pro.gravit.launcher.core.api.features.ProfileFeatureAPI;
import pro.gravit.launcher.core.api.method.AuthMethod; import pro.gravit.launcher.core.api.method.AuthMethod;
import pro.gravit.launcher.core.api.method.AuthMethodPassword; import pro.gravit.launcher.core.api.method.AuthMethodPassword;
import pro.gravit.launcher.core.api.model.SelfUser; import pro.gravit.launcher.core.api.model.SelfUser;
import pro.gravit.launcher.core.api.model.Texture; import pro.gravit.launcher.core.api.model.Texture;
import pro.gravit.launcher.core.api.model.UserPermissions;
import pro.gravit.launcher.core.backend.extensions.Extension;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -20,6 +22,12 @@ public interface LauncherBackendAPI {
CompletableFuture<ReadyProfile> downloadProfile(ProfileFeatureAPI.ClientProfile profile, ClientProfileSettings settings, DownloadCallback callback); CompletableFuture<ReadyProfile> downloadProfile(ProfileFeatureAPI.ClientProfile profile, ClientProfileSettings settings, DownloadCallback callback);
// Tools // Tools
CompletableFuture<byte[]> fetchTexture(Texture texture); CompletableFuture<byte[]> fetchTexture(Texture texture);
// Status
UserPermissions getPermissions();
boolean hasPermission(String permission);
String getUsername();
// Extensions
<T extends Extension> T getExtension(Class<T> clazz);
record LauncherInitData(List<AuthMethod> methods) {} record LauncherInitData(List<AuthMethod> methods) {}

View file

@ -0,0 +1,4 @@
package pro.gravit.launcher.core.backend.extensions;
public interface Extension {
}

View file

@ -0,0 +1,11 @@
package pro.gravit.launcher.core.backend.extensions;
import pro.gravit.launcher.core.api.features.TextureUploadFeatureAPI;
import pro.gravit.launcher.core.api.model.Texture;
import java.util.concurrent.CompletableFuture;
public interface TextureUploadExtension extends Extension {
CompletableFuture<TextureUploadFeatureAPI.TextureUploadInfo> fetchTextureUploadInfo();
CompletableFuture<Texture> uploadTexture(String name, byte[] bytes, TextureUploadFeatureAPI.UploadSettings settings);
}