File tree Expand file tree Collapse file tree 3 files changed +44
-2
lines changed Expand file tree Collapse file tree 3 files changed +44
-2
lines changed Original file line number Diff line number Diff line change @@ -24,7 +24,7 @@ struct PostEditorModel {
24
24
let coordinator = LocalStorageManager . persistentContainer. persistentStoreCoordinator
25
25
guard let postManagedObjectID = coordinator. managedObjectID ( forURIRepresentation: postURL) else { return nil }
26
26
guard let post = LocalStorageManager . persistentContainer. viewContext. object (
27
- with: postManagedObjectID
27
+ with: postManagedObjectID
28
28
) as? WFAPost else { return nil }
29
29
30
30
return post
Original file line number Diff line number Diff line change @@ -11,6 +11,13 @@ struct WriteFreely_MultiPlatformApp: App {
11
11
var body : some Scene {
12
12
WindowGroup {
13
13
ContentView ( )
14
+ . onAppear ( perform: {
15
+ if let lastDraft = model. editor. fetchLastDraftFromUserDefaults ( ) {
16
+ self . model. selectedPost = lastDraft
17
+ } else {
18
+ createNewLocalPost ( )
19
+ }
20
+ } )
14
21
. environmentObject ( model)
15
22
. environment ( \. managedObjectContext, LocalStorageManager . persistentContainer. viewContext)
16
23
// .preferredColorScheme(preferences.selectedColorScheme) // See PreferencesModel for info.
@@ -39,4 +46,26 @@ struct WriteFreely_MultiPlatformApp: App {
39
46
}
40
47
#endif
41
48
}
49
+
50
+ private func createNewLocalPost( ) {
51
+ let managedPost = WFAPost ( context: LocalStorageManager . persistentContainer. viewContext)
52
+ managedPost. createdDate = Date ( )
53
+ managedPost. title = " "
54
+ managedPost. body = " "
55
+ managedPost. status = PostStatus . local. rawValue
56
+ managedPost. collectionAlias = nil
57
+ switch model. preferences. font {
58
+ case 1 :
59
+ managedPost. appearance = " sans "
60
+ case 2 :
61
+ managedPost. appearance = " wrap "
62
+ default :
63
+ managedPost. appearance = " serif "
64
+ }
65
+ if let languageCode = Locale . current. languageCode {
66
+ managedPost. language = languageCode
67
+ managedPost. rtl = Locale . characterDirection ( forLanguage: languageCode) == . rightToLeft
68
+ }
69
+ self . model. selectedPost = managedPost
70
+ }
42
71
}
Original file line number Diff line number Diff line change @@ -136,15 +136,28 @@ struct PostEditorView: View {
136
136
model. move ( post: post, from: selectedCollection, to: newCollection)
137
137
}
138
138
} )
139
+ . onChange ( of: post. status, perform: { value in
140
+ if value != PostStatus . published. rawValue {
141
+ self . model. editor. saveLastDraft ( post)
142
+ } else {
143
+ self . model. editor. clearLastDraft ( )
144
+ }
145
+ DispatchQueue . main. async {
146
+ LocalStorageManager ( ) . saveContext ( )
147
+ }
148
+ } )
139
149
. onAppear ( perform: {
140
150
self . selectedCollection = collections. first { $0. alias == post. collectionAlias }
141
151
if post. status != PostStatus . published. rawValue {
142
- self . model. editor. saveLastDraft ( post)
152
+ DispatchQueue . main. async {
153
+ self . model. editor. saveLastDraft ( post)
154
+ }
143
155
} else {
144
156
self . model. editor. clearLastDraft ( )
145
157
}
146
158
} )
147
159
. onDisappear ( perform: {
160
+ self . model. editor. clearLastDraft ( )
148
161
if post. title. count == 0
149
162
&& post. body. count == 0
150
163
&& post. status == PostStatus . local. rawValue
You can’t perform that action at this time.
0 commit comments