Do not process story records if capability doesn't support it.
This commit is contained in:
parent
47760867d5
commit
91c581b475
3 changed files with 20 additions and 4 deletions
|
@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.util.Base64
|
|||
import org.whispersystems.signalservice.api.push.DistributionId
|
||||
import org.whispersystems.signalservice.api.storage.SignalStoryDistributionListRecord
|
||||
import org.whispersystems.signalservice.api.util.UuidUtil
|
||||
import java.lang.AssertionError
|
||||
import java.util.UUID
|
||||
|
||||
/**
|
||||
|
@ -411,10 +412,15 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si
|
|||
}
|
||||
|
||||
fun applyStorageSyncStoryDistributionListInsert(insert: SignalStoryDistributionListRecord) {
|
||||
val distributionId = DistributionId.from(UuidUtil.parseOrThrow(insert.identifier))
|
||||
if (distributionId == DistributionId.MY_STORY) {
|
||||
throw AssertionError("Should never try to insert My Story")
|
||||
}
|
||||
|
||||
createList(
|
||||
name = insert.name,
|
||||
members = insert.recipients.map(RecipientId::from),
|
||||
distributionId = DistributionId.from(UuidUtil.parseOrThrow(insert.identifier)),
|
||||
distributionId = distributionId,
|
||||
allowsReplies = insert.allowsReplies(),
|
||||
deletionTimestamp = insert.deletedAtTimestamp
|
||||
)
|
||||
|
|
|
@ -1068,14 +1068,19 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
|
|||
* @return All storage IDs for synced records, excluding the ones that need to be deleted.
|
||||
*/
|
||||
fun getContactStorageSyncIdsMap(): Map<RecipientId, StorageId> {
|
||||
val (inPart, args) = if (Recipient.self().storiesCapability == Recipient.Capability.SUPPORTED) {
|
||||
"(?, ?)" to SqlUtil.buildArgs(GroupType.NONE.id, Recipient.self().id, GroupType.SIGNAL_V1.id, GroupType.DISTRIBUTION_LIST.id)
|
||||
} else {
|
||||
"(?)" to SqlUtil.buildArgs(GroupType.NONE.id, Recipient.self().id, GroupType.SIGNAL_V1.id)
|
||||
}
|
||||
|
||||
val query = """
|
||||
$STORAGE_SERVICE_ID NOT NULL AND (
|
||||
($GROUP_TYPE = ? AND $SERVICE_ID NOT NULL AND $ID != ?)
|
||||
OR
|
||||
$GROUP_TYPE IN (?, ?)
|
||||
$GROUP_TYPE IN $inPart
|
||||
)
|
||||
""".trimIndent()
|
||||
val args = SqlUtil.buildArgs(GroupType.NONE.id, Recipient.self().id, GroupType.SIGNAL_V1.id, GroupType.DISTRIBUTION_LIST.id)
|
||||
val out: MutableMap<RecipientId, StorageId> = HashMap()
|
||||
|
||||
readableDatabase.query(TABLE_NAME, arrayOf(ID, STORAGE_SERVICE_ID, GROUP_TYPE), query, args, null, null, null).use { cursor ->
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper.WriteOperationResult
|
|||
import org.thoughtcrime.securesms.storage.StorageSyncModels;
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncValidations;
|
||||
import org.thoughtcrime.securesms.storage.StoryDistributionListRecordProcessor;
|
||||
import org.thoughtcrime.securesms.stories.Stories;
|
||||
import org.thoughtcrime.securesms.transport.RetryLaterException;
|
||||
import org.thoughtcrime.securesms.util.Stopwatch;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
|
@ -397,7 +398,10 @@ public class StorageSyncJob extends BaseJob {
|
|||
new GroupV2RecordProcessor(context).process(records.gv2, StorageSyncHelper.KEY_GENERATOR);
|
||||
self = freshSelf();
|
||||
new AccountRecordProcessor(context, self).process(records.account, StorageSyncHelper.KEY_GENERATOR);
|
||||
new StoryDistributionListRecordProcessor().process(records.storyDistributionLists, StorageSyncHelper.KEY_GENERATOR);
|
||||
|
||||
if (getKnownTypes().contains(ManifestRecord.Identifier.Type.STORY_DISTRIBUTION_LIST_VALUE)) {
|
||||
new StoryDistributionListRecordProcessor().process(records.storyDistributionLists, StorageSyncHelper.KEY_GENERATOR);
|
||||
}
|
||||
}
|
||||
|
||||
private static @NonNull List<StorageId> getAllLocalStorageIds(@NonNull Recipient self) {
|
||||
|
@ -470,6 +474,7 @@ public class StorageSyncJob extends BaseJob {
|
|||
private static List<Integer> getKnownTypes() {
|
||||
return Arrays.stream(ManifestRecord.Identifier.Type.values())
|
||||
.filter(it -> !it.equals(ManifestRecord.Identifier.Type.UNKNOWN) && !it.equals(ManifestRecord.Identifier.Type.UNRECOGNIZED))
|
||||
.filter(it -> Recipient.self().getStoriesCapability() == Recipient.Capability.SUPPORTED || !it.equals(ManifestRecord.Identifier.Type.STORY_DISTRIBUTION_LIST))
|
||||
.map(it -> it.getNumber())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue