Fix leaving legacy groups

This commit is contained in:
Eduard Kuzmenko 2021-07-18 16:41:36 +03:00
parent 1ceb45a96e
commit 522cb782ac
4 changed files with 23 additions and 10 deletions

View File

@ -23,11 +23,11 @@ export default class PopupDeleteDialog {
onSelect && onSelect(promise);
}; */
const callbackLeave = (checked: PopupPeerButtonCallbackCheckboxes) => {
const callbackLeave = (checked: PopupPeerButtonCallbackCheckboxes, flush = checkboxes && !!checked.size) => {
let promise = appChatsManager.leave(-peerId);
if(checkboxes && checked.size) {
promise = promise.then(() => {
if(flush) {
promise = promise.finally(() => {
return appMessagesManager.flushHistory(peerId);
}) as any;
}
@ -135,7 +135,7 @@ export default class PopupDeleteDialog {
buttons = [{
langKey: 'DeleteChatUser',
isDanger: true,
callback: callbackLeave
callback: (checkboxes) => callbackLeave(checkboxes, true)
}];
}

View File

@ -2007,7 +2007,7 @@ export class AppMessagesManager {
return true;
}
return this.doFlushHistory(peer, just_clear);
return this.doFlushHistory(peer, just_clear, revoke);
});
}
@ -2021,7 +2021,7 @@ export class AppMessagesManager {
const maxId = historyResult.history[0] || 0;
return apiManager.invokeApiSingle('channels.deleteHistory', {
channel: appChatsManager.getChannelInput(channelId),
max_id: maxId
max_id: this.getServerMessageId(maxId)
}).then(() => {
apiUpdatesManager.processLocalUpdate({
_: 'updateChannelAvailableMessages',
@ -2036,12 +2036,22 @@ export class AppMessagesManager {
return this.doFlushHistory(appPeersManager.getInputPeerById(peerId), justClear, revoke).then(() => {
delete this.historiesStorage[peerId];
delete this.messagesStorageByPeerId[peerId];
delete this.scheduledMessagesStorage[peerId];
delete this.threadsStorage[peerId];
delete this.searchesStorage[peerId];
delete this.pinnedMessages[peerId];
delete this.pendingAfterMsgs[peerId];
delete this.pendingTopMsgs[peerId];
delete this.needSingleMessages[peerId];
if(justClear) {
rootScope.dispatchEvent('dialog_flush', {peerId});
} else {
this.dialogsStorage.dropDialog(peerId);
delete this.notificationsToHandle[peerId];
delete this.typings[peerId];
this.reloadConversationsPeers.delete(peerId);
this.dialogsStorage.dropDialog(peerId);
rootScope.dispatchEvent('dialog_drop', {peerId});
}
});

View File

@ -483,6 +483,8 @@ export class AppStateManager extends EventListenerBase<{
if(peerId) {
this.singlePeerMap.set(type, peerId);
} else {
this.singlePeerMap.delete(type);
}
}

View File

@ -360,11 +360,12 @@ export default class DialogsStorage {
}
public dropDialog(peerId: number): [Dialog, number] | [] {
const foundDialog = this.getDialog(peerId);
const foundDialog = this.getDialog(peerId, undefined, false);
if(foundDialog[0]) {
this.byFolders[foundDialog[0].folder_id].splice(foundDialog[1], 1);
delete this.dialogs[peerId];
this.pinnedOrders[foundDialog[0].folder_id].findAndSplice(_peerId => peerId === _peerId);
this.dialogsIndex.indexObject(peerId, '');
delete this.dialogs[peerId];
// clear from state
this.appStateManager.keepPeerSingle(0, 'topMessage_' + peerId);