Lidarr/NzbDrone.Web/Controllers/SearchHistoryController.cs

94 lines
3.1 KiB
C#

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);
}
}
}