private async void ParticipantRemoveExecute(TLChatParticipantBase participant) { if (participant == null || participant.User == null) { return; } var confirm = await TLMessageDialog.ShowAsync(string.Format("Do you want to remove {0} from the group {1}?", participant.User.FullName, _item.DisplayName), "Remove", "OK", "Cancel"); if (confirm == ContentDialogResult.Primary) { var response = await ProtoService.DeleteChatUserAsync(_item.Id, participant.User.ToInputUser()); if (response.IsSucceeded) { if (response.Result is TLUpdates updates) { var newMessage = updates.Updates.OfType <TLUpdateNewMessage>().FirstOrDefault(); if (newMessage != null) { Aggregator.Publish(newMessage); } } } } }
private async void DeleteExecute() { var item = _item; if (item == null) { return; } var confirm = await TLMessageDialog.ShowAsync(Strings.Android.AreYouSureDeleteAndExit, Strings.Android.AppName, Strings.Android.OK, Strings.Android.Cancel); if (confirm == ContentDialogResult.Primary) { if (item.IsLeft || item.HasMigratedTo) { goto Skip; } var delete = await ProtoService.DeleteChatUserAsync(item.Id, new TLInputUserSelf()); if (delete.IsSucceeded) { } else { await new TLMessageDialog(delete.Error.ErrorMessage ?? "Error message", delete.Error.ErrorCode.ToString()).ShowQueuedAsync(); return; } Skip: var peer = item.ToInputPeer(); var offset = 0; do { var response = await ProtoService.DeleteHistoryAsync(false, peer, 0); if (response.IsSucceeded) { offset = response.Result.Offset; } else { await new TLMessageDialog(response.Error.ErrorMessage ?? "Error message", response.Error.ErrorCode.ToString()).ShowQueuedAsync(); return; } }while (offset > 0); var dialog = CacheService.GetDialog(item.ToPeer()); if (dialog != null) { CacheService.DeleteDialog(dialog); Aggregator.Publish(new DialogRemovedEventArgs(dialog)); } NavigationService.RemovePeerFromStack(item.ToPeer()); } }