/// <summary> /// Fetches the tracklist of the clicked release and displays it. /// </summary> /// <param name="sender">Clicked release as <see cref="LastAlbum"/>.</param> /// <param name="e">Ignored.</param> public async void ReleaseClicked(object sender, EventArgs e) { if (EnableControls) { EnableControls = false; try { var release = sender as Release; OnStatusUpdated("Trying to fetch tracklist from '" + release.Name + "'"); LastResponse <LastAlbum> detailedRelease = null; if (release.Mbid != null && release.Mbid != "") { detailedRelease = await _lastfmAlbumAPI.GetInfoByMbidAsync(release.Mbid); } else { detailedRelease = await _lastfmAlbumAPI.GetInfoAsync(release.ArtistName, release.Name); } if (detailedRelease.Success) { FetchedTracks.Clear(); foreach (var t in detailedRelease.Content.Tracks) { FetchedTrackViewModel vm = new FetchedTrackViewModel(new ScrobbleBase(t.Name, t.ArtistName, t.AlbumName, "", t.Duration), release.Image); vm.ToScrobbleChanged += ToScrobbleChanged; FetchedTracks.Add(vm); } if (FetchedTracks.Count != 0) { CurrentView = _trackResultView; OnStatusUpdated("Successfully fetched tracklist from '" + release.Name + "'"); } else { OnStatusUpdated("'" + release.Name + "' has no tracks"); } } else { OnStatusUpdated("Error while fetching tracklist from '" + release.Name + "'"); } } catch (Exception ex) { OnStatusUpdated("Fatal error while fetching tracklist from release: " + ex.Message); } finally { EnableControls = true; } } }
/// <summary> /// Fetches the tracklist of the clicked release and displays it. /// </summary> /// <param name="sender">Clicked release as <see cref="LastAlbum"/>.</param> /// <param name="e">Ignored.</param> public async void ReleaseClicked(object sender, EventArgs e) { if (EnableControls) { EnableControls = false; try { var release = sender as Release; OnStatusUpdated(string.Format("Trying to fetch tracklist from release '{0}'", release.Name)); LastResponse <LastAlbum> response = null; if (!string.IsNullOrEmpty(release.Mbid)) { response = await _lastfmAlbumAPI.GetInfoByMbidAsync(release.Mbid); } else { response = await _lastfmAlbumAPI.GetInfoAsync(release.ArtistName, release.Name); } if (response.Success && response.Status == LastResponseStatus.Successful) { FetchedTracks.Clear(); foreach (var t in response.Content.Tracks) { FetchedTrackViewModel vm = new FetchedTrackViewModel(new ScrobbleBase(t.Name, t.ArtistName, t.AlbumName, "", t.Duration), release.Image); vm.ToScrobbleChanged += ToScrobbleChanged; FetchedTracks.Add(vm); } if (FetchedTracks.Count != 0) { CurrentView = _trackResultView; OnStatusUpdated(string.Format("Successfully fetched tracklist from release '{0}'", release.Name)); } else { OnStatusUpdated(string.Format("Release '{0}' has no tracks", release.Name)); } } else { OnStatusUpdated(string.Format("Error while fetching tracklist from release '{0}': {1}", release.Name, response.Status)); } } catch (Exception ex) { OnStatusUpdated(string.Format("Fatal error while fetching tracklist from release: {0}", ex.Message)); } finally { EnableControls = true; } } }
/// <summary> /// Shows the tracks of a setlist. /// </summary> /// <param name="sender">The setlist to get tracks from.</param> /// <param name="e">Ignored.</param> private void SetlistClicked(object sender, EventArgs e) { if (EnableControls) { EnableControls = false; try { ObservableCollection <FetchedTrackViewModel> vms = new ObservableCollection <FetchedTrackViewModel>(); var clickedSetlist = sender as Setlist; foreach (var set in clickedSetlist.Sets) { foreach (var song in set.Songs) { FetchedTrackViewModel vm = new FetchedTrackViewModel(new ScrobbleBase(song.Name, clickedSetlist.Artist.Name), null); vm.ToScrobbleChanged += ToScrobbleChanged; vms.Add(vm); } } if (vms.Count > 0) { OnStatusUpdated("Successfully got tracks from setlist"); FetchedTracks = vms; CurrentView = _trackResultView; } else { OnStatusUpdated("Setlist has no tracks"); } } catch (Exception ex) { OnStatusUpdated("Fatal error while getting setlist tracks: " + ex.Message); } finally { EnableControls = true; // more or less a hack, but we cant do it before because EnableControls is false. NotifyOfPropertyChange(() => CanSelectAll); NotifyOfPropertyChange(() => CanSelectNone); } } }