Exemple #1
0
        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);
        }
Exemple #2
0
        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.");
                }
            });
        }