Пример #1
0
        public void Test_delete()
        {
            using (RepositoryFactory.StartUnitOfWork())
            {
                var item = new RssItemCRUDModel()
                           	{
                           		FeedItemId = "new",
                           		Title = "title_new",
                           		Text = "Text_new",
                           		Description = "DescriptionNew",
                           		Author = "twit_usernew",
                           		Url = "url_new",
                           		FeedId = _feed.Id,
                                Published = DateTime.Now
                           	};

                var action = RepositoryFactory.Action<IRssItemAction>();

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = action.Save(item);
                    tran.Commit();
                }

                WaitForIndexing();

                Assert.IsNotNull(SessionFactory<RssItem>.Queryable.FirstOrDefault(rssItem => rssItem.FeedItemId == item.FeedItemId));

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    action.Delete(item);
                    tran.Commit();
                }

                WaitForIndexing();

                var items = action.GetAll().ToArray();
                Assert.AreEqual(2, items.Count());
                Assert.IsFalse(items.Any(rssItem => rssItem.FeedItemId == item.FeedItemId));
            }
        }
Пример #2
0
        public void Test_save()
        {
            using (RepositoryFactory.StartUnitOfWork())
            {
                var item = new RssItemCRUDModel()
                           	{
                                FeedItemId = "new",
                                Title = "title_new",
                                Text = "Text_new",
                                Description = "DescriptionNew",
                                Author = "twit_usernew",
                                Url = "url_new",
                                FeedId = _feed.Id,
                                Published = DateTime.Now
                           	};

                var action = RepositoryFactory.Action<IRssItemAction>();

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = action.Save(item);
                    tran.Commit();
                }

                WaitForIndexing();

                var storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == item.FeedItemId);

                Assert.AreEqual(item.FeedItemId, storedItem.FeedItemId);
                Assert.AreEqual(item.FeedId, storedItem.RssFeed.Id);
                Assert.AreEqual(item.Title, storedItem.Title);
                Assert.AreEqual(item.Text, storedItem.Text);
                Assert.AreEqual(item.Description, storedItem.Description);
                Assert.AreEqual(item.Published, storedItem.CreatedDate);
                Assert.AreEqual(item.Published, storedItem.Modified);
                Assert.AreEqual(item.Published, storedItem.PublishDate);
                Assert.AreEqual(item.Author, storedItem.Author);
                Assert.AreEqual(item.Url, storedItem.Url);
                Assert.AreEqual(false, storedItem.Hidden);
                Assert.AreEqual(false, storedItem.AreCommentAllowed);

                item = new RssItemCRUDModel()
                {
                    FeedItemId = "change",
                    Title = "title_change",
                    Text = "Text_change",
                    Description = "Descriptionchange",
                    Author = "twit_userchange",
                    Url = "url_change",
                    FeedId = _feed.Id,
                    Published = DateTime.Now
                };

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = action.Save(item);
                    tran.Commit();
                }

                WaitForIndexing();

                storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == item.FeedItemId);

                Assert.AreEqual(item.FeedItemId, storedItem.FeedItemId);
                Assert.AreEqual(item.FeedId, storedItem.RssFeed.Id);
                Assert.AreEqual(item.Title, storedItem.Title);
                Assert.AreEqual(item.Text, storedItem.Text);
                Assert.AreEqual(item.Description, storedItem.Description);
                Assert.AreEqual(item.Published, storedItem.CreatedDate);
                Assert.AreEqual(item.Published, storedItem.Modified);
                Assert.AreEqual(item.Published, storedItem.PublishDate);
                Assert.AreEqual(item.Author, storedItem.Author);
                Assert.AreEqual(item.Url, storedItem.Url);
                Assert.AreEqual(false, storedItem.Hidden);
                Assert.AreEqual(false, storedItem.AreCommentAllowed);
            }
            using (RepositoryFactory.StartUnitOfWork())
            {
                var storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == "change");
                var id = storedItem.RssFeed.Id;
            }
        }
Пример #3
0
        /// <summary>
        /// Gets the feed items.
        /// </summary>
        /// <param name="feed">The feed.</param>
        /// <returns>Feed items to save.</returns>
        public static RssItemCRUDModel[] GetFeedItems(RssFeedCRUDModel feed)
        {
            List<RssItemCRUDModel> result = new List<RssItemCRUDModel>();

            var connectionAction = RepositoryFactory.Action<IRssFeedConnection>();

            // get items from remote url
            var items = connectionAction.GetFeedUrlItems(feed.Url);

            foreach (var rssItemRawData in items)
            {
                // if no author regex or author regex match
                if (string.IsNullOrEmpty(feed.AuthorRegex)
                    || Regex.IsMatch(rssItemRawData.Author, feed.AuthorRegex, RegexOptions.Singleline))
                {
                    var item = new RssItemCRUDModel
                               	{
                               		FeedItemId = rssItemRawData.Id,
                               		Url = rssItemRawData.Url,
                               		Published = rssItemRawData.Published,
                               		Author = rssItemRawData.Author,
                               		Title = AntiXss.GetSafeHtmlFragment(rssItemRawData.Title),
                               		FeedId = feed.Id
                               	};

                    string content = rssItemRawData.Text;

                    // if display full content, then get content url
                    if (feed.GetDirectContent)
                    {

                        try
                        {
                            content = connectionAction.GetArticle(item.Url);
                        }
                        catch (Exception ex)
                        {
                            LogManager.GetCurrentClassLogger().ErrorException(
                                string.Format("Unable to get article content for feed '{0}' for item url '{1}'. \nException: {2}", feed.Name, item.Url),
                                ex);
                        }
                    }
                    // apply content regex
                    if (!string.IsNullOrEmpty(feed.ContentParseRegex))
                    {
                        var match = Regex.Match(content, feed.ContentParseRegex, RegexOptions.Singleline);
                        if (match.Success && match.Groups.Count > 0)
                        {
                            content = match.Groups[1].Value;
                        }
                        item.Text = AntiXss.GetSafeHtmlFragment(content);
                    }

                    item.Text = AntiXss.GetSafeHtmlFragment(content);
                    item.Description = content.RemoveTags().Shorten(ModelConstants.DescriptionMaxLenghtConst);

                    result.Add(item);
                }
            }
            return result.ToArray();
        }