diff --git a/bun.lockb b/bun.lockb index fedd93f..1b2ff23 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/rust/src/cmd.rs b/rust/src/cmd.rs index 9816309..8cddc7b 100644 --- a/rust/src/cmd.rs +++ b/rust/src/cmd.rs @@ -2,6 +2,7 @@ use log; use std::collections::HashMap; use std::path::PathBuf; use tokio::sync::Mutex; +use tokio::fs; use crate::pkg::{Package, PkgKey}; use crate::pkg_store::InstallResult; @@ -140,9 +141,25 @@ pub async fn init_profile( new_profile.save().await; appd.profile = Some(new_profile.clone()); + fs::create_dir(new_profile.dir()).await + .map_err(|e| format!("Unable to create profile directory: {}", e))?; + Ok(new_profile) } +#[tauri::command] +pub async fn profile_dir( + state: State<'_, Mutex> +) -> Result { + let appd = state.lock().await; + + if let Some(p) = &appd.profile { + Ok(p.dir()) + } else { + Err("No profile loaded") + } +} + #[tauri::command] pub async fn set_cfg( state: State<'_, Mutex>, diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 9965a77..9e6cdc7 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -106,6 +106,7 @@ pub async fn run(_args: Vec) { cmd::get_current_profile, cmd::init_profile, cmd::save_profile, + cmd::profile_dir, cmd::startline, cmd::kill, cmd::set_cfg, diff --git a/rust/src/start.rs b/rust/src/start.rs index 65be205..b5afb27 100644 --- a/rust/src/start.rs +++ b/rust/src/start.rs @@ -7,7 +7,7 @@ use crate::profile::Profile; use crate::util; #[cfg(target_os = "windows")] -static CREATE_NO_WINDOW: i32 = 0x08000000; +static CREATE_NO_WINDOW: u32 = 0x08000000; pub fn start(p: &Profile, app: AppHandle) -> Result<()> { use tokio::task::JoinSet; diff --git a/src/components/Options.vue b/src/components/Options.vue index e4bd838..829276c 100644 --- a/src/components/Options.vue +++ b/src/components/Options.vue @@ -5,8 +5,9 @@ import InputNumber from 'primevue/inputnumber'; import InputText from 'primevue/inputtext'; import RadioButton from 'primevue/radiobutton'; import Toggle from 'primevue/toggleswitch'; +import { invoke } from '@tauri-apps/api/core'; import * as path from '@tauri-apps/api/path'; -import { readTextFile, writeTextFile } from '@tauri-apps/plugin-fs'; +import { mkdir, readTextFile, writeTextFile } from '@tauri-apps/plugin-fs'; import { usePkgStore } from '../stores'; const store = usePkgStore(); @@ -28,18 +29,19 @@ const cfgAime = _cfg('aime', false); const aimeCode = ref(''); // temp +let profilePath = ''; let aimePath = ''; (async () => { - aimePath = await path.join( - await path.dataDir(), - 'startliner/profile-ongeki-default/aime.txt' - ); - aimeCode.value = await readTextFile(aimePath); + profilePath = await invoke('profile_dir'); + try { + aimePath = await path.join(profilePath, 'aime.txt'); + aimeCode.value = await readTextFile(aimePath); + } catch (_) { + aimeCode.value = ''; + } })(); -path.homeDir().then(console.log); - const aimeCodeModel = computed({ get() { return aimeCode.value; @@ -47,6 +49,7 @@ const aimeCodeModel = computed({ async set(value: string) { aimeCode.value = value; if (value.match(/^[0-9]{20}$/)) { + await mkdir(profilePath); await writeTextFile(aimePath, aimeCode.value); } },