aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-27 21:59:26 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-27 21:59:26 -0400
commit657097ee1511824960ca39c3b8c6c23bda5a840f (patch)
treeb738d23436faf03d975041364b00b62605b5ce7e
parent1f1eab209a289a0ad8ba37f49caf272a6fd9c104 (diff)
fixes #296 - Prevent non-movie videos from appearing in Movies view
-rw-r--r--MediaBrowser.Api/LibraryService.cs3
-rw-r--r--MediaBrowser.Api/UserLibrary/GenresService.cs4
-rw-r--r--MediaBrowser.Api/UserLibrary/PersonsService.cs4
-rw-r--r--MediaBrowser.Api/UserLibrary/StudiosService.cs4
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs5
-rw-r--r--MediaBrowser.Controller/Entities/MusicVideo.cs42
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieDbImagesProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs9
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs9
-rw-r--r--MediaBrowser.Controller/Providers/Movies/OpenMovieDatabaseProvider.cs2
-rw-r--r--MediaBrowser.Controller/Resolvers/BaseVideoResolver.cs14
-rw-r--r--MediaBrowser.Model/Dto/ItemByNameCounts.cs5
-rw-r--r--MediaBrowser.Model/Dto/ItemCounts.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs49
-rw-r--r--MediaBrowser.WebDashboard/Api/DashboardService.cs1
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj6
20 files changed, 136 insertions, 35 deletions
diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs
index 4998a122d8..ecd9f6fb6e 100644
--- a/MediaBrowser.Api/LibraryService.cs
+++ b/MediaBrowser.Api/LibraryService.cs
@@ -185,7 +185,8 @@ namespace MediaBrowser.Api
MovieCount = items.OfType<Movie>().Count(),
SeriesCount = items.OfType<Series>().Count(),
SongCount = items.OfType<Audio>().Count(),
- TrailerCount = items.OfType<Trailer>().Count()
+ TrailerCount = items.OfType<Trailer>().Count(),
+ MusicVideoCount = items.OfType<MusicVideo>().Count()
};
return ToOptimizedResult(counts);
diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs
index 3f5e99f348..6dada47322 100644
--- a/MediaBrowser.Api/UserLibrary/GenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/GenresService.cs
@@ -174,7 +174,9 @@ namespace MediaBrowser.Api.UserLibrary
SongCount = items.OfType<Audio>().Count(),
- AlbumCount = items.OfType<MusicAlbum>().Count()
+ AlbumCount = items.OfType<MusicAlbum>().Count(),
+
+ MusicVideoCount = items.OfType<MusicVideo>().Count()
};
return ToOptimizedResult(counts);
diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs
index 7aff521b16..9d0aa88c9d 100644
--- a/MediaBrowser.Api/UserLibrary/PersonsService.cs
+++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs
@@ -165,7 +165,9 @@ namespace MediaBrowser.Api.UserLibrary
AlbumCount = items.OfType<MusicAlbum>().Count(),
- EpisodeCount = items.OfType<Episode>().Count()
+ EpisodeCount = items.OfType<Episode>().Count(),
+
+ MusicVideoCount = items.OfType<MusicVideo>().Count()
};
return ToOptimizedResult(counts);
diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs
index d0d905e786..7b9539a409 100644
--- a/MediaBrowser.Api/UserLibrary/StudiosService.cs
+++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs
@@ -136,7 +136,9 @@ namespace MediaBrowser.Api.UserLibrary
SongCount = items.OfType<Audio>().Count(),
- AlbumCount = items.OfType<MusicAlbum>().Count()
+ AlbumCount = items.OfType<MusicAlbum>().Count(),
+
+ MusicVideoCount = items.OfType<MusicVideo>().Count()
};
return ToOptimizedResult(counts);
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 5e068c2610..5a3fb88188 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -1,6 +1,5 @@
-using System;
-using MediaBrowser.Controller.IO;
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Entities;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
diff --git a/MediaBrowser.Controller/Entities/MusicVideo.cs b/MediaBrowser.Controller/Entities/MusicVideo.cs
new file mode 100644
index 0000000000..983ce1567c
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/MusicVideo.cs
@@ -0,0 +1,42 @@
+using MediaBrowser.Model.Entities;
+using System.Runtime.Serialization;
+
+namespace MediaBrowser.Controller.Entities
+{
+ public class MusicVideo : Video
+ {
+ /// <summary>
+ /// Should be overridden to return the proper folder where metadata lives
+ /// </summary>
+ /// <value>The meta location.</value>
+ [IgnoreDataMember]
+ public override string MetaLocation
+ {
+ get
+ {
+ return VideoType == VideoType.VideoFile || VideoType == VideoType.Iso ? System.IO.Path.GetDirectoryName(Path) : Path;
+ }
+ }
+
+ /// <summary>
+ /// Gets the user data key.
+ /// </summary>
+ /// <returns>System.String.</returns>
+ public override string GetUserDataKey()
+ {
+ return this.GetProviderId(MetadataProviders.Tmdb) ?? this.GetProviderId(MetadataProviders.Imdb) ?? base.GetUserDataKey();
+ }
+
+ /// <summary>
+ /// Needed because the resolver stops at the movie folder and we find the video inside.
+ /// </summary>
+ /// <value><c>true</c> if [use parent path to create resolve args]; otherwise, <c>false</c>.</value>
+ protected override bool UseParentPathToCreateResolveArgs
+ {
+ get
+ {
+ return VideoType == VideoType.VideoFile || VideoType == VideoType.Iso;
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 1a97201d8a..cdcc456223 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -73,6 +73,7 @@
<Compile Include="Configuration\IServerConfigurationManager.cs" />
<Compile Include="Dto\SessionInfoDtoBuilder.cs" />
<Compile Include="Entities\Audio\MusicAlbumDisc.cs" />
+ <Compile Include="Entities\MusicVideo.cs" />
<Compile Include="Library\ILibraryPostScanTask.cs" />
<Compile Include="Library\ILibraryPrescanTask.cs" />
<Compile Include="Providers\Movies\FanArtMovieUpdatesPrescanTask.cs" />
diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
index 8f55d5b47c..7ea399fe68 100644
--- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
+++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
@@ -235,7 +235,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <param name="video">The video.</param>
private void AddExternalSubtitles(Video video)
{
- var useParent = (video.VideoType == VideoType.VideoFile || video.VideoType == VideoType.Iso) && !(video is Movie);
+ var useParent = (video.VideoType == VideoType.VideoFile || video.VideoType == VideoType.Iso) && !(video is Movie) && !(video is MusicVideo);
if (useParent && video.Parent == null)
{
diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
index dc71a860cc..ab7f87d696 100644
--- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
@@ -103,7 +103,7 @@ namespace MediaBrowser.Controller.Providers.Movies
return !trailer.IsLocalTrailer;
}
- return item is Movie || item is BoxSet;
+ return item is Movie || item is BoxSet || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbImagesProvider.cs
index 17d284edb9..e93a936a98 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieDbImagesProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieDbImagesProvider.cs
@@ -82,7 +82,7 @@ namespace MediaBrowser.Controller.Providers.Movies
}
// Don't support local trailers
- return item is Movie || item is BoxSet;
+ return item is Movie || item is BoxSet || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
index 097b425874..e3e1448443 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
@@ -100,7 +100,7 @@ namespace MediaBrowser.Controller.Providers.Movies
}
// Don't support local trailers
- return item is Movie || item is BoxSet;
+ return item is Movie || item is BoxSet || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
index 1556658d63..3d03903845 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
@@ -23,7 +23,14 @@ namespace MediaBrowser.Controller.Providers.Movies
public override bool Supports(BaseItem item)
{
- return item is Movie || item is BoxSet;
+ var trailer = item as Trailer;
+
+ if (trailer != null)
+ {
+ return !trailer.IsLocalTrailer;
+ }
+
+ return item is Movie || item is BoxSet || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
index 40c6feb617..25fd94138f 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
@@ -25,7 +25,14 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
public override bool Supports(BaseItem item)
{
- return item is Movie || item is BoxSet;
+ var trailer = item as Trailer;
+
+ if (trailer != null)
+ {
+ return !trailer.IsLocalTrailer;
+ }
+
+ return item is Movie || item is BoxSet || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/OpenMovieDatabaseProvider.cs b/MediaBrowser.Controller/Providers/Movies/OpenMovieDatabaseProvider.cs
index ec33a17140..855e527bfd 100644
--- a/MediaBrowser.Controller/Providers/Movies/OpenMovieDatabaseProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/OpenMovieDatabaseProvider.cs
@@ -87,7 +87,7 @@ namespace MediaBrowser.Controller.Providers.Movies
return !trailer.IsLocalTrailer;
}
- return item is Movie;
+ return item is Movie || item is MusicVideo;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Resolvers/BaseVideoResolver.cs b/MediaBrowser.Controller/Resolvers/BaseVideoResolver.cs
index c2536cd604..3decbc0a40 100644
--- a/MediaBrowser.Controller/Resolvers/BaseVideoResolver.cs
+++ b/MediaBrowser.Controller/Resolvers/BaseVideoResolver.cs
@@ -20,6 +20,18 @@ namespace MediaBrowser.Controller.Resolvers
/// <returns>`0.</returns>
protected override T Resolve(ItemResolveArgs args)
{
+ return ResolveVideo<T>(args);
+ }
+
+ /// <summary>
+ /// Resolves the video.
+ /// </summary>
+ /// <typeparam name="TVideoType">The type of the T video type.</typeparam>
+ /// <param name="args">The args.</param>
+ /// <returns>``0.</returns>
+ protected TVideoType ResolveVideo<TVideoType>(ItemResolveArgs args)
+ where TVideoType : Video, new()
+ {
// If the path is a file check for a matching extensions
if (!args.IsDirectory)
{
@@ -30,7 +42,7 @@ namespace MediaBrowser.Controller.Resolvers
var type = string.Equals(extension, ".iso", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".img", StringComparison.OrdinalIgnoreCase) ?
VideoType.Iso : VideoType.VideoFile;
- return new T
+ return new TVideoType
{
VideoType = type,
Path = args.Path
diff --git a/MediaBrowser.Model/Dto/ItemByNameCounts.cs b/MediaBrowser.Model/Dto/ItemByNameCounts.cs
index ec8e0e95f9..20a8a4fa7c 100644
--- a/MediaBrowser.Model/Dto/ItemByNameCounts.cs
+++ b/MediaBrowser.Model/Dto/ItemByNameCounts.cs
@@ -46,5 +46,10 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The album count.</value>
public int AlbumCount { get; set; }
+ /// <summary>
+ /// Gets or sets the music video count.
+ /// </summary>
+ /// <value>The music video count.</value>
+ public int MusicVideoCount { get; set; }
}
}
diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs
index 7f0a91e912..6c60c183ea 100644
--- a/MediaBrowser.Model/Dto/ItemCounts.cs
+++ b/MediaBrowser.Model/Dto/ItemCounts.cs
@@ -41,5 +41,10 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The album count.</value>
public int AlbumCount { get; set; }
+ /// <summary>
+ /// Gets or sets the music video count.
+ /// </summary>
+ /// <value>The music video count.</value>
+ public int MusicVideoCount { get; set; }
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
index 33071080da..ab5b6a58ad 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
@@ -15,7 +15,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// <summary>
/// Class MovieResolver
/// </summary>
- public class MovieResolver : BaseVideoResolver<Movie>
+ public class MovieResolver : BaseVideoResolver<Video>
{
private IServerApplicationPaths ApplicationPaths { get; set; }
@@ -43,10 +43,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
- /// <returns>Movie.</returns>
- protected override Movie Resolve(ItemResolveArgs args)
+ /// <returns>Video.</returns>
+ protected override Video Resolve(ItemResolveArgs args)
{
- // Must be a directory and under a 'Movies' VF
+ // Must be a directory
if (args.IsDirectory)
{
// Avoid expensive tests against VF's and all their children by not allowing this
@@ -70,8 +70,22 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
return null;
}
- // The movie must be a video file
- return FindMovie(args);
+ // Since the looping is expensive, this is an optimization to help us avoid it
+ if (args.ContainsMetaFileByName("series.xml") || args.Path.IndexOf("[tvdbid", StringComparison.OrdinalIgnoreCase) != -1)
+ {
+ return null;
+ }
+
+ if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1)
+ {
+ return FindMovie<Trailer>(args);
+ }
+ if (args.Path.IndexOf("[musicvideos]", StringComparison.OrdinalIgnoreCase) != -1)
+ {
+ return FindMovie<MusicVideo>(args);
+ }
+
+ return FindMovie<Movie>(args);
}
return null;
@@ -82,7 +96,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// </summary>
/// <param name="item">The item.</param>
/// <param name="args">The args.</param>
- protected override void SetInitialItemValues(Movie item, ItemResolveArgs args)
+ protected override void SetInitialItemValues(Video item, ItemResolveArgs args)
{
base.SetInitialItemValues(item, args);
@@ -93,7 +107,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// Sets the provider id from path.
/// </summary>
/// <param name="item">The item.</param>
- private void SetProviderIdFromPath(Movie item)
+ private void SetProviderIdFromPath(Video item)
{
//we need to only look at the name of this actual item (not parents)
var justName = Path.GetFileName(item.Path);
@@ -111,18 +125,13 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// </summary>
/// <param name="args">The args.</param>
/// <returns>Movie.</returns>
- private Movie FindMovie(ItemResolveArgs args)
+ private T FindMovie<T>(ItemResolveArgs args)
+ where T : Video, new ()
{
- // Since the looping is expensive, this is an optimization to help us avoid it
- if (args.ContainsMetaFileByName("series.xml") || args.Path.IndexOf("[tvdbid", StringComparison.OrdinalIgnoreCase) != -1)
- {
- return null;
- }
-
// Optimization to avoid having to resolve every file
bool? isKnownMovie = null;
- var movies = new List<Movie>();
+ var movies = new List<T>();
// Loop through each child file/folder and see if we find a video
foreach (var child in args.FileSystemChildren)
@@ -131,7 +140,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
{
if (IsDvdDirectory(child.Name))
{
- return new Movie
+ return new T
{
Path = args.Path,
VideoType = VideoType.Dvd
@@ -139,7 +148,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
}
if (IsBluRayDirectory(child.Name))
{
- return new Movie
+ return new T
{
Path = args.Path,
VideoType = VideoType.BluRay
@@ -147,7 +156,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
}
if (IsHdDvdDirectory(child.Name))
{
- return new Movie
+ return new T
{
Path = args.Path,
VideoType = VideoType.HdDvd
@@ -169,7 +178,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
Path = child.FullName
};
- var item = base.Resolve(childArgs);
+ var item = ResolveVideo<T>(childArgs);
if (item != null)
{
diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs
index ecaaee8159..20c612be24 100644
--- a/MediaBrowser.WebDashboard/Api/DashboardService.cs
+++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs
@@ -489,6 +489,7 @@ namespace MediaBrowser.WebDashboard.Api
"musicartists.js",
"musicgenres.js",
"musicrecommended.js",
+ "musicvideos.js",
"playlist.js",
"plugincatalogpage.js",
"pluginspage.js",
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index 408f83ac41..f625a8cfdd 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -324,6 +324,9 @@
<Content Include="dashboard-ui\musicrecommended.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\musicvideos.html">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\scripts\edititemimages.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -336,6 +339,9 @@
<Content Include="dashboard-ui\scripts\musicrecommended.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\scripts\musicvideos.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\scripts\search.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>