public async Task <AudioDbTrack> GetTrackByMbidAsync(string mbid, string language, bool cacheOnly) { AudioDbTracks audioDbTracks = null; string cache = CreateAndGetCacheName(mbid, "Track_mbId"); if (!string.IsNullOrEmpty(cache) && File.Exists(cache)) { audioDbTracks = await _downloader.ReadCacheAsync <AudioDbTracks>(cache).ConfigureAwait(false); } else { if (cacheOnly) { return(null); } string url = GetUrl(URL_TRACK_BY_MBDB, mbid); audioDbTracks = await _downloader.DownloadAsync <AudioDbTracks>(url, cache).ConfigureAwait(false); } if (audioDbTracks.Tracks != null && audioDbTracks.Tracks.Count > 0) { AudioDbTrack track = audioDbTracks.Tracks.Where(t => t.TrackID > 0).FirstOrDefault(); if (track != null) { track.SetLanguage(language); } return(track); } return(null); }
public AudioDbTrack GetTrack(long tadbTrackId, string language, bool cacheOnly) { AudioDbTracks audioDbTracks = null; string cache = CreateAndGetCacheName(tadbTrackId, "Track"); if (!string.IsNullOrEmpty(cache) && File.Exists(cache)) { audioDbTracks = _downloader.ReadCache <AudioDbTracks>(cache); } else { if (cacheOnly) { return(null); } string url = GetUrl(URL_TRACK_BY_TADB, tadbTrackId); audioDbTracks = _downloader.Download <AudioDbTracks>(url, cache); } if (audioDbTracks.Tracks != null && audioDbTracks.Tracks.Count > 0) { AudioDbTrack track = audioDbTracks.Tracks.Where(t => t.TrackID > 0).FirstOrDefault(); if (track != null) { track.SetLanguage(language); } return(track); } return(null); }
public override async Task <bool> UpdateFromOnlineMusicTrackAsync(TrackInfo track, string language, bool cacheOnly) { try { bool cacheIncomplete = false; AudioDbTrack trackDetail = null; language = language ?? PreferredLanguage; if (track.AudioDbId > 0) { trackDetail = await _audioDbHandler.GetTrackAsync(track.AudioDbId, language, cacheOnly).ConfigureAwait(false); } //Musicbrainz Id can be unreliable in this regard because it is linked to a recording and the same recording can //be across multiple different albums. In other words the Id is unique per song not per album song, so using this can //lead to the wrong album id. //if (trackDetail == null && !string.IsNullOrEmpty(track.MusicBrainzId)) // trackDetail = _audioDbHandler.GetTrackByMbid(track.MusicBrainzId, language, cacheOnly); if (trackDetail == null && track.TrackNum > 0 && (track.AlbumAudioDbId > 0 || !string.IsNullOrEmpty(track.AlbumMusicBrainzGroupId))) { List <AudioDbTrack> foundTracks = await _audioDbHandler.GetTracksByAlbumIdAsync(track.AlbumAudioDbId, language, cacheOnly).ConfigureAwait(false); if (foundTracks == null && !string.IsNullOrEmpty(track.AlbumMusicBrainzGroupId)) { List <AudioDbAlbum> foundAlbums = await _audioDbHandler.GetAlbumByMbidAsync(track.AlbumMusicBrainzGroupId, language, cacheOnly).ConfigureAwait(false); if (foundAlbums != null && foundAlbums.Count == 1) { var albumDetail = await _audioDbHandler.GetAlbumAsync(foundAlbums[0].AlbumId, language, cacheOnly).ConfigureAwait(false); if (albumDetail != null) { foundTracks = await _audioDbHandler.GetTracksByAlbumIdAsync(albumDetail.AlbumId, language, cacheOnly).ConfigureAwait(false); } } } if (foundTracks != null && foundTracks.Count > 0) { trackDetail = foundTracks.FirstOrDefault(t => t.TrackNumber == track.TrackNum); } } if (trackDetail == null) { return(false); } //Get the track into the cache AudioDbTrack trackTempDetail = await _audioDbHandler.GetTrackAsync(trackDetail.TrackID, language, cacheOnly).ConfigureAwait(false); if (trackTempDetail != null) { trackDetail = trackTempDetail; } track.AudioDbId = trackDetail.TrackID; track.LyricId = trackDetail.LyricID.HasValue ? trackDetail.LyricID.Value : 0; track.MvDbId = trackDetail.MvDbID.HasValue ? trackDetail.MvDbID.Value : 0; track.MusicBrainzId = trackDetail.MusicBrainzID; track.AlbumAudioDbId = trackDetail.AlbumID.HasValue ? trackDetail.AlbumID.Value : 0; track.AlbumMusicBrainzGroupId = trackDetail.MusicBrainzAlbumID; track.TrackName = trackDetail.Track; track.Album = trackDetail.Album; track.TrackNum = trackDetail.TrackNumber; track.DiscNum = trackDetail.CD.HasValue ? trackDetail.CD.Value : 1; track.Rating = new SimpleRating(trackDetail.Rating, trackDetail.RatingCount); track.TrackLyrics = trackDetail.TrackLyrics; track.Duration = trackDetail.Duration.HasValue ? trackDetail.Duration.Value / 1000 : 0; if (trackDetail.ArtistID.HasValue) { track.Artists = ConvertToPersons(trackDetail.ArtistID.Value, trackDetail.MusicBrainzArtistID, trackDetail.Artist, PersonAspect.OCCUPATION_ARTIST, trackDetail.Track, trackDetail.Album); track.AlbumArtists = ConvertToPersons(trackDetail.ArtistID.Value, trackDetail.MusicBrainzArtistID, trackDetail.Artist, PersonAspect.OCCUPATION_ARTIST, trackDetail.Track, trackDetail.Album); } if (!string.IsNullOrEmpty(trackDetail.Genre?.Trim())) { track.Genres.Add(new GenreInfo { Name = trackDetail.Genre.Trim() }); } if (trackDetail.AlbumID.HasValue) { AudioDbAlbum album = await _audioDbHandler.GetAlbumAsync(trackDetail.AlbumID.Value, language, cacheOnly).ConfigureAwait(false); if (cacheOnly && album == null) { cacheIncomplete = true; } if (album != null && album.LabelId.HasValue) { track.MusicLabels = ConvertToCompanies(album.LabelId.Value, album.Label, CompanyAspect.COMPANY_MUSIC_LABEL); } } return(!cacheIncomplete); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Debug("TheAudioDbWrapper: Exception while processing track {0}", ex, track.ToString()); return(false); } }