Skip to content

Commit d15f63f

Browse files
Ensure the LoadPreferences message is dispatched with None when no preferences exist (#3198)
* preference load message on default load * review fixup
1 parent 21f34ab commit d15f63f

File tree

6 files changed

+18
-15
lines changed

6 files changed

+18
-15
lines changed

desktop/src/app.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,9 @@ impl App {
236236
self.persistent_data.write_preferences(preferences);
237237
}
238238
DesktopFrontendMessage::PersistenceLoadPreferences => {
239-
if let Some(preferences) = self.persistent_data.load_preferences() {
240-
let message = DesktopWrapperMessage::LoadPreferences { preferences };
241-
self.dispatch_desktop_wrapper_message(message);
242-
}
239+
let preferences = self.persistent_data.load_preferences();
240+
let message = DesktopWrapperMessage::LoadPreferences { preferences };
241+
self.dispatch_desktop_wrapper_message(message);
243242
}
244243
}
245244
}

desktop/wrapper/src/messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ pub enum DesktopWrapperMessage {
103103
id: DocumentId,
104104
},
105105
LoadPreferences {
106-
preferences: Preferences,
106+
preferences: Option<Preferences>,
107107
},
108108
}
109109

editor/src/messages/preferences/preferences_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::messages::prelude::*;
66
#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)]
77
pub enum PreferencesMessage {
88
// Management messages
9-
Load { preferences: PreferencesMessageHandler },
9+
Load { preferences: Option<PreferencesMessageHandler> },
1010
ResetToDefaults,
1111

1212
// Per-preference messages

editor/src/messages/preferences/preferences_message_handler.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
5050
match message {
5151
// Management messages
5252
PreferencesMessage::Load { preferences } => {
53-
*self = preferences;
53+
if let Some(preferences) = preferences {
54+
*self = preferences;
55+
}
5456

5557
responses.add(PortfolioMessage::EditorPreferences);
5658
responses.add(PortfolioMessage::UpdateVelloPreference);

frontend/src/io-managers/persistence.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,7 @@ export function createPersistenceManager(editor: Editor, portfolio: PortfolioSta
147147

148148
async function loadPreferences() {
149149
const preferences = await get<Record<string, unknown>>("preferences", graphiteStore);
150-
if (!preferences) return;
151-
152-
editor.handle.loadPreferences(JSON.stringify(preferences));
150+
editor.handle.loadPreferences(preferences ? JSON.stringify(preferences) : undefined);
153151
}
154152

155153
// FRONTEND MESSAGE SUBSCRIPTIONS

frontend/wasm/src/editor_api.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -421,14 +421,18 @@ impl EditorHandle {
421421
}
422422

423423
#[wasm_bindgen(js_name = loadPreferences)]
424-
pub fn load_preferences(&self, preferences: String) {
425-
let Ok(preferences) = serde_json::from_str(&preferences) else {
426-
log::error!("Failed to deserialize preferences");
427-
return;
424+
pub fn load_preferences(&self, preferences: Option<String>) {
425+
let preferences = if let Some(preferences) = preferences {
426+
let Ok(preferences) = serde_json::from_str(&preferences) else {
427+
log::error!("Failed to deserialize preferences");
428+
return;
429+
};
430+
Some(preferences)
431+
} else {
432+
None
428433
};
429434

430435
let message = PreferencesMessage::Load { preferences };
431-
432436
self.dispatch(message);
433437
}
434438

0 commit comments

Comments
 (0)