Clean up transitional pinned chats
This commit is contained in:
parent
bba9df3149
commit
4d95f83007
5 changed files with 14 additions and 42 deletions
|
@ -744,37 +744,4 @@ export class ConversationController {
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -606,9 +606,9 @@ export async function mergeAccountRecord(
|
|||
conversation => conversation.get('id')
|
||||
);
|
||||
|
||||
const missingStoragePinnedConversationIds = window.ConversationController.getPinnedConversationIds().filter(
|
||||
id => !modelPinnedConversationIds.includes(id)
|
||||
);
|
||||
const missingStoragePinnedConversationIds = window.storage
|
||||
.get<Array<string>>('pinnedConversationIds', [])
|
||||
.filter(id => !modelPinnedConversationIds.includes(id));
|
||||
|
||||
if (missingStoragePinnedConversationIds.length !== 0) {
|
||||
window.log.info(
|
||||
|
|
|
@ -162,7 +162,10 @@ export const _getLeftPaneLists = (
|
|||
conversations.sort(comparator);
|
||||
archivedConversations.sort(comparator);
|
||||
|
||||
const pinnedConversationIds = window.ConversationController.getPinnedConversationIds();
|
||||
const pinnedConversationIds = window.storage.get<Array<string>>(
|
||||
'pinnedConversationIds',
|
||||
[]
|
||||
);
|
||||
pinnedConversations.sort(
|
||||
(a, b) =>
|
||||
pinnedConversationIds.indexOf(a.id) - pinnedConversationIds.indexOf(b.id)
|
||||
|
|
|
@ -18,8 +18,8 @@ describe('state/selectors/conversations', () => {
|
|||
this.oldWindow = globalAsAny.window;
|
||||
globalAsAny.window = {};
|
||||
|
||||
window.ConversationController = {
|
||||
getPinnedConversationIds: sinon.stub().returns([]),
|
||||
window.storage = {
|
||||
get: sinon.stub().returns([]),
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
} as any;
|
||||
});
|
||||
|
@ -173,8 +173,7 @@ describe('state/selectors/conversations', () => {
|
|||
|
||||
describe('given pinned conversations', () => {
|
||||
beforeEach(() => {
|
||||
(window.ConversationController
|
||||
.getPinnedConversationIds as sinon.SinonStub).returns([
|
||||
(window.storage.get as sinon.SinonStub).returns([
|
||||
'pin1',
|
||||
'pin2',
|
||||
'pin3',
|
||||
|
|
|
@ -425,7 +425,10 @@ Whisper.ConversationView = Whisper.View.extend({
|
|||
|
||||
setPin(value: boolean) {
|
||||
if (value) {
|
||||
const pinnedConversationIds = window.ConversationController.getPinnedConversationIds();
|
||||
const pinnedConversationIds = window.storage.get<Array<string>>(
|
||||
'pinnedConversationIds',
|
||||
[]
|
||||
);
|
||||
|
||||
if (pinnedConversationIds.length >= 4) {
|
||||
this.showToast(Whisper.PinnedConversationsFullToast);
|
||||
|
|
Loading…
Add table
Reference in a new issue