diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs index c413172aa..0e5d3c732 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs @@ -155,10 +155,19 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual if (episodeIds.Any()) { var downloadClientItem = GetTrackedDownload(downloadId)?.DownloadItem; + var episodes = _episodeService.GetEpisodes(episodeIds); + var finalReleaseGroup = releaseGroup.IsNullOrWhiteSpace() + ? Parser.Parser.ParseReleaseGroup(path) + : releaseGroup; + var finalQuality = quality.Quality == Quality.Unknown ? QualityParser.ParseQuality(path) : quality; + var finalLanguges = + languages?.Count <= 1 && (languages?.SingleOrDefault() ?? Language.Unknown) == Language.Unknown + ? languageParse + : languages; var localEpisode = new LocalEpisode(); localEpisode.Series = series; - localEpisode.Episodes = _episodeService.GetEpisodes(episodeIds); + localEpisode.Episodes = episodes; localEpisode.FileEpisodeInfo = Parser.Parser.ParsePath(path); localEpisode.DownloadClientEpisodeInfo = downloadClientItem == null ? null : Parser.Parser.ParseTitle(downloadClientItem.Title); localEpisode.DownloadItem = downloadClientItem; @@ -166,15 +175,27 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual localEpisode.SceneSource = SceneSource(series, rootFolder); localEpisode.ExistingFile = series.Path.IsParentPath(path); localEpisode.Size = _diskProvider.GetFileSize(path); - localEpisode.ReleaseGroup = releaseGroup.IsNullOrWhiteSpace() ? Parser.Parser.ParseReleaseGroup(path) : releaseGroup; - localEpisode.Languages = languages?.Count <= 1 && (languages?.SingleOrDefault() ?? Language.Unknown) == Language.Unknown ? languageParse : languages; - localEpisode.Quality = quality.Quality == Quality.Unknown ? QualityParser.ParseQuality(path) : quality; + localEpisode.ReleaseGroup = finalReleaseGroup; + localEpisode.Languages = finalLanguges; + localEpisode.Quality = finalQuality; localEpisode.IndexerFlags = (IndexerFlags)indexerFlags; localEpisode.ReleaseType = releaseType; localEpisode.CustomFormats = _formatCalculator.ParseCustomFormat(localEpisode); localEpisode.CustomFormatScore = localEpisode.Series?.QualityProfile?.Value.CalculateCustomFormatScore(localEpisode.CustomFormats) ?? 0; + // Augment episode file so imported files have all additional information an automatic import would + localEpisode = _aggregationService.Augment(localEpisode, downloadClientItem); + + // Reapply the user-chosen values. + localEpisode.Series = series; + localEpisode.Episodes = episodes; + localEpisode.ReleaseGroup = finalReleaseGroup; + localEpisode.Quality = finalQuality; + localEpisode.Languages = finalLanguges; + localEpisode.IndexerFlags = (IndexerFlags)indexerFlags; + localEpisode.ReleaseType = releaseType; + return MapItem(_importDecisionMaker.GetDecision(localEpisode, downloadClientItem), rootFolder, downloadId, null); }