Exemple #1
0
        public void Test_update()
        {
            using (RepositoryFactory.StartUnitOfWork())
            {
                var item = new RssFeedCRUDModel()
                {
                    Name               = "new_feed1",
                    Url                = "new_feed_url",
                    AuthorRegex        = "author_regex_new",
                    ContentParseRegex  = "content_parse_regex",
                    GetDirectContent   = true,
                    DisplayFullContent = false
                };

                var crudActions = RepositoryFactory.Action <IRssFeedAction>();

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = crudActions.Create(item);
                    tran.Commit();
                }
                WaitForIndexing();

                // check created item
                var storedItem = crudActions.FindByPk(item.Id);

                Assert.AreEqual(item.Id, storedItem.Id);
                Assert.AreEqual(item.Name, storedItem.Name);
                Assert.AreEqual(item.Url, storedItem.Url);
                Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex);
                Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex);
                Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent);
                Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent);

                // change item
                item.Name               = item.Name + "change";
                item.Url                = item.Url + "change";
                item.AuthorRegex        = item.AuthorRegex + "change";
                item.ContentParseRegex  = item.ContentParseRegex + "change";
                item.GetDirectContent   = !item.GetDirectContent;
                item.DisplayFullContent = !item.DisplayFullContent;

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = crudActions.Update(item);
                    tran.Commit();
                }

                // check changed item
                storedItem = crudActions.FindByPk(item.Id);

                Assert.AreEqual(item.Id, storedItem.Id);
                Assert.AreEqual(item.Name, storedItem.Name);
                Assert.AreEqual(item.Url, storedItem.Url);
                Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex);
                Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex);
                Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent);
                Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent);
            }
        }
Exemple #2
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());
        }
Exemple #3
0
        public ActionResult Delete(RssFeedCRUDModel model)
        {
            var item = RepositoryFactory.Action <IRssFeedAction>().FindByPk(model.Id);

            using (var tran = RepositoryFactory.StartTransaction())
            {
                RepositoryFactory.Action <IRssFeedAction>().Delete(model);
                tran.Commit();
            }
            return(RedirectToActionWithAjax("Index"));
        }
Exemple #4
0
 public ActionResult TestFeed(RssFeedCRUDModel model)
 {
     RssItemCRUDModel[] feedItems = null;
     try
     {
         feedItems = UpdateRssFeedsTask.GetFeedItems(model);
     }
     catch (Exception ex)
     {
         ModelState.AddModelError("", ex.ToString());
     }
     return(ViewWithAjax(feedItems));
 }
Exemple #5
0
        public ActionResult Create(RssFeedCRUDModel model)
        {
            if (ModelState.IsValid)
            {
                var crudOperations = RepositoryFactory.Action <IRssFeedAction>();

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    crudOperations.Create(model);
                    tran.Commit();
                }
                return(RedirectToActionWithAjax("Index"));
            }
            return(ViewWithAjax(model));
        }
Exemple #6
0
        /// <summary>
        /// Updates the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns>Updated item.</returns>
        public RssFeedCRUDModel Update(RssFeedCRUDModel item)
        {
            var feed = SessionFactory <RssFeed> .Load(item.Id);

            feed.Name               = item.Name;
            feed.AuthorRegex        = item.AuthorRegex;
            feed.GetDirectContent   = item.GetDirectContent;
            feed.DisplayFullContent = item.DisplayFullContent;
            feed.ContentParseRegex  = item.ContentParseRegex;
            feed.Url = item.Url;

            SessionFactory <RssFeed> .Store(feed);

            return(item);
        }
Exemple #7
0
        /// <summary>
        /// Creates the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns>Created item.</returns>
        public RssFeedCRUDModel Create(RssFeedCRUDModel item)
        {
            var feed = new RssFeed
            {
                Id                 = Guid.NewGuid(),
                Name               = item.Name,
                AuthorRegex        = item.AuthorRegex,
                GetDirectContent   = item.GetDirectContent,
                DisplayFullContent = item.DisplayFullContent,
                ContentParseRegex  = item.ContentParseRegex,
                Url                = item.Url
            };

            SessionFactory <RssFeed> .Store(feed);

            item.Id = feed.Id;

            return(item);
        }
Exemple #8
0
        /// <summary>
        /// Finds item by PK.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="throwOnNotFound">if set to <c>true</c> [throw exception on not found].</param>
        /// <returns>
        /// Item matching id or null/exception if not exists.
        /// </returns>
        public RssFeedCRUDModel FindByPk(Guid id, bool throwOnNotFound)
        {
            RssFeedCRUDModel result = null;

            var item = SessionFactory <RssFeed> .Load(id);

            if (throwOnNotFound && item == null)
            {
                throw new NotFoundException(typeof(RssFeed), id,
                                            "with relation to StaticTextVersion via Version number");
            }
            return(new RssFeedCRUDModel
            {
                Id = item.Id,
                Name = item.Name,
                AuthorRegex = item.AuthorRegex,
                GetDirectContent = item.GetDirectContent,
                DisplayFullContent = item.DisplayFullContent,
                ContentParseRegex = item.ContentParseRegex,
                Url = item.Url
            });
        }
Exemple #9
0
        public ActionResult Edit(RssFeedCRUDModel model)
        {
            if (ModelState.IsValid)
            {
                var crudOperations = RepositoryFactory.Action <IRssFeedAction>();

                // get original item to test change permissions
                var originalItem = crudOperations.FindByPk(model.Id);

                if (originalItem != null)
                {
                    using (var tran = RepositoryFactory.StartTransaction(IoC.Resolve <SearchUpdateContext>()))
                    {
                        crudOperations.Update(model);
                        tran.Commit();
                    }
                    return(RedirectToActionWithAjax("Index"));
                }

                ModelState.AddModelError(string.Empty, ModelResources.ItemNotExistsError);
            }
            return(ViewWithAjax(model));
        }
Exemple #10
0
        public void Test_delete()
        {
            using (RepositoryFactory.StartUnitOfWork())
            {
                var initialCount = SessionFactory <RssFeed> .Count();

                var item = new RssFeedCRUDModel()
                {
                    Name               = "new_feed1",
                    Url                = "new_feed_url",
                    AuthorRegex        = "author_regex_new",
                    ContentParseRegex  = "content_parse_regex",
                    GetDirectContent   = true,
                    DisplayFullContent = false
                };

                var crudActions = RepositoryFactory.Action <IRssFeedAction>();

                using (var tran = RepositoryFactory.StartTransaction())
                {
                    item = crudActions.Create(item);
                    tran.Commit();
                }
                WaitForIndexing();

                Assert.AreEqual(initialCount + 1, SessionFactory <RssFeed> .Count());

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

                Assert.AreEqual(initialCount, SessionFactory <RssFeed> .Count());
            }
        }
Exemple #11
0
        /// <summary>
        /// Deletes the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        public void Delete(RssFeedCRUDModel item)
        {
            var feed = SessionFactory <RssFeed> .Load(item.Id);

            SessionFactory <RssFeed> .Delete(feed);
        }