Fix bad group state when requesting to rejoin a group.

main
Cody Henthorne 2023-02-07 09:57:36 -05:00 zatwierdzone przez Greyson Parrelli
rodzic 5d328857aa
commit 03c68375db
2 zmienionych plików z 17 dodań i 1 usunięć

Wyświetl plik

@ -937,6 +937,14 @@ final class GroupManagerV2 {
if (group.isPresent()) {
Log.i(TAG, "Group already present locally");
if (decryptedChange != null) {
try {
groupsV2StateProcessor.forGroup(SignalStore.account().getServiceIds(), groupMasterKey)
.updateLocalGroupToRevision(decryptedChange.getRevision(), System.currentTimeMillis(), decryptedChange);
} catch (GroupNotAMemberException e) {
Log.w(TAG, "Unable to apply join change to existing group", e);
}
}
} else {
groupDatabase.create(groupMasterKey, decryptedGroup);
Log.i(TAG, "Created local group with placeholder");

Wyświetl plik

@ -19,6 +19,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
import org.signal.storageservice.protos.groups.local.DecryptedMember;
import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval;
import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember;
import org.thoughtcrime.securesms.database.GroupTable;
import org.thoughtcrime.securesms.database.model.GroupRecord;
import org.thoughtcrime.securesms.database.MessageTable;
@ -333,7 +334,14 @@ public class GroupsV2StateProcessor {
.filter(Objects::nonNull)
.anyMatch(serviceIds::matches);
return !currentlyInGroup && !addedAsMember && !addedAsPendingMember;
boolean addedAsRequestingMember = signedGroupChange.getNewRequestingMembersList()
.stream()
.map(DecryptedRequestingMember::getUuid)
.map(UuidUtil::fromByteStringOrNull)
.filter(Objects::nonNull)
.anyMatch(serviceIds::matches);
return !currentlyInGroup && !addedAsMember && !addedAsPendingMember && !addedAsRequestingMember;
}
private boolean notHavingInviteRevoked(@NonNull DecryptedGroupChange signedGroupChange) {