示例#1
0
        /// <summary>
        /// Sets the search criterias to find the blog items used for the listing.
        /// Uses the properties IsTagListing, IsDateListing and IsTeamLevel to determine what criterias to set up.
        /// </summary>
        private void SetSearchCriterias()
        {
            if (CurrentPage[BlogUtility.IsTagListingPropertyName] != null)
            {
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.Equal, "PageTypeName", PropertyDataType.PageType, BlogUtility.ItemPageTypeName, true));
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.Equal, "PageCategory", PropertyDataType.Category, CurrentPage.PageName, true));

                _searchStart = (PageReference)CurrentPage[BlogUtility.StartPropertyName];
            }
            else if (CurrentPage[BlogUtility.IsDateListingPropertyName] != null && CurrentPage[BlogUtility.IsTeamLevelPropertyName] == null)
            {
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.Equal, "PageTypeName", PropertyDataType.PageType, BlogUtility.ItemPageTypeName, true));

                _searchStart = CurrentPageLink;
            }
            else if (CurrentPage[BlogUtility.IsDateListingPropertyName] != null && CurrentPage[BlogUtility.IsTeamLevelPropertyName] != null)
            {
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.Equal, "PageTypeName", PropertyDataType.PageType, BlogUtility.ItemPageTypeName, true));
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.GreaterThan, "PageStartPublish", PropertyDataType.Date, CurrentPage.StartPublish.ToString(), true));
                _criterias.Add(BlogUtility.CreateCriteria(CompareCondition.LessThan, "PageStartPublish", PropertyDataType.Date, CurrentPage.StartPublish.Add(SearchInterval).ToString(), true));

                _searchStart = (PageReference)CurrentPage[BlogUtility.StartPropertyName];
            }
            else
            {
                throw new EPiServerException(Translate("/blog/listpage/errormessage"));
            }
        }
示例#2
0
        public Task <IList <BlogItem> > LoadItemsAsync(BlogGroup group)
        {
            return(Task.Run(async() =>
            {
                var feed = await GetFeed(group.RssUri);

                IList <BlogItem> items = new List <BlogItem>();

                foreach (var item in feed.Items)
                {
                    try
                    {
                        var blogItem = new BlogItem {
                            Group = group
                        };
                        var uri = string.Empty;

                        if (item.Links.Count > 0)
                        {
                            var link =
                                item.Links.FirstOrDefault(
                                    l => l.RelationshipType.Equals("alternate", StringComparison.OrdinalIgnoreCase)) ??
                                item.Links[0];
                            uri = link.Uri.AbsoluteUri;
                        }

                        blogItem.Id = uri;

                        blogItem.PageUri = new Uri(uri, UriKind.Absolute);
                        blogItem.Title = item.Title != null ? item.Title.Text : "(no title)";

                        blogItem.PostDate = item.PublishDate.LocalDateTime;

                        var content = "(no content)";

                        if (item.Content != null)
                        {
                            content = BlogUtility.ParseHtml(((TextSyndicationContent)item.Content).Text);
                        }
                        else if (item.Summary != null)
                        {
                            content = BlogUtility.ParseHtml(item.Summary.Text);
                        }

                        blogItem.Description = content;

                        items.Add(blogItem);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

                return items;
            }));
        }
        public async Task LoadAllItems(BlogGroup group)
        {
            var cachedItems = await LoadCachedItems(group);

            group.ItemCount    = cachedItems.Count;
            group.NewItemCount = 0;
            var newItems = await LoadLiveItems(group);

            foreach (var item in newItems.Where(i => !cachedItems.Contains(i, new BaseItemComparer())))
            {
                var error = string.Empty;
                try
                {
                    var client = GetClient();
                    var page   = await client.GetStringAsync(item.PageUri);

                    item.ImageUriList = new ObservableCollection <Uri>(BlogUtility.ExtractImagesFromPage(page));
                    foreach (var image in item.ImageUriList)
                    {
                        ImageUriManager.AddImage(item.Id, image);
                    }
                }
                catch (Exception ex)
                {
                    error = ex.Message;
                }

                if (!string.IsNullOrEmpty(error))
                {
                    await _dialog.ShowDialogAsync(error);
                }
                cachedItems.Add(item);
                group.NewItemCount++;
                await _storage.SaveItem(group.Id.GetHashCode().ToString(), item);
            }

            foreach (var item in cachedItems.OrderByDescending(i => i.PostDate))
            {
                foreach (var image in item.ImageUriList)
                {
                    ImageUriManager.AddImage(item.Id, image);
                }
                group.Items.Add(item);
            }

            group.ItemCount = group.Items.Count();
        }
示例#4
0
        public async Task <IList <BlogItem> > LoadItemsAsync(BlogGroup group)
        {
            var info = NetworkInformation.GetInternetConnectionProfile();

            if (info == null || info.GetNetworkConnectivityLevel() != NetworkConnectivityLevel.InternetAccess)
            {
                return(new List <BlogItem>());
            }

            var retVal     = new List <BlogItem>();
            var outerError = string.Empty;

            try
            {
                var client = GetSyndicationClient();
                var feed   = await client.RetrieveFeedAsync(group.RssUri);

                foreach (var item in feed.Items.OrderBy(i => i.PublishedDate))
                {
                    var error = string.Empty;
                    try
                    {
                        var blogItem = new BlogItem {
                            Group = group
                        };
                        var uri = string.Empty;

                        if (item.Links.Count > 0)
                        {
                            var link =
                                item.Links.FirstOrDefault(
                                    l => l.Relationship.Equals("alternate", StringComparison.OrdinalIgnoreCase)) ??
                                item.Links[0];
                            uri = link.Uri.AbsoluteUri;
                        }

                        blogItem.Id = uri;

                        blogItem.PageUri = new Uri(uri, UriKind.Absolute);
                        blogItem.Title   = item.Title != null ? item.Title.Text : "(no title)";

                        blogItem.PostDate = item.PublishedDate.LocalDateTime;

                        var content = "(no content)";

                        if (item.Content != null)
                        {
                            content = BlogUtility.ParseHtml(item.Content.Text);
                        }
                        else if (item.Summary != null)
                        {
                            content = BlogUtility.ParseHtml(item.Summary.Text);
                        }

                        blogItem.Description = content;

                        retVal.Add(blogItem);
                    }
                    catch (Exception ex)
                    {
                        error = ex.Message;
                    }

                    if (!string.IsNullOrEmpty(error))
                    {
                        await _dialog.ShowDialogAsync(error);
                    }
                }
            }
            catch (Exception ex)
            {
                outerError = ex.Message;
            }

            if (!string.IsNullOrEmpty(outerError))
            {
                await _dialog.ShowDialogAsync(outerError);
            }
            return(retVal);
        }