Skip to content

Commit 9469065

Browse files
authored
Refactor/shared appstorage (#533)
* remove Logger package * add SharedKeys packge * remove userDefaultsClient package * update dependencies * update AppFeature * update ChatFeature * update IDProvider package * update NextRideFeature * update SettingsFeature * update SocialFeature * update keys * gardening * use StoreMigration namespace
1 parent 76b012e commit 9469065

File tree

26 files changed

+222
-319
lines changed

26 files changed

+222
-319
lines changed

CriticalMapsKit/Package.swift

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ let package = Package(
6363
"NextRideFeature",
6464
.pathMonitorClient,
6565
"SettingsFeature",
66+
.sharedKeys,
6667
"SocialFeature",
6768
.styleguide,
68-
.userDefaultsClient,
6969
.uiApplicationClient,
7070
.tca
7171
]
@@ -84,10 +84,10 @@ let package = Package(
8484
.helpers,
8585
.idProvider,
8686
.l10n,
87+
.sharedKeys,
8788
.sharedModels,
8889
.styleguide,
89-
.swiftUIHelpers,
90-
.userDefaultsClient
90+
.swiftUIHelpers
9191
]
9292
),
9393
.target(
@@ -114,8 +114,8 @@ let package = Package(
114114
name: "IDProvider",
115115
dependencies: [
116116
.helpers,
117-
.tca,
118-
.userDefaultsClient
117+
.sharedKeys,
118+
.tca
119119
]
120120
),
121121
.target(
@@ -154,9 +154,9 @@ let package = Package(
154154
.apiClient,
155155
.helpers,
156156
.l10n,
157+
.sharedKeys,
157158
.sharedModels,
158159
.styleguide,
159-
.userDefaultsClient,
160160
.composableCoreLocation,
161161
.tca
162162
]
@@ -175,6 +175,7 @@ let package = Package(
175175
.l10n,
176176
.helpers,
177177
"MapFeature",
178+
.sharedKeys,
178179
.sharedModels,
179180
.styleguide,
180181
.swiftUIHelpers,
@@ -184,6 +185,13 @@ let package = Package(
184185
],
185186
resources: [.process("_Resources/")]
186187
),
188+
.target(
189+
name: "SharedKeys",
190+
dependencies: [
191+
.sharedModels,
192+
.tca
193+
]
194+
),
187195
.target(
188196
name: "SharedModels",
189197
dependencies: [
@@ -197,7 +205,6 @@ let package = Package(
197205
"ChatFeature",
198206
.l10n,
199207
"MastodonFeedFeature",
200-
.userDefaultsClient,
201208
.tca
202209
]
203210
),
@@ -227,14 +234,6 @@ let package = Package(
227234
dependencies: [
228235
.tca
229236
]
230-
),
231-
.target(
232-
name: "UserDefaultsClient",
233-
dependencies: [
234-
.helpers,
235-
.sharedModels,
236-
.tca
237-
]
238237
)
239238
]
240239
)
@@ -260,7 +259,6 @@ package.targets.append(contentsOf: [
260259
"ChatFeature",
261260
.testHelper,
262261
.sharedModels,
263-
.userDefaultsClient,
264262
.tca
265263
],
266264
exclude: [
@@ -271,7 +269,7 @@ package.targets.append(contentsOf: [
271269
name: "HelperTests",
272270
dependencies: [
273271
.helpers,
274-
.userDefaultsClient
272+
.sharedModels
275273
]
276274
),
277275
.testTarget(
@@ -293,7 +291,6 @@ package.targets.append(contentsOf: [
293291
name: "NextRideFeatureTests",
294292
dependencies: [
295293
.helpers,
296-
.userDefaultsClient,
297294
"NextRideFeature",
298295
.tca
299296
]
@@ -322,7 +319,6 @@ package.targets.append(contentsOf: [
322319
.l10n,
323320
"SettingsFeature",
324321
.testHelper,
325-
.userDefaultsClient,
326322
.tca
327323
],
328324
exclude: ["__Snapshots__"]
@@ -348,12 +344,12 @@ extension Target.Dependency {
348344
static let idProvider = byName(name: "IDProvider")
349345
static let l10n = byName(name: "L10n")
350346
static let pathMonitorClient = byName(name: "PathMonitorClient")
347+
static let sharedKeys = byName(name: "SharedKeys")
351348
static let sharedModels = byName(name: "SharedModels")
352349
static let styleguide = byName(name: "Styleguide")
353350
static let swiftUIHelpers = byName(name: "SwiftUIHelpers")
354351
static let testHelper = byName(name: "TestHelper")
355352
static let uiApplicationClient = byName(name: "UIApplicationClient")
356-
static let userDefaultsClient = byName(name: "UserDefaultsClient")
357353

358354
// MARK: - External
359355

CriticalMapsKit/Sources/AppFeature/AppFeature.swift

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import MastodonFeedFeature
1111
import NextRideFeature
1212
import os
1313
import SettingsFeature
14+
import SharedKeys
1415
import SharedModels
1516
import SocialFeature
1617
import struct SwiftUI.PresentationDetent
1718
import UIApplicationClient
18-
import UserDefaultsClient
1919

2020
@Reducer
2121
public struct AppFeature: Sendable { // swiftlint:disable:this type_body_length
@@ -126,7 +126,6 @@ public struct AppFeature: Sendable { // swiftlint:disable:this type_body_length
126126
@Dependency(\.apiService) var apiService
127127
@Dependency(\.uuid) var uuid
128128
@Dependency(\.date) var date
129-
@Dependency(\.userDefaultsClient) var userDefaultsClient
130129
@Dependency(\.nextRideService) var nextRideService
131130
@Dependency(\.idProvider) var idProvider
132131
@Dependency(\.mainQueue) var mainQueue
@@ -160,39 +159,40 @@ public struct AppFeature: Sendable { // swiftlint:disable:this type_body_length
160159
)
161160

162161
case .onAppear:
163-
var effects: [Effect<Action>] = [
164-
.send(.map(.onAppear)),
165-
.send(.requestTimer(.startTimer)),
166-
.run { _ in
167-
await userDefaultsClient.setSessionID(uuid().uuidString)
168-
},
169-
.run { [style = state.appearanceSettings.colorScheme.userInterfaceStyle] _ in
170-
await uiApplicationClient.setUserInterfaceStyle(style)
171-
},
172-
.run { send in
173-
await withThrowingTaskGroup(of: Void.self) { group in
174-
group.addTask {
175-
await send(.fetchChatMessages)
176-
}
177-
group.addTask {
178-
await send(.fetchLocations)
162+
@Shared(.sessionID) var sessionID
163+
$sessionID.withLock { $0 = uuid().uuidString }
164+
165+
StorageMigration.migratePrivacyZones()
166+
167+
return .merge(
168+
[
169+
.send(.map(.onAppear)),
170+
.send(.requestTimer(.startTimer)),
171+
.run { [style = state.appearanceSettings.colorScheme.userInterfaceStyle] _ in
172+
await uiApplicationClient.setUserInterfaceStyle(style)
173+
},
174+
.run { send in
175+
await withThrowingTaskGroup(of: Void.self) { group in
176+
group.addTask {
177+
await send(.fetchChatMessages)
178+
}
179+
group.addTask {
180+
await send(.fetchLocations)
181+
}
179182
}
180-
}
181-
},
182-
.run { _ in
183-
await feedbackGenerator.prepare()
184-
}
185-
]
186-
if !userDefaultsClient.didShowObservationModePrompt {
187-
effects.append(
183+
},
184+
.run { _ in
185+
await feedbackGenerator.prepare()
186+
},
188187
.run { send in
189-
try? await clock.sleep(for: .seconds(3))
190-
await send(.presentObservationModeAlert)
188+
@Shared(.didShowObservationModePrompt) var didShowObservationModePrompt
189+
if !didShowObservationModePrompt {
190+
try? await clock.sleep(for: .seconds(3))
191+
await send(.presentObservationModeAlert)
192+
}
191193
}
192-
)
193-
}
194-
195-
return .merge(effects)
194+
]
195+
)
196196

197197
case .onDisappear:
198198
return .none
@@ -225,9 +225,10 @@ public struct AppFeature: Sendable { // swiftlint:disable:this type_body_length
225225
if case .social = state.destination {
226226
let cachedMessages = messages.sorted(by: \.timestamp)
227227

228+
@Shared(.chatReadTimeInterval) var chatReadTimeInterval
228229
let unreadMessagesCount = UInt(
229230
cachedMessages
230-
.count(where: { $0.timestamp > userDefaultsClient.chatReadTimeInterval })
231+
.count(where: { $0.timestamp > chatReadTimeInterval })
231232
)
232233
state.chatMessageBadgeCount = unreadMessagesCount
233234
}
@@ -387,9 +388,9 @@ public struct AppFeature: Sendable { // swiftlint:disable:this type_body_length
387388
message: { TextState(L10n.AppCore.ViewingModeAlert.message) }
388389
)
389390
)
390-
return .run { _ in
391-
await userDefaultsClient.setDidShowObservationModePrompt(true)
392-
}
391+
@Shared(.didShowObservationModePrompt) var didShowObservationModePrompt
392+
$didShowObservationModePrompt.withLock { $0 = true }
393+
return .none
393394

394395
case let .destination(.presented(.alert(alertAction))):
395396
switch alertAction {

CriticalMapsKit/Sources/ChatFeature/ChatFeature.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import Helpers
66
import IDProvider
77
import L10n
88
import os
9+
import SharedKeys
910
import SharedModels
10-
import UserDefaultsClient
1111

1212
@Reducer
1313
public struct ChatFeature: Sendable {
@@ -65,7 +65,6 @@ public struct ChatFeature: Sendable {
6565
@Dependency(\.idProvider) var idProvider
6666
@Dependency(\.mainQueue) var mainQueue
6767
@Dependency(\.uuid) var uuid
68-
@Dependency(\.userDefaultsClient) var userDefaultsClient
6968

7069
public var body: some Reducer<State, Action> {
7170
Scope(state: \.chatInputState, action: \.chatInput) {
@@ -95,9 +94,11 @@ public struct ChatFeature: Sendable {
9594

9695
case let .fetchChatMessagesResponse(.success(messages)):
9796
state.chatMessages = .results(messages)
98-
return .run { _ in
99-
await userDefaultsClient.setChatReadTimeInterval(date().timeIntervalSince1970)
100-
}
97+
98+
@Shared(.chatReadTimeInterval) var chatReadTimeInterval
99+
$chatReadTimeInterval.withLock { $0 = date().timeIntervalSince1970 }
100+
101+
return .none
101102

102103
case let .fetchChatMessagesResponse(.failure(error)):
103104
state.chatMessages = .error(

CriticalMapsKit/Sources/IDProvider/IDProvider+LiveKey.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import ComposableArchitecture
22
import Foundation
3+
import SharedKeys
34
import UIKit.UIDevice
4-
import UserDefaultsClient
55

66
extension IDProvider: DependencyKey {
77
public static var liveValue: IDProvider {
8-
@Dependency(\.userDefaultsClient) var defaultsClient
98
@Dependency(\.date) var date
109
@Dependency(\.uuid) var uuid
10+
@Shared(.sessionID) var sessionID
1111

12-
let id = defaultsClient.getSessionID ?? uuid().uuidString
12+
let id = sessionID ?? uuid().uuidString
1313

1414
return Self(
1515
id: {

CriticalMapsKit/Sources/Logger/Logger.swift

Lines changed: 0 additions & 4 deletions
This file was deleted.

CriticalMapsKit/Sources/NextRideFeature/NextRideFeature.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ComposableArchitecture
33
import ComposableCoreLocation
44
import Foundation
55
import os
6+
import SharedKeys
67
import SharedModels
78

89
// MARK: State
@@ -45,7 +46,7 @@ public struct NextRideFeature: Sendable {
4546
switch action {
4647
case let .getNextRide(coordinate):
4748
guard state.rideEventSettings.isEnabled else {
48-
Logger.reducer.debug("NextRide featue is disabled")
49+
Logger.reducer.debug("NextRide feature is disabled")
4950
return .none
5051
}
5152

CriticalMapsKit/Sources/SettingsFeature/AppearanceSettings/AppearanceSettingsFeature.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ComposableArchitecture
22
import FeedbackGeneratorClient
33
import Helpers
4+
import SharedKeys
45
import SharedModels
56
import UIApplicationClient
67
import UIKit

CriticalMapsKit/Sources/SettingsFeature/PrivacyZoneFeature/CreateZoneFeature.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import ComposableArchitecture
22
import L10n
3+
import SharedKeys
34
import SharedModels
45
import Styleguide
56
import SwiftUI

CriticalMapsKit/Sources/SettingsFeature/PrivacyZoneFeature/PrivacyStatusTile.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import ComposableArchitecture
22
import L10n
3+
import SharedKeys
34
import SharedModels
45
import Styleguide
56
import SwiftUI

CriticalMapsKit/Sources/SettingsFeature/PrivacyZoneFeature/PrivacyZoneFeature.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import ComposableArchitecture
22
import CoreLocation
33
import L10n
44
import MapKit
5+
import SharedKeys
56
import SharedModels
67
import Styleguide
78
import SwiftUI

0 commit comments

Comments
 (0)