コード例 #1
0
        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);
        }
コード例 #2
0
 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));
 }