private static ProgramArgs HandleArgs(IEnumerable<string> args) { var argList = new LinkedList<string>(args); var programArgs = new ProgramArgs {DeleteIntermediateFiles = true}; while (argList.First != null) { switch (argList.First.Value.ToLower()) { case "--inputdir": argList.RemoveFirst(); programArgs.InputDirectory = argList.First.Value; argList.RemoveFirst(); break; case "--r": argList.RemoveFirst(); programArgs.Recursive = true; break; case "--k": argList.RemoveFirst(); programArgs.KeepOriginalSubs = true; break; case "--title": argList.RemoveFirst(); programArgs.Title = argList.First.Value; argList.RemoveFirst(); break; case "--v": case "--verbose": argList.RemoveFirst(); programArgs.Verbose = true; break; case "--delete": argList.RemoveFirst(); programArgs.DeleteInputFiles = true; break; case "--keepIntermediate": argList.RemoveFirst(); programArgs.DeleteIntermediateFiles = false; break; default: Console.WriteLine("Invalid Parameter {0}", argList.First); Exit(); break; } } return programArgs; }
private static void ProcessDirectory(ProgramArgs programArgs) { var files = GetAllFiles(programArgs.InputDirectory, programArgs.Recursive).ToList(); files.ForEach(Console.WriteLine); foreach (var file in files) { var fileInfo = new FileInfo(file); var shortName = fileInfo.Name; var fancyName = programArgs.Title; if (string.IsNullOrEmpty(fancyName) && fileInfo.Directory != null) { fancyName = fileInfo.Directory.Name; fancyName = fancyName.Replace('_', ' '); } var logFileName = fancyName + ".log"; var logFileNamePath = Path.Combine(programArgs.InputDirectory, logFileName); SpecialWriter.SetLogFile(logFileNamePath); var directory = fileInfo.DirectoryName; var title = shortName.Split('.')[0]; var subConvert = new SubConverter(); var tracks = subConvert.GetTrackInfo(file, programArgs.Verbose); tracks = tracks.Where(x => x.TrackType == TrackTypes.Subtitles && x.CodecId == "S_HDMV/PGS"); if (!tracks.Any()) { SpecialWriter.WriteLine("No subtitle tracks found"); continue; } SpecialWriter.WriteLine("Found {0} subtitle tracks", tracks.Count()); foreach (var s in tracks) { SpecialWriter.WriteLine("\t Track {0} {1}", s.TrackNumber, s.TrackLanguage.LanguageName); } var trackNumbers = tracks.Select(x=>x.TrackNumber); if (subConvert.ExtractSubtitles(file, title, trackNumbers, directory)) { subConvert.ConvertSubtitles(title, tracks.ToArray(), directory, programArgs.Verbose); subConvert.MergeTracks(file, title, trackNumbers, directory, fancyName, programArgs.KeepOriginalSubs); } RemoveFiles(title, trackNumbers, directory, programArgs.DeleteInputFiles, programArgs.DeleteIntermediateFiles); } }