From cbe0fd6f0e840639404143c784ad7ea18e8ab357 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 8 Oct 2019 10:48:12 +1100 Subject: [PATCH] Hook up caching on iOS --- SignalServiceKit/src/Loki/API/LokiAPI.swift | 13 ++++++++++++- SignalServiceKit/src/Loki/API/LokiStorageAPI.swift | 7 ------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/LokiAPI.swift b/SignalServiceKit/src/Loki/API/LokiAPI.swift index d7fa2c77f..e21b08152 100644 --- a/SignalServiceKit/src/Loki/API/LokiAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiAPI.swift @@ -126,7 +126,18 @@ public final class LokiAPI : NSObject { if timeSinceLastUpdate > deviceLinkUpdateInterval { storage.dbReadConnection.read { transaction in let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey - LokiStorageAPI.getDeviceLinks(associatedWith: masterHexEncodedPublicKey).done { _ in getDestinations() }.catch { seal.reject($0) } + LokiStorageAPI.getDeviceLinks(associatedWith: masterHexEncodedPublicKey).done { _ in + getDestinations() + lastDeviceLinkUpdate[hexEncodedPublicKey] = Date() + }.catch { error in + if case LokiDotNetAPI.Error.parsingFailed = error { + // If it's a parsing error then just cache + getDestinations() + lastDeviceLinkUpdate[hexEncodedPublicKey] = Date() + } else { + seal.reject(error) + } + } } } else { getDestinations() diff --git a/SignalServiceKit/src/Loki/API/LokiStorageAPI.swift b/SignalServiceKit/src/Loki/API/LokiStorageAPI.swift index dd7467545..08a9c4065 100644 --- a/SignalServiceKit/src/Loki/API/LokiStorageAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiStorageAPI.swift @@ -96,13 +96,6 @@ public final class LokiStorageAPI : LokiDotNetAPI { storage.setDeviceLinks(deviceLinks, in: transaction) } return deviceLinks - }.recover { _ -> Promise> in - // If we error out at any time then fallback to the device links we have in storage - var deviceLinks = Set() - storage.dbReadConnection.read { transaction in - deviceLinks = storage.getDeviceLinks(for: hexEncodedPublicKey, in: transaction) - } - return Promise.value(deviceLinks) } } }