diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-12 17:46:50 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-12 17:46:50 -0400 |
| commit | def34281994508213e5200fb150cdbcc817c55ab (patch) | |
| tree | c9233f3dce58987a3db389c90750ea5fa6d38096 /MediaBrowser.Server.Implementations | |
| parent | 455de48a65ddb9ac1fb5ff989b72f9735749a47e (diff) | |
Added poor man's multi-file movie support
Diffstat (limited to 'MediaBrowser.Server.Implementations')
3 files changed, 44 insertions, 4 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index a21c15f4f..136e83aa0 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -8,6 +8,7 @@ using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.IO; +using System.Linq; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { @@ -17,7 +18,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies public class MovieResolver : BaseVideoResolver<Video> { private IServerApplicationPaths ApplicationPaths { get; set; } - + public MovieResolver(IServerApplicationPaths appPaths) { ApplicationPaths = appPaths; @@ -196,10 +197,41 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies } } - // If there are multiple video files, return null, and let the VideoResolver catch them later as plain videos + if (movies.Count > 1) + { + return GetMultiFileMovie(movies); + } + return movies.Count == 1 ? movies[0] : null; } + + /// <summary> + /// Gets the multi file movie. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="movies">The movies.</param> + /// <returns>``0.</returns> + private T GetMultiFileMovie<T>(List<T> movies) + where T : Video, new() + { + var multiPartMovies = movies.OrderBy(i => i.Path) + .Where(i => EntityResolutionHelper.IsMultiPartFile(i.Path)) + .ToList(); + + // They must all be part of the sequence + if (multiPartMovies.Count != movies.Count) + { + return null; + } + + var firstPart = multiPartMovies[0]; + + firstPart.IsMultiPart = true; + + return firstPart; + } + /// <summary> /// Determines whether [is DVD directory] [the specified directory name]. /// </summary> @@ -209,6 +241,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { return directoryName.Equals("video_ts", StringComparison.OrdinalIgnoreCase); } + /// <summary> /// Determines whether [is hd DVD directory] [the specified directory name]. /// </summary> diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ImageCleanupTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ImageCleanupTask.cs index 058789665..fe4a34823 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ImageCleanupTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ImageCleanupTask.cs @@ -142,9 +142,15 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks var video = item as Video; - if (video != null && video.Chapters != null) + if (video != null) { - images = images.Concat(video.Chapters.Where(i => !string.IsNullOrEmpty(i.ImagePath)).Select(i => i.ImagePath)); + if (video.Chapters != null) + { + images = images.Concat(video.Chapters.Where(i => !string.IsNullOrEmpty(i.ImagePath)).Select(i => i.ImagePath)); + } + + var additionalParts = _itemRepo.GetItems(video.AdditionalPartIds).ToList(); + images = additionalParts.Aggregate(images, (current, subItem) => current.Concat(GetPathsInUse(subItem))); } var movie = item as Movie; diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs index 48426585d..12f98cef3 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs @@ -222,6 +222,7 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks items.AddRange(themeVideos); + items.AddRange(videos.SelectMany(i => _itemRepo.GetItems(i.AdditionalPartIds).Cast<Video>()).ToList()); items.AddRange(videos.OfType<Movie>().SelectMany(i => _itemRepo.GetItems(i.SpecialFeatureIds).Cast<Video>()).ToList()); return items.Where(i => |
