From 14bf91360ae5450b7319d940fb3e62a8f3fc598a Mon Sep 17 00:00:00 2001 From: zhangdoa Date: Thu, 12 Oct 2023 20:01:43 +0200 Subject: [PATCH] Only process cue-originated audio files if there is any. (cherry picked from commit 4afaf5f058c682d7f2e1d7a9b51588dcd588b873) --- .../MediaFiles/DiskScanService.cs | 51 ++++++++++--------- .../TrackImport/Manual/ManualImportService.cs | 39 ++++++++------ 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index ec202e298..4c71e5f49 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -99,39 +99,42 @@ namespace NzbDrone.Core.MediaFiles var decisions = new List>(); var cueFiles = mediaFileList.Where(x => x.Extension.Equals(".cue")).ToList(); - mediaFileList.RemoveAll(l => cueFiles.Contains(l)); - var cueSheetInfos = new List(); - foreach (var cueFile in cueFiles) + if (cueFiles.Count > 0) { - var cueSheetInfo = _importDecisionMaker.GetCueSheetInfo(cueFile, mediaFileList); - cueSheetInfos.Add(cueSheetInfo); - } - - var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList(); - foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId) - { - var audioFilesForCues = new List(); - foreach (var cueSheetInfo in cueSheetInfoGroup) + mediaFileList.RemoveAll(l => cueFiles.Contains(l)); + var cueSheetInfos = new List(); + foreach (var cueFile in cueFiles) { - audioFilesForCues.AddRange(cueSheetInfo.MusicFiles); + var cueSheetInfo = _importDecisionMaker.GetCueSheetInfo(cueFile, mediaFileList); + cueSheetInfos.Add(cueSheetInfo); } - decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfoGroup.First().IdOverrides, itemInfo, config, cueSheetInfos)); - - foreach (var cueSheetInfo in cueSheetInfos) + var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList(); + foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId) { - if (cueSheetInfo.CueSheet != null) + var audioFilesForCues = new List(); + foreach (var cueSheetInfo in cueSheetInfoGroup) { - decisions.ForEach(item => + audioFilesForCues.AddRange(cueSheetInfo.MusicFiles); + } + + decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfoGroup.First().IdOverrides, itemInfo, config, cueSheetInfos)); + + foreach (var cueSheetInfo in cueSheetInfos) + { + if (cueSheetInfo.CueSheet != null) { - if (cueSheetInfo.IsForMediaFile(item.Item.Path)) + decisions.ForEach(item => { - item.Item.CueSheetPath = cueSheetInfo.CueSheet.Path; - } - }); + if (cueSheetInfo.IsForMediaFile(item.Item.Path)) + { + item.Item.CueSheetPath = cueSheetInfo.CueSheet.Path; + } + }); + } + + mediaFileList.RemoveAll(x => cueSheetInfo.MusicFiles.Contains(x)); } - - mediaFileList.RemoveAll(x => cueSheetInfo.MusicFiles.Contains(x)); } } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs index f7c1d1da3..c0edc06ee 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs @@ -155,21 +155,24 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual // Split cue and non-cue files var cueFiles = audioFiles.Where(x => x.Extension.Equals(".cue")).ToList(); - audioFiles.RemoveAll(l => cueFiles.Contains(l)); - var cueSheetInfos = new List(); - foreach (var cueFile in cueFiles) + if (cueFiles.Count > 0) { - var cueSheetInfo = _importDecisionMaker.GetCueSheetInfo(cueFile, audioFiles); - cueSheetInfos.Add(cueSheetInfo); - } + audioFiles.RemoveAll(l => cueFiles.Contains(l)); + var cueSheetInfos = new List(); + foreach (var cueFile in cueFiles) + { + var cueSheetInfo = _importDecisionMaker.GetCueSheetInfo(cueFile, audioFiles); + cueSheetInfos.Add(cueSheetInfo); + } - var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList(); - foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId) - { - var manualImportItems = ProcessFolder(downloadId, filter, replaceExistingFiles, downloadClientItem, cueSheetInfoGroup.ToList()); - results.AddRange(manualImportItems); + var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList(); + foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId) + { + var manualImportItems = ProcessFolder(downloadId, filter, replaceExistingFiles, downloadClientItem, cueSheetInfoGroup.ToList()); + results.AddRange(manualImportItems); - RemoveProcessedAudioFiles(audioFiles, cueSheetInfos, manualImportItems); + RemoveProcessedAudioFiles(audioFiles, cueSheetInfos, manualImportItems); + } } var idOverrides = new IdentificationOverrides @@ -293,11 +296,15 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual } } - var singleFileReleaseDecisions = _importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfos[0].IdOverrides, itemInfo, config, cueSheetInfos); - var manualImportItems = UpdateItems(group, singleFileReleaseDecisions, replaceExistingFiles, disableReleaseSwitching); - result.AddRange(manualImportItems); + if (audioFilesForCues.Count > 0) + { + var idOverrides = cueSheetInfos.Count > 0 ? cueSheetInfos[0].IdOverrides : null; + var singleFileReleaseDecisions = _importDecisionMaker.GetImportDecisions(audioFilesForCues, idOverrides, itemInfo, config, cueSheetInfos); + var manualImportItems = UpdateItems(group, singleFileReleaseDecisions, replaceExistingFiles, disableReleaseSwitching); + result.AddRange(manualImportItems); - RemoveProcessedAudioFiles(audioFiles, cueSheetInfos, manualImportItems); + RemoveProcessedAudioFiles(audioFiles, cueSheetInfos, manualImportItems); + } var idOverride = new IdentificationOverrides {