示例#1
0
        public void Scrobble(Song[] songs)
        {
            if (!Connected) {
                unsubmitted_songs.AddRange (songs);
            } else if (songs.Length > 0) {
                StringBuilder post_data = new StringBuilder ();

                post_data.Append ("s=" + session);

                int i = 0;
                foreach (Song song in songs) {
                    if (song.Length > 30000) {
                        if (i<MaxSongsPerPost) {
                            post_data.Append ("&a["+i+"]=" + Escape (song.Artist));
                            post_data.Append ("&t["+i+"]=" + Escape (song.Track));
                            post_data.Append ("&i["+i+"]=" + Timestamp (song.StartTime));
                            post_data.Append ("&o["+i+"]=L" + song.TrackAuth);
                            post_data.Append ("&r["+i+"]=");
                            post_data.Append ("&l["+i+"]=" + (int) Math.Round ((double) song.Length / 1000));
                            post_data.Append ("&b["+i+"]=" + Escape (song.Album));
                            post_data.Append ("&n["+i+"]=");
                            post_data.Append ("&m["+i+"]=");
                            i++;
                            } else {
                            break;
                        }
                    }

                }

                FMRequest request = new FMRequest ();
                request.RequestCompleted += new FMRequest.RequestCompletedHandler (OnSubmissionCompleted);
                failed_submitted_songs.Add (request, songs);
                request.DoRequest (submission_url, post_data.ToString ());

                if (i>=MaxSongsPerPost) {
                    Song[] s = new Song[songs.Length-MaxSongsPerPost];
                    songs.CopyTo (s, i);
                    Scrobble (s);
                }
            }
        }
示例#2
0
        private void StationChangeCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                string content;
                int errno;

                content = request.Data.ToString ();
                if (ParseStation (content, out errno) == true) {
                    if (StationChanged != null) {
                        StationChanged (station_location);
                    }
                } else {
                    if (Error != null) {
                        Error (errno);
                    }
                }
            }

            DoOperationFinished ();
        }
示例#3
0
        public void NowPlayingNotification(Song song)
        {
            if (NowPlayingNotificationEnabled) {
                if (Connected) {
                    StringBuilder post_data = new StringBuilder ();

                    post_data.Append ("s=" + session);
                    post_data.Append ("&a=" + Escape (song.Artist));
                    post_data.Append ("&t=" + Escape (song.Track));
                    post_data.Append ("&b=" + Escape (song.Album));
                    post_data.Append ("&l=" + (int) Math.Round ((double) song.Length / 1000));
                    post_data.Append ("&n=");
                    post_data.Append ("&m=");

                    FMRequest request = new FMRequest ();
                    request.RequestCompleted += new FMRequest.RequestCompletedHandler (OnNotificationCompleted);

                    request.DoRequest (now_playing_url, post_data.ToString ());
                }
            }
        }
示例#4
0
        private void MetadataCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                string content;
                Song song = new Song ();

                content = request.Data.ToString ();
                Console.WriteLine (content);
                if (ParseMetadata (content, song) == true) {
                    if (MetadataLoaded != null) {
                        MetadataLoaded (song);
                    }
                }
            }

            DoOperationFinished ();
        }
示例#5
0
 private void SkipCompleted(FMRequest request)
 {
     DoOperationFinished ();
 }
示例#6
0
        private void OnSubmissionCompleted(FMRequest request)
        {
            string[] response = request.Data.ToString ().Split (new Char[] {' '});

            switch (response[0].Trim ().ToLower ()) {
            case "ok":
                failed_submitted_songs.Remove (request);
                Console.WriteLine ("OK: {0}", request.Request.RequestUri.ToString ());
                break;
            case "badsession":
                Reshake ();
                break;
            case "failed":
                // Maybe it't last-exit's fault, better remove it
                //failed_submitted_songs.Remove (request);
                Console.WriteLine (GetErrorMsg (request.PostData,
                                                request.Request.RequestUri.ToString (),
                                                request.Data.ToString ()));
                break;
            default:
                // Maybe it't last-exit's fault, better remove it
                //failed_submitted_songs.Remove (request);

                Console.WriteLine (GetErrorMsg (request.PostData,
                                                request.Request.RequestUri.ToString (),
                                                request.Data.ToString ()));

                if (hard_failures >= 3) {
                    Handshake ();
                } else {
                    hard_failures++;
                }

                break;
            }
        }
示例#7
0
        private void Search(FindStation.SearchType type,
				    string description)
        {
            FMRequest fmr = new FMRequest ();
            string url, base_url;

            base_url = Driver.connection.BaseUrl;
            switch (type) {
            case FindStation.SearchType.SoundsLike:
                url = "http://" + base_url + "/1.0/get.php?resource=artist&document=similar&format=xml&artist=" + description;
                break;

            case FindStation.SearchType.TaggedAs:
                url = "http://" + base_url + "/1.0/tag/" + description + "/search.xml?showtop10=1";
                break;

            case FindStation.SearchType.User:
                url = "http://" + base_url + "/1.0/user/" + description + "/profile.xml";
                break;

            case FindStation.SearchType.Neighbour:
                url = "http://" + base_url + "/1.0/user/" + Driver.connection.Username + "/neighbours.xml";
                break;

            case FindStation.SearchType.Group:
                url = "http://" + base_url + "/1.0/group/" + description + "/weeklychartlist.xml";
                break;

            default:
                url = "";
                break;
            }

            fmr.Closure = (object) type;
            fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (FindStationCompleted);
            fmr.DoRequest (url);

            Driver.connection.DoOperationStarted ();
        }
示例#8
0
 public void GetMetadata()
 {
     FMRequest fmr = new FMRequest ();
     string url = "http://" + base_url + "/" + base_path + "/np.php?session=" + session + "&debug=1";
     fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (MetadataCompleted);
     fmr.DoRequest (url);
     DoOperationStarted ();
 }
示例#9
0
        public void Handshake()
        {
            string handshake_url = "http://ws.audioscrobbler.com/radio/handshake.php?version=" + "1.1.1" + "&platform=" + "linux" + "&username="******"&passwordmd5=" + password + "&language=en&session=324234";
            FMRequest fmr = new FMRequest ();

            fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (HandshakeCompleted);

            fmr.DoRequest (handshake_url);
            DoOperationStarted ();
        }
示例#10
0
文件: User.cs 项目: GNOME/last-exit
        private void GetUserCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                string content;

                content = request.Data.ToString ();
                OnGetUserInfoCompleted (content);
            }

            Driver.connection.DoOperationFinished ();
        }
示例#11
0
        public void ChangeStation(string station)
        {
            FMRequest fmr = new FMRequest ();
            string url = "http://" + base_url + "/" + base_path + "/adjust.php?session=" + session + "&url=" + station + "&lang=en&debug=1";

            Console.WriteLine ("station: " + url);
            fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (StationChangeCompleted);

            fmr.DoRequest (url);
            DoOperationStarted ();
        }
示例#12
0
文件: User.cs 项目: GNOME/last-exit
        public void RequestInfo()
        {
            FMRequest fmr = new FMRequest ();
            string base_url = Driver.connection.BaseUrl;
            string url = "http://" + base_url + "/1.0/user/" + username + "/profile.xml";

            fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (GetUserCompleted);
            fmr.DoRequest (url);

            Driver.connection.DoOperationStarted ();
        }
示例#13
0
        private void GetNewPlaylistCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                ParsePlaylist (request.Data.ToString ());

                Console.WriteLine ("Playlist: Got new playlist");
                getting_playlist = false;

                if (song_requested) {
                    song_requested = false;
                    if (SongReady != null)
                        SongReady (GetNextSong());
                }

                if (NewPlaylistReady != null) {
                    NewPlaylistReady (this);
                }
            }

            connection.DoOperationFinished ();
        }
示例#14
0
 private void GetNewPlaylist()
 {
     Console.WriteLine ("Playlist: New playlist requested");
     if (getting_playlist) {
         Console.WriteLine ("Playlist: Already getting playlist");
     } else {
         getting_playlist = true;
         string url = String.Format ("http://{0}{1}/xspf.php?sk={2}&discovery=0&desktop=1",
                                     connection.BaseUrl,
                                     connection.BasePath,
                                     connection.Session);
         FMRequest fmr = new FMRequest ();
         fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (GetNewPlaylistCompleted);
         fmr.DoRequest (url);
         connection.DoOperationStarted ();
     }
 }
示例#15
0
        private void HandshakeRequestCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                string content;

                content = request.Data.ToString ();
                ParseHandshake (content);

                if (Connected)
                    ScrobbleAll ();
            }
        }
示例#16
0
        public void Love()
        {
            FMRequest fmr = new FMRequest ();
            string url = "http://" + base_url + "/" + base_path + "/control.php?session=" + session + "&command=love&debug=0";

            fmr.RequestCompleted += new FMRequest.RequestCompletedHandler (LoveCompleted);
            fmr.DoRequest (url);
            DoOperationStarted ();
        }
示例#17
0
        private void OnNotificationCompleted(FMRequest request)
        {
            string[] response = request.Data.ToString ().Split (new Char[] {' '});

            switch (response[0].Trim ().ToLower ()) {
            case "ok":
                Console.WriteLine ("OK: {0}", request.Request.RequestUri.ToString ());
                break;
            case "badsession":
                Reshake ();
                break;
            case "failed":
                Console.WriteLine (GetErrorMsg (request.PostData,
                                                request.Request.RequestUri.ToString (),
                                                request.Data.ToString ()));
                break;
            default:
                Console.WriteLine (GetErrorMsg (request.PostData,
                                                request.Request.RequestUri.ToString (),
                                                request.Data.ToString ()));
                break;
            }
        }
示例#18
0
        private void HandshakeCompleted(FMRequest request)
        {
            if (request.Data.Length > 1) {
                string content;

                content = request.Data.ToString ();
                ParseHandshake (content);

                if (ConnectionChanged != null) {
                    ConnectionChanged (connected);
                }

            }
            DoOperationFinished ();
        }
示例#19
0
        public void Handshake()
        {
            connected = false;
            last_handshake = DateTime.Now;

            decimal timestamp = Timestamp ();
            string auth = AuthHash (timestamp);

            string url = BaseUrl + "?hs=true&p=" + ProtocolVersion + "&c=" +
                ClientId + "&v=" + ClientVersion + "&u=" + username +
                    "&t=" + timestamp + "&a=" + auth;

            FMRequest request = new FMRequest ();
            request.RequestCompleted += new FMRequest.RequestCompletedHandler (HandshakeRequestCompleted);
            request.DoRequest (url);
        }
示例#20
0
        private void FindStationCompleted(FMRequest request)
        {
            FindStation.SearchType t = (FindStation.SearchType) request.Closure;
            if (request.Data.Length > 1) {
                string content;

                content = request.Data.ToString ();
                switch (t) {
                case SearchType.SoundsLike:
                    Artist artist = ParseSimilar (content);

                    OnSearchCompleted ((object) artist, t);
                    break;

                case SearchType.TaggedAs:
                    ArrayList tags = ParseTag (content);

                    OnSearchCompleted ((object) tags, t);
                    break;

                case SearchType.FansOf:
                    ArrayList fans = ParseFans (content);

                    OnSearchCompleted ((object) fans, t);
                    break;

                case SearchType.User:

                    break;

                case SearchType.Neighbour:
                    ArrayList neighbours = ParseNeighbours (content);

                    OnSearchCompleted ((object) neighbours, t);
                    break;

                default:
                    break;
                }
            } else {
                Console.WriteLine ("There was an error");
                OnSearchCompleted (null, t);
            }

            Driver.connection.DoOperationFinished ();
        }