From 9caacc4809bb40452fc12b2f66f7f022d37b95da Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 May 2011 23:27:02 -0700 Subject: [PATCH] Added Season Monitored editor (linked from Season Count on Series Grid), It would be under AJAX Edit, but it won't play nice with lists. Editor should support about 40 seasons without scrolling (TvDb doesn't list all seasons for large series) Removed &pp=3 from SabProvider (it will use SAB's configured Post Processing value). --- NzbDrone.Core/Providers/SeasonProvider.cs | 7 +- NzbDrone.Web/Controllers/SeriesController.cs | 46 +++++++- .../Controllers/SettingsController.cs | 33 ++---- NzbDrone.Web/Models/SeasonEditModel.cs | 15 +++ NzbDrone.Web/Models/SeriesModel.cs | 2 +- NzbDrone.Web/NzbDrone.Web.csproj | 16 ++- .../Series/EditorTemplates/SeriesModel.cshtml | 1 + NzbDrone.Web/Views/Series/Index.cshtml | 27 ++++- NzbDrone.Web/Views/Series/SeasonEditor.cshtml | 47 ++++++++ NzbDrone.Web/Views/Series/SingleSeason.cshtml | 15 +++ NzbDrone.Web/Views/Settings/Test.cshtml | 106 ++++++++++++++++++ .../Views/Settings/TestPartial.cshtml | 24 ++++ 12 files changed, 308 insertions(+), 31 deletions(-) create mode 100644 NzbDrone.Web/Models/SeasonEditModel.cs create mode 100644 NzbDrone.Web/Views/Series/SeasonEditor.cshtml create mode 100644 NzbDrone.Web/Views/Series/SingleSeason.cshtml create mode 100644 NzbDrone.Web/Views/Settings/Test.cshtml create mode 100644 NzbDrone.Web/Views/Settings/TestPartial.cshtml diff --git a/NzbDrone.Core/Providers/SeasonProvider.cs b/NzbDrone.Core/Providers/SeasonProvider.cs index 101f37870..b1f337a36 100644 --- a/NzbDrone.Core/Providers/SeasonProvider.cs +++ b/NzbDrone.Core/Providers/SeasonProvider.cs @@ -61,7 +61,12 @@ namespace NzbDrone.Core.Providers public virtual int SaveSeason(Season season) { - throw new NotImplementedException(); + if (_repository.Exists(s => s.SeasonId == season.SeasonId)) + { + return _repository.Update(season); + } + + return (int)_repository.Add(season); } public virtual bool IsIgnored(int seasonId) diff --git a/NzbDrone.Web/Controllers/SeriesController.cs b/NzbDrone.Web/Controllers/SeriesController.cs index 59897545d..f895df2a0 100644 --- a/NzbDrone.Web/Controllers/SeriesController.cs +++ b/NzbDrone.Web/Controllers/SeriesController.cs @@ -22,6 +22,7 @@ namespace NzbDrone.Web.Controllers private readonly SeriesProvider _seriesProvider; private readonly TvDbProvider _tvDbProvider; private readonly JobProvider _jobProvider; + private readonly SeasonProvider _seasonProvider; // // GET: /Series/ @@ -29,7 +30,8 @@ namespace NzbDrone.Web.Controllers EpisodeProvider episodeProvider, QualityProvider qualityProvider, MediaFileProvider mediaFileProvider, RenameProvider renameProvider, RootDirProvider rootDirProvider, - TvDbProvider tvDbProvider, JobProvider jobProvider) + TvDbProvider tvDbProvider, JobProvider jobProvider, + SeasonProvider seasonProvider) { _seriesProvider = seriesProvider; _episodeProvider = episodeProvider; @@ -39,6 +41,7 @@ namespace NzbDrone.Web.Controllers _rootDirProvider = rootDirProvider; _tvDbProvider = tvDbProvider; _jobProvider = jobProvider; + _seasonProvider = seasonProvider; } public ActionResult Index() @@ -64,6 +67,24 @@ namespace NzbDrone.Web.Controllers }); } + public ActionResult SeasonEditor(int seriesId) + { + var model = + _seriesProvider.GetSeries(seriesId).Seasons.Select(s => new SeasonEditModel + { + SeasonId = s.SeasonId, + SeasonNumber = s.SeasonNumber, + SeasonString = GetSeasonString(s.SeasonNumber), + Monitored = s.Monitored + }).OrderBy(s=> s.SeasonNumber).ToList(); + return View(model); + } + + public ActionResult GetSingleSeasonView(SeasonEditModel model) + { + return PartialView("SingleSeason", model); + } + [GridAction] public ActionResult _AjaxSeriesGrid() { @@ -74,7 +95,7 @@ namespace NzbDrone.Web.Controllers [AcceptVerbs(HttpVerbs.Post)] [GridAction] - public ActionResult _SaveAjaxSeriesEditing(int id, string path, bool monitored, bool seasonFolder, int qualityProfileId) + public ActionResult _SaveAjaxSeriesEditing(int id, string path, bool monitored, bool seasonFolder, int qualityProfileId, List seasons) { var oldSeries = _seriesProvider.GetSeries(id); oldSeries.Path = path; @@ -222,6 +243,19 @@ namespace NzbDrone.Web.Controllers return RedirectToAction("UnMapped"); } + [HttpPost] + public ActionResult SaveSeasons(List seasons) + { + foreach (var season in seasons) + { + var seasonInDb = _seasonProvider.GetSeason(season.SeasonId); + seasonInDb.Monitored = season.Monitored; + _seasonProvider.SaveSeason(seasonInDb); + } + + return Content("Saved"); + } + public ActionResult Details(int seriesId) { var series = _seriesProvider.GetSeries(seriesId); @@ -301,5 +335,13 @@ namespace NzbDrone.Web.Controllers return series; } + + private string GetSeasonString(int seasonNumber) + { + if (seasonNumber == 0) + return "Specials"; + + return String.Format("Season# {0}", seasonNumber); + } } } \ No newline at end of file diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index 6b517627d..4fb6dc6f1 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -44,6 +44,16 @@ namespace NzbDrone.Web.Controllers _diskProvider = diskProvider; } + public ActionResult Test() + { + return View(); + } + + public ActionResult TestPartial() + { + return View(); + } + public ActionResult Index(string viewName) { if (viewName != null) @@ -317,29 +327,6 @@ namespace NzbDrone.Web.Controllers } } - public ActionResult AutoCompletePath(string path) - { - var windowsSep = path.LastIndexOf('\\'); - - if (windowsSep > -1) - { - var start = path.Substring(windowsSep + 1); - var dirs = _diskProvider.GetDirectories(path.Substring(0, windowsSep + 1)).Where(d => new DirectoryInfo(d).Name.ToLower().StartsWith(start.ToLower())); - return Content(String.Join("\n", dirs)); - } - - var index = path.LastIndexOf('/'); - - if (index > -1) - { - var start = path.Substring(index + 1); - var dirs = _diskProvider.GetDirectories(path.Substring(0, index + 1)).Where(d => new DirectoryInfo(d).Name.ToLower().StartsWith(start.ToLower())); - return Content(String.Join("\n", dirs)); - } - - return Content(""); - } - public JsonResult JsonAutoCompletePath(string term) { var windowsSep = term.LastIndexOf('\\'); diff --git a/NzbDrone.Web/Models/SeasonEditModel.cs b/NzbDrone.Web/Models/SeasonEditModel.cs new file mode 100644 index 000000000..ab55f3bf1 --- /dev/null +++ b/NzbDrone.Web/Models/SeasonEditModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace NzbDrone.Web.Models +{ + public class SeasonEditModel + { + public int SeasonId { get; set; } + public int SeasonNumber { get; set; } + public string SeasonString { get; set; } + public bool Monitored { get; set; } + } +} \ No newline at end of file diff --git a/NzbDrone.Web/Models/SeriesModel.cs b/NzbDrone.Web/Models/SeriesModel.cs index 1a9fc704b..afd894856 100644 --- a/NzbDrone.Web/Models/SeriesModel.cs +++ b/NzbDrone.Web/Models/SeriesModel.cs @@ -31,6 +31,6 @@ namespace NzbDrone.Web.Models public bool SeasonFolder { get; set; } [DisplayName("Monitored")] - public bool Monitored { get; set; } + public bool Monitored { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 4a3bea3bf..c282916ae 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -240,6 +240,7 @@ + @@ -573,7 +574,6 @@ - @@ -597,7 +597,6 @@ - @@ -639,7 +638,6 @@ - @@ -841,6 +839,18 @@ + + + + + + + + + + + +