mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Remove SignalServiceContent.
This commit is contained in:
@@ -5,18 +5,23 @@ import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.libsignal.zkgroup.InvalidInputException;
|
||||
import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.jobmanager.JsonJobData;
|
||||
import org.thoughtcrime.securesms.jobmanager.JobMigration;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.Base64;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
|
||||
import org.whispersystems.signalservice.api.push.ServiceId;
|
||||
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
||||
import org.whispersystems.signalservice.internal.serialize.protos.SignalServiceContentProto;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* We changed the format of the queue key for {@link org.thoughtcrime.securesms.jobs.PushProcessMessageJob}
|
||||
* We changed the format of the queue key for legacy PushProcessMessageJob
|
||||
* to have the recipient ID in it, so this migrates existing jobs to be in that format.
|
||||
*/
|
||||
public class PushProcessMessageQueueJobMigration extends JobMigration {
|
||||
@@ -36,7 +41,7 @@ public class PushProcessMessageQueueJobMigration extends JobMigration {
|
||||
Log.i(TAG, "Found a PushProcessMessageJob to migrate.");
|
||||
try {
|
||||
return migratePushProcessMessageJob(context, jobData);
|
||||
} catch (IOException e) {
|
||||
} catch (IOException | InvalidInputException e) {
|
||||
Log.w(TAG, "Failed to migrate message job.", e);
|
||||
return jobData;
|
||||
}
|
||||
@@ -44,24 +49,28 @@ public class PushProcessMessageQueueJobMigration extends JobMigration {
|
||||
return jobData;
|
||||
}
|
||||
|
||||
private static @NonNull JobData migratePushProcessMessageJob(@NonNull Context context, @NonNull JobData jobData) throws IOException {
|
||||
private static @NonNull JobData migratePushProcessMessageJob(@NonNull Context context, @NonNull JobData jobData) throws IOException, InvalidInputException {
|
||||
JsonJobData data = JsonJobData.deserialize(jobData.getData());
|
||||
|
||||
String suffix = "";
|
||||
|
||||
if (data.getInt("message_state") == 0) {
|
||||
SignalServiceContent content = SignalServiceContent.deserialize(Base64.decode(data.getString("message_content")));
|
||||
SignalServiceContentProto proto = SignalServiceContentProto.parseFrom(Base64.decode(data.getString("message_content")));
|
||||
|
||||
if (content != null && content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
|
||||
if (proto != null && proto.hasContent() && proto.getContent().hasDataMessage() && proto.getContent().getDataMessage().hasGroupV2()) {
|
||||
Log.i(TAG, "Migrating a group message.");
|
||||
|
||||
GroupId groupId = GroupId.v2(content.getDataMessage().get().getGroupContext().get().getMasterKey());
|
||||
GroupId groupId = GroupId.v2(new GroupMasterKey(proto.getContent().getDataMessage().getGroupV2().getMasterKey().toByteArray()));
|
||||
Recipient recipient = Recipient.externalGroupExact(groupId);
|
||||
|
||||
suffix = recipient.getId().toQueueKey();
|
||||
} else if (content != null) {
|
||||
} else if (proto != null && proto.hasMetadata() && proto.getMetadata().hasAddress()) {
|
||||
Log.i(TAG, "Migrating an individual message.");
|
||||
suffix = RecipientId.from(content.getSender()).toQueueKey();
|
||||
ServiceId senderServiceId = ServiceId.parseOrThrow(proto.getMetadata().getAddress().getUuid());
|
||||
String senderE164 = proto.getMetadata().getAddress().getE164();
|
||||
SignalServiceAddress sender = new SignalServiceAddress(senderServiceId, Optional.ofNullable(senderE164));
|
||||
|
||||
suffix = RecipientId.from(sender).toQueueKey();
|
||||
}
|
||||
} else {
|
||||
Log.i(TAG, "Migrating an exception message.");
|
||||
|
||||
@@ -12,10 +12,8 @@ import org.thoughtcrime.securesms.groups.GroupId
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceContent
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2
|
||||
import java.util.Optional
|
||||
import java.util.UUID
|
||||
|
||||
class IncomingMediaMessage(
|
||||
val from: RecipientId?,
|
||||
@@ -144,28 +142,4 @@ class IncomingMediaMessage(
|
||||
isPaymentsActivated = paymentsActivated,
|
||||
messageRanges = messageRanges
|
||||
)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun createIncomingPaymentNotification(
|
||||
from: RecipientId,
|
||||
content: SignalServiceContent,
|
||||
receivedTime: Long,
|
||||
expiresIn: Long,
|
||||
paymentUuid: UUID
|
||||
): IncomingMediaMessage {
|
||||
return IncomingMediaMessage(
|
||||
from = from,
|
||||
body = paymentUuid.toString(),
|
||||
sentTimeMillis = content.timestamp,
|
||||
serverTimeMillis = content.serverReceivedTimestamp,
|
||||
receivedTimeMillis = receivedTime,
|
||||
expiresIn = expiresIn,
|
||||
isUnidentified = content.isNeedsReceipt,
|
||||
serverGuid = content.serverUuid,
|
||||
isPushMessage = true,
|
||||
isPaymentsNotification = true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,14 +19,12 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil;
|
||||
import org.thoughtcrime.securesms.mms.MessageGroupContext;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
|
||||
import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public final class GroupUtil {
|
||||
|
||||
@@ -35,28 +33,6 @@ public final class GroupUtil {
|
||||
|
||||
private static final String TAG = Log.tag(GroupUtil.class);
|
||||
|
||||
/**
|
||||
* @return The group context present on the content if one exists, otherwise null.
|
||||
*/
|
||||
public static @Nullable SignalServiceGroupV2 getGroupContextIfPresent(@Nullable SignalServiceContent content) {
|
||||
if (content == null) {
|
||||
return null;
|
||||
} else if (content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
|
||||
return content.getDataMessage().get().getGroupContext().get();
|
||||
} else if (content.getSyncMessage().isPresent() &&
|
||||
content.getSyncMessage().get().getSent().isPresent() &&
|
||||
content.getSyncMessage().get().getSent().get().getDataMessage().isPresent() &&
|
||||
content.getSyncMessage().get().getSent().get().getDataMessage().get().getGroupContext().isPresent())
|
||||
{
|
||||
return content.getSyncMessage().get().getSent().get().getDataMessage().get().getGroupContext().get();
|
||||
} else if (content.getStoryMessage().isPresent() && content.getStoryMessage().get().getGroupContext().isPresent()) {
|
||||
return content.getStoryMessage().get().getGroupContext().get();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static @Nullable SignalServiceProtos.GroupContextV2 getGroupContextIfPresent(@NonNull SignalServiceProtos.Content content) {
|
||||
if (content.hasDataMessage() && SignalServiceProtoUtil.INSTANCE.getHasGroupContext(content.getDataMessage())) {
|
||||
return content.getDataMessage().getGroupV2();
|
||||
@@ -73,17 +49,6 @@ public final class GroupUtil {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Result may be a v1 or v2 GroupId.
|
||||
*/
|
||||
public static @NonNull Optional<GroupId> idFromGroupContext(@NonNull Optional<SignalServiceGroupV2> groupContext) {
|
||||
if (groupContext.isPresent()) {
|
||||
return Optional.of(GroupId.v2(groupContext.get().getMasterKey()));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public static @NonNull GroupMasterKey requireMasterKey(@NonNull byte[] masterKey) {
|
||||
try {
|
||||
return new GroupMasterKey(masterKey);
|
||||
|
||||
Reference in New Issue
Block a user