/dev/twasilczyk/imgupload: 11a0f3837a64: Imgupload: please wait ...

Tomasz Wasilczyk <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 11a0f3837a6493a098fc46d4595b4ccc1e446339
Author:	 Tomasz Wasilczyk <[email protected]>
Date:	 2014-05-19 21:45 +0200
Branch:	 default
URL: https://hg.pidgin.im/dev/twasilczyk/imgupload/rev/11a0f3837a64

Description:

Imgupload: please wait dialog

diffstat:

 pidgin/plugins/imgupload.c |  53 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 49 insertions(+), 4 deletions(-)

diffs (111 lines):

diff --git a/pidgin/plugins/imgupload.c b/pidgin/plugins/imgupload.c
--- a/pidgin/plugins/imgupload.c
+++ b/pidgin/plugins/imgupload.c
@@ -37,6 +37,8 @@
 
 #define IMGUP_IMGUR_CLIENT_ID "b6d33c6bb80e1b6"
 
+static PurplePlugin *plugin_handle = NULL;
+
 static void
 imgup_upload_done(PidginWebView *webview, const gchar *url, const gchar *title);
 static void
@@ -145,12 +147,25 @@ imgup_imgur_upload(PidginWebView *webvie
  ******************************************************************************/
 
 static void
+imgup_upload_finish(PidginWebView *webview)
+{
+	gpointer plswait;
+
+	g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
+	plswait = g_object_get_data(G_OBJECT(webview), "imgupload-plswait");
+	g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
+
+	if (plswait)
+		purple_request_close(PURPLE_REQUEST_WAIT, plswait);
+}
+
+static void
 imgup_upload_done(PidginWebView *webview, const gchar *url, const gchar *title)
 {
 	PidginWebViewButtons format;
 	gboolean url_desc;
 
-	g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
+	imgup_upload_finish(webview);
 
 	format = pidgin_webview_get_format_functions(webview);
 	url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
@@ -161,9 +176,30 @@ imgup_upload_done(PidginWebView *webview
 static void
 imgup_upload_failed(PidginWebView *webview)
 {
-	g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
+	gboolean is_cancelled;
 
-	purple_debug_error("imgupload", "Failed uploading image");
+	imgup_upload_finish(webview);
+
+	is_cancelled = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(webview),
+		"imgupload-cancelled"));
+	g_object_set_data(G_OBJECT(webview), "imgupload-cancelled", NULL);
+
+	if (!is_cancelled)
+		purple_debug_error("imgupload", "Failed uploading image");
+}
+
+static void
+imgup_upload_cancel(gpointer _webview)
+{
+	PurpleHttpConnection *hc;
+	PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
+
+	g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
+	g_object_set_data(G_OBJECT(webview), "imgupload-cancelled",
+		GINT_TO_POINTER(TRUE));
+	hc = g_object_get_data(G_OBJECT(webview), "imgupload-hc");
+	if (hc)
+		purple_http_conn_cancel(hc);
 }
 
 static gboolean
@@ -172,6 +208,7 @@ imgup_upload_start(PidginWebView *webvie
 	PidginConversation *gtkconv = _gtkconv;
 	PurpleConversation *conv = gtkconv->active_conv;
 	PurpleHttpConnection *hc;
+	gpointer plswait;
 
 	if (!imgup_conn_is_hooked(purple_conversation_get_connection(conv)))
 		return FALSE;
@@ -180,7 +217,11 @@ imgup_upload_start(PidginWebView *webvie
 	g_object_set_data_full(G_OBJECT(webview), "imgupload-hc",
 		hc, (GDestroyNotify)purple_http_conn_cancel);
 
-	/* TODO: please wait dialog */
+	plswait = purple_request_wait(plugin_handle, _("Uploading image"),
+		_("Please wait for image URL being retrieved..."),
+		NULL, FALSE, imgup_upload_cancel,
+		purple_request_cpar_from_conversation(conv), webview);
+	g_object_set_data(G_OBJECT(webview), "imgupload-plswait", plswait);
 
 	return TRUE;
 }
@@ -284,6 +325,8 @@ imgup_plugin_load(PurplePlugin *plugin)
 {
 	GList *it;
 
+	plugin_handle = plugin;
+
 	it = purple_connections_get_all();
 	for (; it; it = g_list_next(it)) {
 		PurpleConnection *gc = it->data;
@@ -330,6 +373,8 @@ imgup_plugin_unload(PurplePlugin *plugin
 		imgup_conn_uninit(gc);
 	}
 
+	plugin_handle = NULL;
+
 	return TRUE;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.