Skip to content

Commit a9086b8

Browse files
committed
Fixed a crash for settings when iOS would access the same Firebase instance twice
1 parent 5b0c17b commit a9086b8

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,52 @@
11
package dev.gitlive.firebase.firestore.internal
22

33
import cocoapods.FirebaseFirestoreInternal.FIRFirestore
4+
import cocoapods.FirebaseFirestoreInternal.FIRMemoryCacheSettings
5+
import cocoapods.FirebaseFirestoreInternal.FIRPersistentCacheSettings
46
import dev.gitlive.firebase.firestore.FirebaseFirestoreSettings
7+
import dev.gitlive.firebase.firestore.LocalCacheSettings
8+
import dev.gitlive.firebase.firestore.MemoryGarbageCollectorSettings
59
import dev.gitlive.firebase.firestore.NativeFirebaseFirestore
610
import dev.gitlive.firebase.firestore.NativeTransaction
711
import dev.gitlive.firebase.firestore.await
812
import dev.gitlive.firebase.firestore.awaitResult
913
import dev.gitlive.firebase.firestore.firestoreSettings
1014
import dev.gitlive.firebase.firestore.memoryCacheSettings
15+
import dev.gitlive.firebase.firestore.memoryEagerGcSettings
16+
import dev.gitlive.firebase.firestore.persistentCacheSettings
1117
import kotlinx.coroutines.runBlocking
1218

1319
@Suppress("UNCHECKED_CAST")
1420
internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native: NativeFirebaseFirestore) {
1521

16-
actual var settings: FirebaseFirestoreSettings = firestoreSettings { }.also {
17-
native.settings = it.ios
18-
}
22+
actual var settings: FirebaseFirestoreSettings
23+
get() = firestoreSettings {
24+
host = native.settings.host
25+
sslEnabled = native.settings.sslEnabled
26+
dispatchQueue = native.settings.dispatchQueue
27+
@Suppress("SENSELESS_NULL_IN_WHEN")
28+
cacheSettings = when (val nativeCacheSettings = native.settings.cacheSettings) {
29+
is FIRPersistentCacheSettings -> persistentCacheSettings {
30+
// SizeBytes cannot be determined
31+
}
32+
is FIRMemoryCacheSettings -> memoryCacheSettings {
33+
// Garbage collection settings cannot be determined
34+
}
35+
null -> when {
36+
native.settings.persistenceEnabled -> LocalCacheSettings.Persistent(native.settings.cacheSizeBytes)
37+
native.settings.cacheSizeBytes == FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED -> LocalCacheSettings.Memory(
38+
MemoryGarbageCollectorSettings.Eager,
39+
)
40+
else -> LocalCacheSettings.Memory(
41+
MemoryGarbageCollectorSettings.LRUGC(
42+
native.settings.cacheSizeBytes,
43+
),
44+
)
45+
}
46+
else -> error("Unknown cache settings $nativeCacheSettings")
47+
}
48+
}
1949
set(value) {
20-
field = value
2150
native.settings = value.ios
2251
}
2352

0 commit comments

Comments
 (0)