summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-06-10 16:03:48 +0200
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-06-10 16:03:48 +0200
commit5fe5692d82882a4583d56b7fc4a3ca767ba63c37 (patch)
tree6a939bb41016e5924134930427e6e6a0916580b7
parent6b2b45be409e81575e2f99bbf0677ba209b2e62d (diff)
downloadxine-lib-5fe5692d82882a4583d56b7fc4a3ca767ba63c37.tar.gz
xine-lib-5fe5692d82882a4583d56b7fc4a3ca767ba63c37.tar.bz2
Check for last.fm streaming server, and if that's the case, check for the SYNC string in the read data; if found, send a XINE_EVENT_UI_CHANNELS_CHANGED event, so that the frontend can go read the new metadata.
-rw-r--r--ChangeLog2
-rw-r--r--src/input/input_http.c27
2 files changed, 29 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e0274915..2acd3e45e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,8 @@ xine-lib (1.1.90) (Unreleased)
will not be present in KDE 4.
* Convert the FAQ and the Hacker's Guide from DocBook SGML to DocBook 4.4
XML, and the figures from fig files to SVG files.
+ * Send a channel changed event to the frontend when receiving the SYNC
+ string from last.fm streaming server.
xine-lib (1.1.7)
* Support libdca (new name for libdts) by shuffling around the dts.h file.
diff --git a/src/input/input_http.c b/src/input/input_http.c
index 3db5af002..ea1f93347 100644
--- a/src/input/input_http.c
+++ b/src/input/input_http.c
@@ -64,6 +64,7 @@
#define TAG_ICY_NOTICE2 "icy-notice2:"
#define TAG_ICY_METAINT "icy-metaint:"
#define TAG_CONTENT_TYPE "Content-Type:"
+#define TAG_LASTFM_SERVER "Server: last.fm Streaming Server"
typedef struct {
input_plugin_t input_plugin;
@@ -99,6 +100,9 @@ typedef struct {
/* NSV */
unsigned char is_nsv; /* bool */
+ /* Last.FM streaming server */
+ unsigned char is_lastfm;
+
/* ShoutCast */
unsigned char shoutcast_mode; /* bool */
int shoutcast_metaint;
@@ -385,6 +389,25 @@ static off_t http_plugin_read_int (http_input_plugin_t *this,
if (nlen < 0)
goto error;
+ /* Identify SYNC string for last.fm, this is limited to last.fm
+ * streaming servers to avoid hitting on tracks metadata for other
+ * servers.
+ */
+ if ( this->is_lastfm &&
+ memmem(&buf[read_bytes], nlen, "SYNC", 4) != NULL ) {
+ /* Tell frontend to update the UI */
+ const xine_event_t event = {
+ .type = XINE_EVENT_UI_CHANNELS_CHANGED,
+ .stream = this->stream,
+ .data = NULL,
+ .data_length = 0
+ };
+
+ lprintf("SYNC from last.fm server received\n");
+
+ xine_event_send(this->stream, &event);
+ }
+
this->shoutcast_pos += nlen;
}
@@ -919,6 +942,10 @@ static int http_plugin_open (input_plugin_t *this_gen ) {
this->is_nsv = 1;
}
}
+ if ( !strncasecmp(this->buf, TAG_LASTFM_SERVER, sizeof(TAG_LASTFM_SERVER)-1) ) {
+ lprintf("last.fm streaming server detected\n");
+ this->is_lastfm = 1;
+ }
}
if (len == -1)