1
- use graphite_desktop_wrapper:: messages:: { Document , DocumentId } ;
1
+ use graphite_desktop_wrapper:: messages:: { Document , DocumentId , Preferences } ;
2
2
3
3
#[ derive( Default , serde:: Serialize , serde:: Deserialize ) ]
4
4
pub ( crate ) struct PersistentData {
5
5
documents : DocumentStore ,
6
6
current_document : Option < DocumentId > ,
7
7
#[ serde( skip) ]
8
8
document_order : Option < Vec < DocumentId > > ,
9
- preferences : Option < String > ,
9
+ preferences : Option < Preferences > ,
10
10
}
11
11
12
12
impl PersistentData {
@@ -73,30 +73,37 @@ impl PersistentData {
73
73
self . flush ( ) ;
74
74
}
75
75
76
- pub ( crate ) fn write_preferences ( & mut self , content : String ) {
77
- self . preferences = Some ( content) ;
78
- self . flush ( ) ;
76
+ pub ( crate ) fn write_preferences ( & mut self , preferences : Preferences ) {
77
+ let Ok ( preferences) = ron:: ser:: to_string_pretty ( & preferences, Default :: default ( ) ) else {
78
+ tracing:: error!( "Failed to serialize preferences" ) ;
79
+ return ;
80
+ } ;
81
+ std:: fs:: write ( Self :: preferences_file_path ( ) , & preferences) . unwrap_or_else ( |e| {
82
+ tracing:: error!( "Failed to write preferences to disk: {e}" ) ;
83
+ } ) ;
79
84
}
80
85
81
- pub ( crate ) fn load_preferences ( & self ) -> Option < String > {
82
- self . preferences . clone ( )
86
+ pub ( crate ) fn load_preferences ( & self ) -> Option < Preferences > {
87
+ let data = std:: fs:: read_to_string ( Self :: preferences_file_path ( ) ) . ok ( ) ?;
88
+ let preferences = ron:: from_str ( & data) . ok ( ) ?;
89
+ Some ( preferences)
83
90
}
84
91
85
92
fn flush ( & self ) {
86
- let data = match ron:: to_string ( self ) {
93
+ let data = match ron:: ser :: to_string_pretty ( self , Default :: default ( ) ) {
87
94
Ok ( d) => d,
88
95
Err ( e) => {
89
96
tracing:: error!( "Failed to serialize persistent data: {e}" ) ;
90
97
return ;
91
98
}
92
99
} ;
93
- if let Err ( e) = std:: fs:: write ( Self :: persistence_file_path ( ) , data) {
100
+ if let Err ( e) = std:: fs:: write ( Self :: state_file_path ( ) , data) {
94
101
tracing:: error!( "Failed to write persistent data to disk: {e}" ) ;
95
102
}
96
103
}
97
104
98
105
pub ( crate ) fn load_from_disk ( & mut self ) {
99
- let path = Self :: persistence_file_path ( ) ;
106
+ let path = Self :: state_file_path ( ) ;
100
107
let data = match std:: fs:: read_to_string ( & path) {
101
108
Ok ( d) => d,
102
109
Err ( e) if e. kind ( ) == std:: io:: ErrorKind :: NotFound => {
@@ -118,11 +125,17 @@ impl PersistentData {
118
125
* self = loaded;
119
126
}
120
127
121
- fn persistence_file_path ( ) -> std:: path:: PathBuf {
128
+ fn state_file_path ( ) -> std:: path:: PathBuf {
122
129
let mut path = crate :: dirs:: graphite_data_dir ( ) ;
123
130
path. push ( crate :: consts:: APP_STATE_FILE_NAME ) ;
124
131
path
125
132
}
133
+
134
+ fn preferences_file_path ( ) -> std:: path:: PathBuf {
135
+ let mut path = crate :: dirs:: graphite_data_dir ( ) ;
136
+ path. push ( crate :: consts:: APP_PREFERENCES_FILE_NAME ) ;
137
+ path
138
+ }
126
139
}
127
140
128
141
#[ derive( Default , serde:: Serialize , serde:: Deserialize ) ]
0 commit comments