Skip to content

Commit

Permalink
Create a cue file for the move file operation in the same way as the …
Browse files Browse the repository at this point in the history
…copy file operation.

Use the correct ID overrides for processing grouped cue sheet files.
  • Loading branch information
zhangdoa committed Jan 6, 2024
1 parent f784ad1 commit 6f06938
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/NzbDrone.Core/MediaFiles/DiskScanService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public void Scan(List<string> folders = null, FilterFilesType filter = FilterFil
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)
{
Expand Down
33 changes: 20 additions & 13 deletions src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ public TrackFile MoveTrackFile(TrackFile trackFile, LocalTrack localTrack)

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);
Expand All @@ -91,29 +93,34 @@ public TrackFile CopyTrackFile(TrackFile trackFile, LocalTrack localTrack)

EnsureTrackFolder(trackFile, localTrack, filePath);

TryToCreateCueFile(localTrack, filePath);

if (_configService.CopyUsingHardlinks)
{
_logger.Debug("Hardlinking track file: {0} to {1}", trackFile.Path, filePath);
return TransferFile(trackFile, localTrack.Artist, localTrack.Tracks, filePath, TransferMode.HardLinkOrCopy);
}

_logger.Debug("Copying track file: {0} to {1}", trackFile.Path, filePath);
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(filePath);
var fileName = Path.GetFileNameWithoutExtension(filePath);
var directory = Path.GetDirectoryName(trackFilePath);
var fileName = Path.GetFileNameWithoutExtension(trackFilePath);
var cueSheetPath = Path.Combine(directory, fileName + ".cue");
_diskTransferService.TransferFile(localTrack.CueSheetPath, cueSheetPath, TransferMode.Copy);
_diskTransferService.TransferFile(localTrack.CueSheetPath, cueSheetPath, TransferMode.Copy, true);
var lines = new List<string>(File.ReadAllLines(cueSheetPath));
var fileLineIndex = lines.FindIndex(line => line.Contains("FILE"));
if (fileLineIndex != -1)
{
lines[fileLineIndex] = "FILE \"" + Path.GetFileName(filePath) + "\" WAVE";
lines[fileLineIndex] = "FILE \"" + Path.GetFileName(trackFilePath) + "\" WAVE";
File.WriteAllLines(cueSheetPath, lines);
}
}

if (_configService.CopyUsingHardlinks)
{
_logger.Debug("Hardlinking track file: {0} to {1}", trackFile.Path, filePath);
return TransferFile(trackFile, localTrack.Artist, localTrack.Tracks, filePath, TransferMode.HardLinkOrCopy);
}

_logger.Debug("Copying track file: {0} to {1}", trackFile.Path, filePath);
return TransferFile(trackFile, localTrack.Artist, localTrack.Tracks, filePath, TransferMode.Copy);
}

private TrackFile TransferFile(TrackFile trackFile, Artist artist, List<Track> tracks, string destinationFilePath, TransferMode mode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class IdentificationOverrides

public class CueSheetInfo
{
public List<IFileInfo> MusicFiles { get; set; }
public List<IFileInfo> MusicFiles { get; set; } = new List<IFileInfo>();
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,7 @@ private List<ManualImportItem> ProcessFolder(string folder, string downloadId, A
var cueSheetInfosGroupedByDiscId = cueSheetInfos.GroupBy(x => x.CueSheet.DiscID).ToList();
foreach (var cueSheetInfoGroup in cueSheetInfosGroupedByDiscId)
{
var audioFilesForCues = new List<IFileInfo>();
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);
Expand Down Expand Up @@ -208,6 +202,17 @@ private void RemoveProcessedAudioFiles(List<IFileInfo> audioFiles, List<CueSheet
}
}

private List<ManualImportItem> ProcessFolder(string downloadId, FilterFilesType filter, bool replaceExistingFiles, DownloadClientItem downloadClientItem, List<CueSheetInfo> cueSheetInfos)
{
var audioFilesForCues = new List<IFileInfo>();
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<ManualImportItem> ProcessFolder(string downloadId, IdentificationOverrides idOverrides, FilterFilesType filter, bool replaceExistingFiles, DownloadClientItem downloadClientItem, string albumTitle, List<IFileInfo> audioFiles, List<CueSheetInfo> cueSheetInfos = null)
{
idOverrides ??= new IdentificationOverrides();
Expand Down

0 comments on commit 6f06938

Please sign in to comment.