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;
|
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')
|
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(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue