diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-03 01:58:04 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-03 01:58:04 -0500 |
| commit | ac3a94f5a1dbb94b374e0160c344fcf99af9b696 (patch) | |
| tree | f8b109c3bb5ebce964363e9df874bf3235259616 /MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs | |
| parent | 627b8370a89cbf9826898c2edfc46767dfb5272a (diff) | |
moved resolvers to implementations, trimmed nuget package a bit
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs new file mode 100644 index 0000000000..31016e2fc8 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -0,0 +1,92 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.IO; +using MediaBrowser.Controller.Library; + +namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio +{ + /// <summary> + /// Class MusicAlbumResolver + /// </summary> + public class MusicAlbumResolver : ItemResolver<MusicAlbum> + { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> + public override ResolverPriority Priority + { + get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one + } + + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>MusicAlbum.</returns> + protected override MusicAlbum Resolve(ItemResolveArgs args) + { + if (!args.IsDirectory) return null; + + //Avoid mis-identifying top folders + if (args.Parent == null) return null; + if (args.Parent.IsRoot) return null; + + return IsMusicAlbum(args) ? new MusicAlbum() : null; + } + + + /// <summary> + /// Determine if the supplied file data points to a music album + /// </summary> + /// <param name="data">The data.</param> + /// <returns><c>true</c> if [is music album] [the specified data]; otherwise, <c>false</c>.</returns> + public static bool IsMusicAlbum(WIN32_FIND_DATA data) + { + return ContainsMusic(FileSystem.GetFiles(data.Path)); + } + + /// <summary> + /// Determine if the supplied reslove args should be considered a music album + /// </summary> + /// <param name="args">The args.</param> + /// <returns><c>true</c> if [is music album] [the specified args]; otherwise, <c>false</c>.</returns> + public static bool IsMusicAlbum(ItemResolveArgs args) + { + // Args points to an album if parent is an Artist folder or it directly contains music + if (args.IsDirectory) + { + //if (args.Parent is MusicArtist) return true; //saves us from testing children twice + if (ContainsMusic(args.FileSystemChildren)) return true; + } + + + return false; + } + + /// <summary> + /// Determine if the supplied list contains what we should consider music + /// </summary> + /// <param name="list">The list.</param> + /// <returns><c>true</c> if the specified list contains music; otherwise, <c>false</c>.</returns> + public static bool ContainsMusic(IEnumerable<WIN32_FIND_DATA> list) + { + // If list contains at least 2 audio files or at least one and no video files consider it to contain music + var foundAudio = 0; + var foundVideo = 0; + foreach (var file in list) + { + if (AudioResolver.IsAudioFile(file)) foundAudio++; + if (foundAudio >= 2) + { + return true; + } + if (EntityResolutionHelper.IsVideoFile(file.Path)) foundVideo++; + } + + // or a single audio file and no video files + if (foundAudio > 0 && foundVideo == 0) return true; + return false; + } + } +} |
