summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan A. Suarez Romero <jasuarez@igalia.com>2010-02-19 18:44:49 +0100
committerJuan A. Suarez Romero <jasuarez@igalia.com>2010-02-19 18:44:49 +0100
commit77b1f8dc76e5bc9384e069293cdba0cb64c82cc8 (patch)
tree1157f9a0bd586a6c69d4ef60aa59ac3cc1e2a5fc
parentf217f70b4bf5dceeec6bf73932977afec4a16904 (diff)
downloadgrilo-plugins-77b1f8dc76e5bc9384e069293cdba0cb64c82cc8.tar.gz
[shoutcast] Implement search operation
-rw-r--r--src/shoutcast/grl-shoutcast.c56
-rw-r--r--test/main.c3
2 files changed, 55 insertions, 4 deletions
diff --git a/src/shoutcast/grl-shoutcast.c b/src/shoutcast/grl-shoutcast.c
index 05ace7e..29bcebd 100644
--- a/src/shoutcast/grl-shoutcast.c
+++ b/src/shoutcast/grl-shoutcast.c
@@ -44,9 +44,10 @@
#define SHOUTCAST_BASE_ENTRY "http://yp.shoutcast.com"
-#define SHOUTCAST_GET_GENRES SHOUTCAST_BASE_ENTRY "/sbin/newxml.phtml"
-#define SHOUTCAST_GET_RADIOS SHOUTCAST_GET_GENRES "?genre=%s&limit=%d"
-#define SHOUTCAST_TUNE SHOUTCAST_BASE_ENTRY "/sbin/tunein-station.pls?id=%s"
+#define SHOUTCAST_GET_GENRES SHOUTCAST_BASE_ENTRY "/sbin/newxml.phtml"
+#define SHOUTCAST_GET_RADIOS SHOUTCAST_GET_GENRES "?genre=%s&limit=%d"
+#define SHOUTCAST_SEARCH_RADIOS SHOUTCAST_GET_GENRES "?search=%s&limit=%d"
+#define SHOUTCAST_TUNE SHOUTCAST_BASE_ENTRY "/sbin/tunein-station.pls?id=%s"
/* --- Plugin information --- */
@@ -88,6 +89,9 @@ static const GList *grl_shoutcast_source_supported_keys (GrlMetadataSource *sour
static void grl_shoutcast_source_browse (GrlMediaSource *source,
GrlMediaSourceBrowseSpec *bs);
+static void grl_shoutcast_source_search (GrlMediaSource *source,
+ GrlMediaSourceSearchSpec *ss);
+
static void grl_shoutcast_source_cancel (GrlMediaSource *source,
guint operation_id);
@@ -135,6 +139,7 @@ grl_shoutcast_source_class_init (GrlShoutcastSourceClass * klass)
GrlMediaSourceClass *source_class = GRL_MEDIA_SOURCE_CLASS (klass);
GrlMetadataSourceClass *metadata_class = GRL_METADATA_SOURCE_CLASS (klass);
source_class->browse = grl_shoutcast_source_browse;
+ source_class->search = grl_shoutcast_source_search;
source_class->cancel = grl_shoutcast_source_cancel;
metadata_class->supported_keys = grl_shoutcast_source_supported_keys;
}
@@ -462,6 +467,51 @@ grl_shoutcast_source_browse (GrlMediaSource *source,
}
static void
+grl_shoutcast_source_search (GrlMediaSource *source,
+ GrlMediaSourceSearchSpec *ss)
+{
+ GError *error;
+ OperationData *data;
+ gchar *url;
+
+ /* Check if there is text to search */
+ if (!ss->text || ss->text[0] == '\0') {
+ error = g_error_new (GRL_ERROR,
+ GRL_ERROR_SEARCH_FAILED,
+ "Search text not specified");
+ ss->callback (ss->source,
+ ss->search_id,
+ NULL,
+ 0,
+ ss->user_data,
+ error);
+
+ g_error_free (error);
+ return;
+ }
+
+ data = g_new0 (OperationData, 1);
+ data->source = source;
+ data->operation_id = ss->search_id;
+ data->callback = ss->callback;
+ data->skip = ss->skip;
+ data->count = ss->count;
+ data->user_data = ss->user_data;
+ data->error_code = GRL_ERROR_SEARCH_FAILED;
+ data->genre = g_strdup ("");
+
+ grl_media_source_set_operation_data (source, ss->search_id, data);
+
+ url = g_strdup_printf (SHOUTCAST_SEARCH_RADIOS,
+ ss->text,
+ ss->skip + ss->count);
+
+ read_url_async (url, data);
+
+ g_free (url);
+}
+
+static void
grl_shoutcast_source_cancel (GrlMediaSource *source, guint operation_id)
{
OperationData *op_data;
diff --git a/test/main.c b/test/main.c
index 06f0148..eac595e 100644
--- a/test/main.c
+++ b/test/main.c
@@ -290,7 +290,8 @@ main (void)
if (0) grl_media_source_query (jamendo, "track=asylum mind", keys, 0, 5, GRL_RESOLVE_FAST_ONLY, browse_cb, NULL);
if (0) grl_media_source_search (jamendo, "next", keys, 0, 5, GRL_RESOLVE_FAST_ONLY, browse_cb, NULL);
if (0) grl_media_source_browse (shoutcast, NULL, keys, 0, 5, GRL_RESOLVE_IDLE_RELAY , browse_cb, NULL);
- if (1) grl_media_source_browse (shoutcast, media_from_id("American"), keys, 2, 5, GRL_RESOLVE_IDLE_RELAY , browse_cb, NULL);
+ if (0) grl_media_source_browse (shoutcast, media_from_id("American"), keys, 2, 5, GRL_RESOLVE_IDLE_RELAY , browse_cb, NULL);
+ if (1) grl_media_source_search (shoutcast, "Roxette", keys, 0, 5, GRL_RESOLVE_FAST_ONLY, browse_cb, NULL);
if (0) {
GrlContentMedia *media = media_from_id ("test");
grl_content_set_string (GRL_CONTENT (media),