using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using NzbDrone.Core; using NzbDrone.Core.Providers; using NzbDrone.Core.Repository.Search; using NzbDrone.Web.Models; namespace NzbDrone.Web.Controllers { public class SearchHistoryController : Controller { private readonly SearchHistoryProvider _searchHistoryProvider; public SearchHistoryController(SearchHistoryProvider searchHistoryProvider) { _searchHistoryProvider = searchHistoryProvider; } public ActionResult Index() { var results = _searchHistoryProvider.AllSearchHistory(); var model = results.Select(s => new SearchHistoryModel { Id = s.Id, SearchTime = s.SearchTime.ToString(), DisplayName = GetDisplayName(s), ReportCount = s.TotalItems, Successful = s.SuccessfulCount > 0 }); return View(model); } public ActionResult Details(int searchId) { var searchResult = _searchHistoryProvider.GetSearchHistory(searchId); var model = new SearchDetailsModel { Id = searchResult.Id, DisplayName = GetDisplayName(searchResult), SearchHistoryItems = searchResult.SearchHistoryItems.Select(s => new SearchItemModel { Id = s.Id, ReportTitle = s.ReportTitle, Indexer = s.Indexer, NzbUrl = s.NzbUrl, NzbInfoUrl = s.NzbInfoUrl, Success = s.Success, SearchError = s.SearchError.AddSpacesToEnum().Replace("None", "Grabbed"), Quality = s.Quality.ToString(), QualityInt = s.Quality.Weight, Proper = s.Proper, Age = s.Age, Size = s.Size.ToBestFileSize(1), Language = s.Language.ToString() }).ToList() }; return View(model); } public JsonResult ForceDownload(int id) { _searchHistoryProvider.ForceDownload(id); return JsonNotificationResult.Info("Success", "Requested episode has been sent to download client"); } public string GetDisplayName(SearchHistory searchResult) { if (!searchResult.EpisodeNumber.HasValue) { return String.Format("{0} - Season {1}", searchResult.SeriesTitle, searchResult.SeasonNumber); } string episodeString; if (searchResult.IsDaily) episodeString = searchResult.AirDate.ToShortDateString().Replace('/', '-'); else episodeString = String.Format("S{0:00}E{1:00}", searchResult.SeasonNumber, searchResult.EpisodeNumber); return String.Format("{0} - {1} - {2}", searchResult.SeriesTitle, episodeString, searchResult.EpisodeTitle); } } }