mirror of
https://github.com/Radarr/Radarr.git
synced 2025-04-24 06:27:08 -04:00
Fixed: Processing existing movie files via Manage Files
This commit is contained in:
parent
525ed65687
commit
bb8a0dda63
5 changed files with 71 additions and 5 deletions
|
@ -21,7 +21,7 @@ import TmdbRating from 'Components/TmdbRating';
|
|||
import Popover from 'Components/Tooltip/Popover';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import TraktRating from 'Components/TraktRating';
|
||||
import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';
|
||||
import { icons, kinds, sizes, sortDirections, tooltipPositions } from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';
|
||||
import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector';
|
||||
|
@ -753,11 +753,15 @@ class MovieDetails extends Component {
|
|||
<InteractiveImportModal
|
||||
isOpen={isInteractiveImportModalOpen}
|
||||
movieId={id}
|
||||
modalTitle={translate('ManageFiles')}
|
||||
title={title}
|
||||
folder={path}
|
||||
initialSortKey="relativePath"
|
||||
initialSortDirection={sortDirections.ASCENDING}
|
||||
showMovie={false}
|
||||
allowMovieChange={false}
|
||||
showFilterExistingFiles={true}
|
||||
showDelete={true}
|
||||
showImportMode={false}
|
||||
modalTitle={translate('ManageFiles')}
|
||||
onModalClose={this.onInteractiveImportModalClose}
|
||||
/>
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
public string FolderName { get; set; }
|
||||
public string Name { get; set; }
|
||||
public long Size { get; set; }
|
||||
public Movie Movie { get; set; }
|
||||
public int? MovieFileId { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public List<Language> Languages { get; set; }
|
||||
public string ReleaseGroup { get; set; }
|
||||
|
@ -21,7 +23,6 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
public int CustomFormatScore { get; set; }
|
||||
public int IndexerFlags { get; set; }
|
||||
public IEnumerable<ImportRejection> Rejections { get; set; }
|
||||
public Movie Movie { get; set; }
|
||||
|
||||
public ManualImportItem()
|
||||
{
|
||||
|
|
|
@ -22,6 +22,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
{
|
||||
public interface IManualImportService
|
||||
{
|
||||
List<ManualImportItem> GetMediaFiles(int movieId);
|
||||
List<ManualImportItem> GetMediaFiles(string path, string downloadId, int? movieId, bool filterExistingFiles);
|
||||
ManualImportItem ReprocessItem(string path, string downloadId, int movieId, string releaseGroup, QualityModel quality, List<Language> languages, int indexerFlags);
|
||||
}
|
||||
|
@ -37,6 +38,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
private readonly IAggregationService _aggregationService;
|
||||
private readonly ITrackedDownloadService _trackedDownloadService;
|
||||
private readonly IDownloadedMovieImportService _downloadedMovieImportService;
|
||||
private readonly IMediaFileService _mediaFileService;
|
||||
private readonly ICustomFormatCalculationService _formatCalculator;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly Logger _logger;
|
||||
|
@ -50,6 +52,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
IImportApprovedMovie importApprovedMovie,
|
||||
ITrackedDownloadService trackedDownloadService,
|
||||
IDownloadedMovieImportService downloadedMovieImportService,
|
||||
IMediaFileService mediaFileService,
|
||||
ICustomFormatCalculationService formatCalculator,
|
||||
IEventAggregator eventAggregator,
|
||||
Logger logger)
|
||||
|
@ -63,11 +66,41 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
_importApprovedMovie = importApprovedMovie;
|
||||
_trackedDownloadService = trackedDownloadService;
|
||||
_downloadedMovieImportService = downloadedMovieImportService;
|
||||
_mediaFileService = mediaFileService;
|
||||
_formatCalculator = formatCalculator;
|
||||
_eventAggregator = eventAggregator;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public List<ManualImportItem> GetMediaFiles(int movieId)
|
||||
{
|
||||
var movie = _movieService.GetMovie(movieId);
|
||||
var directoryInfo = new DirectoryInfo(movie.Path);
|
||||
var movieFiles = _mediaFileService.GetFilesByMovie(movieId);
|
||||
|
||||
var items = movieFiles.Select(movieFile => MapItem(movieFile, movie, directoryInfo.Name)).ToList();
|
||||
|
||||
var mediaFiles = _diskScanService.FilterPaths(movie.Path, _diskScanService.GetVideoFiles(movie.Path)).ToList();
|
||||
var unmappedFiles = MediaFileService.FilterExistingFiles(mediaFiles, movieFiles, movie);
|
||||
|
||||
items.AddRange(unmappedFiles.Select(file =>
|
||||
new ManualImportItem
|
||||
{
|
||||
Path = Path.Combine(movie.Path, file),
|
||||
FolderName = directoryInfo.Name,
|
||||
RelativePath = movie.Path.GetRelativePath(file),
|
||||
Name = Path.GetFileNameWithoutExtension(file),
|
||||
Movie = movie,
|
||||
ReleaseGroup = string.Empty,
|
||||
Quality = new QualityModel(Quality.Unknown),
|
||||
Languages = new List<Language> { Language.Unknown },
|
||||
Size = _diskProvider.GetFileSize(file),
|
||||
Rejections = Enumerable.Empty<ImportRejection>()
|
||||
}));
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
public List<ManualImportItem> GetMediaFiles(string path, string downloadId, int? movieId, bool filterExistingFiles)
|
||||
{
|
||||
if (downloadId.IsNotNullOrWhiteSpace())
|
||||
|
@ -348,6 +381,27 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Manual
|
|||
return item;
|
||||
}
|
||||
|
||||
private ManualImportItem MapItem(MovieFile movieFile, Movie movie, string folderName)
|
||||
{
|
||||
var item = new ManualImportItem();
|
||||
|
||||
item.Path = Path.Combine(movie.Path, movieFile.RelativePath);
|
||||
item.FolderName = folderName;
|
||||
item.RelativePath = movieFile.RelativePath;
|
||||
item.Name = Path.GetFileNameWithoutExtension(movieFile.Path);
|
||||
item.Movie = movie;
|
||||
item.ReleaseGroup = movieFile.ReleaseGroup;
|
||||
item.Quality = movieFile.Quality;
|
||||
item.Languages = movieFile.Languages;
|
||||
item.IndexerFlags = (int)movieFile.IndexerFlags;
|
||||
item.Size = _diskProvider.GetFileSize(item.Path);
|
||||
item.Rejections = Enumerable.Empty<ImportRejection>();
|
||||
item.MovieFileId = movieFile.Id;
|
||||
item.CustomFormats = _formatCalculator.ParseCustomFormat(movieFile, movie);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public void Execute(ManualImportCommand message)
|
||||
{
|
||||
_logger.ProgressTrace("Manually importing {0} files using mode {1}", message.Files.Count, message.ImportMode);
|
||||
|
|
|
@ -25,6 +25,11 @@ namespace Radarr.Api.V3.ManualImport
|
|||
[Produces("application/json")]
|
||||
public List<ManualImportResource> GetMediaFiles(string folder, string downloadId, int? movieId, bool filterExistingFiles = true)
|
||||
{
|
||||
if (movieId.HasValue)
|
||||
{
|
||||
return _manualImportService.GetMediaFiles(movieId.Value).ToResource().Select(AddQualityWeight).ToList();
|
||||
}
|
||||
|
||||
return _manualImportService.GetMediaFiles(folder, downloadId, movieId, filterExistingFiles).ToResource().Select(AddQualityWeight).ToList();
|
||||
}
|
||||
|
||||
|
|
|
@ -20,9 +20,10 @@ namespace Radarr.Api.V3.ManualImport
|
|||
public string Name { get; set; }
|
||||
public long Size { get; set; }
|
||||
public MovieResource Movie { get; set; }
|
||||
public int? MovieFileId { get; set; }
|
||||
public string ReleaseGroup { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public List<Language> Languages { get; set; }
|
||||
public string ReleaseGroup { get; set; }
|
||||
public int QualityWeight { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
public List<CustomFormatResource> CustomFormats { get; set; }
|
||||
|
@ -52,6 +53,7 @@ namespace Radarr.Api.V3.ManualImport
|
|||
Name = model.Name,
|
||||
Size = model.Size,
|
||||
Movie = model.Movie.ToResource(0),
|
||||
MovieFileId = model.MovieFileId,
|
||||
ReleaseGroup = model.ReleaseGroup,
|
||||
Quality = model.Quality,
|
||||
Languages = model.Languages,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue