Exemple #1
0
        public bool IsEquivalentTo(ItunesItem item)
        {
            if (item.Id == null)
            {
                return(Date == item.PublishDate);
            }

            return(Id == item.Id);
        }
Exemple #2
0
        /// <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);
        }