Author: akv
Date: 2010-06-02 00:33:30 +0200 (Wed, 02 Jun 2010)
New Revision: 3416

Modified:
   trunk/plugins/output-picasa/output-picasa.c
   trunk/plugins/output-picasa/rs-picasa-client.c
   trunk/plugins/output-picasa/rs-picasa-client.h
Log:
Catching 404 errors when uploading photo - more work needed to catch more 
errors.

Modified: trunk/plugins/output-picasa/output-picasa.c
===================================================================
--- trunk/plugins/output-picasa/output-picasa.c 2010-06-01 18:30:50 UTC (rev 
3415)
+++ trunk/plugins/output-picasa/output-picasa.c 2010-06-01 22:33:30 UTC (rev 
3416)
@@ -159,6 +159,32 @@
         gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo), rend, "text", 
col);
 }
 
+static gboolean
+deal_with_error(GError **error)
+{
+       if (!*error)
+               return FALSE;
+       
+       g_warning("Error from Picasa: '%s'", (*error)->message);
+
+       gdk_threads_enter();
+       GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, 
GTK_BUTTONS_CLOSE,
+               "Error: '%s'", (*error)->message);
+
+       gtk_window_set_title(GTK_WINDOW(dialog), _("Unhandled error from 
Picasa"));
+       gtk_dialog_set_default_response (GTK_DIALOG (dialog), 
GTK_RESPONSE_CLOSE);
+
+       g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), 
NULL);
+
+       gtk_widget_show (dialog);
+
+       gdk_threads_leave();
+
+       g_clear_error(error);
+
+       return TRUE;
+}
+
 static void
 album_set_active(GtkComboBox *combo, gchar *aid)
 {
@@ -267,6 +293,7 @@
 static gboolean
 execute (RSOutput * output, RSFilter * filter)
 {
+       GError *error = NULL;
        RSPicasa *picasa = RS_PICASA (output);
        RSOutput *jpegsave = rs_output_new ("RSJpegfile");
 
@@ -278,12 +305,12 @@
        rs_output_execute (jpegsave, filter);
        g_object_unref (jpegsave);
 
-       gboolean ret = rs_picasa_client_upload_photo(picasa_client, temp_file, 
picasa->album_id);
+       rs_picasa_client_upload_photo(picasa_client, temp_file, 
picasa->album_id, &error);
 
        unlink (temp_file);
        g_free (temp_file);
 
-       return TRUE;
+       return deal_with_error(&error);
 }
 
 GtkWidget *

Modified: trunk/plugins/output-picasa/rs-picasa-client.c
===================================================================
--- trunk/plugins/output-picasa/rs-picasa-client.c      2010-06-01 18:30:50 UTC 
(rev 3415)
+++ trunk/plugins/output-picasa/rs-picasa-client.c      2010-06-01 22:33:30 UTC 
(rev 3416)
@@ -24,6 +24,36 @@
        PICASA_ALBUM_ID
 } PicasaAlbum;
 
+static gboolean
+picasa_error(gint code, const GString *data, GError **error)
+{
+        gchar *error_msg = NULL;
+
+       switch(code)
+       {
+       case 200:
+       case 201:
+               break;
+       case 404:
+               error_msg = g_strdup_printf("Got error %d\n\n%s\n", code, 
data->str);
+               break;
+       default:
+               error_msg = g_strdup_printf("Error not caught, please submit 
this as a bugreport...\n\n%s\n", data->str);
+               break;
+       }
+
+        if (error_msg)
+       {
+               g_set_error(error, 
g_quark_from_static_string("rawstudio_facebook_client_error"), code, "%s", 
error_msg);
+               g_free(error_msg);
+               return FALSE;
+       }
+       else
+       {
+               return TRUE;
+       }
+}
+
 static GtkListStore *
 xml_album_list_response(const GString *xml)
 {
@@ -290,7 +320,7 @@
 }
 
 gboolean
-rs_picasa_client_upload_photo(PicasaClient *picasa_client, gchar *photo, gchar 
*albumid)
+rs_picasa_client_upload_photo(PicasaClient *picasa_client, gchar *photo, gchar 
*albumid, GError **error)
 {
        g_assert(picasa_client->auth_token != NULL);
        g_assert(picasa_client->username != NULL);
@@ -325,14 +355,7 @@
 
        glong response_code;
        curl_easy_getinfo(picasa_client->curl, CURLINFO_RESPONSE_CODE, 
&response_code);
-       if (response_code != 201)
-       {
-               g_warning("Uncactched error - please submit the following as a 
bugreport.");
-               g_warning("%s", data->str);
-               return FALSE;
-       }
-
-       return TRUE;
+       return picasa_error(response_code, data, error);
 }
 
 PicasaClient *

Modified: trunk/plugins/output-picasa/rs-picasa-client.h
===================================================================
--- trunk/plugins/output-picasa/rs-picasa-client.h      2010-06-01 18:30:50 UTC 
(rev 3415)
+++ trunk/plugins/output-picasa/rs-picasa-client.h      2010-06-01 22:33:30 UTC 
(rev 3416)
@@ -17,7 +17,7 @@
 void rs_picasa_client_auth(PicasaClient *picasa_client);
 GtkListStore * rs_picasa_client_get_album_list(PicasaClient *picasa_client);
 char * rs_picasa_client_create_album(PicasaClient *picasa_client, const gchar 
*name);
-gboolean rs_picasa_client_upload_photo(PicasaClient *picasa_client, gchar 
*photo, gchar *albumid);
+gboolean rs_picasa_client_upload_photo(PicasaClient *picasa_client, gchar 
*photo, gchar *albumid, GError **error);
 PicasaClient * rs_picasa_client_init();
 
 #endif /* RS_PICASA_CLIENT_H */


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to