Clean up transitional pinned chats

This commit is contained in:
Sidney Keese 2020-11-09 10:30:05 -08:00 committed by GitHub
parent bba9df3149
commit 4d95f83007
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 14 additions and 42 deletions

View file

@ -744,37 +744,4 @@ export class ConversationController {
return this._initialPromise; return this._initialPromise;
} }
getPinnedConversationIds(): Array<string> {
let pinnedConversationIds = window.storage.get<Array<string>>(
'pinnedConversationIds'
);
// If pinnedConversationIds is missing, we're upgrading from
// a previous version and need to backfill storage from pinned
// conversation models.
if (pinnedConversationIds === undefined) {
window.log.info(
'getPinnedConversationIds: no pinned conversations in storage'
);
const modelPinnedConversationIds = this._conversations
.filter(conversation => conversation.get('isPinned'))
// pinIndex is a deprecated field. We now rely on the order of
// the ids in storage, which is synced with the AccountRecord.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
.sort((a, b) => (a.get('pinIndex') || 0) - (b.get('pinIndex') || 0))
.map(conversation => conversation.get('id'));
window.log.info(
`getPinnedConversationIds: falling back to ${modelPinnedConversationIds.length} pinned models`
);
window.storage.put('pinnedConversationIds', modelPinnedConversationIds);
pinnedConversationIds = modelPinnedConversationIds;
}
return pinnedConversationIds;
}
} }

View file

@ -606,9 +606,9 @@ export async function mergeAccountRecord(
conversation => conversation.get('id') conversation => conversation.get('id')
); );
const missingStoragePinnedConversationIds = window.ConversationController.getPinnedConversationIds().filter( const missingStoragePinnedConversationIds = window.storage
id => !modelPinnedConversationIds.includes(id) .get<Array<string>>('pinnedConversationIds', [])
); .filter(id => !modelPinnedConversationIds.includes(id));
if (missingStoragePinnedConversationIds.length !== 0) { if (missingStoragePinnedConversationIds.length !== 0) {
window.log.info( window.log.info(

View file

@ -162,7 +162,10 @@ export const _getLeftPaneLists = (
conversations.sort(comparator); conversations.sort(comparator);
archivedConversations.sort(comparator); archivedConversations.sort(comparator);
const pinnedConversationIds = window.ConversationController.getPinnedConversationIds(); const pinnedConversationIds = window.storage.get<Array<string>>(
'pinnedConversationIds',
[]
);
pinnedConversations.sort( pinnedConversations.sort(
(a, b) => (a, b) =>
pinnedConversationIds.indexOf(a.id) - pinnedConversationIds.indexOf(b.id) pinnedConversationIds.indexOf(a.id) - pinnedConversationIds.indexOf(b.id)

View file

@ -18,8 +18,8 @@ describe('state/selectors/conversations', () => {
this.oldWindow = globalAsAny.window; this.oldWindow = globalAsAny.window;
globalAsAny.window = {}; globalAsAny.window = {};
window.ConversationController = { window.storage = {
getPinnedConversationIds: sinon.stub().returns([]), get: sinon.stub().returns([]),
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
} as any; } as any;
}); });
@ -173,8 +173,7 @@ describe('state/selectors/conversations', () => {
describe('given pinned conversations', () => { describe('given pinned conversations', () => {
beforeEach(() => { beforeEach(() => {
(window.ConversationController (window.storage.get as sinon.SinonStub).returns([
.getPinnedConversationIds as sinon.SinonStub).returns([
'pin1', 'pin1',
'pin2', 'pin2',
'pin3', 'pin3',

View file

@ -425,7 +425,10 @@ Whisper.ConversationView = Whisper.View.extend({
setPin(value: boolean) { setPin(value: boolean) {
if (value) { if (value) {
const pinnedConversationIds = window.ConversationController.getPinnedConversationIds(); const pinnedConversationIds = window.storage.get<Array<string>>(
'pinnedConversationIds',
[]
);
if (pinnedConversationIds.length >= 4) { if (pinnedConversationIds.length >= 4) {
this.showToast(Whisper.PinnedConversationsFullToast); this.showToast(Whisper.PinnedConversationsFullToast);