kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix bad group state when requesting to rejoin a group.
rodzic
5d328857aa
commit
03c68375db
|
@ -937,6 +937,14 @@ final class GroupManagerV2 {
|
||||||
|
|
||||||
if (group.isPresent()) {
|
if (group.isPresent()) {
|
||||||
Log.i(TAG, "Group already present locally");
|
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 {
|
} else {
|
||||||
groupDatabase.create(groupMasterKey, decryptedGroup);
|
groupDatabase.create(groupMasterKey, decryptedGroup);
|
||||||
Log.i(TAG, "Created local group with placeholder");
|
Log.i(TAG, "Created local group with placeholder");
|
||||||
|
|
|
@ -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.DecryptedMember;
|
||||||
import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
|
import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
|
||||||
import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval;
|
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.GroupTable;
|
||||||
import org.thoughtcrime.securesms.database.model.GroupRecord;
|
import org.thoughtcrime.securesms.database.model.GroupRecord;
|
||||||
import org.thoughtcrime.securesms.database.MessageTable;
|
import org.thoughtcrime.securesms.database.MessageTable;
|
||||||
|
@ -333,7 +334,14 @@ public class GroupsV2StateProcessor {
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.anyMatch(serviceIds::matches);
|
.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) {
|
private boolean notHavingInviteRevoked(@NonNull DecryptedGroupChange signedGroupChange) {
|
||||||
|
|
Ładowanie…
Reference in New Issue