diff options
author | Juan A. Suarez Romero <jasuarez@igalia.com> | 2010-02-15 13:13:16 +0100 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2010-02-15 16:58:55 +0100 |
commit | 50818a194de9d14b39d20bb69320a8646965939a (patch) | |
tree | 1cf3125c202a161c80611a681ee8740b6a4023c7 | |
parent | f256adc33a5baf3f1038db19c8d33bd1a8694f56 (diff) | |
download | grilo-plugins-50818a194de9d14b39d20bb69320a8646965939a.tar.gz |
[flickr] Specify items per page
Add methods to tell how many items should be returned by page, and which page
we want.
-rw-r--r-- | src/flickr/gflickr.c | 40 | ||||
-rw-r--r-- | src/flickr/gflickr.h | 3 | ||||
-rw-r--r-- | src/flickr/grl-flickr.c | 1 |
3 files changed, 39 insertions, 5 deletions
diff --git a/src/flickr/gflickr.c b/src/flickr/gflickr.c index 93bf68c..6621940 100644 --- a/src/flickr/gflickr.c +++ b/src/flickr/gflickr.c @@ -2,6 +2,11 @@ #include <libxml/parser.h> #include <gio/gio.h> +#define G_FLICKR_GET_PRIVATE(object) \ + (G_TYPE_INSTANCE_GET_PRIVATE((object), \ + G_FLICKR_TYPE, \ + GFlickrPrivate)) + #define API_KEY "fa037bee8120a921b34f8209d715a2fa" #define AUTH_TOKEN "72157623286932154-c90318d470e96a29" #define AUTH_SECRET "9f6523b9c52e3317" @@ -24,6 +29,8 @@ "&api_sig=%s" \ "&method=" FLICKR_PHOTOS_SEARCH_METHOD \ "&extras=media,date_taken,owner_name,url_o,url_t" \ + "&per_page=%d" \ + "&page=%d" \ "&text=%s" #define FLICKR_PHOTOS_GETINFO \ @@ -43,6 +50,10 @@ typedef struct { gpointer user_data; } GFlickrData; +struct _GFlickrPrivate { + gint per_page; +}; + /* -------------------- GOBJECT -------------------- */ G_DEFINE_TYPE (GFlickr, g_flickr, G_TYPE_OBJECT); @@ -50,11 +61,14 @@ G_DEFINE_TYPE (GFlickr, g_flickr, G_TYPE_OBJECT); static void g_flickr_class_init (GFlickrClass *klass) { + g_type_class_add_private (klass, sizeof (GFlickrPrivate)); } static void g_flickr_init (GFlickr *f) { + f->priv = G_FLICKR_GET_PRIVATE (f); + f->priv->per_page = 100; } GFlickr * @@ -66,7 +80,7 @@ g_flickr_new (void) /* -------------------- PRIVATE API -------------------- */ static gchar * -get_api_sig_photos_search (const gchar *text) { +get_api_sig_photos_search (GFlickr *f, const gchar *text, gint page) { gchar *signature; gchar *text_to_sign; @@ -78,7 +92,12 @@ get_api_sig_photos_search (const gchar *text) { "extrasmedia,date_taken,owner_name,url_o,url_t" "method" FLICKR_PHOTOS_SEARCH_METHOD - "text%s", text); + "page%d" + "per_page%d" + "text%s", + page, + f->priv->per_page, + text); signature = g_compute_checksum_for_string (G_CHECKSUM_MD5, text_to_sign, -1); g_free (text_to_sign); @@ -86,7 +105,7 @@ get_api_sig_photos_search (const gchar *text) { } static gchar * -get_api_sig_photos_getInfo (glong photo_id) +get_api_sig_photos_getInfo (GFlickr *f, glong photo_id) { gchar *signature; gchar *text_to_sign; @@ -275,6 +294,14 @@ read_url_async (const gchar *url, gpointer data) /* -------------------- PUBLIC API -------------------- */ void +g_flickr_set_per_page (GFlickr *f, gint per_page) +{ + g_return_if_fail (G_IS_FLICKR (f)); + + f->priv->per_page = per_page; +} + +void g_flickr_photos_getInfo (GFlickr *f, glong photo_id, GFlickrPhotoCb callback, @@ -282,7 +309,7 @@ g_flickr_photos_getInfo (GFlickr *f, { g_return_if_fail (G_IS_FLICKR (f)); - gchar *api_sig = get_api_sig_photos_getInfo (photo_id); + gchar *api_sig = get_api_sig_photos_getInfo (f, photo_id); /* Build the request */ gchar *request = g_strdup_printf (FLICKR_PHOTOS_GETINFO, @@ -302,16 +329,19 @@ g_flickr_photos_getInfo (GFlickr *f, void g_flickr_photos_search (GFlickr *f, const gchar *text, + gint page, GFlickrPhotoListCb callback, gpointer user_data) { g_return_if_fail (G_IS_FLICKR (f)); - gchar *api_sig = get_api_sig_photos_search (text); + gchar *api_sig = get_api_sig_photos_search (f, text, page); /* Build the request */ gchar *request = g_strdup_printf (FLICKR_PHOTOS_SEARCH, api_sig, + f->priv->per_page, + page, text); g_free (api_sig); diff --git a/src/flickr/gflickr.h b/src/flickr/gflickr.h index 8d143e5..ad051c5 100644 --- a/src/flickr/gflickr.h +++ b/src/flickr/gflickr.h @@ -80,6 +80,8 @@ GType g_flickr_get_type (void); GFlickr *g_flickr_new (void); +void g_flickr_set_per_page (GFlickr *f, gint per_page); + void g_flickr_photos_getInfo (GFlickr *f, glong photo_id, @@ -89,6 +91,7 @@ g_flickr_photos_getInfo (GFlickr *f, void g_flickr_photos_search (GFlickr *f, const gchar *text, + gint page, GFlickrPhotoListCb callback, gpointer user_data); diff --git a/src/flickr/grl-flickr.c b/src/flickr/grl-flickr.c index 99b4e26..cba0b66 100644 --- a/src/flickr/grl-flickr.c +++ b/src/flickr/grl-flickr.c @@ -596,6 +596,7 @@ grl_flickr_source_search (GrlMediaSource *source, { g_flickr_photos_search (GRL_FLICKR_SOURCE (source)->priv->flickr, ss->text, + 1, search_cb, ss); } |