Skip to content

Commit

Permalink
Move the cue sheet info list into ImportDecisionMakerInfo to eliminat…
Browse files Browse the repository at this point in the history
…e the IMakeImportDecision API change.

Fix a crash when trying to import an album while the artist is not added yet.
  • Loading branch information
zhangdoa committed Jan 6, 2024
1 parent 5636735 commit d439677
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 12 deletions.
9 changes: 6 additions & 3 deletions src/NzbDrone.Core/MediaFiles/CueSheetService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ public List<ImportDecision<LocalTrack>> GetImportDecisions(ref List<IFileInfo> m
audioFilesForCues.AddRange(cueSheetInfo.MusicFiles);
}

decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfoGroup.First().IdOverrides, itemInfo, config, cueSheetInfos));
var itemInfoWithCueSheetInfos = itemInfo;
itemInfoWithCueSheetInfos.CueSheetInfos = cueSheetInfoGroup.ToList();
decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFilesForCues, cueSheetInfoGroup.First().IdOverrides, itemInfoWithCueSheetInfos, config));

foreach (var cueSheetInfo in cueSheetInfos)
{
Expand Down Expand Up @@ -124,7 +126,8 @@ public List<ImportDecision<LocalTrack>> GetImportDecisions(ref List<IFileInfo> m
return;
}
decision.Item.Tracks = tracksFromRelease.Where(trackFromRelease => !addedTracks.Contains(trackFromRelease) && tracksFromCueSheet.Any(trackFromCueSheet => string.Equals(trackFromCueSheet.Title, trackFromRelease.Title, StringComparison.InvariantCultureIgnoreCase))).ToList();
// TODO diacritics could cause false positives here
decision.Item.Tracks = tracksFromRelease.Where(trackFromRelease => !addedTracks.Contains(trackFromRelease) && tracksFromCueSheet.Any(trackFromCueSheet => string.Equals(trackFromCueSheet.Title, trackFromRelease.Title, StringComparison.OrdinalIgnoreCase))).ToList();
addedTracks.AddRange(decision.Item.Tracks);
});

Expand Down Expand Up @@ -314,7 +317,7 @@ private CueSheetInfo GetCueSheetInfo(IFileInfo cueFile, List<IFileInfo> musicFil
var parsedAlbumInfo = new ParsedAlbumInfo
{
AlbumTitle = cueSheet.Title,
ArtistName = artistFromCue.Name,
ArtistName = artistFromCue?.Name,
ReleaseDate = cueSheet.Date,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Identification
{
public interface IIdentificationService
{
List<LocalAlbumRelease> Identify(List<LocalTrack> localTracks, IdentificationOverrides idOverrides, ImportDecisionMakerConfig config, List<CueSheetInfo> cueSheetInfos = null);
List<LocalAlbumRelease> Identify(List<LocalTrack> localTracks, IdentificationOverrides idOverrides, ImportDecisionMakerConfig config);
}

public class IdentificationService : IIdentificationService
Expand Down Expand Up @@ -114,7 +114,7 @@ public List<LocalAlbumRelease> GetLocalAlbumReleases(List<LocalTrack> localTrack
return releases;
}

public List<LocalAlbumRelease> Identify(List<LocalTrack> localTracks, IdentificationOverrides idOverrides, ImportDecisionMakerConfig config, List<CueSheetInfo> cueSheetInfos = null)
public List<LocalAlbumRelease> Identify(List<LocalTrack> localTracks, IdentificationOverrides idOverrides, ImportDecisionMakerConfig config)
{
// 1 group localTracks so that we think they represent a single release
// 2 get candidates given specified artist, album and release. Candidates can include extra files already on disk.
Expand Down
11 changes: 6 additions & 5 deletions src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
{
public interface IMakeImportDecision
{
List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> musicFiles, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config, List<CueSheetInfo> cueSheetInfos = null);
List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> musicFiles, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config);
}

public class IdentificationOverrides
Expand All @@ -34,6 +34,7 @@ public class ImportDecisionMakerInfo
{
public DownloadClientItem DownloadClientItem { get; set; }
public ParsedAlbumInfo ParsedAlbumInfo { get; set; }
public List<CueSheetInfo> CueSheetInfos { get; set; } = new List<CueSheetInfo>();
}

public class ImportDecisionMakerConfig
Expand Down Expand Up @@ -144,7 +145,7 @@ public class ImportDecisionMaker : IMakeImportDecision
return Tuple.Create(localTracks, decisions);
}

public List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> musicFiles, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config, List<CueSheetInfo> cueSheetInfos)
public List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> musicFiles, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config)
{
idOverrides ??= new IdentificationOverrides();
itemInfo ??= new ImportDecisionMakerInfo();
Expand All @@ -154,11 +155,11 @@ public List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> music
var decisions = trackData.Item2;

localTracks.ForEach(x => x.ExistingFile = !config.NewDownload);
if (cueSheetInfos != null)
if (!itemInfo.CueSheetInfos.Empty())
{
localTracks.ForEach(localTrack =>
{
var cueSheetFindResult = cueSheetInfos.Find(x => x.IsForMediaFile(localTrack.Path));
var cueSheetFindResult = itemInfo.CueSheetInfos.Find(x => x.IsForMediaFile(localTrack.Path));
var cueSheet = cueSheetFindResult?.CueSheet;
if (cueSheet != null)
{
Expand Down Expand Up @@ -186,7 +187,7 @@ public List<ImportDecision<LocalTrack>> GetImportDecisions(List<IFileInfo> music
});
}

var releases = _identificationService.Identify(localTracks, idOverrides, config, cueSheetInfos);
var releases = _identificationService.Identify(localTracks, idOverrides, config);

var albums = releases.GroupBy(x => x.AlbumRelease?.Album?.Value.ForeignAlbumId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,9 @@ private List<ManualImportItem> ProcessFolder(string downloadId, IdentificationOv
};

var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, itemInfo, config);
if (audioFiles.Count > 0)
if (!audioFiles.Empty())
{
decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFiles, idOverrides, itemInfo, config, cueSheetInfos));
decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFiles, idOverrides, itemInfo, config));
}

// paths will be different for new and old files which is why we need to map separately
Expand Down

0 comments on commit d439677

Please sign in to comment.