fix the sync message bug after refactoring

pull/104/head
Ryan ZHAO 5 years ago
parent dfa238a287
commit 9afd838ea5

@ -1 +1 @@
Subproject commit 2870e676deec6a7ddb931edb6f0284f1f5b36085
Subproject commit 67dbced37481e0011a3df1397ed57711384a4957

@ -289,11 +289,12 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag
[friends addObject:[[SignalAccount alloc] initWithRecipientId:hexEncodedPublicKey]];
}
}];
[friends addObject:[[SignalAccount alloc] initWithRecipientId:self.tsAccountManager.localNumber]];
NSMutableArray<SignalAccount *> *signalAccounts = @[].mutableCopy;
for (SignalAccount *contact in friends) {
[signalAccounts addObject:contact];
if (signalAccounts.count >= 2) {
[promises addObject:[self syncContactsForSignalAccounts:signalAccounts]];
if (signalAccounts.count >= 3) {
[promises addObject:[self syncContactsForSignalAccounts:[signalAccounts copy]]];
[signalAccounts removeAllObjects];
}
}
@ -327,7 +328,15 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag
{
NSMutableArray<TSGroupThread *> *groupThreads = @[].mutableCopy;
NSMutableArray<AnyPromise *> *promises = @[].mutableCopy;
[TSGroupThread enumerateCollectionObjectsUsingBlock:^(TSGroupThread *thread, BOOL *stop) {
[TSGroupThread enumerateCollectionObjectsUsingBlock:^(id obj, BOOL *stop) {
if (![obj isKindOfClass:[TSGroupThread class]]) {
if (![obj isKindOfClass:[TSContactThread class]]) {
OWSLogWarn(@"Ignoring non group thread in thread collection: %@", obj);
}
return;
}
TSGroupThread *thread = (TSGroupThread *)obj;
if (thread.groupModel.groupType == closedGroup && thread.shouldThreadBeVisible && !thread.isForceHidden) {
[groupThreads addObject:thread];
}

@ -17,7 +17,7 @@
guard let size = uncheckedSize, size < data.count else { break }
let sizeAsInt = Int(size)
index += 4
guard index + sizeAsInt < data.count else { break }
guard index + sizeAsInt <= data.count else { break }
let protoAsData = data[index..<(index+sizeAsInt)]
guard let proto = try? SSKProtoContactDetails.parseData(protoAsData) else { break }
index += sizeAsInt

@ -109,21 +109,6 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadTransaction *)transaction
{
NSMutableArray<SignalAccount *> *signalAccounts = [self.signalAccounts mutableCopy];
NSString *_Nullable localNumber = self.tsAccountManager.localNumber;
OWSAssertDebug(localNumber);
if (localNumber) {
BOOL hasLocalNumber = NO;
for (SignalAccount *signalAccount in signalAccounts) {
hasLocalNumber |= [signalAccount.recipientId isEqualToString:localNumber];
}
if (!hasLocalNumber) {
SignalAccount *signalAccount = [[SignalAccount alloc] initWithRecipientId:localNumber];
// OWSContactsOutputStream requires all signalAccount to have a contact.
signalAccount.contact = [[Contact alloc] initWithSystemContact:[CNContact new]];
[signalAccounts addObject:signalAccount];
}
}
// TODO use temp file stream to avoid loading everything into memory at once
// First though, we need to re-engineer our attachment process to accept streams (encrypting with stream,

@ -431,7 +431,7 @@ NSError *EnsureDecryptError(NSError *_Nullable error, NSString *fallbackErrorDes
sessionStore:self.primaryStorage
preKeyStore:self.primaryStorage
signedPreKeyStore:self.primaryStorage
identityKeyStore:self.primaryStorage
identityKeyStore:self.identityManager
recipientID:recipientId
deviceID:deviceId];

@ -1020,8 +1020,6 @@ NS_ASSUME_NONNULL_BEGIN
messageType:TSInfoMessageTypeGroupUpdate
customMessage:updateMessage];
[infoMessage saveWithTransaction:transaction];
// Loki: if there is a update of group members, we should establish a session with the new members.
[self establishSessionsWithMembersIfNeeded:newGroupModel.groupMemberIds forThread:newGroupThread transaction:transaction];
} else if (transcript.isGroupQuit) {
TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupId:transcript.dataMessage.group.id groupType:closedGroup transaction:transaction];
[groupThread leaveGroupWithTransaction:transaction];
@ -1112,9 +1110,17 @@ NS_ASSUME_NONNULL_BEGIN
GroupParser *parser = [[GroupParser alloc] initWithData:data];
NSArray<TSGroupModel *> *groupModels = [parser parseGroupModels];
for (TSGroupModel *groupModel in groupModels) {
TSGroupThread *thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
[thread saveWithTransaction:transaction];
[self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction];
TSGroupThread *thread = [TSGroupThread threadWithGroupId:groupModel.groupId transaction:transaction];
if (thread == nil) {
thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
[thread saveWithTransaction:transaction];
[self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction];
TSInfoMessage *infoMessage = [[TSInfoMessage alloc] initWithTimestamp:NSDate.ows_millisecondTimeStamp
inThread:thread
messageType:TSInfoMessageTypeGroupUpdate
customMessage:@"You have joined the group."];
[infoMessage saveWithTransaction:transaction];
}
}
}
} else {

Loading…
Cancel
Save