diff --git a/Signal/src/util/Emoji/Emoji+Available.swift b/Signal/src/util/Emoji/Emoji+Available.swift index ad0b7817ff..6142c81d67 100644 --- a/Signal/src/util/Emoji/Emoji+Available.swift +++ b/Signal/src/util/Emoji/Emoji+Available.swift @@ -33,6 +33,12 @@ extension Emoji { } let availableMap = availableStore.allBoolValuesMap(transaction: transaction) + guard !availableMap.isEmpty else { + Logger.info("Re-building emoji availability cache. Cache could not be loaded.") + uncachedEmoji = Emoji.allCases + return + } + for emoji in Emoji.allCases { if let available = availableMap[emoji.rawValue] { availableCache[emoji] = available @@ -54,6 +60,7 @@ extension Emoji { if uncachedAvailability.count > 0 || iosVersionNeedsUpdate { SDSDatabaseStorage.shared.write { transaction in + availableStore.removeAll(transaction: transaction) for (emoji, available) in uncachedAvailability { availableStore.setBool(available, key: emoji.rawValue, transaction: transaction) } diff --git a/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift b/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift index 1a55827a1d..4dfbc890dc 100644 --- a/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift +++ b/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift @@ -410,9 +410,14 @@ public class SDSKeyValueStore: NSObject { WHERE \(SDSKeyValueStore.collectionColumn.columnName) == ? """ - return try! PairRecord.fetchAll(grdbTransaction.database, - sql: sql, - arguments: [collection]) + do { + return try PairRecord.fetchAll(grdbTransaction.database, + sql: sql, + arguments: [collection]) + } catch { + owsFailDebug("Error: \(error)") + return [] + } } }