Skip to content

Commit 93c0162

Browse files
Add error handling to iOS post editor (#210) (#214)
* Add error handling to post editor * Cleanup * Add error handling to macOS (#211) * Add error handling to Mac app * Log fatal errors and present alert on next launch (#212) * Log fatal crashes and present alert on next launch * Update crash alert copy and navigate to help forum * Refactor logging into reuseable methods * Refactor class to use protocol * Clean up todo comment * Revert "Log fatal errors and present alert on next launch (#212)" This reverts commit 7475b57.
1 parent 262aaaa commit 93c0162

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

Shared/WriteFreely_MultiPlatformApp.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ struct WriteFreely_MultiPlatformApp: App {
115115
}
116116
.tag(2)
117117
}
118+
.withErrorHandling()
118119
.frame(minWidth: 500, maxWidth: 500, minHeight: 200)
119120
.padding()
120121
// .preferredColorScheme(preferences.selectedColorScheme) // See PreferencesModel for info.

macOS/PostEditor/PostEditorView.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import SwiftUI
22

33
struct PostEditorView: View {
44
@EnvironmentObject var model: WriteFreelyModel
5+
@EnvironmentObject var errorHandling: ErrorHandling
56

67
@ObservedObject var post: WFAPost
78
@State private var isHovering: Bool = false
@@ -38,6 +39,16 @@ struct PostEditorView: View {
3839
LocalStorageManager.standard.saveContext()
3940
}
4041
})
42+
.onChange(of: model.hasError) { value in
43+
if value {
44+
if let error = model.currentError {
45+
self.errorHandling.handle(error: error)
46+
} else {
47+
self.errorHandling.handle(error: AppError.genericError())
48+
}
49+
model.hasError = false
50+
}
51+
}
4152
.onDisappear(perform: {
4253
DispatchQueue.main.async {
4354
model.editor.clearLastDraft()

macOS/Settings/MacAccountView.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,22 @@ import SwiftUI
22

33
struct MacAccountView: View {
44
@EnvironmentObject var model: WriteFreelyModel
5+
@EnvironmentObject var errorHandling: ErrorHandling
56

67
var body: some View {
7-
Form {
8-
AccountView()
8+
Form {
9+
AccountView()
10+
}
11+
.onChange(of: model.hasError) { value in
12+
if value {
13+
if let error = model.currentError {
14+
self.errorHandling.handle(error: error)
15+
} else {
16+
self.errorHandling.handle(error: AppError.genericError())
17+
}
18+
model.hasError = false
919
}
20+
}
1021
}
1122
}
1223

macOS/Settings/MacPreferencesView.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
import SwiftUI
22

33
struct MacPreferencesView: View {
4+
@EnvironmentObject var model: WriteFreelyModel
5+
@EnvironmentObject var errorHandling: ErrorHandling
6+
47
@ObservedObject var preferences: PreferencesModel
58

69
var body: some View {
710
VStack {
811
PreferencesView(preferences: preferences)
912
Spacer()
1013
}
14+
.onChange(of: model.hasError) { value in
15+
if value {
16+
if let error = model.currentError {
17+
self.errorHandling.handle(error: error)
18+
} else {
19+
self.errorHandling.handle(error: AppError.genericError())
20+
}
21+
model.hasError = false
22+
}
23+
}
1124
}
1225
}
1326

macOS/Settings/MacUpdatesView.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import SwiftUI
22
import Sparkle
33

44
struct MacUpdatesView: View {
5+
@EnvironmentObject var model: WriteFreelyModel
6+
@EnvironmentObject var errorHandling: ErrorHandling
7+
58
@ObservedObject var updaterViewModel: MacUpdatesViewModel
69

710
@AppStorage(WFDefaults.automaticallyChecksForUpdates, store: UserDefaults.shared)
@@ -81,6 +84,16 @@ that can cause crashes and data loss.
8184
.onChange(of: subscribeToBetaUpdates) { _ in
8285
updaterViewModel.toggleAllowedChannels()
8386
}
87+
.onChange(of: model.hasError) { value in
88+
if value {
89+
if let error = model.currentError {
90+
self.errorHandling.handle(error: error)
91+
} else {
92+
self.errorHandling.handle(error: AppError.genericError())
93+
}
94+
model.hasError = false
95+
}
96+
}
8497
}
8598
}
8699

0 commit comments

Comments
 (0)