public void Process(TimelineItemContainer timelineItemContainer) { foreach (var expander in _urlExpanders) { foreach (var uri in GetShortUrls(timelineItemContainer)) { expander.IfCanExpand( uri, viewModel => { var attachment = new UrlExpanderAttachment(viewModel); timelineItemContainer.AddAttachment(attachment); }); } } }
private static IEnumerable<Uri> GetShortUrls(TimelineItemContainer timelineItemContainer) { IEnumerable<string> urls = null; if (timelineItemContainer.Metadata.Any(md => md.Key == "com.seesmic.timelineItem.UrlsDictionary")) { var urlsDictionaryMetadata = timelineItemContainer.Metadata.First(md => md.Key == "com.seesmic.timelineItem.UrlsDictionary"); var urlsDictionary = urlsDictionaryMetadata.Value as IDictionary<string, string>; if (urlsDictionary != null) { urls = urlsDictionary.Keys; } } if (urls == null) { urls = ShortUrlRegex.Matches(timelineItemContainer.TimelineItem.Text).Cast<Match>().Select(m => { if (m.Value.StartsWith("(", StringComparison.Ordinal) && m.Value.EndsWith(")", StringComparison.Ordinal)) { return m.Value.Substring(1, m.Value.Length - 2); } return m.Value; }); } // convert to URI, only return short URLs (no querystring, only slash is separating host and path) return urls.Select(urlText => { Uri url; if (Uri.TryCreate(urlText, UriKind.Absolute, out url)) { return url; } return null; }) .Where(url => url != null && string.IsNullOrEmpty(url.Query) && url.LocalPath.LastIndexOf('/') < 1); }
public void Remove(TimelineItemContainer timelineItemContainer) { }
public bool Filter(TimelineItemContainer timelineItemContainer) { return true; }
public void Deliver(TimelineItemContainer timelineItemContainer) { }