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 @@ public virtual void EnsureSeason(int seriesId, int seasonId, int seasonNumber) 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 @@ public class SeriesController : Controller private readonly SeriesProvider _seriesProvider; private readonly TvDbProvider _tvDbProvider; private readonly JobProvider _jobProvider; + private readonly SeasonProvider _seasonProvider; // // GET: /Series/ @@ -29,7 +30,8 @@ public SeriesController(SeriesProvider seriesProvider, 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 @@ public SeriesController(SeriesProvider seriesProvider, _rootDirProvider = rootDirProvider; _tvDbProvider = tvDbProvider; _jobProvider = jobProvider; + _seasonProvider = seasonProvider; } public ActionResult Index() @@ -64,6 +67,24 @@ public ActionResult LoadEpisodes(int seriesId) }); } + 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 @@ public ActionResult _AjaxSeriesGrid() [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 @@ public ActionResult _SaveAjaxEditing(string id) 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 @@ private List GetSeriesModels(List seriesInDb) 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 @@ public SettingsController(ConfigProvider configProvider, IndexerProvider indexer _diskProvider = diskProvider; } + public ActionResult Test() + { + return View(); + } + + public ActionResult TestPartial() + { + return View(); + } + public ActionResult Index(string viewName) { if (viewName != null) @@ -317,29 +327,6 @@ public JsonResult AutoConfigureSab() } } - 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 @@ public class SeriesModel 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 @@ + + + + + + + + + + + +