Mercurial > pidgin
changeset 9466:d27156c9c876
[gaim-migrate @ 10291]
(21:36:44) datallah: anyway... i added "Send File" to the prpl core
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Wed, 07 Jul 2004 01:49:39 +0000 |
parents | 8a4797a608ae |
children | b6971539f7af |
files | src/gtkblist.c src/protocols/irc/dcc_send.c src/protocols/irc/irc.c src/protocols/irc/irc.h src/protocols/jabber/buddy.c src/protocols/jabber/jabber.c src/protocols/jabber/si.c src/protocols/jabber/si.h src/protocols/msn/msn.c src/protocols/oscar/oscar.c src/protocols/silc/buddy.c src/protocols/silc/ft.c src/protocols/silc/silc.c src/protocols/silc/silcgaim.h src/protocols/yahoo/yahoo.c src/protocols/yahoo/yahoo_filexfer.c src/protocols/yahoo/yahoo_filexfer.h src/prpl.h src/server.c src/server.h |
diffstat | 20 files changed, 107 insertions(+), 167 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gtkblist.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/gtkblist.c Wed Jul 07 01:49:39 2004 +0000 @@ -528,6 +528,11 @@ } } +static void gtk_blist_menu_send_file_cb(GtkWidget *w, GaimBuddy *b) +{ + serv_send_file(b->account->gc, b->name, NULL); +} + static void gtk_blist_menu_autojoin_cb(GtkWidget *w, GaimChat *chat) { gaim_blist_node_set_bool((GaimBlistNode*)chat, "gtk-autojoin", @@ -1130,6 +1135,13 @@ } gaim_new_item_from_stock(menu, _("I_M"), GAIM_STOCK_IM, G_CALLBACK(gtk_blist_menu_im_cb), b, 0, 0, NULL); + if (prpl_info && prpl_info->send_file) { + if (!prpl_info->can_receive_file + || prpl_info->can_receive_file(b->account->gc, b->name)) { + gaim_new_item_from_stock(menu, _("_Send File"), GAIM_STOCK_FILE_TRANSFER, + G_CALLBACK(gtk_blist_menu_send_file_cb), b, 0, 0, NULL); + } + } gaim_new_item_from_stock(menu, _("Add Buddy _Pounce"), NULL, G_CALLBACK(gtk_blist_menu_bp_cb), b, 0, 0, NULL); gaim_new_item_from_stock(menu, _("View _Log"), NULL,
--- a/src/protocols/irc/dcc_send.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/irc/dcc_send.c Wed Jul 07 01:49:39 2004 +0000 @@ -299,12 +299,12 @@ * buddy menu * It sets up the GaimXfer struct and tells Gaim to go ahead */ -void irc_dccsend_send_ask(GaimConnection *gc, const char *dst) { +void irc_dccsend_send_file(GaimConnection *gc, const char *who, const char *file) { GaimXfer *xfer; struct irc_xfer_send_data *xd; /* Build the file transfer handle */ - xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, dst); + xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, who); xd = g_new0(struct irc_xfer_send_data, 1); @@ -318,5 +318,8 @@ gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_send_destroy); gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_send_destroy); /* Now perform the request */ - gaim_xfer_request(xfer); + if (file) + gaim_xfer_request_accepted(xfer, file); + else + gaim_xfer_request(xfer); }
--- a/src/protocols/irc/irc.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/irc/irc.c Wed Jul 07 01:49:39 2004 +0000 @@ -150,34 +150,15 @@ return list; } - -static void irc_dccsend_send_ask_menu(GaimBlistNode *node, gpointer data) -{ - GaimBuddy *buddy; - GaimConnection *gc; - - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - buddy = (GaimBuddy *) node; - gc =gaim_account_get_connection(buddy->account); - - irc_dccsend_send_ask(gc, buddy->name); -} - - +#if 0 static GList *irc_blist_node_menu(GaimBlistNode *node) { GList *m = NULL; GaimBlistNodeAction *act; - if(GAIM_BLIST_NODE_IS_BUDDY(node)) { - act = gaim_blist_node_action_new(_("Send File"), - irc_dccsend_send_ask_menu, NULL); - m = g_list_append(m, act); - } - return m; } +#endif static GList *irc_chat_join_info(GaimConnection *gc) { @@ -582,7 +563,7 @@ NULL, NULL, irc_away_states, - irc_blist_node_menu, + NULL, /*irc_blist_node_menu, */ irc_chat_join_info, irc_login, irc_close, @@ -626,7 +607,9 @@ NULL, irc_roomlist_get_list, irc_roomlist_cancel, - NULL + NULL, + NULL, + irc_dccsend_send_file };
--- a/src/protocols/irc/irc.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/irc/irc.h Wed Jul 07 01:49:39 2004 +0000 @@ -155,6 +155,6 @@ int irc_cmd_wallops(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_whois(struct irc_conn *irc, const char *cmd, const char *target, const char **args); -void irc_dccsend_send_ask(GaimConnection *gc, const char *dst); +void irc_dccsend_send_file(GaimConnection *gc, const char *who, const char *file); void irc_dccsend_recv(struct irc_conn *irc, const char *from, const char *msg); #endif /* _GAIM_IRC_H */
--- a/src/protocols/jabber/buddy.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/jabber/buddy.c Wed Jul 07 01:49:39 2004 +0000 @@ -32,7 +32,6 @@ #include "jabber.h" #include "iq.h" #include "presence.h" -#include "si.h" void jabber_buddy_free(JabberBuddy *jb) @@ -926,10 +925,6 @@ if(!jb) return m; - act = gaim_blist_node_action_new(_("Send File"), - jabber_si_xfer_ask_send, NULL); - m = g_list_append(m, act); - /* XXX: fix the NOT ME below */ if(js->protocol_version == JABBER_PROTO_0_9 /* && NOT ME */) {
--- a/src/protocols/jabber/jabber.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/jabber/jabber.c Wed Jul 07 01:49:39 2004 +0000 @@ -44,6 +44,7 @@ #include "presence.h" #include "jabber.h" #include "roster.h" +#include "si.h" #include "xdata.h" #define JABBER_CONNECT_STEPS (js->gsc ? 8 : 5) @@ -1515,7 +1516,9 @@ jabber_find_blist_chat, jabber_roomlist_get_list, jabber_roomlist_cancel, - NULL + NULL, + NULL, + jabber_si_xfer_send }; static GaimPluginInfo info =
--- a/src/protocols/jabber/si.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/jabber/si.c Wed Jul 07 01:49:39 2004 +0000 @@ -644,25 +644,19 @@ } } -void jabber_si_xfer_ask_send(GaimBlistNode *node, gpointer data) +void jabber_si_xfer_send(GaimConnection *gc, const char *who, const char *file) { - GaimBuddy *buddy; - GaimConnection *gc; JabberStream *js; GaimXfer *xfer; JabberSIXfer *jsx; - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - buddy = (GaimBuddy *) node; - gc = gaim_account_get_connection(buddy->account); js = gc->proto_data; - if(!gaim_find_buddy(gc->account, buddy->name) || !jabber_buddy_find(js, buddy->name, FALSE)) + if(!gaim_find_buddy(gc->account, who) || !jabber_buddy_find(js, who, FALSE)) return; - xfer = gaim_xfer_new(buddy->account, GAIM_XFER_SEND, buddy->name); + xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who); xfer->data = jsx = g_new0(JabberSIXfer, 1); jsx->js = js; @@ -673,7 +667,10 @@ js->file_transfers = g_list_append(js->file_transfers, xfer); - gaim_xfer_request(xfer); + if (file) + gaim_xfer_request_accepted(xfer, file); + else + gaim_xfer_request(xfer); } void jabber_si_parse(JabberStream *js, xmlnode *packet)
--- a/src/protocols/jabber/si.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/jabber/si.h Wed Jul 07 01:49:39 2004 +0000 @@ -28,6 +28,6 @@ void jabber_bytestreams_parse(JabberStream *js, xmlnode *packet); void jabber_si_parse(JabberStream *js, xmlnode *packet); -void jabber_si_xfer_ask_send(GaimBlistNode *node, gpointer data); +void jabber_si_xfer_send(GaimConnection *gc, const char *who, const char *file); #endif /* _GAIM_JABBER_SI_H_ */
--- a/src/protocols/msn/msn.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/msn/msn.c Wed Jul 07 01:49:39 2004 +0000 @@ -354,30 +354,26 @@ } static void -show_send_file_cb(GaimBlistNode *node, gpointer ignored) +msn_send_file(GaimConnection *gc, const char *who, const char *file) { - GaimBuddy *buddy; - GaimConnection *gc; MsnSession *session; MsnSlpLink *slplink; GaimXfer *xfer; - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - buddy = (GaimBuddy *) node; - - gc = gaim_account_get_connection(buddy->account); session = gc->proto_data; - xfer = gaim_xfer_new(buddy->account, GAIM_XFER_SEND, buddy->name); + xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who); - slplink = msn_session_get_slplink(session, buddy->name); + slplink = msn_session_get_slplink(session, who); xfer->data = slplink; gaim_xfer_set_init_fnc(xfer, t_msn_xfer_init); - gaim_xfer_request(xfer); + if (file) + gaim_xfer_request_accepted(xfer, file); + else + gaim_xfer_request(xfer); } static void @@ -541,11 +537,6 @@ initiate_chat_cb, NULL); m = g_list_append(m, act); - act = gaim_blist_node_action_new(_("Send File"), - show_send_file_cb, NULL); - - m = g_list_append(m, act); - act = gaim_blist_node_action_new(_("Update Buddy Icon"), update_buddy_icon_cb, NULL); @@ -1703,7 +1694,9 @@ NULL, NULL, NULL, - NULL + NULL, + NULL, + msn_send_file }; static GaimPluginInfo info =
--- a/src/protocols/oscar/oscar.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/oscar/oscar.c Wed Jul 07 01:49:39 2004 +0000 @@ -1922,30 +1922,37 @@ } } -static void oscar_ask_sendfile(GaimBlistNode *node, gpointer data) { - - GaimBuddy *buddy; - GaimConnection *gc; +static gboolean oscar_can_receive_file(GaimConnection *gc, const char *who) { + gboolean can_receive = FALSE; + OscarData *od = gc->proto_data; + + if (!od->icq) { + aim_userinfo_t *userinfo; + userinfo = aim_locate_finduserinfo(od->sess, who); + if (userinfo && userinfo->capabilities & AIM_CAPS_SENDFILE) + can_receive = TRUE; + } + + return can_receive; +} + +static void oscar_send_file(GaimConnection *gc, const char *who, const char *file) { OscarData *od; GaimXfer *xfer; struct aim_oft_info *oft_info; const char *ip; - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - buddy = (GaimBuddy *) node; - gc = gaim_account_get_connection(buddy->account); od = (OscarData *)gc->proto_data; /* You want to send a file to someone else, you're so generous */ /* Build the file transfer handle */ - xfer = gaim_xfer_new(buddy->account, GAIM_XFER_SEND, buddy->name); + xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who); /* Create the oscar-specific data */ ip = gaim_network_get_my_ip(od->conn ? od->conn->fd : -1); - oft_info = aim_oft_createinfo(od->sess, NULL, buddy->name, ip, 0, 0, 0, NULL); + oft_info = aim_oft_createinfo(od->sess, NULL, who, ip, 0, 0, 0, NULL); xfer->data = oft_info; /* Setup our I/O op functions */ @@ -1959,7 +1966,10 @@ od->file_transfers = g_slist_append(od->file_transfers, xfer); /* Now perform the request */ - gaim_xfer_request(xfer); + if (file) + gaim_xfer_request_accepted(xfer, file); + else + gaim_xfer_request(xfer); } static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { @@ -6770,13 +6780,12 @@ oscar_ask_direct_im, NULL); m = g_list_append(m, act); } - +#if 0 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { act = gaim_blist_node_action_new(_("Send File"), oscar_ask_sendfile, NULL); m = g_list_append(m, act); } -#if 0 if (userinfo->capabilities & AIM_CAPS_GETFILE) { act = gaim_blist_node_action_new(_("Get File"), oscar_ask_getfile, NULL); @@ -7210,7 +7219,9 @@ NULL, NULL, NULL, - NULL + NULL, + oscar_can_receive_file, + oscar_send_file }; static GaimPluginInfo info =
--- a/src/protocols/silc/buddy.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/silc/buddy.c Wed Jul 07 01:49:39 2004 +0000 @@ -1570,20 +1570,6 @@ b->name, "Killed by operator", NULL); } -static void -silcgaim_buddy_send_file(GaimBlistNode *node, gpointer data) -{ - GaimBuddy *b; - GaimConnection *gc; - - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - b = (GaimBuddy *) node; - gc = gaim_account_get_connection(b->account); - - silcgaim_ftp_send_file(gc, b->name); -} - GList *silcgaim_buddy_menu(GaimBuddy *buddy) { @@ -1626,10 +1612,6 @@ m = g_list_append(m, act); } - act = gaim_blist_node_action_new(_("Send File..."), - silcgaim_buddy_send_file, NULL); - m = g_list_append(m, act); - if (conn && conn->local_entry->mode & SILC_UMODE_ROUTER_OPERATOR) { act = gaim_blist_node_action_new(_("Kill User"), silcgaim_buddy_kill, NULL);
--- a/src/protocols/silc/ft.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/silc/ft.c Wed Jul 07 01:49:39 2004 +0000 @@ -345,11 +345,11 @@ return; } - silcgaim_ftp_send_file(client->application, (const char *)context); + silcgaim_ftp_send_file(client->application, (const char *)context, NULL); silc_free(context); } -void silcgaim_ftp_send_file(GaimConnection *gc, const char *name) +void silcgaim_ftp_send_file(GaimConnection *gc, const char *name, const char *file) { SilcGaim sg = gc->proto_data; SilcClient client = sg->client; @@ -400,7 +400,10 @@ xfer->xfer->data = xfer; /* Choose file to send */ - gaim_xfer_request(xfer->xfer); + if (file) + gaim_xfer_request_accepted(xfer->xfer, file); + else + gaim_xfer_request(xfer->xfer); silc_free(clients); silc_free(nickname);
--- a/src/protocols/silc/silc.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/silc/silc.c Wed Jul 07 01:49:39 2004 +0000 @@ -1436,7 +1436,9 @@ NULL, silcgaim_roomlist_get_list, silcgaim_roomlist_cancel, - NULL + NULL, + NULL, + silcgaim_ftp_send_file }; static GaimPluginInfo info =
--- a/src/protocols/silc/silcgaim.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/silc/silcgaim.h Wed Jul 07 01:49:39 2004 +0000 @@ -98,7 +98,7 @@ char *silcgaim_tooltip_text(GaimBuddy *b); char *silcgaim_status_text(GaimBuddy *b); gboolean silcgaim_ip_is_private(const char *ip); -void silcgaim_ftp_send_file(GaimConnection *gc, const char *name); +void silcgaim_ftp_send_file(GaimConnection *gc, const char *name, const char *file); void silcgaim_ftp_request(SilcClient client, SilcClientConnection conn, SilcClientEntry client_entry, SilcUInt32 session_id, const char *hostname, SilcUInt16 port);
--- a/src/protocols/yahoo/yahoo.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/yahoo/yahoo.c Wed Jul 07 01:49:39 2004 +0000 @@ -2666,20 +2666,6 @@ } -static void yahoo_ask_send_file_menu(GaimBlistNode *node, gpointer data) -{ - GaimBuddy *buddy; - GaimConnection *gc; - - g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); - - buddy = (GaimBuddy *) node; - gc = gaim_account_get_connection(buddy->account); - - yahoo_ask_send_file(gc, buddy->name); -} - - static GList *yahoo_buddy_menu(GaimBuddy *buddy) { GList *m = NULL; @@ -2713,11 +2699,6 @@ yahoo_initiate_conference, NULL); m = g_list_append(m, act); - /* FIXME: remove this when the ui does it for us. */ - act = gaim_blist_node_action_new(_("Send File"), - yahoo_ask_send_file_menu, NULL); - m = g_list_append(m, act); - if (yahoo_friend_get_game(f)) { const char *game = yahoo_friend_get_game(f); char *room; @@ -3232,13 +3213,6 @@ g_free(gpo); } -#if 0 -static gboolean yahoo_has_send_file(GaimConnection *gc, const char *who) -{ - return TRUE; -} -#endif - static GaimPlugin *my_protocol = NULL; static GaimPluginProtocolInfo prpl_info = @@ -3293,16 +3267,13 @@ yahoo_set_buddy_icon, NULL, /* void (*remove_group)(GaimConnection *gc, const char *group);*/ NULL, /* char *(*get_cb_real_name)(GaimConnection *gc, int id, const char *who); */ -#if 0 - yahoo_ask_send_file, - yahoo_send_file, - yahoo_has_send_file, -#endif NULL, NULL, yahoo_roomlist_get_list, yahoo_roomlist_cancel, - yahoo_roomlist_expand_category + yahoo_roomlist_expand_category, + NULL, + yahoo_send_file }; static GaimPluginInfo info =
--- a/src/protocols/yahoo/yahoo_filexfer.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/yahoo/yahoo_filexfer.c Wed Jul 07 01:49:39 2004 +0000 @@ -455,38 +455,12 @@ gaim_xfer_request(xfer); } -void yahoo_ask_send_file(GaimConnection *gc, const char *who) -{ - GaimXfer *xfer; - struct yahoo_xfer_data *xfer_data; - - xfer_data = g_new0(struct yahoo_xfer_data, 1); - xfer_data->gc = gc; - - - /* Build the file transfer handle. */ - xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who); - xfer->data = xfer_data; - - /* Setup our I/O op functions */ - gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init); - gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start); - gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end); - gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); - gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); - gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read); - gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write); - - /* Now perform the request */ - gaim_xfer_request(xfer); -} - void yahoo_send_file(GaimConnection *gc, const char *who, const char *file) { GaimXfer *xfer; struct yahoo_xfer_data *xfer_data; - if (!who || !file) + if (!who) return; xfer_data = g_new0(struct yahoo_xfer_data, 1); @@ -507,5 +481,8 @@ gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write); /* Now perform the request */ - gaim_xfer_request_accepted(xfer, file); + if (file) + gaim_xfer_request_accepted(xfer, file); + else + gaim_xfer_request(xfer); }
--- a/src/protocols/yahoo/yahoo_filexfer.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/protocols/yahoo/yahoo_filexfer.h Wed Jul 07 01:49:39 2004 +0000 @@ -30,14 +30,6 @@ * * @param gc The GaimConnection handle. * @param who Who are we sending it to? - * @param file What file? + * @param file What file? If NULL, user will choose after this call. */ void yahoo_send_file(GaimConnection *gc, const char *who, const char *file); - -/** - * Sends a file, that the user chooses after this call. - * - * @param gc The GaimConnection. - * @param who Who are we going to send a file to? - */ -void yahoo_ask_send_file(GaimConnection *gc, const char *who);
--- a/src/prpl.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/prpl.h Wed Jul 07 01:49:39 2004 +0000 @@ -286,6 +286,10 @@ struct _GaimRoomlist *(*roomlist_get_list)(GaimConnection *gc); void (*roomlist_cancel)(struct _GaimRoomlist *list); void (*roomlist_expand_category)(struct _GaimRoomlist *list, struct _GaimRoomlistRoom *category); + + /* file transfer callbacks */ + gboolean (*can_receive_file)(GaimConnection *, const char *who); + void (*send_file)(GaimConnection *, const char *who, const char *filename); }; #define GAIM_IS_PROTOCOL_PLUGIN(plugin) \
--- a/src/server.c Wed Jul 07 01:35:27 2004 +0000 +++ b/src/server.c Wed Jul 07 01:49:39 2004 +0000 @@ -1588,3 +1588,14 @@ g_free(buf); g_free(buffy); } + +void serv_send_file(GaimConnection *gc, const char *who, const char *file) +{ + GaimPluginProtocolInfo *prpl_info = NULL; + + if (gc != NULL && gc->prpl != NULL) + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (prpl_info && prpl_info->send_file) + prpl_info->send_file(gc, who, file); +}
--- a/src/server.h Wed Jul 07 01:35:27 2004 +0000 +++ b/src/server.h Wed Jul 07 01:49:39 2004 +0000 @@ -95,6 +95,7 @@ void serv_got_chat_left(GaimConnection *g, int id); void serv_got_chat_in(GaimConnection *g, int id, const char *who, int whisper, const char *message, time_t mtime); +void serv_send_file(GaimConnection *gc, const char *who, const char *file); #ifdef __cplusplus }