diff --git a/app/js/controllers.js b/app/js/controllers.js
index 87d08cf2..12e95f88 100644
--- a/app/js/controllers.js
+++ b/app/js/controllers.js
@@ -1797,8 +1797,37 @@ angular.module('myApp.controllers', ['myApp.i18n'])
})
}
if (selectedMessageIDs.length) {
- ErrorService.confirm({type: 'MESSAGES_DELETE', count: selectedMessageIDs.length}).then(function () {
- AppMessagesManager.deleteMessages(selectedMessageIDs).then(function () {
+ var peerID = $scope.curDialog.peerID
+ var isUser = peerID > 0
+ var isChannel = AppPeersManager.isChannel(peerID)
+ var isBroadcast = AppPeersManager.isBroadcast(peerID)
+ var isMegagroup = AppPeersManager.isMegagroup(peerID)
+ var isUsualGroup = !isChannel && !isUser
+
+ var revocable = !isChannel
+ for (var i = 0; revocable && i < selectedMessageIDs.length; i++) {
+ var messageID = selectedMessageIDs[i]
+ if (!AppMessagesManager.canRevokeMessage(messageID)) {
+ revocable = false
+ }
+ }
+
+ var userFirstName = false
+ if (isUser) {
+ userFirstName = AppUsersManager.getUser(peerID).first_name
+ }
+
+ ErrorService.confirm({
+ type: 'MESSAGES_DELETE',
+ count: selectedMessageIDs.length,
+ revocable: revocable,
+ isUser: isUser,
+ userFirstName: userFirstName,
+ isChannel: isBroadcast,
+ isSupergroup: isMegagroup,
+ isUsualGroup: isUsualGroup
+ }, {}, { revoke: false }).then(function (data) {
+ AppMessagesManager.deleteMessages(selectedMessageIDs, data.revoke).then(function () {
selectedCancel()
})
})
diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json
index 5b2fc489..ea81df2b 100644
--- a/app/js/locales/en-us.json
+++ b/app/js/locales/en-us.json
@@ -228,6 +228,11 @@
"confirm_modal_clipboard_X_files_send": "{'one': 'Are you sure to send file from clipboard?', 'other': 'Are you sure to send {} files from clipboard?'}",
"confirm_modal_message_delete": "Are you sure you want to delete the message?",
"confirm_modal_X_messages_delete": "{'one': 'Are you sure you want to delete the message?', 'other': 'Are you sure you want to delete {} messages?'}",
+ "confirm_modal_message_revoke": "Delete for {recipient}",
+ "confirm_modal_message_revoke_recipient_group": "everyone",
+ "confirm_modal_X_messages_non_configurable_for_everyone": "{'one': 'This will delete it for everyone in this chat.', 'other': 'This will delete them for everyone in this chat.'}",
+ "confirm_modal_X_messages_non_configurable_for_user_only": "{'one': 'This will delete it just for you, not for {{ userFirstName }}.', 'other': 'This will delete them just for you, not for {{ userFirstName }}.'}",
+ "confirm_modal_X_messages_non_configurable_for_user_only_in_group": "{'one': 'This will delete it just for you, not for other participants of the chat.', 'other': 'This will delete them just for you, not for other participants of the chat.'}",
"confirm_modal_photo_delete": "Are you sure you want to delete the photo?",
"confirm_modal_contacts_import": "Telegram will now sync your contacts in order to find your friends.",
"confirm_modal_login_phone_correct": "Is this phone number correct?",
diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js
index ad086d2a..c6c81ed1 100644
--- a/app/js/messages_manager.js
+++ b/app/js/messages_manager.js
@@ -957,7 +957,24 @@ angular.module('myApp.services')
})
}
- function deleteMessages (messageIDs) {
+ function canRevokeMessage(messageID) {
+ if (messageID <= 0 ||
+ !messagesStorage[messageID]) {
+ return false
+ }
+
+ var message = messagesStorage[messageID]
+ if (message._ != 'message' ||
+ message.deleted ||
+ !message.pFlags.out ||
+ message.date < tsNow(true) - 2 * 86400) {
+ return false
+ }
+
+ return true
+ }
+
+ function deleteMessages (messageIDs, revoke) {
var splitted = AppMessagesIDsManager.splitMessageIDsByChannels(messageIDs)
var promises = []
angular.forEach(splitted.msgIDs, function (msgIDs, channelID) {
@@ -995,7 +1012,12 @@ angular.module('myApp.services')
})
})
} else {
+ var flags = 0
+ if (revoke) {
+ flags |= 1
+ }
promise = MtpApiManager.invokeApi('messages.deleteMessages', {
+ flags: flags,
id: msgIDs
}).then(function (affectedMessages) {
ApiUpdatesManager.processUpdateMessage({
@@ -3392,6 +3414,7 @@ angular.module('myApp.services')
canMessageBeEdited: canMessageBeEdited,
canEditMessage: canEditMessage,
getMessageEditData: getMessageEditData,
+ canRevokeMessage: canRevokeMessage,
clearDialogCache: clearDialogCache,
wrapForDialog: wrapForDialog,
wrapForHistory: wrapForHistory,
diff --git a/app/js/services.js b/app/js/services.js
index 575e446c..e2325763 100755
--- a/app/js/services.js
+++ b/app/js/services.js
@@ -4152,10 +4152,12 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
})
}
- function confirm (params, options) {
+ function confirm (params, options, data) {
options = options || {}
+ data = data || {}
var scope = $rootScope.$new()
angular.extend(scope, params)
+ angular.extend(scope, { data: data })
var modal = $modal.open({
templateUrl: templateUrl('confirm_modal'),
diff --git a/app/less/app.less b/app/less/app.less
index 81873052..b2d9a898 100644
--- a/app/less/app.less
+++ b/app/less/app.less
@@ -741,7 +741,7 @@ a {
}
}
-a.tg_checkbox {
+a.tg_checkbox, p.tg_checkbox {
color: #000;
display: block;
line-height: 18px;
diff --git a/app/partials/desktop/confirm_modal.html b/app/partials/desktop/confirm_modal.html
index 67fb67ad..777fe531 100644
--- a/app/partials/desktop/confirm_modal.html
+++ b/app/partials/desktop/confirm_modal.html
@@ -25,6 +25,20 @@
+