mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-25 15:48:36 +00:00
Support recovering forgotten/unknown group info from sender
Closes #5876 // FREEBIE
This commit is contained in:
@@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.database.EncryptingSmsDatabase;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||
import org.thoughtcrime.securesms.jobs.AvatarDownloadJob;
|
||||
import org.thoughtcrime.securesms.jobs.PushGroupUpdateJob;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
|
||||
import org.thoughtcrime.securesms.notifications.MessageNotifier;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientFactory;
|
||||
@@ -29,6 +30,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceGroup.Type;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
@@ -61,12 +63,14 @@ public class GroupMessageProcessor {
|
||||
byte[] id = group.getGroupId();
|
||||
GroupRecord record = database.getGroup(id);
|
||||
|
||||
if (record != null && group.getType() == SignalServiceGroup.Type.UPDATE) {
|
||||
if (record != null && group.getType() == Type.UPDATE) {
|
||||
return handleGroupUpdate(context, masterSecret, envelope, group, record, outgoing);
|
||||
} else if (record == null && group.getType() == SignalServiceGroup.Type.UPDATE) {
|
||||
} else if (record == null && group.getType() == Type.UPDATE) {
|
||||
return handleGroupCreate(context, masterSecret, envelope, group, outgoing);
|
||||
} else if (record != null && group.getType() == SignalServiceGroup.Type.QUIT) {
|
||||
} else if (record != null && group.getType() == Type.QUIT) {
|
||||
return handleGroupLeave(context, masterSecret, envelope, group, record, outgoing);
|
||||
} else if (record != null && group.getType() == Type.REQUEST_INFO) {
|
||||
return handleGroupInfoRequest(context, envelope, group, record);
|
||||
} else {
|
||||
Log.w(TAG, "Received unknown type, ignoring...");
|
||||
return null;
|
||||
@@ -144,6 +148,20 @@ public class GroupMessageProcessor {
|
||||
return storeMessage(context, masterSecret, envelope, group, builder.build(), outgoing);
|
||||
}
|
||||
|
||||
private static Long handleGroupInfoRequest(@NonNull Context context,
|
||||
@NonNull SignalServiceEnvelope envelope,
|
||||
@NonNull SignalServiceGroup group,
|
||||
@NonNull GroupRecord record)
|
||||
{
|
||||
if (record.getMembers().contains(envelope.getSource())) {
|
||||
ApplicationContext.getInstance(context)
|
||||
.getJobManager()
|
||||
.add(new PushGroupUpdateJob(context, envelope.getSource(), group.getGroupId()));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Long handleGroupLeave(@NonNull Context context,
|
||||
@NonNull MasterSecretUnion masterSecret,
|
||||
@NonNull SignalServiceEnvelope envelope,
|
||||
|
||||
Reference in New Issue
Block a user