Skip to content

Commit 3d698b7

Browse files
Move preference persistence to native
1 parent 70e24de commit 3d698b7

File tree

11 files changed

+48
-11
lines changed

11 files changed

+48
-11
lines changed

desktop/src/app.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,15 @@ impl WinitApp {
201201
self.dispatch_desktop_wrapper_message(message);
202202
}
203203
}
204+
DesktopFrontendMessage::PersistenceWritePreferences { content } => {
205+
self.persistent_data.write_preferences(content);
206+
}
207+
DesktopFrontendMessage::PersistenceLoadPreferences => {
208+
if let Some(content) = self.persistent_data.load_preferences() {
209+
let message = DesktopWrapperMessage::LoadPreferences { content };
210+
self.dispatch_desktop_wrapper_message(message);
211+
}
212+
}
204213
}
205214
}
206215

desktop/src/consts.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
pub(crate) static APP_NAME: &str = "Graphite";
22
pub(crate) static APP_ID: &str = "rs.graphite.GraphiteEditor";
33
pub(crate) static APP_DIRECTORY_NAME: &str = "graphite-editor";
4-
pub(crate) static APP_AUTOSAVE_DIRECTORY_NAME: &str = "documents";
4+
pub(crate) static APP_STATE_FILE_NAME: &str = "state.ron";
5+
pub(crate) static APP_DOCUMENTS_DIRECTORY_NAME: &str = "documents";
56

67
// CEF configuration constants
78
pub(crate) const CEF_WINDOWLESS_FRAME_RATE: i32 = 60;

desktop/src/dirs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::fs::create_dir_all;
22
use std::path::PathBuf;
33

4-
use crate::consts::{APP_AUTOSAVE_DIRECTORY_NAME, APP_DIRECTORY_NAME};
4+
use crate::consts::{APP_DIRECTORY_NAME, APP_DOCUMENTS_DIRECTORY_NAME};
55

66
pub(crate) fn ensure_dir_exists(path: &PathBuf) {
77
if !path.exists() {
@@ -16,7 +16,7 @@ pub(crate) fn graphite_data_dir() -> PathBuf {
1616
}
1717

1818
pub(crate) fn graphite_autosave_documents_dir() -> PathBuf {
19-
let path = graphite_data_dir().join(APP_AUTOSAVE_DIRECTORY_NAME);
19+
let path = graphite_data_dir().join(APP_DOCUMENTS_DIRECTORY_NAME);
2020
ensure_dir_exists(&path);
2121
path
2222
}

desktop/src/persist.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ pub(crate) struct PersistentData {
66
current_document: Option<DocumentId>,
77
#[serde(skip)]
88
document_order: Option<Vec<DocumentId>>,
9+
preferences: Option<String>,
910
}
1011

1112
impl PersistentData {
@@ -72,6 +73,15 @@ impl PersistentData {
7273
self.flush();
7374
}
7475

76+
pub(crate) fn write_preferences(&mut self, content: String) {
77+
self.preferences = Some(content);
78+
self.flush();
79+
}
80+
81+
pub(crate) fn load_preferences(&self) -> Option<String> {
82+
self.preferences.clone()
83+
}
84+
7585
fn flush(&self) {
7686
let data = match ron::to_string(self) {
7787
Ok(d) => d,
@@ -110,7 +120,7 @@ impl PersistentData {
110120

111121
fn persistence_file_path() -> std::path::PathBuf {
112122
let mut path = crate::dirs::graphite_data_dir();
113-
path.push(format!("{}.ron", crate::consts::APP_AUTOSAVE_DIRECTORY_NAME));
123+
path.push(crate::consts::APP_STATE_FILE_NAME);
114124
path
115125
}
116126
}

desktop/wrapper/src/handle_desktop_wrapper_message.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use graphene_std::Color;
22
use graphene_std::raster::Image;
33
use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform;
4-
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, PortfolioMessage};
4+
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, PortfolioMessage, PreferencesMessage};
55

66
use crate::messages::Platform;
77

@@ -134,5 +134,9 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
134134
let message = PortfolioMessage::SelectDocument { document_id: id };
135135
dispatcher.queue_editor_message(message.into());
136136
}
137+
DesktopWrapperMessage::LoadPreferences { content } => {
138+
let message = PreferencesMessage::Load { preferences: content };
139+
dispatcher.queue_editor_message(message.into());
140+
}
137141
}
138142
}

desktop/wrapper/src/intercept_frontend_message.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
107107
FrontendMessage::TriggerLoadRestAutoSaveDocuments => {
108108
dispatcher.respond(DesktopFrontendMessage::PersistenceLoadRemainingDocuments);
109109
}
110+
FrontendMessage::TriggerSavePreferences { preferences } => {
111+
dispatcher.respond(DesktopFrontendMessage::PersistenceWritePreferences { content: preferences });
112+
}
113+
FrontendMessage::TriggerLoadPreferences => {
114+
dispatcher.respond(DesktopFrontendMessage::PersistenceLoadPreferences);
115+
}
110116
m => return Some(m),
111117
}
112118
None

desktop/wrapper/src/messages.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ pub enum DesktopFrontendMessage {
5050
PersistenceUpdateDocumentsList {
5151
ids: Vec<DocumentId>,
5252
},
53+
PersistenceWritePreferences {
54+
content: String,
55+
},
56+
PersistenceLoadPreferences,
5357
CloseWindow,
5458
}
5559

@@ -66,6 +70,7 @@ pub enum DesktopWrapperMessage {
6670
UpdatePlatform(Platform),
6771
LoadDocument { id: DocumentId, document: Document, to_front: bool },
6872
SelectDocument { id: DocumentId },
73+
LoadPreferences { content: String },
6974
}
7075

7176
#[derive(Clone, serde::Serialize, serde::Deserialize, Debug)]

editor/src/messages/frontend/frontend_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ pub enum FrontendMessage {
106106
TriggerOpenDocument,
107107
TriggerPaste,
108108
TriggerSavePreferences {
109-
preferences: PreferencesMessageHandler,
109+
preferences: String,
110110
},
111111
TriggerSaveActiveDocument {
112112
#[serde(rename = "documentId")]

editor/src/messages/preferences/preferences_message_handler.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
9595
}
9696
}
9797

98-
responses.add(FrontendMessage::TriggerSavePreferences { preferences: self.clone() });
98+
if let Ok(preferences) = serde_json::to_string(&self) {
99+
responses.add(FrontendMessage::TriggerSavePreferences { preferences });
100+
}
99101
}
100102

101103
advertise_actions!(PreferencesMessageDiscriminant;

frontend/src/io-managers/persistence.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,15 @@ export function createPersistenceManager(editor: Editor, portfolio: PortfolioSta
141141

142142
// PREFERENCES
143143

144-
async function savePreferences(preferences: TriggerSavePreferences["preferences"]) {
144+
async function savePreferences(preferences: string) {
145145
await set("preferences", preferences, graphiteStore);
146146
}
147147

148148
async function loadPreferences() {
149-
const preferences = await get<Record<string, unknown>>("preferences", graphiteStore);
149+
const preferences = await get<string>("preferences", graphiteStore);
150150
if (!preferences) return;
151151

152-
editor.handle.loadPreferences(JSON.stringify(preferences));
152+
editor.handle.loadPreferences(preferences);
153153
}
154154

155155
// FRONTEND MESSAGE SUBSCRIPTIONS

0 commit comments

Comments
 (0)