From d1b8461b54c281f9e60735dd62ea04c3be4ca6ad Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Thu, 12 Nov 2020 04:11:43 +0200 Subject: [PATCH] Fix delete rights --- src/components/popupDeleteMessages.ts | 47 +++++++++++++++++++---- src/lib/appManagers/appMessagesManager.ts | 11 +++--- src/scss/partials/_leftSidebar.scss | 4 +- src/scss/partials/popups/_peer.scss | 1 + 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/components/popupDeleteMessages.ts b/src/components/popupDeleteMessages.ts index 55617f58..2505418b 100644 --- a/src/components/popupDeleteMessages.ts +++ b/src/components/popupDeleteMessages.ts @@ -17,7 +17,7 @@ export default class PopupDeleteMessages { }; let title: string, description: string, buttons: PopupButton[]; - title = `Delete Message${mids.length == 1 ? '' : 's'}?`; + title = `Delete ${mids.length == 1 ? '' : mids.length + ' '}Message${mids.length == 1 ? '' : 's'}?`; description = `Are you sure you want to delete ${mids.length == 1 ? 'this message' : 'these messages'}?`; if(peerID == $rootScope.myID) { @@ -39,12 +39,45 @@ export default class PopupDeleteMessages { isDanger: true, callback: () => callback(true) }); - } else if(appChatsManager.hasRights(-peerID, 'deleteRevoke')) { - buttons.push({ - text: 'DELETE FOR ALL', - isDanger: true, - callback: () => callback(true) - }); + } else { + const chat = appChatsManager.getChat(-peerID); + + const hasRights = appChatsManager.hasRights(-peerID, 'deleteRevoke'); + if(chat._ == 'chat') { + const canRevoke = hasRights ? mids.slice() : mids.filter(mid => { + const message = appMessagesManager.getMessage(mid); + return message.fromID == $rootScope.myID; + }); + + if(canRevoke.length) { + if(canRevoke.length == mids.length) { + buttons.push({ + text: 'DELETE FOR ALL', + isDanger: true, + callback: () => callback(true) + }); + } else { + const buttonText = 'Unsend my and delete'; + buttons.push({ + text: buttonText, + isDanger: true, + callback: () => callback(true) + }); + + description = `You can also delete the ${canRevoke.length} message${canRevoke.length > 1 ? 's' : ''} you sent from the inboxes of other group members by pressing "${buttonText}".`; + } + } + } else { + if(!hasRights || appChatsManager.isBroadcast(-peerID)) { + buttons.shift(); + } + + buttons.push({ + text: 'DELETE FOR ALL', + isDanger: true, + callback: () => callback(true) + }); + } } } diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 4ebf7a12..ba51d838 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -2392,11 +2392,12 @@ export class AppMessagesManager { public canDeleteMessage(messageID: number) { const message = this.messagesStorage[messageID]; - if(message) { - return message.peerID > 0 || message.fromID == $rootScope.myID || appChatsManager.hasRights(message.peerID, 'deleteRevoke'); - } else { - return false; - } + return message && ( + message.peerID > 0 + || message.fromID == $rootScope.myID + || appChatsManager.getChat(message.peerID)._ == 'chat' + || appChatsManager.hasRights(message.peerID, 'deleteRevoke') + ); } public applyConversations(dialogsResult: MessagesPeerDialogs.messagesPeerDialogs) { diff --git a/src/scss/partials/_leftSidebar.scss b/src/scss/partials/_leftSidebar.scss index ccde07e0..a8a728f1 100644 --- a/src/scss/partials/_leftSidebar.scss +++ b/src/scss/partials/_leftSidebar.scss @@ -557,8 +557,8 @@ } avatar-element { - height: 32px; - width: 32px; + height: 2rem; + width: 2rem; font-size: .875rem; } diff --git a/src/scss/partials/popups/_peer.scss b/src/scss/partials/popups/_peer.scss index a047cdc4..bbb5c273 100644 --- a/src/scss/partials/popups/_peer.scss +++ b/src/scss/partials/popups/_peer.scss @@ -48,5 +48,6 @@ .peer-avatar { height: 2rem; width: 2rem; + font-size: .875rem; } } \ No newline at end of file