mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 07:38:33 +00:00
Add network constraint to GV2 messages.
This commit is contained in:
parent
7894f72b0f
commit
d726da822c
@ -133,6 +133,22 @@ public final class GroupDatabase extends Database {
|
|||||||
return Optional.fromNullable(reader.getCurrent());
|
return Optional.fromNullable(reader.getCurrent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return local db group revision or -1 if not present.
|
||||||
|
*/
|
||||||
|
public int getGroupV2Revision(@NonNull GroupId.V2 groupId) {
|
||||||
|
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
|
||||||
|
new String[] {groupId.toString()},
|
||||||
|
null, null, null))
|
||||||
|
{
|
||||||
|
if (cursor != null && cursor.moveToNext()) {
|
||||||
|
return cursor.getInt(cursor.getColumnIndexOrThrow(V2_REVISION));
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call if you are sure this group should exist.
|
* Call if you are sure this group should exist.
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -56,6 +56,7 @@ import org.thoughtcrime.securesms.groups.GroupV1MessageProcessor;
|
|||||||
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.JobManager;
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||||
import org.thoughtcrime.securesms.linkpreview.Link;
|
import org.thoughtcrime.securesms.linkpreview.Link;
|
||||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||||
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
||||||
@ -132,6 +133,7 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class PushProcessMessageJob extends BaseJob {
|
public final class PushProcessMessageJob extends BaseJob {
|
||||||
|
|
||||||
@ -193,11 +195,7 @@ public final class PushProcessMessageJob extends BaseJob {
|
|||||||
long smsMessageId,
|
long smsMessageId,
|
||||||
long timestamp)
|
long timestamp)
|
||||||
{
|
{
|
||||||
this(new Parameters.Builder()
|
this(createParameters(content, exceptionMetadata),
|
||||||
.setQueue(buildQueue(content, exceptionMetadata))
|
|
||||||
.setMaxAttempts(Parameters.UNLIMITED)
|
|
||||||
// TODO [Alan] GV2 add network constraint and split queues.
|
|
||||||
.build(),
|
|
||||||
messageState,
|
messageState,
|
||||||
content,
|
content,
|
||||||
exceptionMetadata,
|
exceptionMetadata,
|
||||||
@ -225,30 +223,45 @@ public final class PushProcessMessageJob extends BaseJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
private static @NonNull String buildQueue(@Nullable SignalServiceContent content, @Nullable ExceptionMetadata exceptionMetadata) {
|
private static @NonNull Parameters createParameters(@Nullable SignalServiceContent content, @Nullable ExceptionMetadata exceptionMetadata) {
|
||||||
Context context = ApplicationDependencies.getApplication();
|
Context context = ApplicationDependencies.getApplication();
|
||||||
String suffix = "";
|
String queueSuffix = "";
|
||||||
|
Parameters.Builder builder = new Parameters.Builder()
|
||||||
|
.setMaxAttempts(Parameters.UNLIMITED);
|
||||||
|
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
if (content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
|
if (content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
|
||||||
try {
|
try {
|
||||||
GroupId groupId = GroupUtil.idFromGroupContext(content.getDataMessage().get().getGroupContext().get());
|
SignalServiceGroupContext signalServiceGroupContext = content.getDataMessage().get().getGroupContext().get();
|
||||||
Recipient recipient = Recipient.externalGroup(context, groupId);
|
GroupId groupId = GroupUtil.idFromGroupContext(signalServiceGroupContext);
|
||||||
|
Recipient recipient = Recipient.externalGroup(context, groupId);
|
||||||
|
|
||||||
suffix = recipient.getId().toQueueKey();
|
queueSuffix = recipient.getId().toQueueKey();
|
||||||
|
|
||||||
|
if (groupId.isV2()) {
|
||||||
|
int localRevision = DatabaseFactory.getGroupDatabase(context)
|
||||||
|
.getGroupV2Revision(groupId.requireV2());
|
||||||
|
|
||||||
|
if (signalServiceGroupContext.getGroupV2().get().getRevision() > localRevision) {
|
||||||
|
builder.addConstraint(NetworkConstraint.KEY)
|
||||||
|
.setLifespan(TimeUnit.DAYS.toMillis(30));
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (BadGroupIdException e) {
|
} catch (BadGroupIdException e) {
|
||||||
Log.w(TAG, "Bad groupId! Using default queue.");
|
Log.w(TAG, "Bad groupId! Using default queue.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
suffix = RecipientId.from(content.getSender()).toQueueKey();
|
queueSuffix = RecipientId.from(content.getSender()).toQueueKey();
|
||||||
}
|
}
|
||||||
} else if (exceptionMetadata != null) {
|
} else if (exceptionMetadata != null) {
|
||||||
Recipient recipient = exceptionMetadata.groupId != null ? Recipient.externalGroup(context, exceptionMetadata.groupId)
|
Recipient recipient = exceptionMetadata.groupId != null ? Recipient.externalGroup(context, exceptionMetadata.groupId)
|
||||||
: Recipient.external(context, exceptionMetadata.sender);
|
: Recipient.external(context, exceptionMetadata.sender);
|
||||||
suffix = recipient.getId().toQueueKey();
|
queueSuffix = recipient.getId().toQueueKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
return QUEUE_PREFIX + suffix;
|
builder.setQueue(QUEUE_PREFIX + queueSuffix);
|
||||||
|
|
||||||
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user