[gthumb: 4/10] [flicker] specify the server parameter in a separate structure



commit 1ca749b5eb4eb38f5d0dcac0f73e7469e00a3380
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Apr 5 22:20:07 2010 +0200

    [flicker] specify the server parameter in a separate structure
    
    Use a FlickrServer struct to specify the server parameters, this
    allows to add support for other flickr-like servers.

 extensions/flicker/actions.c                |   16 ++++++++++++-
 extensions/flicker/dlg-export-to-flickr.c   |   13 +++++++----
 extensions/flicker/dlg-export-to-flickr.h   |    6 +++-
 extensions/flicker/dlg-import-from-flickr.c |    7 ++++-
 extensions/flicker/dlg-import-from-flickr.h |    4 ++-
 extensions/flicker/flickr-connection.c      |   31 ++++++++++++++++++--------
 extensions/flicker/flickr-connection.h      |    8 ++++--
 extensions/flicker/flickr-service.c         |   12 +++++-----
 extensions/flicker/flickr-types.h           |   10 ++++++++
 9 files changed, 76 insertions(+), 31 deletions(-)
---
diff --git a/extensions/flicker/actions.c b/extensions/flicker/actions.c
index 35cca0d..462d6d4 100644
--- a/extensions/flicker/actions.c
+++ b/extensions/flicker/actions.c
@@ -26,6 +26,18 @@
 #include <gthumb.h>
 #include "dlg-export-to-flickr.h"
 #include "dlg-import-from-flickr.h"
+#include "flickr-types.h"
+
+
+static FlickrServer www_flickr_com = {
+	"Flickr.com",
+	"http://www.flickr.com";,
+	"http://www.flickr.com/services/auth/";,
+	"http://api.flickr.com/services/rest";,
+	"http://api.flickr.com/services/upload/";,
+	"8960706ee7f4151e893b11837e9c24ce",
+	"1ff8d1e45c873423"
+};
 
 
 void
@@ -39,7 +51,7 @@ gth_browser_activate_action_export_flicker (GtkAction  *action,
 	file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
 	if (file_list == NULL)
 		file_list = gth_file_store_get_visibles (gth_browser_get_file_store (browser));
-	dlg_export_to_flickr (browser, file_list);
+	dlg_export_to_flickr (&www_flickr_com, browser, file_list);
 
 	_g_object_list_unref (file_list);
 	_gtk_tree_path_list_free (items);
@@ -50,5 +62,5 @@ void
 gth_browser_activate_action_import_flicker (GtkAction  *action,
 					    GthBrowser *browser)
 {
-	dlg_import_from_flickr (browser);
+	dlg_import_from_flickr (&www_flickr_com, browser);
 }
diff --git a/extensions/flicker/dlg-export-to-flickr.c b/extensions/flicker/dlg-export-to-flickr.c
index 791dad3..fdf735f 100644
--- a/extensions/flicker/dlg-export-to-flickr.c
+++ b/extensions/flicker/dlg-export-to-flickr.c
@@ -49,6 +49,7 @@ enum {
 
 
 typedef struct {
+	FlickrServer         *server;
 	GthBrowser           *browser;
 	GthFileData          *location;
 	GList                *file_list;
@@ -118,14 +119,14 @@ completed_messagedialog_response_cb (GtkDialog *dialog,
 						g_string_append (ids, ",");
 					g_string_append (ids, (char *) scan->data);
 				}
-				url = g_strconcat ("http://www.flickr.com/photos/upload/edit/?ids=";, ids->str, NULL);
+				url = g_strconcat (data->server->url, "/photos/upload/edit/?ids=", ids->str, NULL);
 
 				g_string_free (ids, TRUE);
 			}
 			else if (data->photoset->url != NULL)
 				url = g_strdup (data->photoset->url);
 			else if (data->photoset->id != NULL)
-				url = g_strconcat ("http://www.flickr.com/photos/";, data->user->id, "/sets/", data->photoset->id, NULL);
+				url = g_strconcat (data->server->url, "/photos/", data->user->id, "/sets/", data->photoset->id, NULL);
 
 			if ((url != NULL) && ! gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (dialog)), url, 0, &error)) {
 				if (data->conn != NULL)
@@ -467,8 +468,9 @@ account_combobox_changed_cb (GtkComboBox *widget,
 
 
 void
-dlg_export_to_flickr (GthBrowser *browser,
-		      GList      *file_list)
+dlg_export_to_flickr (FlickrServer *server,
+		      GthBrowser   *browser,
+		      GList        *file_list)
 {
 	DialogData *data;
 	GList      *scan;
@@ -479,6 +481,7 @@ dlg_export_to_flickr (GthBrowser *browser,
 	GtkWidget  *list_view;
 
 	data = g_new0 (DialogData, 1);
+	data->server = server;
 	data->browser = browser;
 	data->location = gth_file_data_dup (gth_browser_get_location_data (browser));
 	data->builder = _gtk_builder_new_from_file ("export-to-flickr.ui", "flicker");
@@ -555,7 +558,7 @@ dlg_export_to_flickr (GthBrowser *browser,
 			  G_CALLBACK (account_combobox_changed_cb),
 			  data);
 
-	data->conn = flickr_connection_new ();
+	data->conn = flickr_connection_new (data->server);
 	data->service = flickr_service_new (data->conn);
 	data->auth = flickr_authentication_new (data->conn,
 						data->service,
diff --git a/extensions/flicker/dlg-export-to-flickr.h b/extensions/flicker/dlg-export-to-flickr.h
index c7f0c4d..be47d46 100644
--- a/extensions/flicker/dlg-export-to-flickr.h
+++ b/extensions/flicker/dlg-export-to-flickr.h
@@ -24,8 +24,10 @@
 #define DLG_EXPORT_TO_FLICKR_H
 
 #include <gthumb.h>
+#include "flickr-types.h"
 
-void dlg_export_to_flickr (GthBrowser *browser,
-			   GList      *file_list);
+void dlg_export_to_flickr (FlickrServer *server,
+			   GthBrowser   *browser,
+			   GList        *file_list);
 
 #endif /* DLG_EXPORT_TO_FLICKR_H */
diff --git a/extensions/flicker/dlg-import-from-flickr.c b/extensions/flicker/dlg-import-from-flickr.c
index 27e2a7d..e9a5520 100644
--- a/extensions/flicker/dlg-import-from-flickr.c
+++ b/extensions/flicker/dlg-import-from-flickr.c
@@ -53,6 +53,7 @@ enum {
 
 
 typedef struct {
+	FlickrServer         *server;
 	GthBrowser           *browser;
 	GthFileData          *location;
 	GtkBuilder           *builder;
@@ -509,12 +510,14 @@ preferences_button_clicked_cb (GtkWidget  *widget,
 
 
 void
-dlg_import_from_flickr (GthBrowser *browser)
+dlg_import_from_flickr (FlickrServer *server,
+		        GthBrowser   *browser)
 {
 	DialogData     *data;
 	GthThumbLoader *thumb_loader;
 
 	data = g_new0 (DialogData, 1);
+	data->server = server;
 	data->browser = browser;
 	data->location = gth_file_data_dup (gth_browser_get_location_data (browser));
 	data->builder = _gtk_builder_new_from_file ("import-from-flickr.ui", "flicker");
@@ -601,7 +604,7 @@ dlg_import_from_flickr (GthBrowser *browser)
 
 	update_selection_status (data);
 
-	data->conn = flickr_connection_new ();
+	data->conn = flickr_connection_new (data->server);
 	data->service = flickr_service_new (data->conn);
 	data->auth = flickr_authentication_new (data->conn,
 						data->service,
diff --git a/extensions/flicker/dlg-import-from-flickr.h b/extensions/flicker/dlg-import-from-flickr.h
index 34d238b..ec1ef94 100644
--- a/extensions/flicker/dlg-import-from-flickr.h
+++ b/extensions/flicker/dlg-import-from-flickr.h
@@ -24,7 +24,9 @@
 #define DLG_IMPORT_FROM_FLICKR_H
 
 #include <gthumb.h>
+#include "flickr-types.h"
 
-void dlg_import_from_flickr (GthBrowser *browser);
+void dlg_import_from_flickr (FlickrServer *server,
+			     GthBrowser   *browser);
 
 #endif /* DLG_IMPORT_FROM_FLICKR_H */
diff --git a/extensions/flicker/flickr-connection.c b/extensions/flicker/flickr-connection.c
index 49c7ef5..5110a46 100644
--- a/extensions/flicker/flickr-connection.c
+++ b/extensions/flicker/flickr-connection.c
@@ -28,9 +28,7 @@
 #include "flickr-user.h"
 
 
-#undef  DEBUG_FLICKR_CONNECTION
-#define GTHUMB_FLICKR_API_KEY "8960706ee7f4151e893b11837e9c24ce"
-#define GTHUMB_FLICKR_SHARED_SECRET "1ff8d1e45c873423"
+#undef DEBUG_FLICKR_CONNECTION
 
 
 GQuark
@@ -160,9 +158,21 @@ flickr_connection_get_type (void)
 
 
 FlickrConnection *
-flickr_connection_new (void)
+flickr_connection_new (FlickrServer *server)
 {
-	return (FlickrConnection *) g_object_new (FLICKR_TYPE_CONNECTION, NULL);
+	FlickrConnection *self;
+
+	self = (FlickrConnection *) g_object_new (FLICKR_TYPE_CONNECTION, NULL);
+	self->server = server;
+
+	return self;
+}
+
+
+FlickrServer *
+flickr_connection_get_server (FlickrConnection *self)
+{
+	return self->server;
 }
 
 
@@ -233,12 +243,12 @@ flickr_connection_add_api_sig (FlickrConnection *self,
 	GList *keys;
 	GList *scan;
 
-	g_hash_table_insert (data_set, "api_key", GTHUMB_FLICKR_API_KEY);
+	g_hash_table_insert (data_set, "api_key", (gpointer) self->server->api_key);
 	if (self->priv->token != NULL)
 		g_hash_table_insert (data_set, "auth_token", self->priv->token);
 
 	g_checksum_reset (self->priv->checksum);
-	g_checksum_update (self->priv->checksum, (guchar *) GTHUMB_FLICKR_SHARED_SECRET, -1);
+	g_checksum_update (self->priv->checksum, (guchar *) self->server->shared_secret, -1);
 
 	keys = g_hash_table_get_keys (data_set);
 	keys = g_list_sort (keys, (GCompareFunc) strcmp);
@@ -312,7 +322,7 @@ flickr_connection_get_frob (FlickrConnection    *self,
 	data_set = g_hash_table_new (g_str_hash, g_str_equal);
 	g_hash_table_insert (data_set, "method", "flickr.auth.getFrob");
 	flickr_connection_add_api_sig (self, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->server->rest_url, data_set);
 	flickr_connection_send_message (self,
 					msg,
 					cancellable,
@@ -376,7 +386,8 @@ flickr_connection_get_login_link (FlickrConnection *self,
 	g_hash_table_insert (data_set, "perms", get_access_type_name (access_type));
 	flickr_connection_add_api_sig (self, data_set);
 
-	link = g_string_new ("http://www.flickr.com/services/auth/?";);
+	link = g_string_new (self->server->authentication_url);
+	g_string_append (link, "?");
 	keys = g_hash_table_get_keys (data_set);
 	for (scan = keys; scan; scan = scan->next) {
 		char *key = scan->data;
@@ -463,7 +474,7 @@ flickr_connection_get_token (FlickrConnection    *self,
 	g_hash_table_insert (data_set, "method", "flickr.auth.getToken");
 	g_hash_table_insert (data_set, "frob", self->priv->frob);
 	flickr_connection_add_api_sig (self, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->server->rest_url, data_set);
 	flickr_connection_send_message (self,
 					msg,
 					cancellable,
diff --git a/extensions/flicker/flickr-connection.h b/extensions/flicker/flickr-connection.h
index df21060..c0a2e81 100644
--- a/extensions/flicker/flickr-connection.h
+++ b/extensions/flicker/flickr-connection.h
@@ -30,6 +30,7 @@
 #include <libsoup/soup.h>
 #endif /* HAVE_LIBSOUP_GNOME */
 #include <gthumb.h>
+#include "flickr-types.h"
 
 typedef enum {
 	FLICKR_ACCESS_READ,
@@ -53,17 +54,18 @@ typedef struct _FlickrConnectionClass    FlickrConnectionClass;
 
 struct _FlickrConnection
 {
-	GthTask __parent;
+	GObject __parent;
+	FlickrServer *server;
 	FlickrConnectionPrivate *priv;
 };
 
 struct _FlickrConnectionClass
 {
-	GthTaskClass __parent_class;
+	GObjectClass __parent_class;
 };
 
 GType                flickr_connection_get_type           (void) G_GNUC_CONST;
-FlickrConnection *   flickr_connection_new                (void);
+FlickrConnection *   flickr_connection_new                (FlickrServer          *server);
 void		     flickr_connection_send_message       (FlickrConnection      *self,
 						           SoupMessage           *msg,
 						           GCancellable          *cancellable,
diff --git a/extensions/flicker/flickr-service.c b/extensions/flicker/flickr-service.c
index 895fa4b..7376872 100644
--- a/extensions/flicker/flickr-service.c
+++ b/extensions/flicker/flickr-service.c
@@ -247,7 +247,7 @@ flickr_service_get_upload_status (FlickrService       *self,
 	data_set = g_hash_table_new (g_str_hash, g_str_equal);
 	g_hash_table_insert (data_set, "method", "flickr.people.getUploadStatus");
 	flickr_connection_add_api_sig (self->priv->conn, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->priv->conn->server->rest_url, data_set);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					cancellable,
@@ -353,7 +353,7 @@ flickr_service_list_photosets (FlickrService       *self,
 	if (user_id != NULL)
 		g_hash_table_insert (data_set, "user_id", (char *) user_id);
 	flickr_connection_add_api_sig (self->priv->conn, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->priv->conn->server->rest_url, data_set);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					cancellable,
@@ -456,7 +456,7 @@ flickr_service_create_photoset (FlickrService       *self,
 	g_hash_table_insert (data_set, "title", photoset->title);
 	g_hash_table_insert (data_set, "primary_photo_id", photoset->primary);
 	flickr_connection_add_api_sig (self->priv->conn, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->priv->conn->server->rest_url, data_set);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					cancellable,
@@ -585,7 +585,7 @@ add_current_photo_to_set (FlickrService *self)
 	g_hash_table_insert (data_set, "photoset_id", self->priv->add_photos->photoset->id);
 	g_hash_table_insert (data_set, "photo_id", photo_id);
 	flickr_connection_add_api_sig (self->priv->conn, data_set);
-	msg = soup_form_request_new_from_hash ("POST", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("POST", self->priv->conn->server->rest_url, data_set);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					self->priv->add_photos->cancellable,
@@ -835,7 +835,7 @@ post_photo_file_buffer_ready_cb (void     **buffer,
 		g_free (details);
 	}
 
-	msg = soup_form_request_new_from_multipart ("http://api.flickr.com/services/upload/";, multipart);
+	msg = soup_form_request_new_from_multipart (self->priv->conn->server->upload_url, multipart);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					self->priv->post_photos->cancellable,
@@ -1039,7 +1039,7 @@ flickr_service_list_photos (FlickrService       *self,
 		g_free (s);
 	}
 	flickr_connection_add_api_sig (self->priv->conn, data_set);
-	msg = soup_form_request_new_from_hash ("GET", "http://api.flickr.com/services/rest";, data_set);
+	msg = soup_form_request_new_from_hash ("GET", self->priv->conn->server->rest_url, data_set);
 	flickr_connection_send_message (self->priv->conn,
 					msg,
 					cancellable,
diff --git a/extensions/flicker/flickr-types.h b/extensions/flicker/flickr-types.h
index 4c309b8..b7620af 100644
--- a/extensions/flicker/flickr-types.h
+++ b/extensions/flicker/flickr-types.h
@@ -48,4 +48,14 @@ typedef enum {
 	FLICKR_SIZE_LARGE = 1024
 } FlickrSize;
 
+typedef struct {
+	const char *name;
+	const char *url;
+	const char *authentication_url;
+	const char *rest_url;
+	const char *upload_url;
+	const char *api_key;
+	const char *shared_secret;
+} FlickrServer;
+
 #endif /* FLICKR_TYPES_H */



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