Make sure isPinned is in sync with storage service

This commit is contained in:
Fedor Indutny 2022-02-02 17:21:02 -08:00 committed by GitHub
parent 40983ca73e
commit 891e72a260
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 8 deletions

View file

@ -832,6 +832,25 @@ export class ConversationController {
this.get(conversationId)?.onOpenComplete(loadStart);
}
repairPinnedConversations(): void {
const pinnedIds = window.storage.get('pinnedConversationIds', []);
for (const id of pinnedIds) {
const convo = this.get(id);
if (!convo || convo.get('isPinned')) {
continue;
}
log.warn(
`ConversationController: Repairing ${convo.idForLogging()}'s isPinned`
);
convo.set('isPinned', true);
window.Signal.Data.updateConversation(convo.attributes);
}
}
private async doLoad(): Promise<void> {
log.info('ConversationController: starting initial fetch');

View file

@ -459,6 +459,7 @@ export async function startApp(): Promise<void> {
log.info('environment:', window.getEnvironment());
let newVersion = false;
let lastVersion: string | undefined;
window.document.title = window.getTitle();
@ -640,7 +641,7 @@ export async function startApp(): Promise<void> {
);
const currentVersion = window.getVersion();
const lastVersion = window.storage.get('version');
lastVersion = window.storage.get('version');
newVersion = !lastVersion || currentVersion !== lastVersion;
await window.storage.put('version', currentVersion);
@ -1679,6 +1680,12 @@ export async function startApp(): Promise<void> {
}
}
if (newVersion && lastVersion) {
if (window.isBeforeVersion(lastVersion, 'v5.31.0')) {
window.ConversationController.repairPinnedConversations();
}
}
window.dispatchEvent(new Event('storage_ready'));
badgeImageFileDownloader.checkForFilesToDownload();

View file

@ -4159,9 +4159,7 @@ export class ConversationModel extends window.Backbone
if (Boolean(before) !== Boolean(after)) {
if (after) {
// we're capturing a storage sync below so
// we don't need to capture it twice
this.unpin({ stopStorageSync: true });
this.unpin();
}
this.captureChange('isArchived');
}
@ -5274,7 +5272,7 @@ export class ConversationModel extends window.Backbone
window.Signal.Data.updateConversation(this.attributes);
}
unpin({ stopStorageSync = false } = {}): void {
unpin(): void {
if (!this.get('isPinned')) {
return;
}
@ -5287,9 +5285,7 @@ export class ConversationModel extends window.Backbone
pinnedConversationIds.delete(this.id);
if (!stopStorageSync) {
this.writePinnedConversations([...pinnedConversationIds]);
}
this.writePinnedConversations([...pinnedConversationIds]);
this.set('isPinned', false);
window.Signal.Data.updateConversation(this.attributes);