/// <summary> /// The internal scrobble function, scrobbles pure request parameters. Could be for more /// than one track, as specified by Last.fm, but they recommend that only one track should /// be submitted at a time. /// </summary> /// <param name="parameters">A <see cref="RequestParameters"/></param> internal async Task Scrobble(RequestParameters parameters) { //Initialize(); var request = new Request(new Uri("http://ws.audioscrobbler.com/2.0/"), parameters); // A BadSessionException occurs when another client has made a handshake with this // user's credentials, should redo a handshake and pass this exception quietly. try { await request.Execute(); } catch (BadSessionException) { //this.doHandshake(); await Scrobble(parameters); } }
/// <summary> /// Send the now playing notification. /// </summary> /// <param name="track">A <see cref="NowplayingTrack"/></param> public async Task ReportNowplayingAsync(NowplayingTrack track) { var parameters = new RequestParameters { ["api_key"] = session.APIKey, ["album"] = track.Album, ["artist"] = track.Artist, ["duration"] = ((int)track.Duration.TotalSeconds).ToString(), ["method"] = "track.updateNowPlaying", ["sk"] = session.SessionKey, ["track"] = track.Title }; var api_sig = ""; foreach (var item in parameters) { api_sig += item.Key + item.Value; } api_sig += session.APISecret; parameters["api_sig"] = Utilities.MD5(api_sig); Request request = new Request(new Uri("http://ws.audioscrobbler.com/2.0/"), parameters); // A BadSessionException occurs when another client has made a handshake with this // user's credentials, should redo a handshake and pass this exception quietly. try { await request.Execute(); } catch (BadSessionException) { //this.doHandshake(); await ReportNowplayingAsync(track); } }