private ImageSource ConvertPhoto(string title, BitmapImage preview) { if (preview != null) { return(preview); } return(PlaceholderHelper.GetNameForChat(title, 64)); }
public void UpdateMessage(IProtoService protoService, INavigationService navigationService, Message message) { _protoService = protoService; _navigationService = navigationService; var caption = message.GetCaption(); if (caption == null) { return; } var text = message.Content as MessageText; var links = new List <string>(); var hasThumb = false; string title = null; string description = null; string description2 = null; string webPageLink = null; bool webPageCached = false; var webPage = text?.WebPage; if (webPage != null) { title = webPage.Title; if (string.IsNullOrEmpty(title)) { title = webPage.SiteName; } description = string.IsNullOrEmpty(webPage.Description?.Text) ? null : webPage.Description?.Text; webPageLink = webPage.Url; webPageCached = webPage.InstantViewVersion != 0; //hasThumb = webPage.HasPhoto && webPage.Photo is TLPhoto photo && photo.Thumb != null; } if (caption.Entities.Count > 0) { for (int a = 0; a < caption.Entities.Count; a++) { var entity = caption.Entities[a]; if (entity.Length <= 0 || entity.Offset < 0 || entity.Offset >= caption.Text.Length) { continue; } else if (entity.Offset + entity.Length > caption.Text.Length) { entity.Length = caption.Text.Length - entity.Offset; } if (a == 0 && webPageLink != null && !(entity.Offset == 0 && entity.Length == caption.Text.Length)) { if (caption.Entities.Count == 1) { if (description == null) { description2 = caption.Text; } } else { description2 = caption.Text; } } try { String link = null; if (entity.Type is TextEntityTypeTextUrl || entity.Type is TextEntityTypeUrl) { if (entity.Type is TextEntityTypeUrl) { link = caption.Text.Substring(entity.Offset, entity.Length); } else if (entity.Type is TextEntityTypeTextUrl textUrl) { link = textUrl.Url; } if (title == null || title.Length == 0) { title = link; var url = link; if (url.StartsWith("http") == false) { url = "http://" + url; } Uri uri = new Uri(url); title = uri.Host; if (title == null) { title = link; } int index; if (title != null && (index = title.LastIndexOf('.')) >= 0) { title = title.Substr(0, index); if ((index = title.LastIndexOf('.')) >= 0) { title = title.Substring(index + 1); } title = title.Substring(0, 1).ToUpper() + title.Substring(1); } if (entity.Offset != 0 || entity.Length != caption.Text.Length) { description = caption.Text; } } } else if (entity.Type is TextEntityTypeEmailAddress) { if (title == null || title.Length == 0) { link = "mailto:" + caption.Text.Substring(entity.Offset, entity.Length); title = caption.Text.Substring(entity.Offset, entity.Length); if (entity.Offset != 0 || entity.Length != caption.Text.Length) { description = caption.Text; } } } if (link != null) { if (link.ToLower().IndexOf("http") != 0 && link.ToLower().IndexOf("mailto") != 0) { links.Add("http://" + link); } else { links.Add(link); } } } catch (Exception e) { //FileLog.e(e); } } } if (webPageLink != null && links.Count == 0) { links.Add(webPageLink); } //if (hasThumb) //{ // Thumbnail.Visibility = Visibility.Visible; //} //else //{ // Thumbnail.Visibility = Visibility.Collapsed; //} if (title != null) { TitleLabel.Text = title.Replace('\n', ' '); TitleLabel.Visibility = Visibility.Visible; } else { TitleLabel.Visibility = Visibility.Collapsed; } if (description != null) { DescriptionLabel.Text = description; DescriptionLabel.Visibility = Visibility.Visible; } else { DescriptionLabel.Visibility = Visibility.Collapsed; } if (description2 != null) { Description2Label.Text = description2; Description2Label.Visibility = Visibility.Visible; if (description != null) { Description2Label.Margin = new Thickness(0, 8, 0, 0); } else { Description2Label.Margin = new Thickness(0); } } else { Description2Label.Visibility = Visibility.Collapsed; } LinksPanel.Children.Clear(); LinksPanel.RowDefinitions.Clear(); for (int i = 0; i < links.Count; i++) { var link = links[i]; if (MessageHelper.TryCreateUri(link, out Uri uri)) { if (Photo.Source == null) { Photo.Source = PlaceholderHelper.GetNameForChat(uri.Host, 96, uri.GetHashCode()); } var textBlock = new RichTextBlock { TextWrapping = TextWrapping.NoWrap, TextTrimming = TextTrimming.CharacterEllipsis, IsTextSelectionEnabled = false }; var paragraph = new Paragraph(); var hyperlink = new Hyperlink { UnderlineStyle = UnderlineStyle.None }; if (link == webPageLink && webPageCached) { hyperlink.Inlines.Add(new Run { Text = "\uE611", FontSize = 12, FontFamily = App.Current.Resources["TelegramThemeFontFamily"] as FontFamily }); hyperlink.Inlines.Add(new Run { Text = " \u200D" }); hyperlink.Click += (s, args) => InstantView_Click(s, link); } else { hyperlink.Click += (s, args) => Hyperlink_Click(s, uri); } hyperlink.Inlines.Add(new Run { Text = link }); paragraph.Inlines.Add(hyperlink); paragraph.Inlines.Add(new Run { Text = " " }); textBlock.Blocks.Add(paragraph); textBlock.ContextRequested += Paragraph_ContextRequested; MessageHelper.SetEntityData(hyperlink, link); ToolTipService.SetToolTip(hyperlink, link); Grid.SetRow(textBlock, i); LinksPanel.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) }); LinksPanel.Children.Add(textBlock); } } }
private void OnElementPrepared(ItemsRepeater sender, ItemsRepeaterElementPreparedEventArgs args) { var button = args.Element as Button; var result = button.DataContext as InlineQueryResult; var content = button.Content as Grid; if (content.Children[0] is Image image) { if (result is InlineQueryResultAnimation || result is InlineQueryResultPhoto || result is InlineQueryResultVideo) { File file = null; if (result is InlineQueryResultAnimation animation) { file = animation.Animation.Thumbnail?.File; } else if (result is InlineQueryResultPhoto photo) { file = photo.Photo.GetSmall().Photo; } else if (result is InlineQueryResultVideo video) { file = video.Video.Thumbnail?.File; } if (file == null) { return; } if (file.Local.IsDownloadingCompleted) { image.Source = new BitmapImage(new Uri("file:///" + file.Local.Path)); } else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive) { image.Source = null; DownloadFile(_thumbnails, file.Id, result); } } else if (result is InlineQueryResultSticker sticker) { var file = sticker.Sticker.Thumbnail.File; if (file == null) { return; } if (file.Local.IsDownloadingCompleted) { image.Source = PlaceholderHelper.GetWebPFrame(file.Local.Path); } else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive) { image.Source = null; DownloadFile(_thumbnails, file.Id, result); } } } else if (content.Children[0] is Grid presenter) { //var presenter = content.Children[0] as Grid; var thumb = presenter.Children[0] as Image; var title = content.Children[1] as TextBlock; var description = content.Children[2] as TextBlock; File file = null; Uri uri = null; if (result is InlineQueryResultArticle article) { file = article.Thumbnail?.File; title.Text = article.Title; description.Text = article.Description; } else if (result is InlineQueryResultAudio audio) { file = audio.Audio.AlbumCoverThumbnail?.File; title.Text = audio.Audio.GetTitle(); description.Text = audio.Audio.GetDuration(); } else if (result is InlineQueryResultContact contact) { file = contact.Thumbnail?.File; title.Text = contact.Contact.GetFullName(); description.Text = PhoneNumber.Format(contact.Contact.PhoneNumber); } else if (result is InlineQueryResultDocument document) { file = document.Document.Thumbnail?.File; title.Text = document.Title; if (string.IsNullOrEmpty(document.Description)) { description.Text = FileSizeConverter.Convert(document.Document.DocumentValue.Size); } else { description.Text = document.Description; } } else if (result is InlineQueryResultGame game) { file = game.Game.Animation?.Thumbnail?.File ?? game.Game.Photo.GetSmall().Photo; title.Text = game.Game.Title; description.Text = game.Game.Description; } else if (result is InlineQueryResultLocation location) { var latitude = location.Location.Latitude.ToString(CultureInfo.InvariantCulture); var longitude = location.Location.Longitude.ToString(CultureInfo.InvariantCulture); uri = new Uri(string.Format("https://dev.virtualearth.net/REST/v1/Imagery/Map/Road/{0},{1}/{2}?mapSize={3}&key=FgqXCsfOQmAn9NRf4YJ2~61a_LaBcS6soQpuLCjgo3g~Ah_T2wZTc8WqNe9a_yzjeoa5X00x4VJeeKH48wAO1zWJMtWg6qN-u4Zn9cmrOPcL", latitude, longitude, 15, "96,96")); file = location.Thumbnail?.File; title.Text = location.Title; description.Text = $"{location.Location.Latitude};{location.Location.Longitude}"; } else if (result is InlineQueryResultPhoto photo) { file = photo.Photo.GetSmall().Photo; title.Text = photo.Title; description.Text = photo.Description; } else if (result is InlineQueryResultVenue venue) { var latitude = venue.Venue.Location.Latitude.ToString(CultureInfo.InvariantCulture); var longitude = venue.Venue.Location.Longitude.ToString(CultureInfo.InvariantCulture); uri = new Uri(string.Format("https://dev.virtualearth.net/REST/v1/Imagery/Map/Road/{0},{1}/{2}?mapSize={3}&key=FgqXCsfOQmAn9NRf4YJ2~61a_LaBcS6soQpuLCjgo3g~Ah_T2wZTc8WqNe9a_yzjeoa5X00x4VJeeKH48wAO1zWJMtWg6qN-u4Zn9cmrOPcL", latitude, longitude, 15, "96,96")); file = venue.Thumbnail?.File; title.Text = venue.Venue.Title; description.Text = venue.Venue.Address; } else if (result is InlineQueryResultVideo video) { file = video.Video.Thumbnail?.File; title.Text = video.Title; description.Text = video.Description; } else if (result is InlineQueryResultVoiceNote voiceNote) { title.Text = voiceNote.Title; description.Text = voiceNote.VoiceNote.GetDuration(); } if (file != null) { if (file.Local.IsDownloadingCompleted) { thumb.Source = new BitmapImage(new Uri("file:///" + file.Local.Path)); } else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive) { thumb.Source = null; DownloadFile(_thumbnails, file.Id, result); } } else if (uri != null) { thumb.Source = new BitmapImage(uri); } else { thumb.Source = PlaceholderHelper.GetNameForChat(title.Text, 96, title.Text.GetHashCode()); } } }