コード例 #1
0
        /// <summary>
        /// Determine if the supplied file data points to a music album
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="directoryService">The directory service.</param>
        /// <returns><c>true</c> if [is music album] [the specified data]; otherwise, <c>false</c>.</returns>
        public static bool IsMusicAlbum(string path, IDirectoryService directoryService)
        {
            // If list contains at least 2 audio files or at least one and no video files consider it to contain music
            var foundAudio = 0;

            foreach (var file in directoryService.GetFiles(path))
            {
                var fullName = file.FullName;

                if (EntityResolutionHelper.IsAudioFile(fullName))
                {
                    // Don't resolve these into audio files
                    if (string.Equals(Path.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename) && EntityResolutionHelper.IsAudioFile(fullName))
                    {
                        continue;
                    }

                    foundAudio++;
                }
                if (foundAudio >= 2)
                {
                    return(true);
                }
                if (EntityResolutionHelper.IsVideoFile(fullName))
                {
                    return(false);
                }
            }

            //  or a single audio file and no video files
            return(foundAudio > 0);
        }
コード例 #2
0
        /// <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 <FileSystemInfo> 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;

            foreach (var file in list)
            {
                var fullName = file.FullName;

                if (EntityResolutionHelper.IsAudioFile(fullName))
                {
                    foundAudio++;
                }
                if (foundAudio >= 2)
                {
                    return(true);
                }
                if (EntityResolutionHelper.IsVideoFile(fullName))
                {
                    return(false);
                }
                if (EntityResolutionHelper.IsVideoPlaceHolder(fullName))
                {
                    return(false);
                }
            }

            //  or a single audio file and no video files
            return(foundAudio > 0);
        }
コード例 #3
0
        /// <summary>
        /// Determine if the supplied list contains what we should consider music
        /// </summary>
        /// <param name="list">The list.</param>
        /// <param name="isMusicMediaFolder">if set to <c>true</c> [is music media folder].</param>
        /// <param name="allowSubfolders">if set to <c>true</c> [allow subfolders].</param>
        /// <param name="directoryService">The directory service.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="fileSystem">The file system.</param>
        /// <returns><c>true</c> if the specified list contains music; otherwise, <c>false</c>.</returns>
        private static bool ContainsMusic(IEnumerable <FileSystemInfo> list,
                                          bool isMusicMediaFolder,
                                          bool allowSubfolders,
                                          IDirectoryService directoryService,
                                          ILogger logger,
                                          IFileSystem fileSystem)
        {
            // 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 discSubfolderCount = 0;

            foreach (var fileSystemInfo in list)
            {
                if ((fileSystemInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    if (isMusicMediaFolder && allowSubfolders && IsAlbumSubfolder(fileSystemInfo, true, directoryService, logger, fileSystem))
                    {
                        discSubfolderCount++;
                    }
                    if (!IsAdditionalSubfolderAllowed(fileSystemInfo))
                    {
                        return(false);
                    }
                }

                var fullName = fileSystemInfo.FullName;

                if (EntityResolutionHelper.IsAudioFile(fullName))
                {
                    // Don't resolve these into audio files
                    if (string.Equals(fileSystem.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename))
                    {
                        continue;
                    }

                    foundAudio++;
                }
                else if (EntityResolutionHelper.IsVideoFile(fullName))
                {
                    return(false);
                }
                else if (EntityResolutionHelper.IsVideoPlaceHolder(fullName))
                {
                    return(false);
                }

                if (foundAudio >= 2)
                {
                    return(true);
                }
            }

            //  or a single audio file and no video files
            return(foundAudio > 0 || discSubfolderCount > 0);
        }
コード例 #4
0
        /// <summary>
        /// Resolves the specified args.
        /// </summary>
        /// <param name="args">The args.</param>
        /// <returns>Entities.Audio.Audio.</returns>
        protected override Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args)
        {
            // Return audio if the path is a file and has a matching extension

            if (!args.IsDirectory)
            {
                if (EntityResolutionHelper.IsAudioFile(args.Path))
                {
                    return(new Controller.Entities.Audio.Audio());
                }
            }

            return(null);
        }
コード例 #5
0
        public IEnumerable <MediaSourceInfo> GetCachedChannelItemMediaSources(IChannelMediaItem item)
        {
            var filenamePrefix = item.Id.ToString("N");
            var parentPath     = Path.Combine(ChannelDownloadPath, item.ChannelId);

            try
            {
                var files = new DirectoryInfo(parentPath).EnumerateFiles("*", SearchOption.TopDirectoryOnly);

                if (string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
                {
                    files = files.Where(i => EntityResolutionHelper.IsVideoFile(i.FullName));
                }
                else
                {
                    files = files.Where(i => EntityResolutionHelper.IsAudioFile(i.FullName));
                }

                var file = files
                           .FirstOrDefault(i => i.Name.StartsWith(filenamePrefix, StringComparison.OrdinalIgnoreCase));

                if (file != null)
                {
                    var cachedItem = _libraryManager.ResolvePath(file);

                    if (cachedItem != null)
                    {
                        var hasMediaSources = _libraryManager.GetItemById(cachedItem.Id) as IHasMediaSources;

                        if (hasMediaSources != null)
                        {
                            var source = hasMediaSources.GetMediaSources(true).FirstOrDefault();

                            if (source != null)
                            {
                                source.Type = MediaSourceType.Cache;
                                return(new[] { source });
                            }
                        }
                    }
                }
            }
            catch (DirectoryNotFoundException)
            {
            }

            return(new List <MediaSourceInfo>());
        }
コード例 #6
0
ファイル: TVUtils.cs プロジェクト: zuanbinjai/MediaBrowser
        /// <summary>
        /// Determines whether [is season folder] [the specified path].
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="directoryService">The directory service.</param>
        /// <param name="fileSystem">The file system.</param>
        /// <returns><c>true</c> if [is season folder] [the specified path]; otherwise, <c>false</c>.</returns>
        private static bool IsSeasonFolder(string path, IDirectoryService directoryService, IFileSystem fileSystem)
        {
            var seasonNumber    = GetSeasonNumberFromPath(path);
            var hasSeasonNumber = seasonNumber != null;

            if (!hasSeasonNumber)
            {
                return(false);
            }

            // It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3
            foreach (var fileSystemInfo in directoryService.GetFileSystemEntries(path))
            {
                var attributes = fileSystemInfo.Attributes;

                if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                {
                    continue;
                }

                // Can't enforce this because files saved by Bitcasa are always marked System
                //if ((attributes & FileAttributes.System) == FileAttributes.System)
                //{
                //    continue;
                //}

                if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    //if (IsBadFolder(fileSystemInfo.Name))
                    //{
                    //    return false;
                    //}
                }
                else
                {
                    if (EntityResolutionHelper.IsAudioFile(fileSystemInfo.FullName) &&
                        !string.Equals(fileSystem.GetFileNameWithoutExtension(fileSystemInfo), BaseItem.ThemeSongFilename))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #7
0
        /// <summary>
        /// Resolves the specified args.
        /// </summary>
        /// <param name="args">The args.</param>
        /// <returns>Entities.Audio.Audio.</returns>
        protected override Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args)
        {
            // Return audio if the path is a file and has a matching extension

            if (!args.IsDirectory)
            {
                if (EntityResolutionHelper.IsAudioFile(args.Path))
                {
                    var collectionType = args.GetCollectionType();

                    if (string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase) ||
                        string.IsNullOrEmpty(collectionType))
                    {
                        return(new Controller.Entities.Audio.Audio());
                    }
                }
            }

            return(null);
        }
コード例 #8
0
        /// <summary>
        /// Determine if the supplied file data points to a music album
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns><c>true</c> if [is music album] [the specified data]; otherwise, <c>false</c>.</returns>
        public static bool IsMusicAlbum(string path)
        {
            // If list contains at least 2 audio files or at least one and no video files consider it to contain music
            var foundAudio = 0;

            foreach (var fullName in Directory.EnumerateFiles(path))
            {
                if (EntityResolutionHelper.IsAudioFile(fullName))
                {
                    foundAudio++;
                }
                if (foundAudio >= 2)
                {
                    return(true);
                }
                if (EntityResolutionHelper.IsVideoFile(fullName))
                {
                    return(false);
                }
            }

            //  or a single audio file and no video files
            return(foundAudio > 0);
        }
コード例 #9
0
ファイル: TVUtils.cs プロジェクト: ilovejs/MediaBrowser
 /// <summary>
 /// Determines whether [is season folder] [the specified path].
 /// </summary>
 /// <param name="path">The path.</param>
 /// <param name="directoryService">The directory service.</param>
 /// <returns><c>true</c> if [is season folder] [the specified path]; otherwise, <c>false</c>.</returns>
 private static bool IsSeasonFolder(string path, IDirectoryService directoryService)
 {
     // It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3
     return(GetSeasonNumberFromPath(path) != null && !directoryService.GetFiles(path).Any(i => EntityResolutionHelper.IsAudioFile(i.FullName) && !string.Equals(Path.GetFileNameWithoutExtension(i.FullName), BaseItem.ThemeSongFilename)));
 }