diff --git a/src/NzbDrone.Api/Calendar/CalendarModule.cs b/src/NzbDrone.Api/Calendar/CalendarModule.cs index f403b79c7..804546655 100644 --- a/src/NzbDrone.Api/Calendar/CalendarModule.cs +++ b/src/NzbDrone.Api/Calendar/CalendarModule.cs @@ -2,24 +2,38 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Api.Episodes; +using NzbDrone.Api.Movie; +using NzbDrone.Core.Datastore.Events; +using NzbDrone.Core.MediaCover; +using NzbDrone.Core.MediaFiles; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.MovieStats; +using NzbDrone.Core.Tv; +using NzbDrone.Core.Tv.Events; +using NzbDrone.Core.Validation.Paths; +using NzbDrone.Core.DataAugmentation.Scene; +using NzbDrone.Core.Validation; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Tv; using NzbDrone.SignalR; namespace NzbDrone.Api.Calendar { - public class CalendarModule : EpisodeModuleWithSignalR + public class CalendarModule : MovieModule { - public CalendarModule(IEpisodeService episodeService, - ISeriesService seriesService, - IQualityUpgradableSpecification qualityUpgradableSpecification, - IBroadcastSignalRMessage signalRBroadcaster) - : base(episodeService, seriesService, qualityUpgradableSpecification, signalRBroadcaster, "calendar") + public CalendarModule(IBroadcastSignalRMessage signalR, + IMovieService moviesService, + IMovieStatisticsService moviesStatisticsService, + ISceneMappingService sceneMappingService, + IMapCoversToLocal coverMapper) + : base(signalR, moviesService, moviesStatisticsService, sceneMappingService, coverMapper, "calendar") { + GetResourceAll = GetCalendar; } - private List GetCalendar() + private List GetCalendar() { var start = DateTime.Today; var end = DateTime.Today.AddDays(2); @@ -33,9 +47,9 @@ namespace NzbDrone.Api.Calendar if (queryEnd.HasValue) end = DateTime.Parse(queryEnd.Value); if (queryIncludeUnmonitored.HasValue) includeUnmonitored = Convert.ToBoolean(queryIncludeUnmonitored.Value); - var resources = MapToResource(_episodeService.EpisodesBetweenDates(start, end, includeUnmonitored), true, true); + var resources = _moviesService.GetMoviesBetweenDates(start, end, includeUnmonitored).Select(MapToResource); - return resources.OrderBy(e => e.AirDateUtc).ToList(); + return resources.OrderBy(e => e.InCinemas).ToList(); } } } diff --git a/src/NzbDrone.Api/Series/MovieModule.cs b/src/NzbDrone.Api/Series/MovieModule.cs index a40695a1c..14fda80bc 100644 --- a/src/NzbDrone.Api/Series/MovieModule.cs +++ b/src/NzbDrone.Api/Series/MovieModule.cs @@ -28,7 +28,7 @@ namespace NzbDrone.Api.Movie IHandle { - private readonly IMovieService _moviesService; + protected readonly IMovieService _moviesService; private readonly IMovieStatisticsService _moviesStatisticsService; private readonly IMapCoversToLocal _coverMapper; @@ -78,13 +78,33 @@ namespace NzbDrone.Api.Movie PutValidator.RuleFor(s => s.Path).IsValidPath(); } + public MovieModule(IBroadcastSignalRMessage signalRBroadcaster, + IMovieService moviesService, + IMovieStatisticsService moviesStatisticsService, + ISceneMappingService sceneMappingService, + IMapCoversToLocal coverMapper, + string resource) + : base(signalRBroadcaster, resource) + { + _moviesService = moviesService; + _moviesStatisticsService = moviesStatisticsService; + + _coverMapper = coverMapper; + + GetResourceAll = AllMovie; + GetResourceById = GetMovie; + CreateResource = AddMovie; + UpdateResource = UpdateMovie; + DeleteResource = DeleteMovie; + } + private MovieResource GetMovie(int id) { var movies = _moviesService.GetMovie(id); return MapToResource(movies); } - private MovieResource MapToResource(Core.Tv.Movie movies) + protected MovieResource MapToResource(Core.Tv.Movie movies) { if (movies == null) return null; diff --git a/src/NzbDrone.Core/Tv/MovieRepository.cs b/src/NzbDrone.Core/Tv/MovieRepository.cs index 42bcddf48..f734c5174 100644 --- a/src/NzbDrone.Core/Tv/MovieRepository.cs +++ b/src/NzbDrone.Core/Tv/MovieRepository.cs @@ -14,6 +14,7 @@ namespace NzbDrone.Core.Tv Movie FindByTitle(string cleanTitle, int year); Movie FindByImdbId(string imdbid); Movie FindByTitleSlug(string slug); + List MoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored); List GetMoviesByFileId(int fileId); void SetFileId(int fileId, int movieId); } @@ -119,5 +120,17 @@ namespace NzbDrone.Core.Tv { return Query.Where(m => m.TitleSlug == slug).FirstOrDefault(); } + + public List MoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored) + { + var query = Query.Where(m => m.InCinemas >= start && m.InCinemas <= end).OrWhere(m => m.PhysicalRelease >= start && m.PhysicalRelease <= end); + + if (!includeUnmonitored) + { + query.AndWhere(e => e.Monitored); + } + + return query.ToList(); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Tv/MovieService.cs b/src/NzbDrone.Core/Tv/MovieService.cs index ac9c132db..0cbf226e4 100644 --- a/src/NzbDrone.Core/Tv/MovieService.cs +++ b/src/NzbDrone.Core/Tv/MovieService.cs @@ -26,6 +26,7 @@ namespace NzbDrone.Core.Tv Movie FindByTitleInexact(string title); Movie FindByTitleSlug(string slug); Movie GetMovieByFileId(int fileId); + List GetMoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored); void DeleteMovie(int movieId, bool deleteFiles); List GetAllMovies(); Movie UpdateMovie(Movie movie); @@ -224,5 +225,12 @@ namespace NzbDrone.Core.Tv { return _movieRepository.FindByTitleSlug(slug); } + + public List GetMoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored) + { + var episodes = _movieRepository.MoviesBetweenDates(start.ToUniversalTime(), end.ToUniversalTime(), includeUnmonitored); + + return episodes; + } } } diff --git a/src/UI/Activity/Queue/QueueCollection.js b/src/UI/Activity/Queue/QueueCollection.js index bd3aa065e..37a4983ae 100644 --- a/src/UI/Activity/Queue/QueueCollection.js +++ b/src/UI/Activity/Queue/QueueCollection.js @@ -26,6 +26,12 @@ var QueueCollection = PageableCollection.extend({ }); }, + findMovie : function(movieId) { + return _.find(this.fullCollection.models, function(queueModel) { + return queueModel.get('movie').id === movieId; + }); + }, + sortMappings : { series : { sortValue : function(model, attr) { diff --git a/src/UI/Calendar/CalendarCollection.js b/src/UI/Calendar/CalendarCollection.js index 12739955c..c60ed3722 100644 --- a/src/UI/Calendar/CalendarCollection.js +++ b/src/UI/Calendar/CalendarCollection.js @@ -1,5 +1,5 @@ var Backbone = require('backbone'); -var EpisodeModel = require('../Series/EpisodeModel'); +var EpisodeModel = require('../Movies/MovieModel'); module.exports = Backbone.Collection.extend({ url : window.NzbDrone.ApiRoot + '/calendar', @@ -7,8 +7,8 @@ module.exports = Backbone.Collection.extend({ tableName : 'calendar', comparator : function(model) { - var date = new Date(model.get('airDateUtc')); + var date = new Date(model.get('inCinemas')); var time = date.getTime(); return time; } -}); \ No newline at end of file +}); diff --git a/src/UI/Calendar/CalendarFeedViewTemplate.hbs b/src/UI/Calendar/CalendarFeedViewTemplate.hbs index 8d8e3c7be..0151d65b2 100644 --- a/src/UI/Calendar/CalendarFeedViewTemplate.hbs +++ b/src/UI/Calendar/CalendarFeedViewTemplate.hbs @@ -1,75 +1,57 @@