Merge pull request #183 from loki-project/syncing

Multi Device Syncing Bug Fixes
pull/184/head
Niels Andriesse 6 years ago committed by GitHub
commit 911f5a72a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -152,6 +152,8 @@ final class JoinPublicChatVC : BaseVC, UIPageViewControllerDataSource, UIPageVie
let _ = LokiPublicChatAPI.getMessages(for: channelID, on: urlAsString)
let _ = LokiPublicChatAPI.setDisplayName(to: displayName, on: urlAsString)
let _ = LokiPublicChatAPI.join(channelID, on: urlAsString)
let syncManager = SSKEnvironment.shared.syncManager
let _ = syncManager.syncAllOpenGroups()
self?.presentingViewController!.dismiss(animated: true, completion: nil)
}
.catch(on: .main) { [weak self] _ in

@ -125,7 +125,7 @@ public final class LokiPublicChatManager : NSObject {
refreshChatsAndPollers()
}
private func getChat(server: String, channel: UInt64) -> LokiPublicChat? {
public func getChat(server: String, channel: UInt64) -> LokiPublicChat? {
return chats.values.first { chat in
return chat.server == server && chat.channel == channel
}

@ -127,6 +127,10 @@ public final class FriendRequestProtocol : NSObject {
}
}
}
// Send a contact sync message
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
let syncManager = SSKEnvironment.shared.syncManager
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
}
@objc(sendFriendRequestAcceptanceMessageToHexEncodedPublicKey:using:)
@ -231,6 +235,10 @@ public final class FriendRequestProtocol : NSObject {
guard friendRequestStatus != .none else { return }
// Become friends
storage.setFriendRequestStatus(.friends, for: hexEncodedPublicKey, transaction: transaction)
// Send a contact sync message
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
let syncManager = SSKEnvironment.shared.syncManager
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
}
@objc(handleFriendRequestMessageIfNeededFromEnvelope:using:)

@ -184,9 +184,6 @@ public final class SessionManagementProtocol : NSObject {
let thread = TSContactThread.getWithContactId(hexEncodedPublicKey, transaction: transaction), // TODO: Should this be getOrCreate?
thread.isContactFriend {
receiving_startSessionReset(in: thread, using: transaction)
// Notify our other devices that we've started a session reset
let syncManager = SSKEnvironment.shared.syncManager
syncManager.syncContact(hexEncodedPublicKey, transaction: transaction)
}
}

@ -155,9 +155,9 @@ public final class SyncMessagesProtocol : NSObject {
public static func handleContactSyncMessageIfNeeded(_ syncMessage: SSKProtoSyncMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {
// The envelope source is set during UD decryption
let hexEncodedPublicKey = envelope.source!
guard let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: getUserHexEncodedPublicKey(), in: transaction) else { return }
let wasSentByMasterDevice = (masterHexEncodedPublicKey == hexEncodedPublicKey)
guard wasSentByMasterDevice, let contacts = syncMessage.contacts, let contactsAsData = contacts.data, contactsAsData.count > 0 else { return }
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
let wasSentByLinkedDevice = linkedDevices.contains(hexEncodedPublicKey)
guard wasSentByLinkedDevice, let contacts = syncMessage.contacts, let contactsAsData = contacts.data, contactsAsData.count > 0 else { return }
print("[Loki] Contact sync message received.")
handleContactSyncMessageData(contactsAsData, using: transaction)
}
@ -201,9 +201,9 @@ public final class SyncMessagesProtocol : NSObject {
public static func handleClosedGroupSyncMessageIfNeeded(_ syncMessage: SSKProtoSyncMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {
// The envelope source is set during UD decryption
let hexEncodedPublicKey = envelope.source!
guard let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: getUserHexEncodedPublicKey(), in: transaction) else { return }
let wasSentByMasterDevice = (masterHexEncodedPublicKey == hexEncodedPublicKey)
guard wasSentByMasterDevice, let groups = syncMessage.groups, let groupsAsData = groups.data, groupsAsData.count > 0 else { return }
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
let wasSentByLinkedDevice = linkedDevices.contains(hexEncodedPublicKey)
guard wasSentByLinkedDevice, let groups = syncMessage.groups, let groupsAsData = groups.data, groupsAsData.count > 0 else { return }
print("[Loki] Closed group sync message received.")
let parser = ClosedGroupParser(data: groupsAsData)
let groupModels = parser.parseGroupModels()
@ -223,14 +223,16 @@ public final class SyncMessagesProtocol : NSObject {
public static func handleOpenGroupSyncMessageIfNeeded(_ syncMessage: SSKProtoSyncMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadTransaction) {
// The envelope source is set during UD decryption
let hexEncodedPublicKey = envelope.source!
guard let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: getUserHexEncodedPublicKey(), in: transaction) else { return }
let wasSentByMasterDevice = (masterHexEncodedPublicKey == hexEncodedPublicKey)
guard wasSentByMasterDevice else { return }
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
let wasSentByLinkedDevice = linkedDevices.contains(hexEncodedPublicKey)
guard wasSentByLinkedDevice else { return }
let groups = syncMessage.openGroups
guard groups.count > 0 else { return }
print("[Loki] Open group sync message received.")
for openGroup in groups {
LokiPublicChatManager.shared.addChat(server: openGroup.url, channel: openGroup.channel)
let openGroupManager = LokiPublicChatManager.shared
guard openGroupManager.getChat(server: openGroup.url, channel: openGroup.channel) == nil else { return }
openGroupManager.addChat(server: openGroup.url, channel: openGroup.channel)
}
}
}

Loading…
Cancel
Save