private void loadPreview(string pageUrl, PreviewType type) { string htmlCode = new WebClient().DownloadString(pageUrl); string title = FormatString(Regex.Match(htmlCode, @"\<title\>([^>]+)\<\/title\>").Groups[1].Value); string imageUrl = ""; switch (type) { case PreviewType.Youtube: imageUrl = YouTubePreview(pageUrl); break; case PreviewType.Viemo: imageUrl = ViemoPreview(pageUrl); break; case PreviewType.DailyMotion: imageUrl = DailyMotionPreview(pageUrl); break; case PreviewType.Flickr: imageUrl = FlickrPreview(pageUrl); break; //case PreviewType.Picasa: // ImageUrl = PicasaPreview(pageUrl); // break; case PreviewType.JPEG: case PreviewType.PNG: case PreviewType.BMP: case PreviewType.GIF: imageUrl = ImagePreview(pageUrl); break; } Dispatcher.BeginInvoke(new Action(delegate() { Hyperlink hyperlink = new Hyperlink(); hyperlink.NavigateUri = new Uri(pageUrl); hyperlink.Inlines.Add((title == String.Empty) ? pageUrl.Split('/').Last() : title); hyperlink.ToolTip = ("Go to: " + pageUrl); hyperlink.Click += hyperlink_Click; ContextMenu contextMenu = new ContextMenu(); MenuItemWithLink internalBrowser = new MenuItemWithLink(); internalBrowser.hyperlink = hyperlink; internalBrowser.Header = "Internal Browser"; internalBrowser.Click += internalBrowser_Click; MenuItemWithLink externalBrowser = new MenuItemWithLink(); externalBrowser.hyperlink = hyperlink; externalBrowser.Header = "External Browser"; externalBrowser.Click += externalBrowser_Click; contextMenu.Items.Add(internalBrowser); contextMenu.Items.Add(externalBrowser); hyperlink.ContextMenu = contextMenu; PreviewTitle.Inlines.Add(hyperlink); PreviewImage.Source = new BitmapImage(new Uri(imageUrl)); })); }
/// <summary> /// Constructor. /// </summary> /// <param name="post">Post to be showed by this interface.</param> internal UIPost(WPost post, Boolean enableProfileRedirect) { Contract.Requires(post != null); InitializeComponent(); _post = post; _enableProfileRedirect = enableProfileRedirect; if (String.IsNullOrEmpty(_post.User.Avatar)) AvatarImage.InternalImage.Source = new BitmapImage(new Uri("pack://*****:*****@"http")) { //last element of words array is always "http:/…" if (!words[i].Equals("http:/…")) { Hyperlink hyperlink = new Hyperlink(); hyperlink.Inlines.Add(words[i]); hyperlink.NavigateUri = new Uri(words[i]); hyperlink.ToolTip = ("Go to: " + words[i]); hyperlink.Click += hyperlink_Click; ContextMenu contextMenu = new ContextMenu(); MenuItemWithLink internalBrowser = new MenuItemWithLink(); internalBrowser.hyperlink = hyperlink; internalBrowser.Header = "Internal Browser"; internalBrowser.Click += internalBrowser_Click; MenuItemWithLink externalBrowser = new MenuItemWithLink(); externalBrowser.hyperlink = hyperlink; externalBrowser.Header = "External Browser"; externalBrowser.Click += externalBrowser_Click; contextMenu.Items.Add(internalBrowser); contextMenu.Items.Add(externalBrowser); hyperlink.ContextMenu = contextMenu; TextTextBlock.Inlines.Add(hyperlink); TextTextBlock.Inlines.Add(" "); } string link = words[i]; ThreadStart starter = delegate { try { checkMediaContent(link); } catch (Exception ex) { log.Error(ex.Message, ex); } }; Thread previewThread = new Thread(starter); previewThread.Name = "Preview"; previewThread.Start(); } else { TextTextBlock.Inlines.Add(words[i]); TextTextBlock.Inlines.Add(" "); } } TimeSpan difference = DateTime.UtcNow - _post.CreateAt; if (DateTime.Now.Hour < _post.CreateAt.Hour) difference += new TimeSpan(1, 0, 0, 0); if (difference.Days > 30) TimeSourceTextBlock.Text = "more than a month ago"; else if (difference.Days > 1 && difference.Days <= 30) TimeSourceTextBlock.Text = "about " + difference.Days + " days ago"; else if (difference.Days == 1) TimeSourceTextBlock.Text = "about a day ago"; else { if (difference.Hours > 1) TimeSourceTextBlock.Text = "about " + difference.Hours + " hours ago"; else if (difference.Hours == 1) TimeSourceTextBlock.Text = "about an hour ago"; else { if (difference.Minutes > 1) TimeSourceTextBlock.Text = "about " + difference.Minutes + " minutes ago"; else if (difference.Minutes == 1) TimeSourceTextBlock.Text = "about a minute ago"; else TimeSourceTextBlock.Text = "a few seconds ago"; } } TimeSourceTextBlock.Text += " from " + _post.Service.Name; }