Ensure the LoadPreferences message is dispatched with None when no preferences exist (#3198)

* preference load message on default load

* review fixup
This commit is contained in:
Timon
2025-09-23 20:19:16 +00:00
committed by GitHub
parent 21f34ab19a
commit d15f63f4fd
6 changed files with 18 additions and 15 deletions
+3 -4
View File
@@ -236,10 +236,9 @@ impl App {
self.persistent_data.write_preferences(preferences); self.persistent_data.write_preferences(preferences);
} }
DesktopFrontendMessage::PersistenceLoadPreferences => { DesktopFrontendMessage::PersistenceLoadPreferences => {
if let Some(preferences) = self.persistent_data.load_preferences() { let preferences = self.persistent_data.load_preferences();
let message = DesktopWrapperMessage::LoadPreferences { preferences }; let message = DesktopWrapperMessage::LoadPreferences { preferences };
self.dispatch_desktop_wrapper_message(message); self.dispatch_desktop_wrapper_message(message);
}
} }
} }
} }
+1 -1
View File
@@ -103,7 +103,7 @@ pub enum DesktopWrapperMessage {
id: DocumentId, id: DocumentId,
}, },
LoadPreferences { LoadPreferences {
preferences: Preferences, preferences: Option<Preferences>,
}, },
} }
@@ -6,7 +6,7 @@ use crate::messages::prelude::*;
#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)]
pub enum PreferencesMessage { pub enum PreferencesMessage {
// Management messages // Management messages
Load { preferences: PreferencesMessageHandler }, Load { preferences: Option<PreferencesMessageHandler> },
ResetToDefaults, ResetToDefaults,
// Per-preference messages // Per-preference messages
@@ -50,7 +50,9 @@ impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
match message { match message {
// Management messages // Management messages
PreferencesMessage::Load { preferences } => { PreferencesMessage::Load { preferences } => {
*self = preferences; if let Some(preferences) = preferences {
*self = preferences;
}
responses.add(PortfolioMessage::EditorPreferences); responses.add(PortfolioMessage::EditorPreferences);
responses.add(PortfolioMessage::UpdateVelloPreference); responses.add(PortfolioMessage::UpdateVelloPreference);
+1 -3
View File
@@ -147,9 +147,7 @@ export function createPersistenceManager(editor: Editor, portfolio: PortfolioSta
async function loadPreferences() { async function loadPreferences() {
const preferences = await get<Record<string, unknown>>("preferences", graphiteStore); const preferences = await get<Record<string, unknown>>("preferences", graphiteStore);
if (!preferences) return; editor.handle.loadPreferences(preferences ? JSON.stringify(preferences) : undefined);
editor.handle.loadPreferences(JSON.stringify(preferences));
} }
// FRONTEND MESSAGE SUBSCRIPTIONS // FRONTEND MESSAGE SUBSCRIPTIONS
+9 -5
View File
@@ -421,14 +421,18 @@ impl EditorHandle {
} }
#[wasm_bindgen(js_name = loadPreferences)] #[wasm_bindgen(js_name = loadPreferences)]
pub fn load_preferences(&self, preferences: String) { pub fn load_preferences(&self, preferences: Option<String>) {
let Ok(preferences) = serde_json::from_str(&preferences) else { let preferences = if let Some(preferences) = preferences {
log::error!("Failed to deserialize preferences"); let Ok(preferences) = serde_json::from_str(&preferences) else {
return; log::error!("Failed to deserialize preferences");
return;
};
Some(preferences)
} else {
None
}; };
let message = PreferencesMessage::Load { preferences }; let message = PreferencesMessage::Load { preferences };
self.dispatch(message); self.dispatch(message);
} }