diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index 145f40cd6..ec202e298 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -116,7 +116,7 @@ namespace NzbDrone.Core.MediaFiles audioFilesForCues.AddRange(cueSheetInfo.MusicFiles); } - decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfos[0].IdOverrides, itemInfo, config, cueSheetInfos)); + decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfoGroup.First().IdOverrides, itemInfo, config, cueSheetInfos)); foreach (var cueSheetInfo in cueSheetInfos) { diff --git a/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs b/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs index 5872047ba..7e24955d1 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs @@ -80,6 +80,8 @@ namespace NzbDrone.Core.MediaFiles EnsureTrackFolder(trackFile, localTrack, filePath); + TryToCreateCueFile(localTrack, filePath); + _logger.Debug("Moving track file: {0} to {1}", trackFile.Path, filePath); return TransferFile(trackFile, localTrack.Artist, localTrack.Tracks, filePath, TransferMode.Move); @@ -91,20 +93,7 @@ namespace NzbDrone.Core.MediaFiles EnsureTrackFolder(trackFile, localTrack, filePath); - if (localTrack.IsSingleFileRelease && !localTrack.CueSheetPath.Empty()) - { - var directory = Path.GetDirectoryName(filePath); - var fileName = Path.GetFileNameWithoutExtension(filePath); - var cueSheetPath = Path.Combine(directory, fileName + ".cue"); - _diskTransferService.TransferFile(localTrack.CueSheetPath, cueSheetPath, TransferMode.Copy); - var lines = new List(File.ReadAllLines(cueSheetPath)); - var fileLineIndex = lines.FindIndex(line => line.Contains("FILE")); - if (fileLineIndex != -1) - { - lines[fileLineIndex] = "FILE \"" + Path.GetFileName(filePath) + "\" WAVE"; - File.WriteAllLines(cueSheetPath, lines); - } - } + TryToCreateCueFile(localTrack, filePath); if (_configService.CopyUsingHardlinks) { @@ -116,6 +105,24 @@ namespace NzbDrone.Core.MediaFiles return TransferFile(trackFile, localTrack.Artist, localTrack.Tracks, filePath, TransferMode.Copy); } + private void TryToCreateCueFile(LocalTrack localTrack, string trackFilePath) + { + if (localTrack.IsSingleFileRelease && !localTrack.CueSheetPath.Empty()) + { + var directory = Path.GetDirectoryName(trackFilePath); + var fileName = Path.GetFileNameWithoutExtension(trackFilePath); + var cueSheetPath = Path.Combine(directory, fileName + ".cue"); + _diskTransferService.TransferFile(localTrack.CueSheetPath, cueSheetPath, TransferMode.Copy, true); + var lines = new List(File.ReadAllLines(cueSheetPath)); + var fileLineIndex = lines.FindIndex(line => line.Contains("FILE")); + if (fileLineIndex != -1) + { + lines[fileLineIndex] = "FILE \"" + Path.GetFileName(trackFilePath) + "\" WAVE"; + File.WriteAllLines(cueSheetPath, lines); + } + } + } + private TrackFile TransferFile(TrackFile trackFile, Artist artist, List tracks, string destinationFilePath, TransferMode mode) { Ensure.That(trackFile, () => trackFile).IsNotNull(); diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs index 3236d82c1..7cd06bd52 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs @@ -35,7 +35,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport public class CueSheetInfo { - public List MusicFiles { get; set; } + public List MusicFiles { get; set; } = new List(); public IdentificationOverrides IdOverrides { get; set; } public CueSheet CueSheet { get; set; } public bool IsForMediaFile(string path) => CueSheet != null && CueSheet.Files.Count > 0 && CueSheet.Files.Any(x => Path.GetFileName(path) == x.Name); diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs index 598ebf4b1..f7c1d1da3 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs @@ -166,13 +166,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList(); foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId) { - var audioFilesForCues = new List(); - foreach (var cueSheetInfo in cueSheetInfoGroup) - { - audioFilesForCues.AddRange(cueSheetInfo.MusicFiles); - } - - var manualImportItems = ProcessFolder(downloadId, cueSheetInfos[0].IdOverrides, filter, replaceExistingFiles, downloadClientItem, cueSheetInfos[0].IdOverrides.Album.Title, audioFilesForCues, cueSheetInfos); + var manualImportItems = ProcessFolder(downloadId, filter, replaceExistingFiles, downloadClientItem, cueSheetInfoGroup.ToList()); results.AddRange(manualImportItems); RemoveProcessedAudioFiles(audioFiles, cueSheetInfos, manualImportItems); @@ -208,6 +202,17 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual } } + private List ProcessFolder(string downloadId, FilterFilesType filter, bool replaceExistingFiles, DownloadClientItem downloadClientItem, List cueSheetInfos) + { + var audioFilesForCues = new List(); + foreach (var cueSheetInfo in cueSheetInfos) + { + audioFilesForCues.AddRange(cueSheetInfo.MusicFiles); + } + + return ProcessFolder(downloadId, cueSheetInfos[0].IdOverrides, filter, replaceExistingFiles, downloadClientItem, cueSheetInfos[0].CueSheet.Title, audioFilesForCues, cueSheetInfos); + } + private List ProcessFolder(string downloadId, IdentificationOverrides idOverrides, FilterFilesType filter, bool replaceExistingFiles, DownloadClientItem downloadClientItem, string albumTitle, List audioFiles, List cueSheetInfos = null) { idOverrides ??= new IdentificationOverrides();