public async void DeleteMessages(TLMessageBase lastItem, IList <TLMessageBase> localMessages, IList <TLMessageBase> remoteMessages, bool revoke, Action <TLMessageBase, IList <TLMessageBase> > localCallback = null, Action <TLMessageBase, IList <TLMessageBase> > remoteCallback = null) { if (localMessages != null && localMessages.Count > 0) { localCallback?.Invoke(lastItem, localMessages); } if (remoteMessages != null && remoteMessages.Count > 0) { var messages = new TLVector <int>(remoteMessages.Select(x => x.Id).ToList()); Task <MTProtoResponse <TLMessagesAffectedMessages> > task; if (Peer is TLInputPeerChannel) { task = ProtoService.DeleteMessagesAsync(new TLInputChannel { ChannelId = ((TLInputPeerChannel)Peer).ChannelId, AccessHash = ((TLInputPeerChannel)Peer).AccessHash }, messages); } else { task = ProtoService.DeleteMessagesAsync(messages, revoke); } var response = await task; if (response.IsSucceeded) { remoteCallback?.Invoke(lastItem, remoteMessages); } } }
private async void CallDeleteExecute(TLCallGroup group) { var confirm = await TLMessageDialog.ShowAsync(Strings.Android.ConfirmDeleteCallLog, Strings.Android.AppName, Strings.Android.OK, Strings.Android.Cancel); if (confirm != ContentDialogResult.Primary) { return; } var messages = new TLVector <int>(group.Items.Select(x => x.Id).ToList()); Task <MTProtoResponse <TLMessagesAffectedMessages> > task; var peer = group.Message.Parent.ToInputPeer(); if (peer is TLInputPeerChannel channelPeer) { task = ProtoService.DeleteMessagesAsync(new TLInputChannel { ChannelId = channelPeer.ChannelId, AccessHash = channelPeer.AccessHash }, messages); } else { task = ProtoService.DeleteMessagesAsync(messages, false); } var response = await task; if (response.IsSucceeded) { var cachedMessages = new TLVector <long>(); var remoteMessages = new TLVector <int>(); for (int i = 0; i < messages.Count; i++) { if (group.Items[i].RandomId.HasValue && group.Items[i].RandomId != 0L) { cachedMessages.Add(group.Items[i].RandomId.Value); } if (group.Items[i].Id > 0) { remoteMessages.Add(group.Items[i].Id); } } CacheService.DeleteMessages(peer.ToPeer(), null, remoteMessages); CacheService.DeleteMessages(cachedMessages); Items.Remove(group); } }