protected override async Task <bool> OnLookupSuccess(Discogs.ReleaseLookup releaseLookup) { var value = await this.ImportImage(releaseLookup).ConfigureAwait(false); if (!string.IsNullOrEmpty(value)) { releaseLookup.MetaData[FRONT_COVER] = value; return(true); } else { Logger.Write(this, LogLevel.Warn, "Failed to download artwork for album {0} - {1}: Releases don't contain images or they count not be downloaded.", releaseLookup.Artist, releaseLookup.Album); releaseLookup.AddError(Strings.DiscogsFetchArtworkTask_NotFound); return(false); } }
protected virtual async Task <bool> ImportTags(Discogs.ReleaseLookup releaseLookup) { var release = default(Discogs.ReleaseDetails); try { Logger.Write(this, LogLevel.Debug, "Fetching release details: {0}", releaseLookup.Release.ResourceUrl); release = await this.Discogs.GetRelease(releaseLookup.Release).ConfigureAwait(false); if (release == null) { Logger.Write(this, LogLevel.Error, "Failed to fetch release details \"{0}\": Unknown error.", releaseLookup.Release.ResourceUrl); return(false); } } catch (Exception e) { Logger.Write(this, LogLevel.Error, "Failed to fetch release details \"{0}\": {1}", releaseLookup.Release.ResourceUrl, e.Message); releaseLookup.AddError(e.Message); } var names = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var fileData in releaseLookup.FileDatas) { lock (fileData.MetaDatas) { fileData.AddOrUpdate(metaData => { var track = this.GetTrackDetails(fileData, metaData, release); return(this.GetMetaData(fileData, release, track)); }, names); } } if (names.Any()) { await this.MetaDataManager.Save(releaseLookup.FileDatas, this.WriteTags.Value, false, names.ToArray()).ConfigureAwait(false); await this.HierarchyManager.Refresh(releaseLookup.FileDatas, names.ToArray()).ConfigureAwait(false); } return(true); }
protected virtual async Task <string> ImportImage(Discogs.ReleaseLookup releaseLookup) { var urls = new[] { releaseLookup.Release.CoverUrl, releaseLookup.Release.ThumbUrl }; foreach (var url in urls) { if (!string.IsNullOrEmpty(url)) { try { var fileName = await FileMetaDataStore.IfNotExistsAsync(PREFIX, url, async result => { Logger.Write(this, LogLevel.Debug, "Downloading data from url: {0}", url); var data = await this.Discogs.GetData(url).ConfigureAwait(false); if (data == null) { Logger.Write(this, LogLevel.Error, "Failed to download data from url \"{0}\": Unknown error.", url); return(string.Empty); } return(await FileMetaDataStore.WriteAsync(PREFIX, url, data).ConfigureAwait(false)); }).ConfigureAwait(false); if (!string.IsNullOrEmpty(fileName)) { return(fileName); } } catch (Exception e) { Logger.Write(this, LogLevel.Error, "Failed to download data from url \"{0}\": {1}", url, e.Message); releaseLookup.AddError(e.Message); } } } return(string.Empty); }