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 @@ + + + + + + + + + + + +