mirror of https://github.com/lidarr/Lidarr
Create a cue file for the move file operation in the same way as the copy file operation.
Use the correct ID overrides for processing grouped cue sheet files. (cherry picked from commit 6f069389bf23bbb0fc220463795bd03d81da7cfe)
This commit is contained in:
parent
efd9a63fad
commit
1f9adce15d
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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<string>(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<string>(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<Track> tracks, string destinationFilePath, TransferMode mode)
|
||||
{
|
||||
Ensure.That(trackFile, () => trackFile).IsNotNull();
|
||||
|
|
|
@ -35,7 +35,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
|||
|
||||
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);
|
||||
|
|
|
@ -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<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);
|
||||
|
@ -208,6 +202,17 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
|||
}
|
||||
}
|
||||
|
||||
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();
|
||||
|
|
Loading…
Reference in New Issue