Skip to content

Commit e0e3a25

Browse files
committed
feat: read notes, multiple changes
- migrated from Skeleton v3 to Sekeleton v4 - removed the background animation, it was annoying - Settings are now split into tabs - Rewrote multiple things in settings to properly manage the default simba install and the dev environment
1 parent a808692 commit e0e3a25

29 files changed

+1230
-856
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,15 @@
3232
"tailwindcss": "^4.1.16"
3333
},
3434
"devDependencies": {
35-
"@skeletonlabs/skeleton": "^3.2.2",
36-
"@skeletonlabs/skeleton-svelte": "^1.5.3",
35+
"@skeletonlabs/skeleton": "^4.3.0",
36+
"@skeletonlabs/skeleton-svelte": "^4.3.0",
3737
"@sveltejs/adapter-static": "^3.0.10",
3838
"@sveltejs/kit": "^2.47.3",
3939
"@sveltejs/vite-plugin-svelte": "^5.1.1",
4040
"@tailwindcss/forms": "^0.5.10",
4141
"@tailwindcss/typography": "^0.5.19",
4242
"@tauri-apps/cli": "^2.9.1",
43+
"@types/markdown-it-emoji": "^3.0.1",
4344
"prettier": "^3.6.2",
4445
"prettier-plugin-svelte": "^3.4.0",
4546
"prettier-plugin-tailwindcss": "^0.6.14",
@@ -48,4 +49,4 @@
4849
"typescript": "~5.6.3",
4950
"vite": "^6.4.1"
5051
}
51-
}
52+
}

pnpm-lock.yaml

Lines changed: 369 additions & 269 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/src/commands.rs

Lines changed: 113 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,75 @@ use tauri_plugin_store::StoreExt;
1818

1919
use crate::{
2020
server::handle_client, simba::ensure_simba_directories, simba::read_plugins_version,
21-
simba::run_simba, simba::sync_plugins_repo, ExecutablePaths,
21+
simba::run_simba, simba::sync_plugins_repo, LauncherVariables,
2222
};
2323

2424
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
25+
#[tauri::command]
26+
pub fn get_dev_mode(launcher_vars: State<'_, Mutex<LauncherVariables>>) -> bool {
27+
let launcher_vars = launcher_vars.lock().unwrap();
28+
launcher_vars.devmode
29+
}
30+
31+
#[tauri::command]
32+
pub fn set_dev_mode(
33+
app: tauri::AppHandle,
34+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
35+
state: bool,
36+
) {
37+
let mut launcher_vars = launcher_vars.lock().unwrap();
38+
launcher_vars.devmode = state;
39+
40+
let store = app
41+
.store("settings.json")
42+
.expect("Failed to retrieve settings.json store!");
43+
store.set("devmode", state);
44+
}
45+
46+
#[tauri::command]
47+
pub fn get_dev_updates(launcher_vars: State<'_, Mutex<LauncherVariables>>) -> bool {
48+
let launcher_vars = launcher_vars.lock().unwrap();
49+
launcher_vars.dev_updates
50+
}
51+
52+
#[tauri::command]
53+
pub fn set_dev_updates(
54+
app: tauri::AppHandle,
55+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
56+
state: bool,
57+
) {
58+
let mut launcher_vars = launcher_vars.lock().unwrap();
59+
launcher_vars.dev_updates = state;
60+
61+
let store = app
62+
.store("settings.json")
63+
.expect("Failed to retrieve settings.json store!");
64+
store.set("dev_updates", state);
65+
}
66+
67+
#[tauri::command]
68+
pub fn get_executable_path(
69+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
70+
exe: String,
71+
) -> String {
72+
let paths = launcher_vars.lock().unwrap();
73+
match exe.as_str() {
74+
"simba" => paths.simba.to_str().unwrap().to_string(),
75+
"devsimba" => paths.devsimba.to_str().unwrap().to_string(),
76+
"runelite" => paths.runelite.to_str().unwrap().to_string(),
77+
"osclient" => paths.osclient.to_str().unwrap().to_string(),
78+
_ => paths.simba.to_str().unwrap().to_string(),
79+
}
80+
}
81+
2582
#[tauri::command]
2683
pub fn set_executable_path(
2784
app: tauri::AppHandle,
28-
paths: State<'_, Mutex<ExecutablePaths>>,
85+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
2986
exe: String,
3087
path: String,
3188
) {
32-
let mut paths = paths.lock().unwrap();
89+
let mut paths = launcher_vars.lock().unwrap();
3390
match exe.as_str() {
3491
"simba" => paths.simba = PathBuf::from(path.clone()),
3592
"devsimba" => paths.devsimba = PathBuf::from(path.clone()),
@@ -45,24 +102,19 @@ pub fn set_executable_path(
45102
}
46103

47104
#[tauri::command]
48-
pub fn get_executable_path(paths: State<'_, Mutex<ExecutablePaths>>, exe: String) -> String {
49-
let paths = paths.lock().unwrap();
50-
match exe.as_str() {
51-
"simba" => paths.simba.to_str().unwrap().to_string(),
52-
"devsimba" => paths.devsimba.to_str().unwrap().to_string(),
53-
"runelite" => paths.runelite.to_str().unwrap().to_string(),
54-
"osclient" => paths.osclient.to_str().unwrap().to_string(),
55-
_ => paths.simba.to_str().unwrap().to_string(),
56-
}
57-
}
58-
59-
#[tauri::command]
60-
pub fn delete_cache(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<()> {
105+
pub fn delete_cache(
106+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
107+
exe: String,
108+
) -> tauri::Result<()> {
61109
let path = {
62-
let paths = paths.lock().unwrap();
63-
paths.simba.clone()
110+
let paths = launcher_vars.lock().unwrap();
111+
if exe == "devsimba" {
112+
paths.devsimba.clone()
113+
} else {
114+
paths.simba.clone()
115+
}
64116
};
65-
let cache_path = path.join("Data/Cache");
117+
let cache_path = path.join("Data").join("Cache");
66118

67119
if cache_path.exists() {
68120
remove_dir_all(&cache_path).expect("Failed to delete cache path.");
@@ -73,13 +125,20 @@ pub fn delete_cache(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<(
73125
}
74126

75127
#[tauri::command]
76-
pub fn delete_assets(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<()> {
128+
pub fn delete_assets(
129+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
130+
exe: String,
131+
) -> tauri::Result<()> {
77132
let path = {
78-
let paths = paths.lock().unwrap();
79-
paths.simba.clone()
133+
let paths = launcher_vars.lock().unwrap();
134+
if exe == "devsimba" {
135+
paths.devsimba.clone()
136+
} else {
137+
paths.simba.clone()
138+
}
80139
};
81140

82-
let assets_path = path.join("Data/Assets");
141+
let assets_path = path.join("Data").join("Assets");
83142

84143
if assets_path.exists() {
85144
remove_dir_all(&assets_path).expect("Failed to delete assets path.");
@@ -90,17 +149,24 @@ pub fn delete_assets(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<
90149
}
91150

92151
#[tauri::command]
93-
pub fn delete_configs(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<()> {
152+
pub fn delete_configs(
153+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
154+
exe: String,
155+
) -> tauri::Result<()> {
94156
let path = {
95-
let paths = paths.lock().unwrap();
96-
paths.simba.clone()
157+
let paths = launcher_vars.lock().unwrap();
158+
if exe == "devsimba" {
159+
paths.devsimba.clone()
160+
} else {
161+
paths.simba.clone()
162+
}
97163
};
98164

99-
let assets_path = path.join("Configs");
165+
let configs = path.join("Configs");
100166

101-
if assets_path.exists() {
102-
remove_dir_all(&assets_path).expect("Failed to delete configs path.");
103-
println!("Deleted folder: {:?}", assets_path);
167+
if configs.exists() {
168+
remove_dir_all(&configs).expect("Failed to delete configs path.");
169+
println!("Deleted folder: {:?}", configs);
104170
}
105171

106172
Ok(())
@@ -148,14 +214,14 @@ pub fn save_blob(
148214

149215
#[tauri::command]
150216
pub async fn run_executable(
151-
paths: State<'_, Mutex<ExecutablePaths>>,
217+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
152218
exe: String,
153219
args: Vec<String>,
154220
) -> Result<String, String> {
155221
let args_clone = args.clone();
156222

157223
let path = {
158-
let paths = paths.lock().unwrap();
224+
let paths = launcher_vars.lock().unwrap();
159225
match exe.as_str() {
160226
"simba" => paths.simba.clone(),
161227
"devsimba" => paths.devsimba.clone(),
@@ -169,7 +235,7 @@ pub async fn run_executable(
169235
run_simba(path, args).await;
170236
} else if exe == "devsimba" {
171237
let diff_dirs = {
172-
let paths = paths.lock().unwrap();
238+
let paths = launcher_vars.lock().unwrap();
173239
paths.simba != paths.devsimba
174240
};
175241

@@ -252,9 +318,11 @@ pub async fn sign_up(id: String) -> Result<String, String> {
252318
}
253319

254320
#[tauri::command]
255-
pub fn get_plugin_version(paths: State<'_, Mutex<ExecutablePaths>>) -> Result<String, String> {
321+
pub fn get_plugin_version(
322+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
323+
) -> Result<String, String> {
256324
let path = {
257-
let paths = paths.lock().unwrap();
325+
let paths = launcher_vars.lock().unwrap();
258326
paths.simba.clone()
259327
};
260328
let version_path = path.join("Plugins/wasp-plugins/version.simba");
@@ -263,10 +331,17 @@ pub fn get_plugin_version(paths: State<'_, Mutex<ExecutablePaths>>) -> Result<St
263331
}
264332

265333
#[tauri::command]
266-
pub async fn reinstall_plugins(paths: State<'_, Mutex<ExecutablePaths>>) -> tauri::Result<()> {
334+
pub async fn reinstall_plugins(
335+
launcher_vars: State<'_, Mutex<LauncherVariables>>,
336+
exe: String,
337+
) -> tauri::Result<()> {
267338
let path = {
268-
let paths = paths.lock().unwrap();
269-
paths.simba.clone()
339+
let paths = launcher_vars.lock().unwrap();
340+
if exe == "devsimba" {
341+
paths.devsimba.clone()
342+
} else {
343+
paths.simba.clone()
344+
}
270345
};
271346

272347
println!("Reinstalling plugins!");

src-tauri/src/lib.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ use tauri_plugin_cli::CliExt;
1212
use tauri_plugin_updater::UpdaterExt;
1313

1414
#[derive(Default)]
15-
struct ExecutablePaths {
15+
struct LauncherVariables {
16+
devmode: bool,
1617
simba: PathBuf,
1718
devsimba: PathBuf,
1819
runelite: PathBuf,
1920
osclient: PathBuf,
21+
dev_updates: bool,
2022
}
2123

22-
async fn update(app: tauri::AppHandle) -> tauri_plugin_updater::Result<()> {
24+
async fn update_launcher(app: tauri::AppHandle) -> tauri_plugin_updater::Result<()> {
2325
if let Some(update) = app.updater()?.check().await? {
2426
let mut downloaded = 0;
25-
26-
// alternatively we could also call update.download() and update.install() separately
2727
update
2828
.download_and_install(
2929
|chunk_length, content_length| {
@@ -57,7 +57,6 @@ pub fn run() {
5757
let window = app.get_webview_window("main").unwrap();
5858
match app.cli().matches() {
5959
Ok(matches) => {
60-
// args is a HashMap<String, ArgData>
6160
if let Some(arg) = matches.args.get("debug") {
6261
if arg.occurrences > 0 {
6362
println!("Debug flag present!");
@@ -71,7 +70,7 @@ pub fn run() {
7170
let handle = app.handle().clone();
7271
if !tauri::is_dev() {
7372
tauri::async_runtime::spawn(async move {
74-
update(handle).await.unwrap();
73+
update_launcher(handle).await.unwrap();
7574
});
7675
}
7776

@@ -117,19 +116,41 @@ pub fn run() {
117116
let osclient_default = program_files
118117
.join("Jagex Launcher\\Games\\Old School RuneScape\\Client\\osclient.exe");
119118

120-
app.manage(Mutex::new(ExecutablePaths {
119+
let devmode: bool = match settings.get("devmode") {
120+
Some(value) => value.as_bool().unwrap_or(false),
121+
None => {
122+
settings.set("devmode", false);
123+
false
124+
}
125+
};
126+
127+
let dev_updates: bool = match settings.get("dev_updates") {
128+
Some(value) => value.as_bool().unwrap_or(true),
129+
None => {
130+
settings.set("dev_updates", true);
131+
true
132+
}
133+
};
134+
135+
app.manage(Mutex::new(LauncherVariables {
121136
simba: simba_path.clone(),
137+
devmode: devmode,
122138
devsimba: get_path("devsimba", simba_path),
123139
runelite: get_path("runelite", runelite_default),
124140
osclient: get_path("osclient", osclient_default),
141+
dev_updates: dev_updates,
125142
}));
126143

127144
let _ = window.set_background_color(Some([25, 25, 25].into()));
128145
Ok(())
129146
})
130147
.invoke_handler(tauri::generate_handler![
131-
commands::set_executable_path,
148+
commands::get_dev_mode,
149+
commands::set_dev_mode,
150+
commands::get_dev_updates,
151+
commands::set_dev_updates,
132152
commands::get_executable_path,
153+
commands::set_executable_path,
133154
commands::run_executable,
134155
commands::start_server,
135156
commands::sign_up,
@@ -141,5 +162,5 @@ pub fn run() {
141162
commands::reinstall_plugins
142163
])
143164
.run(tauri::generate_context!())
144-
.expect("error while running tauri application");
165+
.expect("Error while running wasp-launcher");
145166
}

src-tauri/src/simba.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,10 @@ pub async fn run_simba(path: PathBuf, args: Vec<String>) {
334334
.expect("Failed to download or unzip Win64.zip");
335335
}
336336

337-
let _ =
338-
download_and_unzip_directory(path.join("Includes"), "WaspLib", "wasplib", &args[2]).await;
337+
if args[2] != "none" {
338+
let _ = download_and_unzip_directory(path.join("Includes"), "WaspLib", "wasplib", &args[2])
339+
.await;
340+
}
339341

340342
let script_file: String = path
341343
.join("Scripts")

0 commit comments

Comments
 (0)