[gthumb] flickr importer: use the biggest size available if the original is not present
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] flickr importer: use the biggest size available if the original is not present
- Date: Sun, 11 Sep 2011 14:31:59 +0000 (UTC)
commit 74867797fc45ae5c1927d488b541ac495f560eb6
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Sep 11 12:06:44 2011 +0200
flickr importer: use the biggest size available if the original is not present
extensions/flicker/actions.c | 2 +
extensions/flicker/dlg-import-from-flickr.c | 16 ++--
extensions/flicker/flickr-connection.c | 2 +-
extensions/flicker/flickr-photo.c | 162 +++++++++++++++++----------
extensions/flicker/flickr-photo.h | 34 ++++---
extensions/flicker/flickr-types.h | 1 +
extensions/importer/gth-import-task.c | 2 +-
7 files changed, 137 insertions(+), 82 deletions(-)
---
diff --git a/extensions/flicker/actions.c b/extensions/flicker/actions.c
index b7eac0e..356fb3b 100644
--- a/extensions/flicker/actions.c
+++ b/extensions/flicker/actions.c
@@ -34,6 +34,7 @@ static FlickrServer www_flickr_com = {
"http://www.flickr.com/services/auth/",
"http://api.flickr.com/services/rest",
"http://api.flickr.com/services/upload/",
+ "static.flickr.com",
"8960706ee7f4151e893b11837e9c24ce",
"1ff8d1e45c873423",
FALSE
@@ -46,6 +47,7 @@ static FlickrServer www_23hq_com = {
"http://www.23hq.com/services/auth/",
"http://www.23hq.com/services/rest",
"http://www.23hq.com/services/upload/",
+ "www.23hq.com",
"8960706ee7f4151e893b11837e9c24ce",
"1ff8d1e45c873423",
TRUE
diff --git a/extensions/flicker/dlg-import-from-flickr.c b/extensions/flicker/dlg-import-from-flickr.c
index fb6c7e9..7e75134 100644
--- a/extensions/flicker/dlg-import-from-flickr.c
+++ b/extensions/flicker/dlg-import-from-flickr.c
@@ -365,10 +365,10 @@ list_photos_ready_cb (GObject *source_object,
FlickrPhoto *photo = scan->data;
GthFileData *file_data;
- if (photo->url_o == NULL)
+ if (photo->url[FLICKR_URL_O] == NULL)
continue;
- file_data = gth_file_data_new_for_uri (photo->url_o, (photo->mime_type != NULL) ? photo->mime_type : "image/jpeg");
+ file_data = gth_file_data_new_for_uri (photo->url[FLICKR_URL_O], (photo->mime_type != NULL) ? photo->mime_type : "image/jpeg");
g_file_info_set_file_type (file_data->info, G_FILE_TYPE_REGULAR);
g_file_info_set_size (file_data->info, FAKE_SIZE); /* set a fake size to make the progress dialog work correctly */
g_file_info_set_attribute_object (file_data->info, "flickr::object", G_OBJECT (photo));
@@ -406,7 +406,7 @@ photoset_combobox_changed_cb (GtkComboBox *widget,
gth_task_dialog (GTH_TASK (data->conn), FALSE, NULL);
flickr_service_list_photos (data->service,
data->photoset,
- "original_format, url_sq, url_t, url_s, url_m, url_o",
+ "original_format, url_sq, url_t, url_s, url_m, url_z, url_b, url_o",
data->cancellable,
list_photos_ready_cb,
data);
@@ -430,16 +430,16 @@ flickr_thumbnail_loader (GthFileData *file_data,
photo = (FlickrPhoto *) g_file_info_get_attribute_object (file_data->info, "flickr::object");
requested_size = gth_thumb_loader_get_requested_size (thumb_loader);
if (requested_size == FLICKR_SIZE_SMALL_SQUARE)
- uri = photo->url_sq;
+ uri = photo->url[FLICKR_URL_SQ];
else if (requested_size == FLICKR_SIZE_THUMBNAIL)
- uri = photo->url_t;
+ uri = photo->url[FLICKR_URL_T];
else if (requested_size == FLICKR_SIZE_SMALL)
- uri = photo->url_s;
+ uri = photo->url[FLICKR_URL_S];
else if (requested_size == FLICKR_SIZE_MEDIUM)
- uri = photo->url_m;
+ uri = photo->url[FLICKR_URL_M];
if (uri == NULL)
- uri = photo->url_o;
+ uri = photo->url[FLICKR_URL_O];
if (uri != NULL) {
GFile *file;
diff --git a/extensions/flicker/flickr-connection.c b/extensions/flicker/flickr-connection.c
index d2a5c63..c85b8b2 100644
--- a/extensions/flicker/flickr-connection.c
+++ b/extensions/flicker/flickr-connection.c
@@ -27,7 +27,7 @@
#include "flickr-user.h"
-#undef DEBUG_FLICKR_CONNECTION
+#define DEBUG_FLICKR_CONNECTION 1
GQuark
diff --git a/extensions/flicker/flickr-photo.c b/extensions/flicker/flickr-photo.c
index d1849d6..6fa8ffc 100644
--- a/extensions/flicker/flickr-photo.c
+++ b/extensions/flicker/flickr-photo.c
@@ -26,6 +26,17 @@
#include "flickr-photo.h"
+char *FlickrUrlSuffix[] = {
+ "_sq",
+ "_s",
+ "_t",
+ "_m",
+ "_z",
+ "_b",
+ "_o"
+};
+
+
struct _FlickrPhotoPrivate {
FlickrServer *server;
};
@@ -38,13 +49,19 @@ static void
flickr_photo_finalize (GObject *obj)
{
FlickrPhoto *self;
+ int i;
self = FLICKR_PHOTO (obj);
g_free (self->id);
g_free (self->secret);
g_free (self->server);
+ g_free (self->farm);
g_free (self->title);
+ for (i = 0; i < FLICKR_URLS; i++)
+ g_free (self->url[i]);
+ g_free (self->original_format);
+ g_free (self->mime_type);
G_OBJECT_CLASS (flickr_photo_parent_class)->finalize (obj);
}
@@ -61,7 +78,7 @@ flickr_photo_class_init (FlickrPhotoClass *klass)
static DomElement*
flickr_photo_create_element (DomDomizable *base,
- DomDocument *doc)
+ DomDocument *doc)
{
FlickrPhoto *self;
DomElement *element;
@@ -98,13 +115,19 @@ flickr_photo_load_from_element (DomDomizable *base,
flickr_photo_set_id (self, dom_element_get_attribute (element, "id"));
flickr_photo_set_secret (self, dom_element_get_attribute (element, "secret"));
flickr_photo_set_server (self, dom_element_get_attribute (element, "server"));
+ flickr_photo_set_farm (self, dom_element_get_attribute (element, "farm"));
flickr_photo_set_title (self, dom_element_get_attribute (element, "title"));
flickr_photo_set_is_primary (self, dom_element_get_attribute (element, "isprimary"));
- flickr_photo_set_url_sq (self, dom_element_get_attribute (element, "url_sq"));
- flickr_photo_set_url_t (self, dom_element_get_attribute (element, "url_t"));
- flickr_photo_set_url_s (self, dom_element_get_attribute (element, "url_s"));
- flickr_photo_set_url_m (self, dom_element_get_attribute (element, "url_m"));
- flickr_photo_set_url_o (self, dom_element_get_attribute (element, "url_o"));
+ flickr_photo_set_original_format (self, dom_element_get_attribute (element, "originalformat"));
+ flickr_photo_set_original_secret (self, dom_element_get_attribute (element, "originalsecret"));
+
+ flickr_photo_set_url (self, FLICKR_URL_SQ, dom_element_get_attribute (element, "url_sq"));
+ flickr_photo_set_url (self, FLICKR_URL_S, dom_element_get_attribute (element, "url_s"));
+ flickr_photo_set_url (self, FLICKR_URL_T, dom_element_get_attribute (element, "url_t"));
+ flickr_photo_set_url (self, FLICKR_URL_M, dom_element_get_attribute (element, "url_m"));
+ flickr_photo_set_url (self, FLICKR_URL_Z, dom_element_get_attribute (element, "url_z"));
+ flickr_photo_set_url (self, FLICKR_URL_B, dom_element_get_attribute (element, "url_b"));
+ flickr_photo_set_url (self, FLICKR_URL_O, dom_element_get_attribute (element, "url_o"));
}
@@ -119,8 +142,20 @@ flickr_photo_dom_domizable_interface_init (DomDomizableIface *iface)
static void
flickr_photo_instance_init (FlickrPhoto *self)
{
+ int i;
+
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, FLICKR_TYPE_PHOTO, FlickrPhotoPrivate);
self->priv->server = NULL;
+
+ self->id = NULL;
+ self->secret = NULL;
+ self->server = NULL;
+ self->farm = NULL;
+ self->title = NULL;
+ for (i = 0; i < FLICKR_URLS; i++)
+ self->url[i] = NULL;
+ self->original_format = NULL;
+ self->mime_type = NULL;
}
@@ -196,6 +231,14 @@ flickr_photo_set_server (FlickrPhoto *self,
void
+flickr_photo_set_farm (FlickrPhoto *self,
+ const char *value)
+{
+ _g_strset (&self->farm, value);
+}
+
+
+void
flickr_photo_set_title (FlickrPhoto *self,
const char *value)
{
@@ -213,70 +256,65 @@ flickr_photo_set_is_primary (FlickrPhoto *self,
static char *
flickr_get_static_url (FlickrPhoto *self,
- const char *subtype)
+ FlickrUrl size)
{
- if ((self->priv->server != NULL) && self->priv->server->automatic_urls)
- return g_strdup_printf ("%s/%s/%s_%s%s.jpg", self->priv->server->url, self->server, self->id, self->secret, subtype);
- else
- return NULL;
-}
+ const char *ext;
+ const char *secret;
-void
-flickr_photo_set_url_sq (FlickrPhoto *self,
- const char *value)
-{
- _g_strset (&self->url_sq, value);
- if (self->url_sq == NULL)
- self->url_sq = flickr_get_static_url (self, "_sq");
-}
-
-
-void
-flickr_photo_set_url_t (FlickrPhoto *self,
- const char *value)
-{
- _g_strset (&self->url_t, value);
- if (self->url_t == NULL)
- self->url_t = flickr_get_static_url (self, "_t");
-}
+ if ((self->priv->server == NULL) || ! self->priv->server->automatic_urls)
+ return NULL;
+ secret = self->secret;
+ if (size == FLICKR_URL_O) {
+ if (self->original_secret != NULL)
+ secret = self->original_secret;
+ }
-void
-flickr_photo_set_url_s (FlickrPhoto *self,
- const char *value)
-{
- _g_strset (&self->url_s, value);
- if (self->url_s == NULL)
- self->url_s = flickr_get_static_url (self, "_s");
-}
+ ext = "jpg";
+ if (size == FLICKR_URL_O) {
+ if (self->original_format != NULL)
+ ext = self->original_format;
+ }
+ if (self->farm != NULL)
+ return g_strdup_printf ("http://farm%s.%s/%s/%s_%s%s.%s",
+ self->farm,
+ self->priv->server->static_url,
+ self->server,
+ self->id,
+ secret,
+ FlickrUrlSuffix[size],
+ ext);
-void
-flickr_photo_set_url_m (FlickrPhoto *self,
- const char *value)
-{
- _g_strset (&self->url_m, value);
- if (self->url_m == NULL)
- self->url_m = flickr_get_static_url (self, "_m");
+ else
+ return g_strdup_printf ("http://%s/%s/%s_%s%s.%s",
+ self->priv->server->static_url,
+ self->server,
+ self->id,
+ secret,
+ FlickrUrlSuffix[size],
+ ext);
}
void
-flickr_photo_set_url_o (FlickrPhoto *self,
- const char *value)
+flickr_photo_set_url (FlickrPhoto *self,
+ FlickrUrl size,
+ const char *value)
{
- _g_strset (&self->url_o, value);
- if (self->url_o == NULL)
- self->url_o = flickr_get_static_url (self, "");
-
- if (self->url_o == NULL) {
- if (self->url_m != NULL)
- _g_strset (&self->url_o, self->url_m);
- else if (self->url_s != NULL)
- _g_strset (&self->url_o, self->url_s);
- else if (self->url_sq != NULL)
- _g_strset (&self->url_o, self->url_sq);
+ _g_strset (&(self->url[size]), value);
+ if (self->url[size] == NULL)
+ self->url[size] = flickr_get_static_url (self, size);
+
+ if ((size == FLICKR_URL_O) && (self->url[size] == NULL)) {
+ int other_size;
+ for (other_size = FLICKR_URL_O - 1; other_size >= 0; other_size--) {
+ if (self->url[other_size] != NULL) {
+ _g_strset (&(self->url[size]), self->url[other_size]);
+ break;
+ }
+ }
}
}
@@ -292,3 +330,11 @@ flickr_photo_set_original_format (FlickrPhoto *self,
if (self->original_format != NULL)
self->mime_type = g_strconcat ("image/", self->original_format, NULL);
}
+
+
+void
+flickr_photo_set_original_secret (FlickrPhoto *self,
+ const char *value)
+{
+ _g_strset (&self->original_secret, value);
+}
diff --git a/extensions/flicker/flickr-photo.h b/extensions/flicker/flickr-photo.h
index abaa210..c9e71a7 100644
--- a/extensions/flicker/flickr-photo.h
+++ b/extensions/flicker/flickr-photo.h
@@ -28,6 +28,17 @@
G_BEGIN_DECLS
+typedef enum {
+ FLICKR_URL_SQ,
+ FLICKR_URL_T,
+ FLICKR_URL_S,
+ FLICKR_URL_M,
+ FLICKR_URL_Z,
+ FLICKR_URL_B,
+ FLICKR_URL_O,
+ FLICKR_URLS
+} FlickrUrl;
+
#define FLICKR_TYPE_PHOTO (flickr_photo_get_type ())
#define FLICKR_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLICKR_TYPE_PHOTO, FlickrPhoto))
#define FLICKR_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FLICKR_TYPE_PHOTO, FlickrPhotoClass))
@@ -46,14 +57,12 @@ struct _FlickrPhoto {
char *id;
char *secret;
char *server;
+ char *farm;
char *title;
gboolean is_primary;
- char *url_sq;
- char *url_t;
- char *url_s;
- char *url_m;
- char *url_o;
+ char *url[FLICKR_URLS];
char *original_format;
+ char *original_secret;
char *mime_type;
int position;
};
@@ -70,22 +79,19 @@ void flickr_photo_set_secret (FlickrPhoto *self,
const char *value);
void flickr_photo_set_server (FlickrPhoto *self,
const char *value);
+void flickr_photo_set_farm (FlickrPhoto *self,
+ const char *value);
void flickr_photo_set_title (FlickrPhoto *self,
const char *value);
void flickr_photo_set_is_primary (FlickrPhoto *self,
const char *value);
-void flickr_photo_set_url_sq (FlickrPhoto *self,
- const char *value);
-void flickr_photo_set_url_t (FlickrPhoto *self,
- const char *value);
-void flickr_photo_set_url_s (FlickrPhoto *self,
- const char *value);
-void flickr_photo_set_url_m (FlickrPhoto *self,
- const char *value);
-void flickr_photo_set_url_o (FlickrPhoto *self,
+void flickr_photo_set_url (FlickrPhoto *self,
+ FlickrUrl size,
const char *value);
void flickr_photo_set_original_format (FlickrPhoto *self,
const char *value);
+void flickr_photo_set_original_secret (FlickrPhoto *self,
+ const char *value);
G_END_DECLS
diff --git a/extensions/flicker/flickr-types.h b/extensions/flicker/flickr-types.h
index 76177c7..a20bbbf 100644
--- a/extensions/flicker/flickr-types.h
+++ b/extensions/flicker/flickr-types.h
@@ -53,6 +53,7 @@ typedef struct {
const char *authentication_url;
const char *rest_url;
const char *upload_url;
+ const char *static_url;
const char *api_key;
const char *shared_secret;
gboolean automatic_urls;
diff --git a/extensions/importer/gth-import-task.c b/extensions/importer/gth-import-task.c
index 046e8bf..9d9aba8 100644
--- a/extensions/importer/gth-import-task.c
+++ b/extensions/importer/gth-import-task.c
@@ -442,7 +442,7 @@ copy_non_image_progress_cb (goffset current_num_bytes,
_("Importing files"),
g_file_info_get_display_name (file_data->info),
FALSE,
- (double) (self->priv->copied_size + current_num_bytes) / self->priv->tot_size);
+ CLAMP ((double) (self->priv->copied_size + current_num_bytes) / self->priv->tot_size, 0.0, 1.0));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]