[gthumb: 13/22] [picasaweb] upload the photos metadata as well



commit ab265f83a377b00b1a057fe799de65cb19f7b1da
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Thu Jan 28 00:13:50 2010 +0100

    [picasaweb] upload the photos metadata as well

 extensions/exiv2/gth-metadata-provider-exiv2.c     |    2 +-
 extensions/picasaweb/dlg-export-to-picasaweb.c     |   13 +++-
 extensions/picasaweb/google-connection.c           |    2 +-
 .../picasaweb/picasa-account-properties-dialog.c   |    2 +-
 extensions/picasaweb/picasa-web-service.c          |   69 ++++++++++++++++----
 extensions/picasaweb/picasa-web-service.h          |    2 +-
 6 files changed, 72 insertions(+), 18 deletions(-)
---
diff --git a/extensions/exiv2/gth-metadata-provider-exiv2.c b/extensions/exiv2/gth-metadata-provider-exiv2.c
index 5b4cc0d..0e1c995 100644
--- a/extensions/exiv2/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2/gth-metadata-provider-exiv2.c
@@ -148,7 +148,7 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider *self,
 		char        *raw;
 
 		meta = gth_metadata_new ();
-		raw = gth_file_data_get_attribute_as_string (file_data, "general::tags");
+		raw = gth_string_list_join (GTH_STRING_LIST (metadata), ", ");
 		g_object_set (meta, "id", "general::tags", "raw", raw, NULL);
 
 		g_file_info_set_attribute_object (file_data->info, "Xmp::iptc::Keywords", G_OBJECT (meta));
diff --git a/extensions/picasaweb/dlg-export-to-picasaweb.c b/extensions/picasaweb/dlg-export-to-picasaweb.c
index f86c226..dda2d22 100644
--- a/extensions/picasaweb/dlg-export-to-picasaweb.c
+++ b/extensions/picasaweb/dlg-export-to-picasaweb.c
@@ -58,6 +58,7 @@ enum {
 
 typedef struct {
 	GthBrowser       *browser;
+	GthFileData      *location;
 	GList            *file_list;
 	GtkBuilder       *builder;
 	GtkWidget        *dialog;
@@ -92,6 +93,7 @@ export_dialog_destroy_cb (GtkWidget  *widget,
 	_g_string_list_free (data->accounts);
 	_g_object_unref (data->builder);
 	_g_object_list_unref (data->file_list);
+	_g_object_unref (data->location);
 	g_free (data);
 }
 
@@ -142,6 +144,7 @@ export_dialog_response_cb (GtkDialog *dialog,
 			GtkTreeModel   *tree_model;
 			GtkTreeIter     iter;
 			PicasaWebAlbum *album;
+			GList          *file_list;
 
 			if (! gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (GET_WIDGET ("albums_treeview"))), &tree_model, &iter)) {
 				gtk_widget_set_sensitive (GET_WIDGET ("upload_button"), FALSE);
@@ -153,13 +156,16 @@ export_dialog_response_cb (GtkDialog *dialog,
 					    -1);
 
 			gth_task_dialog (GTH_TASK (data->conn), FALSE);
+
+			file_list = gth_file_data_list_to_file_list (data->file_list);
 			picasa_web_service_post_photos (data->picasaweb,
 							album,
-							data->file_list,
+							file_list,
 							data->cancellable,
 							post_photos_ready_cb,
 							data);
 
+			_g_object_list_unref (file_list);
 			g_object_unref (album);
 		}
 		break;
@@ -629,7 +635,9 @@ add_album_button_clicked_cb (GtkButton *button,
 	DialogData *data = user_data;
 	GtkWidget  *dialog;
 
-	dialog = picasa_album_properties_dialog_new (NULL, NULL, PICASA_WEB_ACCESS_PUBLIC);  /* FIXME: use the current catalog/folder name as default value */
+	dialog = picasa_album_properties_dialog_new (g_file_info_get_display_name (data->location->info),
+						     NULL,
+						     PICASA_WEB_ACCESS_PUBLIC);
 	g_signal_connect (dialog,
 			  "response",
 			  G_CALLBACK (new_album_dialog_response_cb),
@@ -781,6 +789,7 @@ dlg_export_to_picasaweb (GthBrowser *browser,
 
 	data = g_new0 (DialogData, 1);
 	data->browser = browser;
+	data->location = gth_file_data_dup (gth_browser_get_location_data (browser));
 	data->builder = _gtk_builder_new_from_file ("export-to-picasaweb.ui", "picasaweb");
 	data->dialog = _gtk_builder_get_widget (data->builder, "export_dialog");
 	data->cancellable = g_cancellable_new ();
diff --git a/extensions/picasaweb/google-connection.c b/extensions/picasaweb/google-connection.c
index d3c8e06..7e449ff 100644
--- a/extensions/picasaweb/google-connection.c
+++ b/extensions/picasaweb/google-connection.c
@@ -27,7 +27,7 @@
 #include "google-connection.h"
 
 
-#define SOUP_LOG_LEVEL SOUP_LOGGER_LOG_BODY /* FIXME: set to SOUP_LOGGER_LOG_NONE when done */
+#define SOUP_LOG_LEVEL SOUP_LOGGER_LOG_NONE
 #define GTHUMB_SOURCE ("GNOME-" PACKAGE "-" VERSION)
 
 
diff --git a/extensions/picasaweb/picasa-account-properties-dialog.c b/extensions/picasaweb/picasa-account-properties-dialog.c
index 2d959ef..0922695 100644
--- a/extensions/picasaweb/picasa-account-properties-dialog.c
+++ b/extensions/picasaweb/picasa-account-properties-dialog.c
@@ -131,7 +131,7 @@ image_buffer_ready_cb (void     *buffer,
 	GdkPixbuf                  *pixbuf;
 
 	if (error != NULL) {
-		/* FIXME: show the error dialog */
+		_gtk_error_dialog_from_gerror_show (GTK_WINDOW (self), _("Could not load the file"), &error);
 		return;
 	}
 
diff --git a/extensions/picasaweb/picasa-web-service.c b/extensions/picasaweb/picasa-web-service.c
index e1badf0..5e8ef91 100644
--- a/extensions/picasaweb/picasa-web-service.c
+++ b/extensions/picasaweb/picasa-web-service.c
@@ -417,7 +417,8 @@ post_photo_file_buffer_ready_cb (void     *buffer,
 	GthFileData        *file_data;
 	SoupMultipart      *multipart;
 	const char         *filename;
-	char               *summary;
+	char               *value;
+	GObject            *metadata;
 	DomDocument        *doc;
 	DomElement         *entry;
 	char               *entry_buffer;
@@ -438,19 +439,42 @@ post_photo_file_buffer_ready_cb (void     *buffer,
 
 	/* the metadata part */
 
-	filename = g_file_info_get_display_name (file_data->info);
-	summary = gth_file_data_get_attribute_as_string (file_data, "general::description");
-	if (summary == NULL)
-		summary = gth_file_data_get_attribute_as_string (file_data, "general::title");
-
 	doc = dom_document_new ();
 	entry = dom_document_create_element (doc, "entry",
 					     "xmlns", "http://www.w3.org/2005/Atom";,
+					     "xmlns:gphoto", "http://schemas.google.com/photos/2007";,
+					     "xmlns:media", "http://search.yahoo.com/mrss/";,
 					     NULL);
+
+	filename = g_file_info_get_display_name (file_data->info);
 	dom_element_append_child (entry,
 				  dom_document_create_element_with_text (doc, filename, "title", NULL));
+
+	value = gth_file_data_get_attribute_as_string (file_data, "general::description");
+	if (value == NULL)
+		value = gth_file_data_get_attribute_as_string (file_data, "general::title");
 	dom_element_append_child (entry,
-				  dom_document_create_element_with_text (doc, summary, "summary", NULL));
+				  dom_document_create_element_with_text (doc, value, "summary", NULL));
+
+	value = gth_file_data_get_attribute_as_string (file_data, "general::location");
+	if (value != NULL)
+		dom_element_append_child (entry,
+					  dom_document_create_element_with_text (doc, value, "gphoto:location", NULL));
+
+	metadata = g_file_info_get_attribute_object (file_data->info, "general::tags");
+	if ((metadata != NULL) && GTH_IS_STRING_LIST (metadata))
+		value = gth_string_list_join (GTH_STRING_LIST (metadata), ", ");
+	if (value != NULL) {
+		DomElement *group;
+
+		group = dom_document_create_element (doc, "media:group", NULL);
+		dom_element_append_child (group,
+					  dom_document_create_element_with_text (doc, value, "media:keywords", NULL));
+		dom_element_append_child (entry, group);
+
+		g_free (value);
+	}
+
 	dom_element_append_child (entry,
 				  dom_document_create_element (doc, "category",
 							       "scheme", "http://schemas.google.com/g/2005#kind";,
@@ -467,7 +491,6 @@ post_photo_file_buffer_ready_cb (void     *buffer,
 	soup_buffer_free (body);
 	soup_message_headers_free (headers);
 	g_object_unref (doc);
-	g_free (summary);
 
 	/* the file part */
 
@@ -526,10 +549,28 @@ picasa_wev_service_post_current_file (PicasaWebService *self)
 }
 
 
+static void
+post_photos_info_ready_cb (GList    *files,
+		           GError   *error,
+		           gpointer  user_data)
+{
+	PicasaWebService *self = user_data;
+
+	if (error != NULL) {
+		post_photos_done (self, error);
+		return;
+	}
+
+	self->priv->post_photos->file_list = _g_object_list_ref (files);
+	self->priv->post_photos->current = self->priv->post_photos->file_list;
+	picasa_wev_service_post_current_file (self);
+}
+
+
 void
 picasa_web_service_post_photos (PicasaWebService    *self,
 			        PicasaWebAlbum      *album,
-			        GList               *file_list, /* GthFileData list */
+			        GList               *file_list, /* GFile list */
 			        GCancellable        *cancellable,
 			        GAsyncReadyCallback  callback,
 			        gpointer             user_data)
@@ -543,7 +584,6 @@ picasa_web_service_post_photos (PicasaWebService    *self,
 
 	self->priv->post_photos = g_new0 (PostPhotosData, 1);
 	self->priv->post_photos->album = g_object_ref (album);
-	self->priv->post_photos->file_list = _g_object_list_ref (file_list);
 	self->priv->post_photos->cancellable = _g_object_ref (cancellable);
 	self->priv->post_photos->callback = callback;
 	self->priv->post_photos->user_data = user_data;
@@ -556,8 +596,13 @@ picasa_web_service_post_photos (PicasaWebService    *self,
 		self->priv->post_photos->n_files += 1;
 	}
 
-	self->priv->post_photos->current = self->priv->post_photos->file_list;
-	picasa_wev_service_post_current_file (self);
+	_g_query_all_metadata_async (file_list,
+				     FALSE,
+				     TRUE,
+				     "*",
+				     self->priv->post_photos->cancellable,
+				     post_photos_info_ready_cb,
+				     self);
 }
 
 
diff --git a/extensions/picasaweb/picasa-web-service.h b/extensions/picasaweb/picasa-web-service.h
index 82c96e5..231fb94 100644
--- a/extensions/picasaweb/picasa-web-service.h
+++ b/extensions/picasaweb/picasa-web-service.h
@@ -71,7 +71,7 @@ PicasaWebAlbum *     picasa_web_service_create_album_finish (PicasaWebService
 							     GError              **error);
 void                 picasa_web_service_post_photos         (PicasaWebService     *self,
 							     PicasaWebAlbum       *album,
-							     GList                *file_list, /* GthFileData list */
+							     GList                *file_list, /* GFile list */
 							     GCancellable         *cancellable,
 							     GAsyncReadyCallback   callback,
 							     gpointer              user_data);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]