actually implement "enabled" for mods / categories
This commit is contained in:
parent
22c59722e9
commit
2e0d04d6d0
5 changed files with 29 additions and 15 deletions
|
|
@ -105,7 +105,7 @@ export type ModpackFileKind = { Managed: [ManagedPackage, ManagedVersion] } | {
|
|||
|
||||
export type ModpackFormat = "CurseForge" | "MrPack" | "PolyMrPack"
|
||||
|
||||
export type ModpackManifest = { name: string; version: string; loader: GameLoader; loader_version: string; mc_version: string; files: ModpackFile[] }
|
||||
export type ModpackManifest = { name: string; version: string; loader: GameLoader; loader_version: string; mc_version: string; enabled?: boolean; files: ModpackFile[] }
|
||||
|
||||
export type MojangCape = { id: string; state: string; url: string; alias: string }
|
||||
|
||||
|
|
@ -303,14 +303,12 @@ export type VersionType =
|
|||
*/
|
||||
"old_beta"
|
||||
|
||||
const ARGS_MAP = { 'debug':'{"isInDev":[],"getGitCommitHash":[],"openDevTools":[],"getPackageVersion":[],"getOsVersion":[],"getArch":[],"getLocale":[],"getType":[],"getFamily":[],"getPlatform":[],"getBuildTimestamp":[]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'oneclient':'{"getBundlesFor":["cluster_id"],"checkForUpdate":[],"getVersions":[],"getClustersGroupedByMajor":[],"installUpdate":[]}', 'core':'{"getDefaultUser":["fallback"],"removeCluster":["id"],"getUsers":[],"getUser":["uuid"],"fetchMinecraftProfile":["uuid"],"changeCape":["access_token","cape_uuid"],"getRunningProcessesByClusterId":["cluster_id"],"getProfileOrDefault":["name"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"createSettingsProfile":["name"],"setClusterStage":["id","stage"],"getRunningProcesses":[],"getWorlds":["id"],"installModpack":["modpack","cluster_id"],"searchPackages":["provider","query"],"getUsersFromAuthor":["provider","author"],"getLoadersForVersion":["mc_version"],"getPackage":["provider","slug"],"getScreenshots":["id"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"removePackage":["cluster_id","package_hash"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"convertUsernameUUID":["username_uuid"],"setDiscordRPCMessage":["message"],"getClusterById":["id"],"getLogs":["id"],"launchCluster":["id","uuid","search_for_java"],"getGameVersions":[],"writeSettings":["setting"],"killProcess":["pid"],"getPackageBody":["provider","body"],"getLinkedPackages":["cluster_id"],"updateClusterProfile":["name","profile"],"readSettings":[],"updateClusterById":["id","request"],"removeUser":["uuid"],"openMsaLogin":[],"getGlobalProfile":[],"createCluster":["options"],"getLogByName":["id","name"],"fetchLoggedInProfile":["access_token"],"changeSkin":["access_token","skin_url","skin_variant"],"getClusters":[],"setDefaultUser":["uuid"],"removeCape":["access_token"],"open":["input"],"isClusterRunning":["cluster_id"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"getMultiplePackages":["provider","slugs"]}' }
|
||||
const ARGS_MAP = { 'core':'{"updateClusterProfile":["name","profile"],"getRunningProcesses":[],"getLinkedPackages":["cluster_id"],"createCluster":["options"],"launchCluster":["id","uuid","search_for_java"],"getWorlds":["id"],"getUsers":[],"getClusters":[],"getPackage":["provider","slug"],"getMultiplePackages":["provider","slugs"],"installModpack":["modpack","cluster_id"],"removeCape":["access_token"],"setDiscordRPCMessage":["message"],"isClusterRunning":["cluster_id"],"writeSettings":["setting"],"getLogs":["id"],"getPackageBody":["provider","body"],"changeSkin":["access_token","skin_url","skin_variant"],"searchPackages":["provider","query"],"open":["input"],"openMsaLogin":[],"fetchLoggedInProfile":["access_token"],"readSettings":[],"removeCluster":["id"],"getClusterById":["id"],"createSettingsProfile":["name"],"updateClusterById":["id","request"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"killProcess":["pid"],"getLoadersForVersion":["mc_version"],"getProfileOrDefault":["name"],"setClusterStage":["id","stage"],"fetchMinecraftProfile":["uuid"],"getUsersFromAuthor":["provider","author"],"getLogByName":["id","name"],"getDefaultUser":["fallback"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getUser":["uuid"],"removeUser":["uuid"],"changeCape":["access_token","cape_uuid"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"convertUsernameUUID":["username_uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"removePackage":["cluster_id","package_hash"],"getGameVersions":[],"getGlobalProfile":[],"setDefaultUser":["uuid"],"getScreenshots":["id"],"getRunningProcessesByClusterId":["cluster_id"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"installUpdate":[],"checkForUpdate":[],"getBundlesFor":["cluster_id"],"getVersions":[]}', 'debug':'{"getLocale":[],"getArch":[],"getType":[],"getGitCommitHash":[],"openDevTools":[],"isInDev":[],"getFamily":[],"getPackageVersion":[],"getBuildTimestamp":[],"getPlatform":[],"getOsVersion":[]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}' }
|
||||
export type Router = { 'oneclient': { getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
|
||||
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]>,
|
||||
getVersions: () => Promise<OnlineClusterManifest>,
|
||||
checkForUpdate: () => Promise<Update | null>,
|
||||
installUpdate: () => Promise<null> },
|
||||
'folders': { fromCluster: (folderName: string) => Promise<string>,
|
||||
openCluster: (folderName: string) => Promise<null> },
|
||||
'core': { getClusters: () => Promise<ClusterModel[]>,
|
||||
getClusterById: (id: number) => Promise<ClusterModel | null>,
|
||||
removeCluster: (id: number) => Promise<null>,
|
||||
|
|
@ -360,6 +358,11 @@ removeCape: (accessToken: string) => Promise<MojangFullPlayerProfile>,
|
|||
convertUsernameUUID: (usernameUuid: string) => Promise<MowojangProfile>,
|
||||
setDiscordRPCMessage: (message: string) => Promise<null>,
|
||||
open: (input: string) => Promise<null> },
|
||||
'events': { ingress: (event: IngressPayload) => Promise<void>,
|
||||
message: (event: MessagePayload) => Promise<void>,
|
||||
process: (event: ProcessPayload) => Promise<void> },
|
||||
'folders': { fromCluster: (folderName: string) => Promise<string>,
|
||||
openCluster: (folderName: string) => Promise<null> },
|
||||
'debug': { openDevTools: () => Promise<void>,
|
||||
isInDev: () => Promise<boolean>,
|
||||
getArch: () => Promise<string>,
|
||||
|
|
@ -370,10 +373,7 @@ getPlatform: () => Promise<string>,
|
|||
getOsVersion: () => Promise<string>,
|
||||
getGitCommitHash: () => Promise<string>,
|
||||
getBuildTimestamp: () => Promise<string>,
|
||||
getPackageVersion: () => Promise<string> },
|
||||
'events': { ingress: (event: IngressPayload) => Promise<void>,
|
||||
message: (event: MessagePayload) => Promise<void>,
|
||||
process: (event: ProcessPayload) => Promise<void> } };
|
||||
getPackageVersion: () => Promise<string> } };
|
||||
|
||||
|
||||
export type { InferCommandOutput }
|
||||
|
|
|
|||
|
|
@ -50,8 +50,13 @@ function RouteComponent() {
|
|||
});
|
||||
|
||||
const [modsPerCluster, setModsPerCluster] = useState<Record<string, Array<ModpackFile>>>(
|
||||
clusters.reduce((acc, cluster) => {
|
||||
acc[cluster.id] = [];
|
||||
clusters.reduce((acc, cluster, i) => {
|
||||
const bundles = bundleQueries[i];
|
||||
const enabledMods = bundles
|
||||
.filter(bundle => bundle.manifest.enabled)
|
||||
.flatMap(bundle => bundle.manifest.files.filter(file => file.enabled));
|
||||
|
||||
acc[cluster.id] = enabledMods;
|
||||
return acc;
|
||||
}, {} as Record<string, Array<ModpackFile>>),
|
||||
);
|
||||
|
|
@ -111,13 +116,14 @@ function ModCategory({ bundleData, name, modsPerCluster, setModsPerCluster }: {
|
|||
|
||||
function ModCategoryCard({ art, fullVersionName, bundle, mods, setMods, clusterId }: { fullVersionName: string; art: string; bundle: ModpackArchive; mods: Array<ModpackFile>; setMods: React.Dispatch<React.SetStateAction<Array<ModpackFile>>>; clusterId: number }) {
|
||||
const files = bundle.manifest.files;
|
||||
const isSelected = files.every(file => mods.includes(file));
|
||||
const isSelected = files.filter(file => file.enabled).every(file => mods.includes(file));
|
||||
const handleDownload = () => {
|
||||
setMods((prevMods) => {
|
||||
if (isSelected)
|
||||
return prevMods.filter(mod => !files.includes(mod));
|
||||
else
|
||||
return [...files, ...prevMods];
|
||||
if (isSelected) { return prevMods.filter(mod => !files.includes(mod)); }
|
||||
else {
|
||||
const filesToAdd = files.filter(file => file.enabled && !prevMods.includes(file));
|
||||
return [...filesToAdd, ...prevMods];
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -24,9 +24,15 @@ pub struct ModpackManifest {
|
|||
pub loader: GameLoader,
|
||||
pub loader_version: String,
|
||||
pub mc_version: String,
|
||||
#[serde(default = "default_false")]
|
||||
pub enabled: bool,
|
||||
pub files: Vec<ModpackFile>,
|
||||
}
|
||||
|
||||
fn default_false() -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
#[onelauncher_macro::specta]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct ModpackFile {
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ impl InstallableModpackFormatExt for MrPackFormatImpl {
|
|||
mc_version: self.mc_version.clone(),
|
||||
loader: self.loader.clone(),
|
||||
loader_version: self.loader_version.clone(),
|
||||
enabled: false,
|
||||
files,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ impl InstallableModpackFormatExt for PolyMrPackFormatImpl {
|
|||
mc_version: self.mc_version.clone(),
|
||||
loader: self.loader.clone(),
|
||||
loader_version: self.loader_version.clone(),
|
||||
enabled: self.raw_manifest.enabled,
|
||||
files,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue