コード例 #1
0
        public virtual ActionResult List(FeedListModel model)
        {
            var centralFeedType = _centralFeedTypeProvider[model.TypeId];
            var items           = GetCentralFeedItems(centralFeedType).ToList();

            if (IsEmptyFilters(model.FilterState, _feedFilterStateService.CentralFeedCookieExists()))
            {
                model.FilterState = GetFilterStateModel();
            }

            var tabSettings = _centralFeedService.GetSettings(centralFeedType);

            var filteredItems = _centralFeedFilterService.ApplyFilters(items, model.FilterState, tabSettings).ToList();

            var currentVersion = _centralFeedService.GetFeedVersion(filteredItems);

            if (model.Version.HasValue && currentVersion == model.Version.Value)
            {
                return(null);
            }

            var centralFeedModel = GetFeedListViewModel(model, filteredItems, centralFeedType);
            var filterState      = MapToFilterState(centralFeedModel.FilterState);

            _feedFilterStateService.SaveFiltersState(filterState);

            return(PartialView(ListViewPath, centralFeedModel));
        }
コード例 #2
0
 private FeedTabSettings GetTabSettings(FeedListModel model)
 {
     return(_centralFeedService
            .GetAllSettings()
            .Single(s => s.Type.ToInt() == model.TypeId)
            .Map <FeedTabSettings>());
 }
コード例 #3
0
        public FeedListResponse Handle(FeedListRequest message)
        {
            NugetFeed[] feeds       = _repository.Feeds.PerformQuery <NugetFeed>();
            var         deployments = _repository.Deployments.PerformQuery <Domain.Deployment>();
            var         model       = new FeedListModel(feeds, deployments);

            return(new FeedListResponse(model));
        }
コード例 #4
0
        public JsonResult GetSearchResults(string guidString, string category, string searchterm, bool telecommute, bool contract)
        {
            var feed = new FeedEntity(Guid.Parse(guidString));
            var list = new FeedListModel();

            list.Site        = feed.Name;
            list.FeedUrl     = feed.FeedUrl;
            list.Category    = category;
            list.SearchTerm  = searchterm;
            list.Telecommute = telecommute;
            list.Contract    = contract;


            var addOn = string.Empty;

            if (telecommute)
            {
                addOn = "is_telecommuting=1";
            }
            else
            {
                addOn = "is_telecommuting=0";
            }

            if (contract)
            {
                addOn += "&is_contract=1";
            }

            if (!feed.FeedUrl.EndsWith("/"))
            {
                feed.FeedUrl += "/";
            }
            var url = string.Format("{0}search/{1}?{2}&query={3}&format=rss", feed.FeedUrl, category, addOn,
                                    searchterm);

            list.FeedItems = CraigslistReader.GetFeedItems(url);

            var jss = new JavaScriptSerializer();

            string output = jss.Serialize(list.FeedItems);

            return(Json(output, JsonRequestBehavior.AllowGet));
        }
コード例 #5
0
        private FeedListViewModel GetFeedListModel(FeedListModel model, List <IFeedItem> filteredItems, Enum centralFeedType)
        {
            var centralFeedPanel = GetCentralFeedPanel();

            var feed = SortForFeed(filteredItems, centralFeedType)
                       .Skip(centralFeedPanel.ItemsPerRequest * (model.Page - 1))
                       .Take(centralFeedPanel.ItemsPerRequest)
                       .Select(fi => _feedPresentationService.GetPreviewModel(fi, model.GroupId.HasValue))
                       .ToList();


            return(new FeedListViewModel
            {
                Feed = feed,
                TabSettings = GetTabSettings(model),
                Type = centralFeedType,
                BlockScrolling = filteredItems.Count < centralFeedPanel.ItemsPerRequest,
            });
        }
コード例 #6
0
        public FeedListViewModel FeedList(FeedListModel model)
        {
            var centralFeedType = _feedTypeProvider[model.TypeId];

            var items = model.GroupId.HasValue ? _centralFeedHelper.GetGroupFeedItems(centralFeedType, model.GroupId.Value).ToList() :
                        _centralFeedHelper.GetCentralFeedItems(centralFeedType).ToList();

            if (!items.Any())
            {
                return(new FeedListViewModel());
            }

            var tabSettings = GetTabSettings(model.GroupId.HasValue, centralFeedType);

            var filteredItems = _feedFilterService.ApplyFilters(items, model.FilterState, tabSettings).ToList();

            var centralFeedModel = GetFeedListModel(model, filteredItems, centralFeedType);

            return(centralFeedModel);
        }
コード例 #7
0
        protected virtual FeedListViewModel GetFeedListViewModel(FeedListModel model, List <IFeedItem> filteredItems, Enum centralFeedType)
        {
            var take           = model.Page * ItemsPerPage;
            var pagedItemsList = SortForFeed(filteredItems, centralFeedType).Take(take).ToList();

            var settings = _centralFeedService
                           .GetAllSettings()
                           .AsList();

            var tabSettings = settings
                              .Single(s => s.Type.ToInt() == model.TypeId)
                              .Map <FeedTabSettings>();

            return(new FeedListViewModel
            {
                Version = _centralFeedService.GetFeedVersion(filteredItems),
                Feed = GetFeedItems(pagedItemsList, settings),
                TabSettings = tabSettings,
                Type = centralFeedType,
                BlockScrolling = filteredItems.Count < take,
                FilterState = MapToFilterStateViewModel(model.FilterState)
            });
        }
コード例 #8
0
 public FeedListResponse(FeedListModel model)
 {
     Model = model;
 }
コード例 #9
0
        public ActionResult SearchResults(string feeds, string categories, string searchterm, bool telecommute = false, bool contract = false)
        {
            var model = new SearchResultsModel();

            var sites = feeds.Split(',');
            var cats  = categories.Split(',');

            foreach (var guidString in sites)
            {
                foreach (var category in cats)
                {
                    var feed = new FeedEntity(Guid.Parse(guidString));
                    var list = new FeedListModel();
                    model.Results.Add(list);
                    list.Site        = feed.Name;
                    list.FeedUrl     = feed.FeedUrl;
                    list.Category    = category;
                    list.SearchTerm  = searchterm;
                    list.Telecommute = telecommute;
                    list.Contract    = contract;


                    var addOn = string.Empty;
                    if (telecommute)
                    {
                        addOn = "is_telecommuting=1";
                    }
                    else
                    {
                        addOn = "is_telecommuting=0";
                    }

                    if (contract)
                    {
                        addOn += "&is_contract=1";
                    }

                    var url = string.Format("{0}search/{1}?{2}&query={3}&format=rss", feed.FeedUrl, category, addOn,
                                            searchterm);
                    list.FeedItems = CraigslistReader.GetFeedItems(url);



                    //TODO: Add code to prevent duplicate emails getting sent
                    //Get all the IDs of responses sent to this feed. That way we don't send duplicates
                    //var responses = new ResponseCollection();
                    //var filter = new PredicateExpression();
                    //filter.Add(ResponseFields.FeedGuid == feed.Guid);
                    //responses.GetMulti(filter);
                    //list.FeedResponsesByEmail = new List<string>();
                    //list.FeedResponsesByID = new List<string>();
                    //foreach (var r in responses)
                    //{
                    //    if (!model.FeedResponsesByEmail.Contains(r.ToEmail))
                    //        model.FeedResponsesByEmail.Add(r.ToEmail);

                    //    if (!model.FeedResponsesByID.Contains(r.Id))
                    //        model.FeedResponsesByID.Add(r.Id);
                    //}
                }
            }
            return(View(model));
        }