diff --git a/NzbDrone.Core/Providers/SeasonProvider.cs b/NzbDrone.Core/Providers/SeasonProvider.cs index 101f37870b..b1f337a362 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 59897545de..f895df2a02 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 6b517627de..4fb6dc6f1c 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 0000000000..ab55f3bf17 --- /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 1a9fc704bd..afd894856c 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 4a3bea3bfd..c282916ae6 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 @@ + + + + + + + + + + + +