Skip to content

Commit 6689c9c

Browse files
Convert data connect to a weak reference in cache
1 parent b9265dc commit 6689c9c

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

Sources/Cache/Cache.swift

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let GlobalIDKey: String = "_id"
2121
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
2222
actor Cache {
2323
let config: CacheSettings
24-
let dataConnect: DataConnect
24+
weak var dataConnect: DataConnect?
2525

2626
private var cacheProvider: CacheProvider?
2727

@@ -42,6 +42,11 @@ actor Cache {
4242

4343
private func initializeCacheProvider() {
4444
let identifier = contructCacheIdentifier()
45+
46+
guard identifier.isEmpty == false else {
47+
DataConnectLogger.error("CacheIdentifier is empty. Caching is disabled")
48+
return
49+
}
4550

4651
// Create a cacheProvider if -
4752
// we don't have an existing cacheProvider
@@ -63,13 +68,23 @@ actor Cache {
6368
}
6469

6570
private func setupChangeListeners() {
71+
guard let dataConnect else {
72+
DataConnectLogger.error("Unable to setup auth change listeners since DataConnect is nil")
73+
return
74+
}
75+
6676
authChangeListenerProtocol = Auth.auth(app: dataConnect.app).addStateDidChangeListener { _, _ in
6777
self.initializeCacheProvider()
6878
}
6979
}
7080

7181
// Create an identifier for the cache that the Provider will use for cache scoping
7282
private func contructCacheIdentifier() -> String {
83+
guard let dataConnect else {
84+
DataConnectLogger.error("Unable to construct a cache identifier since DataConnect is nil")
85+
return ""
86+
}
87+
7388
let identifier =
7489
"\(config.storage)-\(dataConnect.app.options.projectID!)-\(dataConnect.app.name)-\(dataConnect.connectorConfig.serviceId)-\(dataConnect.connectorConfig.connector)-\(dataConnect.connectorConfig.location)-\(Auth.auth(app: dataConnect.app).currentUser?.uid ?? "anon")-\(dataConnect.settings.host)"
7590
let encoded = identifier.sha256
@@ -139,16 +154,18 @@ actor Cache {
139154
)
140155
)
141156

142-
for refId in impactedRefs {
143-
guard let q = dataConnect.queryRef(for: refId) as? (any QueryRefInternal) else {
144-
continue
145-
}
146-
Task {
147-
do {
148-
try await q.publishCacheResultsToSubscribers(allowStale: true)
149-
} catch {
150-
DataConnectLogger
151-
.warning("Error republishing cached results for impacted queryrefs \(error))")
157+
if let dataConnect {
158+
for refId in impactedRefs {
159+
guard let q = dataConnect.queryRef(for: refId) as? (any QueryRefInternal) else {
160+
continue
161+
}
162+
Task {
163+
do {
164+
try await q.publishCacheResultsToSubscribers(allowStale: true)
165+
} catch {
166+
DataConnectLogger
167+
.warning("Error republishing cached results for impacted queryrefs \(error))")
168+
}
152169
}
153170
}
154171
}

0 commit comments

Comments
 (0)