diff options
author | Juan A. Suarez Romero <jasuarez@igalia.com> | 2010-02-19 18:44:49 +0100 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2010-02-19 18:44:49 +0100 |
commit | 77b1f8dc76e5bc9384e069293cdba0cb64c82cc8 (patch) | |
tree | 1157f9a0bd586a6c69d4ef60aa59ac3cc1e2a5fc | |
parent | f217f70b4bf5dceeec6bf73932977afec4a16904 (diff) | |
download | grilo-plugins-77b1f8dc76e5bc9384e069293cdba0cb64c82cc8.tar.gz |
[shoutcast] Implement search operation
-rw-r--r-- | src/shoutcast/grl-shoutcast.c | 56 | ||||
-rw-r--r-- | test/main.c | 3 |
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), |