From dfa238a287b0bf1a893c2fdb19fc6804e22569b7 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO <ryanzhaors@qq.com> Date: Mon, 24 Feb 2020 11:52:54 +1100 Subject: [PATCH] wip: fix sync message --- Signal/Signal-Info.plist | 2 +- .../View Controllers/DeviceLinkingModal.swift | 4 +-- SignalMessaging/contacts/OWSSyncManager.m | 32 +++++++++++++------ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index c49053bcc..9d7c02e10 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -5,7 +5,7 @@ <key>BuildDetails</key> <dict> <key>CarthageVersion</key> - <string>0.33.0</string> + <string>0.34.0</string> <key>OSXVersion</key> <string>10.15.2</string> <key>WebRTCCommit</key> diff --git a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift index b2a304ea3..195dd5669 100644 --- a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift +++ b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift @@ -165,8 +165,8 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { let linkingAuthorizationMessage = DeviceLinkingUtilities.getLinkingAuthorizationMessage(for: deviceLink) ThreadUtil.enqueue(linkingAuthorizationMessage) SSKEnvironment.shared.messageSender.send(linkingAuthorizationMessage, success: { - let _ = SSKEnvironment.shared.syncManager.syncAllContacts() -// _ = SSKEnvironment.shared.syncManager.syncAllGroups() + let _ = [SSKEnvironment.shared.syncManager.syncAllContacts(), + SSKEnvironment.shared.syncManager.syncAllGroups()] }) { _ in print("[Loki] Failed to send device link authorization message.") } diff --git a/SignalMessaging/contacts/OWSSyncManager.m b/SignalMessaging/contacts/OWSSyncManager.m index 4c4df6d87..2ebbc95ee 100644 --- a/SignalMessaging/contacts/OWSSyncManager.m +++ b/SignalMessaging/contacts/OWSSyncManager.m @@ -288,15 +288,21 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag if (hexEncodedPublicKey != nil && thread.isContactFriend && thread.shouldThreadBeVisible && !thread.isForceHidden) { [friends addObject:[[SignalAccount alloc] initWithRecipientId:hexEncodedPublicKey]]; } - if (friends.count >= 2) { - [promises addObject:[self syncContactsForSignalAccounts:friends]]; - [friends removeAllObjects]; - } }]; - if (friends.count > 0) { - [promises addObject:[self syncContactsForSignalAccounts:friends]]; + NSMutableArray<SignalAccount *> *signalAccounts = @[].mutableCopy; + for (SignalAccount *contact in friends) { + [signalAccounts addObject:contact]; + if (signalAccounts.count >= 2) { + [promises addObject:[self syncContactsForSignalAccounts:signalAccounts]]; + [signalAccounts removeAllObjects]; + } } - return PMKJoin(promises); + if (signalAccounts.count > 0) { + [promises addObject:[self syncContactsForSignalAccounts:signalAccounts]]; + } + AnyPromise *promise = PMKJoin(promises); + [promise retainUntilComplete]; + return promise; } - (AnyPromise *)syncContactsForSignalAccounts:(NSArray<SignalAccount *> *)signalAccounts @@ -319,13 +325,19 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag - (AnyPromise *)syncAllGroups { + NSMutableArray<TSGroupThread *> *groupThreads = @[].mutableCopy; NSMutableArray<AnyPromise *> *promises = @[].mutableCopy; [TSGroupThread enumerateCollectionObjectsUsingBlock:^(TSGroupThread *thread, BOOL *stop) { - if (thread.groupModel && thread.shouldThreadBeVisible && !thread.isForceHidden) { - [promises addObject:[self syncGroupForThread:thread]]; + if (thread.groupModel.groupType == closedGroup && thread.shouldThreadBeVisible && !thread.isForceHidden) { + [groupThreads addObject:thread]; } }]; - return PMKJoin(promises); + for (TSGroupThread *groupThread in groupThreads) { + [promises addObject:[self syncGroupForThread:groupThread]]; + } + AnyPromise *promise = PMKJoin(promises); + [promise retainUntilComplete]; + return promise; } - (AnyPromise *)syncGroupForThread:(TSGroupThread *)thread