Fix case where we delete unknown remote records but also handle unknown ids.

This commit is contained in:
Clark
2023-12-14 16:26:29 -05:00
committed by Cody Henthorne
parent 7150783848
commit 52f3ff5ff6
2 changed files with 15 additions and 6 deletions

View File

@@ -331,9 +331,9 @@ public class StorageSyncJob extends BaseJob {
Log.i(TAG, "Removed " + removedUnregistered + " recipients from storage service that have been unregistered for longer than 30 days.");
}
List<StorageId> localStorageIds = getAllLocalStorageIds(self).stream().filter(it -> !it.isUnknown()).collect(Collectors.toList());
List<StorageId> localStorageIds = getAllLocalStorageIds(self);
IdDifferenceResult idDifference = StorageSyncHelper.findIdDifference(remoteManifest.getStorageIds(), localStorageIds);
List<SignalStorageRecord> remoteInserts = buildLocalStorageRecords(context, self, idDifference.getLocalOnlyIds());
List<SignalStorageRecord> remoteInserts = buildLocalStorageRecords(context, self, idDifference.getLocalOnlyIds().stream().filter(it -> !it.isUnknown()).collect(Collectors.toList()));
List<byte[]> remoteDeletes = Stream.of(idDifference.getRemoteOnlyIds()).map(StorageId::getRaw).toList();
Log.i(TAG, "ID Difference :: " + idDifference);

View File

@@ -6,6 +6,8 @@
package org.whispersystems.signalservice.api;
import com.squareup.wire.FieldEncoding;
import org.signal.libsignal.protocol.IdentityKeyPair;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.ecc.ECPublicKey;
@@ -563,10 +565,17 @@ public class SignalServiceAccountManager {
manifestRecordBuilder.identifiers(
manifest.getStorageIds().stream()
.map(id -> new ManifestRecord.Identifier.Builder()
.raw(ByteString.of(id.getRaw()))
.type(ManifestRecord.Identifier.Type.Companion.fromValue(id.getType()))
.build())
.map(id -> {
ManifestRecord.Identifier.Builder builder = new ManifestRecord.Identifier.Builder()
.raw(ByteString.of(id.getRaw()));
if (!id.isUnknown()) {
builder.type(ManifestRecord.Identifier.Type.Companion.fromValue(id.getType()));
} else {
builder.type(ManifestRecord.Identifier.Type.UNKNOWN);
builder.addUnknownField(2, FieldEncoding.VARINT, id.getType());
}
return builder.build();
})
.collect(Collectors.toList())
);