private Album EnsureAlbumAdded(List <ImportDecision <LocalTrack> > decisions) { var album = decisions.First().Item.Album; if (album.Id == 0) { var dbAlbum = _albumService.FindById(album.ForeignAlbumId); if (dbAlbum == null) { _logger.Debug($"Adding remote album {album}"); try { _albumService.InsertMany(new List <Album> { album }); _refreshAlbumService.RefreshAlbumInfo(album, new List <Album> { album }, false); dbAlbum = _albumService.FindById(album.ForeignAlbumId); } catch (Exception e) { _logger.Error(e, "Failed to add album {0}", album); RejectAlbum(decisions); return(null); } } var release = dbAlbum.AlbumReleases.Value.ExclusiveOrDefault(x => x.ForeignReleaseId == decisions.First().Item.Release.ForeignReleaseId); if (release == null) { RejectAlbum(decisions); return(null); } // Populate the new DB album foreach (var decision in decisions) { decision.Item.Album = dbAlbum; decision.Item.Release = release; var trackIds = decision.Item.Tracks.Select(x => x.ForeignTrackId).ToList(); decision.Item.Tracks = release.Tracks.Value.Where(x => trackIds.Contains(x.ForeignTrackId)).ToList(); } } return(album); }
protected override bool RefreshChildren(SortedChildren localChildren, List <Album> remoteChildren, bool forceChildRefresh, bool forceUpdateFileTags) { // we always want to end up refreshing the albums since we don't get have proper data Ensure.That(localChildren.UpToDate.Count, () => localChildren.UpToDate.Count).IsLessThanOrEqualTo(0); return(_refreshAlbumService.RefreshAlbumInfo(localChildren.All, remoteChildren, forceChildRefresh, forceUpdateFileTags)); }