public async Task <FileOrganizationResult> OrganizeWithCorrection(EpisodeFileOrganizationRequest request, AutoOrganizeOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); Series series = null; if (request.NewSeriesProviderIds.Count > 0) { // We're having a new series here SeriesInfo seriesRequest = new SeriesInfo(); seriesRequest.ProviderIds = request.NewSeriesProviderIds; var refreshOptions = new MetadataRefreshOptions(_fileSystem); series = new Series(); series.Id = Guid.NewGuid(); series.Name = request.NewSeriesName; int year; if (int.TryParse(request.NewSeriesYear, out year)) { series.ProductionYear = year; } var seriesFolderName = series.Name; if (series.ProductionYear.HasValue) { seriesFolderName = string.Format("{0} ({1})", seriesFolderName, series.ProductionYear); } series.Path = Path.Combine(request.TargetFolder, seriesFolderName); series.ProviderIds = request.NewSeriesProviderIds; await series.RefreshMetadata(refreshOptions, cancellationToken); } if (series == null) { // Existing Series series = (Series)_libraryManager.GetItemById(new Guid(request.SeriesId)); } await OrganizeEpisode(result.OriginalPath, series, request.SeasonNumber, request.EpisodeNumber, request.EndingEpisodeNumber, null, options, true, request.RememberCorrection, result, cancellationToken).ConfigureAwait(false); await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false); return(result); }
public FileOrganizationResult OrganizeWithCorrection(MovieFileOrganizationRequest request, MovieFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); try { Movie movie = null; if (request.NewMovieProviderIds.Count > 0) { BaseItem targetFolder = null; if (!string.IsNullOrEmpty(options.DefaultMovieLibraryPath)) { targetFolder = _libraryManager.FindByPath(options.DefaultMovieLibraryPath, true); } // To avoid Series duplicate by mistake (Missing SmartMatch and wrong selection in UI) movie = CreateNewMovie(request, targetFolder, result, options, cancellationToken); } if (movie == null) { // Existing movie movie = (Movie)_libraryManager.GetItemById(request.MovieId); var newPath = GetMoviePath(result.OriginalPath, movie, options); var targetFolder = _libraryManager .GetVirtualFolders() .Where(i => string.Equals(i.CollectionType, CollectionType.Movies.ToString(), StringComparison.OrdinalIgnoreCase)) .FirstOrDefault() .Locations .Where(i => movie.Path.Contains(i)) .FirstOrDefault(); movie.Path = Path.Combine(targetFolder, newPath); } // We manually set the media as Movie result.Type = CurrentFileOrganizerType; OrganizeMovie(result.OriginalPath, movie, options, null, result, cancellationToken); _organizationService.SaveResult(result, CancellationToken.None); } catch (Exception ex) { result.Status = FileSortingStatus.Failure; result.StatusMessage = ex.Message; _logger.ErrorException("Error organizing file {0}", ex, result.OriginalPath); } return(result); }
public async Task <FileOrganizationResult> OrganizeWithCorrection( EpisodeFileOrganizationRequest request, TvFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); try { Series series = null; if (request.NewSeriesProviderIds.Count > 0) { BaseItem targetFolder = null; if (!string.IsNullOrEmpty(options.DefaultSeriesLibraryPath)) { targetFolder = _libraryManager.FindByPath(options.DefaultSeriesLibraryPath, true); } series = CreateNewSeries(request, targetFolder, null, options, cancellationToken); } if (series == null) { // Existing Series series = (Series)_libraryManager.GetItemById(request.SeriesId); } // We manually set the media as Series result.Type = CurrentFileOrganizerType; await OrganizeEpisode(result.OriginalPath, series, request.SeasonNumber, request.EpisodeNumber, request.EndingEpisodeNumber, null, options, request.RememberCorrection, result, cancellationToken).ConfigureAwait(false); _organizationService.SaveResult(result, CancellationToken.None); } catch (Exception ex) { result.Status = FileSortingStatus.Failure; result.StatusMessage = ex.Message; _logger.ErrorException("Error organizing file {0}", ex, result.OriginalPath); } return(result); }
public async Task <FileOrganizationResult> OrganizeWithCorrection(EpisodeFileOrganizationRequest request, TvFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); var series = (Series)_libraryManager.GetItemById(new Guid(request.SeriesId)); await OrganizeEpisode(result.OriginalPath, series, request.SeasonNumber, request.EpisodeNumber, request.EndingEpisodeNumber, options, true, result, cancellationToken).ConfigureAwait(false); await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false); return(result); }
public async Task <FileOrganizationResult> OrganizeWithCorrection(MovieFileOrganizationRequest request, MovieFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); try { Movie movie = null; if (request.NewMovieProviderIds.Count > 0) { // To avoid Series duplicate by mistake (Missing SmartMatch and wrong selection in UI) movie = CreateNewMovie(request, result, options, cancellationToken); } if (movie == null) { // Existing movie movie = (Movie)_libraryManager.GetItemById(request.MovieId); var newPath = GetMoviePath(result.OriginalPath, movie, options); var targetFolder = _libraryManager .GetVirtualFolders() .Where(i => i.CollectionType == CollectionType.Movies) .FirstOrDefault() .Locations .Where(i => movie.Path.Contains(i)) .FirstOrDefault(); movie.Path = Path.Combine(targetFolder, newPath); } // We manually set the media as Movie result.Type = CurrentFileOrganizerType; await OrganizeMovie(result.OriginalPath, movie, options, null, result, cancellationToken).ConfigureAwait(false); _organizationService.SaveResult(result, CancellationToken.None); } catch (Exception ex) { result.Status = FileSortingStatus.Failure; result.StatusMessage = ex.Message; } return(result); }
/// <summary> /// Organize an episode file with parameters provided by the end-user. /// </summary> /// <param name="request">The parameters provided by the user via API request.</param> /// <param name="options">The organization options to use.</param> /// <param name="cancellationToken">A cancellation token for the operation.</param> /// <returns>A task representing the organization operation and containing the operation result.</returns> public async Task <FileOrganizationResult> OrganizeWithCorrection( EpisodeFileOrganizationRequest request, TvFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); try { Series series = null; if (request.NewSeriesProviderIds.Count > 0) { series = await CreateNewSeries(request, null, options, cancellationToken).ConfigureAwait(false); } if (series == null) { // Existing Series series = (Series)_libraryManager.GetItemById(request.SeriesId); } // We manually set the media as Series result.Type = CurrentFileOrganizerType; await OrganizeEpisode( result.OriginalPath, series, request.SeasonNumber, request.EpisodeNumber, request.EndingEpisodeNumber, null, options, request.RememberCorrection, result, cancellationToken).ConfigureAwait(false); _organizationService.SaveResult(result, CancellationToken.None); } catch (Exception ex) { result.Status = FileSortingStatus.Failure; result.StatusMessage = ex.Message; } return(result); }
public async Task <FileOrganizationResult> OrganizeWithCorrection(MovieFileOrganizationRequest request, MovieFileOrganizationOptions options, CancellationToken cancellationToken) { var result = _organizationService.GetResult(request.ResultId); try { Movie movie = null; if (request.NewMovieProviderIds.Count > 0) { // To avoid Series duplicate by mistake (Missing SmartMatch and wrong selection in UI) movie = CreateNewMovie(request, result.OriginalPath, options, cancellationToken); } if (movie == null) { // Existing movie movie = (Movie)_libraryManager.GetItemById(new Guid(request.MovieId)); } // We manually set the media as Movie result.Type = CurrentFileOrganizerType; await OrganizeMovie(result.OriginalPath, movie, options, null, true, result, cancellationToken).ConfigureAwait(false); await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false); } catch (Exception ex) { result.Status = FileSortingStatus.Failure; result.StatusMessage = ex.Message; } return(result); }