[gthumb] flickr importer: use the biggest size available if the original is not present



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]