Use profile filename instead of profile name to detect profile change
This commit is contained in:
parent
1175780951
commit
68e86c0778
7 changed files with 46 additions and 10 deletions
|
@ -140,6 +140,28 @@ pub fn get_name(
|
|||
}
|
||||
}
|
||||
|
||||
/// Generate get current settings name
|
||||
pub fn get_path(
|
||||
sender: Sender<ApiMessage>,
|
||||
) -> impl AsyncCallable {
|
||||
let sender = Arc::new(Mutex::new(sender)); // Sender is not Sync; this is required for safety
|
||||
let getter = move || {
|
||||
let sender2 = sender.clone();
|
||||
move || {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
let callback = move |name: std::path::PathBuf| tx.send(name).expect("get_path callback send failed");
|
||||
sender2.lock().unwrap().send(ApiMessage::General(GeneralMessage::GetPath(Box::new(callback)))).expect("get_name send failed");
|
||||
rx.recv().expect("get_path callback recv failed")
|
||||
}
|
||||
};
|
||||
super::async_utils::AsyncIshGetter {
|
||||
set_get: getter,
|
||||
trans_getter: |result| {
|
||||
vec![result.to_string_lossy().to_string().into()]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate wait for all locks to be available web method
|
||||
pub fn lock_unlock_all(
|
||||
sender: Sender<ApiMessage>,
|
||||
|
|
|
@ -194,6 +194,7 @@ pub enum GeneralMessage {
|
|||
SetPersistent(bool),
|
||||
GetPersistent(Callback<bool>),
|
||||
GetCurrentProfileName(Callback<String>),
|
||||
GetPath(Callback<std::path::PathBuf>),
|
||||
ApplyNow,
|
||||
}
|
||||
|
||||
|
@ -204,6 +205,7 @@ impl GeneralMessage {
|
|||
Self::SetPersistent(val) => *settings.persistent() = val,
|
||||
Self::GetPersistent(cb) => cb(*settings.persistent()),
|
||||
Self::GetCurrentProfileName(cb) => cb(settings.get_name().to_owned()),
|
||||
Self::GetPath(cb) => cb(settings.get_path().to_owned()),
|
||||
Self::ApplyNow => {},
|
||||
}
|
||||
dirty
|
||||
|
|
|
@ -215,6 +215,10 @@ fn main() -> Result<(), ()> {
|
|||
"GENERAL_get_name",
|
||||
api::general::get_name(api_sender.clone())
|
||||
)
|
||||
.register_async(
|
||||
"GENERAL_get_path",
|
||||
api::general::get_path(api_sender.clone())
|
||||
)
|
||||
.register_async(
|
||||
"GENERAL_wait_for_unlocks",
|
||||
api::general::lock_unlock_all(api_sender.clone())
|
||||
|
|
|
@ -140,7 +140,7 @@ impl Settings {
|
|||
}
|
||||
|
||||
pub fn load_file(&mut self, filename: PathBuf, name: String, system_defaults: bool) -> Result<bool, SettingError> {
|
||||
let json_path = crate::utility::settings_dir().join(filename);
|
||||
let json_path = crate::utility::settings_dir().join(&filename);
|
||||
if json_path.exists() {
|
||||
let settings_json = SettingsJson::open(&json_path).map_err(|e| SettingError {
|
||||
msg: e.to_string(),
|
||||
|
@ -176,7 +176,7 @@ impl Settings {
|
|||
}
|
||||
*self.general.persistent() = false;
|
||||
}
|
||||
self.general.path(json_path);
|
||||
self.general.path(filename);
|
||||
Ok(*self.general.persistent())
|
||||
}
|
||||
|
||||
|
|
|
@ -245,6 +245,10 @@ export async function getGeneralSettingsName(): Promise<string> {
|
|||
return (await call_backend("GENERAL_get_name", []))[0];
|
||||
}
|
||||
|
||||
export async function getGeneralSettingsPath(): Promise<string> {
|
||||
return (await call_backend("GENERAL_get_path", []))[0];
|
||||
}
|
||||
|
||||
export async function waitForComplete(): Promise<boolean> {
|
||||
return (await call_backend("GENERAL_wait_for_unlocks", []))[0];
|
||||
}
|
||||
|
|
|
@ -27,3 +27,5 @@ export const SLOW_MEMORY_GPU = "GPU_slow_memory";
|
|||
|
||||
export const PERSISTENT_GEN = "GENERAL_persistent";
|
||||
export const NAME_GEN = "GENERAL_name";
|
||||
export const PATH_GEN = "GENERAL_path";
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ import {
|
|||
} from "decky-frontend-lib";
|
||||
import { VFC, useState } from "react";
|
||||
import { GiDrill, GiTimeBomb, GiTimeTrap, GiDynamite } from "react-icons/gi";
|
||||
import { HiRefresh, HiTrash } from "react-icons/hi";
|
||||
|
||||
//import * as python from "./python";
|
||||
import * as backend from "./backend";
|
||||
|
@ -54,6 +55,7 @@ import {
|
|||
|
||||
PERSISTENT_GEN,
|
||||
NAME_GEN,
|
||||
PATH_GEN,
|
||||
} from "./consts";
|
||||
import { set_value, get_value } from "usdpl-front";
|
||||
import { Debug } from "./components/debug";
|
||||
|
@ -142,6 +144,7 @@ const reload = function() {
|
|||
|
||||
backend.resolve(backend.getGeneralPersistent(), (value: boolean) => { set_value(PERSISTENT_GEN, value) });
|
||||
backend.resolve(backend.getGeneralSettingsName(), (name: string) => { set_value(NAME_GEN, name) });
|
||||
backend.resolve(backend.getGeneralSettingsPath(), (path: string) => { set_value(PATH_GEN, path) });
|
||||
|
||||
backend.resolve(backend.getInfo(), (info: string) => { set_value(BACKEND_INFO, info) });
|
||||
backend.resolve(backend.getDriverProviderName("gpu"), (driver: string) => { set_value(DRIVER_INFO, driver) });
|
||||
|
@ -151,7 +154,6 @@ const reload = function() {
|
|||
(async function(){
|
||||
await backend.initBackend();
|
||||
usdplReady = true;
|
||||
set_value(NAME_GEN, "Default");
|
||||
reload(); // technically this is only a load
|
||||
|
||||
// register Steam callbacks
|
||||
|
@ -186,11 +188,11 @@ const periodicals = function() {
|
|||
backend.resolve(backend.getBatteryChargeNow(), (rate: number) => { set_value(CHARGE_NOW_BATT, rate) });
|
||||
backend.resolve(backend.getBatteryChargeFull(), (rate: number) => { set_value(CHARGE_FULL_BATT, rate) });
|
||||
|
||||
backend.resolve(backend.getGeneralPersistent(), (value: boolean) => { set_value(PERSISTENT_GEN, value) });
|
||||
backend.resolve(backend.getGeneralSettingsName(), (name: string) => {
|
||||
const oldValue = get_value(NAME_GEN);
|
||||
set_value(NAME_GEN, name);
|
||||
if (name != oldValue) {
|
||||
backend.resolve(backend.getGeneralSettingsPath(), (path: string) => {
|
||||
const oldValue = get_value(PATH_GEN);
|
||||
set_value(PATH_GEN, path);
|
||||
if (path != oldValue) {
|
||||
backend.log(backend.LogLevel.Info, "Frontend values reload triggered by path change: " + oldValue + " -> " + path);
|
||||
reload();
|
||||
}
|
||||
});
|
||||
|
@ -272,7 +274,7 @@ const Content: VFC<{ serverAPI: ServerAPI }> = ({}) => {
|
|||
backend.forceApplySettings();
|
||||
}}
|
||||
>
|
||||
{tr("Reapply settings")}
|
||||
<HiRefresh /> {tr("Reapply settings")}
|
||||
</ButtonItem>
|
||||
</PanelSectionRow>
|
||||
|
||||
|
@ -293,7 +295,7 @@ const Content: VFC<{ serverAPI: ServerAPI }> = ({}) => {
|
|||
);
|
||||
}}
|
||||
>
|
||||
{tr("Defaults")}
|
||||
<HiTrash /> {tr("Defaults")}
|
||||
</ButtonItem>
|
||||
</PanelSectionRow>
|
||||
</PanelSection>
|
||||
|
|
Loading…
Reference in a new issue