From 52a33922c2bce0454dbdde7d5aa429f2c357e327 Mon Sep 17 00:00:00 2001 From: emirsassan Date: Fri, 4 Jul 2025 15:00:03 +0300 Subject: [PATCH] chore: cluster settings --- .../src/routes/app/cluster/settings.tsx | 21 +++++- .../src/routes/app/settings/minecraft.tsx | 4 +- packages/core/src/api/java/mod.rs | 4 +- packages/core/src/api/tauri/commands.rs | 64 ++++++++++++++++++- 4 files changed, 85 insertions(+), 8 deletions(-) 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 (

Minecraft Settings

- +
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> {