/// <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> /// Determines whether [is series folder] [the specified path]. /// </summary> /// <param name="path">The path.</param> /// <param name="considerSeasonlessEntries">if set to <c>true</c> [consider seasonless entries].</param> /// <param name="fileSystemChildren">The file system children.</param> /// <param name="directoryService">The directory service.</param> /// <param name="fileSystem">The file system.</param> /// <returns><c>true</c> if [is series folder] [the specified path]; otherwise, <c>false</c>.</returns> public static bool IsSeriesFolder(string path, bool considerSeasonlessEntries, IEnumerable <FileSystemInfo> fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem, ILogger logger) { // A folder with more than 3 non-season folders in will not becounted as a series var nonSeriesFolders = 0; foreach (var child in fileSystemChildren) { var attributes = child.Attributes; if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { //logger.Debug("Igoring series file or folder marked hidden: {0}", child.FullName); continue; } // Can't enforce this because files saved by Bitcasa are always marked System //if ((attributes & FileAttributes.System) == FileAttributes.System) //{ // logger.Debug("Igoring series subfolder marked system: {0}", child.FullName); // continue; //} if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) { if (IsSeasonFolder(child.FullName, directoryService, fileSystem)) { logger.Debug("{0} is a series because of season folder {1}.", path, child.FullName); return(true); } if (IsBadFolder(child.Name)) { logger.Debug("Invalid folder under series: {0}", child.FullName); nonSeriesFolders++; } if (nonSeriesFolders >= 3) { logger.Debug("{0} not a series due to 3 or more invalid folders.", path); return(false); } } else { var fullName = child.FullName; if (EntityResolutionHelper.IsVideoFile(fullName) || EntityResolutionHelper.IsVideoPlaceHolder(fullName)) { if (GetEpisodeNumberFromFile(fullName, considerSeasonlessEntries).HasValue) { return(true); } } } } logger.Debug("{0} is not a series folder.", path); return(false); }
/// <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> /// Determines whether [is series folder] [the specified path]. /// </summary> /// <param name="path">The path.</param> /// <param name="fileSystemChildren">The file system children.</param> /// <returns><c>true</c> if [is series folder] [the specified path]; otherwise, <c>false</c>.</returns> public static bool IsSeriesFolder(string path, IEnumerable <FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { // A folder with more than 3 non-season folders in will not becounted as a series var nonSeriesFolders = 0; foreach (var child in fileSystemChildren) { var attributes = child.Attributes; if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } if ((attributes & FileAttributes.System) == FileAttributes.System) { continue; } if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) { if (IsSeasonFolder(child.FullName, directoryService)) { return(true); } nonSeriesFolders++; if (nonSeriesFolders >= 3) { return(false); } } else { var fullName = child.FullName; if (EntityResolutionHelper.IsVideoFile(fullName) || EntityResolutionHelper.IsVideoPlaceHolder(fullName)) { if (GetEpisodeNumberFromFile(fullName, false).HasValue) { return(true); } } } } return(false); }