Handle emoji availability deserialization failures.

This commit is contained in:
Matthew Chen 2020-11-14 07:58:13 -03:00
parent a2f0ea6ce7
commit 01271f60be
2 changed files with 15 additions and 3 deletions

View File

@ -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)
}

View File

@ -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 []
}
}
}