public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var str = value as string;

            if (String.IsNullOrEmpty(str))
            {
                return(new TextBlock());
            }

            var text = new TextBlock {
                TextWrapping = TextWrapping.Wrap
            };

            HtmlParser.AppendTo(text, str.MakeLinksClickableIncludingMailto());

            return(text);
        }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var message = (Message)value;

            var text = new TextBlock {
                TextWrapping = TextWrapping.Wrap, Style = (Style)Application.Current.FindResource("TextBlockContentForegroundStyle")
            };

            if (String.IsNullOrEmpty(message.BodyPreview))
            {
                text.Inlines.Add(new TextBlock {
                    Text = Strings.MessageHasNoBody, FontStyle = FontStyles.Italic
                });
            }
            else
            {
                HtmlParser.AppendTo(text, message.BodyPreview.MakeLinksClickableIncludingMailto());
            }

            return(text);
        }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var status = (UserStatus)value;

            var channel = status.SourceChannel ?? ChannelsManager.Channels.First(c => c.Configuration.DisplayName == "Twitter").Configuration;

            var profileuri = channel.ProfileInfoBuilder.BuildServiceProfileUrl(status.From);
            Uri uri        = Uri.IsWellFormedUriString(profileuri, UriKind.Absolute) ? new Uri(profileuri) : new Uri("http://www.google.com");

            var sender = new WebHyperlink {
                NavigateUri = uri, FontWeight = FontWeights.Bold, Style = (Style)Application.Current.FindResource("TitleNameHyperlink")
            };

            sender.Inlines.Add(new Run(status.From.DisplayName));

            var text = new TextBlock {
                TextWrapping = TextWrapping.Wrap, Foreground = (Brush)Application.Current.FindResource("SlightlyDimmedForegroundColor")
            };

            text.Inlines.Add(sender);
            text.Inlines.Add(" ");

            if (status.To != null)
            {
                var toProfileuri = channel.ProfileInfoBuilder.BuildServiceProfileUrl(status.To);
                Uri toUri        = Uri.IsWellFormedUriString(toProfileuri, UriKind.Absolute) ? new Uri(toProfileuri) : new Uri("http://www.google.com");

                var recipient = new WebHyperlink {
                    NavigateUri = toUri, FontWeight = FontWeights.Bold, Style = (Style)Application.Current.FindResource("TitleNameHyperlink")
                };
                recipient.Inlines.Add(new Run(status.To.DisplayName));

                text.Inlines.Add(" » ");
                text.Inlines.Add(recipient);
                text.Inlines.Add(" ");
            }

            var source = status.Status.MakeLinksClickableIncludingMailto();

            if (channel.DisplayName == "Twitter")
            {
                source = source.MakeTwitterLinksClickable();
            }

            HtmlParser.AppendTo(text, source);

            foreach (var inline in text.Inlines)
            {
                // Attach markread handler to status updates
                if (inline is Hyperlink)
                {
                    (inline as Hyperlink).Click += delegate { status.TrackAction(ActionType.Read); }
                }
                ;
            }

            text.Inlines.Add("\n");
            text.Inlines.Add(new TextBlock {
                Text = status.SortDate.ToRelativeTime(), Opacity = 0.35, Style = (Style)Application.Current.FindResource("NormalTextBlock")
            });

            return(text);
        }