예제 #1
0
        public ActionResult Index(string feed)
        {
            var model = new IndexViewModel();

            model.ChannelURL = feed;

            try
            {
                var selectedFeed = _repository.Feeds.FirstOrDefault(x => x.URL == feed);

                if (selectedFeed != null)
                {
                    model.ChannelName = selectedFeed.DisplayName;
                    model.BlogURL     = selectedFeed.BlogURL;
                    model.LastRefresh = selectedFeed.LastRefresh.ToString();

                    // Refresh the feed if the option is set
                    if (_services.GetOption("AutoRefresh").Value.ToLower() == "true")
                    {
                        _services.Fetch(selectedFeed);
                        TempData["Message"] = selectedFeed.DisplayName + " has been refreshed";
                    }

                    try
                    {
                        if (Session["ViewMode"] == null || Session["ViewMode"].ToString() == "Show Unread Items")
                        {
                            var items = _repository.Items.Where(x => x.FeedID == selectedFeed.FeedID && x.IsRead == false).OrderByDescending(x => x.ItemID).Take(10).ToList();
                            model.Items = _builder.BuildItemsViewModelList(items, true);
                        }
                        else
                        {
                            var items = _repository.Items.Where(x => x.FeedID == selectedFeed.FeedID).OrderByDescending(x => x.ItemID).Take(10).ToList();
                            model.Items = _builder.BuildItemsViewModelList(items, true);
                        }
                    }
                    catch (Exception ex)
                    {
                        TempData["Error"] = "Error reading feed: " + ex.Message.ToString();
                    }
                }

                if (!string.IsNullOrEmpty(model.ChannelURL))
                {
                    // Retrieve starred items
                    if (model.ChannelURL.ToLower() == "starred")
                    {
                        model.ChannelName = "Starred Items";

                        try
                        {
                            var items = _repository.Items.Where(x => x.IsStarred == true).OrderByDescending(x => x.PublishDate).ToList();
                            model.Items = _builder.BuildItemsViewModelList(items, false);
                        }
                        catch (Exception ex)
                        {
                            TempData["Error"] = "Error reading feed: " + ex.Message.ToString();
                        }
                    }

                    // Show options screen
                    if (model.ChannelURL.ToLower() == "options")
                    {
                        model.ChannelName = "Options";
                    }
                }

                // Build the feeds sidebar list
                var feeds = _repository.Feeds.OrderBy(x => x.DisplayName).ToList();
                model.Feeds = _builder.BuildFeedsViewModelList(feeds, selectedFeed);
            }
            catch (Exception ex)
            {
                TempData["Error"] = ex.Message.ToString();
            }

            return(View(model));
        }