diff --git a/Sources/Secretive.xcodeproj/project.pbxproj b/Sources/Secretive.xcodeproj/project.pbxproj index d66060b..64edb4f 100644 --- a/Sources/Secretive.xcodeproj/project.pbxproj +++ b/Sources/Secretive.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ 50B8550D24138C4F009958AC /* DeleteSecretView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B8550C24138C4F009958AC /* DeleteSecretView.swift */; }; 50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */; }; 50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C385A42407A76D00AF2719 /* SecretDetailView.swift */; }; + 50C511B0285064DB00704B27 /* MainActorWrappers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C511AF285064DB00704B27 /* MainActorWrappers.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -147,6 +148,7 @@ 50B8550C24138C4F009958AC /* DeleteSecretView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteSecretView.swift; sourceTree = ""; }; 50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStoreView.swift; sourceTree = ""; }; 50C385A42407A76D00AF2719 /* SecretDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretDetailView.swift; sourceTree = ""; }; + 50C511AF285064DB00704B27 /* MainActorWrappers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainActorWrappers.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -187,6 +189,7 @@ isa = PBXGroup; children = ( 50033AC227813F1700253856 /* BundleIDs.swift */, + 50C511AF285064DB00704B27 /* MainActorWrappers.swift */, ); path = Helpers; sourceTree = ""; @@ -479,6 +482,7 @@ 50571E0324393C2600F76F6C /* JustUpdatedChecker.swift in Sources */, 5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */, 50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */, + 50C511B0285064DB00704B27 /* MainActorWrappers.swift in Sources */, 5066A6F7251829B1004B5A36 /* ShellConfigurationController.swift in Sources */, 50033AC327813F1700253856 /* BundleIDs.swift in Sources */, 508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */, diff --git a/Sources/Secretive/Helpers/MainActorWrappers.swift b/Sources/Secretive/Helpers/MainActorWrappers.swift new file mode 100644 index 0000000..1a839ab --- /dev/null +++ b/Sources/Secretive/Helpers/MainActorWrappers.swift @@ -0,0 +1,17 @@ +import Foundation + +func mainActorWrapped(_ f: @escaping @MainActor () -> Void) -> () -> Void { + return { + DispatchQueue.main.async { + f() + } + } +} + +func mainActorWrapped(_ f: @escaping @MainActor (T) -> Void) -> (T) -> Void { + return { x in + DispatchQueue.main.async { + f(x) + } + } +} diff --git a/Sources/Secretive/Views/CreateSecretView.swift b/Sources/Secretive/Views/CreateSecretView.swift index 318226d..32be3bb 100644 --- a/Sources/Secretive/Views/CreateSecretView.swift +++ b/Sources/Secretive/Views/CreateSecretView.swift @@ -43,7 +43,7 @@ struct CreateSecretView: View { showing = false } .keyboardShortcut(.cancelAction) - Button("Create", action: save) + Button("Create", action: mainActorWrapped(save)) .disabled(name.isEmpty) .keyboardShortcut(.defaultAction) } diff --git a/Sources/Secretive/Views/DeleteSecretView.swift b/Sources/Secretive/Views/DeleteSecretView.swift index 5c3bdd5..17d96ff 100644 --- a/Sources/Secretive/Views/DeleteSecretView.swift +++ b/Sources/Secretive/Views/DeleteSecretView.swift @@ -33,7 +33,7 @@ struct DeleteSecretView: View { } HStack { Spacer() - Button("Delete", action: delete) + Button("Delete", action: mainActorWrapped(delete)) .disabled(confirm != secret.name) .keyboardShortcut(.delete) Button("Don't Delete") { diff --git a/Sources/Secretive/Views/RenameSecretView.swift b/Sources/Secretive/Views/RenameSecretView.swift index 9ac57ec..1a0e7c4 100644 --- a/Sources/Secretive/Views/RenameSecretView.swift +++ b/Sources/Secretive/Views/RenameSecretView.swift @@ -28,7 +28,7 @@ struct RenameSecretView: View { } HStack { Spacer() - Button("Rename", action: rename) + Button("Rename", action: mainActorWrapped(rename)) .disabled(newName.count == 0) .keyboardShortcut(.return) Button("Cancel") { diff --git a/Sources/Secretive/Views/StoreListView.swift b/Sources/Secretive/Views/StoreListView.swift index 84d3afc..9e0b7fb 100644 --- a/Sources/Secretive/Views/StoreListView.swift +++ b/Sources/Secretive/Views/StoreListView.swift @@ -31,8 +31,8 @@ struct StoreListView: View { store: store, secret: secret, activeSecret: $activeSecret, - deletedSecret: self.secretDeleted, - renamedSecret: self.secretRenamed + deletedSecret: mainActorWrapped(self.secretDeleted), + renamedSecret: mainActorWrapped(self.secretRenamed) ) } }