/// <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); }
/// <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); }
/// <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); }
/// <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); }
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>()); }
/// <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); }
/// <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); }
/// <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); }
/// <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))); }