changeset 11281:920a37a4c1be

[gaim-migrate @ 13478] Patch from Sadrul Habib Chowdhury, with a bit of hacking from me, to add file transfer signals committer: Tailor Script <tailor@pidgin.im>
author Gary Kramlich <grim@reaperworld.com>
date Tue, 16 Aug 2005 20:44:27 +0000
parents 65658ff2deb8
children 1c2232d6ae15
files doc/Makefile.am doc/xfer-signals.dox plugins/signals-test.c src/core.c src/ft.c src/ft.h
diffstat 6 files changed, 272 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/doc/Makefile.am	Tue Aug 16 19:15:28 2005 +0000
+++ b/doc/Makefile.am	Tue Aug 16 20:44:27 2005 +0000
@@ -19,4 +19,5 @@
 	gtkimhtml-signals.dox \
 	plugin-ids.dox \
 	gaim.1.in \
-	gaim-remote.1.in
+	gaim-remote.1.in \
+	xfer-signals.dox
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/xfer-signals.dox	Tue Aug 16 20:44:27 2005 +0000
@@ -0,0 +1,97 @@
+/** @page xfer-signals File Transfer Signals
+
+ @signals
+  @signal file-recv-accept
+  @signal file-recv-start
+  @signal file-recv-cancel
+  @signal file-recv-complete
+  @signal file-send-accept
+  @signal file-send-start
+  @signal file-send-cancel
+  @signal file-send-complete
+ @endsignals
+
+ <hr>
+
+ @signaldef file-recv-accept
+  @signalproto
+void (*file_recv_accept)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an incoming file transfer has been accepted.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-recv-start
+  @signalproto
+void (*file_recv_start)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an incoming file transfer has been started.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-recv-cancel
+  @signalproto
+void (*file_recv_cancel)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an incoming file transfer has been canceled.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-recv-complete
+  @signalproto
+void (*file_recv_complete)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an incoming file transfer has been completed.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-send-accept
+  @signalproto
+void (*file_send_accept)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an outgoing file transfer has been accepted.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-send-start
+  @signalproto
+void (*file_send_start)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an outgoing file transfer has started.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-send-cancel
+  @signalproto
+void (*file_send_cancel)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an outgoing file transfer has been canceled.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ @signaldef file-send-complete
+  @signalproto
+void (*file_send_complete)(GaimXfer *xfer, gpointer data);
+  @endsignalproto
+  @signaldesc
+   Emitted when an outgoing file transfer has been completed.
+  @param xfer The file transfer
+  @param data User data
+ @endsignaldef
+
+ */
+// vim: syntax=c tw=75 et
--- a/plugins/signals-test.c	Tue Aug 16 19:15:28 2005 +0000
+++ b/plugins/signals-test.c	Tue Aug 16 20:44:27 2005 +0000
@@ -28,6 +28,7 @@
 #include "conversation.h"
 #include "core.h"
 #include "debug.h"
+#include "ft.h"
 #include "signals.h"
 #include "version.h"
 
@@ -477,6 +478,49 @@
 }
 
 /**************************************************************************
+ * File transfer signal callbacks
+ **************************************************************************/
+static void
+ft_recv_accept_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file receive accepted\n");
+}
+
+static void
+ft_send_accept_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file send accepted\n");
+}
+
+static void
+ft_recv_start_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file receive started\n");
+}
+
+static void
+ft_send_start_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file send started\n");
+}
+
+static void
+ft_recv_cancel_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file receive canceled\n");
+}
+
+static void
+ft_send_cancel_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file send canceled\n");
+}
+
+static void
+ft_recv_complete_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file receive completed\n");
+}
+
+static void
+ft_send_complete_cb(GaimXfer *xfer, gpointer data) {
+	gaim_debug_misc("signals test", "file send completed\n");
+}
+
+/**************************************************************************
  * Plugin stuff
  **************************************************************************/
 static gboolean
@@ -489,6 +533,7 @@
 	void *accounts_handle = gaim_accounts_get_handle();
 	void *ciphers_handle = gaim_ciphers_get_handle();
 	void *buddy_icons_handle = gaim_buddy_icons_get_handle();
+	void *ft_handle = gaim_xfers_get_handle();
 
 	/* Accounts subsystem signals */
 	gaim_signal_connect(accounts_handle, "account-connecting",
@@ -608,6 +653,24 @@
 	gaim_signal_connect(core_handle, "quitting",
 						plugin, GAIM_CALLBACK(quitting_cb), NULL);
 
+	/* file transfer signals */
+	gaim_signal_connect(ft_handle, "file-recv-accept",
+						plugin, GAIM_CALLBACK(ft_recv_accept_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-recv-start",
+						plugin, GAIM_CALLBACK(ft_recv_start_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-recv-cancel",
+						plugin, GAIM_CALLBACK(ft_recv_cancel_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-recv-complete",
+						plugin, GAIM_CALLBACK(ft_recv_complete_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-send-accept",
+						plugin, GAIM_CALLBACK(ft_send_accept_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-send-start",
+						plugin, GAIM_CALLBACK(ft_send_start_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-send-cancel",
+						plugin, GAIM_CALLBACK(ft_send_cancel_cb), NULL);
+	gaim_signal_connect(ft_handle, "file-send-complete",
+						plugin, GAIM_CALLBACK(ft_send_complete_cb), NULL);
+
 	return TRUE;
 }
 
--- a/src/core.c	Tue Aug 16 19:15:28 2005 +0000
+++ b/src/core.c	Tue Aug 16 20:44:27 2005 +0000
@@ -28,6 +28,7 @@
 #include "conversation.h"
 #include "core.h"
 #include "debug.h"
+#include "ft.h"
 #include "network.h"
 #include "plugin.h"
 #include "pounce.h"
@@ -120,6 +121,7 @@
 	gaim_proxy_init();
 	gaim_sound_init();
 	gaim_ssl_init();
+	gaim_xfers_init();
 
 	if (ops != NULL && ops->ui_init != NULL)
 		ops->ui_init();
@@ -154,6 +156,7 @@
 	gaim_status_uninit();
 	gaim_prefs_uninit();
 	gaim_sound_uninit();
+	gaim_xfers_uninit();
 
 	gaim_debug_info("main", "Unloading all plugins\n");
 	gaim_plugins_destroy_all();
--- a/src/ft.c	Tue Aug 16 19:15:28 2005 +0000
+++ b/src/ft.c	Tue Aug 16 20:44:27 2005 +0000
@@ -110,6 +110,44 @@
 {
 	g_return_if_fail(xfer != NULL);
 
+	if(xfer->type == GAIM_XFER_SEND) {
+		switch(status) {
+			case GAIM_XFER_STATUS_ACCEPTED:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-send-accept", xfer);
+				break;
+			case GAIM_XFER_STATUS_STARTED:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-send-start", xfer);
+				break;
+			case GAIM_XFER_STATUS_DONE:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-send-complete", xfer);
+				break;
+			case GAIM_XFER_STATUS_CANCEL_LOCAL:
+			case GAIM_XFER_STATUS_CANCEL_REMOTE:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-send-cancel", xfer);
+				break;
+			default:
+				break;
+		}
+	} else if(xfer->type == GAIM_XFER_RECEIVE) {
+		switch(status) {
+			case GAIM_XFER_STATUS_ACCEPTED:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-recv-accept", xfer);
+				break;
+			case GAIM_XFER_STATUS_STARTED:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-recv-start", xfer);
+				break;
+			case GAIM_XFER_STATUS_DONE:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-recv-complete", xfer);
+				break;
+			case GAIM_XFER_STATUS_CANCEL_LOCAL:
+			case GAIM_XFER_STATUS_CANCEL_REMOTE:
+				gaim_signal_emit(gaim_xfers_get_handle(), "file-recv-cancel", xfer);
+				break;
+			default:
+				break;
+		}
+	}
+
 	xfer->status = status;
 }
 
@@ -1103,15 +1141,63 @@
 /**************************************************************************
  * File Transfer Subsystem API
  **************************************************************************/
+void *
+gaim_xfers_get_handle(void) {
+	static int handle = 0;
+
+	return &handle;
+}
 
 void
-gaim_xfers_set_ui_ops(GaimXferUiOps *ops)
-{
+gaim_xfers_init(void) {
+	void *handle = gaim_xfers_get_handle();
+
+	/* register signals */
+	gaim_signal_register(handle, "file-recv-accept",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-send-accept",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-recv-start",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-send-start",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-send-cancel",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-recv-cancel",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-send-complete",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+	gaim_signal_register(handle, "file-recv-complete",
+						 gaim_marshal_VOID__POINTER,
+						 NULL, 1,
+						 gaim_value_new(GAIM_TYPE_POINTER));
+}
+
+void
+gaim_xfers_uninit(void) {
+	gaim_signals_disconnect_by_handle(gaim_xfers_get_handle());
+}
+
+void
+gaim_xfers_set_ui_ops(GaimXferUiOps *ops) {
 	xfer_ui_ops = ops;
 }
 
 GaimXferUiOps *
-gaim_xfers_get_ui_ops(void)
-{
+gaim_xfers_get_ui_ops(void) {
 	return xfer_ui_ops;
 }
--- a/src/ft.h	Tue Aug 16 19:15:28 2005 +0000
+++ b/src/ft.h	Tue Aug 16 20:44:27 2005 +0000
@@ -558,6 +558,23 @@
 /*@{*/
 
 /**
+ * Returns the handle to the file transfer subsystem
+ *
+ * @return The handle
+ */
+void *gaim_xfers_get_handle(void);
+
+/**
+ * Initializes the file transfer subsystem
+ */
+void gaim_xfers_init(void);
+
+/**
+ * Uninitializes the file transfer subsystem
+ */
+void gaim_xfers_uninit(void);
+
+/**
  * Sets the UI operations structure to be used in all gaim file transfers.
  *
  * @param ops The UI operations structure.