Handle no actual change to group.
parent
bc639dd438
commit
284f221a9d
|
@ -140,7 +140,7 @@ final class GroupStateMapper {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(groupB, groupA) -> GroupChangeReconstruct.reconstructGroupChange(groupA, groupB),
|
(groupB, groupA) -> GroupChangeReconstruct.reconstructGroupChange(groupA, groupB),
|
||||||
(groupA, groupB) -> DecryptedGroupUtil.changeIsEmpty(GroupChangeReconstruct.reconstructGroupChange(groupA, groupB))
|
(groupA, groupB) -> groupA.getRevision() == groupB.getRevision() && DecryptedGroupUtil.changeIsEmpty(GroupChangeReconstruct.reconstructGroupChange(groupA, groupB))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,12 @@ import org.thoughtcrime.securesms.groups.GroupChangeBusyException;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
import org.thoughtcrime.securesms.groups.GroupManager;
|
||||||
import org.thoughtcrime.securesms.groups.GroupNotAMemberException;
|
import org.thoughtcrime.securesms.groups.GroupNotAMemberException;
|
||||||
|
import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Data;
|
import org.thoughtcrime.securesms.jobmanager.Data;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
import org.whispersystems.libsignal.util.guava.Optional;
|
||||||
import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException;
|
import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException;
|
||||||
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
|
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
|
||||||
|
@ -71,7 +71,11 @@ final class RequestGroupV2InfoWorkerJob extends BaseJob {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRun() throws IOException, GroupNotAMemberException, GroupChangeBusyException {
|
public void onRun() throws IOException, GroupNotAMemberException, GroupChangeBusyException {
|
||||||
Log.i(TAG, "Updating group to revision " + toRevision);
|
if (toRevision == GroupsV2StateProcessor.LATEST) {
|
||||||
|
Log.i(TAG, "Updating group to latest revision");
|
||||||
|
} else {
|
||||||
|
Log.i(TAG, "Updating group to revision " + toRevision);
|
||||||
|
}
|
||||||
|
|
||||||
Optional<GroupDatabase.GroupRecord> group = DatabaseFactory.getGroupDatabase(context).getGroup(groupId);
|
Optional<GroupDatabase.GroupRecord> group = DatabaseFactory.getGroupDatabase(context).getGroup(groupId);
|
||||||
|
|
||||||
|
|
|
@ -439,6 +439,30 @@ public final class GroupStateMapperTest {
|
||||||
assertEquals(log8.getGroup(), advanceGroupStateResult.getNewGlobalGroupState().getLocalState());
|
assertEquals(log8.getGroup(), advanceGroupStateResult.getNewGlobalGroupState().getLocalState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void no_actual_change() {
|
||||||
|
DecryptedGroup currentState = state(0);
|
||||||
|
ServerGroupLogEntry log1 = serverLogEntry(1);
|
||||||
|
ServerGroupLogEntry log2 = new ServerGroupLogEntry(DecryptedGroup.newBuilder(log1.getGroup())
|
||||||
|
.setRevision(2)
|
||||||
|
.build(),
|
||||||
|
DecryptedGroupChange.newBuilder()
|
||||||
|
.setRevision(2)
|
||||||
|
.setEditor(UuidUtil.toByteString(KNOWN_EDITOR))
|
||||||
|
.setNewTitle(DecryptedString.newBuilder().setValue(log1.getGroup().getTitle()))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
AdvanceGroupStateResult advanceGroupStateResult = GroupStateMapper.partiallyAdvanceGroupState(new GlobalGroupState(currentState, asList(log1, log2)), 2);
|
||||||
|
|
||||||
|
assertThat(advanceGroupStateResult.getProcessedLogEntries(), is(asList(asLocal(log1),
|
||||||
|
new LocalGroupLogEntry(log2.getGroup(), DecryptedGroupChange.newBuilder()
|
||||||
|
.setRevision(2)
|
||||||
|
.setEditor(UuidUtil.toByteString(KNOWN_EDITOR))
|
||||||
|
.build()))));
|
||||||
|
assertTrue(advanceGroupStateResult.getNewGlobalGroupState().getServerHistory().isEmpty());
|
||||||
|
assertEquals(log2.getGroup(), advanceGroupStateResult.getNewGlobalGroupState().getLocalState());
|
||||||
|
}
|
||||||
|
|
||||||
private static void assertNewState(GlobalGroupState expected, GlobalGroupState actual) {
|
private static void assertNewState(GlobalGroupState expected, GlobalGroupState actual) {
|
||||||
assertEquals(expected.getLocalState(), actual.getLocalState());
|
assertEquals(expected.getLocalState(), actual.getLocalState());
|
||||||
assertThat(actual.getServerHistory(), is(expected.getServerHistory()));
|
assertThat(actual.getServerHistory(), is(expected.getServerHistory()));
|
||||||
|
|
Loading…
Reference in New Issue