mirror of
https://github.com/AsamK/signal-cli.git
synced 2026-09-16 05:32:50 +00:00
parent
45cbe82d7f
commit
76fee5dda2
@ -293,8 +293,7 @@ public class StorageHelper {
|
||||
logger.debug("Found {} of the known-unknowns remotely.", remote.size());
|
||||
|
||||
processKnownRecords(connection, remote, identityConflictsPendingRepair);
|
||||
account.getUnknownStorageIdStore()
|
||||
.deleteUnknownStorageIds(connection, remote.stream().map(SignalStorageRecord::getId).toList());
|
||||
account.getUnknownStorageIdStore().deleteUnknownStorageIds(connection, knownUnknownIds);
|
||||
}
|
||||
connection.commit();
|
||||
} catch (SQLException e) {
|
||||
@ -317,10 +316,8 @@ public class StorageHelper {
|
||||
var idDifference = findIdDifference(remoteManifest.storageIds, localStorageIds);
|
||||
logger.debug("ID Difference :: {}", idDifference);
|
||||
|
||||
final var unknownOnlyLocal = idDifference.localOnlyIds()
|
||||
.stream()
|
||||
.filter(id -> !KNOWN_TYPES.contains(id.getType()))
|
||||
.toList();
|
||||
final var unknownStorageIds = account.getUnknownStorageIdStore().getUnknownStorageIds(connection);
|
||||
final var unknownOnlyLocal = findUnknownOnlyLocalStorageIds(idDifference.localOnlyIds(), unknownStorageIds);
|
||||
|
||||
if (!unknownOnlyLocal.isEmpty()) {
|
||||
logger.debug("Storage ids with unknown type: {} to delete", unknownOnlyLocal.size());
|
||||
@ -406,6 +403,13 @@ public class StorageHelper {
|
||||
}
|
||||
}
|
||||
|
||||
static List<StorageId> findUnknownOnlyLocalStorageIds(
|
||||
final List<StorageId> localOnlyStorageIds,
|
||||
final Set<StorageId> unknownStorageIds
|
||||
) {
|
||||
return localOnlyStorageIds.stream().filter(unknownStorageIds::contains).toList();
|
||||
}
|
||||
|
||||
static boolean containsOnlyIdentityConflictsPendingRepair(
|
||||
final WriteOperationResult writeOperation,
|
||||
final Set<StorageId> identityConflictsPendingRepair
|
||||
|
||||
@ -98,8 +98,7 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor<Signal
|
||||
) {
|
||||
return remoteIdentityKeySize > 0 && (
|
||||
statesDiffer || localIdentityKeySize == 0 || localUnregisteredAtTimestamp > 0 || (
|
||||
unrepairableIdentityKeyConflict
|
||||
&& !isPrimaryDevice
|
||||
unrepairableIdentityKeyConflict && !isPrimaryDevice
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -9,11 +9,23 @@ import org.whispersystems.signalservice.internal.storage.protos.StorageRecord;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class StorageHelperTest {
|
||||
|
||||
@Test
|
||||
void removesKnownTypeLocalOnlyIdsStoredAsUnknown() {
|
||||
final var staleStickerPackId = StorageId.forStickerPack(new byte[]{1});
|
||||
final var localContactId = StorageId.forContact(new byte[]{2});
|
||||
|
||||
final var result = StorageHelper.findUnknownOnlyLocalStorageIds(List.of(staleStickerPackId, localContactId),
|
||||
Set.of(staleStickerPackId));
|
||||
|
||||
assertEquals(List.of(staleStickerPackId), result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void defersWritesContainingOnlyIdentityConflictsPendingRepair() {
|
||||
final var pendingId = StorageId.forContact(new byte[]{1});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user