diff --git a/apps/onelauncher/frontend/src/routes/app/cluster/settings.tsx b/apps/onelauncher/frontend/src/routes/app/cluster/settings.tsx
index 2efdc652..e9a4c105 100644
--- a/apps/onelauncher/frontend/src/routes/app/cluster/settings.tsx
+++ b/apps/onelauncher/frontend/src/routes/app/cluster/settings.tsx
@@ -1,6 +1,9 @@
+import type { ProfileUpdate } from '@/bindings.gen';
import ScrollableContainer from '@/components/ScrollableContainer';
+import usePopState from '@/hooks/usePopState';
import { bindings } from '@/main';
import { useCommand } from '@onelauncher/common';
+import { Button } from '@onelauncher/common/components';
import { createFileRoute } from '@tanstack/react-router';
import { GameSettings, ProcessSettings } from '../settings/minecraft';
import Sidebar from '../settings/route';
@@ -13,17 +16,29 @@ function RouteComponent() {
const { id } = Route.useSearch();
const cluster = useCommand('getClusterById', () => bindings.core.getClusterById(Number(id.toString()) as unknown as bigint));
- const _result = useCommand('getProfileOrDefault', () => bindings.core.getProfileOrDefault(cluster.data?.name as string), {
- enabled: !!cluster.data?.name,
+ const _result = useCommand('getProfileOrDefault', () => bindings.core.getProfileOrDefault(cluster.data?.setting_profile_name as string), {
+ enabled: !!cluster.data?.setting_profile_name,
});
+ const save = useCommand('updateClusterProfile', () => bindings.core.updateClusterProfile(cluster.data?.name as string, _result.data!), {
+ enabled: false,
+ subscribed: false,
+ });
+
+ usePopState(() => {
+ save.refetch();
+ });
+
+ if (_result.isPending)
+ return
loading...
;
+
return (
diff --git a/apps/onelauncher/frontend/src/routes/app/settings/minecraft.tsx b/apps/onelauncher/frontend/src/routes/app/settings/minecraft.tsx
index 740880be..4dd631f4 100644
--- a/apps/onelauncher/frontend/src/routes/app/settings/minecraft.tsx
+++ b/apps/onelauncher/frontend/src/routes/app/settings/minecraft.tsx
@@ -59,7 +59,7 @@ export function GameSettings(props: GameSettingProps) {
title="Force Fullscreen"
>
{
settings.force_fullscreen = val;
}}
@@ -101,11 +101,11 @@ export function GameSettings(props: GameSettingProps) {
{
settings.mem_max = Number(e.target.value);
}}
type="number"
- value={settings.mem_max?.toString()}
/>
diff --git a/packages/core/src/api/java/mod.rs b/packages/core/src/api/java/mod.rs
index 5655d13e..071c62a5 100644
--- a/packages/core/src/api/java/mod.rs
+++ b/packages/core/src/api/java/mod.rs
@@ -69,7 +69,7 @@ pub struct JavaInfo {
pub struct JavaPackage {
pub download_url: String,
pub name: PathBuf,
- pub jav_version: Vec,
+ pub java_version: Vec,
}
const JAVA_INFO_CLASS: &[u8] = include_bytes!("../../../assets/java/JavaInfo.class");
@@ -346,7 +346,7 @@ pub async fn install_java_from_major(version: u32) -> LauncherResult {
let packages = get_zulu_packages().await?;
let package = packages.into_iter()
- .find(|p| p.jav_version.contains(&version))
+ .find(|p| p.java_version.contains(&version))
.ok_or_else(|| anyhow::anyhow!(
"Could not find a java package for version {}",
version
diff --git a/packages/core/src/api/tauri/commands.rs b/packages/core/src/api/tauri/commands.rs
index cece87ce..11410863 100644
--- a/packages/core/src/api/tauri/commands.rs
+++ b/packages/core/src/api/tauri/commands.rs
@@ -1,5 +1,5 @@
use interpulse::api::minecraft::Version;
-use onelauncher_entity::{clusters, icon::Icon, loader::GameLoader, prelude::entity};
+use onelauncher_entity::{clusters, icon::Icon, loader::GameLoader, prelude::entity, resolution::Resolution};
use sea_orm::ActiveValue::Set;
use serde::Serialize;
use crate::store::{Settings, State};
@@ -39,6 +39,9 @@ pub trait TauriLauncherApi {
#[taurpc(alias = "getGlobalProfile")]
async fn get_global_profile() -> SettingsProfile;
+ #[taurpc(alias = "updateClusterProfile")]
+ async fn update_cluster_profile(name: String, profile: ProfileUpdate) -> LauncherResult;
+
// Game Metadata
#[taurpc(alias = "getGameVersions")]
async fn get_game_versions() -> LauncherResult>;
@@ -90,6 +93,17 @@ pub struct ClusterUpdate {
icon_url: Option,
}
+#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone)]
+pub struct ProfileUpdate {
+ pub res: Option,
+ pub force_fullscreen: Option,
+ pub mem_max: Option,
+ pub launch_args: Option,
+ pub launch_env: Option,
+ pub hook_pre: Option,
+ pub hook_wrapper: Option,
+ pub hook_post: Option,
+}
#[taurpc::ipc_type]
pub struct TauriLauncherApiImpl;
@@ -122,6 +136,13 @@ impl TauriLauncherApi for TauriLauncherApiImpl {
})
.await?;
+ api::cluster::dao::update_cluster_by_id(cluster.id, |mut active_model: ClusterPartial| async move {
+ active_model.setting_profile_name = Set(Some(options.name.clone()));
+
+ Ok(active_model)
+ })
+ .await?;
+
Ok(cluster)
}
@@ -173,6 +194,47 @@ impl TauriLauncherApi for TauriLauncherApiImpl {
api::setting_profiles::dao::get_profile_or_default(name.as_ref()).await
}
+ // please kill this with fire
+ async fn update_cluster_profile(self, name: String, profile: ProfileUpdate) -> LauncherResult {
+ let profile = api::setting_profiles::dao::update_profile_by_name(&name, |mut active_model: SettingsProfilePartial| async move {
+ if let Some(res) = profile.res {
+ active_model.res = Set(Some(res));
+ }
+
+ if let Some(force_fullscreen) = profile.force_fullscreen {
+ active_model.force_fullscreen = Set(Some(force_fullscreen));
+ }
+
+ if let Some(mem_max) = profile.mem_max {
+ active_model.mem_max = Set(Some(mem_max));
+ }
+
+ if let Some(launch_args) = profile.launch_args {
+ active_model.launch_args = Set(Some(launch_args));
+ }
+
+ if let Some(launch_env) = profile.launch_env {
+ active_model.launch_env = Set(Some(launch_env));
+ }
+
+ if let Some(hook_pre) = profile.hook_pre {
+ active_model.hook_pre = Set(Some(hook_pre));
+ }
+
+ if let Some(hook_wrapper) = profile.hook_wrapper {
+ active_model.hook_wrapper = Set(Some(hook_wrapper));
+ }
+
+ if let Some(hook_post) = profile.hook_post {
+ active_model.hook_post = Set(Some(hook_post));
+ }
+
+ Ok(active_model)
+ })
+ .await?;
+
+ Ok(profile)
+ }
// Game Metadata
async fn get_loaders_for_version(self, mc_version: String) -> LauncherResult> {