mirror of https://github.com/lidarr/Lidarr
Move the cue sheet info list into ImportDecisionMakerInfo to eliminate the IMakeImportDecision API change.
Fix a crash when trying to import an album while the artist is not added yet. (cherry picked from commit d439677e3a0bf5c7f9f92a5ca0b72ad89c6ee912)
This commit is contained in:
parent
2d5b6a1def
commit
0bb5a10f10
|
@ -73,7 +73,9 @@ namespace NzbDrone.Core.MediaFiles
|
|||
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)
|
||||
{
|
||||
|
@ -124,7 +126,8 @@ namespace NzbDrone.Core.MediaFiles
|
|||
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);
|
||||
});
|
||||
|
||||
|
@ -314,7 +317,7 @@ namespace NzbDrone.Core.MediaFiles
|
|||
var parsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
AlbumTitle = cueSheet.Title,
|
||||
ArtistName = artistFromCue.Name,
|
||||
ArtistName = artistFromCue?.Name,
|
||||
ReleaseDate = cueSheet.Date,
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
@ -114,7 +114,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Identification
|
|||
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.
|
||||
|
|
|
@ -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
|
||||
|
@ -34,6 +34,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
|||
{
|
||||
public DownloadClientItem DownloadClientItem { get; set; }
|
||||
public ParsedAlbumInfo ParsedAlbumInfo { get; set; }
|
||||
public List<CueSheetInfo> CueSheetInfos { get; set; } = new List<CueSheetInfo>();
|
||||
}
|
||||
|
||||
public class ImportDecisionMakerConfig
|
||||
|
@ -144,7 +145,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
|||
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();
|
||||
|
@ -154,11 +155,11 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
|||
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)
|
||||
{
|
||||
|
@ -186,7 +187,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
|||
});
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
|
|
@ -186,9 +186,9 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
|||
};
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue