Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Commit 698f13f

Browse files
authored
Refactor Core Data usage in RemoteMessagingStore (#3425)
Task/Issue URL: https://app.asana.com/0/1201048563534612/1208493869353425/f Description: This change updates RMF client to use new async API from BSK's RemoteMessagingStore.
1 parent 1cf43fa commit 698f13f

10 files changed

+74
-64
lines changed

DuckDuckGo.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10947,7 +10947,7 @@
1094710947
repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit";
1094810948
requirement = {
1094910949
kind = exactVersion;
10950-
version = 198.4.0;
10950+
version = 199.0.0;
1095110951
};
1095210952
};
1095310953
9F8FE9472BAE50E50071E372 /* XCRemoteSwiftPackageReference "lottie-spm" */ = {

DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DuckDuckGo/HomeMessageView.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ struct HomeMessageView: View {
103103

104104
private var closeButton: some View {
105105
Button {
106-
viewModel.onDidClose(.close)
106+
Task {
107+
await viewModel.onDidClose(.close)
108+
}
107109
} label: {
108110
Image("Close-24")
109111
.foregroundColor(.primary)
@@ -143,9 +145,11 @@ struct HomeMessageView: View {
143145
private var buttons: some View {
144146
ForEach(viewModel.buttons, id: \.title) { buttonModel in
145147
Button {
146-
buttonModel.action()
147-
if case .share(let value, let title) = buttonModel.actionStyle {
148-
activityItem = ShareItem(value: value, title: title)
148+
Task { @MainActor in
149+
await buttonModel.action()
150+
if case .share(let value, let title) = buttonModel.actionStyle {
151+
activityItem = ShareItem(value: value, title: title)
152+
}
149153
}
150154
} label: {
151155
HStack {

DuckDuckGo/HomeMessageViewModel.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,40 +118,40 @@ struct HomeMessageViewModel {
118118
}
119119
}
120120

121-
let onDidClose: (ButtonAction?) -> Void
121+
let onDidClose: (ButtonAction?) async -> Void
122122
let onDidAppear: () -> Void
123123
let onAttachAdditionalParameters: ((_ useCase: PrivacyProDataReportingUseCase, _ params: [String: String]) -> [String: String])?
124124

125125
func mapActionToViewModel(remoteAction: RemoteAction,
126126
buttonAction: HomeMessageViewModel.ButtonAction,
127-
onDidClose: @escaping (HomeMessageViewModel.ButtonAction?) -> Void) -> () -> Void {
127+
onDidClose: @escaping (HomeMessageViewModel.ButtonAction?) async -> Void) -> () async -> Void {
128128

129129
switch remoteAction {
130130
case .share:
131-
return {
132-
onDidClose(buttonAction)
131+
return { @MainActor in
132+
await onDidClose(buttonAction)
133133
}
134134
case .url(let value):
135-
return {
135+
return { @MainActor in
136136
LaunchTabNotification.postLaunchTabNotification(urlString: value)
137-
onDidClose(buttonAction)
137+
await onDidClose(buttonAction)
138138
}
139139
case .survey(let value):
140-
return {
140+
return { @MainActor in
141141
LaunchTabNotification.postLaunchTabNotification(urlString: value)
142-
onDidClose(buttonAction)
142+
await onDidClose(buttonAction)
143143
}
144144
case .appStore:
145-
return {
145+
return { @MainActor in
146146
let url = URL.appStore
147147
if UIApplication.shared.canOpenURL(url as URL) {
148148
UIApplication.shared.open(url)
149149
}
150-
onDidClose(buttonAction)
150+
await onDidClose(buttonAction)
151151
}
152152
case .dismiss:
153-
return {
154-
onDidClose(buttonAction)
153+
return { @MainActor in
154+
await onDidClose(buttonAction)
155155
}
156156
}
157157
}
@@ -166,6 +166,6 @@ struct HomeMessageButtonViewModel {
166166

167167
let title: String
168168
var actionStyle: ActionStyle = .default
169-
let action: () -> Void
169+
let action: () async -> Void
170170

171171
}

DuckDuckGo/HomeMessageViewModelBuilder.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct HomeMessageViewModelBuilder {
3434

3535
static func build(for remoteMessage: RemoteMessageModel,
3636
with privacyProDataReporter: PrivacyProDataReporting?,
37-
onDidClose: @escaping (HomeMessageViewModel.ButtonAction?) -> Void,
37+
onDidClose: @escaping (HomeMessageViewModel.ButtonAction?) async -> Void,
3838
onDidAppear: @escaping () -> Void) -> HomeMessageViewModel? {
3939
guard let content = remoteMessage.content else { return nil }
4040

DuckDuckGo/HomeMessageViewSectionRenderer.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,11 @@ class HomeMessageViewSectionRenderer: NSObject, HomeViewSectionRenderer {
184184
private func dismissHomeMessage(_ message: HomeMessage,
185185
at indexPath: IndexPath,
186186
in collectionView: UICollectionView) {
187-
homePageConfiguration.dismissHomeMessage(message)
188-
animateCellDismissal(at: indexPath, in: collectionView) {
189-
self.controller?.homeMessageRenderer(self, didDismissHomeMessage: message)
187+
Task { @MainActor in
188+
await homePageConfiguration.dismissHomeMessage(message)
189+
animateCellDismissal(at: indexPath, in: collectionView) {
190+
self.controller?.homeMessageRenderer(self, didDismissHomeMessage: message)
191+
}
190192
}
191193
}
192194

DuckDuckGo/HomePageConfiguration.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,12 @@ final class HomePageConfiguration: HomePageMessagesConfiguration {
8484
return .remoteMessage(remoteMessage: remoteMessageToPresent)
8585
}
8686

87-
func dismissHomeMessage(_ homeMessage: HomeMessage) {
87+
@MainActor
88+
func dismissHomeMessage(_ homeMessage: HomeMessage) async {
8889
switch homeMessage {
8990
case .remoteMessage(let remoteMessage):
9091
Logger.remoteMessaging.info("Home message dismissed: \(remoteMessage.id)")
91-
remoteMessagingClient.store.dismissRemoteMessage(withID: remoteMessage.id)
92+
await remoteMessagingClient.store.dismissRemoteMessage(withID: remoteMessage.id)
9293

9394
if let index = homeMessages.firstIndex(of: homeMessage) {
9495
homeMessages.remove(at: index)
@@ -113,7 +114,9 @@ final class HomePageConfiguration: HomePageMessagesConfiguration {
113114
Pixel.fire(pixel: .remoteMessageShownUnique,
114115
withAdditionalParameters: additionalParameters(for: remoteMessage.id))
115116
}
116-
remoteMessagingClient.store.updateRemoteMessage(withID: remoteMessage.id, asShown: true)
117+
Task {
118+
await remoteMessagingClient.store.updateRemoteMessage(withID: remoteMessage.id, asShown: true)
119+
}
117120
}
118121

119122
default:

DuckDuckGo/HomePageMessagesConfiguration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ protocol HomePageMessagesConfiguration {
2424

2525
func refresh()
2626

27-
func dismissHomeMessage(_ homeMessage: HomeMessage)
27+
func dismissHomeMessage(_ homeMessage: HomeMessage) async
2828
func didAppear(_ homeMessage: HomeMessage)
2929
}

DuckDuckGo/NewTabPageMessagesModel.swift

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ final class NewTabPageMessagesModel: ObservableObject {
5353
refresh()
5454
}
5555

56-
func dismissHomeMessage(_ homeMessage: HomeMessage) {
57-
homePageMessagesConfiguration.dismissHomeMessage(homeMessage)
56+
@MainActor
57+
func dismissHomeMessage(_ homeMessage: HomeMessage) async {
58+
await homePageMessagesConfiguration.dismissHomeMessage(homeMessage)
5859
updateHomeMessageViewModel()
5960
}
6061

@@ -77,7 +78,7 @@ final class NewTabPageMessagesModel: ObservableObject {
7778
switch message {
7879
case .placeholder:
7980
return HomeMessageViewModel(messageId: "", sendPixels: false, modelType: .small(titleText: "", descriptionText: "")) { [weak self] _ in
80-
self?.dismissHomeMessage(message)
81+
await self?.dismissHomeMessage(message)
8182
} onDidAppear: {
8283
// no-op
8384
} onAttachAdditionalParameters: { _, params in
@@ -89,15 +90,15 @@ final class NewTabPageMessagesModel: ObservableObject {
8990
// as a result of refreshing a config while the user was on a new tab page already.
9091
didAppear(message)
9192

92-
return HomeMessageViewModelBuilder.build(for: remoteMessage, with: privacyProDataReporter) { [weak self] action in
93+
return HomeMessageViewModelBuilder.build(for: remoteMessage, with: privacyProDataReporter) { @MainActor [weak self] action in
9394
guard let action,
9495
let self else { return }
9596

9697
switch action {
9798

9899
case .action(let isSharing):
99100
if !isSharing {
100-
self.dismissHomeMessage(message)
101+
await self.dismissHomeMessage(message)
101102
}
102103
if remoteMessage.isMetricsEnabled {
103104
pixelFiring.fire(.remoteMessageActionClicked,
@@ -106,7 +107,7 @@ final class NewTabPageMessagesModel: ObservableObject {
106107

107108
case .primaryAction(let isSharing):
108109
if !isSharing {
109-
self.dismissHomeMessage(message)
110+
await self.dismissHomeMessage(message)
110111
}
111112
if remoteMessage.isMetricsEnabled {
112113
pixelFiring.fire(.remoteMessagePrimaryActionClicked,
@@ -115,15 +116,15 @@ final class NewTabPageMessagesModel: ObservableObject {
115116

116117
case .secondaryAction(let isSharing):
117118
if !isSharing {
118-
self.dismissHomeMessage(message)
119+
await self.dismissHomeMessage(message)
119120
}
120121
if remoteMessage.isMetricsEnabled {
121122
pixelFiring.fire(.remoteMessageSecondaryActionClicked,
122123
withAdditionalParameters: self.additionalParameters(for: remoteMessage.id))
123124
}
124125

125126
case .close:
126-
self.dismissHomeMessage(message)
127+
await self.dismissHomeMessage(message)
127128
if remoteMessage.isMetricsEnabled {
128129
pixelFiring.fire(.remoteMessageDismissed,
129130
withAdditionalParameters: self.additionalParameters(for: remoteMessage.id))

0 commit comments

Comments
 (0)