public bool IsEquivalentTo(ItunesItem item) { if (item.Id == null) { return(Date == item.PublishDate); } return(Id == item.Id); }
/// <summary> /// Generate the feed object. /// </summary> /// <returns></returns> public SyndicationFeed Feed() { var items = this.Items(); var feedItems = new List <SyndicationItem>(); var owners = items.Select(i => i.Owner).Distinct(); var authors = Context.Where <UserProfile>(u => owners.Contains(u.UserName)); var userUriFormat = App.Get().Context.AppUrl.ToString() + "{0}"; var feedTitleField = this.FieldRefs.FirstOrDefault(f => !string.IsNullOrEmpty(f.ToFeedItemField) && f.ToFeedItemField.Equals("title")); var feedDescField = this.FieldRefs.FirstOrDefault(f => !string.IsNullOrEmpty(f.ToFeedItemField) && f.ToFeedItemField.Equals("description")); var feedThumbField = this.FieldRefs.FirstOrDefault(f => !string.IsNullOrEmpty(f.ToFeedItemField) && f.ToFeedItemField.Equals("image")); var feedImageField = this.FieldRefs.FirstOrDefault(f => !string.IsNullOrEmpty(f.ToFeedItemField) && f.ToFeedItemField.Equals("thumbnail")); var feedVideoField = this.FieldRefs.FirstOrDefault(f => !string.IsNullOrEmpty(f.ToFeedItemField) && f.ToFeedItemField.Equals("video")); var titleFieldName = "title"; var descFieldName = "description"; var thumbFieldName = ""; var videoFieldName = ""; var imageFieldName = ""; if (feedTitleField != null) { titleFieldName = feedTitleField.Name; } if (feedDescField != null) { descFieldName = feedDescField.Name; } if (feedThumbField != null) { thumbFieldName = feedThumbField.Name; } if (feedVideoField != null) { videoFieldName = feedThumbField.Name; } if (feedImageField != null) { imageFieldName = feedThumbField.Name; } foreach (var item in items) { var title = !item.IsNull(titleFieldName) ? (string)item[titleFieldName] : ""; var desc = !item.IsNull(descFieldName) ? (string)item[descFieldName] : ""; var subTitle = ""; var imgUrl = !item.IsNull(imageFieldName) ? (string)item[imageFieldName] : ""; if (string.IsNullOrEmpty(title)) { continue; } if (!string.IsNullOrEmpty(desc)) { desc = TextEngine.Text(desc); if (desc.Length > 300) { subTitle = desc.Substring(0, 300) + "..."; } } var feedItem = new ItunesItem(title, desc, new Uri(item.UrlComponent), item.ID.ToString(), new DateTimeOffset(item.Published)); if (!object.ReferenceEquals(item.Tags, null) && item.Tags.Length > 0) { feedItem.Keywords = string.Join(",", item.Tags); } if (!string.IsNullOrEmpty(imgUrl)) { feedItem.ImageUrl = imgUrl; } //feedItem.ElementExtensions.Add(new SyndicationElementExtension( var cats = item.Categories; if (cats != null && cats.Length > 0) { foreach (var c in cats) { feedItem.Categories.Add(new SyndicationCategory(c)); } } var owner = authors.FirstOrDefault(a => a.UserName.Equals(item.Owner)); feedItem.Subtitle = subTitle; feedItem.Author = owner.DisplayName; feedItem.Authors.Add(new SyndicationPerson(owner.Email, owner.DisplayName, string.Format(userUriFormat, owner.UserName))); feedItems.Add(feedItem); } var feed = new SyndicationFeed(feedItems); feed.Title = new TextSyndicationContent(this.Title); feed.Description = new TextSyndicationContent(this.Description); feed.BaseUri = new Uri(this.Url.Replace("~", App.Get().Context.AppUrl.ToString())); feed.Generator = "DotNetAge"; feed.Language = this.Parent.Locale; if (this.Generated.HasValue) { feed.LastUpdatedTime = new DateTimeOffset(this.Generated.Value); } return(feed); }