Improve storage service migration to new field understanding

This commit is contained in:
Scott Nonnenberg 2022-01-26 15:39:25 -08:00 committed by GitHub
parent f9440bf594
commit 2603d53891
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 7 deletions

View file

@ -21,6 +21,7 @@ import { Address } from './types/Address';
import { QualifiedAddress } from './types/QualifiedAddress';
import * as log from './logging/log';
import { sleep } from './util/sleep';
import { isNotNil } from './util/isNotNil';
const MAX_MESSAGE_BODY_LENGTH = 64 * 1024;
@ -789,9 +790,11 @@ export class ConversationController {
// If it's scoped to a given conversation, it's easy to trigger('change'). There are
// important values in storage and the storage service which change rendering pretty
// radically, so this function is necessary to force regeneration of props.
async forceRerender(): Promise<void> {
async forceRerender(identifiers?: Array<string>): Promise<void> {
let count = 0;
const conversations = this._conversations.models.slice();
const conversations = identifiers
? identifiers.map(identifier => this.get(identifier)).filter(isNotNil)
: this._conversations.models.slice();
log.info(
`forceRerender: Starting to loop through ${conversations.length} conversations`
);

View file

@ -684,10 +684,8 @@ export async function startApp(): Promise<void> {
}
if (
(window.isBeforeVersion(lastVersion, 'v1.36.0-beta.1') &&
window.isAfterVersion(lastVersion, 'v1.35.0-beta.1')) ||
// 5.30 introduced understanding of new storage service AccountRecord fields
window.isBeforeVersion(lastVersion, 'v5.30.0-alpha')
window.isBeforeVersion(lastVersion, 'v1.36.0-beta.1') &&
window.isAfterVersion(lastVersion, 'v1.35.0-beta.1')
) {
await window.Signal.Services.eraseAllStorageServiceState();
}

View file

@ -2680,15 +2680,19 @@ export default class MessageReceiver
envelope: ProcessedEnvelope,
blocked: Proto.SyncMessage.IBlocked
): Promise<void> {
const allIdentifiers = [];
let changed = false;
if (blocked.numbers) {
const previous = this.storage.get('blocked', []);
log.info('handleBlocked: Blocking these numbers:', blocked.numbers);
await this.storage.put('blocked', blocked.numbers);
if (!areArraysMatchingSets(previous, blocked.numbers)) {
changed = true;
allIdentifiers.push(...previous);
allIdentifiers.push(...blocked.numbers);
}
}
if (blocked.uuids) {
@ -2701,6 +2705,8 @@ export default class MessageReceiver
if (!areArraysMatchingSets(previous, uuids)) {
changed = true;
allIdentifiers.push(...previous);
allIdentifiers.push(...blocked.uuids);
}
}
@ -2731,6 +2737,8 @@ export default class MessageReceiver
if (!areArraysMatchingSets(previous, ids)) {
changed = true;
allIdentifiers.push(...previous);
allIdentifiers.push(...ids);
}
}
@ -2738,7 +2746,8 @@ export default class MessageReceiver
if (changed) {
log.info('handleBlocked: Block list changed, forcing re-render.');
window.ConversationController.forceRerender();
const uniqueIdentifiers = Array.from(new Set(allIdentifiers));
window.ConversationController.forceRerender(uniqueIdentifiers);
}
}