Working interface between rust and web

This commit is contained in:
2026-04-03 16:58:37 +02:00
parent 45c916cde3
commit 808f776056
3 changed files with 13 additions and 111 deletions
-22
View File
@@ -27,28 +27,6 @@ pub fn toggle_mod(state: State<SharedState>, mod_id: String) {
}
}
#[tauri::command]
pub fn discover_mods(query: String) -> Vec<Mod> {
let all = vec![Mod {
id: "modmenu".into(),
name: "Mod Menu".into(),
version: "7.2.2".into(),
author: "TerraformersMC".into(),
description: "Adds a mod menu.".into(),
enabled: false,
icon: None,
supported_versions: vec!["1.20.1".into(), "1.20.4".into(), "1.21".into()],
}];
if query.is_empty() {
return all;
}
all.into_iter()
.filter(|m| m.name.to_lowercase().contains(&query.to_lowercase()))
.collect()
}
#[tauri::command]
pub fn install_mod(state: State<SharedState>, mut mod_item: Mod) {
let mut state = state.lock().unwrap();
+3 -2
View File
@@ -1,17 +1,18 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use saturn_launcher_lib::commands::*;
use saturn_launcher_lib::{commands::*, AppState};
use std::sync::Mutex;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_opener::init())
.manage(Mutex::new(AppState::default()))
.invoke_handler(tauri::generate_handler![
get_versions,
get_installed_mods,
toggle_mod,
discover_mods,
install_mod,
get_settings,
update_settings,
+10 -87
View File
@@ -1,6 +1,6 @@
// Saturn Client Launcher Centralized Service Layer
// Handles all data fetching, mod management, and launch logic.
import { invoke } from "@tauri-apps/api/core";
// --- Types ---
export interface Mod {
id: string;
name: string;
@@ -21,84 +21,21 @@ export interface GameVersion {
export interface LauncherSettings {
jvmArguments: string;
maxMemory: number; // in MB
maxMemory: number;
}
// --- Internal state ---
const versions: GameVersion[] = [
{
id: "1.20.1",
name: "Fabric 1.20.1",
releaseDate: "2023-06-07",
type: "release",
},
{
id: "1.20.4",
name: "Fabric 1.20.4",
releaseDate: "2023-12-07",
type: "release",
},
{
id: "1.21",
name: "Fabric 1.21",
releaseDate: "2024-06-13",
type: "release",
},
];
const installedMods: Mod[] = [
{
id: "sodium",
name: "Sodium",
version: "0.5.8",
author: "jellysquid3",
description: "Modern rendering engine for Minecraft.",
enabled: true,
supportedVersions: ["1.20.1", "1.20.4", "1.21"],
},
{
id: "iris",
name: "Iris",
version: "1.7.0",
author: "coderbot",
description: "A modern shaders mod for Minecraft.",
enabled: true,
supportedVersions: ["1.20.1", "1.20.4", "1.21"],
},
{
id: "lithium",
name: "Lithium",
version: "0.11.2",
author: "jellysquid3",
description: "General-purpose optimization mod for Minecraft.",
enabled: false,
supportedVersions: ["1.20.1", "1.20.4"],
},
];
let settings: LauncherSettings = {
jvmArguments:
"-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200",
maxMemory: 4096,
};
// --- Versions ---
export async function getVersions(): Promise<GameVersion[]> {
return [...versions];
return await invoke("get_versions");
}
// --- Mods ---
export async function getInstalledMods(versionId: string): Promise<Mod[]> {
return installedMods.filter((mod) =>
mod.supportedVersions.includes(versionId),
);
return await invoke("get_installed_mods", { versionId });
}
export async function toggleMod(modId: string): Promise<void> {
const mod = installedMods.find((m) => m.id === modId);
if (mod) {
mod.enabled = !mod.enabled;
}
await invoke("toggle_mod", { modId });
}
export async function discoverMods(query: string): Promise<Mod[]> {
@@ -143,37 +80,23 @@ export async function installMod(
mod: Mod,
versionsList: string[],
): Promise<void> {
console.log(`Installing ${mod.name} to versions: ${versionsList.join(", ")}`);
if (!installedMods.find((m) => m.id === mod.id)) {
installedMods.push({
...mod,
enabled: true,
supportedVersions: versionsList,
});
}
await invoke("install_mod", { modItem: mod });
}
// --- Settings ---
export async function getSettings(): Promise<LauncherSettings> {
return { ...settings };
return await invoke("get_settings");
}
export async function updateSettings(
newSettings: Partial<LauncherSettings>,
): Promise<void> {
settings = { ...settings, ...newSettings };
await invoke("update_settings", { newSettings });
}
// --- Launch ---
export async function launchGame(
versionId: string,
): Promise<{ success: boolean; message: string }> {
console.log(`Launching Saturn Client with version ${versionId}...`);
return new Promise((resolve) => {
setTimeout(() => {
resolve({ success: true, message: "Game launched successfully!" });
}, 2000);
});
return await invoke("launch_game", { versionId });
}