feat: also copy aime.txt
This commit is contained in:
@ -357,7 +357,7 @@ pub async fn load_segatools_ini(state: State<'_, Mutex<AppData>>, path: PathBuf)
|
|||||||
// Stupid path escape hack for the ini reader
|
// Stupid path escape hack for the ini reader
|
||||||
let str = str.replace("\\", "\\\\").replace("\\\\\\\\", "\\\\");
|
let str = str.replace("\\", "\\\\").replace("\\\\\\\\", "\\\\");
|
||||||
let ini = Ini::load_from_str(&str).map_err(|e| e.to_string())?;
|
let ini = Ini::load_from_str(&str).map_err(|e| e.to_string())?;
|
||||||
p.data.sgt.load_from_ini(&ini);
|
p.data.sgt.load_from_ini(&ini, p.config_dir()).map_err(|e| e.to_string())?;
|
||||||
p.data.network.load_from_ini(&ini).map_err(|e| e.to_string())?;
|
p.data.network.load_from_ini(&ini).map_err(|e| e.to_string())?;
|
||||||
if let Some(kb) = &mut p.data.keyboard {
|
if let Some(kb) = &mut p.data.keyboard {
|
||||||
kb.load_from_ini(&ini).map_err(|e| e.to_string())?;
|
kb.load_from_ini(&ini).map_err(|e| e.to_string())?;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::{PathBuf, Path};
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use ini::Ini;
|
use ini::Ini;
|
||||||
use crate::{model::{misc::Game, profile::{Aime, Segatools}, segatools_base::segatools_base}, profiles::ProfilePaths, util::{self, PathStr}};
|
use crate::{model::{misc::Game, profile::{Aime, Segatools}, segatools_base::segatools_base}, profiles::ProfilePaths, util::{self, PathStr}};
|
||||||
@ -31,13 +30,30 @@ impl Segatools {
|
|||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn load_from_ini(&mut self, ini: &Ini) {
|
pub fn load_from_ini(&mut self, ini: &Ini, config_dir: impl AsRef<Path>) -> Result<()> {
|
||||||
log::debug!("loading sgt");
|
log::debug!("loading sgt");
|
||||||
if let Some(s) = ini.section(Some("vfs")) {
|
if let Some(s) = ini.section(Some("vfs")) {
|
||||||
s.get("amfs").map(|v| self.amfs = PathBuf::from(v));
|
s.get("amfs").map(|v| self.amfs = PathBuf::from(v));
|
||||||
s.get("appdata").map(|v| self.appdata = PathBuf::from(v));
|
s.get("appdata").map(|v| self.appdata = PathBuf::from(v));
|
||||||
s.get("option").map(|v| self.option = PathBuf::from(v));
|
s.get("option").map(|v| self.option = PathBuf::from(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(s) = ini.section(Some("aime")) {
|
||||||
|
if s.get("enable").unwrap_or("0") == "1" {
|
||||||
|
if let Some(aime_path) = s.get("aimePath") {
|
||||||
|
if let Some(game_dir) = self.target.parent() {
|
||||||
|
let target = game_dir.join(aime_path);
|
||||||
|
std::fs::copy(target, config_dir.as_ref().join("aime.txt"))?;
|
||||||
|
} else {
|
||||||
|
log::error!("profile doesn't have a game directory");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log::warn!("aime emulation is enabled, but no aimePath specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
pub async fn line_up(&self, p: &impl ProfilePaths, game: Game) -> Result<Ini> {
|
pub async fn line_up(&self, p: &impl ProfilePaths, game: Game) -> Result<Ini> {
|
||||||
log::debug!("begin line-up: segatools");
|
log::debug!("begin line-up: segatools");
|
||||||
|
@ -3,6 +3,7 @@ import { computed, ref } from 'vue';
|
|||||||
import InputText from 'primevue/inputtext';
|
import InputText from 'primevue/inputtext';
|
||||||
import Select from 'primevue/select';
|
import Select from 'primevue/select';
|
||||||
import ToggleSwitch from 'primevue/toggleswitch';
|
import ToggleSwitch from 'primevue/toggleswitch';
|
||||||
|
import { listen } from '@tauri-apps/api/event';
|
||||||
import * as path from '@tauri-apps/api/path';
|
import * as path from '@tauri-apps/api/path';
|
||||||
import { readTextFile, writeTextFile } from '@tauri-apps/plugin-fs';
|
import { readTextFile, writeTextFile } from '@tauri-apps/plugin-fs';
|
||||||
import OptionCategory from '../OptionCategory.vue';
|
import OptionCategory from '../OptionCategory.vue';
|
||||||
@ -40,10 +41,14 @@ const aimeCodePaste = (ev: ClipboardEvent) => {
|
|||||||
.join('') ?? '';
|
.join('') ?? '';
|
||||||
};
|
};
|
||||||
|
|
||||||
(async () => {
|
const load = async () => {
|
||||||
const aime_path = await path.join(await prf.configDir, 'aime.txt');
|
const aime_path = await path.join(await prf.configDir, 'aime.txt');
|
||||||
aimeCode.value = await readTextFile(aime_path).catch(() => '');
|
aimeCode.value = await readTextFile(aime_path).catch(() => '');
|
||||||
})();
|
};
|
||||||
|
|
||||||
|
listen('reload-aime-code', load);
|
||||||
|
|
||||||
|
load();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import Select from 'primevue/select';
|
import Select from 'primevue/select';
|
||||||
import { useConfirm } from 'primevue/useconfirm';
|
import { useConfirm } from 'primevue/useconfirm';
|
||||||
|
import { emit } from '@tauri-apps/api/event';
|
||||||
import * as path from '@tauri-apps/api/path';
|
import * as path from '@tauri-apps/api/path';
|
||||||
import FilePicker from '../FilePicker.vue';
|
import FilePicker from '../FilePicker.vue';
|
||||||
import OptionCategory from '../OptionCategory.vue';
|
import OptionCategory from '../OptionCategory.vue';
|
||||||
@ -45,6 +46,7 @@ const checkSegatoolsIni = async (target: string) => {
|
|||||||
accept: async () => {
|
accept: async () => {
|
||||||
await invoke('load_segatools_ini', { path: iniPath });
|
await invoke('load_segatools_ini', { path: iniPath });
|
||||||
await prf.reload();
|
await prf.reload();
|
||||||
|
await emit('reload-aime-code');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user