diff --git a/Telegram/Services/ClientService.cs b/Telegram/Services/ClientService.cs index 266877dc2..f719c98e0 100644 --- a/Telegram/Services/ClientService.cs +++ b/Telegram/Services/ClientService.cs @@ -1448,7 +1448,7 @@ public async Task> GetMessagePropertie { var map = new Dictionary(); - foreach (var messageId in messageIds.ToArray()) + foreach (var messageId in messageIds) { var properties = await SendAsync(new GetMessageProperties(messageId.ChatId, messageId.Id)) as MessageProperties; if (properties != null) diff --git a/Telegram/ViewModels/DialogViewModel.Delegate.cs b/Telegram/ViewModels/DialogViewModel.Delegate.cs index 59feb7fbf..f44ab3cb9 100644 --- a/Telegram/ViewModels/DialogViewModel.Delegate.cs +++ b/Telegram/ViewModels/DialogViewModel.Delegate.cs @@ -595,7 +595,7 @@ public async void SendBotCommand(string command) - public async void Select(MessageViewModel message) + public void Select(MessageViewModel message) { if (message.IsService) { @@ -627,26 +627,10 @@ public async void Select(MessageViewModel message) message.SelectionChanged(); } - RaisePropertyChanged(nameof(CanCopySelectedMessage)); - RaisePropertyChanged(nameof(CanReportSelectedMessages)); - - RaisePropertyChanged(nameof(SelectedCount)); - - if (_type is DialogType.BusinessReplies) - { - CanDeleteSelectedMessages = true; - CanForwardSelectedMessages = false; - } - else - { - var properties = await ClientService.GetMessagePropertiesAsync(SelectedItems.Values.Select(x => new MessageId(x))); - - CanDeleteSelectedMessages = properties.Count > 0 && properties.Values.All(x => x.CanBeDeletedForAllUsers || x.CanBeDeletedOnlyForSelf); - CanForwardSelectedMessages = properties.Count > 0 && properties.Values.All(x => x.CanBeForwarded); - } + UpdateSelectionState(); } - public async void Unselect(MessageViewModel message, bool updateSelection = false) + public void Unselect(MessageViewModel message, bool updateSelection = false) { if (message.MediaAlbumId != 0) { @@ -678,6 +662,11 @@ public async void Unselect(MessageViewModel message, bool updateSelection = fals IsSelectionEnabled = false; } + UpdateSelectionState(); + } + + private async void UpdateSelectionState() + { RaisePropertyChanged(nameof(CanCopySelectedMessage)); RaisePropertyChanged(nameof(CanReportSelectedMessages)); @@ -690,7 +679,8 @@ public async void Unselect(MessageViewModel message, bool updateSelection = fals } else { - var properties = await ClientService.GetMessagePropertiesAsync(SelectedItems.Values.Select(x => new MessageId(x))); + var selectedItems = SelectedItems.Values.ToList(); + var properties = await ClientService.GetMessagePropertiesAsync(selectedItems.Select(x => new MessageId(x))); CanDeleteSelectedMessages = properties.Count > 0 && properties.Values.All(x => x.CanBeDeletedForAllUsers || x.CanBeDeletedOnlyForSelf); CanForwardSelectedMessages = properties.Count > 0 && properties.Values.All(x => x.CanBeForwarded); diff --git a/Telegram/ViewModels/DialogViewModel.Messages.cs b/Telegram/ViewModels/DialogViewModel.Messages.cs index e1a484d6a..b4212496b 100644 --- a/Telegram/ViewModels/DialogViewModel.Messages.cs +++ b/Telegram/ViewModels/DialogViewModel.Messages.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; using System.Text; using System.Threading.Tasks; using Telegram.Common; @@ -271,7 +270,10 @@ private async void DeleteMessages(Chat chat, IList messages) return; } - var items = messages.Select(x => x.Get()).ToArray(); + var items = messages + .DistinctBy(x => x.Id) + .Select(x => x.Get()) + .ToList(); IDictionary properties; if (_type == DialogType.BusinessReplies) @@ -287,7 +289,10 @@ private async void DeleteMessages(Chat chat, IList messages) properties = await ClientService.GetMessagePropertiesAsync(items.Select(x => new MessageId(x))); } - var updated = items.Where(x => properties.ContainsKey(new MessageId(x))).ToArray(); + var updated = items + .Where(x => properties.ContainsKey(new MessageId(x))) + .ToList(); + if (updated.Empty()) { return; diff --git a/Telegram/ViewModels/Profile/ProfileTabsViewModel.cs b/Telegram/ViewModels/Profile/ProfileTabsViewModel.cs index 43e9c25eb..ca1e36a24 100644 --- a/Telegram/ViewModels/Profile/ProfileTabsViewModel.cs +++ b/Telegram/ViewModels/Profile/ProfileTabsViewModel.cs @@ -508,10 +508,21 @@ private async void DeleteMessages(Chat chat, IList messages) return; } - var items = messages.Select(x => x.Get()).ToArray(); + var items = messages + .DistinctBy(x => x.Id) + .Select(x => x.Get()) + .ToList(); + var properties = await ClientService.GetMessagePropertiesAsync(items.Select(x => new MessageId(x))); - var updated = items.Where(x => properties.ContainsKey(new MessageId(x))).ToArray(); + var updated = items + .Where(x => properties.ContainsKey(new MessageId(x))) + .ToList(); + + if (updated.Empty()) + { + return; + } var popup = new DeleteMessagesPopup(ClientService, SavedMessagesTopicId, chat, updated, properties);