annotate src/protocols/sametime/sametime.c @ 11943:0110fc7c6a8a

[gaim-migrate @ 14234] Bringing things up to date with the last Meanwhile release, 0.5.0 and the last gaim-meanwhile plugin release, 1.2.5 (which should be the last plugin release against oldstatus, if all goes well with HEAD and no major bugs crop up) It builds, so that's a start. The status bits that have been empty since the first import of the sametime stuff are still empty, but I'm going to try and fill those in tomorrow. I've decided to try and start using HEAD actively, to encourage me to get this freaking prpl fully functional. committer: Tailor Script <tailor@pidgin.im>
author Christopher O'Brien <siege@pidgin.im>
date Wed, 02 Nov 2005 03:39:03 +0000
parents fa742ad8068c
children 47e1723a89d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2 /*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3 Meanwhile Protocol Plugin for Gaim
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4 Adds Lotus Sametime support to Gaim using the Meanwhile library
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
6 Copyright (C) 2004 Christopher (siege) O'Brien <siege@preoccupied.net>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
7
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
8 This program is free software; you can redistribute it and/or modify
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
10 the Free Software Foundation; either version 2 of the License, or (at
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
11 your option) any later version.
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
12
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful, but
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
14 WITHOUT ANY WARRANTY; without even the implied warranty of
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
16 General Public License for more details.
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
17
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
19 along with this program; if not, write to the Free Software
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
21 USA.
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
22 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
23
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
24
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
25 /* system includes */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
26 #include <stdlib.h>
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
27 #include <time.h>
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
28
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
29 /* glib includes */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
30 #include <glib.h>
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
31 #include <glib/ghash.h>
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
32 #include <glib/glist.h>
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
33
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
34 /* gaim includes */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
35 #include <internal.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
36 #include <gaim.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
37 #include <config.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
38
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
39 #include <account.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
40 #include <accountopt.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
41 #include <conversation.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
42 #include <debug.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
43 #include <ft.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
44 #include <imgstore.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
45 #include <mime.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
46 #include <notify.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
47 #include <plugin.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
48 #include <privacy.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
49 #include <prpl.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
50 #include <request.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
51 #include <util.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
52 #include <version.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
53
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
54 /* meanwhile includes */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
55 #include <mw_cipher.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
56 #include <mw_common.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
57 #include <mw_error.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
58 #include <mw_service.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
59 #include <mw_session.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
60 #include <mw_srvc_aware.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
61 #include <mw_srvc_conf.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
62 #include <mw_srvc_ft.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
63 #include <mw_srvc_im.h>
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
64 #include <mw_srvc_place.h>
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
65 #include <mw_srvc_resolve.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
66 #include <mw_srvc_store.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
67 #include <mw_st_list.h>
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
68
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
69 /* project includes */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
70 #include "sametime.h"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
71
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
72
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
73 /* considering that there's no display of this information for prpls,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
74 I don't know why I even bother providing these. Oh valiant reader,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
75 I do it all for you. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
76 /* scratch that, I just added it to the prpl options panel */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
77 #define PLUGIN_ID "prpl-meanwhile"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
78 #define PLUGIN_NAME "Sametime"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
79 #define PLUGIN_SUMMARY "Sametime Protocol Plugin"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
80 #define PLUGIN_DESC "Open implementation of a Lotus Sametime client"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
81 #define PLUGIN_AUTHOR "Christopher (siege) O'Brien <siege@preoccupied.net>"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
82 #define PLUGIN_HOMEPAGE "http://meanwhile.sourceforge.net/"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
83
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
84
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
85 /* plugin preference names */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
86 #define MW_PRPL_OPT_BASE "/plugins/prpl/meanwhile"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
87 #define MW_PRPL_OPT_BLIST_ACTION MW_PRPL_OPT_BASE "/blist_action"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
88 #define MW_PRPL_OPT_PSYCHIC MW_PRPL_OPT_BASE "/psychic"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
89 #define MW_PRPL_OPT_FORCE_LOGIN MW_PRPL_OPT_BASE "/force_login"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
90 #define MW_PRPL_OPT_SAVE_DYNAMIC MW_PRPL_OPT_BASE "/save_dynamic"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
91
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
92
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
93 /* stages of connecting-ness */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
94 #define MW_CONNECT_STEPS 9
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
95
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
96
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
97 /* stages of conciousness */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
98 #define MW_STATE_OFFLINE "offline"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
99 #define MW_STATE_ACTIVE "active"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
100 #define MW_STATE_AWAY "away"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
101 #define MW_STATE_BUSY "dnd"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
102 #define MW_STATE_MESSAGE "message"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
103 #define MW_STATE_ENLIGHTENED "buddha"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
104
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
105
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
106 /* keys to get/set chat information */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
107 #define CHAT_KEY_CREATOR "chat.creator"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
108 #define CHAT_KEY_NAME "chat.name"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
109 #define CHAT_KEY_TOPIC "chat.topic"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
110 #define CHAT_KEY_INVITE "chat.invite"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
111 #define CHAT_KEY_IS_PLACE "chat.is_place"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
112
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
113
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
114 /* key for associating a mwLoginType with a buddy */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
115 #define BUDDY_KEY_CLIENT "meanwhile.client"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
116
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
117 /* store the remote alias so that we can re-create it easily */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
118 #define BUDDY_KEY_NAME "meanwhile.shortname"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
119
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
120 /* enum mwSametimeUserType */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
121 #define BUDDY_KEY_TYPE "meanwhile.type"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
122
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
123
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
124 /* key for the real group name for a meanwhile group */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
125 #define GROUP_KEY_NAME "meanwhile.group"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
126
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
127 /* enum mwSametimeGroupType */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
128 #define GROUP_KEY_TYPE "meanwhile.type"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
129
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
130 /* NAB group owning account */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
131 #define GROUP_KEY_OWNER "meanwhile.account"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
132
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
133 /* key gtk blist uses to indicate a collapsed group */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
134 #define GROUP_KEY_COLLAPSED "collapsed"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
135
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
136
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
137 /* verification replacement */
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
138 #define mwSession_NO_SECRET "meanwhile.no_secret"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
139
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
140
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
141 /* keys to get/set gaim plugin information */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
142 #define MW_KEY_HOST "server"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
143 #define MW_KEY_PORT "port"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
144 #define MW_KEY_ACTIVE_MSG "active_msg"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
145 #define MW_KEY_AWAY_MSG "away_msg"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
146 #define MW_KEY_BUSY_MSG "busy_msg"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
147 #define MW_KEY_MSG_PROMPT "msg_prompt"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
148 #define MW_KEY_INVITE "conf_invite"
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
149 #define MW_KEY_ENCODING "encoding"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
150 #define MW_KEY_FORCE "force_login"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
151
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
152
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
153 /** number of seconds from the first blist change before a save to the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
154 storage service occurs. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
155 #define BLIST_SAVE_SECONDS 15
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
156
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
157
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
158 /** the possible buddy list storage settings */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
159 enum blist_choice {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
160 blist_choice_LOCAL = 1, /**< local only */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
161 blist_choice_MERGE = 2, /**< merge from server */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
162 blist_choice_STORE = 3, /**< merge from and save to server */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
163 blist_choice_SYNCH = 4, /**< sync with server */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
164 };
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
165
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
166
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
167 /** the default blist storage option */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
168 #define BLIST_CHOICE_DEFAULT blist_choice_SYNCH
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
169
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
170
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
171 /* testing for the above */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
172 #define BLIST_PREF_IS(n) (gaim_prefs_get_int(MW_PRPL_OPT_BLIST_ACTION)==(n))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
173 #define BLIST_PREF_IS_LOCAL() BLIST_PREF_IS(blist_choice_LOCAL)
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
174 #define BLIST_PREF_IS_MERGE() BLIST_PREF_IS(blist_choice_MERGE)
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
175 #define BLIST_PREF_IS_STORE() BLIST_PREF_IS(blist_choice_STORE)
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
176 #define BLIST_PREF_IS_SYNCH() BLIST_PREF_IS(blist_choice_SYNCH)
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
177
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
178
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
179 /* debugging output */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
180 #define DEBUG_ERROR(a...) gaim_debug_error(G_LOG_DOMAIN, a)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
181 #define DEBUG_INFO(a...) gaim_debug_info(G_LOG_DOMAIN, a)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
182 #define DEBUG_MISC(a...) gaim_debug_misc(G_LOG_DOMAIN, a)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
183 #define DEBUG_WARN(a...) gaim_debug_warning(G_LOG_DOMAIN, a)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
184
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
185
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
186 /** ensure non-null strings */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
187 #ifndef NSTR
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
188 # define NSTR(str) ((str)? (str): "(null)")
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
189 #endif
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
190
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
191
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
192 /** calibrates distinct secure channel nomenclature */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
193 static const unsigned char no_secret[] = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
194 0x2d, 0x2d, 0x20, 0x73, 0x69, 0x65, 0x67, 0x65,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
195 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x6a,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
196 0x65, 0x6e, 0x6e, 0x69, 0x20, 0x61, 0x6e, 0x64,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
197 0x20, 0x7a, 0x6f, 0x65, 0x20, 0x2d, 0x2d, 0x00,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
198 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
199
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
200
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
201 /** handler IDs from g_log_set_handler in mw_plugin_init */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
202 static guint log_handler[2] = { 0, 0 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
203
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
204
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
205 /** the gaim plugin data.
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
206 available as gc->proto_data and mwSession_getClientData */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
207 struct mwGaimPluginData {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
208 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
209
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
210 struct mwServiceAware *srvc_aware;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
211 struct mwServiceConference *srvc_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
212 struct mwServiceFileTransfer *srvc_ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
213 struct mwServiceIm *srvc_im;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
214 struct mwServicePlace *srvc_place;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
215 struct mwServiceResolve *srvc_resolve;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
216 struct mwServiceStorage *srvc_store;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
217
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
218 /** map of GaimGroup:mwAwareList and mwAwareList:GaimGroup */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
219 GHashTable *group_list_map;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
220
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
221 /** event id for the buddy list save callback */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
222 guint save_event;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
223
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
224 /** socket fd */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
225 int socket;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
226
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
227 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
228 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
229
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
230
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
231 /* blist and aware functions */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
232
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
233 static void blist_export(GaimConnection *gc, struct mwSametimeList *stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
234
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
235 static void blist_store(struct mwGaimPluginData *pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
236
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
237 static void blist_schedule(struct mwGaimPluginData *pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
238
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
239 static void blist_merge(GaimConnection *gc, struct mwSametimeList *stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
240
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
241 static void blist_sync(GaimConnection *gc, struct mwSametimeList *stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
242
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
243 static gboolean buddy_is_external(GaimBuddy *b);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
244
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
245 static void buddy_add(struct mwGaimPluginData *pd, GaimBuddy *buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
246
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
247 static GaimBuddy *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
248 buddy_ensure(GaimConnection *gc, GaimGroup *group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
249 struct mwSametimeUser *stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
250
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
251 static void group_add(struct mwGaimPluginData *pd, GaimGroup *group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
252
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
253 static GaimGroup *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
254 group_ensure(GaimConnection *gc, struct mwSametimeGroup *stgroup);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
255
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
256 static struct mwAwareList *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
257 list_ensure(struct mwGaimPluginData *pd, GaimGroup *group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
258
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
259
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
260 /* session functions */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
261
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
262 static struct mwSession *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
263 gc_to_session(GaimConnection *gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
264
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
265 static GaimConnection *session_to_gc(struct mwSession *session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
266
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
267
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
268 /* conference functions */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
269
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
270 static struct mwConference *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
271 conf_find_by_id(struct mwGaimPluginData *pd, int id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
272
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
273
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
274 /* conversation functions */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
275
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
276 struct convo_msg {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
277 enum mwImSendType type;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
278 gpointer data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
279 GDestroyNotify clear;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
280 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
281
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
282
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
283 struct convo_data {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
284 struct mwConversation *conv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
285 GList *queue; /**< outgoing message queue, list of convo_msg */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
286 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
287
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
288 static void convo_data_new(struct mwConversation *conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
289
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
290 static void convo_data_free(struct convo_data *conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
291
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
292 static void convo_features(struct mwConversation *conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
293
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
294 static GaimConversation *convo_get_gconv(struct mwConversation *conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
295
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
296
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
297 /* resolved id */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
298
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
299 struct resolved_id {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
300 char *id;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
301 char *name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
302 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
303
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
304 static struct resolved_id *resolved_id_new(const char *id, const char *name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
305
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
306 static void resolved_id_free(struct resolved_id *rid);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
307
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
308
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
309 /* connection functions */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
310
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
311 static void connect_cb(gpointer data, gint source, GaimInputCondition cond);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
312
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
313
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
314 /* ----- session ------ */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
315
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
316
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
317 /** resolves a mwSession from a GaimConnection */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
318 static struct mwSession *gc_to_session(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
319 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
320
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
321 g_return_val_if_fail(gc != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
322
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
323 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
324 g_return_val_if_fail(pd != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
325
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
326 return pd->session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
327 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
328
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
329
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
330 /** resolves a GaimConnection from a mwSession */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
331 static GaimConnection *session_to_gc(struct mwSession *session) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
332 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
333
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
334 g_return_val_if_fail(session != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
335
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
336 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
337 g_return_val_if_fail(pd != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
338
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
339 return pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
340 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
341
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
342
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
343 static int mw_session_io_write(struct mwSession *session,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
344 const char *buf, gsize len) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
345 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
346 int ret = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
347
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
348 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
349
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
350 /* socket was already closed. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
351 if(pd->socket == 0)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
352 return 1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
353
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
354 while(len) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
355 ret = write(pd->socket, buf, len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
356 if(ret <= 0) break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
357 len -= ret;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
358 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
359
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
360 if(len > 0) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
361 DEBUG_ERROR("write returned %i, %i bytes left unwritten\n", ret, len);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
362 gaim_connection_error(pd->gc, _("Connection closed (writing)"));
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
363
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
364 #if 0
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
365 close(pd->socket);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
366 pd->socket = 0;
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
367 #endif
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
368
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
369 return -1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
370 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
371
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
372 return 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
373 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
374
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
375
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
376 static void mw_session_io_close(struct mwSession *session) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
377 struct mwGaimPluginData *pd;
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
378 GaimConnection *gc;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
379
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
380 pd = mwSession_getClientData(session);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
381 g_return_if_fail(pd != NULL);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
382
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
383 gc = pd->gc;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
384
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
385 if(pd->socket) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
386 close(pd->socket);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
387 pd->socket = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
388 }
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
389
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
390 if(gc->inpa) {
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
391 gaim_input_remove(gc->inpa);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
392 gc->inpa = 0;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
393 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
394 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
395
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
396
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
397 static void mw_session_clear(struct mwSession *session) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
398 ; /* nothing for now */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
399 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
400
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
401
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
402 /* ----- aware list ----- */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
403
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
404
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
405 static void blist_resolve_alias_cb(struct mwServiceResolve *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
406 guint32 id, guint32 code, GList *results,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
407 gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
408 struct mwResolveResult *result;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
409 struct mwResolveMatch *match;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
410
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
411 g_return_if_fail(results != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
412
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
413 result = results->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
414 g_return_if_fail(result != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
415 g_return_if_fail(result->matches != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
416
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
417 match = result->matches->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
418 g_return_if_fail(match != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
419
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
420 gaim_blist_server_alias_buddy(data, match->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
421 gaim_blist_node_set_string(data, BUDDY_KEY_NAME, match->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
422 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
423
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
424
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
425 static void mw_aware_list_on_aware(struct mwAwareList *list,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
426 struct mwAwareSnapshot *aware) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
427
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
428 GaimConnection *gc;
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
429 GaimAccount *acct;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
430
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
431 struct mwGaimPluginData *pd;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
432 time_t idle;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
433 guint stat;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
434 const char *id;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
435 const char *status = MW_STATE_ACTIVE;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
436
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
437 gc = mwAwareList_getClientData(list);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
438 acct = gaim_connection_get_account(gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
439
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
440 pd = gc->proto_data;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
441 idle = aware->status.time;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
442 stat = aware->status.status;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
443 id = aware->id.user;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
444
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
445 /* not sure which client sends this yet */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
446 if(idle == 0xdeadbeef) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
447 /* knock knock!
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
448 who's there?
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
449 rude interrupting cow.
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
450 rude interr...
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
451 MOO! */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
452 idle = -1;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
453 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
454
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
455 switch(stat) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
456 case mwStatus_ACTIVE:
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
457 status = MW_STATE_ACTIVE;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
458 idle = 0;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
459 break;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
460
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
461 case mwStatus_IDLE:
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
462 if(! idle) idle = -1;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
463 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
464
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
465 case mwStatus_AWAY:
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
466 status = MW_STATE_AWAY;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
467 break;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
468
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
469 case mwStatus_BUSY:
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
470 status = MW_STATE_BUSY;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
471 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
472 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
473
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
474 /* NAB group members */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
475 if(aware->group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
476 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
477 GaimBuddy *buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
478 GaimBlistNode *bnode;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
479
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
480 group = g_hash_table_lookup(pd->group_list_map, list);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
481 buddy = gaim_find_buddy_in_group(acct, id, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
482 bnode = (GaimBlistNode *) buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
483
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
484 if(! buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
485 struct mwServiceResolve *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
486 GList *query;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
487
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
488 buddy = gaim_buddy_new(acct, id, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
489 gaim_blist_add_buddy(buddy, NULL, group, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
490
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
491 bnode = (GaimBlistNode *) buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
492
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
493 srvc = pd->srvc_resolve;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
494 query = g_list_append(NULL, (char *) id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
495
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
496 mwServiceResolve_resolve(srvc, query, mwResolveFlag_USERS,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
497 blist_resolve_alias_cb, buddy, NULL);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
498 g_list_free(query);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
499 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
500
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
501 gaim_blist_node_set_int(bnode, BUDDY_KEY_TYPE, mwSametimeUser_NORMAL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
502 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
503
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
504 gaim_prpl_got_user_status(acct, id, status, NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
505 gaim_prpl_got_user_idle(acct, id, !!idle, idle);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
506 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
507
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
508
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
509 static void mw_aware_list_on_attrib(struct mwAwareList *list,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
510 struct mwAwareIdBlock *id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
511 struct mwAwareAttribute *attrib) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
512
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
513 ; /* nothing. We'll get attribute data as we need it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
514 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
515
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
516
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
517 static void mw_aware_list_clear(struct mwAwareList *list) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
518 ; /* nothing for now */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
519 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
520
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
521
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
522 static struct mwAwareListHandler mw_aware_list_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
523 .on_aware = mw_aware_list_on_aware,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
524 .on_attrib = mw_aware_list_on_attrib,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
525 .clear = mw_aware_list_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
526 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
527
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
528
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
529 /** Ensures that an Aware List is associated with the given group, and
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
530 returns that list. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
531 static struct mwAwareList *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
532 list_ensure(struct mwGaimPluginData *pd, GaimGroup *group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
533
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
534 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
535
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
536 g_return_val_if_fail(pd != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
537 g_return_val_if_fail(group != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
538
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
539 list = g_hash_table_lookup(pd->group_list_map, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
540 if(! list) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
541 list = mwAwareList_new(pd->srvc_aware, &mw_aware_list_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
542 mwAwareList_setClientData(list, pd->gc, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
543
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
544 mwAwareList_watchAttributes(list,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
545 mwAttribute_AV_PREFS_SET,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
546 mwAttribute_MICROPHONE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
547 mwAttribute_SPEAKERS,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
548 mwAttribute_VIDEO_CAMERA,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
549 mwAttribute_FILE_TRANSFER,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
550 NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
551
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
552 g_hash_table_replace(pd->group_list_map, group, list);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
553 g_hash_table_insert(pd->group_list_map, list, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
554 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
555
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
556 return list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
557 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
558
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
559
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
560 static void blist_export(GaimConnection *gc, struct mwSametimeList *stlist) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
561 /* - find the account for this connection
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
562 - iterate through the buddy list
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
563 - add each buddy matching this account to the stlist
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
564 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
565
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
566 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
567 GaimBuddyList *blist;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
568 GaimBlistNode *gn, *cn, *bn;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
569 GaimGroup *grp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
570 GaimBuddy *bdy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
571
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
572 struct mwSametimeGroup *stg = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
573 struct mwIdBlock idb = { NULL, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
574
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
575 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
576 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
577
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
578 blist = gaim_get_blist();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
579 g_return_if_fail(blist != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
580
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
581 for(gn = blist->root; gn; gn = gn->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
582 const char *owner;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
583 const char *gname;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
584 enum mwSametimeGroupType gtype;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
585 gboolean gopen;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
586
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
587 if(! GAIM_BLIST_NODE_IS_GROUP(gn)) continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
588 grp = (GaimGroup *) gn;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
589
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
590 /* the group's type (normal or dynamic) */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
591 gtype = gaim_blist_node_get_int(gn, GROUP_KEY_TYPE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
592 if(! gtype) gtype = mwSametimeGroup_NORMAL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
593
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
594 /* if it's a normal group with none of our people in it, skip it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
595 if(gtype == mwSametimeGroup_NORMAL && !gaim_group_on_account(grp, acct))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
596 continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
597
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
598 /* if the group has an owner and we're not it, skip it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
599 owner = gaim_blist_node_get_string(gn, GROUP_KEY_OWNER);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
600 if(owner && strcmp(owner, gaim_account_get_username(acct)))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
601 continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
602
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
603 /* the group's actual name may be different from the gaim group's
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
604 name. Find whichever is there */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
605 gname = gaim_blist_node_get_string(gn, GROUP_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
606 if(! gname) gname = grp->name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
607
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
608 /* we save this, but never actually honor it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
609 gopen = ! gaim_blist_node_get_bool(gn, GROUP_KEY_COLLAPSED);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
610
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
611 stg = mwSametimeGroup_new(stlist, gtype, gname);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
612 mwSametimeGroup_setAlias(stg, grp->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
613 mwSametimeGroup_setOpen(stg, gopen);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
614
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
615 /* don't attempt to put buddies in a dynamic group, it breaks
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
616 other clients */
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
617 if(gtype == mwSametimeGroup_DYNAMIC)
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
618 continue;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
619
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
620 for(cn = gn->child; cn; cn = cn->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
621 if(! GAIM_BLIST_NODE_IS_CONTACT(cn)) continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
622
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
623 for(bn = cn->child; bn; bn = bn->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
624 if(! GAIM_BLIST_NODE_IS_BUDDY(bn)) continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
625 if(! GAIM_BLIST_NODE_SHOULD_SAVE(bn)) continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
626
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
627 bdy = (GaimBuddy *) bn;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
628
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
629 if(bdy->account == acct) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
630 struct mwSametimeUser *stu;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
631 enum mwSametimeUserType utype;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
632
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
633 idb.user = bdy->name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
634
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
635 utype = gaim_blist_node_get_int(bn, BUDDY_KEY_TYPE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
636 if(! utype) utype = mwSametimeUser_NORMAL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
637
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
638 stu = mwSametimeUser_new(stg, utype, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
639 mwSametimeUser_setShortName(stu, bdy->server_alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
640 mwSametimeUser_setAlias(stu, bdy->alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
641 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
642 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
643 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
644 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
645 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
646
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
647
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
648 static void blist_store(struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
649
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
650 struct mwSametimeList *stlist;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
651 struct mwServiceStorage *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
652 struct mwStorageUnit *unit;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
653
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
654 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
655
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
656 struct mwPutBuffer *b;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
657 struct mwOpaque *o;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
658
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
659 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
660
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
661 srvc = pd->srvc_store;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
662 g_return_if_fail(srvc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
663
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
664 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
665
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
666 if(BLIST_PREF_IS_LOCAL() || BLIST_PREF_IS_MERGE()) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
667 DEBUG_INFO("preferences indicate not to save remote blist\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
668 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
669
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
670 } else if(MW_SERVICE_IS_DEAD(srvc)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
671 DEBUG_INFO("aborting save of blist: storage service is not alive\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
672 return;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
673
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
674 } else if(BLIST_PREF_IS_STORE() || BLIST_PREF_IS_SYNCH()) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
675 DEBUG_INFO("saving remote blist\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
676
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
677 } else {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
678 g_return_if_reached();
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
679 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
680
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
681 /* create and export to a list object */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
682 stlist = mwSametimeList_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
683 blist_export(gc, stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
684
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
685 /* write it to a buffer */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
686 b = mwPutBuffer_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
687 mwSametimeList_put(b, stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
688 mwSametimeList_free(stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
689
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
690 /* put the buffer contents into a storage unit */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
691 unit = mwStorageUnit_new(mwStore_AWARE_LIST);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
692 o = mwStorageUnit_asOpaque(unit);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
693 mwPutBuffer_finalize(o, b);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
694
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
695 /* save the storage unit to the service */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
696 mwServiceStorage_save(srvc, unit, NULL, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
697 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
698
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
699
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
700 static gboolean blist_save_cb(gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
701 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
702
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
703 blist_store(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
704 pd->save_event = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
705 return FALSE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
706 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
707
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
708
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
709 /** schedules the buddy list to be saved to the server */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
710 static void blist_schedule(struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
711 if(pd->save_event) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
712
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
713 pd->save_event = gaim_timeout_add(BLIST_SAVE_SECONDS * 1000,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
714 blist_save_cb, pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
715 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
716
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
717
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
718 static gboolean buddy_is_external(GaimBuddy *b) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
719 g_return_val_if_fail(b != NULL, FALSE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
720 return g_str_has_prefix(b->name, "@E ");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
721 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
722
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
723
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
724 /** Actually add a buddy to the aware service, and schedule the buddy
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
725 list to be saved to the server */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
726 static void buddy_add(struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
727 GaimBuddy *buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
728
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
729 struct mwAwareIdBlock idb = { mwAware_USER, (char *) buddy->name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
730 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
731
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
732 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
733 GList *add;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
734
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
735 add = g_list_prepend(NULL, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
736
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
737 group = gaim_find_buddys_group(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
738 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
739
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
740 if(mwAwareList_addAware(list, add)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
741 gaim_blist_remove_buddy(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
742 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
743
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
744 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
745
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
746 g_list_free(add);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
747 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
748
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
749
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
750 /** ensure that a GaimBuddy exists in the group with data
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
751 appropriately matching the st user entry from the st list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
752 static GaimBuddy *buddy_ensure(GaimConnection *gc, GaimGroup *group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
753 struct mwSametimeUser *stuser) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
754
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
755 struct mwGaimPluginData *pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
756 GaimBuddy *buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
757 GaimAccount *acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
758
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
759 const char *id = mwSametimeUser_getUser(stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
760 const char *name = mwSametimeUser_getShortName(stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
761 const char *alias = mwSametimeUser_getAlias(stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
762 enum mwSametimeUserType type = mwSametimeUser_getType(stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
763
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
764 g_return_val_if_fail(id != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
765 g_return_val_if_fail(strlen(id) > 0, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
766
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
767 buddy = gaim_find_buddy_in_group(acct, id, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
768 if(! buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
769 buddy = gaim_buddy_new(acct, id, alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
770
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
771 gaim_blist_add_buddy(buddy, NULL, group, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
772 buddy_add(pd, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
773 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
774
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
775 gaim_blist_alias_buddy(buddy, alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
776 gaim_blist_server_alias_buddy(buddy, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
777 gaim_blist_node_set_string((GaimBlistNode *) buddy, BUDDY_KEY_NAME, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
778 gaim_blist_node_set_int((GaimBlistNode *) buddy, BUDDY_KEY_TYPE, type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
779
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
780 return buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
781 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
782
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
783
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
784 /** add aware watch for a dynamic group */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
785 static void group_add(struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
786 GaimGroup *group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
787
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
788 struct mwAwareIdBlock idb = { mwAware_GROUP, NULL, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
789 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
790 const char *n;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
791 GList *add;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
792
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
793 n = gaim_blist_node_get_string((GaimBlistNode *) group, GROUP_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
794 if(! n) n = group->name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
795
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
796 idb.user = (char *) n;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
797 add = g_list_prepend(NULL, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
798
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
799 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
800 mwAwareList_addAware(list, add);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
801 g_list_free(add);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
802 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
803
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
804
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
805 /** ensure that a GaimGroup exists in the blist with data
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
806 appropriately matching the st group entry from the st list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
807 static GaimGroup *group_ensure(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
808 struct mwSametimeGroup *stgroup) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
809 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
810 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
811 GaimBlistNode *gn;
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
812 const char *name, *alias, *owner;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
813 enum mwSametimeGroupType type;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
814
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
815 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
816 owner = gaim_account_get_username(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
817
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
818 name = mwSametimeGroup_getName(stgroup);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
819 alias = mwSametimeGroup_getAlias(stgroup);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
820 type = mwSametimeGroup_getType(stgroup);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
821
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
822 group = gaim_find_group(alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
823 if(! group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
824 group = gaim_group_new(alias);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
825 gaim_blist_add_group(group, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
826 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
827
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
828 gn = (GaimBlistNode *) group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
829
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
830 gaim_blist_node_set_string(gn, GROUP_KEY_NAME, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
831 gaim_blist_node_set_int(gn, GROUP_KEY_TYPE, type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
832
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
833 if(type == mwSametimeGroup_DYNAMIC) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
834 gaim_blist_node_set_string(gn, GROUP_KEY_OWNER, owner);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
835 group_add(gc->proto_data, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
836 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
837
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
838 return group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
839 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
840
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
841
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
842 /** merge the entries from a st list into the gaim blist */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
843 static void blist_merge(GaimConnection *gc, struct mwSametimeList *stlist) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
844 struct mwSametimeGroup *stgroup;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
845 struct mwSametimeUser *stuser;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
846
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
847 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
848 GaimBuddy *buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
849
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
850 GList *gl, *gtl, *ul, *utl;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
851
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
852 gl = gtl = mwSametimeList_getGroups(stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
853 for(; gl; gl = gl->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
854
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
855 stgroup = (struct mwSametimeGroup *) gl->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
856 group = group_ensure(gc, stgroup);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
857
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
858 ul = utl = mwSametimeGroup_getUsers(stgroup);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
859 for(; ul; ul = ul->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
860
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
861 stuser = (struct mwSametimeUser *) ul->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
862 buddy = buddy_ensure(gc, group, stuser);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
863 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
864 g_list_free(utl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
865 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
866 g_list_free(gtl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
867 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
868
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
869
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
870 /** remove all buddies on account from group. If del is TRUE and group
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
871 is left empty, remove group as well */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
872 static void group_clear(GaimGroup *group, GaimAccount *acct, gboolean del) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
873 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
874 GList *prune = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
875 GaimBlistNode *gn, *cn, *bn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
876
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
877 g_return_if_fail(group != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
878
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
879 DEBUG_INFO("clearing members from pruned group %s\n", NSTR(group->name));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
880
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
881 gc = gaim_account_get_connection(acct);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
882 g_return_if_fail(gc != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
883
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
884 gn = (GaimBlistNode *) group;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
885
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
886 for(cn = gn->child; cn; cn = cn->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
887 if(! GAIM_BLIST_NODE_IS_CONTACT(cn)) continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
888
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
889 for(bn = cn->child; bn; bn = bn->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
890 GaimBuddy *gb = (GaimBuddy *) bn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
891
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
892 if(! GAIM_BLIST_NODE_IS_BUDDY(bn)) continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
893
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
894 if(gb->account == acct) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
895 DEBUG_INFO("clearing %s from group\n", NSTR(gb->name));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
896 prune = g_list_prepend(prune, gb);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
897 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
898 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
899 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
900
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
901 /* quickly unsubscribe from presence for the entire group */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
902 gaim_account_remove_group(acct, group);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
903
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
904 /* remove blist entries that need to go */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
905 while(prune) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
906 gaim_blist_remove_buddy(prune->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
907 prune = g_list_delete_link(prune, prune);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
908 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
909 DEBUG_INFO("cleared buddies\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
910
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
911 /* optionally remove group from blist */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
912 if(del && !gaim_blist_get_group_size(group, TRUE)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
913 DEBUG_INFO("removing empty group\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
914 gaim_blist_remove_group(group);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
915 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
916 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
917
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
918
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
919 /** prune out group members that shouldn't be there */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
920 static void group_prune(GaimConnection *gc, GaimGroup *group,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
921 struct mwSametimeGroup *stgroup) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
922
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
923 GaimAccount *acct;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
924 GaimBlistNode *gn, *cn, *bn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
925
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
926 GHashTable *stusers;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
927 GList *prune = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
928 GList *ul, *utl;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
929
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
930 g_return_if_fail(group != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
931
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
932 DEBUG_INFO("pruning membership of group %s\n", NSTR(group->name));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
933
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
934 acct = gaim_connection_get_account(gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
935 g_return_if_fail(acct != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
936
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
937 stusers = g_hash_table_new(g_str_hash, g_str_equal);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
938
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
939 /* build a hash table for quick lookup while pruning the group
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
940 contents */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
941 utl = mwSametimeGroup_getUsers(stgroup);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
942 for(ul = utl; ul; ul = ul->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
943 const char *id = mwSametimeUser_getUser(ul->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
944 g_hash_table_insert(stusers, (char *) id, ul->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
945 DEBUG_INFO("server copy has %s\n", NSTR(id));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
946 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
947 g_list_free(utl);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
948
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
949 gn = (GaimBlistNode *) group;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
950
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
951 for(cn = gn->child; cn; cn = cn->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
952 if(! GAIM_BLIST_NODE_IS_CONTACT(cn)) continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
953
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
954 for(bn = cn->child; bn; bn = bn->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
955 GaimBuddy *gb = (GaimBuddy *) bn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
956
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
957 if(! GAIM_BLIST_NODE_IS_BUDDY(bn)) continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
958
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
959 /* if the account is correct and they're not in our table, mark
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
960 them for pruning */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
961 if(gb->account == acct && !g_hash_table_lookup(stusers, gb->name)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
962 DEBUG_INFO("marking %s for pruning\n", NSTR(gb->name));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
963 prune = g_list_prepend(prune, gb);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
964 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
965 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
966 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
967 DEBUG_INFO("done marking\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
968
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
969 g_hash_table_destroy(stusers);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
970
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
971 if(prune) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
972 gaim_account_remove_buddies(acct, prune, NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
973 while(prune) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
974 gaim_blist_remove_buddy(prune->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
975 prune = g_list_delete_link(prune, prune);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
976 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
977 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
978 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
979
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
980
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
981 /** synch the entries from a st list into the gaim blist, removing any
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
982 existing buddies that aren't in the st list */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
983 static void blist_sync(GaimConnection *gc, struct mwSametimeList *stlist) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
984
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
985 GaimAccount *acct;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
986 GaimBuddyList *blist;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
987 GaimBlistNode *gn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
988
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
989 GHashTable *stgroups;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
990 GList *g_prune = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
991
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
992 GList *gl, *gtl;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
993
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
994 const char *acct_n;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
995
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
996 DEBUG_INFO("synchronizing local buddy list from server list\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
997
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
998 acct = gaim_connection_get_account(gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
999 g_return_if_fail(acct != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1000
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1001 acct_n = gaim_account_get_username(acct);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1002
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1003 blist = gaim_get_blist();
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1004 g_return_if_fail(blist != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1005
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1006 /* build a hash table for quick lookup while pruning the local
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1007 list, mapping group name to group structure */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1008 stgroups = g_hash_table_new(g_str_hash, g_str_equal);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1009
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1010 gtl = mwSametimeList_getGroups(stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1011 for(gl = gtl; gl; gl = gl->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1012 const char *name = mwSametimeGroup_getName(gl->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1013 g_hash_table_insert(stgroups, (char *) name, gl->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1014 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1015 g_list_free(gtl);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1016
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1017 /* find all groups which should be pruned from the local list */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1018 for(gn = blist->root; gn; gn = gn->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1019 GaimGroup *grp = (GaimGroup *) gn;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1020 const char *gname, *owner;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1021 struct mwSametimeGroup *stgrp;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1022
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1023 if(! GAIM_BLIST_NODE_IS_GROUP(gn)) continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1024
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1025 /* group not belonging to this account */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1026 if(! gaim_group_on_account(grp, acct))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1027 continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1028
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1029 /* dynamic group belonging to this account. don't prune contents */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1030 owner = gaim_blist_node_get_string(gn, GROUP_KEY_OWNER);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1031 if(owner && !strcmp(owner, acct_n))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1032 continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1033
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1034 /* we actually are synching by this key as opposed to the group
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1035 title, which can be different things in the st list */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1036 gname = gaim_blist_node_get_string(gn, GROUP_KEY_NAME);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1037 if(! gname) gname = grp->name;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1038
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1039 stgrp = g_hash_table_lookup(stgroups, gname);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1040 if(! stgrp) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1041 /* remove the whole group */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1042 DEBUG_INFO("marking group %s for pruning\n", grp->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1043 g_prune = g_list_prepend(g_prune, grp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1044
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1045 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1046 /* synch the group contents */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1047 group_prune(gc, grp, stgrp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1048 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1049 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1050 DEBUG_INFO("done marking groups\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1051
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1052 /* don't need this anymore */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1053 g_hash_table_destroy(stgroups);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1054
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1055 /* prune all marked groups */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1056 while(g_prune) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1057 GaimGroup *grp = g_prune->data;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1058 GaimBlistNode *gn = (GaimBlistNode *) grp;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1059 const char *owner;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1060 gboolean del = TRUE;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1061
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1062 owner = gaim_blist_node_get_string(gn, GROUP_KEY_OWNER);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1063 if(owner && strcmp(owner, acct_n)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1064 /* it's a specialty group belonging to another account with some
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1065 of our members in it, so don't fully delete it */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1066 del = FALSE;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1067 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1068
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1069 group_clear(g_prune->data, acct, del);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1070 g_prune = g_list_delete_link(g_prune, g_prune);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1071 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1072
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1073 /* done with the pruning, let's merge in the additions */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1074 blist_merge(gc, stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1075 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1076
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1077
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1078 /** callback passed to the storage service when it's told to load the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1079 st list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1080 static void fetch_blist_cb(struct mwServiceStorage *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1081 guint32 result, struct mwStorageUnit *item,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1082 gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1083
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1084 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1085 struct mwSametimeList *stlist;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1086 struct mwSession *s;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1087
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1088 struct mwGetBuffer *b;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1089
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1090 g_return_if_fail(result == ERR_SUCCESS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1091
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1092 /* check our preferences for loading */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1093 if(BLIST_PREF_IS_LOCAL()) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1094 DEBUG_INFO("preferences indicate not to load remote buddy list\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1095 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1096 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1097
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1098 b = mwGetBuffer_wrap(mwStorageUnit_asOpaque(item));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1099
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1100 stlist = mwSametimeList_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1101 mwSametimeList_get(b, stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1102
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1103 s = mwService_getSession(MW_SERVICE(srvc));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1104
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1105 /* merge or synch depending on preferences */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1106 if(BLIST_PREF_IS_MERGE() || BLIST_PREF_IS_STORE()) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1107 blist_merge(pd->gc, stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1108
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1109 } else if(BLIST_PREF_IS_SYNCH()) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1110 blist_sync(pd->gc, stlist);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1111 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1112
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1113 mwSametimeList_free(stlist);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1114 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1115
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1116
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1117 /** callback passed to the storage service when it's told to load one
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1118 of the default status messages */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1119 static void fetch_msg_cb(struct mwServiceStorage *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1120 guint32 result, struct mwStorageUnit *item,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1121 gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1122
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1123 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1124 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1125 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1126 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1127 char *msg, *m;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1128
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1129 /* it's no big deal if these entries don't exist on the server */
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1130 if(result != ERR_SUCCESS) return;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1131
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1132 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1133
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1134 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1135 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1136
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1137 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1138 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1139
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1140 session = pd->session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1141 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1142
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1143 m = msg = mwStorageUnit_asString(item);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1144
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1145 /* only load the first (non-empty) line of the collection of
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1146 status messages */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1147 if(m && *m) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1148 while(*m && isspace(*m)) m++;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1149 if(*m) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1150 char *tail;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1151
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1152 tail = strchr(m, '\r');
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1153 if(tail) *tail = '\0';
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1154 tail = strchr(m, '\n');
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1155 if(tail) *tail = '\0';
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1156 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1157 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1158
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1159 switch(mwStorageUnit_getKey(item)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1160 case mwStore_AWAY_MESSAGES:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1161 DEBUG_INFO("setting away message to \"%s\"\n", NSTR(m));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1162 gaim_account_set_string(acct, MW_KEY_AWAY_MSG, m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1163 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1164
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1165 case mwStore_BUSY_MESSAGES:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1166 DEBUG_INFO("setting busy message to \"%s\"\n", NSTR(m));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1167 gaim_account_set_string(acct, MW_KEY_BUSY_MSG, m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1168 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1169
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1170 case mwStore_ACTIVE_MESSAGES:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1171 DEBUG_INFO("setting active message to \"%s\"\n", NSTR(m));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1172 gaim_account_set_string(acct, MW_KEY_ACTIVE_MSG, m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1173 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1174
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1175 default:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1176 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1177 g_return_if_reached();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1178 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1179
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1180 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1181 msg = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1182
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1183 #if 0
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1184 /* XXX resets the status, thus updating the message */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1185 if(!gc->away_state || !strcmp(gc->away_state, MW_STATE_ACTIVE)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1186 msg = MW_STATE_ACTIVE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1187 } else if(gc->away_state && !strcmp(gc->away_state, MW_STATE_AWAY)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1188 msg = MW_STATE_AWAY;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1189 } else if(gc->away_state && !strcmp(gc->away_state, MW_STATE_BUSY)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1190 msg = MW_STATE_BUSY;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1191 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1192
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1193 if(msg) serv_set_away(gc, msg, NULL);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1194 #endif
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1195 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1196
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1197
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1198 /** signal triggered when a conversation is opened in Gaim */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1199 static void conversation_created_cb(GaimConversation *g_conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1200 struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1201
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1202 /* we need to tell the IM service to negotiate features for the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1203 conversation right away, otherwise it'll wait until the first
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1204 message is sent before offering NotesBuddy features. Therefore
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1205 whenever Gaim creates a conversation, we'll immediately open the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1206 channel to the other side and figure out what the target can
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1207 handle. Unfortunately, this makes us vulnerable to Psychic Mode,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1208 whereas a more lazy negotiation based on the first message
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1209 would not */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1210
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1211 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1212 struct mwIdBlock who = { 0, 0 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1213 struct mwConversation *conv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1214
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1215 gc = gaim_conversation_get_gc(g_conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1216 if(pd->gc != gc)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1217 return; /* not ours */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1218
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 11257
diff changeset
1219 if(gaim_conversation_get_type(g_conv) != GAIM_CONV_TYPE_IM)
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1220 return; /* wrong type */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1221
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1222 who.user = (char *) gaim_conversation_get_name(g_conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1223 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1224
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1225 convo_features(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1226
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1227 if(mwConversation_isClosed(conv))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1228 mwConversation_open(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1229 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1230
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1231
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1232 static void blist_menu_nab(GaimBlistNode *node, gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1233 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1234 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1235
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1236 GaimGroup *group = (GaimGroup *) node;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1237
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1238 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1239 char *tmp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1240
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1241 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1242
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1243 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1244 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1245
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1246 g_return_if_fail(GAIM_BLIST_NODE_IS_GROUP(node));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1247
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1248 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1249
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1250 tmp = (char *) gaim_blist_node_get_string(node, GROUP_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1251
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1252 g_string_append_printf(str, _("<b>Group Title:</b> %s<br>"), group->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1253 g_string_append_printf(str, _("<b>Notes Group ID:</b> %s<br>"), tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1254
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1255 tmp = g_strdup_printf(_("Info for Group %s"), group->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1256
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1257 gaim_notify_formatted(gc, tmp, _("Notes Address Book Information"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1258 NULL, str->str, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1259
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1260 g_free(tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1261 g_string_free(str, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1262 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1263
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1264
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1265 /** The normal blist menu prpl function doesn't get called for groups,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1266 so we use the blist-node-extended-menu signal to trigger this
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1267 handler */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1268 static void blist_node_menu_cb(GaimBlistNode *node,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1269 GList **menu, struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1270 GaimBlistNodeAction *act;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1271
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1272 if(GAIM_BLIST_NODE_IS_GROUP(node)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1273 const char *owner;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1274 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1275
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1276 owner = gaim_blist_node_get_string(node, GROUP_KEY_OWNER);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1277 if(! owner) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1278
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1279 acct = gaim_accounts_find(owner, PLUGIN_ID);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1280 if(! acct) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1281 if(! gaim_account_is_connected(acct)) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1282 if(acct != gaim_connection_get_account(pd->gc)) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1283
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1284 act = gaim_blist_node_action_new(_("Get Notes Address Book Info"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1285 blist_menu_nab, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1286
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1287 *menu = g_list_append(*menu, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1288 *menu = g_list_append(*menu, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1289 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1290 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1291
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1292
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1293 /** Last thing to happen from a started session */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1294 static void services_starting(struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1295
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1296 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1297 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1298 struct mwStorageUnit *unit;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1299 GaimBuddyList *blist;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1300 GaimBlistNode *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1301
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1302 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1303 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1304
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1305 /* grab the buddy list from the server */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1306 unit = mwStorageUnit_new(mwStore_AWARE_LIST);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1307 mwServiceStorage_load(pd->srvc_store, unit, fetch_blist_cb, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1308
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1309 /* fetch the away/busy/active messages from the server */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1310 unit = mwStorageUnit_new(mwStore_AWAY_MESSAGES);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1311 mwServiceStorage_load(pd->srvc_store, unit, fetch_msg_cb, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1312
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1313 unit = mwStorageUnit_new(mwStore_BUSY_MESSAGES);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1314 mwServiceStorage_load(pd->srvc_store, unit, fetch_msg_cb, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1315
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1316 unit = mwStorageUnit_new(mwStore_ACTIVE_MESSAGES);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1317 mwServiceStorage_load(pd->srvc_store, unit, fetch_msg_cb, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1318
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1319 /* start watching for new conversations */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1320 gaim_signal_connect(gaim_conversations_get_handle(),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1321 "conversation-created", gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1322 GAIM_CALLBACK(conversation_created_cb), pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1323
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1324 /* watch for group extended menu items */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1325 gaim_signal_connect(gaim_blist_get_handle(),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1326 "blist-node-extended-menu", gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1327 GAIM_CALLBACK(blist_node_menu_cb), pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1328
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1329 /* find all the NAB groups and subscribe to them */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1330 blist = gaim_get_blist();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1331 for(l = blist->root; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1332 GaimGroup *group = (GaimGroup *) l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1333 enum mwSametimeGroupType gt;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1334 const char *owner;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1335
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1336 if(! GAIM_BLIST_NODE_IS_GROUP(l)) continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1337
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1338 /* if the group is ownerless, or has an owner and we're not it,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1339 skip it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1340 owner = gaim_blist_node_get_string(l, GROUP_KEY_OWNER);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1341 if(!owner || strcmp(owner, gaim_account_get_username(acct)))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1342 continue;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1343
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1344 gt = gaim_blist_node_get_int(l, GROUP_KEY_TYPE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1345 if(gt == mwSametimeGroup_DYNAMIC)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1346 group_add(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1347 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1348
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1349 /* set the aware attributes */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1350 /* indicate we understand what AV prefs are, but don't support any */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1351 mwServiceAware_setAttributeBoolean(pd->srvc_aware,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1352 mwAttribute_AV_PREFS_SET, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1353 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_MICROPHONE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1354 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_SPEAKERS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1355 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_VIDEO_CAMERA);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1356
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1357 /* ... but we can do file transfers! */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1358 mwServiceAware_setAttributeBoolean(pd->srvc_aware,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1359 mwAttribute_FILE_TRANSFER, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1360 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1361
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1362
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1363 static void session_loginRedirect(struct mwSession *session,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1364 const char *host) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1365 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1366 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1367 GaimAccount *account;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1368 guint port;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1369
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1370 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1371 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1372 account = gaim_connection_get_account(gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1373 port = gaim_account_get_int(account, MW_KEY_PORT, MW_PLUGIN_DEFAULT_PORT);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1374
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1375 if(gaim_account_get_bool(account, MW_KEY_FORCE, FALSE) ||
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1376 gaim_proxy_connect(account, host, port, connect_cb, pd)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1377
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1378 mwSession_forceLogin(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1379 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1380 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1381
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1382
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1383 /** called from mw_session_stateChange when the session's state is
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1384 mwSession_STARTED. Any finalizing of start-up stuff should go
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1385 here */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1386 static void session_started(struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1387
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1388 /* XXX setup status */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1389
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1390 /* use our services to do neat things */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1391 services_starting(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1392 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1393
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1394
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1395 static void mw_session_stateChange(struct mwSession *session,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1396 enum mwSessionState state,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1397 gpointer info) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1398 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1399 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1400 char *msg = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1401
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1402 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1403 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1404
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1405 switch(state) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1406 case mwSession_STARTING:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1407 msg = _("Sending Handshake");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1408 gaim_connection_update_progress(gc, msg, 2, MW_CONNECT_STEPS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1409 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1410
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1411 case mwSession_HANDSHAKE:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1412 msg = _("Waiting for Handshake Acknowledgement");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1413 gaim_connection_update_progress(gc, msg, 3, MW_CONNECT_STEPS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1414 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1415
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1416 case mwSession_HANDSHAKE_ACK:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1417 msg = _("Handshake Acknowledged, Sending Login");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1418 gaim_connection_update_progress(gc, msg, 4, MW_CONNECT_STEPS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1419 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1420
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1421 case mwSession_LOGIN:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1422 msg = _("Waiting for Login Acknowledgement");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1423 gaim_connection_update_progress(gc, msg, 5, MW_CONNECT_STEPS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1424 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1425
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1426 case mwSession_LOGIN_REDIR:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1427 msg = _("Login Redirected");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1428 gaim_connection_update_progress(gc, msg, 6, MW_CONNECT_STEPS);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1429 session_loginRedirect(session, info);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1430 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1431
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1432 case mwSession_LOGIN_CONT:
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1433 msg = _("Forcing Login");
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1434 gaim_connection_update_progress(gc, msg, 7, MW_CONNECT_STEPS);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1435
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1436 case mwSession_LOGIN_ACK:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1437 msg = _("Login Acknowledged");
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1438 gaim_connection_update_progress(gc, msg, 8, MW_CONNECT_STEPS);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1439 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1440
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1441 case mwSession_STARTED:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1442 msg = _("Connected to Sametime Community Server");
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1443 gaim_connection_update_progress(gc, msg, 9, MW_CONNECT_STEPS);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1444 gaim_connection_set_state(gc, GAIM_CONNECTED);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1445
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1446 session_started(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1447 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1448
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1449 case mwSession_STOPPING:
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1450 if(GPOINTER_TO_UINT(info) & ERR_FAILURE) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1451 msg = mwError(GPOINTER_TO_UINT(info));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1452 gaim_connection_error(gc, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1453 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1454 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1455 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1456
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1457 case mwSession_STOPPED:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1458 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1459
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1460 case mwSession_UNKNOWN:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1461 default:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1462 DEBUG_WARN("session in unknown state\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1463 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1464 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1465
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1466
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1467 static void mw_session_setPrivacyInfo(struct mwSession *session) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1468 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1469 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1470 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1471 struct mwPrivacyInfo *privacy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1472 GSList *l, **ll;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1473 guint count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1474
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1475 DEBUG_INFO("privacy information set from server\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1476
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1477 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1478
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1479 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1480 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1481
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1482 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1483 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1484
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1485 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1486 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1487
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1488 privacy = mwSession_getPrivacyInfo(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1489 count = privacy->count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1490
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1491 ll = (privacy->deny)? &acct->deny: &acct->permit;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1492 for(l = *ll; l; l = l->next) g_free(l->data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1493 g_slist_free(*ll);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1494 l = *ll = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1495
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1496 while(count--) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1497 struct mwUserItem *u = privacy->users + count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1498 l = g_slist_prepend(l, g_strdup(u->id));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1499 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1500 *ll = l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1501 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1502
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1503
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1504 static void mw_session_setUserStatus(struct mwSession *session) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1505 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1506 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1507 struct mwAwareIdBlock idb = { mwAware_USER, NULL, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1508 struct mwUserStatus *stat;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1509
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1510 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1511
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1512 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1513 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1514
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1515 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1516 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1517
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1518 idb.user = mwSession_getProperty(session, mwSession_AUTH_USER_ID);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1519 stat = mwSession_getUserStatus(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1520
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1521 /* trigger an update of our own status if we're in the buddy list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1522 mwServiceAware_setStatus(pd->srvc_aware, &idb, stat);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1523 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1524
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1525
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1526 static void mw_session_admin(struct mwSession *session,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1527 const char *text) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1528
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1529 GaimConnection *gc = session_to_gc(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1530 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1531
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1532 /** @todo Admin alerts should probably be in a conversation window
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1533 rather than a gaim_notify_message. Or in some sort of updating
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1534 dialog, or something. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1535
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1536 gaim_notify_message(gc, GAIM_NOTIFY_MSG_INFO, _("Admin Alert"),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1537 text, NULL, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1538 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1539
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1540
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1541 /** called from read_cb, attempts to read available data from sock and
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1542 pass it to the session, passing back the return code from the read
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1543 call for handling in read_cb */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1544 static int read_recv(struct mwSession *session, int sock) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1545 char buf[BUF_LEN];
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1546 int len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1547
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1548 len = read(sock, buf, BUF_LEN);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1549 if(len > 0) mwSession_recv(session, buf, len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1550
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1551 return len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1552 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1553
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1554
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1555 /** callback triggered from gaim_input_add, watches the socked for
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1556 available data to be processed by the session */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1557 static void read_cb(gpointer data, gint source,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1558 GaimInputCondition cond) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1559
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1560 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1561 int ret = 0, err = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1562
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1563 /* How the heck can this happen? Fix submitted to Gaim so that it
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1564 won't happen anymore. */
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1565 if(! cond) return;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1566
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1567 g_return_if_fail(pd != NULL);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1568 g_return_if_fail(cond & GAIM_INPUT_READ);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1569
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1570 ret = read_recv(pd->session, pd->socket);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1571
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1572 /* normal operation ends here */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1573 if(ret > 0) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1574
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1575 /* fetch the global error value */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1576 err = errno;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1577
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1578 /* read problem occured if we're here, so we'll need to take care of
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1579 it and clean up internal state */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1580
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1581 if(pd->socket) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1582 close(pd->socket);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1583 pd->socket = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1584 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1585
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1586 if(pd->gc->inpa) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1587 gaim_input_remove(pd->gc->inpa);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1588 pd->gc->inpa = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1589 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1590
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1591 if(! ret) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1592 DEBUG_INFO("connection reset\n");
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1593 gaim_connection_error(pd->gc, _("Connection reset"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1594
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1595 } else if(ret < 0) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1596 char *msg = strerror(err);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1597
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1598 DEBUG_INFO("error in read callback: %s\n", msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1599
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1600 msg = g_strdup_printf(_("Error reading from socket: %s"), msg);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1601 gaim_connection_error(pd->gc, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1602 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1603 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1604 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1605
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1606
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1607 /** Callback passed to gaim_proxy_connect when an account is logged
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1608 in, and if the session logging in receives a redirect message */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1609 static void connect_cb(gpointer data, gint source,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1610 GaimInputCondition cond) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1611
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1612 struct mwGaimPluginData *pd = data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1613 GaimConnection *gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1614
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1615 if(! g_list_find(gaim_connections_get_all(), pd->gc)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1616 close(source);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1617 g_return_if_reached();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1618 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1619
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1620 if(source < 0) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1621 /* connection failed */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1622
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1623 if(pd->socket) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1624 /* this is a redirect connect, force login on existing socket */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1625 mwSession_forceLogin(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1626
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1627 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1628 /* this is a regular connect, error out */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1629 gaim_connection_error(pd->gc, _("Unable to connect to host"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1630 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1631
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1632 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1633 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1634
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1635 if(pd->socket) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1636 /* stop any existing login attempt */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1637 mwSession_stop(pd->session, ERR_SUCCESS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1638 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1639
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1640 pd->socket = source;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1641 gc->inpa = gaim_input_add(source, GAIM_INPUT_READ, read_cb, pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1642
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1643 mwSession_start(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1644 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1645
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1646
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1647 static void mw_session_announce(struct mwSession *s,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1648 struct mwLoginInfo *from,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1649 gboolean may_reply,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1650 const char *text) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1651 struct mwGaimPluginData *pd;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1652 GaimAccount *acct;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1653 GaimConversation *conv;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1654 GSList *buddies;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1655 char *who = from->user_id;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1656 char *msg;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1657
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1658 pd = mwSession_getClientData(s);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1659 acct = gaim_connection_get_account(pd->gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1660 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, who, acct);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1661 if(! conv) conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, acct, who);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1662
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1663 buddies = gaim_find_buddies(acct, who);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1664 if(buddies) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1665 who = (char *) gaim_buddy_get_contact_alias(buddies->data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1666 g_slist_free(buddies);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1667 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1668
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1669 who = g_strdup_printf(_("Announcement from %s"), who);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1670 msg = gaim_markup_linkify(text);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1671
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1672 gaim_conversation_write(conv, who, msg, GAIM_MESSAGE_RECV, time(NULL));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1673 g_free(who);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1674 g_free(msg);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1675 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1676
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1677
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1678 static struct mwSessionHandler mw_session_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1679 .io_write = mw_session_io_write,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1680 .io_close = mw_session_io_close,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1681 .clear = mw_session_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1682 .on_stateChange = mw_session_stateChange,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1683 .on_setPrivacyInfo = mw_session_setPrivacyInfo,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1684 .on_setUserStatus = mw_session_setUserStatus,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1685 .on_admin = mw_session_admin,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1686 .on_announce = mw_session_announce,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1687 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1688
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1689
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1690 static void mw_aware_on_attrib(struct mwServiceAware *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1691 struct mwAwareAttribute *attrib) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1692
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1693 ; /** @todo handle server attributes. There may be some stuff we
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1694 actually want to look for, but I'm not aware of anything right
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1695 now.*/
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1696 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1697
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1698
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1699 static void mw_aware_clear(struct mwServiceAware *srvc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1700 ; /* nothing for now */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1701 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1702
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1703
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1704 static struct mwAwareHandler mw_aware_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1705 .on_attrib = mw_aware_on_attrib,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1706 .clear = mw_aware_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1707 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1708
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1709
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1710 static struct mwServiceAware *mw_srvc_aware_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1711 struct mwServiceAware *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1712 srvc = mwServiceAware_new(s, &mw_aware_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1713 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1714 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1715
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1716
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1717 static void mw_conf_invited(struct mwConference *conf,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1718 struct mwLoginInfo *inviter,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1719 const char *invitation) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1720
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1721 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1722 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1723 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1724 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1725
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1726 char *c_inviter, *c_name, *c_topic, *c_invitation;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1727 GHashTable *ht;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1728
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1729 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1730 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1731 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1732 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1733
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1734 ht = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1735
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1736 c_inviter = g_strdup(inviter->user_id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1737 g_hash_table_insert(ht, CHAT_KEY_CREATOR, c_inviter);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1738
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1739 c_name = g_strdup(mwConference_getName(conf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1740 g_hash_table_insert(ht, CHAT_KEY_NAME, c_name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1741
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1742 c_topic = g_strdup(mwConference_getTitle(conf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1743 g_hash_table_insert(ht, CHAT_KEY_TOPIC, c_topic);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1744
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1745 c_invitation = g_strdup(invitation);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1746 g_hash_table_insert(ht, CHAT_KEY_INVITE, c_invitation);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1747
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1748 DEBUG_INFO("received invitation from '%s' to join ('%s','%s'): '%s'\n",
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1749 NSTR(c_inviter), NSTR(c_name),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1750 NSTR(c_topic), NSTR(c_invitation));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1751
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1752 serv_got_chat_invite(gc, c_topic, c_inviter, c_invitation, ht);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1753 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1754
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1755
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1756 /* The following mess helps us relate a mwConference to a GaimConvChat
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1757 in the various forms by which either may be indicated */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1758
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1759 #define CONF_TO_ID(conf) (GPOINTER_TO_INT(conf))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1760 #define ID_TO_CONF(pd, id) (conf_find_by_id((pd), (id)))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1761
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1762 #define CHAT_TO_ID(chat) (gaim_conv_chat_get_id(chat))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1763 #define ID_TO_CHAT(id) (gaim_find_chat(id))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1764
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1765 #define CHAT_TO_CONF(pd, chat) (ID_TO_CONF((pd), CHAT_TO_ID(chat)))
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1766 #define CONF_TO_CHAT(conf) (ID_TO_CHAT(CONF_TO_ID(conf)))
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1767
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1768
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1769 static struct mwConference *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1770 conf_find_by_id(struct mwGaimPluginData *pd, int id) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1771
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1772 struct mwServiceConference *srvc = pd->srvc_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1773 struct mwConference *conf = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1774 GList *l, *ll;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1775
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1776 ll = mwServiceConference_getConferences(srvc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1777 for(l = ll; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1778 struct mwConference *c = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1779 GaimConvChat *h = mwConference_getClientData(c);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1780
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1781 if(CHAT_TO_ID(h) == id) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1782 conf = c;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1783 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1784 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1785 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1786 g_list_free(ll);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1787
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1788 return conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1789 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1790
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1791
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1792 static void mw_conf_opened(struct mwConference *conf, GList *members) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1793 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1794 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1795 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1796 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1797 GaimConversation *g_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1798
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1799 const char *n = mwConference_getName(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1800
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1801 DEBUG_INFO("conf %s opened, %u initial members\n",
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1802 NSTR(n), g_list_length(members));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1803
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1804 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1805 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1806 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1807 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1808
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1809 g_conf = serv_got_joined_chat(gc, CONF_TO_ID(conf),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1810 mwConference_getTitle(conf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1811
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1812 mwConference_setClientData(conf, GAIM_CONV_CHAT(g_conf), NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1813
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1814 for(; members; members = members->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1815 struct mwLoginInfo *peer = members->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1816 gaim_conv_chat_add_user(GAIM_CONV_CHAT(g_conf), peer->user_id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1817 NULL, GAIM_CBFLAGS_NONE, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1818 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1819 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1820
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1821
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1822 static void mw_conf_closed(struct mwConference *conf, guint32 reason) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1823 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1824 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1825 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1826 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1827
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1828 const char *n = mwConference_getName(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1829 char *msg = mwError(reason);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1830
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1831 DEBUG_INFO("conf %s closed, 0x%08x\n", NSTR(n), reason);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1832
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1833 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1834 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1835 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1836 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1837
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1838 serv_got_chat_left(gc, CONF_TO_ID(conf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1839
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1840 gaim_notify_error(gc, _("Conference Closed"), NULL, msg);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1841 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1842 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1843
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1844
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1845 static void mw_conf_peer_joined(struct mwConference *conf,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1846 struct mwLoginInfo *peer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1847
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1848 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1849 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1850 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1851 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1852 GaimConvChat *g_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1853
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1854 const char *n = mwConference_getName(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1855
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1856 DEBUG_INFO("%s joined conf %s\n", NSTR(peer->user_id), NSTR(n));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1857
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1858 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1859 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1860 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1861 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1862
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1863 g_conf = mwConference_getClientData(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1864 g_return_if_fail(g_conf != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1865
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1866 gaim_conv_chat_add_user(g_conf, peer->user_id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1867 NULL, GAIM_CBFLAGS_NONE, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1868 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1869
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1870
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1871 static void mw_conf_peer_parted(struct mwConference *conf,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1872 struct mwLoginInfo *peer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1873
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1874 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1875 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1876 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1877 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1878 GaimConvChat *g_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1879
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1880 const char *n = mwConference_getName(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1881
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1882 DEBUG_INFO("%s left conf %s\n", NSTR(peer->user_id), NSTR(n));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1883
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1884 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1885 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1886 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1887 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1888
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1889 g_conf = mwConference_getClientData(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1890 g_return_if_fail(g_conf != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1891
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1892 gaim_conv_chat_remove_user(g_conf, peer->user_id, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1893 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1894
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1895
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1896 static void mw_conf_text(struct mwConference *conf,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1897 struct mwLoginInfo *who, const char *text) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1898
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1899 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1900 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1901 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1902 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1903 char *esc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1904
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1905 srvc = mwConference_getService(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1906 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1907 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1908 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1909
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1910 esc = g_markup_escape_text(text, -1);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1911 serv_got_chat_in(gc, CONF_TO_ID(conf), who->user_id, 0, esc, time(NULL));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1912 g_free(esc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1913 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1914
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1915
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1916 static void mw_conf_typing(struct mwConference *conf,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1917 struct mwLoginInfo *who, gboolean typing) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1918
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1919 /* gaim really has no good way to expose this to the user. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1920
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1921 const char *n = mwConference_getName(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1922 const char *w = who->user_id;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1923
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1924 if(typing) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1925 DEBUG_INFO("%s in conf %s: <typing>\n", NSTR(w), NSTR(n));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1926
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1927 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1928 DEBUG_INFO("%s in conf %s: <stopped typing>\n", NSTR(w), NSTR(n));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1929 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1930 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1931
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1932
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1933 static void mw_conf_clear(struct mwServiceConference *srvc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1934 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1935 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1936
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1937
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1938 static struct mwConferenceHandler mw_conference_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1939 .on_invited = mw_conf_invited,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1940 .conf_opened = mw_conf_opened,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1941 .conf_closed = mw_conf_closed,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1942 .on_peer_joined = mw_conf_peer_joined,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1943 .on_peer_parted = mw_conf_peer_parted,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1944 .on_text = mw_conf_text,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1945 .on_typing = mw_conf_typing,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1946 .clear = mw_conf_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1947 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1948
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1949
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1950 static struct mwServiceConference *mw_srvc_conf_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1951 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1952 srvc = mwServiceConference_new(s, &mw_conference_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1953 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1954 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1955
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1956
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1957 static void ft_incoming_cancel(GaimXfer *xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1958 /* incoming transfer rejected or canceled in-progress */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1959 struct mwFileTransfer *ft = xfer->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1960 if(ft) mwFileTransfer_reject(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1961 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1962
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1963
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1964 static void ft_incoming_init(GaimXfer *xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1965 /* incoming transfer accepted */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1966
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1967 /* - accept the mwFileTransfer
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1968 - open/create the local FILE "wb"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1969 - stick the FILE's fp in xfer->dest_fp
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1970 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1971
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1972 struct mwFileTransfer *ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1973 FILE *fp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1974
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1975 ft = xfer->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1976
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1977 fp = g_fopen(xfer->local_filename, "wb");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1978 if(! fp) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1979 mwFileTransfer_cancel(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1980 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1981 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1982
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1983 xfer->dest_fp = fp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1984 mwFileTransfer_accept(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1985 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1986
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1987
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1988 static void mw_ft_offered(struct mwFileTransfer *ft) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1989 /*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1990 - create a gaim ft object
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1991 - offer it
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1992 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1993
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1994 struct mwServiceFileTransfer *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1995 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1996 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1997 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1998 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1999 const char *who;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2000 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2001
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2002 /* @todo add some safety checks */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2003 srvc = mwFileTransfer_getService(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2004 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2005 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2006 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2007 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2008
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2009 who = mwFileTransfer_getUser(ft)->user;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2010
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2011 DEBUG_INFO("file transfer %p offered\n", ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2012 DEBUG_INFO(" from: %s\n", NSTR(who));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2013 DEBUG_INFO(" file: %s\n", NSTR(mwFileTransfer_getFileName(ft)));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2014 DEBUG_INFO(" size: %u\n", mwFileTransfer_getFileSize(ft));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2015 DEBUG_INFO(" text: %s\n", NSTR(mwFileTransfer_getMessage(ft)));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2016
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2017 xfer = gaim_xfer_new(acct, GAIM_XFER_RECEIVE, who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2018
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2019 gaim_xfer_ref(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2020 mwFileTransfer_setClientData(ft, xfer, (GDestroyNotify) gaim_xfer_unref);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2021 xfer->data = ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2022
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2023 gaim_xfer_set_init_fnc(xfer, ft_incoming_init);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2024 gaim_xfer_set_cancel_recv_fnc(xfer, ft_incoming_cancel);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2025 gaim_xfer_set_request_denied_fnc(xfer, ft_incoming_cancel);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2026
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2027 gaim_xfer_set_filename(xfer, mwFileTransfer_getFileName(ft));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2028 gaim_xfer_set_size(xfer, mwFileTransfer_getFileSize(ft));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2029 gaim_xfer_set_message(xfer, mwFileTransfer_getMessage(ft));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2030
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2031 gaim_xfer_request(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2032 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2033
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2034
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2035 static void ft_send(struct mwFileTransfer *ft, FILE *fp) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2036 char buf[BUF_LONG];
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2037 struct mwOpaque o = { .data = buf, .len = BUF_LONG };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2038 guint32 rem;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2039 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2040
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2041 xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2042
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2043 rem = mwFileTransfer_getRemaining(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2044 if(rem < BUF_LONG) o.len = rem;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2045
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2046 if(fread(buf, (size_t) o.len, 1, fp)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2047
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2048 /* calculate progress first. update is displayed upon ack */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2049 xfer->bytes_sent += o.len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2050 xfer->bytes_remaining -= o.len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2051
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2052 /* ... send data second */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2053 mwFileTransfer_send(ft, &o);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2054
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2055 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2056 int err = errno;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2057 DEBUG_WARN("problem reading from file %s: %s",
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2058 NSTR(mwFileTransfer_getFileName(ft)), strerror(err));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2059
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2060 mwFileTransfer_cancel(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2061 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2062 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2063
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2064
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2065 static gboolean ft_idle_cb(struct mwFileTransfer *ft) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2066 GaimXfer *xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2067 g_return_val_if_fail(xfer != NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2068
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2069 xfer->watcher = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2070 ft_send(ft, xfer->dest_fp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2071
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2072 return FALSE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2073 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2074
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2075
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2076 static void mw_ft_opened(struct mwFileTransfer *ft) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2077 /*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2078 - get gaim ft from client data in ft
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2079 - set the state to active
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2080 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2081
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2082 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2083
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2084 xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2085
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2086 if(! xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2087 mwFileTransfer_cancel(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2088 mwFileTransfer_free(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2089 g_return_if_reached();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2090 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2091
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2092 gaim_xfer_update_progress(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2093
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2094 if(gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2095 xfer->watcher = g_idle_add((GSourceFunc)ft_idle_cb, ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2096 xfer->dest_fp = g_fopen(xfer->local_filename, "rb");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2097 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2098 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2099
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2100
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2101 static void mw_ft_closed(struct mwFileTransfer *ft, guint32 code) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2102 /*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2103 - get gaim ft from client data in ft
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2104 - indicate rejection/cancelation/completion
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2105 - free the file transfer itself
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2106 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2107
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2108 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2109
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2110 xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2111 if(xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2112 xfer->data = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2113
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2114 if(mwFileTransfer_isDone(ft)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2115 gaim_xfer_set_completed(xfer, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2116 gaim_xfer_end(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2117
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2118 } else if(mwFileTransfer_isCancelLocal(ft)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2119 /* calling gaim_xfer_cancel_local is redundant, since that's
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2120 probably what triggered this function to be called */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2121 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2122
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2123 } else if(mwFileTransfer_isCancelRemote(ft)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2124 /* steal the reference for the xfer */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2125 mwFileTransfer_setClientData(ft, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2126 gaim_xfer_cancel_remote(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2127
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2128 /* drop the stolen reference */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2129 gaim_xfer_unref(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2130 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2131 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2132 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2133
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2134 mwFileTransfer_free(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2135 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2136
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2137
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2138 static void mw_ft_recv(struct mwFileTransfer *ft,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2139 struct mwOpaque *data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2140 /*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2141 - get gaim ft from client data in ft
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2142 - update transfered percentage
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2143 - if done, destroy the ft, disassociate from gaim ft
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2144 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2145
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2146 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2147 FILE *fp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2148
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2149 xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2150 g_return_if_fail(xfer != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2151
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2152 fp = xfer->dest_fp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2153 g_return_if_fail(fp != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2154
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2155 /* we must collect and save our precious data */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2156 fwrite(data->data, 1, data->len, fp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2157
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2158 /* update the progress */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2159 xfer->bytes_sent += data->len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2160 xfer->bytes_remaining -= data->len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2161 gaim_xfer_update_progress(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2162
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2163 /* let the other side know we got it, and to send some more */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2164 mwFileTransfer_ack(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2165 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2166
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2167
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2168 static void mw_ft_ack(struct mwFileTransfer *ft) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2169 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2170
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2171 xfer = mwFileTransfer_getClientData(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2172 g_return_if_fail(xfer != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2173 g_return_if_fail(xfer->watcher == 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2174
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2175 gaim_xfer_update_progress(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2176
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2177 if(mwFileTransfer_isOpen(ft))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2178 xfer->watcher = g_idle_add((GSourceFunc)ft_idle_cb, ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2179 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2180
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2181
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2182 static void mw_ft_clear(struct mwServiceFileTransfer *srvc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2183 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2184 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2185
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2186
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2187 static struct mwFileTransferHandler mw_ft_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2188 .ft_offered = mw_ft_offered,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2189 .ft_opened = mw_ft_opened,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2190 .ft_closed = mw_ft_closed,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2191 .ft_recv = mw_ft_recv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2192 .ft_ack = mw_ft_ack,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2193 .clear = mw_ft_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2194 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2195
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2196
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2197 static struct mwServiceFileTransfer *mw_srvc_ft_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2198 struct mwServiceFileTransfer *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2199 GHashTable *ft_map;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2200
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2201 ft_map = g_hash_table_new(g_direct_hash, g_direct_equal);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2202
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2203 srvc = mwServiceFileTransfer_new(s, &mw_ft_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2204 mwService_setClientData(MW_SERVICE(srvc), ft_map,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2205 (GDestroyNotify) g_hash_table_destroy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2206
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2207 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2208 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2209
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2210
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2211 static void convo_data_free(struct convo_data *cd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2212 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2213
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2214 /* clean the queue */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2215 for(l = cd->queue; l; l = g_list_delete_link(l, l)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2216 struct convo_msg *m = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2217 if(m->clear) m->clear(m->data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2218 g_free(m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2219 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2220
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2221 g_free(cd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2222 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2223
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2224
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2225 /** allocates a convo_data structure and associates it with the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2226 conversation in the client data slot */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2227 static void convo_data_new(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2228 struct convo_data *cd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2229
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2230 g_return_if_fail(conv != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2231
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2232 if(mwConversation_getClientData(conv))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2233 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2234
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2235 cd = g_new0(struct convo_data, 1);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2236 cd->conv = conv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2237
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2238 mwConversation_setClientData(conv, cd, (GDestroyNotify) convo_data_free);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2239 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2240
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2241
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2242 static GaimConversation *convo_get_gconv(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2243 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2244 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2245 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2246 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2247 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2248
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2249 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2250
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2251 srvc = mwConversation_getService(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2252 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2253 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2254 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2255 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2256
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2257 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2258
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2259 return gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2260 idb->user, acct);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2261 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2262
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2263
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2264 static void convo_queue(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2265 enum mwImSendType type, gconstpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2266
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2267 struct convo_data *cd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2268 struct convo_msg *m;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2269
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2270 convo_data_new(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2271 cd = mwConversation_getClientData(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2272
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2273 m = g_new0(struct convo_msg, 1);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2274 m->type = type;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2275
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2276 switch(type) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2277 case mwImSend_PLAIN:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2278 m->data = g_strdup(data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2279 m->clear = g_free;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2280 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2281
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2282 case mwImSend_TYPING:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2283 default:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2284 m->data = (gpointer) data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2285 m->clear = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2286 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2287
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2288 cd->queue = g_list_append(cd->queue, m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2289 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2290
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2291
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2292 /* Does what it takes to get an error displayed for a conversation */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2293 static void convo_error(struct mwConversation *conv, guint32 err) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2294 GaimConversation *gconv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2295 char *tmp, *text;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2296 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2297
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2298 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2299
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2300 tmp = mwError(err);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2301 text = g_strconcat(_("Unable to send message: "), tmp, NULL);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2302
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2303 gconv = convo_get_gconv(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2304 if(gconv && !gaim_conv_present_error(idb->user, gconv->account, text)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2305
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2306 g_free(text);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2307 text = g_strdup_printf(_("Unable to send message to %s:"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2308 (idb->user)? idb->user: "(unknown)");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2309 gaim_notify_error(gaim_account_get_connection(gconv->account),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2310 NULL, text, tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2311 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2312
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2313 g_free(tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2314 g_free(text);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2315 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2316
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2317
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2318 static void convo_queue_send(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2319 struct convo_data *cd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2320 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2321
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2322 cd = mwConversation_getClientData(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2323
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2324 for(l = cd->queue; l; l = g_list_delete_link(l, l)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2325 struct convo_msg *m = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2326
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2327 mwConversation_send(conv, m->type, m->data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2328
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2329 if(m->clear) m->clear(m->data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2330 g_free(m);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2331 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2332
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2333 cd->queue = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2334 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2335
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2336
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2337 /** called when a mw conversation leaves a gaim conversation to
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2338 inform the gaim conversation that it's unsafe to offer any *cool*
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2339 features. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2340 static void convo_nofeatures(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2341 GaimConversation *gconv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2342 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2343
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2344 gconv = convo_get_gconv(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2345 if(! gconv) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2346
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2347 gc = gaim_conversation_get_gc(gconv);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2348 if(! gc) return;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2349
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2350 gaim_conversation_set_features(gconv, gc->flags);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2351 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2352
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2353
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2354 /** called when a mw conversation and gaim conversation come together,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2355 to inform the gaim conversation of what features to offer the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2356 user */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2357 static void convo_features(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2358 GaimConversation *gconv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2359 GaimConnectionFlags feat;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2360
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2361 gconv = convo_get_gconv(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2362 if(! gconv) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2363
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2364 feat = gaim_conversation_get_features(gconv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2365
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2366 if(mwConversation_isOpen(conv)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2367 if(mwConversation_supports(conv, mwImSend_HTML)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2368 feat |= GAIM_CONNECTION_HTML;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2369 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2370 feat &= ~GAIM_CONNECTION_HTML;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2371 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2372
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2373 if(mwConversation_supports(conv, mwImSend_MIME)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2374 feat &= ~GAIM_CONNECTION_NO_IMAGES;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2375 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2376 feat |= GAIM_CONNECTION_NO_IMAGES;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2377 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2378
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2379 DEBUG_INFO("conversation features set to 0x%04x\n", feat);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2380 gaim_conversation_set_features(gconv, feat);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2381
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2382 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2383 convo_nofeatures(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2384 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2385 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2386
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2387
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2388 #if 0
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2389 /** triggered from mw_conversation_opened if the appropriate plugin
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2390 preference is set. This will open a window for the conversation
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2391 before the first message is sent. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2392 static void convo_do_psychic(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2393 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2394 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2395 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2396 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2397 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2398
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2399 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2400
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2401 GaimConversation *gconv;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2402 GaimConvWindow *win;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2403
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2404 srvc = mwConversation_getService(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2405 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2406 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2407 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2408 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2409
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2410 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2411
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2412 gconv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2413 idb->user, acct);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2414 if(! gconv) {
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 11257
diff changeset
2415 gconv = gaim_conversation_new(GAIM_CONV_TYPE_IM, acct, idb->user);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2416 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2417
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2418 g_return_if_fail(gconv != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2419
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2420 win = gaim_conversation_get_window(gconv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2421 g_return_if_fail(win != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2422
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2423 gaim_conv_window_show(win);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2424 }
11547
726264a8f48f [gaim-migrate @ 13802]
Tim Ringenbach <marv@pidgin.im>
parents: 11536
diff changeset
2425 #endif
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2426
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2427
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2428 static void mw_conversation_opened(struct mwConversation *conv) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2429 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2430 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2431 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2432 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2433 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2434
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2435 struct convo_dat *cd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2436
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2437 srvc = mwConversation_getService(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2438 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2439 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2440 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2441 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2442
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2443 /* set up the queue */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2444 cd = mwConversation_getClientData(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2445 if(cd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2446 convo_queue_send(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2447
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2448 if(! convo_get_gconv(conv)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2449 mwConversation_free(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2450 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2451 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2452
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2453 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2454 convo_data_new(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2455
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2456 #if 0
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2457 if(gaim_prefs_get_bool(MW_PRPL_OPT_PSYCHIC)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2458 convo_do_psychic(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2459 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2460 #endif
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2461 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2462
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2463 { /* record the client key for the buddy */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2464 GaimBuddy *buddy;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2465 struct mwLoginInfo *info;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2466 info = mwConversation_getTargetInfo(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2467
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2468 buddy = gaim_find_buddy(acct, info->user_id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2469 if(buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2470 gaim_blist_node_set_int((GaimBlistNode *) buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2471 BUDDY_KEY_CLIENT, info->type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2472 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2473 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2474
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2475 convo_features(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2476 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2477
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2478
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2479 static void mw_conversation_closed(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2480 guint32 reason) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2481
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2482 struct convo_data *cd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2483
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2484 g_return_if_fail(conv != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2485
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2486 /* if there's an error code and a non-typing message in the queue,
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2487 print an error message to the conversation */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2488 cd = mwConversation_getClientData(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2489 if(reason && cd && cd->queue) {
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2490 GList *l;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2491 for(l = cd->queue; l; l = l->next) {
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2492 struct convo_msg *m = l->data;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2493 if(m->type != mwImSend_TYPING) {
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2494 convo_error(conv, reason);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2495 break;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2496 }
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2497 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2498 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2499
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2500 #if 0
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2501 /* don't do this, to prevent the occasional weird sending of
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2502 formatted messages as plaintext when the other end closes the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2503 conversation after we've begun composing the message */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2504 convo_nofeatures(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2505 #endif
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2506
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2507 mwConversation_removeClientData(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2508 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2509
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2510
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2511
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2512 static char *im_decode(GaimConnection *gc, const char *msg) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2513 return gaim_utf8_try_convert(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2514 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2515
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2516
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2517 static void im_recv_text(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2518 struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2519 const char *msg) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2520
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2521 struct mwIdBlock *idb;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2522 char *txt, *esc, *t;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2523
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2524 idb = mwConversation_getTarget(conv);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2525 txt = im_decode(pd->gc, msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2526
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2527 t = txt? txt: (char *) msg;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2528
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2529 esc = g_markup_escape_text(t, -1);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2530 serv_got_im(pd->gc, idb->user, esc, 0, time(NULL));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2531 g_free(esc);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2532
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2533 g_free(txt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2534 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2535
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2536
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2537 static void im_recv_typing(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2538 struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2539 gboolean typing) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2540
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2541 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2542 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2543
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2544 serv_got_typing(pd->gc, idb->user, 0,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2545 typing? GAIM_TYPING: GAIM_NOT_TYPING);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2546 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2547
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2548
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2549 static void im_recv_html(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2550 struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2551 const char *msg) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2552
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2553 struct mwIdBlock *idb;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2554 char *txt, *t;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2555
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2556 idb = mwConversation_getTarget(conv);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2557 txt = im_decode(pd->gc, msg);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2558
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2559 t = txt? txt: (char *) msg;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2560
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2561 serv_got_im(pd->gc, idb->user, t, 0, time(NULL));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2562
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2563 g_free(txt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2564 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2565
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2566
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2567 static void im_recv_subj(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2568 struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2569 const char *subj) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2570
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2571 /** @todo somehow indicate receipt of a conversation subject. It
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2572 would also be nice if we added a /topic command for the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2573 protocol */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2574 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2575 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2576
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2577
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2578 /** generate "cid:908@20582notesbuddy" from "<908@20582notesbuddy>" */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2579 static char *make_cid(const char *cid) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2580 gsize n;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2581 char *c, *d;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2582
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2583 g_return_val_if_fail(cid != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2584
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2585 n = strlen(cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2586 g_return_val_if_fail(n > 2, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2587
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2588 c = g_strndup(cid+1, n-2);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2589 d = g_strdup_printf("cid:%s", c);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2590
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2591 g_free(c);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2592 return d;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2593 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2594
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2595
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2596 static void im_recv_mime(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2597 struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2598 const char *data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2599
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2600 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2601
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2602 GHashTable *img_by_cid;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2603 GList *images;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2604
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2605 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2606
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2607 GaimMimeDocument *doc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2608 const GList *parts;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2609
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2610 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2611
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2612 img_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2613 images = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2614
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2615 /* don't want the contained string to ever be NULL */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2616 str = g_string_new("");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2617
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2618 doc = gaim_mime_document_parse(data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2619
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2620 /* handle all the MIME parts */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2621 parts = gaim_mime_document_get_parts(doc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2622 for(; parts; parts = parts->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2623 GaimMimePart *part = parts->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2624 const char *type;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2625
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2626 type = gaim_mime_part_get_field(part, "content-type");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2627 DEBUG_INFO("MIME part Content-Type: %s\n", NSTR(type));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2628
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2629 if(! type) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2630 ; /* feh */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2631
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2632 } else if(g_str_has_prefix(type, "image")) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2633 /* put images into the image store */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2634
11183
8dca96cbcd64 [gaim-migrate @ 13295]
Mark Doliner <mark@kingant.net>
parents: 11133
diff changeset
2635 guchar *d_dat;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2636 gsize d_len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2637 char *cid;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2638 int img;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2639
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2640 /* obtain and unencode the data */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2641 gaim_mime_part_get_data_decoded(part, &d_dat, &d_len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2642
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2643 /* look up the content id */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2644 cid = (char *) gaim_mime_part_get_field(part, "Content-ID");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2645 cid = make_cid(cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2646
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2647 /* add image to the gaim image store */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2648 img = gaim_imgstore_add(d_dat, d_len, cid);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2649 g_free(d_dat);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2650
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2651 /* map the cid to the image store identifier */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2652 g_hash_table_insert(img_by_cid, cid, GINT_TO_POINTER(img));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2653
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2654 /* recall the image for dereferencing later */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2655 images = g_list_append(images, GINT_TO_POINTER(img));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2656
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2657 } else if(g_str_has_prefix(type, "text")) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2658
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2659 /* concatenate all the text parts together */
11183
8dca96cbcd64 [gaim-migrate @ 13295]
Mark Doliner <mark@kingant.net>
parents: 11133
diff changeset
2660 guchar *data;
11132
a4611130e3eb [gaim-migrate @ 13189]
Mark Doliner <mark@kingant.net>
parents: 10977
diff changeset
2661 char *txt;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2662 gsize len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2663
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2664 gaim_mime_part_get_data_decoded(part, &data, &len);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2665
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2666 txt = im_decode(pd->gc, data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2667 g_string_append(str, txt?txt:(char *)data);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2668
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2669 g_free(data);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2670 g_free(txt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2671 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2672 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2673
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2674 gaim_mime_document_free(doc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2675
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2676 /* @todo should put this in its own function */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2677 { /* replace each IMG tag's SRC attribute with an ID attribute. This
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2678 actually modifies the contents of str */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2679 GData *attribs;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2680 char *start, *end;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2681 char *tmp = str->str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2682
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2683 while(*tmp && gaim_markup_find_tag("img", tmp, (const char **) &start,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2684 (const char **) &end, &attribs)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2685
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2686 char *alt, *align, *border, *src;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2687 int img;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2688
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2689 alt = g_datalist_get_data(&attribs, "alt");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2690 align = g_datalist_get_data(&attribs, "align");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2691 border = g_datalist_get_data(&attribs, "border");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2692 src = g_datalist_get_data(&attribs, "src");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2693
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2694 img = GPOINTER_TO_INT(g_hash_table_lookup(img_by_cid, src));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2695 if(img) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2696 GString *atstr;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2697 gsize len = (end - start);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2698 gsize mov;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2699
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2700 atstr = g_string_new("");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2701 if(alt) g_string_append_printf(atstr, " alt=\"%s\"", alt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2702 if(align) g_string_append_printf(atstr, " align=\"%s\"", align);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2703 if(border) g_string_append_printf(atstr, " border=\"%s\"", border);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2704
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2705 mov = g_snprintf(start, len, "<img%s id=\"%i\"", atstr->str, img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2706 while(mov < len) start[mov++] = ' ';
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2707
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2708 g_string_free(atstr, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2709 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2710
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2711 g_datalist_clear(&attribs);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2712 tmp = end + 1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2713 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2714 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2715
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2716 /* actually display the message */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2717 serv_got_im(pd->gc, idb->user, str->str, 0, time(NULL));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2718
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2719 g_string_free(str, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2720
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2721 /* clean up the cid table */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2722 g_hash_table_destroy(img_by_cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2723
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2724 /* dereference all the imgages */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2725 while(images) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2726 gaim_imgstore_unref(GPOINTER_TO_INT(images->data));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2727 images = g_list_delete_link(images, images);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2728 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2729 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2730
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2731
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2732 static void mw_conversation_recv(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2733 enum mwImSendType type,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2734 gconstpointer msg) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2735 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2736 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2737 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2738
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2739 srvc = mwConversation_getService(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2740 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2741 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2742
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2743 switch(type) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2744 case mwImSend_PLAIN:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2745 im_recv_text(conv, pd, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2746 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2747
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2748 case mwImSend_TYPING:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2749 im_recv_typing(conv, pd, !! msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2750 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2751
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2752 case mwImSend_HTML:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2753 im_recv_html(conv, pd, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2754 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2755
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2756 case mwImSend_SUBJECT:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2757 im_recv_subj(conv, pd, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2758 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2759
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2760 case mwImSend_MIME:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2761 im_recv_mime(conv, pd, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2762 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2763
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2764 default:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2765 DEBUG_INFO("conversation received strange type, 0x%04x\n", type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2766 ; /* erm... */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2767 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2768 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2769
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2770
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2771 static void mw_place_invite(struct mwConversation *conv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2772 const char *message,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2773 const char *title, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2774 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2775 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2776 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2777
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2778 struct mwIdBlock *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2779 GHashTable *ht;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2780
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2781 srvc = mwConversation_getService(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2782 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2783 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2784
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2785 idb = mwConversation_getTarget(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2786
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2787 ht = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2788 g_hash_table_insert(ht, CHAT_KEY_CREATOR, g_strdup(idb->user));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2789 g_hash_table_insert(ht, CHAT_KEY_NAME, g_strdup(name));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2790 g_hash_table_insert(ht, CHAT_KEY_TOPIC, g_strdup(title));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2791 g_hash_table_insert(ht, CHAT_KEY_INVITE, g_strdup(message));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2792 g_hash_table_insert(ht, CHAT_KEY_IS_PLACE, g_strdup("")); /* ugh */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2793
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2794 serv_got_chat_invite(pd->gc, title, idb->user, message, ht);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2795
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2796 mwConversation_close(conv, ERR_SUCCESS);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2797 mwConversation_free(conv);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2798 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2799
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2800
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2801 static void mw_im_clear(struct mwServiceIm *srvc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2802 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2803 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2804
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2805
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2806 static struct mwImHandler mw_im_handler = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2807 .conversation_opened = mw_conversation_opened,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2808 .conversation_closed = mw_conversation_closed,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2809 .conversation_recv = mw_conversation_recv,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2810 .place_invite = mw_place_invite,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2811 .clear = mw_im_clear,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2812 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2813
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2814
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2815 static struct mwServiceIm *mw_srvc_im_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2816 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2817 srvc = mwServiceIm_new(s, &mw_im_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2818 mwServiceIm_setClientType(srvc, mwImClient_NOTESBUDDY);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2819 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2820 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2821
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2822
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2823 /* The following helps us relate a mwPlace to a GaimConvChat in the
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2824 various forms by which either may be indicated. Uses some of
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2825 the similar macros from the conference service above */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2826
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2827 #define PLACE_TO_ID(place) (GPOINTER_TO_INT(place))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2828 #define ID_TO_PLACE(pd, id) (place_find_by_id((pd), (id)))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2829
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2830 #define CHAT_TO_PLACE(pd, chat) (ID_TO_PLACE((pd), CHAT_TO_ID(chat)))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2831 #define PLACE_TO_CHAT(place) (ID_TO_CHAT(PLACE_TO_ID(place)))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2832
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2833
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2834 static struct mwPlace *
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2835 place_find_by_id(struct mwGaimPluginData *pd, int id) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2836 struct mwServicePlace *srvc = pd->srvc_place;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2837 struct mwPlace *place = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2838 GList *l;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2839
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2840 l = (GList *) mwServicePlace_getPlaces(srvc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2841 for(; l; l = l->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2842 struct mwPlace *p = l->data;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2843 GaimConvChat *h = GAIM_CONV_CHAT(mwPlace_getClientData(p));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2844
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2845 if(CHAT_TO_ID(h) == id) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2846 place = p;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2847 break;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2848 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2849 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2850
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2851 return place;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2852 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2853
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2854
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2855 static void mw_place_opened(struct mwPlace *place) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2856 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2857 struct mwSession *session;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2858 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2859 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2860 GaimConversation *gconf;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2861
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2862 GList *members, *l;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2863
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2864 const char *n = mwPlace_getName(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2865
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2866 srvc = mwPlace_getService(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2867 session = mwService_getSession(MW_SERVICE(srvc));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2868 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2869 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2870
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2871 members = mwPlace_getMembers(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2872
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2873 DEBUG_INFO("place %s opened, %u initial members\n",
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2874 NSTR(n), g_list_length(members));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2875
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2876 gconf = serv_got_joined_chat(gc, PLACE_TO_ID(place),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2877 mwPlace_getTitle(place));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2878
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2879 mwPlace_setClientData(place, gconf, NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2880
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2881 for(l = members; l; l = l->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2882 struct mwIdBlock *idb = l->data;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2883 gaim_conv_chat_add_user(GAIM_CONV_CHAT(gconf), idb->user,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2884 NULL, GAIM_CBFLAGS_NONE, FALSE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2885 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2886 g_list_free(members);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2887 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2888
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2889
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2890 static void mw_place_closed(struct mwPlace *place, guint32 code) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2891 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2892 struct mwSession *session;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2893 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2894 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2895
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2896 const char *n = mwPlace_getName(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2897 char *msg = mwError(code);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2898
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2899 DEBUG_INFO("place %s closed, 0x%08x\n", NSTR(n), code);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2900
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2901 srvc = mwPlace_getService(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2902 session = mwService_getSession(MW_SERVICE(srvc));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2903 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2904 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2905
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2906 serv_got_chat_left(gc, PLACE_TO_ID(place));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2907
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2908 gaim_notify_error(gc, _("Place Closed"), NULL, msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2909 g_free(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2910 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2911
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2912
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2913 static void mw_place_peerJoined(struct mwPlace *place,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2914 const struct mwIdBlock *peer) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2915 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2916 struct mwSession *session;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2917 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2918 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2919 GaimConversation *gconf;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2920
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2921 const char *n = mwPlace_getName(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2922
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2923 DEBUG_INFO("%s joined place %s\n", NSTR(peer->user), NSTR(n));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2924
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2925 srvc = mwPlace_getService(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2926 session = mwService_getSession(MW_SERVICE(srvc));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2927 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2928 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2929
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2930 gconf = mwPlace_getClientData(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2931 g_return_if_fail(gconf != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2932
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2933 gaim_conv_chat_add_user(GAIM_CONV_CHAT(gconf), peer->user,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2934 NULL, GAIM_CBFLAGS_NONE, TRUE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2935 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2936
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2937
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2938 static void mw_place_peerParted(struct mwPlace *place,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2939 const struct mwIdBlock *peer) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2940 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2941 struct mwSession *session;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2942 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2943 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2944 GaimConversation *gconf;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2945
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2946 const char *n = mwPlace_getName(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2947
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2948 DEBUG_INFO("%s left place %s\n", NSTR(peer->user), NSTR(n));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2949
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2950 srvc = mwPlace_getService(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2951 session = mwService_getSession(MW_SERVICE(srvc));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2952 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2953 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2954
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2955 gconf = mwPlace_getClientData(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2956 g_return_if_fail(gconf != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2957
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2958 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(gconf), peer->user, NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2959 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2960
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2961
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2962 static void mw_place_peerSetAttribute(struct mwPlace *place,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2963 const struct mwIdBlock *peer,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2964 guint32 attr, struct mwOpaque *o) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2965 ;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2966 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2967
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2968
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2969 static void mw_place_peerUnsetAttribute(struct mwPlace *place,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2970 const struct mwIdBlock *peer,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2971 guint32 attr) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2972 ;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2973 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2974
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2975
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2976 static void mw_place_message(struct mwPlace *place,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2977 const struct mwIdBlock *who,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2978 const char *msg) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2979 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2980 struct mwSession *session;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2981 struct mwGaimPluginData *pd;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2982 GaimConnection *gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2983 char *esc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2984
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2985 srvc = mwPlace_getService(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2986 session = mwService_getSession(MW_SERVICE(srvc));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2987 pd = mwSession_getClientData(session);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2988 gc = pd->gc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2989
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2990 esc = g_markup_escape_text(msg, -1);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2991 serv_got_chat_in(gc, PLACE_TO_ID(place), who->user, 0, esc, time(NULL));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2992 g_free(esc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2993 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2994
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2995
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2996 static void mw_place_clear(struct mwServicePlace *srvc) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2997 ;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2998 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2999
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3000
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3001 static struct mwPlaceHandler mw_place_handler = {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3002 .opened = mw_place_opened,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3003 .closed = mw_place_closed,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3004 .peerJoined = mw_place_peerJoined,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3005 .peerParted = mw_place_peerParted,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3006 .peerSetAttribute = mw_place_peerSetAttribute,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3007 .peerUnsetAttribute = mw_place_peerUnsetAttribute,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3008 .message = mw_place_message,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3009 .clear = mw_place_clear,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3010 };
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3011
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3012
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3013 static struct mwServicePlace *mw_srvc_place_new(struct mwSession *s) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3014 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3015 srvc = mwServicePlace_new(s, &mw_place_handler);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3016 return srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3017 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3018
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3019
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3020 static struct mwServiceResolve *mw_srvc_resolve_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3021 struct mwServiceResolve *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3022 srvc = mwServiceResolve_new(s);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3023 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3024 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3025
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3026
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3027 static struct mwServiceStorage *mw_srvc_store_new(struct mwSession *s) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3028 struct mwServiceStorage *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3029 srvc = mwServiceStorage_new(s);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3030 return srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3031 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3032
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3033
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3034 /** allocate and associate a mwGaimPluginData with a GaimConnection */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3035 static struct mwGaimPluginData *mwGaimPluginData_new(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3036 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3037
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3038 g_return_val_if_fail(gc != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3039
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3040 pd = g_new0(struct mwGaimPluginData, 1);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3041 pd->gc = gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3042 pd->session = mwSession_new(&mw_session_handler);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3043 pd->srvc_aware = mw_srvc_aware_new(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3044 pd->srvc_conf = mw_srvc_conf_new(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3045 pd->srvc_ft = mw_srvc_ft_new(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3046 pd->srvc_im = mw_srvc_im_new(pd->session);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3047 pd->srvc_place = mw_srvc_place_new(pd->session);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3048 pd->srvc_resolve = mw_srvc_resolve_new(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3049 pd->srvc_store = mw_srvc_store_new(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3050 pd->group_list_map = g_hash_table_new(g_direct_hash, g_direct_equal);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3051
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3052 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_aware));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3053 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_conf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3054 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_ft));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3055 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_im));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3056 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_place));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3057 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_resolve));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3058 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_store));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3059
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3060 mwSession_addCipher(pd->session, mwCipher_new_RC2_40(pd->session));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3061 mwSession_addCipher(pd->session, mwCipher_new_RC2_128(pd->session));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3062
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3063 mwSession_setClientData(pd->session, pd, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3064 gc->proto_data = pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3065
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3066 return pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3067 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3068
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3069
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3070 static void mwGaimPluginData_free(struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3071 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3072
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3073 pd->gc->proto_data = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3074
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3075 mwSession_removeService(pd->session, mwService_AWARE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3076 mwSession_removeService(pd->session, mwService_CONFERENCE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3077 mwSession_removeService(pd->session, mwService_FILE_TRANSFER);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3078 mwSession_removeService(pd->session, mwService_IM);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3079 mwSession_removeService(pd->session, mwService_PLACE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3080 mwSession_removeService(pd->session, mwService_RESOLVE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3081 mwSession_removeService(pd->session, mwService_STORAGE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3082
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3083 mwService_free(MW_SERVICE(pd->srvc_aware));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3084 mwService_free(MW_SERVICE(pd->srvc_conf));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3085 mwService_free(MW_SERVICE(pd->srvc_ft));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3086 mwService_free(MW_SERVICE(pd->srvc_im));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3087 mwService_free(MW_SERVICE(pd->srvc_place));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3088 mwService_free(MW_SERVICE(pd->srvc_resolve));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3089 mwService_free(MW_SERVICE(pd->srvc_store));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3090
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3091 mwCipher_free(mwSession_getCipher(pd->session, mwCipher_RC2_40));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3092 mwCipher_free(mwSession_getCipher(pd->session, mwCipher_RC2_128));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3093
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3094 mwSession_free(pd->session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3095
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3096 g_hash_table_destroy(pd->group_list_map);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3097
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3098 g_free(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3099 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3100
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3101
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3102 static const char *mw_prpl_list_icon(GaimAccount *a, GaimBuddy *b) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3103 /* my little green dude is a chopped up version of the aim running
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3104 guy. First, cut off the head and store someplace safe. Then,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3105 take the left-half side of the body and throw it away. Make a
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3106 copy of the remaining body, and flip it horizontally. Now attach
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3107 the two pieces into an X shape, and drop the head back on the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3108 top, being careful to center it. Then, just change the color
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3109 saturation to bring the red down a bit, and voila! */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3110
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3111 /* then, throw all of that away and use sodipodi to make a new
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3112 icon. You know, LIKE A REAL MAN. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3113
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3114 return "meanwhile";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3115 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3116
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3117
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3118 static void mw_prpl_list_emblems(GaimBuddy *b,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3119 const char **se, const char **sw,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3120 const char **nw, const char **ne) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3121
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3122 /* speaking of custom icons, the external icon here is an ugly
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3123 little example of what happens when I use Gimp */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3124
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3125 GaimPresence *presence;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3126 GaimStatus *status;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3127 const char *status_id;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3128
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3129 presence = gaim_buddy_get_presence(b);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3130 status = gaim_presence_get_active_status(presence);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3131 status_id = gaim_status_get_id(status);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3132
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3133 if(! GAIM_BUDDY_IS_ONLINE(b)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3134 *se = "offline";
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3135 } else if(!strcmp(status_id, MW_STATE_AWAY)) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3136 *se = "away";
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3137 } else if(!strcmp(status_id, MW_STATE_BUSY)) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3138 *se = "dnd";
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3139 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3140
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3141 if(buddy_is_external(b)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3142 /* best assignment ever */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3143 *(*se?sw:se) = "external";
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3144 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3145 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3146
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3147
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3148 static char *mw_prpl_status_text(GaimBuddy *b) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3149 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3150 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3151 struct mwAwareIdBlock t = { mwAware_USER, b->name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3152 const char *ret;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3153
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3154 gc = b->account->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3155 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3156
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3157 ret = mwServiceAware_getText(pd->srvc_aware, &t);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3158 return g_strdup(ret);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3159 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3160
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3161
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3162 static const char *status_text(GaimBuddy *b) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3163 GaimPresence *presence;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3164 GaimStatus *status;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3165
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3166 presence = gaim_buddy_get_presence(b);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3167 status = gaim_presence_get_active_status(presence);
11536
16796e09b9c1 [gaim-migrate @ 13790]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11533
diff changeset
3168
16796e09b9c1 [gaim-migrate @ 13790]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11533
diff changeset
3169 return gaim_status_get_name(status);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3170 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3171
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3172
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3173 static gboolean user_supports(struct mwServiceAware *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3174 const char *who, guint32 feature) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3175
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3176 const struct mwAwareAttribute *attr;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3177 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3178
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3179 attr = mwServiceAware_getAttribute(srvc, &idb, feature);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3180 return (attr != NULL) && mwAwareAttribute_asBoolean(attr);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3181 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3182
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3183
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3184 char *user_supports_text(struct mwServiceAware *srvc, const char *who) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3185 char *feat[] = {NULL, NULL, NULL, NULL, NULL};
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3186 char **f = feat;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3187
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3188 if(user_supports(srvc, who, mwAttribute_AV_PREFS_SET)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3189 gboolean mic, speak, video;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3190
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3191 mic = user_supports(srvc, who, mwAttribute_MICROPHONE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3192 speak = user_supports(srvc, who, mwAttribute_SPEAKERS);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3193 video = user_supports(srvc, who, mwAttribute_VIDEO_CAMERA);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3194
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3195 if(mic) *f++ = _("Microphone");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3196 if(speak) *f++ = _("Speakers");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3197 if(video) *f++ = _("Video Camera");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3198 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3199
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3200 if(user_supports(srvc, who, mwAttribute_FILE_TRANSFER))
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3201 *f++ = _("File Transfer");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3202
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3203 return (*feat)? g_strjoinv(", ", feat): NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3204 /* jenni loves siege */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3205 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3206
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3207
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3208 static char *mw_prpl_tooltip_text(GaimBuddy *b) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3209 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3210 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3211 struct mwAwareIdBlock idb = { mwAware_USER, b->name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3212
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3213 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3214 const char *tmp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3215
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3216 gc = b->account->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3217 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3218
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3219 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3220
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3221 tmp = status_text(b);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3222 g_string_append_printf(str, _("\n<b>Status</b>: %s"), tmp);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3223
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3224 tmp = mwServiceAware_getText(pd->srvc_aware, &idb);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3225 if(tmp) {
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3226 tmp = g_markup_escape_text(tmp, -1);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3227 g_string_append_printf(str, _("\n<b>Message</b>: %s"), tmp);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3228 g_free((char *) tmp);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3229 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3230
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3231 tmp = user_supports_text(pd->srvc_aware, b->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3232 if(tmp) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3233 g_string_append_printf(str, _("\n<b>Supports</b>: %s"), tmp);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3234 g_free((char *) tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3235 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3236
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3237 if(buddy_is_external(b)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3238 g_string_append(str, _("\n<b>External User</b>"));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3239 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3240
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3241 tmp = str->str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3242 g_string_free(str, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3243 return (char *) tmp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3244 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3245
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3246
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3247 static GList *mw_prpl_status_types(GaimAccount *acct) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3248 GList *types = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3249 GaimStatusType *type;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3250
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3251 type = gaim_status_type_new(GAIM_STATUS_OFFLINE, MW_STATE_OFFLINE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3252 _("Offline"), TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3253 types = g_list_append(types, type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3254
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3255 type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, MW_STATE_ACTIVE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3256 _("Active"), TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3257 gaim_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3258 gaim_value_new(GAIM_TYPE_STRING));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3259 types = g_list_append(types, type);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3260
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3261 type = gaim_status_type_new(GAIM_STATUS_AWAY, MW_STATE_AWAY,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3262 _("Away"), TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3263 gaim_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3264 gaim_value_new(GAIM_TYPE_STRING));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3265 types = g_list_append(types, type);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3266
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3267 type = gaim_status_type_new(GAIM_STATUS_UNAVAILABLE, MW_STATE_BUSY,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3268 _("Do Not Disturb"), TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3269 gaim_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3270 gaim_value_new(GAIM_TYPE_STRING));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3271 types = g_list_append(types, type);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3272
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3273 return types;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3274 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3275
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3276
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3277 static void conf_create_prompt_cancel(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3278 GaimRequestFields *fields) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3279 ; /* nothing to do */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3280 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3281
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3282
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3283 static void conf_create_prompt_join(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3284 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3285 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3286 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3287 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3288 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3289
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3290 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3291
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3292 const char *topic, *invite;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3293 struct mwConference *conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3294 struct mwIdBlock idb = { NULL, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3295
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3296 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3297 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3298 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3299 srvc = pd->srvc_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3300
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3301 f = gaim_request_fields_get_field(fields, CHAT_KEY_TOPIC);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3302 topic = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3303
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3304 f = gaim_request_fields_get_field(fields, CHAT_KEY_INVITE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3305 invite = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3306
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3307 conf = mwConference_new(srvc, topic);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3308 mwConference_open(conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3309
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3310 idb.user = buddy->name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3311 mwConference_invite(conf, &idb, invite);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3312 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3313
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3314
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3315 static void blist_menu_conf_create(GaimBuddy *buddy, const char *msg) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3316
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3317 GaimRequestFields *fields;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3318 GaimRequestFieldGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3319 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3320
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3321 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3322 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3323
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3324 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3325
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3326 g_return_if_fail(buddy != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3327
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3328 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3329 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3330
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3331 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3332 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3333
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3334 fields = gaim_request_fields_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3335
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3336 g = gaim_request_field_group_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3337 gaim_request_fields_add_group(fields, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3338
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3339 f = gaim_request_field_string_new(CHAT_KEY_TOPIC, _("Topic"), NULL, FALSE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3340 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3341
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3342 f = gaim_request_field_string_new(CHAT_KEY_INVITE, _("Message"), msg, FALSE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3343 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3344
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3345 msgA = _("Create conference with user");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3346 msgB = _("Please enter a topic for the new conference, and an invitation"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3347 " message to be sent to %s");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3348 msgB = g_strdup_printf(msgB, buddy->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3349
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3350 gaim_request_fields(gc, _("New Conference"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3351 msgA, msgB, fields,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3352 _("Create"), G_CALLBACK(conf_create_prompt_join),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3353 _("Cancel"), G_CALLBACK(conf_create_prompt_cancel),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3354 buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3355 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3356 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3357
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3358
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3359 static void conf_select_prompt_cancel(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3360 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3361 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3362 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3363
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3364
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3365 static void conf_select_prompt_invite(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3366 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3367 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3368 const GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3369 const char *msg;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3370
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3371 f = gaim_request_fields_get_field(fields, CHAT_KEY_INVITE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3372 msg = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3373
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3374 f = gaim_request_fields_get_field(fields, "conf");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3375 l = gaim_request_field_list_get_selected(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3376
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3377 if(l) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3378 gpointer d = gaim_request_field_list_get_data(f, l->data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3379
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3380 if(GPOINTER_TO_INT(d) == 0x01) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3381 blist_menu_conf_create(buddy, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3382
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3383 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3384 struct mwIdBlock idb = { buddy->name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3385 mwConference_invite(d, &idb, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3386 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3387 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3388 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3389
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3390
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3391 static void blist_menu_conf_list(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3392 GList *confs) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3393
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3394 GaimRequestFields *fields;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3395 GaimRequestFieldGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3396 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3397
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3398 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3399 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3400
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3401 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3402
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3403 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3404 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3405
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3406 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3407 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3408
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3409 fields = gaim_request_fields_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3410
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3411 g = gaim_request_field_group_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3412 gaim_request_fields_add_group(fields, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3413
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3414 f = gaim_request_field_list_new("conf", _("Available Conferences"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3415 gaim_request_field_list_set_multi_select(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3416 for(; confs; confs = confs->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3417 struct mwConference *c = confs->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3418 gaim_request_field_list_add(f, mwConference_getTitle(c), c);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3419 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3420 gaim_request_field_list_add(f, _("Create New Conference..."),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3421 GINT_TO_POINTER(0x01));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3422 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3423
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3424 f = gaim_request_field_string_new(CHAT_KEY_INVITE, "Message", NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3425 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3426
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3427 msgA = _("Invite user to a conference");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3428 msgB = _("Select a conference from the list below to send an invite to"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3429 " user %s. Select \"Create New Conference\" if you'd like to"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3430 " create a new conference to invite this user to.");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3431 msgB = g_strdup_printf(msgB, buddy->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3432
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3433 gaim_request_fields(gc, _("Invite to Conference"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3434 msgA, msgB, fields,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3435 _("Invite"), G_CALLBACK(conf_select_prompt_invite),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3436 _("Cancel"), G_CALLBACK(conf_select_prompt_cancel),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3437 buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3438 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3439 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3440
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3441
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3442 static void blist_menu_conf(GaimBlistNode *node, gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3443 GaimBuddy *buddy = (GaimBuddy *) node;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3444 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3445 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3446 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3447 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3448
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3449 g_return_if_fail(node != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3450 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3451
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3452 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3453 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3454
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3455 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3456 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3457
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3458 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3459 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3460
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3461 /*
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3462 - get a list of all conferences on this session
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3463 - if none, prompt to create one, and invite buddy to it
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3464 - else, prompt to select a conference or create one
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3465 */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3466
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3467 l = mwServiceConference_getConferences(pd->srvc_conf);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3468 if(l) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3469 blist_menu_conf_list(buddy, l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3470 g_list_free(l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3471
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3472 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3473 blist_menu_conf_create(buddy, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3474 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3475 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3476
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3477
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3478 static GList *mw_prpl_blist_node_menu(GaimBlistNode *node) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3479 GList *l = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3480 GaimBlistNodeAction *act;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3481
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3482 if(! GAIM_BLIST_NODE_IS_BUDDY(node))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3483 return l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3484
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3485 l = g_list_append(l, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3486
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3487 act = gaim_blist_node_action_new(_("Invite to Conference..."),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3488 blist_menu_conf, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3489 l = g_list_append(l, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3490
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3491 /** note: this never gets called for a GaimGroup, have to use the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3492 blist-node-extended-menu signal for that. The function
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3493 blist_node_menu_cb is assigned to this signal in the function
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3494 services_starting */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3495
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3496 return l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3497 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3498
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3499
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3500 static GList *mw_prpl_chat_info(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3501 GList *l = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3502 struct proto_chat_entry *pce;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3503
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3504 pce = g_new0(struct proto_chat_entry, 1);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3505 pce->label = _("Topic:");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3506 pce->identifier = CHAT_KEY_TOPIC;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3507 l = g_list_append(l, pce);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3508
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3509 return l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3510 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3511
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3512
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3513 static GHashTable *mw_prpl_chat_info_defaults(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3514 const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3515 GHashTable *table;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3516
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3517 g_return_val_if_fail(gc != NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3518
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3519 table = g_hash_table_new_full(g_str_hash, g_str_equal,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3520 NULL, g_free);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3521
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3522 g_hash_table_insert(table, CHAT_KEY_NAME, g_strdup(name));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3523 g_hash_table_insert(table, CHAT_KEY_INVITE, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3524
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3525 return table;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3526 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3527
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3528
11837
fa742ad8068c [gaim-migrate @ 14128]
Mark Doliner <mark@kingant.net>
parents: 11718
diff changeset
3529 static void mw_prpl_login(GaimAccount *acct);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3530
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3531
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3532 static void prompt_host_cancel_cb(GaimConnection *gc) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3533 gaim_connection_error(gc, _("No Sametime Community Server specified"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3534 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3535
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3536
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3537 static void prompt_host_ok_cb(GaimConnection *gc, const char *host) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3538 if(host && *host) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3539 GaimAccount *acct = gaim_connection_get_account(gc);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3540 gaim_account_set_string(acct, MW_KEY_HOST, host);
11837
fa742ad8068c [gaim-migrate @ 14128]
Mark Doliner <mark@kingant.net>
parents: 11718
diff changeset
3541 mw_prpl_login(acct);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3542
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3543 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3544 prompt_host_cancel_cb(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3545 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3546 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3547
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3548
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3549 static void prompt_host(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3550 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3551 char *msg;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3552
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3553 acct = gaim_connection_get_account(gc);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3554 msg = _("No host or IP address has been configured for the"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3555 " Meanwhile account %s. Please enter one below to"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3556 " continue logging in.");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3557 msg = g_strdup_printf(msg, NSTR(gaim_account_get_username(acct)));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3558
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3559 gaim_request_input(gc, _("Meanwhile Connection Setup"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3560 _("No Sametime Community Server Specified"), msg,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3561 MW_PLUGIN_DEFAULT_HOST, FALSE, FALSE, NULL,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3562 _("Connect"), G_CALLBACK(prompt_host_ok_cb),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3563 _("Cancel"), G_CALLBACK(prompt_host_cancel_cb),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3564 gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3565
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3566 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3567 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3568
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3569
11837
fa742ad8068c [gaim-migrate @ 14128]
Mark Doliner <mark@kingant.net>
parents: 11718
diff changeset
3570 static void mw_prpl_login(GaimAccount *account) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3571 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3572 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3573
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3574 char *user, *pass, *host;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3575 guint port;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3576
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3577 gc = gaim_account_get_connection(account);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3578 pd = mwGaimPluginData_new(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3579
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3580 /* while we do support images, the default is to not offer it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3581 gc->flags |= GAIM_CONNECTION_NO_IMAGES;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3582
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3583 user = g_strdup(gaim_account_get_username(account));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3584 pass = (char *) gaim_account_get_password(account);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3585
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3586 host = strrchr(user, ':');
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3587 if(host) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3588 /* annoying user split from 1.2.0, need to undo it */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3589 *host++ = '\0';
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3590 gaim_account_set_string(account, MW_KEY_HOST, host);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3591 gaim_account_set_username(account, user);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3592
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3593 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3594 host = (char *) gaim_account_get_string(account, MW_KEY_HOST,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3595 MW_PLUGIN_DEFAULT_HOST);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3596 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3597
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3598 if(! host || ! *host) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3599 /* somehow, we don't have a host to connect to. Well, we need one
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3600 to actually continue, so let's ask the user directly. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3601 prompt_host(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3602 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3603 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3604
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3605 port = gaim_account_get_int(account, MW_KEY_PORT, MW_PLUGIN_DEFAULT_PORT);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3606
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3607 DEBUG_INFO("user: '%s'\n", user);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3608 DEBUG_INFO("host: '%s'\n", host);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3609 DEBUG_INFO("port: %u\n", port);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3610
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3611 mwSession_setProperty(pd->session, mwSession_NO_SECRET,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3612 (char *) no_secret, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3613 mwSession_setProperty(pd->session, mwSession_AUTH_USER_ID, user, g_free);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3614 mwSession_setProperty(pd->session, mwSession_AUTH_PASSWORD, pass, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3615 mwSession_setProperty(pd->session, mwSession_CLIENT_TYPE_ID,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3616 GUINT_TO_POINTER(MW_CLIENT_TYPE_ID), NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3617
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3618 gaim_connection_update_progress(gc, _("Connecting"), 1, MW_CONNECT_STEPS);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3619
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3620 if(gaim_proxy_connect(account, host, port, connect_cb, pd)) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3621 gaim_connection_error(gc, _("Unable to connect to host"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3622 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3623 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3624
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3625
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3626 static void mw_prpl_close(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3627 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3628
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3629 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3630
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3631 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3632 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3633
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3634 /* get rid of the blist save timeout */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3635 if(pd->save_event) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3636 gaim_timeout_remove(pd->save_event);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3637 pd->save_event = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3638 blist_store(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3639 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3640
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3641 /* stop the session */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3642 mwSession_stop(pd->session, 0x00);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3643
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3644 /* no longer necessary */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3645 gc->proto_data = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3646
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3647 /* stop watching the socket */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3648 if(gc->inpa) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3649 gaim_input_remove(gc->inpa);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3650 gc->inpa = 0;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3651 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3652
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3653 /* clean up the rest */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3654 mwGaimPluginData_free(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3655 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3656
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3657
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3658 /** generates a random-ish content id string */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3659 static char *im_mime_content_id() {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3660 const char *c = "%03x@%05xmeanwhile";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3661 srand(time(0) ^ rand());
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3662 return g_strdup_printf(c, rand() & 0xfff, rand() & 0xfffff);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3663 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3664
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3665
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3666 /** generates a multipart/related content type with a random-ish
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3667 boundary value */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3668 static char *im_mime_content_type() {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3669 const char *c = "multipart/related; boundary=related_MW%03x_%04x";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3670 srand(time(0) ^ rand());
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3671 return g_strdup_printf(c, rand() & 0xfff, rand() & 0xffff);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3672 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3673
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3674
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3675 /** determine content type from extension. Not so happy about this,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3676 but I don't want to actually write image type detection */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3677 static const char *im_mime_img_content_type(GaimStoredImage *img) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3678 const char *fn = gaim_imgstore_get_filename(img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3679
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3680 fn = strrchr(fn, '.');
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3681 if(! fn) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3682 return "image";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3683
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3684 } else if(! strcmp(".png", fn)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3685 return "image/png";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3686
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3687 } else if(! strcmp(".jpg", fn)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3688 return "image/jpeg";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3689
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3690 } else if(! strcmp(".jpeg", fn)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3691 return "image/jpeg";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3692
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3693 } else if(! strcmp(".gif", fn)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3694 return "image/gif";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3695
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3696 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3697 return "image";
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3698 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3699 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3700
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3701
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3702 static char *im_mime_img_content_disp(GaimStoredImage *img) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3703 const char *fn = gaim_imgstore_get_filename(img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3704 return g_strdup_printf("attachment; filename=\"%s\"", fn);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3705 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3706
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3707
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3708 /** turn an IM with embedded images into a multi-part mime document */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3709 static char *im_mime_convert(const char *message) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3710 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3711 GaimMimeDocument *doc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3712 GaimMimePart *part;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3713
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3714 GData *attr;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3715 char *tmp, *start, *end;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3716
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3717 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3718
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3719 doc = gaim_mime_document_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3720
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3721 gaim_mime_document_set_field(doc, "Mime-Version", "1.0");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3722 gaim_mime_document_set_field(doc, "Content-Disposition", "inline");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3723
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3724 tmp = im_mime_content_type();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3725 gaim_mime_document_set_field(doc, "Content-Type", tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3726 g_free(tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3727
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3728 tmp = (char *) message;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3729 while(*tmp && gaim_markup_find_tag("img", tmp, (const char **) &start,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3730 (const char **) &end, &attr)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3731 char *id;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3732 GaimStoredImage *img = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3733
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3734 gsize len = (start - tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3735
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3736 /* append the in-between-tags text */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3737 if(len) g_string_append_len(str, tmp, len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3738
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3739 /* find the imgstore data by the id tag */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3740 id = g_datalist_get_data(&attr, "id");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3741 if(id && *id)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3742 img = gaim_imgstore_get(atoi(id));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3743
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3744 if(img) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3745 char *cid;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3746 gpointer data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3747 size_t size;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3748
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3749 part = gaim_mime_part_new(doc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3750
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3751 data = im_mime_img_content_disp(img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3752 gaim_mime_part_set_field(part, "Content-Disposition", data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3753 g_free(data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3754
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3755 cid = im_mime_content_id();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3756 data = g_strdup_printf("<%s>", cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3757 gaim_mime_part_set_field(part, "Content-ID", data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3758 g_free(data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3759
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3760 gaim_mime_part_set_field(part, "Content-transfer-encoding", "base64");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3761 gaim_mime_part_set_field(part, "Content-Type",
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3762 im_mime_img_content_type(img));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3763
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3764
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3765 /* obtain and base64 encode the image data, and put it in the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3766 mime part */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3767 data = gaim_imgstore_get_data(img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3768 size = gaim_imgstore_get_size(img);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3769 data = gaim_base64_encode(data, (gsize) size);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3770 gaim_mime_part_set_data(part, data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3771 g_free(data);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3772
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3773 /* append the modified tag */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3774 g_string_append_printf(str, "<img src=\"cid:%s\">", cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3775 g_free(cid);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3776
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3777 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3778 /* append the literal image tag, since we couldn't find a
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3779 relative imgstore object */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3780 gsize len = (end - start) + 1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3781 g_string_append_len(str, start, len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3782 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3783
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3784 g_datalist_clear(&attr);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3785 tmp = end + 1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3786 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3787
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3788 /* append left-overs */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3789 g_string_append(str, tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3790
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3791 part = gaim_mime_part_new(doc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3792 gaim_mime_part_set_field(part, "Content-Type", "text/html");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3793 gaim_mime_part_set_field(part, "Content-Disposition", "inline");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3794 gaim_mime_part_set_field(part, "Content-Transfer-Encoding", "8bit");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3795
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3796 gaim_mime_part_set_data(part, str->str);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3797 g_string_free(str, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3798
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3799 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3800 gaim_mime_document_write(doc, str);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3801 tmp = str->str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3802 g_string_free(str, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3803
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3804 return tmp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3805 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3806
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3807
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3808 static char *im_try_convert(const char *msg,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3809 const char *enc_to,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3810 const char *enc_from) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3811 char *ret;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3812 GError *error = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3813
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3814 ret = g_convert(msg, -1, enc_to, enc_from, NULL, NULL, &error);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3815 if(error) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3816 /* if there's something that just won't convert, leave it as UTF-8 */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3817 DEBUG_INFO("problem converting to %s, preserving %s: %s\n",
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3818 NSTR(enc_to), NSTR(enc_from), NSTR(error->message));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3819 g_error_free(error);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3820 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3821
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3822 return ret;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3823 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3824
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3825
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3826 static char *im_encode(GaimConnection *gc, const char *msg) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3827 GaimAccount *acct;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3828 const char *enc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3829
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3830 acct = gaim_connection_get_account(gc);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3831 g_return_val_if_fail(acct != NULL, NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3832
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3833 enc = gaim_account_get_string(acct, MW_KEY_ENCODING,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3834 MW_PLUGIN_DEFAULT_ENCODING);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3835
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3836 return im_try_convert(msg, enc, "UTF-8");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3837 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3838
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3839
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3840 static int mw_prpl_send_im(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3841 const char *name,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3842 const char *message,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3843 GaimConvImFlags flags) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3844
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3845 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3846 struct mwIdBlock who = { (char *) name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3847 struct mwConversation *conv;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3848 char *msg = NULL;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3849
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3850 g_return_val_if_fail(gc != NULL, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3851 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3852
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3853 g_return_val_if_fail(pd != NULL, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3854
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3855 msg = im_encode(gc, message);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3856 if(!msg) msg = g_strdup(message);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3857
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3858 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3859
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3860 /* this detection of features to determine how to send the message
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3861 (plain, html, or mime) is flawed because the other end of the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3862 conversation could close their channel at any time, rendering any
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3863 existing formatting in an outgoing message innapropriate. The end
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3864 result is that it may be possible that the other side of the
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3865 conversation will receive a plaintext message with html contents,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3866 which is bad. I'm not sure how to fix this correctly. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3867
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3868 if(strstr(msg, "<img ") || strstr(msg, "<IMG "))
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3869 flags |= GAIM_CONV_IM_IMAGES;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3870
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3871 if(mwConversation_isOpen(conv)) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3872 char *tmp;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3873 int ret;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3874
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3875 if((flags & GAIM_CONV_IM_IMAGES) &&
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3876 mwConversation_supports(conv, mwImSend_MIME)) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3877 /* send a MIME message */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3878
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3879 tmp = im_mime_convert(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3880 g_free(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3881
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3882 ret = mwConversation_send(conv, mwImSend_MIME, tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3883 g_free(tmp);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3884
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3885 } else if(mwConversation_supports(conv, mwImSend_HTML)) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3886 /* send an HTML message */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3887
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3888 /* need to do this to get the \n to <br> conversion */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3889 tmp = gaim_strdup_withhtml(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3890 g_free(msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3891
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3892 ret = mwConversation_send(conv, mwImSend_HTML, tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3893 g_free(tmp);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3894
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3895 } else {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3896 /* default to text */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3897 ret = mwConversation_send(conv, mwImSend_PLAIN, msg);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3898 g_free(msg);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3899 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3900
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3901 return !ret;
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3902
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3903 } else {
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3904
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3905 /* queue up the message safely as plain text */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3906 char *tmp = gaim_markup_strip_html(msg);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3907 g_free(msg);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3908
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3909 convo_queue(conv, mwImSend_PLAIN, tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3910 g_free(tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3911
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3912 if(! mwConversation_isPending(conv))
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3913 mwConversation_open(conv);
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3914
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3915 return 1;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3916 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3917 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3918
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3919
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3920 static int mw_prpl_send_typing(GaimConnection *gc, const char *name,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3921 int typing) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3922
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3923 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3924 struct mwIdBlock who = { (char *) name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3925 struct mwConversation *conv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3926
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3927 gpointer t = GINT_TO_POINTER(!! typing);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3928
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3929 g_return_val_if_fail(gc != NULL, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3930 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3931
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3932 g_return_val_if_fail(pd != NULL, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3933
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3934 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3935
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3936 if(mwConversation_isOpen(conv))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3937 return ! mwConversation_send(conv, mwImSend_TYPING, t);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3938
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3939 if(typing) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3940 /* let's only open a channel for typing, not for not-typing.
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3941 Otherwise two users in psychic mode will continually open
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3942 conversations to each other, never able to get rid of them, as
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3943 when the other person closes, it psychicaly opens again */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3944
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3945 convo_queue(conv, mwImSend_TYPING, t);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3946
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3947 if(! mwConversation_isPending(conv))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3948 mwConversation_open(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3949 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3950
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3951 return 1;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3952 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3953
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3954
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3955 static void mw_prpl_get_info(GaimConnection *gc, const char *who) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3956
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3957 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3958
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3959 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3960 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3961 GaimBuddy *b;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3962
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3963 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3964 const char *tmp;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3965
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3966 g_return_if_fail(who != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3967 g_return_if_fail(*who != '\0');
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3968
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3969 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3970
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3971 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3972 b = gaim_find_buddy(acct, who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3973
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3974 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3975
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3976 if(g_str_has_prefix(who, "@E ")) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3977 g_string_append(str, _("<b>External User</b><br>"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3978 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3979
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3980 g_string_append_printf(str, _("<b>User ID:</b> %s<br>"), who);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3981
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3982 if(b) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3983 guint32 type;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3984
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3985 if(b->server_alias) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3986 g_string_append_printf(str, _("<b>Full Name:</b> %s<br>"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3987 b->server_alias);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3988 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3989
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3990 type = gaim_blist_node_get_int((GaimBlistNode *) b, BUDDY_KEY_CLIENT);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3991 if(type) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3992 g_string_append(str, _("<b>Last Known Client:</b> "));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3993
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3994 tmp = mwLoginType_getName(type);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3995 if(tmp) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3996 g_string_append(str, tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3997 g_string_append(str, "<br>");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3998
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3999 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4000 g_string_append_printf(str, _("Unknown (0x%04x)<br>"), type);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4001 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4002 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4003 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4004
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4005 tmp = user_supports_text(pd->srvc_aware, who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4006 if(tmp) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4007 g_string_append_printf(str, _("<b>Supports:</b> %s<br>"), tmp);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4008 g_free((char *) tmp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4009 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4010
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4011 if(b) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4012 tmp = status_text(b);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4013 g_string_append_printf(str, _("<b>Status:</b> %s"), tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4014
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4015 g_string_append(str, "<hr>");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4016
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4017 tmp = mwServiceAware_getText(pd->srvc_aware, &idb);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4018 if(tmp) g_string_append(str, tmp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4019 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4020
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4021 /* @todo emit a signal to allow a plugin to override the display of
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4022 this notification, so that it can create its own */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4023
11533
c9b815aeddc1 [gaim-migrate @ 13782]
Richard Laager <rlaager@wiktel.com>
parents: 11531
diff changeset
4024 gaim_notify_userinfo(gc, who, str->str, NULL, NULL);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4025
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4026 g_string_free(str, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4027 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4028
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4029
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4030 static void mw_prpl_set_status(GaimAccount *acct, GaimStatus *status) {
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4031 GaimConnection *gc;
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4032 const char *state;
11641
925c1960af34 [gaim-migrate @ 13918]
Richard Laager <rlaager@wiktel.com>
parents: 11638
diff changeset
4033 char *message = NULL;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4034 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4035 struct mwUserStatus stat;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4036
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4037 g_return_if_fail(acct != NULL);
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4038 gc = gaim_account_get_connection(acct);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4039
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4040 state = gaim_status_get_id(status);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4041
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4042 gaim_debug_info("meanwhile", "Set status to %s\n",
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4043 gaim_status_get_name(status));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4044
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4045 g_return_if_fail(gc != NULL);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4046
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4047 session = gc_to_session(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4048 g_return_if_fail(session != NULL);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4049
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4050 /* get a working copy of the current status */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4051 mwUserStatus_clone(&stat, mwSession_getUserStatus(session));
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4052
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4053 /* determine the state */
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4054 if(! strcmp(state, MW_STATE_ACTIVE)) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4055 stat.status = mwStatus_ACTIVE;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4056
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4057 } else if(! strcmp(state, MW_STATE_AWAY)) {
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4058 stat.status = mwStatus_AWAY;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4059
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4060 } else if(! strcmp(state, MW_STATE_BUSY)) {
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4061 stat.status = mwStatus_BUSY;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4062 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4063
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4064 /* determine the message */
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4065 switch(stat.status) {
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4066 case mwStatus_ACTIVE:
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4067 stat.time = 0;
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4068 case mwStatus_AWAY:
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4069 case mwStatus_BUSY:
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4070 message = (char *)gaim_status_get_attr_string(status, MW_STATE_MESSAGE);
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4071 break;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4072 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4073
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4074 if(message) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4075 /* all the possible non-NULL values of message up to this point
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4076 are const, so we don't need to free them */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4077 message = gaim_markup_strip_html(message);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4078 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4079
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4080 /* out with the old */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4081 g_free(stat.desc);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4082
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4083 /* in with the new */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4084 stat.desc = (char *) message;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4085
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4086 mwSession_setUserStatus(session, &stat);
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
4087 mwUserStatus_clear(&stat);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4088 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4089
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4090
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4091 static void mw_prpl_set_idle(GaimConnection *gc, int t) {
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4092 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4093 struct mwUserStatus stat;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4094
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4095 session = gc_to_session(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4096 g_return_if_fail(session != NULL);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4097
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4098 mwUserStatus_clone(&stat, mwSession_getUserStatus(session));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4099
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4100 if(t > 0 && stat.status == mwStatus_ACTIVE) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4101 time_t now = time(NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4102 stat.time = now - t;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4103 stat.status = mwStatus_IDLE;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4104
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4105 } else if(t == 0 && stat.status == mwStatus_IDLE) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4106 stat.time = 0;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4107 stat.status = mwStatus_ACTIVE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4108 }
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4109
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4110 mwSession_setUserStatus(session, &stat);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4111 mwUserStatus_clear(&stat);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4112 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4113
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4114
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4115 static struct resolved_id *resolved_id_new(const char *id,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4116 const char *name) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4117
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4118 struct resolved_id *rid = g_new0(struct resolved_id, 1);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4119 rid->id = g_strdup(id);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4120 rid->name = g_strdup(name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4121 return rid;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4122 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4123
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4124
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4125 static void resolved_id_free(struct resolved_id *rid) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4126 if(rid) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4127 g_free(rid->id);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4128 g_free(rid->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4129 g_free(rid);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4130 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4131 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4132
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4133
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4134 static void add_resolved_done(const char *id, const char *name,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4135 GaimBuddy *buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4136 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4137 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4138 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4139
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4140 g_return_if_fail(id != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4141
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4142 g_return_if_fail(buddy != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4143 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4144
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4145 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4146 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4147
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4148 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4149 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4150
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4151 gaim_blist_rename_buddy(buddy, id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4152
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4153 gaim_blist_server_alias_buddy(buddy, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4154 gaim_blist_node_set_string((GaimBlistNode *) buddy, BUDDY_KEY_NAME, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4155
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4156 buddy_add(pd, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4157 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4158
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4159
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4160 static void multi_resolved_cleanup(GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4161 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4162 const GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4163
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4164 f = gaim_request_fields_get_field(fields, "user");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4165 l = gaim_request_field_list_get_items(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4166
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4167 for(; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4168 const char *i = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4169 struct resolved_id *res;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4170
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4171 res = gaim_request_field_list_get_data(f, i);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4172 resolved_id_free(res);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4173 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4174 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4175
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4176
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4177 static void multi_resolved_cancel(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4178 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4179 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4180 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4181
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4182 gc = gaim_account_get_connection(buddy->account);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4183 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4184
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4185 gaim_blist_remove_buddy(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4186 multi_resolved_cleanup(fields);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4187
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4188 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4189 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4190
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4191
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4192 static void multi_resolved_cb(GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4193 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4194 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4195 const GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4196
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4197 f = gaim_request_fields_get_field(fields, "user");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4198 l = gaim_request_field_list_get_selected(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4199
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4200 if(l) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4201 const char *i = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4202 struct resolved_id *res;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4203
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4204 res = gaim_request_field_list_get_data(f, i);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4205
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4206 add_resolved_done(res->id, res->name, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4207 multi_resolved_cleanup(fields);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4208
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4209 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4210 multi_resolved_cancel(buddy, fields);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4211 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4212 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4213
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4214
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4215 static void foreach_resolved_id(char *key, char *val, GList **l) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4216 struct resolved_id *res = resolved_id_new(key, val);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4217 *l = g_list_prepend(*l, res);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4218 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4219
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4220
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4221 static gint resolved_id_comp(struct resolved_id *a, struct resolved_id *b) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4222 return g_ascii_strcasecmp(a->name, b->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4223 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4224
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4225
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4226 static void multi_resolved_query(struct mwResolveResult *result,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4227 GaimBuddy *buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4228 GaimRequestFields *fields;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4229 GaimRequestFieldGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4230 GaimRequestField *f;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4231 GHashTable *hash;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4232 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4233 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4234
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4235 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4236 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4237
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4238 g_return_if_fail(buddy != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4239
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4240 acct = buddy->account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4241 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4242
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4243 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4244 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4245
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4246 fields = gaim_request_fields_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4247
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4248 g = gaim_request_field_group_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4249
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4250 /* note that Gaim segfaults if you don't add the group to the fields
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4251 before you add a required field to the group. Feh. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4252 gaim_request_fields_add_group(fields, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4253
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4254 f = gaim_request_field_list_new("user", _("Possible Matches"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4255 gaim_request_field_list_set_multi_select(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4256 gaim_request_field_set_required(f, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4257
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4258 /* collect results into a set of identities */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4259 hash = g_hash_table_new(g_str_hash, g_str_equal);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4260 for(l = result->matches; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4261 struct mwResolveMatch *match = l->data;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4262
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4263 if(!match->id || !match->name)
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4264 continue;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4265
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4266 g_hash_table_insert(hash, match->id, match->name);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4267 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4268
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4269 /* collect set into a list of structures */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4270 l = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4271 g_hash_table_foreach(hash, (GHFunc) foreach_resolved_id, &l);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4272 g_list_sort(l, (GCompareFunc) resolved_id_comp);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4273
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4274 /* populate choices in request field */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4275 for(; l; l = l->next) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4276 struct resolved_id *res = l->data;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4277 char *label;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4278
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4279 /* fixes bug 1178603 by making the selection label a combination
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4280 of the full name and the user id. Problems arrise when multiple
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4281 entries have identical labels */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4282 label = g_strdup_printf("%s (%s)", NSTR(res->name), NSTR(res->id));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4283 gaim_request_field_list_add(f, label, res);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4284 g_free(label);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4285 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4286
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4287 g_list_free(l);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4288
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4289 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4290
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4291 msgA = _("An ambiguous user ID was entered");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4292 msgB = _("The identifier '%s' may possibly refer to any of the following"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4293 " users. Please select the correct user from the list below to"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4294 " add them to your buddy list.");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4295 msgB = g_strdup_printf(msgB, result->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4296
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4297 gaim_request_fields(gc, _("Select User to Add"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4298 msgA, msgB, fields,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4299 _("Add User"), G_CALLBACK(multi_resolved_cb),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4300 _("Cancel"), G_CALLBACK(multi_resolved_cancel),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4301 buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4302 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4303 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4304
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4305
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4306 static void add_buddy_resolved(struct mwServiceResolve *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4307 guint32 id, guint32 code, GList *results,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4308 gpointer b) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4309
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4310 struct mwResolveResult *res = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4311 GaimBuddy *buddy = b;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4312 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4313 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4314
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4315 gc = gaim_account_get_connection(buddy->account);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4316 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4317
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4318 if(results)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4319 res = results->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4320
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4321 if(!code && res && res->matches) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4322 if(g_list_length(res->matches) == 1) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4323 struct mwResolveMatch *match = res->matches->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4324
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4325 DEBUG_INFO("searched for %s, got only %s\n",
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4326 NSTR(res->name), NSTR(match->id));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4327
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4328 /* only one? that might be the right one! */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4329 if(strcmp(res->name, match->id)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4330 /* uh oh, the single result isn't identical to the search
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4331 term, better safe then sorry, so let's make sure it's who
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4332 the user meant to add */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4333 multi_resolved_query(res, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4334
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4335 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4336 /* same person, add 'em */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4337 add_resolved_done(match->id, match->name, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4338 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4339
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4340 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4341 /* prompt user if more than one match was returned */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4342 multi_resolved_query(res, buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4343 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4344
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4345 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4346 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4347
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4348 /* fall-through indicates that we couldn't find a matching user in
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4349 the resolve service (ether error or zero results), so we remove
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4350 this buddy */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4351
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4352 DEBUG_INFO("no such buddy in community\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4353 gaim_blist_remove_buddy(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4354 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4355
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4356 if(res && res->name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4357 /* compose and display an error message */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4358 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4359
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4360 msgA = _("Unable to add user: user not found");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4361
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4362 msgB = _("The identifier '%s' did not match any users in your"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4363 " Sametime community. This entry has been removed from"
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4364 " your buddy list.");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4365 msgB = g_strdup_printf(msgB, NSTR(res->name));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4366
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4367 gaim_notify_error(gc, _("Unable to add user"), msgA, msgB);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4368
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4369 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4370 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4371 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4372
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4373
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4374 static void mw_prpl_add_buddy(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4375 GaimBuddy *buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4376 GaimGroup *group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4377
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4378 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4379 struct mwServiceResolve *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4380 GList *query;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4381 enum mwResolveFlag flags;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4382 guint32 req;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4383
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4384 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4385 srvc = pd->srvc_resolve;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4386
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4387 /* catch external buddies. They won't be in the resolve service */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4388 if(g_str_has_prefix(buddy->name, "@E ")) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4389 buddy_add(pd, buddy);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4390 return;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4391 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4392
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4393 query = g_list_prepend(NULL, buddy->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4394 flags = mwResolveFlag_FIRST | mwResolveFlag_USERS;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4395
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4396 req = mwServiceResolve_resolve(srvc, query, flags, add_buddy_resolved,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4397 buddy, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4398 g_list_free(query);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4399
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4400 if(req == SEARCH_ERROR) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4401 gaim_blist_remove_buddy(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4402 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4403 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4404 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4405
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4406
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4407 static void foreach_add_buddies(GaimGroup *group, GList *buddies,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4408 struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4409 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4410
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4411 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4412 mwAwareList_addAware(list, buddies);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4413 g_list_free(buddies);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4414 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4415
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4416
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4417 static void mw_prpl_add_buddies(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4418 GList *buddies,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4419 GList *groups) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4420
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4421 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4422 GHashTable *group_sets;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4423 struct mwAwareIdBlock *idbs, *idb;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4424
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4425 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4426
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4427 /* map GaimGroup:GList of mwAwareIdBlock */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4428 group_sets = g_hash_table_new(g_direct_hash, g_direct_equal);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4429
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4430 /* bunch of mwAwareIdBlock allocated at once, free'd at once */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4431 idb = idbs = g_new(struct mwAwareIdBlock, g_list_length(buddies));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4432
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4433 /* first pass collects mwAwareIdBlock lists for each group */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4434 for(; buddies; buddies = buddies->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4435 GaimBuddy *b = buddies->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4436 GaimGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4437 const char *fn;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4438 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4439
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4440 /* nab the saved server alias and stick it on the buddy */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4441 fn = gaim_blist_node_get_string((GaimBlistNode *) b, BUDDY_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4442 gaim_blist_server_alias_buddy(b, fn);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4443
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4444 /* convert GaimBuddy into a mwAwareIdBlock */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4445 idb->type = mwAware_USER;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4446 idb->user = (char *) b->name;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4447 idb->community = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4448
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4449 /* put idb into the list associated with the buddy's group */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4450 g = gaim_find_buddys_group(b);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4451 l = g_hash_table_lookup(group_sets, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4452 l = g_list_prepend(l, idb++);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4453 g_hash_table_insert(group_sets, g, l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4454 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4455
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4456 /* each group's buddies get added in one shot, and schedule the blist
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4457 for saving */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4458 g_hash_table_foreach(group_sets, (GHFunc) foreach_add_buddies, pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4459 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4460
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4461 /* cleanup */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4462 g_hash_table_destroy(group_sets);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4463 g_free(idbs);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4464 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4465
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4466
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4467 static void mw_prpl_remove_buddy(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4468 GaimBuddy *buddy, GaimGroup *group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4469
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4470 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4471 struct mwAwareIdBlock idb = { mwAware_USER, buddy->name, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4472 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4473
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4474 GList *rem = g_list_prepend(NULL, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4475
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4476 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4477 group = gaim_find_buddys_group(buddy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4478 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4479
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4480 mwAwareList_removeAware(list, rem);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4481 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4482
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4483 g_list_free(rem);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4484 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4485
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4486
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4487 static void privacy_fill(struct mwPrivacyInfo *priv,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4488 GSList *members) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4489
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4490 struct mwUserItem *u;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4491 guint count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4492
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4493 count = g_slist_length(members);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4494 DEBUG_INFO("privacy_fill: %u members\n", count);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4495
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4496 priv->count = count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4497 priv->users = g_new0(struct mwUserItem, count);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4498
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4499 while(count--) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4500 u = priv->users + count;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4501 u->id = members->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4502 members = members->next;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4503 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4504 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4505
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4506
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4507 static void mw_prpl_set_permit_deny(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4508 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4509 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4510 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4511
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4512 struct mwPrivacyInfo privacy = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4513 .deny = FALSE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4514 .count = 0,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4515 .users = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4516 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4517
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4518 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4519
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4520 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4521 g_return_if_fail(acct != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4522
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4523 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4524 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4525
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4526 session = pd->session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4527 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4528
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4529 switch(acct->perm_deny) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4530 case GAIM_PRIVACY_DENY_USERS:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4531 DEBUG_INFO("GAIM_PRIVACY_DENY_USERS\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4532 privacy_fill(&privacy, acct->deny);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4533 privacy.deny = TRUE;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4534 break;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4535
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4536 case GAIM_PRIVACY_ALLOW_ALL:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4537 DEBUG_INFO("GAIM_PRIVACY_ALLOW_ALL\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4538 privacy.deny = TRUE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4539 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4540
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4541 case GAIM_PRIVACY_ALLOW_USERS:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4542 DEBUG_INFO("GAIM_PRIVACY_ALLOW_USERS\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4543 privacy_fill(&privacy, acct->permit);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4544 privacy.deny = FALSE;
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4545 break;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4546
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4547 case GAIM_PRIVACY_DENY_ALL:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4548 DEBUG_INFO("GAIM_PRIVACY_DENY_ALL\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4549 privacy.deny = FALSE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4550 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4551
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4552 default:
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4553 DEBUG_INFO("acct->perm_deny is 0x%x\n", acct->perm_deny);
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4554 return;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4555 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4556
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4557 mwSession_setPrivacyInfo(session, &privacy);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4558 g_free(privacy.users);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4559 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4560
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4561
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4562 static void mw_prpl_add_permit(GaimConnection *gc, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4563 mw_prpl_set_permit_deny(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4564 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4565
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4566
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4567 static void mw_prpl_add_deny(GaimConnection *gc, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4568 mw_prpl_set_permit_deny(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4569 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4570
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4571
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4572 static void mw_prpl_rem_permit(GaimConnection *gc, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4573 mw_prpl_set_permit_deny(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4574 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4575
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4576
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4577 static void mw_prpl_rem_deny(GaimConnection *gc, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4578 mw_prpl_set_permit_deny(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4579 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4580
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4581
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4582 static struct mwConference *conf_find(struct mwServiceConference *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4583 const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4584 GList *l, *ll;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4585 struct mwConference *conf = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4586
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4587 ll = mwServiceConference_getConferences(srvc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4588 for(l = ll; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4589 struct mwConference *c = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4590 if(! strcmp(name, mwConference_getName(c))) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4591 conf = c;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4592 break;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4593 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4594 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4595 g_list_free(ll);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4596
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4597 return conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4598 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4599
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4600
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4601 static void mw_prpl_join_chat(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4602 GHashTable *components) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4603
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4604 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4605 char *c, *t;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4606
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4607 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4608
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4609 c = g_hash_table_lookup(components, CHAT_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4610 t = g_hash_table_lookup(components, CHAT_KEY_TOPIC);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4611
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4612 if(g_hash_table_lookup(components, CHAT_KEY_IS_PLACE)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4613 /* use place service */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4614 struct mwServicePlace *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4615 struct mwPlace *place = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4616
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4617 srvc = pd->srvc_place;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4618 place = mwPlace_new(srvc, c, t);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4619 mwPlace_open(place);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4620
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4621 } else {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4622 /* use conference service */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4623 struct mwServiceConference *srvc;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4624 struct mwConference *conf = NULL;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4625
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4626 srvc = pd->srvc_conf;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4627 if(c) conf = conf_find(srvc, c);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4628
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4629 if(conf) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4630 DEBUG_INFO("accepting conference invitation\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4631 mwConference_accept(conf);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4632
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4633 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4634 DEBUG_INFO("creating new conference\n");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4635 conf = mwConference_new(srvc, t);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4636 mwConference_open(conf);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4637 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4638 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4639 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4640
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4641
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4642 static void mw_prpl_reject_chat(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4643 GHashTable *components) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4644
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4645 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4646 struct mwServiceConference *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4647 char *c;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4648
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4649 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4650 srvc = pd->srvc_conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4651
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4652 if(g_hash_table_lookup(components, CHAT_KEY_IS_PLACE)) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4653 ; /* nothing needs doing */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4654
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4655 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4656 /* reject conference */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4657 c = g_hash_table_lookup(components, CHAT_KEY_NAME);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4658 if(c) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4659 struct mwConference *conf = conf_find(srvc, c);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4660 if(conf) mwConference_reject(conf, ERR_SUCCESS, "Declined");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4661 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4662 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4663 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4664
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4665
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4666 static char *mw_prpl_get_chat_name(GHashTable *components) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4667 return g_hash_table_lookup(components, CHAT_KEY_NAME);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4668 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4669
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4670
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4671 static void mw_prpl_chat_invite(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4672 int id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4673 const char *invitation,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4674 const char *who) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4675
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4676 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4677 struct mwConference *conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4678 struct mwIdBlock idb = { (char *) who, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4679
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4680 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4681
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4682 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4683 conf = ID_TO_CONF(pd, id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4684
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4685 g_return_if_fail(conf != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4686
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4687 mwConference_invite(conf, &idb, invitation);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4688
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4689 /* @todo: use Place by default instead */
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4690 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4691
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4692
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4693 static void mw_prpl_chat_leave(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4694 int id) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4695
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4696 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4697 struct mwConference *conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4698
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4699 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4700
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4701 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4702 conf = ID_TO_CONF(pd, id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4703
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4704 if(conf) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4705 mwConference_destroy(conf, ERR_SUCCESS, "Leaving");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4706
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4707 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4708 struct mwPlace *place = ID_TO_PLACE(pd, id);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4709 g_return_if_fail(place != NULL);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4710
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4711 mwPlace_destroy(place, ERR_SUCCESS);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4712 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4713 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4714
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4715
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4716 static void mw_prpl_chat_whisper(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4717 int id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4718 const char *who,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4719 const char *message) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4720
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4721 mw_prpl_send_im(gc, who, message, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4722 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4723
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4724
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4725 static int mw_prpl_chat_send(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4726 int id,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4727 const char *message) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4728
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4729 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4730 struct mwConference *conf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4731
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4732 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4733
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4734 g_return_val_if_fail(pd != NULL, 0);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4735 conf = ID_TO_CONF(pd, id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4736
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4737 if(conf) {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4738 return ! mwConference_sendText(conf, message);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4739
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4740 } else {
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4741 struct mwPlace *place = ID_TO_PLACE(pd, id);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4742 g_return_val_if_fail(place != NULL, 0);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4743
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4744 return ! mwPlace_sendText(place, message);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4745 }
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4746 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4747
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4748
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4749 static void mw_prpl_keepalive(GaimConnection *gc) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4750 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4751
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4752 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4753
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4754 session = gc_to_session(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4755 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4756
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4757 mwSession_sendKeepalive(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4758 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4759
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4760
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4761 static void mw_prpl_alias_buddy(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4762 const char *who,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4763 const char *alias) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4764
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4765 struct mwGaimPluginData *pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4766 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4767
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4768 /* it's a change to the buddy list, so we've gotta reflect that in
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4769 the server copy */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4770
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4771 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4772 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4773
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4774
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4775 static void mw_prpl_group_buddy(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4776 const char *who,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4777 const char *old_group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4778 const char *new_group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4779
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4780 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4781 GList *gl = g_list_prepend(NULL, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4782
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4783 struct mwGaimPluginData *pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4784 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4785 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4786
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4787 /* add who to new_group's aware list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4788 group = gaim_find_group(new_group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4789 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4790 mwAwareList_addAware(list, gl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4791
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4792 /* remove who from old_group's aware list */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4793 group = gaim_find_group(old_group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4794 list = list_ensure(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4795 mwAwareList_removeAware(list, gl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4796
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4797 g_list_free(gl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4798
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4799 /* schedule the changes to be saved */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4800 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4801 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4802
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4803
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4804 static void mw_prpl_rename_group(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4805 const char *old,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4806 GaimGroup *group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4807 GList *buddies) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4808
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4809 struct mwGaimPluginData *pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4810 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4811
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4812 /* it's a change in the buddy list, so we've gotta reflect that in
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4813 the server copy. Also, having this function should prevent all
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4814 those buddies from being removed and re-added. We don't really
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4815 give a crap what the group is named in Gaim other than to record
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4816 that as the group name/alias */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4817
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4818 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4819 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4820
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4821
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4822 static void mw_prpl_buddy_free(GaimBuddy *buddy) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4823 /* I don't think we have any cleanup for buddies yet */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4824 ;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4825 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4826
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4827
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4828 static void mw_prpl_convo_closed(GaimConnection *gc, const char *who) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4829 struct mwGaimPluginData *pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4830 struct mwServiceIm *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4831 struct mwConversation *conv;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4832 struct mwIdBlock idb = { (char *) who, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4833
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4834 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4835
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4836 srvc = pd->srvc_im;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4837 g_return_if_fail(srvc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4838
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4839 conv = mwServiceIm_findConversation(srvc, &idb);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4840 if(! conv) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4841
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4842 if(mwConversation_isOpen(conv))
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4843 mwConversation_free(conv);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4844 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4845
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4846
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4847 static const char *mw_prpl_normalize(const GaimAccount *account,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4848 const char *id) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4849
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4850 /* code elsewhere assumes that the return value points to different
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4851 memory than the passed value, but it won't free the normalized
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4852 data. wtf? */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4853
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4854 static char buf[BUF_LEN];
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4855 strncpy(buf, id, sizeof(buf));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4856 return buf;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4857 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4858
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4859
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4860 static void mw_prpl_remove_group(GaimConnection *gc, GaimGroup *group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4861 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4862 struct mwAwareList *list;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4863
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4864 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4865 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4866 g_return_if_fail(pd->group_list_map != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4867
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4868 list = g_hash_table_lookup(pd->group_list_map, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4869
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4870 if(list) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4871 g_hash_table_remove(pd->group_list_map, list);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4872 g_hash_table_remove(pd->group_list_map, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4873 mwAwareList_free(list);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4874
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4875 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4876 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4877 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4878
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4879
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4880 static gboolean mw_prpl_can_receive_file(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4881 const char *who) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4882 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4883 struct mwServiceAware *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4884 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4885
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4886 g_return_val_if_fail(gc != NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4887
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4888 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4889 g_return_val_if_fail(pd != NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4890
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4891 srvc = pd->srvc_aware;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4892 g_return_val_if_fail(srvc != NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4893
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4894 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4895 g_return_val_if_fail(acct != NULL, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4896
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4897 return gaim_find_buddy(acct, who) &&
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4898 user_supports(srvc, who, mwAttribute_FILE_TRANSFER);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4899 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4900
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4901
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4902 static void ft_outgoing_init(GaimXfer *xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4903 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4904 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4905
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4906 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4907 struct mwServiceFileTransfer *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4908 struct mwFileTransfer *ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4909
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4910 const char *filename;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4911 gsize filesize;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4912 FILE *fp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4913
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4914 struct mwIdBlock idb = { NULL, NULL };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4915
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4916 DEBUG_INFO("ft_outgoing_init\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4917
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4918 acct = gaim_xfer_get_account(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4919 gc = gaim_account_get_connection(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4920 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4921 srvc = pd->srvc_ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4922
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4923 filename = gaim_xfer_get_local_filename(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4924 filesize = gaim_xfer_get_size(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4925 idb.user = xfer->who;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4926
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4927 /* test that we can actually send the file */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4928 fp = g_fopen(filename, "rb");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4929 if(! fp) {
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4930 char *msg = g_strdup_printf(_("Error reading file %s: \n%s\n"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4931 filename, strerror(errno));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4932 gaim_xfer_error(gaim_xfer_get_type(xfer), acct, xfer->who, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4933 g_free(msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4934 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4935 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4936 fclose(fp);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4937
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4938 {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4939 char *tmp = strrchr(filename, G_DIR_SEPARATOR);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4940 if(tmp++) filename = tmp;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4941 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4942
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4943 ft = mwFileTransfer_new(srvc, &idb, NULL, filename, filesize);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4944
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4945 gaim_xfer_ref(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4946 mwFileTransfer_setClientData(ft, xfer, (GDestroyNotify) gaim_xfer_unref);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4947 xfer->data = ft;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4948
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4949 mwFileTransfer_offer(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4950 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4951
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4952
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4953 static void ft_outgoing_cancel(GaimXfer *xfer) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4954 struct mwFileTransfer *ft = xfer->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4955 if(ft) mwFileTransfer_cancel(ft);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4956 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4957
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4958
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4959 static void mw_prpl_send_file(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4960 const char *who, const char *file) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4961
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4962 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4963 GaimXfer *xfer;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4964
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4965 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4966
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4967 xfer = gaim_xfer_new(acct, GAIM_XFER_SEND, who);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4968 gaim_xfer_set_init_fnc(xfer, ft_outgoing_init);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4969 gaim_xfer_set_cancel_send_fnc(xfer, ft_outgoing_cancel);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4970
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4971 if(file) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4972 DEBUG_INFO("file != NULL\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4973 gaim_xfer_request_accepted(xfer, file);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4974
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4975 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4976 DEBUG_INFO("file == NULL\n");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4977 gaim_xfer_request(xfer);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4978 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4979 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4980
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4981
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4982 static GaimPluginProtocolInfo mw_prpl_info = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4983 .options = OPT_PROTO_IM_IMAGE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4984 .user_splits = NULL, /*< set in mw_plugin_init */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4985 .protocol_options = NULL, /*< set in mw_plugin_init */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4986 .icon_spec = NO_BUDDY_ICONS,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4987 .list_icon = mw_prpl_list_icon,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4988 .list_emblems = mw_prpl_list_emblems,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4989 .status_text = mw_prpl_status_text,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4990 .tooltip_text = mw_prpl_tooltip_text,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4991 .status_types = mw_prpl_status_types,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4992 .blist_node_menu = mw_prpl_blist_node_menu,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4993 .chat_info = mw_prpl_chat_info,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4994 .chat_info_defaults = mw_prpl_chat_info_defaults,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4995 .login = mw_prpl_login,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4996 .close = mw_prpl_close,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4997 .send_im = mw_prpl_send_im,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4998 .set_info = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4999 .send_typing = mw_prpl_send_typing,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5000 .get_info = mw_prpl_get_info,
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11547
diff changeset
5001 .set_status = mw_prpl_set_status,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5002 .set_idle = mw_prpl_set_idle,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5003 .change_passwd = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5004 .add_buddy = mw_prpl_add_buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5005 .add_buddies = mw_prpl_add_buddies,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5006 .remove_buddy = mw_prpl_remove_buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5007 .remove_buddies = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5008 .add_permit = mw_prpl_add_permit,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5009 .add_deny = mw_prpl_add_deny,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5010 .rem_permit = mw_prpl_rem_permit,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5011 .rem_deny = mw_prpl_rem_deny,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5012 .set_permit_deny = mw_prpl_set_permit_deny,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5013 .join_chat = mw_prpl_join_chat,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5014 .reject_chat = mw_prpl_reject_chat,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5015 .get_chat_name = mw_prpl_get_chat_name,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5016 .chat_invite = mw_prpl_chat_invite,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5017 .chat_leave = mw_prpl_chat_leave,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5018 .chat_whisper = mw_prpl_chat_whisper,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5019 .chat_send = mw_prpl_chat_send,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5020 .keepalive = mw_prpl_keepalive,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5021 .register_user = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5022 .get_cb_info = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5023 .get_cb_away = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5024 .alias_buddy = mw_prpl_alias_buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5025 .group_buddy = mw_prpl_group_buddy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5026 .rename_group = mw_prpl_rename_group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5027 .buddy_free = mw_prpl_buddy_free,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5028 .convo_closed = mw_prpl_convo_closed,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5029 .normalize = mw_prpl_normalize,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5030 .set_buddy_icon = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5031 .remove_group = mw_prpl_remove_group,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5032 .get_cb_real_name = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5033 .set_chat_topic = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5034 .find_blist_chat = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5035 .roomlist_get_list = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5036 .roomlist_expand_category = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5037 .can_receive_file = mw_prpl_can_receive_file,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5038 .send_file = mw_prpl_send_file,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5039 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5040
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5041
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5042 static GaimPluginPrefFrame *
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5043 mw_plugin_get_plugin_pref_frame(GaimPlugin *plugin) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5044 GaimPluginPrefFrame *frame;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5045 GaimPluginPref *pref;
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5046
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5047 frame = gaim_plugin_pref_frame_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5048
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5049 pref = gaim_plugin_pref_new_with_label(_("Remotely Stored Buddy List"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5050 gaim_plugin_pref_frame_add(frame, pref);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5051
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5052
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5053 pref = gaim_plugin_pref_new_with_name(MW_PRPL_OPT_BLIST_ACTION);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5054 gaim_plugin_pref_set_label(pref, _("Buddy List Storage Mode"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5055
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5056 gaim_plugin_pref_set_type(pref, GAIM_PLUGIN_PREF_CHOICE);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5057 gaim_plugin_pref_add_choice(pref, _("Local Buddy List Only"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5058 GINT_TO_POINTER(blist_choice_LOCAL));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5059 gaim_plugin_pref_add_choice(pref, _("Merge List from Server"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5060 GINT_TO_POINTER(blist_choice_MERGE));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5061 gaim_plugin_pref_add_choice(pref, _("Merge and Save List to Server"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5062 GINT_TO_POINTER(blist_choice_STORE));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5063 gaim_plugin_pref_add_choice(pref, _("Synchronize List with Server"),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5064 GINT_TO_POINTER(blist_choice_SYNCH));
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5065
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5066 gaim_plugin_pref_frame_add(frame, pref);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5067
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5068 return frame;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5069 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5070
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5071
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5072 static GaimPluginUiInfo mw_plugin_ui_info = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5073 .get_plugin_pref_frame = mw_plugin_get_plugin_pref_frame,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5074 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5075
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5076
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5077 static void status_msg_action_cb(GaimConnection *gc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5078 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5079 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5080 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5081 const char *msg;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5082
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5083 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5084 struct mwServiceStorage *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5085 struct mwStorageUnit *unit;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5086
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5087 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5088 srvc = pd->srvc_store;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5089
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5090 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5091
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5092 f = gaim_request_fields_get_field(fields, "active");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5093 msg = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5094 gaim_account_set_string(acct, MW_KEY_ACTIVE_MSG, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5095 unit = mwStorageUnit_newString(mwStore_ACTIVE_MESSAGES, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5096 mwServiceStorage_save(srvc, unit, NULL, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5097
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5098 f = gaim_request_fields_get_field(fields, "away");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5099 msg = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5100 gaim_account_set_string(acct, MW_KEY_AWAY_MSG, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5101 unit = mwStorageUnit_newString(mwStore_AWAY_MESSAGES, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5102 mwServiceStorage_save(srvc, unit, NULL, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5103
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5104 f = gaim_request_fields_get_field(fields, "busy");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5105 msg = gaim_request_field_string_get_value(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5106 gaim_account_set_string(acct, MW_KEY_BUSY_MSG, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5107 unit = mwStorageUnit_newString(mwStore_BUSY_MESSAGES, msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5108 mwServiceStorage_save(srvc, unit, NULL, NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5109
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5110 #if 0
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5111 /* XXX */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5112 /* need to propagate the message change if we're in any of those
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5113 default states */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5114 msg = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5115 if(!gc->away_state || !strcmp(gc->away_state, MW_STATE_ACTIVE)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5116 msg = MW_STATE_ACTIVE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5117 } else if(gc->away_state && !strcmp(gc->away_state, MW_STATE_AWAY)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5118 msg = MW_STATE_AWAY;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5119 } else if(gc->away_state && !strcmp(gc->away_state, MW_STATE_BUSY)) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5120 msg = MW_STATE_BUSY;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5121 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5122 if(msg)
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5123 serv_set_away(gc, msg, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5124 #endif
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5125 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5126
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5127
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5128 /** Prompt for messages for the three default status types. These
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5129 values should be mirrored as strings in the storage service */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5130 static void status_msg_action(GaimPluginAction *act) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5131 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5132 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5133
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5134 GaimRequestFields *fields;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5135 GaimRequestFieldGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5136 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5137
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5138 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5139 const char *val;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5140
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5141 gc = act->context;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5142 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5143
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5144 fields = gaim_request_fields_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5145
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5146 g = gaim_request_field_group_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5147 gaim_request_fields_add_group(fields, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5148
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5149 val = gaim_account_get_string(acct, MW_KEY_ACTIVE_MSG,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5150 MW_PLUGIN_DEFAULT_ACTIVE_MSG);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5151 f = gaim_request_field_string_new("active", _("Active Message"), val, FALSE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5152 gaim_request_field_set_required(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5153 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5154
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5155 val = gaim_account_get_string(acct, MW_KEY_AWAY_MSG,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5156 MW_PLUGIN_DEFAULT_AWAY_MSG);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5157 f = gaim_request_field_string_new("away", _("Away Message"), val, FALSE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5158 gaim_request_field_set_required(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5159 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5160
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5161 val = gaim_account_get_string(acct, MW_KEY_BUSY_MSG,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5162 MW_PLUGIN_DEFAULT_BUSY_MSG);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5163 f = gaim_request_field_string_new("busy", _("Busy Message"), val, FALSE);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5164 gaim_request_field_set_required(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5165 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5166
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5167 msgA = _("Default status messages");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5168 msgB = ("");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5169
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5170 gaim_request_fields(gc, _("Edit Status Messages"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5171 msgA, msgB, fields,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5172 _("OK"), G_CALLBACK(status_msg_action_cb),
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5173 _("Cancel"), NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5174 gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5175 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5176
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5177
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5178 static void st_import_action_cb(GaimConnection *gc, char *filename) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5179 struct mwSametimeList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5180
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5181 FILE *file;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5182 char buf[BUF_LEN];
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5183 size_t len;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5184
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5185 GString *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5186
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5187 file = fopen(filename, "r");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5188 g_return_if_fail(file != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5189
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5190 str = g_string_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5191 while( (len = fread(buf, 1, BUF_LEN, file)) ) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5192 g_string_append_len(str, buf, len);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5193 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5194
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5195 fclose(file);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5196
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5197 l = mwSametimeList_load(str->str);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5198 g_string_free(str, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5199
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5200 blist_merge(gc, l);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5201 mwSametimeList_free(l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5202 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5203
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5204
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5205 /** prompts for a file to import blist from */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5206 static void st_import_action(GaimPluginAction *act) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5207 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5208 GaimAccount *account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5209 char *title;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5210
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5211 gc = act->context;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5212 account = gaim_connection_get_account(gc);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5213 title = g_strdup_printf(_("Import Sametime List for Account %s"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5214 gaim_account_get_username(account));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5215
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5216 gaim_request_file(gc, title, NULL, FALSE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5217 G_CALLBACK(st_import_action_cb), NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5218 gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5219
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5220 g_free(title);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5221 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5222
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5223
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5224 static void st_export_action_cb(GaimConnection *gc, char *filename) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5225 struct mwSametimeList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5226 char *str;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5227 FILE *file;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5228
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5229 file = fopen(filename, "w");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5230 g_return_if_fail(file != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5231
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5232 l = mwSametimeList_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5233 blist_export(gc, l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5234 str = mwSametimeList_store(l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5235 mwSametimeList_free(l);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5236
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5237 fprintf(file, "%s", str);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5238 fclose(file);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5239
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5240 g_free(str);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5241 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5242
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5243
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5244 /** prompts for a file to export blist to */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5245 static void st_export_action(GaimPluginAction *act) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5246 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5247 GaimAccount *account;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5248 char *title;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5249
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5250 gc = act->context;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5251 account = gaim_connection_get_account(gc);
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5252 title = g_strdup_printf(_("Export Sametime List for Account %s"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5253 gaim_account_get_username(account));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5254
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5255 gaim_request_file(gc, title, NULL, TRUE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5256 G_CALLBACK(st_export_action_cb), NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5257 gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5258
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5259 g_free(title);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5260 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5261
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5262
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5263 static void remote_group_multi_cleanup(gpointer ignore,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5264 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5265
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5266 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5267 const GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5268
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5269 f = gaim_request_fields_get_field(fields, "group");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5270 l = gaim_request_field_list_get_items(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5271
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5272 for(; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5273 const char *i = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5274 struct resolved_id *res;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5275
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5276 res = gaim_request_field_list_get_data(f, i);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5277
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5278 g_free(res->id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5279 g_free(res->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5280 g_free(res);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5281 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5282 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5283
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5284
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5285 static void remote_group_done(struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5286 const char *id, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5287 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5288 GaimAccount *acct;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5289 GaimGroup *group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5290 GaimBlistNode *gn;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5291 const char *owner;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5292
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5293 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5294
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5295 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5296 acct = gaim_connection_get_account(gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5297
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5298 /* collision checking */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5299 group = gaim_find_group(name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5300 if(group) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5301 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5302
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5303 msgA = _("Unable to add group: group exists");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5304 msgB = _("A group named '%s' already exists in your buddy list.");
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5305 msgB = g_strdup_printf(msgB, name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5306
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5307 gaim_notify_error(gc, _("Unable to add group"), msgA, msgB);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5308
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5309 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5310 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5311 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5312
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5313 group = gaim_group_new(name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5314 gn = (GaimBlistNode *) group;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5315
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5316 owner = gaim_account_get_username(acct);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5317
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5318 gaim_blist_node_set_string(gn, GROUP_KEY_NAME, id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5319 gaim_blist_node_set_int(gn, GROUP_KEY_TYPE, mwSametimeGroup_DYNAMIC);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5320 gaim_blist_node_set_string(gn, GROUP_KEY_OWNER, owner);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5321 gaim_blist_add_group(group, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5322
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5323 group_add(pd, group);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5324 blist_schedule(pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5325 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5326
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5327
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5328 static void remote_group_multi_cb(struct mwGaimPluginData *pd,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5329 GaimRequestFields *fields) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5330 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5331 const GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5332
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5333 f = gaim_request_fields_get_field(fields, "group");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5334 l = gaim_request_field_list_get_selected(f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5335
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5336 if(l) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5337 const char *i = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5338 struct resolved_id *res;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5339
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5340 res = gaim_request_field_list_get_data(f, i);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5341 remote_group_done(pd, res->id, res->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5342 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5343
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5344 remote_group_multi_cleanup(NULL, fields);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5345 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5346
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5347
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5348 static void remote_group_multi(struct mwResolveResult *result,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5349 struct mwGaimPluginData *pd) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5350
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5351 GaimRequestFields *fields;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5352 GaimRequestFieldGroup *g;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5353 GaimRequestField *f;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5354 GList *l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5355 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5356
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5357 GaimConnection *gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5358
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5359 fields = gaim_request_fields_new();
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5360
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5361 g = gaim_request_field_group_new(NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5362 gaim_request_fields_add_group(fields, g);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5363
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5364 f = gaim_request_field_list_new("group", _("Possible Matches"));
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5365 gaim_request_field_list_set_multi_select(f, FALSE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5366 gaim_request_field_set_required(f, TRUE);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5367
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5368 for(l = result->matches; l; l = l->next) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5369 struct mwResolveMatch *match = l->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5370 struct resolved_id *res = g_new0(struct resolved_id, 1);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5371
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5372 res->id = g_strdup(match->id);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5373 res->name = g_strdup(match->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5374
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5375 gaim_request_field_list_add(f, res->name, res);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5376 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5377
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5378 gaim_request_field_group_add_field(g, f);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5379
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5380 msgA = _("Notes Address Book group results");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5381 msgB = _("The identifier '%s' may possibly refer to any of the following"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5382 " Notes Address Book groups. Please select the correct group from"
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5383 " the list below to add it to your buddy list.");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5384 msgB = g_strdup_printf(msgB, result->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5385
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5386 gaim_request_fields(gc, _("Select Notes Address Book"),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5387 msgA, msgB, fields,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5388 _("Add Group"), G_CALLBACK(remote_group_multi_cb),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5389 _("Cancel"), G_CALLBACK(remote_group_multi_cleanup),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5390 pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5391
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5392 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5393 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5394
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5395
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5396 static void remote_group_resolved(struct mwServiceResolve *srvc,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5397 guint32 id, guint32 code, GList *results,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5398 gpointer b) {
11133
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
5399
1081735edc10 [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
5400 struct mwResolveResult *res = NULL;
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5401 struct mwSession *session;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5402 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5403 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5404
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5405 session = mwService_getSession(MW_SERVICE(srvc));
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5406 g_return_if_fail(session != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5407
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5408 pd = mwSession_getClientData(session);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5409 g_return_if_fail(pd != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5410
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5411 gc = pd->gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5412 g_return_if_fail(gc != NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5413
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5414 if(!code && results) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5415 res = results->data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5416
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5417 if(res->matches) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5418 remote_group_multi(res, pd);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5419 return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5420 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5421 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5422
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5423 if(res && res->name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5424 char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5425
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5426 msgA = _("Unable to add group: group not found");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5427
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5428 msgB = _("The identifier '%s' did not match any Notes Address Book"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5429 " groups in your Sametime community.");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5430 msgB = g_strdup_printf(msgB, res->name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5431
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5432 gaim_notify_error(gc, _("Unable to add group"), msgA, msgB);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5433
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5434 g_free(msgB);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5435 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5436 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5437
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5438
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5439 static void remote_group_action_cb(GaimConnection *gc, const char *name) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5440 struct mwGaimPluginData *pd;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5441 struct mwServiceResolve *srvc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5442 GList *query;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5443 enum mwResolveFlag flags;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5444 guint32 req;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5445
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5446 pd = gc->proto_data;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5447 srvc = pd->srvc_resolve;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5448
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5449 query = g_list_prepend(NULL, (char *) name);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5450 flags = mwResolveFlag_FIRST | mwResolveFlag_GROUPS;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5451
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5452 req = mwServiceResolve_resolve(srvc, query, flags, remote_group_resolved,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5453 NULL, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5454 g_list_free(query);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5455
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5456 if(req == SEARCH_ERROR) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5457 /** @todo display error */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5458 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5459 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5460
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5461
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5462 static void remote_group_action(GaimPluginAction *act) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5463 GaimConnection *gc;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5464 const char *msgA, *msgB;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5465
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5466 gc = act->context;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5467
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5468 msgA = _("Notes Address Book Group");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5469 msgB = _("Enter the name of a Notes Address Book group in the field below"
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5470 " to add the group and its members to your buddy list.");
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5471
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5472 gaim_request_input(gc, _("Add Group"), msgA, msgB, NULL,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5473 FALSE, FALSE, NULL,
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5474 _("Add"), G_CALLBACK(remote_group_action_cb),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5475 _("Cancel"), NULL,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5476 gc);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5477 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5478
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5479
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5480 static GList *mw_plugin_actions(GaimPlugin *plugin, gpointer context) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5481 GaimPluginAction *act;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5482 GList *l = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5483
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5484 act = gaim_plugin_action_new(_("Set Status Messages..."),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5485 status_msg_action);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5486 l = g_list_append(l, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5487
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5488 act = gaim_plugin_action_new(_("Import Sametime List..."),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5489 st_import_action);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5490 l = g_list_append(l, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5491
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5492 act = gaim_plugin_action_new(_("Export Sametime List..."),
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5493 st_export_action);
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5494 l = g_list_append(l, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5495
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5496 act = gaim_plugin_action_new(_("Add Notes Address Book Group..."),
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5497 remote_group_action);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5498 l = g_list_append(l, act);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5499
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5500 return l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5501 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5502
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5503
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5504 static gboolean mw_plugin_load(GaimPlugin *plugin) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5505 return TRUE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5506 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5507
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5508
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5509 static gboolean mw_plugin_unload(GaimPlugin *plugin) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5510 return TRUE;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5511 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5512
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5513
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5514 static void mw_plugin_destroy(GaimPlugin *plugin) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5515 g_log_remove_handler(G_LOG_DOMAIN, log_handler[0]);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5516 g_log_remove_handler("meanwhile", log_handler[1]);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5517 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5518
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5519
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5520 static GaimPluginInfo mw_plugin_info = {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5521 .magic = GAIM_PLUGIN_MAGIC,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5522 .major_version = GAIM_MAJOR_VERSION,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5523 .minor_version = GAIM_MINOR_VERSION,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5524 .type = GAIM_PLUGIN_PROTOCOL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5525 .ui_requirement = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5526 .flags = 0,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5527 .dependencies = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5528 .priority = GAIM_PRIORITY_DEFAULT,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5529 .id = PLUGIN_ID,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5530 .name = PLUGIN_NAME,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5531 .version = VERSION,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5532 .summary = PLUGIN_SUMMARY,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5533 .description = PLUGIN_DESC,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5534 .author = PLUGIN_AUTHOR,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5535 .homepage = PLUGIN_HOMEPAGE,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5536 .load = mw_plugin_load,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5537 .unload = mw_plugin_unload,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5538 .destroy = mw_plugin_destroy,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5539 .ui_info = NULL,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5540 .extra_info = &mw_prpl_info,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5541 .prefs_info = &mw_plugin_ui_info,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5542 .actions = mw_plugin_actions,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5543 };
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5544
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5545
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5546 static void mw_log_handler(const gchar *domain, GLogLevelFlags flags,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5547 const gchar *msg, gpointer data) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5548 char *nl;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5549
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5550 if(! msg) return;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5551
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5552 /* annoying! */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5553 nl = g_strdup_printf("%s\n", msg);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5554
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5555 /* handle g_log requests via gaim's built-in debug logging */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5556 if(flags & G_LOG_LEVEL_ERROR) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5557 gaim_debug_error(domain, nl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5558
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5559 } else if(flags & G_LOG_LEVEL_WARNING) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5560 gaim_debug_warning(domain, nl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5561
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5562 } else {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5563 gaim_debug_info(domain, nl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5564 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5565
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5566 g_free(nl);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5567 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5568
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5569
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5570 static void mw_plugin_init(GaimPlugin *plugin) {
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5571 GaimAccountOption *opt;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5572 GList *l = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5573
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5574 GLogLevelFlags logflags =
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5575 G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5576
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5577 /* set up the preferences */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5578 gaim_prefs_add_none(MW_PRPL_OPT_BASE);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5579 gaim_prefs_add_int(MW_PRPL_OPT_BLIST_ACTION, BLIST_CHOICE_DEFAULT);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5580
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5581 /* remove dead preferences */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5582 gaim_prefs_remove(MW_PRPL_OPT_PSYCHIC);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5583 gaim_prefs_remove(MW_PRPL_OPT_SAVE_DYNAMIC);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5584
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5585 /* host to connect to */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5586 opt = gaim_account_option_string_new(_("Server"), MW_KEY_HOST,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5587 MW_PLUGIN_DEFAULT_HOST);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5588 l = g_list_append(l, opt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5589
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5590 /* port to connect to */
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5591 opt = gaim_account_option_int_new(_("Port"), MW_KEY_PORT,
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5592 MW_PLUGIN_DEFAULT_PORT);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5593 l = g_list_append(l, opt);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5594
11943
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5595 /* default attempted encoding */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5596 opt = gaim_account_option_string_new(_("Encoding"), MW_KEY_ENCODING,
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5597 MW_PLUGIN_DEFAULT_ENCODING);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5598 l = g_list_append(l, opt);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5599
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5600 { /* copy the old force login setting from prefs if it's
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5601 there. Don't delete the preference, since there may be more
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5602 than one account that wants to check for it. */
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5603 gboolean b = FALSE;
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5604 const char *label = _("Force Login (Ignore Server Redirects)");
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5605
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5606 if(gaim_prefs_exists(MW_PRPL_OPT_FORCE_LOGIN))
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5607 b = gaim_prefs_get_bool(MW_PRPL_OPT_FORCE_LOGIN);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5608
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5609 opt = gaim_account_option_bool_new(label, MW_KEY_FORCE, b);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5610 l = g_list_append(l, opt);
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5611 }
0110fc7c6a8a [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5612
10977
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5613 mw_prpl_info.protocol_options = l;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5614 l = NULL;
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5615
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5616 /* forward all our g_log messages to gaim. Generally all the logging
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5617 calls are using gaim_log directly, but the g_return macros will
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5618 get caught here */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5619 log_handler[0] = g_log_set_handler(G_LOG_DOMAIN, logflags,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5620 mw_log_handler, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5621
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5622 /* redirect meanwhile's logging to gaim's */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5623 log_handler[1] = g_log_set_handler("meanwhile", logflags,
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5624 mw_log_handler, NULL);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5625 }
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5626
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5627
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5628 GAIM_INIT_PLUGIN(meanwhile, mw_plugin_init, mw_plugin_info);
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5629 /* The End. */
2ce8ec01a064 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5630