diff --git a/NzbDrone.Core/Model/UpcomingEpisodesModel.cs b/NzbDrone.Core/Model/UpcomingEpisodesModel.cs deleted file mode 100644 index b03cc35f4..000000000 --- a/NzbDrone.Core/Model/UpcomingEpisodesModel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; -using NzbDrone.Core.Repository; - -namespace NzbDrone.Core.Model -{ - public class UpcomingEpisodesModel - { - public List Yesterday { get; set; } - public List Today { get; set; } - public List Week { get; set; } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 7d1525891..ea6f4b02c 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -325,7 +325,6 @@ - diff --git a/NzbDrone.Core/Providers/UpcomingEpisodesProvider.cs b/NzbDrone.Core/Providers/UpcomingEpisodesProvider.cs index 2f4e5651e..b5488f888 100644 --- a/NzbDrone.Core/Providers/UpcomingEpisodesProvider.cs +++ b/NzbDrone.Core/Providers/UpcomingEpisodesProvider.cs @@ -18,20 +18,6 @@ namespace NzbDrone.Core.Providers _database = database; } - public virtual UpcomingEpisodesModel Upcoming() - { - var allEps = _database.Fetch(@"SELECT * FROM Episodes - INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId - WHERE Ignored = 0 AND AirDate BETWEEN @0 AND @1", - DateTime.Today.AddDays(-1), DateTime.Today.AddDays(8)); - - var yesterday = allEps.Where(e => e.AirDate == DateTime.Today.AddDays(-1)).ToList(); - var today = allEps.Where(e => e.AirDate == DateTime.Today).ToList(); - var week = allEps.Where(e => e.AirDate > DateTime.Today).ToList(); - - return new UpcomingEpisodesModel { Yesterday = yesterday, Today = today, Week = week }; - } - public virtual List Yesterday() { return _database.Fetch(@"SELECT * FROM Episodes diff --git a/NzbDrone.Web/Content/Grid.css b/NzbDrone.Web/Content/Grid.css index 4f9c4a5d5..7c8142c4a 100644 --- a/NzbDrone.Web/Content/Grid.css +++ b/NzbDrone.Web/Content/Grid.css @@ -2,15 +2,83 @@ { width: 18px; height: 18px; - padding: 1px; - margin: 2px; + padding: 3px 1px; + margin: 0px; + vertical-align: middle; } .searchImage:hover, .renameImage:hover, .ignoreEpisode:hover, .ignoreEpisodesMaster:hover { background-color: #065EFE; } + +/* Custom Grid */ +.seriesTable +{ + width: 100%; + border-width: 1px; + border-spacing: 2px; + border-style: none; + border-color: white; + border-collapse: collapse; +} + +.seriesTable th +{ + font-family: "Segoe UI Light" , "Open Sans" , "Segoe UI" , sans-serif; + border-width: 300; + font-size: 17px; + padding: 2px; + border-style: none; + border-color: #EEEEEE; + padding-left: 7px; + text-align: left; + background-color: white; + font-weight: lighter; +} + +.seriesTable td +{ + border-width: 1px; + padding: 0px 8px 0px 8px; + border-style: inset; + border-color: #EEEEEE; +} + +.title-row +{ + font-family: "Segoe UI Light" , "Open Sans" , "Segoe UI" , sans-serif; + font-size: 17px; + background-color: grey; + font-weight: lighter; + color: white; +} + +.detail-row +{ + display: none; +} +/* Colour alternating rows */ +.seriesTable .alt-row +{ + background: #f0f5ff; +} + +/* Episode Grid Row Colouring */ +.episodeIgnored +{ + background-color: #F2F5A9; +} + +.episodeMissing +{ + background-color: #F5A9A9; +} + + + +/* Telerik Grid */ .t-grid td { line-height: 0.6em; diff --git a/NzbDrone.Web/Content/Images/Delete.png b/NzbDrone.Web/Content/Images/Delete.png new file mode 100644 index 000000000..36e8689b7 Binary files /dev/null and b/NzbDrone.Web/Content/Images/Delete.png differ diff --git a/NzbDrone.Web/Content/NzbDrone.css b/NzbDrone.Web/Content/NzbDrone.css index 01e9a722c..d921daacc 100644 --- a/NzbDrone.Web/Content/NzbDrone.css +++ b/NzbDrone.Web/Content/NzbDrone.css @@ -267,15 +267,4 @@ button span, input[type="button"] span, input[type="submit"] span, input[type="r background: rgb(40, 40, 40); color: rgb(169, 169, 169); padding: 4px; -} - -/* Episode Grid Row Colouring */ -.episodeIgnored -{ - background-color: #F2F5A9; -} - -.episodeMissing -{ - background-color: #F5A9A9; } \ No newline at end of file diff --git a/NzbDrone.Web/Content/Overrides.css b/NzbDrone.Web/Content/Overrides.css index 4254cdef9..8a9c01b82 100644 --- a/NzbDrone.Web/Content/Overrides.css +++ b/NzbDrone.Web/Content/Overrides.css @@ -26,6 +26,11 @@ color: #065EFE; } +.ui-progressbar-value +{ + background: #065EFE url(./jQueryUI/images/ui-bg_flat_30_065efe_40x100.png) 50% 50% repeat-x; +} + .jquery-tabs { margin-top: 10px; diff --git a/NzbDrone.Web/Content/jQueryUI/images/ui-bg_flat_30_b40404_40x100.png b/NzbDrone.Web/Content/jQueryUI/images/ui-bg_flat_30_b40404_40x100.png new file mode 100644 index 000000000..08c16fc87 Binary files /dev/null and b/NzbDrone.Web/Content/jQueryUI/images/ui-bg_flat_30_b40404_40x100.png differ diff --git a/NzbDrone.Web/Controllers/SeriesController.cs b/NzbDrone.Web/Controllers/SeriesController.cs index 13a6a6bed..79e0c0f68 100644 --- a/NzbDrone.Web/Controllers/SeriesController.cs +++ b/NzbDrone.Web/Controllers/SeriesController.cs @@ -37,6 +37,12 @@ namespace NzbDrone.Web.Controllers } public ActionResult Index() + { + var series = GetSeriesModels(_seriesProvider.GetAllSeriesWithEpisodeCount()).OrderBy(o => SortHelper.SkipArticles(o.Title)).ToList(); + return View(series); + } + + public ActionResult SeriesEditor(int seriesId) { var profiles = _qualityProvider.All(); ViewData["SelectList"] = new SelectList(profiles, "QualityProfileId", "Name"); @@ -50,47 +56,31 @@ namespace NzbDrone.Web.Controllers ViewData["BacklogSettingSelectList"] = new SelectList(backlogStatusTypes, "Key", "Value"); - return View(); - } - - [GridAction] - public ActionResult _AjaxSeriesGrid() - { - var series = GetSeriesModels(_seriesProvider.GetAllSeriesWithEpisodeCount()).OrderBy(o => SortHelper.SkipArticles(o.Title)); - return View(new GridModel(series)); + var series = GetSeriesModels(new List{_seriesProvider.GetSeries(seriesId)}).Single(); + return View(series); } - [AcceptVerbs(HttpVerbs.Post)] - [GridAction] - public ActionResult _SaveAjaxSeriesEditing(int id, string path, bool monitored, bool seasonFolder, int qualityProfileId, int backlogSetting) + [HttpPost] + public EmptyResult SaveSeriesEditor(SeriesModel seriesModel) { - var oldSeries = _seriesProvider.GetSeries(id); - oldSeries.Monitored = monitored; - oldSeries.SeasonFolder = seasonFolder; - oldSeries.QualityProfileId = qualityProfileId; - oldSeries.Path = path; - oldSeries.BacklogSetting = (BacklogSettingType)backlogSetting; + var series = _seriesProvider.GetSeries(seriesModel.SeriesId); + series.Monitored = seriesModel.Monitored; + series.SeasonFolder = seriesModel.SeasonFolder; + series.QualityProfileId = seriesModel.QualityProfileId; + series.Path = seriesModel.Path; + series.BacklogSetting = (BacklogSettingType)seriesModel.BacklogSetting; - _seriesProvider.UpdateSeries(oldSeries); + _seriesProvider.UpdateSeries(series); - var series = GetSeriesModels(_seriesProvider.GetAllSeriesWithEpisodeCount()).OrderBy(o => SortHelper.SkipArticles(o.Title)); - return View(new GridModel(series)); + return new EmptyResult(); } - [GridAction] - public ActionResult _DeleteAjaxSeriesEditing(int id) + [HttpPost] + public EmptyResult DeleteSeries(int seriesId) { - //Grab the series from the DB so we can remove it from the list we return to the client - var seriesInDb = _seriesProvider.GetAllSeriesWithEpisodeCount().ToList(); - - //Remove this so we don't send it back to the client (since it hasn't really been deleted yet) - seriesInDb.RemoveAll(s => s.SeriesId == id); - - //Start removing this series - _jobProvider.QueueJob(typeof(DeleteSeriesJob), id); + _jobProvider.QueueJob(typeof(DeleteSeriesJob), seriesId); - var series = GetSeriesModels(seriesInDb).OrderBy(o => SortHelper.SkipArticles(o.Title)); - return View(new GridModel(series)); + return new EmptyResult(); } public JsonResult LocalSearch(string term) diff --git a/NzbDrone.Web/Controllers/UpcomingController.cs b/NzbDrone.Web/Controllers/UpcomingController.cs index 9f887bf2a..7f562c2c4 100644 --- a/NzbDrone.Web/Controllers/UpcomingController.cs +++ b/NzbDrone.Web/Controllers/UpcomingController.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Web.Mvc; using NzbDrone.Core; using NzbDrone.Core.Providers; +using NzbDrone.Core.Repository; using NzbDrone.Web.Models; using Telerik.Web.Mvc; @@ -23,13 +24,20 @@ namespace NzbDrone.Web.Controllers public ActionResult Index() { - return View(); + var upcoming = new UpcomingEpisodesModel + { + Yesterday = GetUpcomingEpisodeModels(_upcomingEpisodesProvider.Yesterday()), + Today = GetUpcomingEpisodeModels(_upcomingEpisodesProvider.Today()), + Tomorrow = GetUpcomingEpisodeModels(_upcomingEpisodesProvider.Tomorrow()), + Week = GetUpcomingEpisodeModels(_upcomingEpisodesProvider.Week()) + }; + + return View(upcoming); } - [GridAction] - public ActionResult _AjaxBindingYesterday() + private List GetUpcomingEpisodeModels(List episodes) { - var upcoming = _upcomingEpisodesProvider.Yesterday().Select(u => new UpcomingEpisodeModel + return episodes.Select(u => new UpcomingEpisodeModel { SeriesId = u.Series.SeriesId, EpisodeId = u.EpisodeId, @@ -42,72 +50,7 @@ namespace NzbDrone.Web.Controllers AirDate = u.AirDate.Value.ToBestDateString(), AirTime = String.IsNullOrEmpty(u.Series.AirTimes) ? "?" : Convert.ToDateTime(u.Series.AirTimes).ToShortTimeString(), Status = u.Status.ToString() - }); - - return View(new GridModel(upcoming)); - } - - [GridAction] - public ActionResult _AjaxBindingToday() - { - var upcoming = _upcomingEpisodesProvider.Today().Select(u => new UpcomingEpisodeModel - { - SeriesId = u.Series.SeriesId, - EpisodeId = u.EpisodeId, - SeriesTitle = u.Series.Title, - SeasonNumber = u.SeasonNumber, - EpisodeNumber = u.EpisodeNumber, - Title = u.Title, - Overview = u.Overview, - AirDateTime = GetDateTime(u.AirDate.Value, u.Series.AirTimes), - AirDate = u.AirDate.Value.ToBestDateString(), - AirTime = String.IsNullOrEmpty(u.Series.AirTimes) ? "?" : Convert.ToDateTime(u.Series.AirTimes).ToShortTimeString(), - Status = u.Status.ToString() - }); - - return View(new GridModel(upcoming)); - } - - [GridAction] - public ActionResult _AjaxBindingTomorrow() - { - var upcoming = _upcomingEpisodesProvider.Tomorrow().Select(u => new UpcomingEpisodeModel - { - SeriesId = u.Series.SeriesId, - EpisodeId = u.EpisodeId, - SeriesTitle = u.Series.Title, - SeasonNumber = u.SeasonNumber, - EpisodeNumber = u.EpisodeNumber, - Title = u.Title, - Overview = u.Overview, - AirDateTime = GetDateTime(u.AirDate.Value, u.Series.AirTimes), - AirDate = u.AirDate.Value.ToBestDateString(), - AirTime = String.IsNullOrEmpty(u.Series.AirTimes) ? "?" : Convert.ToDateTime(u.Series.AirTimes).ToShortTimeString(), - Status = u.Status.ToString() - }); - - return View(new GridModel(upcoming)); - } - - [GridAction] - public ActionResult _AjaxBindingWeek() - { - var upcoming = _upcomingEpisodesProvider.Week().Select(u => new UpcomingEpisodeModel - { - SeriesId = u.Series.SeriesId, - EpisodeId = u.EpisodeId, - SeriesTitle = u.Series.Title, - SeasonNumber = u.SeasonNumber, - EpisodeNumber = u.EpisodeNumber, - Title = u.Title, - Overview = u.Overview, - AirDateTime = GetDateTime(u.AirDate.Value, u.Series.AirTimes), - AirDate = u.AirDate.Value.ToBestDateString(), - AirTime = String.IsNullOrEmpty(u.Series.AirTimes) ? "?" : Convert.ToDateTime(u.Series.AirTimes).ToShortTimeString(), - Status = u.Status.ToString() - }); - - return View(new GridModel(upcoming)); + }).OrderBy(e => e.AirDateTime).ToList(); } private DateTime GetDateTime(DateTime airDate, string airTime) diff --git a/NzbDrone.Web/Models/UpcomingEpisodesModel.cs b/NzbDrone.Web/Models/UpcomingEpisodesModel.cs new file mode 100644 index 000000000..411237491 --- /dev/null +++ b/NzbDrone.Web/Models/UpcomingEpisodesModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using NzbDrone.Core.Model; +using NzbDrone.Core.Repository; + +namespace NzbDrone.Web.Models +{ + public class UpcomingEpisodesModel + { + public List Yesterday { get; set; } + public List Today { get; set; } + public List Tomorrow { get; set; } + public List Week { get; set; } + } +} \ No newline at end of file diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 3650d38ed..66b910a0d 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -142,6 +142,7 @@ + @@ -227,6 +228,7 @@ + @@ -455,9 +457,6 @@ - - - @@ -510,12 +509,14 @@ GlobalResourceProxyGenerator GridLocalization.en-US.designer.cs + Designer GlobalResourceProxyGenerator EditorLocalization.en-US.designer.cs + Designer @@ -548,6 +549,15 @@ + + + + + + + + +