public void Organise(IMedia media, DirectoryInfoBase outputDirectory, OrganiserConversionOptions conversionOption, bool strictSeason) { // Create working directory. WorkingDirectory = _fileSystem.DirectoryInfo.FromDirectoryName(_fileSystem.Path.Combine(_fileSystem.Path.GetTempPath(), "WorkingArea")); // Create working directory if it does not exist. if(!WorkingDirectory.Exists) { WorkingDirectory.Create(); } // Copy to working area. CopyMediaToWorkingArea(media); // Convert if required. if(conversionOption == OrganiserConversionOptions.Force) { Logger.Log("Organiser").StdOut.WriteLine("Conversion set to \"force\". Will convert. {0}", media.MediaFile.FullName); ConvertMedia(media); } else if(media.RequiresConversion) { if(conversionOption == OrganiserConversionOptions.Skip) { Logger.Log("Organiser").StdOut.WriteLine("Media requires conversion. Conversion set to \"skip\", skipping conversion. {0}", media.MediaFile.FullName); } else { Logger.Log("Organiser").StdOut.WriteLine("Media requires conversion. Will convert. {0}", media.MediaFile.FullName); ConvertMedia(media); } } // Extract media details exhaustivly. ExtractExhaustiveMediaDetails(media, strictSeason); // Save media meta data. var saveResponse = SaveMediaMetaData(media); if(!saveResponse) { if(conversionOption == OrganiserConversionOptions.Skip) { Logger.Log("Organiser").StdOut.WriteLine("Unable to save metadata. Conversion set to \"skip\", skipping conversion. {0}", media.MediaFile.FullName); } else { Logger.Log("Organiser").StdOut.WriteLine("Unable to save metadata. Will convert. {0}", media.MediaFile.FullName); ConvertMedia(media); SaveMediaMetaData(media); } } // Rename media. RenameMediaToCleanFileName(media); // If output directory not provided, delete file. Otherwise move to output directory. MoveMediaToOutputDirectory(media, outputDirectory); }
public Organise() { IsCommand("organise", "Organises the media (TV Shows) into a uniform ouput which can be consumed."); HasRequiredOption("i|input=", "The Input path from which media will be found.", v => { // Check inputPath exists. if(!_fileSystem.DirectoryInfo.FromDirectoryName(v).Exists && !_fileSystem.FileInfo.FromFileName(v).Exists) { throw new ApplicationException("Invalid input path provided."); } // Set. _inputPath = v; }); HasRequiredOption("o|output=", "The Output directory from which organised media will be put.", v => { // Check output folder exists. if(!_fileSystem.DirectoryInfo.FromDirectoryName(v).Exists) { throw new ApplicationException("Invalid ouput directory provided."); } // Set. _outputDirectory = _fileSystem.DirectoryInfo.FromDirectoryName(v); }); HasOption("x|exclude", "Excludes organised shows in output directory when searching the input path.", v => _exclude = v != null); HasOption("s|strictSeason", "Enforces a strict season number requirement. This will guarantee the output media contains season details.", v => _strictSeason = v != null); HasOption("c|conversion=", "Specifies if/when input media should be converted. Possibly values: \"default\", \"force\", or \"skip\". \"default\" only converts if required, \"force\" converts everything, and \"skip\" will skip conversion for anything that requires conversion.", v => { if(v == null || v.ToLower() == "default") { _conversionOption = OrganiserConversionOptions.Default; } else if(v.ToLower() == "force") { _conversionOption = OrganiserConversionOptions.Force; } else if(v.ToLower() == "skip") { _conversionOption = OrganiserConversionOptions.Skip; } else { throw new ApplicationException("Invalid conversion option provided."); } }); }