[gthumb: 13/22] [picasaweb] upload the photos metadata as well
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb: 13/22] [picasaweb] upload the photos metadata as well
- Date: Sat, 30 Jan 2010 23:20:21 +0000 (UTC)
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]