private void TransmitQueue()
        {
            // save here in case we're interrupted before we complete
            // the request.  we save it again when we get an OK back
            // from the server
            queue.Save();

            next_interval = DateTime.MinValue;

            if (!connected)
            {
                return;
            }

            current_scrobble_request = new LastfmRequest("track.scrobble", RequestType.Write, ResponseFormat.Json);
            IList <IQueuedTrack> tracks = queue.GetTracks();

            for (int i = 0; i < tracks.Count; i++)
            {
                IQueuedTrack track = tracks[i];

                string str_track_number = String.Empty;
                if (track.TrackNumber != 0)
                {
                    str_track_number = track.TrackNumber.ToString();
                }

                bool chosen_by_user = (track.TrackAuth.Length == 0);

                current_scrobble_request.AddParameter(String.Format("timestamp[{0}]", i), track.StartTime.ToString());
                current_scrobble_request.AddParameter(String.Format("track[{0}]", i), track.Title);
                current_scrobble_request.AddParameter(String.Format("artist[{0}]", i), track.Artist);
                current_scrobble_request.AddParameter(String.Format("album[{0}]", i), track.Album);
                current_scrobble_request.AddParameter(String.Format("trackNumber[{0}]", i), str_track_number);
                current_scrobble_request.AddParameter(String.Format("duration[{0}]", i), track.Duration.ToString());
                current_scrobble_request.AddParameter(String.Format("mbid[{0}]", i), track.MusicBrainzId);
                current_scrobble_request.AddParameter(String.Format("chosenByUser[{0}]", i), chosen_by_user ? "1" : "0");
            }

            Log.DebugFormat("Last.fm scrobbler sending '{0}'", current_scrobble_request.ToString());

            state = State.Transmitting;
            current_async_result = current_scrobble_request.BeginSend(OnScrobbleResponse, tracks.Count);
            state = State.WaitingForResponse;
            if (!(current_async_result.AsyncWaitHandle.WaitOne(TIME_OUT, false)))
            {
                Log.Warning("Audioscrobbler upload failed", "The request timed out and was aborted", false);
                next_interval = DateTime.Now + new TimeSpan(0, 0, RETRY_SECONDS);
                hard_failures++;
                state = State.Idle;
            }
        }
예제 #2
0
        private void TransmitQueue()
        {
            // save here in case we're interrupted before we complete
            // the request.  we save it again when we get an OK back
            // from the server
            queue.Save();

            next_interval = DateTime.MinValue;

            if (!connected)
            {
                return;
            }

            state = State.Transmitting;
            current_scrobble_request = new LastfmRequest("track.scrobble", RequestType.Write, ResponseFormat.Json);

            int trackCount = 0;

            while (true)
            {
                IQueuedTrack track = queue.GetNextTrack();
                if (track == null ||
                    // Last.fm can technically handle up to 50 songs in one request
                    // but let's not use the top limit
                    trackCount == 40)
                {
                    break;
                }

                try {
                    current_scrobble_request.AddParameters(GetTrackParameters(track, trackCount));
                    trackCount++;
                } catch (MaxSizeExceededException) {
                    break;
                }
            }

            Log.DebugFormat("Last.fm scrobbler sending '{0}'", current_scrobble_request.ToString());

            current_async_result = current_scrobble_request.BeginSend(OnScrobbleResponse, trackCount);
            state = State.WaitingForResponse;
            if (!(current_async_result.AsyncWaitHandle.WaitOne(TIME_OUT, false)))
            {
                Log.Warning("Audioscrobbler upload failed", "The request timed out and was aborted", false);
                next_interval = DateTime.Now + new TimeSpan(0, 0, RETRY_SECONDS);
                hard_failures++;
                state = State.Idle;
            }
        }
예제 #3
0
        private void TransmitQueue()
        {
            // save here in case we're interrupted before we complete
            // the request.  we save it again when we get an OK back
            // from the server
            queue.Save ();

            next_interval = DateTime.MinValue;

            if (!connected) {
                return;
            }

            state = State.Transmitting;
            current_scrobble_request = new LastfmRequest ("track.scrobble", RequestType.Write, ResponseFormat.Json);

            int trackCount = 0;
            while (true) {
                IQueuedTrack track = queue.GetNextTrack ();
                if (track == null ||
                    // Last.fm can technically handle up to 50 songs in one request
                    // but let's not use the top limit
                    trackCount == 40) {
                    break;
                 }

                try {
                    current_scrobble_request.AddParameters (GetTrackParameters (track, trackCount));
                    trackCount++;
                } catch (MaxSizeExceededException) {
                    break;
                }
            }

            Log.DebugFormat ("Last.fm scrobbler sending '{0}'", current_scrobble_request.ToString ());

            current_async_result = current_scrobble_request.BeginSend (OnScrobbleResponse, trackCount);
            state = State.WaitingForResponse;
            if (!(current_async_result.AsyncWaitHandle.WaitOne (TIME_OUT, false))) {
                Log.Warning ("Audioscrobbler upload failed", "The request timed out and was aborted", false);
                next_interval = DateTime.Now + new TimeSpan (0, 0, RETRY_SECONDS);
                hard_failures++;
                state = State.Idle;
            }
        }
예제 #4
0
        private void TransmitQueue ()
        {
            // save here in case we're interrupted before we complete
            // the request.  we save it again when we get an OK back
            // from the server
            queue.Save ();

            next_interval = DateTime.MinValue;

            if (!connected) {
                return;
            }

            current_scrobble_request = new LastfmRequest ("track.scrobble", RequestType.Write, ResponseFormat.Json);
            IList<IQueuedTrack> tracks = queue.GetTracks ();

            for (int i = 0; i < tracks.Count; i++) {
                IQueuedTrack track = tracks[i];

                string str_track_number = String.Empty;
                if (track.TrackNumber != 0) {
                    str_track_number = track.TrackNumber.ToString();
                }

                bool chosen_by_user = (track.TrackAuth.Length == 0);

                current_scrobble_request.AddParameter (String.Format ("timestamp[{0}]", i), track.StartTime.ToString ());
                current_scrobble_request.AddParameter (String.Format ("track[{0}]", i), track.Title);
                current_scrobble_request.AddParameter (String.Format ("artist[{0}]", i), track.Artist);
                current_scrobble_request.AddParameter (String.Format ("album[{0}]", i), track.Album);
                current_scrobble_request.AddParameter (String.Format ("trackNumber[{0}]", i), str_track_number);
                current_scrobble_request.AddParameter (String.Format ("duration[{0}]", i), track.Duration.ToString ());
                current_scrobble_request.AddParameter (String.Format ("mbid[{0}]", i), track.MusicBrainzId);
                current_scrobble_request.AddParameter (String.Format ("chosenByUser[{0}]", i), chosen_by_user ? "1" : "0");
            }

            Log.DebugFormat ("Last.fm scrobbler sending '{0}'", current_scrobble_request.ToString ());

            state = State.Transmitting;
            current_async_result = current_scrobble_request.BeginSend (OnScrobbleResponse, tracks.Count);
            state = State.WaitingForResponse;
            if (!(current_async_result.AsyncWaitHandle.WaitOne (TIME_OUT, false))) {
                Log.Warning ("Audioscrobbler upload failed", "The request timed out and was aborted", false);
                next_interval = DateTime.Now + new TimeSpan (0, 0, RETRY_SECONDS);
                hard_failures++;
                state = State.Idle;
            }
        }