From 7de8fbf66a2b794248a528aa9b7b306742e7a9a7 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 4 Aug 2020 10:00:08 +1000 Subject: [PATCH] Clean --- Signal/src/Loki/View Controllers/HomeVC.swift | 2 +- .../Deprecated/FileServerAPI+Deprecated.swift | 148 ++++++++++++++++++ SignalServiceKit/src/Loki/API/DotNetAPI.swift | 25 ++- .../src/Loki/API/FileServerAPI.swift | 142 ----------------- .../API/Onion Requests/OnionRequestAPI.swift | 6 +- .../Loki/API/Open Groups/PublicChatAPI.swift | 8 +- .../API/Open Groups/PublicChatPoller.swift | 4 +- SignalServiceKit/src/Loki/API/SnodeAPI.swift | 2 +- .../Deprecated/LokiDatabaseUtilities.swift | 15 +- .../Deprecated/OWSPrimaryStorage+Loki.swift | 2 +- .../Protocol/Meta/SessionMetaProtocol.swift | 49 +++--- .../Multi Device/DeviceLink.swift | 0 .../Multi Device/DeviceLinkIndex.swift | 0 .../Multi Device/DeviceLinkingSession.swift | 0 .../DeviceLinkingSessionDelegate.swift | 0 .../Multi Device/DeviceLinkingUtilities.swift | 0 .../Multi Device/LKDeviceLinkMessage.h | 0 .../Multi Device/LKDeviceLinkMessage.m | 0 .../Multi Device/LKUnlinkDeviceMessage.h | 0 .../Multi Device/LKUnlinkDeviceMessage.m | 0 .../Multi Device/MultiDeviceProtocol.swift | 0 .../Sync Messages/ClosedGroupParser.swift | 0 .../Sync Messages/ContactParser.swift | 0 .../Sync Messages/LKSyncOpenGroupsMessage.h | 0 .../Sync Messages/LKSyncOpenGroupsMessage.m | 0 .../Sync Messages/SyncMessagesProtocol.swift | 0 .../LokiPushNotificationManager.swift | 8 +- .../src/Messages/OWSMessageManager.m | 4 +- .../src/Messages/OWSMessageSender.m | 2 +- .../src/Util/TypingIndicators.swift | 2 +- 30 files changed, 215 insertions(+), 204 deletions(-) create mode 100644 SignalServiceKit/src/Loki/API/Deprecated/FileServerAPI+Deprecated.swift rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/DeviceLink.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/DeviceLinkIndex.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/DeviceLinkingSession.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/DeviceLinkingSessionDelegate.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/DeviceLinkingUtilities.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/LKDeviceLinkMessage.h (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/LKDeviceLinkMessage.m (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/LKUnlinkDeviceMessage.h (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/LKUnlinkDeviceMessage.m (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Multi Device/MultiDeviceProtocol.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Sync Messages/ClosedGroupParser.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Sync Messages/ContactParser.swift (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Sync Messages/LKSyncOpenGroupsMessage.h (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Sync Messages/LKSyncOpenGroupsMessage.m (100%) rename SignalServiceKit/src/Loki/Protocol/{ => Shelved}/Sync Messages/SyncMessagesProtocol.swift (100%) diff --git a/Signal/src/Loki/View Controllers/HomeVC.swift b/Signal/src/Loki/View Controllers/HomeVC.swift index ee484490c..60cccda12 100644 --- a/Signal/src/Loki/View Controllers/HomeVC.swift +++ b/Signal/src/Loki/View Controllers/HomeVC.swift @@ -135,7 +135,7 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, UIScrol newConversationButtonSet.center(.horizontal, in: view) newConversationButtonSet.pin(.bottom, to: .bottom, of: view, withInset: -Values.newConversationButtonBottomOffset) // Negative due to how the constraint is set up // Set up previewing - if (traitCollection.forceTouchCapability == .available) { + if traitCollection.forceTouchCapability == .available { registerForPreviewing(with: self, sourceView: tableView) } // Listen for notifications diff --git a/SignalServiceKit/src/Loki/API/Deprecated/FileServerAPI+Deprecated.swift b/SignalServiceKit/src/Loki/API/Deprecated/FileServerAPI+Deprecated.swift new file mode 100644 index 000000000..1fd608a6f --- /dev/null +++ b/SignalServiceKit/src/Loki/API/Deprecated/FileServerAPI+Deprecated.swift @@ -0,0 +1,148 @@ +import PromiseKit + +public extension FileServerAPI { + + /// Gets the device links associated with the given hex encoded public key from the + /// server and stores and returns the valid ones. + /// + /// - Note: Deprecated. + public static func getDeviceLinks(associatedWith hexEncodedPublicKey: String) -> Promise> { + return getDeviceLinks(associatedWith: [ hexEncodedPublicKey ]) + } + + /// Gets the device links associated with the given hex encoded public keys from the + /// server and stores and returns the valid ones. + /// + /// - Note: Deprecated. + public static func getDeviceLinks(associatedWith hexEncodedPublicKeys: Set) -> Promise> { + return Promise.value([]) + /* + let hexEncodedPublicKeysDescription = "[ \(hexEncodedPublicKeys.joined(separator: ", ")) ]" + print("[Loki] Getting device links for: \(hexEncodedPublicKeysDescription).") + return getAuthToken(for: server).then2 { token -> Promise> in + let queryParameters = "ids=\(hexEncodedPublicKeys.map { "@\($0)" }.joined(separator: ","))&include_user_annotations=1" + let url = URL(string: "\(server)/users?\(queryParameters)")! + let request = TSRequest(url: url) + return OnionRequestAPI.sendOnionRequest(request, to: server, using: fileServerPublicKey).map2 { rawResponse -> Set in + guard let data = rawResponse["data"] as? [JSON] else { + print("[Loki] Couldn't parse device links for users: \(hexEncodedPublicKeys) from: \(rawResponse).") + throw DotNetAPIError.parsingFailed + } + return Set(data.flatMap { data -> [DeviceLink] in + guard let annotations = data["annotations"] as? [JSON], !annotations.isEmpty else { return [] } + guard let annotation = annotations.first(where: { $0["type"] as? String == deviceLinkType }), + let value = annotation["value"] as? JSON, let rawDeviceLinks = value["authorisations"] as? [JSON], + let hexEncodedPublicKey = data["username"] as? String else { + print("[Loki] Couldn't parse device links from: \(rawResponse).") + return [] + } + return rawDeviceLinks.compactMap { rawDeviceLink in + guard let masterPublicKey = rawDeviceLink["primaryDevicePubKey"] as? String, let slavePublicKey = rawDeviceLink["secondaryDevicePubKey"] as? String, + let base64EncodedSlaveSignature = rawDeviceLink["requestSignature"] as? String else { + print("[Loki] Couldn't parse device link for user: \(hexEncodedPublicKey) from: \(rawResponse).") + return nil + } + let masterSignature: Data? + if let base64EncodedMasterSignature = rawDeviceLink["grantSignature"] as? String { + masterSignature = Data(base64Encoded: base64EncodedMasterSignature) + } else { + masterSignature = nil + } + let slaveSignature = Data(base64Encoded: base64EncodedSlaveSignature) + let master = DeviceLink.Device(publicKey: masterPublicKey, signature: masterSignature) + let slave = DeviceLink.Device(publicKey: slavePublicKey, signature: slaveSignature) + let deviceLink = DeviceLink(between: master, and: slave) + if let masterSignature = masterSignature { + guard DeviceLinkingUtilities.hasValidMasterSignature(deviceLink) else { + print("[Loki] Received a device link with an invalid master signature.") + return nil + } + } + guard DeviceLinkingUtilities.hasValidSlaveSignature(deviceLink) else { + print("[Loki] Received a device link with an invalid slave signature.") + return nil + } + return deviceLink + } + }) + }.map2 { deviceLinks in + storage.setDeviceLinks(deviceLinks) + return deviceLinks + } + }.handlingInvalidAuthTokenIfNeeded(for: server) + */ + } + + /// - Note: Deprecated. + public static func setDeviceLinks(_ deviceLinks: Set) -> Promise { + return Promise.value(()) + /* + print("[Loki] Updating device links.") + return getAuthToken(for: server).then2 { token -> Promise in + let isMaster = deviceLinks.contains { $0.master.publicKey == getUserHexEncodedPublicKey() } + let deviceLinksAsJSON = deviceLinks.map { $0.toJSON() } + let value = !deviceLinksAsJSON.isEmpty ? [ "isPrimary" : isMaster ? 1 : 0, "authorisations" : deviceLinksAsJSON ] : nil + let annotation: JSON = [ "type" : deviceLinkType, "value" : value ] + let parameters: JSON = [ "annotations" : [ annotation ] ] + let url = URL(string: "\(server)/users/me")! + let request = TSRequest(url: url, method: "PATCH", parameters: parameters) + request.allHTTPHeaderFields = [ "Content-Type" : "application/json", "Authorization" : "Bearer \(token)" ] + return attempt(maxRetryCount: 8, recoveringOn: SnodeAPI.workQueue) { + OnionRequestAPI.sendOnionRequest(request, to: server, using: fileServerPublicKey).map2 { _ in } + }.handlingInvalidAuthTokenIfNeeded(for: server).recover2 { error in + print("[Loki] Couldn't update device links due to error: \(error).") + throw error + } + } + */ + } + + /// Adds the given device link to the user's device mapping on the server. + /// + /// - Note: Deprecated. + public static func addDeviceLink(_ deviceLink: DeviceLink) -> Promise { + return Promise.value(()) + /* + var deviceLinks: Set = [] + storage.dbReadConnection.read { transaction in + deviceLinks = storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction) + } + deviceLinks.insert(deviceLink) + return setDeviceLinks(deviceLinks).map2 { _ in + storage.addDeviceLink(deviceLink) + } + */ + } + + /// Removes the given device link from the user's device mapping on the server. + /// + /// - Note: Deprecated. + public static func removeDeviceLink(_ deviceLink: DeviceLink) -> Promise { + return Promise.value(()) + /* + var deviceLinks: Set = [] + storage.dbReadConnection.read { transaction in + deviceLinks = storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction) + } + deviceLinks.remove(deviceLink) + return setDeviceLinks(deviceLinks).map2 { _ in + storage.removeDeviceLink(deviceLink) + } + */ + } +} + +@objc public extension FileServerAPI { + + /// - Note: Deprecated. + @objc(getDeviceLinksAssociatedWithHexEncodedPublicKey:) + public static func objc_getDeviceLinks(associatedWith hexEncodedPublicKey: String) -> AnyPromise { + return AnyPromise.from(getDeviceLinks(associatedWith: hexEncodedPublicKey)) + } + + /// - Note: Deprecated. + @objc(getDeviceLinksAssociatedWithHexEncodedPublicKeys:) + public static func objc_getDeviceLinks(associatedWith hexEncodedPublicKeys: Set) -> AnyPromise { + return AnyPromise.from(getDeviceLinks(associatedWith: hexEncodedPublicKeys)) + } +} diff --git a/SignalServiceKit/src/Loki/API/DotNetAPI.swift b/SignalServiceKit/src/Loki/API/DotNetAPI.swift index 4671a7b05..696a35fe7 100644 --- a/SignalServiceKit/src/Loki/API/DotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/DotNetAPI.swift @@ -4,7 +4,6 @@ import SessionMetadataKit /// Base class for `FileServerAPI` and `PublicChatAPI`. public class DotNetAPI : NSObject { - internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() } internal static var userKeyPair: ECKeyPair { OWSIdentityManager.shared().identityKeyPair()! } // MARK: Settings @@ -41,10 +40,8 @@ public class DotNetAPI : NSObject { private static func getAuthTokenFromDatabase(for server: String) -> String? { var result: String? = nil - storage.dbReadConnection.read { transaction in - if transaction.hasObject(forKey: server, inCollection: authTokenCollection) { - result = transaction.object(forKey: server, inCollection: authTokenCollection) as? String - } + Storage.read { transaction in + result = transaction.object(forKey: server, inCollection: authTokenCollection) as? String } return result } @@ -53,7 +50,7 @@ public class DotNetAPI : NSObject { transaction.setObject(newValue, forKey: server, inCollection: authTokenCollection) } - public static func clearAuthToken(for server: String) { + public static func removeAuthToken(for server: String) { try! Storage.writeSync { transaction in transaction.removeObject(forKey: server, inCollection: authTokenCollection) } @@ -68,12 +65,12 @@ public class DotNetAPI : NSObject { let queryParameters = "pubKey=\(getUserHexEncodedPublicKey())" let url = URL(string: "\(server)/loki/v1/get_challenge?\(queryParameters)")! let request = TSRequest(url: url) - let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise { $0.fulfill(FileServerAPI.fileServerPublicKey) } + let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise.value(FileServerAPI.fileServerPublicKey) : PublicChatAPI.getOpenGroupServerPublicKey(for: server) return serverPublicKeyPromise.then2 { serverPublicKey in OnionRequestAPI.sendOnionRequest(request, to: server, using: serverPublicKey) - }.map2 { rawResponse in - guard let json = rawResponse as? JSON, let base64EncodedChallenge = json["cipherText64"] as? String, let base64EncodedServerPublicKey = json["serverPubKey64"] as? String, + }.map2 { json in + guard let base64EncodedChallenge = json["cipherText64"] as? String, let base64EncodedServerPublicKey = json["serverPubKey64"] as? String, let challenge = Data(base64Encoded: base64EncodedChallenge), var serverPublicKey = Data(base64Encoded: base64EncodedServerPublicKey) else { throw DotNetAPIError.parsingFailed } @@ -96,7 +93,7 @@ public class DotNetAPI : NSObject { let url = URL(string: "\(server)/loki/v1/submit_challenge")! let parameters = [ "pubKey" : getUserHexEncodedPublicKey(), "token" : token ] let request = TSRequest(url: url, method: "POST", parameters: parameters) - let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise { $0.fulfill(FileServerAPI.fileServerPublicKey) } + let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise.value(FileServerAPI.fileServerPublicKey) : PublicChatAPI.getOpenGroupServerPublicKey(for: server) return serverPublicKeyPromise.then2 { serverPublicKey in OnionRequestAPI.sendOnionRequest(request, to: server, using: serverPublicKey) @@ -134,7 +131,7 @@ public class DotNetAPI : NSObject { data = unencryptedAttachmentData } // Check the file size if needed - print("[Loki] File size: \(data.count)") + print("[Loki] File size: \(data.count) bytes.") if Double(data.count) > Double(FileServerAPI.maxFileSize) / FileServerAPI.fileSizeORMultiplier { return seal.reject(DotNetAPIError.maxFileSizeExceeded) } @@ -144,7 +141,7 @@ public class DotNetAPI : NSObject { var error: NSError? var request = AFHTTPRequestSerializer().multipartFormRequest(withMethod: "POST", urlString: url, parameters: parameters, constructingBodyWith: { formData in let uuid = UUID().uuidString - print("[Loki] File UUID: \(uuid)") + print("[Loki] File UUID: \(uuid).") formData.appendPart(withFileData: data, name: "content", fileName: uuid, mimeType: "application/binary") }, error: &error) request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization") @@ -153,7 +150,7 @@ public class DotNetAPI : NSObject { return seal.reject(error) } // Send the request - let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise { $0.fulfill(FileServerAPI.fileServerPublicKey) } + let serverPublicKeyPromise = (server == FileServerAPI.server) ? Promise.value(FileServerAPI.fileServerPublicKey) : PublicChatAPI.getOpenGroupServerPublicKey(for: server) attachment.isUploaded = false attachment.save() @@ -198,7 +195,7 @@ internal extension Promise { return recover2 { error -> Promise in if case HTTP.Error.httpRequestFailed(let statusCode, _) = error, statusCode == 401 || statusCode == 403 { print("[Loki] Auth token for: \(server) expired; dropping it.") - DotNetAPI.clearAuthToken(for: server) + DotNetAPI.removeAuthToken(for: server) } throw error } diff --git a/SignalServiceKit/src/Loki/API/FileServerAPI.swift b/SignalServiceKit/src/Loki/API/FileServerAPI.swift index 6f9cdbfd9..2b95c8814 100644 --- a/SignalServiceKit/src/Loki/API/FileServerAPI.swift +++ b/SignalServiceKit/src/Loki/API/FileServerAPI.swift @@ -70,146 +70,4 @@ public final class FileServerAPI : DotNetAPI { return hexEncodedPrefixedPublicKey.removing05PrefixIfNeeded() } } - - // MARK: Deprecated - /// - Note: Deprecated. - @objc(getDeviceLinksAssociatedWithHexEncodedPublicKey:) - public static func objc_getDeviceLinks(associatedWith hexEncodedPublicKey: String) -> AnyPromise { - return AnyPromise.from(getDeviceLinks(associatedWith: hexEncodedPublicKey)) - } - - /// Gets the device links associated with the given hex encoded public key from the - /// server and stores and returns the valid ones. - /// - /// - Note: Deprecated. - public static func getDeviceLinks(associatedWith hexEncodedPublicKey: String) -> Promise> { - return getDeviceLinks(associatedWith: [ hexEncodedPublicKey ]) - } - - /// - Note: Deprecated. - @objc(getDeviceLinksAssociatedWithHexEncodedPublicKeys:) - public static func objc_getDeviceLinks(associatedWith hexEncodedPublicKeys: Set) -> AnyPromise { - return AnyPromise.from(getDeviceLinks(associatedWith: hexEncodedPublicKeys)) - } - - /// Gets the device links associated with the given hex encoded public keys from the - /// server and stores and returns the valid ones. - /// - /// - Note: Deprecated. - public static func getDeviceLinks(associatedWith hexEncodedPublicKeys: Set) -> Promise> { - return Promise { $0.fulfill([]) } - /* - let hexEncodedPublicKeysDescription = "[ \(hexEncodedPublicKeys.joined(separator: ", ")) ]" - print("[Loki] Getting device links for: \(hexEncodedPublicKeysDescription).") - return getAuthToken(for: server).then2 { token -> Promise> in - let queryParameters = "ids=\(hexEncodedPublicKeys.map { "@\($0)" }.joined(separator: ","))&include_user_annotations=1" - let url = URL(string: "\(server)/users?\(queryParameters)")! - let request = TSRequest(url: url) - return OnionRequestAPI.sendOnionRequest(request, to: server, using: fileServerPublicKey).map2 { rawResponse -> Set in - guard let data = rawResponse["data"] as? [JSON] else { - print("[Loki] Couldn't parse device links for users: \(hexEncodedPublicKeys) from: \(rawResponse).") - throw DotNetAPIError.parsingFailed - } - return Set(data.flatMap { data -> [DeviceLink] in - guard let annotations = data["annotations"] as? [JSON], !annotations.isEmpty else { return [] } - guard let annotation = annotations.first(where: { $0["type"] as? String == deviceLinkType }), - let value = annotation["value"] as? JSON, let rawDeviceLinks = value["authorisations"] as? [JSON], - let hexEncodedPublicKey = data["username"] as? String else { - print("[Loki] Couldn't parse device links from: \(rawResponse).") - return [] - } - return rawDeviceLinks.compactMap { rawDeviceLink in - guard let masterPublicKey = rawDeviceLink["primaryDevicePubKey"] as? String, let slavePublicKey = rawDeviceLink["secondaryDevicePubKey"] as? String, - let base64EncodedSlaveSignature = rawDeviceLink["requestSignature"] as? String else { - print("[Loki] Couldn't parse device link for user: \(hexEncodedPublicKey) from: \(rawResponse).") - return nil - } - let masterSignature: Data? - if let base64EncodedMasterSignature = rawDeviceLink["grantSignature"] as? String { - masterSignature = Data(base64Encoded: base64EncodedMasterSignature) - } else { - masterSignature = nil - } - let slaveSignature = Data(base64Encoded: base64EncodedSlaveSignature) - let master = DeviceLink.Device(publicKey: masterPublicKey, signature: masterSignature) - let slave = DeviceLink.Device(publicKey: slavePublicKey, signature: slaveSignature) - let deviceLink = DeviceLink(between: master, and: slave) - if let masterSignature = masterSignature { - guard DeviceLinkingUtilities.hasValidMasterSignature(deviceLink) else { - print("[Loki] Received a device link with an invalid master signature.") - return nil - } - } - guard DeviceLinkingUtilities.hasValidSlaveSignature(deviceLink) else { - print("[Loki] Received a device link with an invalid slave signature.") - return nil - } - return deviceLink - } - }) - }.map2 { deviceLinks in - storage.setDeviceLinks(deviceLinks) - return deviceLinks - } - }.handlingInvalidAuthTokenIfNeeded(for: server) - */ - } - - /// - Note: Deprecated. - public static func setDeviceLinks(_ deviceLinks: Set) -> Promise { - return Promise { $0.fulfill(()) } - /* - print("[Loki] Updating device links.") - return getAuthToken(for: server).then2 { token -> Promise in - let isMaster = deviceLinks.contains { $0.master.publicKey == getUserHexEncodedPublicKey() } - let deviceLinksAsJSON = deviceLinks.map { $0.toJSON() } - let value = !deviceLinksAsJSON.isEmpty ? [ "isPrimary" : isMaster ? 1 : 0, "authorisations" : deviceLinksAsJSON ] : nil - let annotation: JSON = [ "type" : deviceLinkType, "value" : value ] - let parameters: JSON = [ "annotations" : [ annotation ] ] - let url = URL(string: "\(server)/users/me")! - let request = TSRequest(url: url, method: "PATCH", parameters: parameters) - request.allHTTPHeaderFields = [ "Content-Type" : "application/json", "Authorization" : "Bearer \(token)" ] - return attempt(maxRetryCount: 8, recoveringOn: SnodeAPI.workQueue) { - OnionRequestAPI.sendOnionRequest(request, to: server, using: fileServerPublicKey).map2 { _ in } - }.handlingInvalidAuthTokenIfNeeded(for: server).recover2 { error in - print("[Loki] Couldn't update device links due to error: \(error).") - throw error - } - } - */ - } - - /// Adds the given device link to the user's device mapping on the server. - /// - /// - Note: Deprecated. - public static func addDeviceLink(_ deviceLink: DeviceLink) -> Promise { - return Promise { $0.fulfill(()) } - /* - var deviceLinks: Set = [] - storage.dbReadConnection.read { transaction in - deviceLinks = storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction) - } - deviceLinks.insert(deviceLink) - return setDeviceLinks(deviceLinks).map2 { _ in - storage.addDeviceLink(deviceLink) - } - */ - } - - /// Removes the given device link from the user's device mapping on the server. - /// - /// - Note: Deprecated. - public static func removeDeviceLink(_ deviceLink: DeviceLink) -> Promise { - return Promise { $0.fulfill(()) } - /* - var deviceLinks: Set = [] - storage.dbReadConnection.read { transaction in - deviceLinks = storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction) - } - deviceLinks.remove(deviceLink) - return setDeviceLinks(deviceLinks).map2 { _ in - storage.removeDeviceLink(deviceLink) - } - */ - } } diff --git a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift index 6c69578e1..fe105a0b9 100644 --- a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift +++ b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift @@ -290,8 +290,8 @@ public enum OnionRequestAPI { let url = "\(guardSnode.address):\(guardSnode.port)/onion_req" let finalEncryptionResult = intermediate.finalEncryptionResult let onion = finalEncryptionResult.ciphertext - if case Destination.server = destination { - print("[Loki] Onion request size: ~\(onion.count)") + if case Destination.server = destination, Double(onion.count) > 0.75 * (Double(FileServerAPI.maxFileSize) / FileServerAPI.fileSizeORMultiplier) { + print("[Loki] Approaching request size limit: ~\(onion.count) bytes.") } let parameters: JSON = [ "ciphertext" : onion.base64EncodedString(), @@ -327,7 +327,7 @@ public enum OnionRequestAPI { guard 200...299 ~= statusCode else { return seal.reject(Error.httpRequestFailedAtTargetSnode(statusCode: UInt(statusCode), json: json)) } seal.fulfill(json) } - } catch (let error) { + } catch { seal.reject(error) } }.catch2 { error in diff --git a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift index d5af0ec4e..b4b1084c5 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift @@ -32,7 +32,7 @@ public final class PublicChatAPI : DotNetAPI { private static func getLastMessageServerID(for group: UInt64, on server: String) -> UInt? { var result: UInt? = nil - storage.dbReadConnection.read { transaction in + Storage.read { transaction in result = transaction.object(forKey: "\(server).\(group)", inCollection: lastMessageServerIDCollection) as! UInt? } return result @@ -52,7 +52,7 @@ public final class PublicChatAPI : DotNetAPI { private static func getLastDeletionServerID(for group: UInt64, on server: String) -> UInt? { var result: UInt? = nil - storage.dbReadConnection.read { transaction in + Storage.read { transaction in result = transaction.object(forKey: "\(server).\(group)", inCollection: lastDeletionServerIDCollection) as! UInt? } return result @@ -174,8 +174,8 @@ public final class PublicChatAPI : DotNetAPI { return nil } var existingMessageID: String? = nil - storage.dbReadConnection.read { transaction in - existingMessageID = storage.getIDForMessage(withServerID: UInt(result.serverID!), in: transaction) + Storage.read { transaction in + existingMessageID = OWSPrimaryStorage.shared().getIDForMessage(withServerID: UInt(result.serverID!), in: transaction) } guard existingMessageID == nil else { print("[Loki] Ignoring duplicate public chat message.") diff --git a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift index 6f7db05f1..d60046331 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift @@ -60,16 +60,16 @@ public final class PublicChatPoller : NSObject { let uniquePublicKeys = Set(messages.map { $0.senderPublicKey }) func proceed() { let storage = OWSPrimaryStorage.shared() - var newDisplayNameUpdatees: Set = [] /* + var newDisplayNameUpdatees: Set = [] storage.dbReadConnection.read { transaction in newDisplayNameUpdatees = Set(uniquePublicKeys.filter { storage.getMasterHexEncodedPublicKey(for: $0, in: transaction) != $0 }.compactMap { storage.getMasterHexEncodedPublicKey(for: $0, in: transaction) }) } - */ if !newDisplayNameUpdatees.isEmpty { let displayNameUpdatees = PublicChatAPI.displayNameUpdatees[publicChat.id] ?? [] PublicChatAPI.displayNameUpdatees[publicChat.id] = displayNameUpdatees.union(newDisplayNameUpdatees) } + */ // Sorting the messages by timestamp before importing them fixes an issue where messages that quote older messages can't find those older messages messages.sorted { $0.timestamp < $1.timestamp }.forEach { message in var wasSentByCurrentUser = false diff --git a/SignalServiceKit/src/Loki/API/SnodeAPI.swift b/SignalServiceKit/src/Loki/API/SnodeAPI.swift index 1ad7c9f8b..35224ecf2 100644 --- a/SignalServiceKit/src/Loki/API/SnodeAPI.swift +++ b/SignalServiceKit/src/Loki/API/SnodeAPI.swift @@ -119,7 +119,7 @@ public final class SnodeAPI : NSObject { if let cachedSwarm = swarmCache[publicKey], cachedSwarm.count >= minimumSwarmSnodeCount && !isForcedReload { return Promise<[Snode]> { $0.fulfill(cachedSwarm) } } else { - print("[Loki] Getting swarm for: \(publicKey).") + print("[Loki] Getting swarm for: \(publicKey == getUserHexEncodedPublicKey() ? "self" : publicKey).") let parameters: [String:Any] = [ "pubKey" : publicKey ] return getRandomSnode().then2 { invoke(.getSwarm, on: $0, associatedWith: publicKey, parameters: parameters) diff --git a/SignalServiceKit/src/Loki/Database/Deprecated/LokiDatabaseUtilities.swift b/SignalServiceKit/src/Loki/Database/Deprecated/LokiDatabaseUtilities.swift index 9e60732a7..fa2b4df07 100644 --- a/SignalServiceKit/src/Loki/Database/Deprecated/LokiDatabaseUtilities.swift +++ b/SignalServiceKit/src/Loki/Database/Deprecated/LokiDatabaseUtilities.swift @@ -26,6 +26,8 @@ public final class LokiDatabaseUtilities : NSObject { // MARK: - Device Links @objc(getLinkedDeviceHexEncodedPublicKeysFor:in:) public static func getLinkedDeviceHexEncodedPublicKeys(for hexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> Set { + return [ hexEncodedPublicKey ] + /* let storage = OWSPrimaryStorage.shared() let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey var result = Set(storage.getDeviceLinks(for: masterHexEncodedPublicKey, in: transaction).flatMap { deviceLink in @@ -33,28 +35,35 @@ public final class LokiDatabaseUtilities : NSObject { }) result.insert(hexEncodedPublicKey) return result + */ } @objc(getLinkedDeviceThreadsFor:in:) public static func getLinkedDeviceThreads(for hexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> Set { - return Set(getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction).compactMap { TSContactThread.getWithContactId($0, transaction: transaction) }) + return Set([ TSContactThread.getWithContactId(hexEncodedPublicKey, transaction: transaction) ].compactMap { $0 }) +// return Set(getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction).compactMap { TSContactThread.getWithContactId($0, transaction: transaction) }) } @objc(isUserLinkedDevice:in:) public static func isUserLinkedDevice(_ hexEncodedPublicKey: String, transaction: YapDatabaseReadTransaction) -> Bool { + return hexEncodedPublicKey == getUserHexEncodedPublicKey() + /* let userHexEncodedPublicKey = getUserHexEncodedPublicKey() let userLinkedDeviceHexEncodedPublicKeys = getLinkedDeviceHexEncodedPublicKeys(for: userHexEncodedPublicKey, in: transaction) return userLinkedDeviceHexEncodedPublicKeys.contains(hexEncodedPublicKey) + */ } @objc(getMasterHexEncodedPublicKeyFor:in:) public static func objc_getMasterHexEncodedPublicKey(for slaveHexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> String? { - return OWSPrimaryStorage.shared().getMasterHexEncodedPublicKey(for: slaveHexEncodedPublicKey, in: transaction) + return nil +// return OWSPrimaryStorage.shared().getMasterHexEncodedPublicKey(for: slaveHexEncodedPublicKey, in: transaction) } @objc(getDeviceLinksFor:in:) public static func objc_getDeviceLinks(for masterHexEncodedPublicKey: String, in transaction: YapDatabaseReadTransaction) -> Set { - return OWSPrimaryStorage.shared().getDeviceLinks(for: masterHexEncodedPublicKey, in: transaction) + return [] +// return OWSPrimaryStorage.shared().getDeviceLinks(for: masterHexEncodedPublicKey, in: transaction) } diff --git a/SignalServiceKit/src/Loki/Database/Deprecated/OWSPrimaryStorage+Loki.swift b/SignalServiceKit/src/Loki/Database/Deprecated/OWSPrimaryStorage+Loki.swift index 6ddaf3b65..e6f80b104 100644 --- a/SignalServiceKit/src/Loki/Database/Deprecated/OWSPrimaryStorage+Loki.swift +++ b/SignalServiceKit/src/Loki/Database/Deprecated/OWSPrimaryStorage+Loki.swift @@ -30,7 +30,7 @@ public extension OWSPrimaryStorage { // MARK: Swarm public func setSwarm(_ swarm: [Snode], for publicKey: String, in transaction: YapDatabaseReadWriteTransaction) { - print("[Loki] Caching swarm for: \(publicKey).") + print("[Loki] Caching swarm for: \(publicKey == getUserHexEncodedPublicKey() ? "self" : publicKey).") clearSwarm(for: publicKey, in: transaction) let collection = Storage.getSwarmCollection(for: publicKey) swarm.forEach { snode in diff --git a/SignalServiceKit/src/Loki/Protocol/Meta/SessionMetaProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Meta/SessionMetaProtocol.swift index 7753eb3b8..f545cb2c4 100644 --- a/SignalServiceKit/src/Loki/Protocol/Meta/SessionMetaProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Meta/SessionMetaProtocol.swift @@ -19,8 +19,7 @@ public final class SessionMetaProtocol : NSObject { // MARK: Message Destination(s) @objc public static func getDestinationsForOutgoingSyncMessage() -> NSMutableSet { - return NSMutableSet(set: [ getUserHexEncodedPublicKey() ]) -// return NSMutableSet(set: MultiDeviceProtocol.getUserLinkedDevices()) + return NSMutableSet(set: [ getUserHexEncodedPublicKey() ]) // return NSMutableSet(set: MultiDeviceProtocol.getUserLinkedDevices()) } @objc(getDestinationsForOutgoingGroupMessage:inThread:) @@ -42,8 +41,7 @@ public final class SessionMetaProtocol : NSObject { } else { result = Set(outgoingGroupMessage.sendingRecipientIds()) .intersection(thread.groupModel.groupMemberIds) - .subtracting([ getUserHexEncodedPublicKey() ]) -// .subtracting(MultiDeviceProtocol.getUserLinkedDevices()) + .subtracting([ getUserHexEncodedPublicKey() ]) // .subtracting(MultiDeviceProtocol.getUserLinkedDevices()) } } return NSMutableSet(set: result) @@ -54,11 +52,13 @@ public final class SessionMetaProtocol : NSObject { public static func isThreadNoteToSelf(_ thread: TSThread) -> Bool { guard let thread = thread as? TSContactThread else { return false } return thread.contactIdentifier() == getUserHexEncodedPublicKey() -// var isNoteToSelf = false -// storage.dbReadConnection.read { transaction in -// isNoteToSelf = LokiDatabaseUtilities.isUserLinkedDevice(thread.contactIdentifier(), transaction: transaction) -// } -// return isNoteToSelf + /* + var isNoteToSelf = false + storage.dbReadConnection.read { transaction in + isNoteToSelf = LokiDatabaseUtilities.isUserLinkedDevice(thread.contactIdentifier(), transaction: transaction) + } + return isNoteToSelf + */ } // MARK: Transcripts @@ -69,12 +69,14 @@ public final class SessionMetaProtocol : NSObject { let wouldSignalRequireTranscript = (AreRecipientUpdatesEnabled() || !message.hasSyncedTranscript) guard wouldSignalRequireTranscript && !isOpenGroupMessage else { return false } return false -// var usesMultiDevice = false -// storage.dbReadConnection.read { transaction in -// usesMultiDevice = !storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction).isEmpty -// || UserDefaults.standard[.masterHexEncodedPublicKey] != nil -// } -// return usesMultiDevice + /* + var usesMultiDevice = false + storage.dbReadConnection.read { transaction in + usesMultiDevice = !storage.getDeviceLinks(for: getUserHexEncodedPublicKey(), in: transaction).isEmpty + || UserDefaults.standard[.masterHexEncodedPublicKey] != nil + } + return usesMultiDevice + */ } // MARK: Typing Indicators @@ -96,12 +98,14 @@ public final class SessionMetaProtocol : NSObject { @objc(shouldSkipMessageDecryptResult:wrappedIn:) public static func shouldSkipMessageDecryptResult(_ result: OWSMessageDecryptResult, wrappedIn envelope: SSKProtoEnvelope) -> Bool { return result.source == getUserHexEncodedPublicKey() -// if result.source == getUserHexEncodedPublicKey() { return true } -// var isLinkedDevice = false -// Storage.read { transaction in -// isLinkedDevice = LokiDatabaseUtilities.isUserLinkedDevice(result.source, transaction: transaction) -// } -// return isLinkedDevice && envelope.type == .closedGroupCiphertext + /* + if result.source == getUserHexEncodedPublicKey() { return true } + var isLinkedDevice = false + Storage.read { transaction in + isLinkedDevice = LokiDatabaseUtilities.isUserLinkedDevice(result.source, transaction: transaction) + } + return isLinkedDevice && envelope.type == .closedGroupCiphertext + */ } @objc(updateDisplayNameIfNeededForPublicKey:using:transaction:) @@ -127,8 +131,7 @@ public final class SessionMetaProtocol : NSObject { public static func updateProfileKeyIfNeeded(for publicKey: String, using dataMessage: SSKProtoDataMessage) { guard dataMessage.hasProfileKey, let profileKey = dataMessage.profileKey else { return } guard profileKey.count == kAES256_KeyByteLength else { - print("[Loki] Unexpected profile key size: \(profileKey.count).") - return + return print("[Loki] Unexpected profile key size: \(profileKey.count).") } let profilePictureURL = dataMessage.profile?.profilePicture let profileManager = SSKEnvironment.shared.profileManager diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLink.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLink.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLink.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLink.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkIndex.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkIndex.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkIndex.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkIndex.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingSession.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingSession.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingSession.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingSession.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingSessionDelegate.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingSessionDelegate.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingSessionDelegate.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingSessionDelegate.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingUtilities.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingUtilities.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/DeviceLinkingUtilities.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/DeviceLinkingUtilities.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.h b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKDeviceLinkMessage.h similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.h rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKDeviceLinkMessage.h diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKDeviceLinkMessage.m similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKDeviceLinkMessage.m diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKUnlinkDeviceMessage.h b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKUnlinkDeviceMessage.h similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/LKUnlinkDeviceMessage.h rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKUnlinkDeviceMessage.h diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKUnlinkDeviceMessage.m b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKUnlinkDeviceMessage.m similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/LKUnlinkDeviceMessage.m rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/LKUnlinkDeviceMessage.m diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/MultiDeviceProtocol.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Multi Device/MultiDeviceProtocol.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/ClosedGroupParser.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/ClosedGroupParser.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Sync Messages/ClosedGroupParser.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/ClosedGroupParser.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/ContactParser.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/ContactParser.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Sync Messages/ContactParser.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/ContactParser.swift diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/LKSyncOpenGroupsMessage.h b/SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/LKSyncOpenGroupsMessage.h similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Sync Messages/LKSyncOpenGroupsMessage.h rename to SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/LKSyncOpenGroupsMessage.h diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/LKSyncOpenGroupsMessage.m b/SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/LKSyncOpenGroupsMessage.m similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Sync Messages/LKSyncOpenGroupsMessage.m rename to SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/LKSyncOpenGroupsMessage.m diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/SyncMessagesProtocol.swift similarity index 100% rename from SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift rename to SignalServiceKit/src/Loki/Protocol/Shelved/Sync Messages/SyncMessagesProtocol.swift diff --git a/SignalServiceKit/src/Loki/Push Notifications/LokiPushNotificationManager.swift b/SignalServiceKit/src/Loki/Push Notifications/LokiPushNotificationManager.swift index 9f0039130..fe4230021 100644 --- a/SignalServiceKit/src/Loki/Push Notifications/LokiPushNotificationManager.swift +++ b/SignalServiceKit/src/Loki/Push Notifications/LokiPushNotificationManager.swift @@ -25,11 +25,7 @@ public final class LokiPushNotificationManager : NSObject { let isUsingFullAPNs = userDefaults[.isUsingFullAPNs] let now = Date().timeIntervalSince1970 guard isForcedUpdate || hexEncodedToken != oldToken || now - lastUploadTime > tokenExpirationInterval else { - print("[Loki] Device token hasn't changed; no need to re-upload.") - return Promise { $0.fulfill(()) } - } - guard !isUsingFullAPNs else { - print("[Loki] Using full APNs; ignoring call to register(with:).") + print("[Loki] Device token hasn't changed or expired; no need to re-upload.") return Promise { $0.fulfill(()) } } let parameters = [ "token" : hexEncodedToken ] @@ -70,7 +66,7 @@ public final class LokiPushNotificationManager : NSObject { let lastUploadTime = userDefaults[.lastDeviceTokenUpload] let now = Date().timeIntervalSince1970 guard isForcedUpdate || hexEncodedToken != oldToken || now - lastUploadTime > tokenExpirationInterval else { - print("[Loki] Device token hasn't changed; no need to re-upload.") + print("[Loki] Device token hasn't changed or expired; no need to re-upload.") return Promise { $0.fulfill(()) } } let parameters = [ "token" : hexEncodedToken, "pubKey" : hexEncodedPublicKey] diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 82be61c5f..492ef2ea9 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1511,9 +1511,9 @@ NS_ASSUME_NONNULL_BEGIN serverTimestamp:serverTimestamp wasReceivedByUD:wasReceivedByUD]; - [LKSessionMetaProtocol updateDisplayNameIfNeededForPublicKey:incomingMessage.authorId using:dataMessage transaction:transaction]; + [LKSessionMetaProtocol updateProfileKeyIfNeededForPublicKey:masterPublicKey using:dataMessage]; - [LKSessionMetaProtocol updateProfileKeyIfNeededForPublicKey:thread.contactIdentifier using:dataMessage]; + [LKSessionMetaProtocol updateDisplayNameIfNeededForPublicKey:masterPublicKey using:dataMessage transaction:transaction]; NSArray *attachmentPointers = [TSAttachmentPointer attachmentPointersFromProtos:dataMessage.attachments albumMessage:incomingMessage]; diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 908608806..d7c37295c 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -598,7 +598,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; resolve(error); }]; - NSString *publicKey = recipients.firstObject.recipientId; +// NSString *publicKey = recipients.firstObject.recipientId; // if ([LKMultiDeviceProtocol isMultiDeviceRequiredForMessage:message toPublicKey:publicKey]) { // Avoid the write transaction if possible // [self.primaryStorage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { // [LKMultiDeviceProtocol sendMessageToDestinationAndLinkedDevices:messageSend transaction:transaction]; diff --git a/SignalServiceKit/src/Util/TypingIndicators.swift b/SignalServiceKit/src/Util/TypingIndicators.swift index b519b6d10..d0e7ebd73 100644 --- a/SignalServiceKit/src/Util/TypingIndicators.swift +++ b/SignalServiceKit/src/Util/TypingIndicators.swift @@ -397,7 +397,7 @@ public class TypingIndicatorsImpl: NSObject, TypingIndicators { AssertIsOnMainThread() displayTypingTimer?.invalidate() - displayTypingTimer = Timer.weakScheduledTimer(withTimeInterval: 15, + displayTypingTimer = Timer.weakScheduledTimer(withTimeInterval: 5, target: self, selector: #selector(IncomingIndicators.displayTypingTimerDidFire), userInfo: nil,