public void Execute(MoveSeriesCommand message) { var series = _seriesService.GetSeries(message.SeriesId); var source = message.SourcePath; var destination = message.DestinationPath; if (!message.DestinationRootFolder.IsNullOrWhiteSpace()) { _logger.Debug("Buiding destination path using root folder: {0} and the series title", message.DestinationRootFolder); destination = Path.Combine(message.DestinationRootFolder, _filenameBuilder.GetSeriesFolder(series)); } _logger.ProgressInfo("Moving {0} from '{1}' to '{2}'", series.Title, source, destination); //TODO: Move to transactional disk operations try { _diskProvider.MoveFolder(source, destination); } catch (IOException ex) { var errorMessage = String.Format("Unable to move series from '{0}' to '{1}'", source, destination); _logger.ErrorException(errorMessage, ex); throw; } _logger.ProgressInfo("{0} moved successfully to {1}", series.Title, series.Path); //Update the series path to the new path series.Path = destination; series = _seriesService.UpdateSeries(series); _eventAggregator.PublishEvent(new SeriesMovedEvent(series, source, destination)); }
private Series SetPropertiesAndValidate(Series newSeries) { if (string.IsNullOrWhiteSpace(newSeries.Path)) { var folderName = _fileNameBuilder.GetSeriesFolder(newSeries); newSeries.Path = Path.Combine(newSeries.RootFolderPath, folderName); } newSeries.CleanTitle = newSeries.Title.CleanSeriesTitle(); newSeries.SortTitle = SeriesTitleNormalizer.Normalize(newSeries.Title, newSeries.TvdbId); newSeries.Added = DateTime.UtcNow; if (newSeries.AddOptions != null && newSeries.AddOptions.Monitor == MonitorTypes.None) { newSeries.Monitored = false; } var validationResult = _addSeriesValidator.Validate(newSeries); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } return(newSeries); }
protected override bool IsValid(PropertyValidatorContext context) { if (context.PropertyValue == null) { return(true); } var seriesResource = context.Instance as SeriesResource; if (seriesResource == null) { return(true); } var rootFolderPath = context.PropertyValue.ToString(); if (rootFolderPath.IsNullOrWhiteSpace()) { return(true); } var rootFolder = new DirectoryInfo(rootFolderPath).Name; var series = seriesResource.ToModel(); var seriesFolder = _fileNameBuilder.GetSeriesFolder(series); if (seriesFolder == rootFolder) { return(false); } var distance = seriesFolder.LevenshteinDistance(rootFolder); return(distance >= Math.Max(1, seriesFolder.Length * 0.2)); }
public Series AddSeries(Series newSeries) { Ensure.That(newSeries, () => newSeries).IsNotNull(); newSeries = AddSkyhookData(newSeries); if (string.IsNullOrWhiteSpace(newSeries.Path)) { var folderName = _fileNameBuilder.GetSeriesFolder(newSeries); newSeries.Path = Path.Combine(newSeries.RootFolderPath, folderName); } newSeries.CleanTitle = newSeries.Title.CleanSeriesTitle(); newSeries.SortTitle = SeriesTitleNormalizer.Normalize(newSeries.Title, newSeries.TvdbId); newSeries.Added = DateTime.UtcNow; var validationResult = _addSeriesValidator.Validate(newSeries); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } _logger.Info("Adding Series {0} Path: [{1}]", newSeries, newSeries.Path); _seriesService.AddSeries(newSeries); return(newSeries); }
public string BuildPath(Series series, bool useExistingRelativeFolder) { if (series.RootFolderPath.IsNullOrWhiteSpace()) { throw new ArgumentException("Root folder was not provided", nameof(series)); } if (useExistingRelativeFolder && series.Path.IsNotNullOrWhiteSpace()) { var relativePath = GetExistingRelativePath(series); return(Path.Combine(series.RootFolderPath, relativePath)); } return(Path.Combine(series.RootFolderPath, _fileNameBuilder.GetSeriesFolder(series))); }
public void Execute(BulkMoveSeriesCommand message) { var seriesToMove = message.Series; var destinationRootFolder = message.DestinationRootFolder; _logger.ProgressInfo("Moving {0} series to '{1}'", seriesToMove.Count, destinationRootFolder); for (var index = 0; index < seriesToMove.Count; index++) { var s = seriesToMove[index]; var series = _seriesService.GetSeries(s.SeriesId); var destinationPath = Path.Combine(destinationRootFolder, _filenameBuilder.GetSeriesFolder(series)); MoveSingleSeries(series, s.SourcePath, destinationPath, index, seriesToMove.Count); } _logger.ProgressInfo("Finished moving {0} series to '{1}'", seriesToMove.Count, destinationRootFolder); }
private IEnumerable <SeriesResource> MapToResource(IEnumerable <NzbDrone.Core.Tv.Series> series) { foreach (var currentSeries in series) { var resource = currentSeries.ToResource(); var poster = currentSeries.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster); if (poster != null) { resource.RemotePoster = poster.Url; } resource.Folder = _fileNameBuilder.GetSeriesFolder(currentSeries); resource.Statistics = new SeriesStatistics().ToResource(resource.Seasons); yield return(resource); } }
public Series AddSeries(Series newSeries) { Ensure.That(newSeries, () => newSeries).IsNotNull(); if (String.IsNullOrWhiteSpace(newSeries.Path)) { var folderName = _fileNameBuilder.GetSeriesFolder(newSeries.Title); newSeries.Path = Path.Combine(newSeries.RootFolderPath, folderName); } _logger.Info("Adding Series {0} Path: [{1}]", newSeries, newSeries.Path); newSeries.Monitored = true; newSeries.CleanTitle = Parser.Parser.CleanSeriesTitle(newSeries.Title); _seriesRepository.Insert(newSeries); _eventAggregator.PublishEvent(new SeriesAddedEvent(GetSeries(newSeries.Id))); return(newSeries); }
public Series AddSeries(Series newSeries) { Ensure.That(newSeries, () => newSeries).IsNotNull(); if (string.IsNullOrWhiteSpace(newSeries.Path)) { var folderName = _fileNameBuilder.GetSeriesFolder(newSeries); newSeries.Path = Path.Combine(newSeries.RootFolderPath, folderName); } _logger.Info("Adding Series {0} Path: [{1}]", newSeries, newSeries.Path); newSeries.CleanTitle = newSeries.Title.CleanSeriesTitle(); newSeries.SortTitle = SeriesTitleNormalizer.Normalize(newSeries.Title, newSeries.TvdbId); newSeries.Added = DateTime.UtcNow; _seriesRepository.Insert(newSeries); _eventAggregator.PublishEvent(new SeriesAddedEvent(GetSeries(newSeries.Id))); return(newSeries); }
public string GetSeriesFolderSample(NamingConfig nameSpec) { return(_buildFileNames.GetSeriesFolder(_standardSeries, nameSpec)); }