public static async void NavigateToDialog(this INavigationService service, ITLDialogWith with, int?message = null, string accessToken = null) { if (with is TLUser user && user.IsRestricted) { var reason = user.ExtractRestrictionReason(); if (reason != null) { await TLMessageDialog.ShowAsync(reason, "Sorry", "OK"); return; } } if (with is TLChannel channel && channel.IsRestricted) { var reason = channel.ExtractRestrictionReason(); if (reason != null) { await TLMessageDialog.ShowAsync(reason, "Sorry", "OK"); return; } } var peer = with.ToPeer(); if (service.CurrentPageType == typeof(DialogPage) && peer.Equals(service.CurrentPageParam)) { if (service.Frame.Content is DialogPage page && page.ViewModel != null) { if (message.HasValue) { await page.ViewModel.LoadMessageSliceAsync(null, message.Value); } if (accessToken != null) { page.ViewModel.AccessToken = accessToken; } } else { service.Refresh(TLSerializationService.Current.Serialize(peer)); } }
public static async void NavigateToDialog(this INavigationService service, ITLDialogWith with, int?message = null, string accessToken = null) { if (with == null) { return; } if (with is TLUser user && user.IsRestricted) { var reason = user.ExtractRestrictionReason(); if (reason != null) { await TLMessageDialog.ShowAsync(reason, "Sorry", "OK"); return; } } if (with is TLChannel channel) { if (channel.IsRestricted) { var reason = channel.ExtractRestrictionReason(); if (reason != null) { await TLMessageDialog.ShowAsync(reason, "Sorry", "OK"); return; } } else if ((channel.IsLeft) && !channel.HasUsername) { return; } } var peer = with.ToPeer(); if (service.CurrentPageType == typeof(DialogPage) && peer.Equals(service.CurrentPageParam)) { if (service.Frame.Content is DialogPage page && page.ViewModel != null) { if (message.HasValue) { await page.ViewModel.LoadMessageSliceAsync(null, message.Value); } if (accessToken != null) { page.ViewModel.AccessToken = accessToken; } if (App.InMemoryState.ForwardMessages != null) { page.ViewModel.Reply = new TLMessagesContainter { FwdMessages = new TLVector <TLMessage>(App.InMemoryState.ForwardMessages) }; } if (App.InMemoryState.SwitchInline != null) { var switchInlineButton = App.InMemoryState.SwitchInline; var bot = App.InMemoryState.SwitchInlineBot; page.ViewModel.SetText(string.Format("@{0} {1}", bot.Username, switchInlineButton.Query), focus: true); page.ViewModel.ResolveInlineBot(bot.Username, switchInlineButton.Query); App.InMemoryState.SwitchInline = null; App.InMemoryState.SwitchInlineBot = null; } else if (App.InMemoryState.SendMessage != null) { var text = App.InMemoryState.SendMessage; var hasUrl = App.InMemoryState.SendMessageUrl; page.ViewModel.SetText(text); if (hasUrl) { page.ViewModel.SetSelection(text.IndexOf('\n') + 1); } App.InMemoryState.SendMessage = null; App.InMemoryState.SendMessageUrl = false; } } else { service.Refresh(TLSerializationService.Current.Serialize(peer)); } }