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