internal static void PrintYears(string directory, int level = 2, Action <string>?log = null) { log ??= TraceLog; EnumerateDirectories(directory, level) .ToArray() .ForEach(movie => { XDocument metadata = XDocument.Load(Directory.GetFiles(movie, XmlMetadataSearchPattern, SearchOption.TopDirectoryOnly).First()); string movieDirectory = Path.GetFileName(movie); if (movieDirectory.StartsWith("0.")) { movieDirectory = movieDirectory.Substring("0.".Length); } VideoDirectoryInfo videoDirectoryInfo = new(movieDirectory); string directoryYear = videoDirectoryInfo.Year; string metadataYear = metadata.Root?.Element("year")?.Value ?? throw new InvalidOperationException($"{metadata} has no year."); string videoName = string.Empty; if (!(directoryYear == metadataYear && Directory.GetFiles(movie, PathHelper.AllSearchPattern, SearchOption.TopDirectoryOnly) .Where(file => AllVideoExtensions.Any(extension => file.EndsWith(extension, StringComparison.InvariantCultureIgnoreCase))) .All(video => (videoName = Path.GetFileName(video) ?? throw new InvalidOperationException($"{video} is invalid.")).Contains(directoryYear)))) { log($"Directory: {directoryYear}, Metadata {metadataYear}, Video: {videoName}, {movie}"); } }); }
static Globals() { AllUnprocessedVideoExtensions = new[] { ".AVI", ".MOV", ".MP4", ".3GP", ".3G2", ".MPG", ".MTS", ".WMV" }; AllImageExtensions = new[] { ".JPG", ".THM", ".PNG" }; AllVideoExtensions = AllUnprocessedVideoExtensions.Concat(new[] { ".M4V" }).ToArray(); AllExtensionsToProcess = AllVideoExtensions.Concat(AllImageExtensions).ToArray(); }
internal static void PrintVideosWithErrors(string directory, bool isNoAudioAllowed = false, SearchOption searchOption = SearchOption.TopDirectoryOnly, Func <string, bool>?predicate = null, Action <string>?is720 = null, Action <string>?is1080 = null, Action <string>?log = null) { PrintVideosWithErrors( Directory .EnumerateFiles(directory, PathHelper.AllSearchPattern, searchOption) .Where(file => predicate?.Invoke(file) ?? AllVideoExtensions .Where(extension => !string.Equals(extension, ".iso", StringComparison.InvariantCultureIgnoreCase)) .Any(extension => file.EndsWith(extension, StringComparison.InvariantCultureIgnoreCase))), isNoAudioAllowed, is720, is1080, log); }