Exemplo n.º 1
0
        protected TExtraFile ImportFile(Movie movie, MovieFile movieFile, string path, bool readOnly, string extension, string fileNameSuffix = null)
        {
            var newFolder       = Path.GetDirectoryName(Path.Combine(movie.Path, movieFile.RelativePath));
            var filenameBuilder = new StringBuilder(Path.GetFileNameWithoutExtension(movieFile.RelativePath));

            if (fileNameSuffix.IsNotNullOrWhiteSpace())
            {
                filenameBuilder.Append(fileNameSuffix);
            }

            filenameBuilder.Append(extension);

            var newFileName  = Path.Combine(newFolder, filenameBuilder.ToString());
            var transferMode = TransferMode.Move;

            if (readOnly)
            {
                transferMode = _configService.CopyUsingHardlinks ? TransferMode.HardLinkOrCopy : TransferMode.Copy;
            }

            _diskTransferService.TransferFile(path, newFileName, transferMode, true, false);

            return(new TExtraFile
            {
                MovieId = movie.Id,
                MovieFileId = movieFile.Id,
                RelativePath = movie.Path.GetRelativePath(newFileName),
                Extension = extension
            });
        }
Exemplo n.º 2
0
        public void AddMovieToCollection(TraktSettings settings, Movie movie, MovieFile movieFile)
        {
            var payload = new TraktCollectMoviesResource
            {
                Movies = new List <TraktCollectMovie>()
            };

            var traktResolution = MapResolution(movieFile.Quality.Quality.Resolution, movieFile.MediaInfo?.ScanType);
            var mediaType       = MapMediaType(movieFile.Quality.Quality.Source);
            var audio           = MapAudio(movieFile);
            var audioChannels   = MapAudioChannels(movieFile, audio);

            payload.Movies.Add(new TraktCollectMovie
            {
                Title         = movie.Title,
                Year          = movie.Year,
                CollectedAt   = DateTime.Now,
                Resolution    = traktResolution,
                MediaType     = mediaType,
                AudioChannels = audioChannels,
                Audio         = audio,
                Ids           = new TraktMovieIdsResource
                {
                    Tmdb = movie.TmdbId,
                    Imdb = movie.ImdbId ?? "",
                }
            });

            _proxy.AddToCollection(payload, settings.AccessToken);
        }
Exemplo n.º 3
0
        private static MovieFileResource ToResource(this MovieFile model)
        {
            if (model == null)
            {
                return(null);
            }

            return(new MovieFileResource
            {
                Id = model.Id,

                MovieId = model.MovieId,
                RelativePath = model.RelativePath,

                //Path
                Size = model.Size,
                DateAdded = model.DateAdded,
                SceneName = model.SceneName,
                IndexerFlags = (int)model.IndexerFlags,
                Quality = model.Quality,
                Languages = model.Languages,
                ReleaseGroup = model.ReleaseGroup,
                Edition = model.Edition,
                MediaInfo = model.MediaInfo.ToResource(model.SceneName),
                OriginalFilePath = model.OriginalFilePath
            });
        }
Exemplo n.º 4
0
        public static MovieFileResource ToResource(this MovieFile model, NzbDrone.Core.Movies.Movie movie, IUpgradableSpecification upgradableSpecification)
        {
            if (model == null)
            {
                return(null);
            }

            return(new MovieFileResource
            {
                Id = model.Id,

                MovieId = model.MovieId,
                RelativePath = model.RelativePath,
                Path = Path.Combine(movie.Path, model.RelativePath),
                Size = model.Size,
                DateAdded = model.DateAdded,
                SceneName = model.SceneName,
                IndexerFlags = (int)model.IndexerFlags,
                Quality = model.Quality,
                Languages = model.Languages,
                Edition = model.Edition,
                ReleaseGroup = model.ReleaseGroup,
                MediaInfo = model.MediaInfo.ToResource(model.SceneName),
                QualityCutoffNotMet = upgradableSpecification?.QualityCutoffNotMet(movie.Profile, model.Quality) ?? false,
                OriginalFilePath = model.OriginalFilePath
            });
        }
Exemplo n.º 5
0
        public static void askUserForMovie(string userInput)
        {
            string    movieFilePath = "movies.csv";
            MovieFile movieFile     = new MovieFile(movieFilePath);

            // Add movie
            Movie  movie     = new Movie();
            string tempInput = "";

            // ask user to input movie title
            System.Console.WriteLine("What is the movie titled");
            movie.movieTitle = System.Console.ReadLine();

            // check if the title matches another title
            if (!movieFile.hasSameTitle(movie.movieTitle))
            {
                do
                {
                    // ask user to enter genre
                    System.Console.WriteLine("Enter a genre. ('.' to stop) ");
                    tempInput = System.Console.ReadLine();
                    //adds to genrelist
                    movie.movieGenres.Add(tempInput);
                }while (tempInput != ".");

                //movie never gets created if the title matches another
                movieFile.AddMovie(movie);
            }
        }
Exemplo n.º 6
0
        public void Setup()
        {
            Mocker.Resolve <QualityUpgradableSpecification>();
            _upgradeDisk = Mocker.Resolve <UpgradeDiskSpecification>();

            _firstFile = new MovieFile {
                Quality = new QualityModel(Quality.Bluray1080p, new Revision(version: 2)), DateAdded = DateTime.Now
            };

            var fakeSeries = Builder <Movie> .CreateNew()
                             .With(c => c.Profile = new Profile {
                Cutoff = Quality.Bluray1080p, Items = Qualities.QualityFixture.GetDefaultQualities()
            })
                             .With(e => e.MovieFile = _firstFile)
                             .Build();

            _parseResultSingle = new RemoteMovie
            {
                Movie           = fakeSeries,
                ParsedMovieInfo = new ParsedMovieInfo()
                {
                    Quality = new QualityModel(Quality.DVD, new Revision(version: 2))
                },
            };
        }
Exemplo n.º 7
0
        protected TExtraFile MoveFile(Movie movie, MovieFile movieFile, TExtraFile extraFile, string fileNameSuffix = null)
        {
            var newFolder       = Path.GetDirectoryName(Path.Combine(movie.Path, movieFile.RelativePath));
            var filenameBuilder = new StringBuilder(Path.GetFileNameWithoutExtension(movieFile.RelativePath));

            if (fileNameSuffix.IsNotNullOrWhiteSpace())
            {
                filenameBuilder.Append(fileNameSuffix);
            }

            filenameBuilder.Append(extraFile.Extension);

            var existingFileName = Path.Combine(movie.Path, extraFile.RelativePath);
            var newFileName      = Path.Combine(newFolder, filenameBuilder.ToString());

            if (newFileName.PathNotEquals(existingFileName))
            {
                try
                {
                    _diskProvider.MoveFile(existingFileName, newFileName);
                    extraFile.RelativePath = movie.Path.GetRelativePath(newFileName);

                    return(extraFile);
                }
                catch (Exception ex)
                {
                    _logger.Warn(ex, "Unable to move file after rename: {0}", existingFileName);
                }
            }

            return(null);
        }
Exemplo n.º 8
0
 private void CreateAfterImport(Movie movie, MovieFile movieFile)
 {
     foreach (var extraFileManager in _extraFileManagers)
     {
         extraFileManager.CreateAfterMovieImport(movie, movieFile);
     }
 }
Exemplo n.º 9
0
        public string BuildFileName(Movie movie, MovieFile movieFile, NamingConfig namingConfig = null)
        {
            if (namingConfig == null)
            {
                namingConfig = _namingConfigService.GetConfig();
            }

            if (!namingConfig.RenameEpisodes)
            {
                return(GetOriginalTitle(movieFile));
            }

            var pattern       = namingConfig.StandardMovieFormat;
            var tokenHandlers = new Dictionary <string, Func <TokenMatch, string> >(FileNameBuilderTokenEqualityComparer.Instance);

            AddMovieTokens(tokenHandlers, movie);
            AddReleaseDateTokens(tokenHandlers, movie.Year);
            AddImdbIdTokens(tokenHandlers, movie.ImdbId);
            AddQualityTokens(tokenHandlers, movie, movieFile);
            AddMediaInfoTokens(tokenHandlers, movieFile);
            AddMovieFileTokens(tokenHandlers, movieFile);
            AddTagsTokens(tokenHandlers, movieFile);

            var fileName = ReplaceTokens(pattern, tokenHandlers, namingConfig).Trim();

            fileName = FileNameCleanupRegex.Replace(fileName, match => match.Captures[0].Value[0].ToString());
            fileName = TrimSeparatorsRegex.Replace(fileName, string.Empty);

            return(fileName);
        }
Exemplo n.º 10
0
        public override string GetFilenameAfterMove(Movie movie, MovieFile movieFile, MetadataFile metadataFile)
        {
            _logger.Debug("Getting Movie Filename after move for: {0}", Path.Combine(movie.Path, movieFile.RelativePath));

            var movieFilePath = Path.Combine(movie.Path, movieFile.RelativePath);

            if (metadataFile.Type == MetadataType.MovieMetadata)
            {
                return(GetMovieMetadataFilename(movieFilePath));
            }

            if (metadataFile.Type == MetadataType.MovieImage)
            {
                foreach (CoverType coverType in Enum.GetValues(typeof(CoverType)))
                {
                    if (metadataFile.RelativePath.Contains($"{coverType}.jpg"))
                    {
                        return(Path.Combine(movie.Path, GetMovieCoverType(movieFilePath, coverType, isTransparent: false)));
                    }

                    if (metadataFile.RelativePath.Contains($"{coverType}.png"))
                    {
                        return(Path.Combine(movie.Path, GetMovieCoverType(movieFilePath, coverType, isTransparent: true)));
                    }
                }
            }

            _logger.Debug("Unknown movie file metadata: {0}", metadataFile.RelativePath);
            return(Path.Combine(movie.Path, metadataFile.RelativePath));
        }
Exemplo n.º 11
0
        public void Setup()
        {
            Mocker.Resolve <QualityUpgradableSpecification>();

            _firstFile = new MovieFile {
                Quality = new QualityModel(Quality.Bluray1080p, new Revision(version: 1)), DateAdded = DateTime.Now
            };
            _secondFile = new MovieFile {
                Quality = new QualityModel(Quality.Bluray1080p, new Revision(version: 1)), DateAdded = DateTime.Now
            };

            var fakeSeries = Builder <Movie> .CreateNew()
                             .With(c => c.Profile = new Profile {
                Cutoff = Quality.Bluray1080p
            })
                             .With(c => c.MovieFile = _firstFile)
                             .Build();

            _parseResultSingle = new RemoteMovie
            {
                Movie           = fakeSeries,
                ParsedMovieInfo = new ParsedMovieInfo {
                    Quality = new QualityModel(Quality.DVD, new Revision(version: 2))
                },
            };
        }
        public void Setup()
        {
            _movieFile = Builder <MovieFile> .CreateNew().With(m => m.MovieId = 0).Build();

            _oldQuality = new QualityModel(Quality.Bluray720p);

            _movieFile.Quality = _oldQuality;

            _newQuality = _oldQuality.JsonClone();
            var format = new CustomFormats.CustomFormat("Awesome Format");

            format.Id = 1;
            _newQuality.CustomFormats = new List <CustomFormats.CustomFormat> {
                format
            };

            _newInfo = new ParsedMovieInfo
            {
                Quality = _newQuality
            };

            Mocker.GetMock <IMediaFileService>().Setup(s => s.GetMovies(It.IsAny <IEnumerable <int> >()))
            .Returns(new List <MovieFile> {
                _movieFile
            });

            Mocker.GetMock <IHistoryService>().Setup(s => s.FindByMovieId(It.IsAny <int>()))
            .Returns(new List <History.History>());
        }
Exemplo n.º 13
0
        public void Setup()
        {
            Mocker.Resolve <UpgradableSpecification>();
            _upgradeDisk = Mocker.Resolve <UpgradeDiskSpecification>();

            CustomFormatsFixture.GivenCustomFormats();

            _firstFile = new MovieFile {
                Quality = new QualityModel(Quality.Bluray1080p, new Revision(version: 2)), DateAdded = DateTime.Now
            };

            var fakeSeries = Builder <Movie> .CreateNew()
                             .With(c => c.Profile = new Profile
            {
                Cutoff         = Quality.Bluray1080p.Id, Items = Qualities.QualityFixture.GetDefaultQualities(),
                FormatItems    = CustomFormatsFixture.GetSampleFormatItems(),
                MinFormatScore = 0
            })
                             .With(e => e.MovieFile = _firstFile)
                             .Build();

            _parseResultSingle = new RemoteMovie
            {
                Movie           = fakeSeries,
                ParsedMovieInfo = new ParsedMovieInfo()
                {
                    Quality = new QualityModel(Quality.DVD, new Revision(version: 2))
                },
                CustomFormats = new List <CustomFormat>()
            };

            Mocker.GetMock <ICustomFormatCalculationService>()
            .Setup(x => x.ParseCustomFormat(It.IsAny <MovieFile>()))
            .Returns(new List <CustomFormat>());
        }
Exemplo n.º 14
0
        public void Setup()
        {
            _series = Builder <Movie> .CreateNew()
                      .With(s => s.Path = @"C:\Test\TV\Series".AsOsAgnostic())
                      .Build();

            _episodeFile = Builder <MovieFile> .CreateNew()
                           .With(f => f.Path         = null)
                           .With(f => f.RelativePath = @"Season 1\File.avi")
                           .Build();

            _localEpisode = Builder <LocalMovie> .CreateNew()
                            .With(l => l.Movie = _series)
                            .Build();

            Mocker.GetMock <IBuildFileNames>()
            .Setup(s => s.BuildFileName(It.IsAny <Movie>(), It.IsAny <MovieFile>(), null))
            .Returns("File Name");

            Mocker.GetMock <IBuildFileNames>()
            .Setup(s => s.BuildFilePath(It.IsAny <Movie>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(@"C:\Test\TV\Series\File Name.avi".AsOsAgnostic());

            var rootFolder = @"C:\Test\TV\".AsOsAgnostic();

            Mocker.GetMock <IDiskProvider>()
            .Setup(s => s.FolderExists(rootFolder))
            .Returns(true);

            Mocker.GetMock <IDiskProvider>()
            .Setup(s => s.FileExists(It.IsAny <string>()))
            .Returns(true);
        }
Exemplo n.º 15
0
        public static MovieFileResource ToResource(this MovieFile model)
        {
            if (model == null)
            {
                return(null);
            }

            MovieResource movie = null;

            /*if (model.Movie != null)
             * {
             *  //model.Movie.LazyLoad();
             *  if (model.Movie.Value != null)
             *  {
             *      //movie = model.Movie.Value.ToResource();
             *  }
             * }*/

            return(new MovieFileResource
            {
                Id = model.Id,
                RelativePath = model.RelativePath,
                Path = model.Path,
                Size = model.Size,
                DateAdded = model.DateAdded,
                SceneName = model.SceneName,
                ReleaseGroup = model.ReleaseGroup,
                Quality = model.Quality,
                Movie = movie,
                MediaInfo = model.MediaInfo,
                Edition = model.Edition
            });
        }
Exemplo n.º 16
0
        public void Setup()
        {
            _movie = Builder <Movie>
                     .CreateNew()
                     .With(e => e.Title = "Batman")
                     .Build();

            _movieFile = new MovieFile {
                Quality = new QualityModel(Quality.HDTV720p), ReleaseGroup = "RadarrTest"
            };

            _namingConfig = NamingConfig.Default;
            _namingConfig.RenameMovies = true;

            Mocker.GetMock <INamingConfigService>()
            .Setup(c => c.GetConfig()).Returns(_namingConfig);

            Mocker.GetMock <IQualityDefinitionService>()
            .Setup(v => v.Get(Moq.It.IsAny <Quality>()))
            .Returns <Quality>(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v));

            Mocker.GetMock <ICustomFormatService>()
            .Setup(v => v.All())
            .Returns(new List <CustomFormat>());
        }
Exemplo n.º 17
0
 public MovieImportedEvent(LocalMovie movieInfo, MovieFile importedMovie, bool newDownload, DownloadClientItem downloadClientItem, string downloadId)
 {
     MovieInfo          = movieInfo;
     ImportedMovie      = importedMovie;
     NewDownload        = newDownload;
     DownloadClientInfo = downloadClientItem.DownloadClientInfo;
     DownloadId         = downloadId;
 }
Exemplo n.º 18
0
        public virtual string GetFilenameAfterMove(Movie movie, MovieFile movieFile, MetadataFile metadataFile)
        {
            var existingFilename = Path.Combine(movie.Path, metadataFile.RelativePath);
            var extension        = Path.GetExtension(existingFilename).TrimStart('.');
            var newFileName      = Path.ChangeExtension(Path.Combine(movie.Path, movieFile.RelativePath), extension);

            return(newFileName);
        }
Exemplo n.º 19
0
        public override ExtraFile Import(Movie movie, MovieFile movieFile, string path, string extension, bool readOnly)
        {
            var extraFile = ImportFile(movie, movieFile, path, readOnly, extension, null);

            _otherExtraFileService.Upsert(extraFile);

            return(extraFile);
        }
Exemplo n.º 20
0
        public FileNameSampleService(IBuildFileNames buildFileNames)
        {
            _buildFileNames = buildFileNames;

            var mediaInfo = new MediaInfoModel()
            {
                VideoFormat                  = "AVC",
                VideoBitDepth                = 10,
                VideoMultiViewCount          = 2,
                VideoColourPrimaries         = "BT.2020",
                VideoTransferCharacteristics = "HLG",
                AudioFormat                  = "DTS",
                AudioChannelsContainer       = 6,
                AudioChannelPositions        = "3/2/0.1",
                AudioLanguages               = "German",
                Subtitles = "English/German"
            };

            _movieFile = new MovieFile
            {
                Quality      = new QualityModel(Quality.Bluray1080p, new Revision(2)),
                RelativePath = "The.Movie.Title.2010.1080p.BluRay.DTS.x264-EVOLVE.mkv",
                SceneName    = "The.Movie.Title.2010.1080p.BluRay.DTS.x264-EVOLVE",
                ReleaseGroup = "EVOLVE",
                MediaInfo    = mediaInfo,
                Edition      = "Ultimate extended edition",
            };

            _movie = new Movie
            {
                Title         = "The Movie: Title",
                OriginalTitle = "The Original Movie Title",
                Collection    = new MovieCollection {
                    Name = "The Movie Collection", TmdbId = 123654
                },
                Certification = "R",
                Year          = 2010,
                ImdbId        = "tt0066921",
                TmdbId        = 345691,
                MovieFile     = _movieFile,
                MovieFileId   = 1,
            };

            _customFormats = new List <CustomFormat>
            {
                new CustomFormat
                {
                    Name = "Surround Sound",
                    IncludeCustomFormatWhenRenaming = true
                },
                new CustomFormat
                {
                    Name = "x264",
                    IncludeCustomFormatWhenRenaming = true
                }
            };
        }
Exemplo n.º 21
0
        private string GetOriginalFileName(MovieFile movieFile)
        {
            if (movieFile.RelativePath.IsNullOrWhiteSpace())
            {
                return(Path.GetFileNameWithoutExtension(movieFile.Path));
            }

            return(Path.GetFileNameWithoutExtension(movieFile.RelativePath));
        }
Exemplo n.º 22
0
 public MovieImportedEvent(LocalMovie episodeInfo, MovieFile importedMovie, bool newDownload, string downloadClient, string downloadId, bool isReadOnly)
 {
     MovieInfo      = episodeInfo;
     ImportedMovie  = importedMovie;
     NewDownload    = newDownload;
     DownloadClient = downloadClient;
     DownloadId     = downloadId;
     IsReadOnly     = isReadOnly;
 }
Exemplo n.º 23
0
        private string GetOriginalTitle(MovieFile movieFile)
        {
            if (movieFile.SceneName.IsNullOrWhiteSpace())
            {
                return(GetOriginalFileName(movieFile));
            }

            return(movieFile.SceneName);
        }
Exemplo n.º 24
0
        public override List <ImageFileResult> MovieImages(Movie movie, MovieFile movieFile)
        {
            if (!Settings.MovieImages)
            {
                return(new List <ImageFileResult>());
            }

            return(ProcessMovieImages(movie, movieFile).ToList());
        }
Exemplo n.º 25
0
 public MovieDownloadedEvent(LocalMovie movie, MovieFile movieFile, List <MovieFile> oldFiles, DownloadClientItem downloadClientItem)
 {
     Movie     = movie;
     MovieFile = movieFile;
     OldFiles  = oldFiles;
     if (downloadClientItem != null)
     {
         DownloadId = downloadClientItem.DownloadId;
     }
 }
Exemplo n.º 26
0
 public WebhookMovieFile(MovieFile movieFile)
 {
     Id             = movieFile.Id;
     RelativePath   = movieFile.RelativePath;
     Path           = movieFile.Path;
     Quality        = movieFile.Quality.Quality.Name;
     QualityVersion = movieFile.Quality.Revision.Version;
     ReleaseGroup   = movieFile.ReleaseGroup;
     SceneName      = movieFile.SceneName;
 }
Exemplo n.º 27
0
        public bool Update(MovieFile movieFile, Movie movie)
        {
            if (!_configService.EnableMediaInfo)
            {
                _logger.Debug("MediaInfo is disabled");
                return(false);
            }

            return(UpdateMediaInfo(movieFile, movie));
        }
Exemplo n.º 28
0
        public void null_string_as_arg_should_not_fail()
        {
            var epFile = new MovieFile();

            _logger.Debug("File {0} no longer exists on disk. removing from database.", epFile.RelativePath);

            Thread.Sleep(1000);

            epFile.RelativePath.Should().BeNull();
        }
Exemplo n.º 29
0
        public void Update(MovieFile movieFile, Movie movie)
        {
            if (!_configService.EnableMediaInfo)
            {
                _logger.Debug("MediaInfo is disabled");
                return;
            }

            UpdateMediaInfo(movieFile, movie);
        }
Exemplo n.º 30
0
        private string MapAudioChannels(MovieFile movieFile, string audioFormat)
        {
            var audioChannels = movieFile.MediaInfo != null?MediaInfoFormatter.FormatAudioChannels(movieFile.MediaInfo).ToString("0.0") : string.Empty;

            if (audioChannels == "0.0")
            {
                audioChannels = string.Empty;
            }

            return(audioChannels);
        }