From 18aadb544e2567b26eecbf8dec70f7bd7c47f3e9 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 8 Mar 2024 03:30:20 +0200 Subject: [PATCH] Fixed: Maintain release type for items in Manual Import --- frontend/src/InteractiveImport/InteractiveImport.ts | 2 ++ frontend/src/InteractiveImport/ReleaseType.ts | 3 +++ .../src/Store/Actions/interactiveImportActions.js | 1 + .../EpisodeImport/Manual/ManualImportService.cs | 11 +++++++---- .../ManualImport/ManualImportController.cs | 2 +- .../ManualImport/ManualImportReprocessResource.cs | 2 ++ 6 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 frontend/src/InteractiveImport/ReleaseType.ts diff --git a/frontend/src/InteractiveImport/InteractiveImport.ts b/frontend/src/InteractiveImport/InteractiveImport.ts index 9ec91a4aa..1feea60c0 100644 --- a/frontend/src/InteractiveImport/InteractiveImport.ts +++ b/frontend/src/InteractiveImport/InteractiveImport.ts @@ -1,5 +1,6 @@ import ModelBase from 'App/ModelBase'; import Episode from 'Episode/Episode'; +import ReleaseType from 'InteractiveImport/ReleaseType'; import Language from 'Language/Language'; import { QualityModel } from 'Quality/Quality'; import Series from 'Series/Series'; @@ -33,6 +34,7 @@ interface InteractiveImport extends ModelBase { qualityWeight: number; customFormats: object[]; indexerFlags: number; + releaseType: ReleaseType; rejections: Rejection[]; episodeFileId?: number; } diff --git a/frontend/src/InteractiveImport/ReleaseType.ts b/frontend/src/InteractiveImport/ReleaseType.ts new file mode 100644 index 000000000..7bfa8550d --- /dev/null +++ b/frontend/src/InteractiveImport/ReleaseType.ts @@ -0,0 +1,3 @@ +type ReleaseType = 'unknown' | 'singleEpisode' | 'multiEpisode' | 'seasonPack'; + +export default ReleaseType; diff --git a/frontend/src/Store/Actions/interactiveImportActions.js b/frontend/src/Store/Actions/interactiveImportActions.js index ce6da8a21..ed05ed548 100644 --- a/frontend/src/Store/Actions/interactiveImportActions.js +++ b/frontend/src/Store/Actions/interactiveImportActions.js @@ -163,6 +163,7 @@ export const actionHandlers = handleThunks({ languages: item.languages, releaseGroup: item.releaseGroup, indexerFlags: item.indexerFlags, + releaseType: item.releaseType, downloadId: item.downloadId }; }); diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs index 58af3323d..f1fcd03cf 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs @@ -25,7 +25,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual { List GetMediaFiles(int seriesId, int? seasonNumber); List GetMediaFiles(string path, string downloadId, int? seriesId, bool filterExistingFiles); - ManualImportItem ReprocessItem(string path, string downloadId, int seriesId, int? seasonNumber, List episodeIds, string releaseGroup, QualityModel quality, List languages, int indexerFlags); + ManualImportItem ReprocessItem(string path, string downloadId, int seriesId, int? seasonNumber, List episodeIds, string releaseGroup, QualityModel quality, List languages, int indexerFlags, ReleaseType releaseType); } public class ManualImportService : IExecute, IManualImportService @@ -139,7 +139,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual return ProcessFolder(path, path, downloadId, seriesId, filterExistingFiles); } - public ManualImportItem ReprocessItem(string path, string downloadId, int seriesId, int? seasonNumber, List episodeIds, string releaseGroup, QualityModel quality, List languages, int indexerFlags) + public ManualImportItem ReprocessItem(string path, string downloadId, int seriesId, int? seasonNumber, List episodeIds, string releaseGroup, QualityModel quality, List languages, int indexerFlags, ReleaseType releaseType) { var rootFolder = Path.GetDirectoryName(path); var series = _seriesService.GetSeries(seriesId); @@ -169,9 +169,11 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual 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.IndexerFlags = (IndexerFlags)indexerFlags; + localEpisode.ReleaseType = releaseType; + localEpisode.CustomFormats = _formatCalculator.ParseCustomFormat(localEpisode); localEpisode.CustomFormatScore = localEpisode.Series?.QualityProfile?.Value.CalculateCustomFormatScore(localEpisode.CustomFormats) ?? 0; - localEpisode.IndexerFlags = (IndexerFlags)indexerFlags; return MapItem(_importDecisionMaker.GetDecision(localEpisode, downloadClientItem), rootFolder, downloadId, null); } @@ -199,7 +201,8 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual ReleaseGroup = releaseGroup.IsNullOrWhiteSpace() ? Parser.Parser.ParseReleaseGroup(path) : releaseGroup, Languages = languages?.Count <= 1 && (languages?.SingleOrDefault() ?? Language.Unknown) == Language.Unknown ? LanguageParser.ParseLanguages(path) : languages, Quality = quality.Quality == Quality.Unknown ? QualityParser.ParseQuality(path) : quality, - IndexerFlags = (IndexerFlags)indexerFlags + IndexerFlags = (IndexerFlags)indexerFlags, + ReleaseType = releaseType }; return MapItem(new ImportDecision(localEpisode, new Rejection("Episodes not selected")), rootFolder, downloadId, null); diff --git a/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs b/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs index f537f2e2f..eb6787c5b 100644 --- a/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs +++ b/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs @@ -39,7 +39,7 @@ namespace Sonarr.Api.V3.ManualImport { foreach (var item in items) { - var processedItem = _manualImportService.ReprocessItem(item.Path, item.DownloadId, item.SeriesId, item.SeasonNumber, item.EpisodeIds ?? new List(), item.ReleaseGroup, item.Quality, item.Languages, item.IndexerFlags); + var processedItem = _manualImportService.ReprocessItem(item.Path, item.DownloadId, item.SeriesId, item.SeasonNumber, item.EpisodeIds ?? new List(), item.ReleaseGroup, item.Quality, item.Languages, item.IndexerFlags, item.ReleaseType); item.SeasonNumber = processedItem.SeasonNumber; item.Episodes = processedItem.Episodes.ToResource(); diff --git a/src/Sonarr.Api.V3/ManualImport/ManualImportReprocessResource.cs b/src/Sonarr.Api.V3/ManualImport/ManualImportReprocessResource.cs index 66bb78ba9..4eb2bbe4b 100644 --- a/src/Sonarr.Api.V3/ManualImport/ManualImportReprocessResource.cs +++ b/src/Sonarr.Api.V3/ManualImport/ManualImportReprocessResource.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Languages; +using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; using Sonarr.Api.V3.CustomFormats; using Sonarr.Api.V3.Episodes; @@ -22,6 +23,7 @@ namespace Sonarr.Api.V3.ManualImport public List CustomFormats { get; set; } public int CustomFormatScore { get; set; } public int IndexerFlags { get; set; } + public ReleaseType ReleaseType { get; set; } public IEnumerable Rejections { get; set; } } }