libpurple/protocols/sametime/sametime.c

Mon, 18 Jun 2007 12:37:29 +0000

author
Andreas Monitzer <am@adiumx.com>
date
Mon, 18 Jun 2007 12:37:29 +0000
branch
soc.2007.xmpp
changeset 17800
39a0f9ed0e26
parent 17791
b947d72db9db
child 18718
17a6c2c4820e
permissions
-rw-r--r--

Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.

10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3 Meanwhile Protocol Plugin for Purple
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4 Adds Lotus Sametime support to Purple using the Meanwhile library
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
6 Copyright (C) 2004 Christopher (siege) O'Brien <siege@preoccupied.net>
14170
f611621bc8a0 [gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents: 14151
diff changeset
7
10977
5802457af313 [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
5802457af313 [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
5802457af313 [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
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
11 your option) any later version.
14170
f611621bc8a0 [gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents: 14151
diff changeset
12
10977
5802457af313 [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
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
14 WITHOUT ANY WARRANTY; without even the implied warranty of
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
16 General Public License for more details.
14170
f611621bc8a0 [gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents: 14151
diff changeset
17
10977
5802457af313 [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
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
19 along with this program; if not, write to the Free Software
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
21 USA.
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
22 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
23
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
24
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
25 /* system includes */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
26 #include <stdlib.h>
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
27 #include <time.h>
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
28
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
29 /* glib includes */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
30 #include <glib.h>
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
31 #include <glib/ghash.h>
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
32 #include <glib/glist.h>
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
33
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
34 /* purple includes */
14013
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
35 #include "internal.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
36 #include "config.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
37
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
38 #include "account.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
39 #include "accountopt.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
40 #include "circbuffer.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
41 #include "conversation.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
42 #include "debug.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
43 #include "ft.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
44 #include "imgstore.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
45 #include "mime.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
46 #include "notify.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
47 #include "plugin.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
48 #include "privacy.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
49 #include "prpl.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
50 #include "request.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
51 #include "util.h"
86dac5633bd9 [gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents: 13844
diff changeset
52 #include "version.h"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
53
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
54 /* meanwhile includes */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
55 #include <mw_cipher.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
56 #include <mw_common.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
57 #include <mw_error.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
58 #include <mw_service.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
59 #include <mw_session.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
60 #include <mw_srvc_aware.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
61 #include <mw_srvc_conf.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
62 #include <mw_srvc_ft.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
63 #include <mw_srvc_im.h>
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
64 #include <mw_srvc_place.h>
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
65 #include <mw_srvc_resolve.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
66 #include <mw_srvc_store.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
67 #include <mw_st_list.h>
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
68
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
69 /* plugin includes */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
70 #include "sametime.h"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
71
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
72
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
73 /* considering that there's no display of this information for prpls,
5802457af313 [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,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
75 I do it all for you. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
76 /* scratch that, I just added it to the prpl options panel */
14052
861fddc53217 [gaim-migrate @ 16563]
Evan Schoenberg <evands@pidgin.im>
parents: 14032
diff changeset
77 #define PLUGIN_ID "prpl-meanwhile"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
78 #define PLUGIN_NAME "Sametime"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
79 #define PLUGIN_SUMMARY "Sametime Protocol Plugin"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
80 #define PLUGIN_DESC "Open implementation of a Lotus Sametime client"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
81 #define PLUGIN_AUTHOR "Christopher (siege) O'Brien <siege@preoccupied.net>"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
82 #define PLUGIN_HOMEPAGE "http://meanwhile.sourceforge.net/"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
83
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
84
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
85 /* plugin preference names */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
86 #define MW_PRPL_OPT_BASE "/plugins/prpl/meanwhile"
5802457af313 [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"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
88 #define MW_PRPL_OPT_PSYCHIC MW_PRPL_OPT_BASE "/psychic"
5802457af313 [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"
5802457af313 [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"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
91
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
92
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
93 /* stages of connecting-ness */
13779
410869639392 [gaim-migrate @ 16189]
Christopher O'Brien <siege@pidgin.im>
parents: 13713
diff changeset
94 #define MW_CONNECT_STEPS 11
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
95
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
96
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
97 /* stages of conciousness */
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
98 #define MW_STATE_OFFLINE "offline"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
99 #define MW_STATE_ACTIVE "active"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
100 #define MW_STATE_AWAY "away"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
101 #define MW_STATE_BUSY "dnd"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
102 #define MW_STATE_MESSAGE "message"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
103 #define MW_STATE_ENLIGHTENED "buddha"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
104
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
105
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
106 /* keys to get/set chat information */
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
107 #define CHAT_KEY_CREATOR "chat.creator"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
108 #define CHAT_KEY_NAME "chat.name"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
109 #define CHAT_KEY_TOPIC "chat.topic"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
110 #define CHAT_KEY_INVITE "chat.invite"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
111 #define CHAT_KEY_IS_PLACE "chat.is_place"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
112
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
113
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
114 /* key for associating a mwLoginType with a buddy */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
115 #define BUDDY_KEY_CLIENT "meanwhile.client"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
116
5802457af313 [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 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
118 #define BUDDY_KEY_NAME "meanwhile.shortname"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
119
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
120 /* enum mwSametimeUserType */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
121 #define BUDDY_KEY_TYPE "meanwhile.type"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
122
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
123
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
124 /* key for the real group name for a meanwhile group */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
125 #define GROUP_KEY_NAME "meanwhile.group"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
126
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
127 /* enum mwSametimeGroupType */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
128 #define GROUP_KEY_TYPE "meanwhile.type"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
129
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
130 /* NAB group owning account */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
131 #define GROUP_KEY_OWNER "meanwhile.account"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
132
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
133 /* key gtk blist uses to indicate a collapsed group */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
134 #define GROUP_KEY_COLLAPSED "collapsed"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
135
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
136
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
137 /* verification replacement */
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
138 #define mwSession_NO_SECRET "meanwhile.no_secret"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
139
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
140
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
141 /* keys to get/set purple plugin information */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
142 #define MW_KEY_HOST "server"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
143 #define MW_KEY_PORT "port"
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
144 #define MW_KEY_FORCE "force_login"
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
145 #define MW_KEY_FAKE_IT "fake_client_id"
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
146 #define MW_KEY_CLIENT "client_id_val"
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
147 #define MW_KEY_MAJOR "client_major"
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
148 #define MW_KEY_MINOR "client_minor"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
149
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
150
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
151 /** number of seconds from the first blist change before a save to the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
152 storage service occurs. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
153 #define BLIST_SAVE_SECONDS 15
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
154
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
155
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
156 /** the possible buddy list storage settings */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
157 enum blist_choice {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
158 blist_choice_LOCAL = 1, /**< local only */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
159 blist_choice_MERGE = 2, /**< merge from server */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
160 blist_choice_STORE = 3, /**< merge from and save to server */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
161 blist_choice_SYNCH = 4, /**< sync with server */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
162 };
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
163
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
164
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
165 /** the default blist storage option */
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
166 #define BLIST_CHOICE_DEFAULT blist_choice_SYNCH
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
167
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
168
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
169 /* testing for the above */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
170 #define BLIST_PREF_IS(n) (purple_prefs_get_int(MW_PRPL_OPT_BLIST_ACTION)==(n))
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
171 #define BLIST_PREF_IS_LOCAL() BLIST_PREF_IS(blist_choice_LOCAL)
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
172 #define BLIST_PREF_IS_MERGE() BLIST_PREF_IS(blist_choice_MERGE)
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
173 #define BLIST_PREF_IS_STORE() BLIST_PREF_IS(blist_choice_STORE)
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
174 #define BLIST_PREF_IS_SYNCH() BLIST_PREF_IS(blist_choice_SYNCH)
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
175
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
176
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
177 /* debugging output */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
178 #define DEBUG_ERROR(a...) purple_debug_error(G_LOG_DOMAIN, a)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
179 #define DEBUG_INFO(a...) purple_debug_info(G_LOG_DOMAIN, a)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
180 #define DEBUG_MISC(a...) purple_debug_misc(G_LOG_DOMAIN, a)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
181 #define DEBUG_WARN(a...) purple_debug_warning(G_LOG_DOMAIN, a)
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
182
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
183
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
184 /** ensure non-null strings */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
185 #ifndef NSTR
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
186 # define NSTR(str) ((str)? (str): "(null)")
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
187 #endif
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
188
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
189
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
190 /** calibrates distinct secure channel nomenclature */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
191 static const unsigned char no_secret[] = {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
192 0x2d, 0x2d, 0x20, 0x73, 0x69, 0x65, 0x67, 0x65,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
193 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x6a,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
194 0x65, 0x6e, 0x6e, 0x69, 0x20, 0x61, 0x6e, 0x64,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
195 0x20, 0x7a, 0x6f, 0x65, 0x20, 0x2d, 0x2d, 0x00,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
196 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
197
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
198
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
199 /** handler IDs from g_log_set_handler in mw_plugin_init */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
200 static guint log_handler[2] = { 0, 0 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
201
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
202
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
203 /** the purple plugin data.
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
204 available as gc->proto_data and mwSession_getClientData */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
205 struct mwPurplePluginData {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
206 struct mwSession *session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
207
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
208 struct mwServiceAware *srvc_aware;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
209 struct mwServiceConference *srvc_conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
210 struct mwServiceFileTransfer *srvc_ft;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
211 struct mwServiceIm *srvc_im;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
212 struct mwServicePlace *srvc_place;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
213 struct mwServiceResolve *srvc_resolve;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
214 struct mwServiceStorage *srvc_store;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
215
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
216 /** map of PurpleGroup:mwAwareList and mwAwareList:PurpleGroup */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
217 GHashTable *group_list_map;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
218
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
219 /** event id for the buddy list save callback */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
220 guint save_event;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
221
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
222 /** socket fd */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
223 int socket;
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
224 gint outpa; /* like inpa, but the other way */
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
225
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
226 /** circular buffer for outgoing data */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
227 PurpleCircBuffer *sock_buf;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
228
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
229 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
230 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
231
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
232
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
233 typedef struct {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
234 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
235 PurpleGroup *group;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
236 } BuddyAddData;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
237
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
238
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
239 /* blist and aware functions */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
240
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
241 static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
242
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
243 static void blist_store(struct mwPurplePluginData *pd);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
244
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
245 static void blist_schedule(struct mwPurplePluginData *pd);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
246
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
247 static void blist_merge(PurpleConnection *gc, struct mwSametimeList *stlist);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
248
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
249 static void blist_sync(PurpleConnection *gc, struct mwSametimeList *stlist);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
250
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
251 static gboolean buddy_is_external(PurpleBuddy *b);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
252
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
253 static void buddy_add(struct mwPurplePluginData *pd, PurpleBuddy *buddy);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
254
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
255 static PurpleBuddy *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
256 buddy_ensure(PurpleConnection *gc, PurpleGroup *group,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
257 struct mwSametimeUser *stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
258
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
259 static void group_add(struct mwPurplePluginData *pd, PurpleGroup *group);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
260
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
261 static PurpleGroup *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
262 group_ensure(PurpleConnection *gc, struct mwSametimeGroup *stgroup);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
263
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
264 static struct mwAwareList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
265 list_ensure(struct mwPurplePluginData *pd, PurpleGroup *group);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
266
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
267
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
268 /* session functions */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
269
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
270 static struct mwSession *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
271 gc_to_session(PurpleConnection *gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
272
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
273 static PurpleConnection *session_to_gc(struct mwSession *session);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
274
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
275
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
276 /* conference functions */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
277
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
278 static struct mwConference *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
279 conf_find_by_id(struct mwPurplePluginData *pd, int id);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
280
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
281
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
282 /* conversation functions */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
283
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
284 struct convo_msg {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
285 enum mwImSendType type;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
286 gpointer data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
287 GDestroyNotify clear;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
288 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
289
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
290
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
291 struct convo_data {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
292 struct mwConversation *conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
293 GList *queue; /**< outgoing message queue, list of convo_msg */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
294 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
295
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
296 static void convo_data_new(struct mwConversation *conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
297
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
298 static void convo_data_free(struct convo_data *conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
299
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
300 static void convo_features(struct mwConversation *conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
301
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
302 static PurpleConversation *convo_get_gconv(struct mwConversation *conv);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
303
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
304
12629
14aae7d5da6b [gaim-migrate @ 14965]
Richard Laager <rlaager@pidgin.im>
parents: 12624
diff changeset
305 /* name and id */
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
306
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
307 struct named_id {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
308 char *id;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
309 char *name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
310 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
311
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
312
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
313 /* connection functions */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
314
14178
d12b287697c9 [gaim-migrate @ 16750]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
315 static void connect_cb(gpointer data, gint source, const gchar *error_message);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
316
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
317
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
318 /* ----- session ------ */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
319
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
320
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
321 /** resolves a mwSession from a PurpleConnection */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
322 static struct mwSession *gc_to_session(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
323 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
324
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
325 g_return_val_if_fail(gc != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
326
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
327 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
328 g_return_val_if_fail(pd != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
329
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
330 return pd->session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
331 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
332
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
333
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
334 /** resolves a PurpleConnection from a mwSession */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
335 static PurpleConnection *session_to_gc(struct mwSession *session) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
336 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
337
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
338 g_return_val_if_fail(session != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
339
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
340 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
341 g_return_val_if_fail(pd != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
342
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
343 return pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
344 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
345
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
346
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
347 static void write_cb(gpointer data, gint source, PurpleInputCondition cond) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
348 struct mwPurplePluginData *pd = data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
349 PurpleCircBuffer *circ = pd->sock_buf;
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
350 gsize avail;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
351 int ret;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
352
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
353 DEBUG_INFO("write_cb\n");
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
354
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
355 g_return_if_fail(circ != NULL);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
356
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
357 avail = purple_circ_buffer_get_max_read(circ);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
358 if(BUF_LONG < avail) avail = BUF_LONG;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
359
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
360 while(avail) {
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
361 ret = write(pd->socket, circ->outptr, avail);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
362
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
363 if(ret <= 0)
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
364 break;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
365
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
366 purple_circ_buffer_mark_read(circ, ret);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
367 avail = purple_circ_buffer_get_max_read(circ);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
368 if(BUF_LONG < avail) avail = BUF_LONG;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
369 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
370
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
371 if(! avail) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
372 purple_input_remove(pd->outpa);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
373 pd->outpa = 0;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
374 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
375 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
376
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
377
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
378 static int mw_session_io_write(struct mwSession *session,
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
379 const guchar *buf, gsize len) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
380 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
381 int ret = 0;
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
382 int err = 0;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
383
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
384 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
385
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
386 /* socket was already closed. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
387 if(pd->socket == 0)
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
388 return 1;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
389
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
390 if(pd->outpa) {
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
391 DEBUG_INFO("already pending INPUT_WRITE, buffering\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
392 purple_circ_buffer_append(pd->sock_buf, buf, len);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
393 return 0;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
394 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
395
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
396 while(len) {
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
397 ret = write(pd->socket, buf, (len > BUF_LEN)? BUF_LEN: len);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
398
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
399 if(ret <= 0)
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
400 break;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
401
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
402 len -= ret;
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
403 buf += ret;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
404 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
405
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
406 if(ret <= 0)
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
407 err = errno;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
408
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
409 if(err == EAGAIN) {
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
410 /* append remainder to circular buffer */
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
411 DEBUG_INFO("EAGAIN\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
412 purple_circ_buffer_append(pd->sock_buf, buf, len);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
413 pd->outpa = purple_input_add(pd->socket, PURPLE_INPUT_WRITE, write_cb, pd);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
414
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
415 } else if(len > 0) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
416 DEBUG_ERROR("write returned %i, %i bytes left unwritten\n", ret, len);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
417 purple_connection_error(pd->gc, _("Connection closed (writing)"));
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
418
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
419 #if 0
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
420 close(pd->socket);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
421 pd->socket = 0;
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
422 #endif
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
423
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
424 return -1;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
425 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
426
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
427 return 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
428 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
429
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
430
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
431 static void mw_session_io_close(struct mwSession *session) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
432 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
433 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
434
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
435 pd = mwSession_getClientData(session);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
436 g_return_if_fail(pd != NULL);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
437
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
438 gc = pd->gc;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
439
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
440 if(pd->outpa) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
441 purple_input_remove(pd->outpa);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
442 pd->outpa = 0;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
443 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
444
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
445 if(pd->socket) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
446 close(pd->socket);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
447 pd->socket = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
448 }
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
449
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
450 if(gc->inpa) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
451 purple_input_remove(gc->inpa);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
452 gc->inpa = 0;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
453 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
454 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
455
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
456
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
457 static void mw_session_clear(struct mwSession *session) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
458 ; /* nothing for now */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
459 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
460
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
461
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
462 /* ----- aware list ----- */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
463
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
464
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
465 static void blist_resolve_alias_cb(struct mwServiceResolve *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
466 guint32 id, guint32 code, GList *results,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
467 gpointer data) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
468 struct mwResolveResult *result;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
469 struct mwResolveMatch *match;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
470
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
471 g_return_if_fail(results != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
472
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
473 result = results->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
474 g_return_if_fail(result != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
475 g_return_if_fail(result->matches != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
476
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
477 match = result->matches->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
478 g_return_if_fail(match != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
479
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
480 purple_blist_server_alias_buddy(data, match->name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
481 purple_blist_node_set_string(data, BUDDY_KEY_NAME, match->name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
482 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
483
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
484
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
485 static void mw_aware_list_on_aware(struct mwAwareList *list,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
486 struct mwAwareSnapshot *aware) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
487
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
488 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
489 PurpleAccount *acct;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
490
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
491 struct mwPurplePluginData *pd;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
492 guint32 idle;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
493 guint stat;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
494 const char *id;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
495 const char *status = MW_STATE_ACTIVE;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
496
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
497 gc = mwAwareList_getClientData(list);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
498 acct = purple_connection_get_account(gc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
499
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
500 pd = gc->proto_data;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
501 idle = aware->status.time;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
502 stat = aware->status.status;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
503 id = aware->id.user;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
504
13588
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
505 if(idle) {
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
506 guint32 idle_len; /*< how long a client has been idle */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
507 guint32 ugly_idle_len; /*< how long a broken client has been idle */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
508
13588
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
509 DEBUG_INFO("%s has idle value 0x%x\n", NSTR(id), idle);
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
510
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
511 idle_len = time(NULL) - idle;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
512 ugly_idle_len = ((time(NULL) * 1000) - idle) / 1000;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
513
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
514 /*
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
515 what's the deal here? Well, good clients are smart enough to
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
516 publish their idle time by using an attribute to indicate that
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
517 they went idle at some time UTC, in seconds since epoch. Bad
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
518 clients use milliseconds since epoch. So we're going to compute
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
519 the idle time for either method, then figure out the lower of
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
520 the two and use that. Blame the ST 7.5 development team for
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
521 this.
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
522 */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
523
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
524 DEBUG_INFO("idle time: %u, ugly idle time: %u\n", idle_len, ugly_idle_len);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
525
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
526 #if 1
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
527 if(idle_len <= ugly_idle_len) {
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
528 ; /* DEBUG_INFO("sane idle value, let's use it\n"); */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
529 } else {
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
530 idle = time(NULL) - ugly_idle_len;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
531 }
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
532
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
533 #else
13588
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
534 if(idle < 0 || idle > time(NULL)) {
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
535 DEBUG_INFO("hiding a messy idle value 0x%x\n", NSTR(id), idle);
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
536 idle = -1;
c9a9f962837c [gaim-migrate @ 15972]
Christopher O'Brien <siege@pidgin.im>
parents: 13580
diff changeset
537 }
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
538 #endif
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
539 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
540
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
541 switch(stat) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
542 case mwStatus_ACTIVE:
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
543 status = MW_STATE_ACTIVE;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
544 idle = 0;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
545 break;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
546
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
547 case mwStatus_IDLE:
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
548 if(! idle) idle = -1;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
549 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
550
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
551 case mwStatus_AWAY:
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
552 status = MW_STATE_AWAY;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
553 break;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
554
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
555 case mwStatus_BUSY:
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
556 status = MW_STATE_BUSY;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
557 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
558 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
559
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
560 /* NAB group members */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
561 if(aware->group) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
562 PurpleGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
563 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
564 PurpleBlistNode *bnode;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
565
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
566 group = g_hash_table_lookup(pd->group_list_map, list);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
567 buddy = purple_find_buddy_in_group(acct, id, group);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
568 bnode = (PurpleBlistNode *) buddy;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
569
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
570 if(! buddy) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
571 struct mwServiceResolve *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
572 GList *query;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
573
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
574 buddy = purple_buddy_new(acct, id, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
575 purple_blist_add_buddy(buddy, NULL, group, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
576
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
577 bnode = (PurpleBlistNode *) buddy;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
578
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
579 srvc = pd->srvc_resolve;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
580 query = g_list_append(NULL, (char *) id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
581
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
582 mwServiceResolve_resolve(srvc, query, mwResolveFlag_USERS,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
583 blist_resolve_alias_cb, buddy, NULL);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
584 g_list_free(query);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
585 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
586
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
587 purple_blist_node_set_int(bnode, BUDDY_KEY_TYPE, mwSametimeUser_NORMAL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
588 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
589
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
590 if(aware->online) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
591 purple_prpl_got_user_status(acct, id, status, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
592 purple_prpl_got_user_idle(acct, id, !!idle, (time_t) idle);
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
593
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
594 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
595 purple_prpl_got_user_status(acct, id, MW_STATE_OFFLINE, NULL);
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
596 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
597 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
598
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
599
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
600 static void mw_aware_list_on_attrib(struct mwAwareList *list,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
601 struct mwAwareIdBlock *id,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
602 struct mwAwareAttribute *attrib) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
603
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
604 ; /* nothing. We'll get attribute data as we need it */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
605 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
606
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
607
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
608 static void mw_aware_list_clear(struct mwAwareList *list) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
609 ; /* nothing for now */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
610 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
611
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
612
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
613 static struct mwAwareListHandler mw_aware_list_handler = {
17157
dee69ceaf4d0 Another C99 struct falling.
Richard Laager <rlaager@pidgin.im>
parents: 17153
diff changeset
614 mw_aware_list_on_aware,
dee69ceaf4d0 Another C99 struct falling.
Richard Laager <rlaager@pidgin.im>
parents: 17153
diff changeset
615 mw_aware_list_on_attrib,
dee69ceaf4d0 Another C99 struct falling.
Richard Laager <rlaager@pidgin.im>
parents: 17153
diff changeset
616 mw_aware_list_clear,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
617 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
618
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
619
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
620 /** Ensures that an Aware List is associated with the given group, and
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
621 returns that list. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
622 static struct mwAwareList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
623 list_ensure(struct mwPurplePluginData *pd, PurpleGroup *group) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
624
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
625 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
626
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
627 g_return_val_if_fail(pd != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
628 g_return_val_if_fail(group != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
629
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
630 list = g_hash_table_lookup(pd->group_list_map, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
631 if(! list) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
632 list = mwAwareList_new(pd->srvc_aware, &mw_aware_list_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
633 mwAwareList_setClientData(list, pd->gc, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
634
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
635 mwAwareList_watchAttributes(list,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
636 mwAttribute_AV_PREFS_SET,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
637 mwAttribute_MICROPHONE,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
638 mwAttribute_SPEAKERS,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
639 mwAttribute_VIDEO_CAMERA,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
640 mwAttribute_FILE_TRANSFER,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
641 NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
642
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
643 g_hash_table_replace(pd->group_list_map, group, list);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
644 g_hash_table_insert(pd->group_list_map, list, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
645 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
646
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
647 return list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
648 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
649
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
650
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
651 static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
652 /* - find the account for this connection
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
653 - iterate through the buddy list
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
654 - add each buddy matching this account to the stlist
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
655 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
656
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
657 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
658 PurpleBuddyList *blist;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
659 PurpleBlistNode *gn, *cn, *bn;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
660 PurpleGroup *grp;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
661 PurpleBuddy *bdy;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
662
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
663 struct mwSametimeGroup *stg = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
664 struct mwIdBlock idb = { NULL, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
665
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
666 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
667 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
668
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
669 blist = purple_get_blist();
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
670 g_return_if_fail(blist != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
671
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
672 for(gn = blist->root; gn; gn = gn->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
673 const char *owner;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
674 const char *gname;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
675 enum mwSametimeGroupType gtype;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
676 gboolean gopen;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
677
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
678 if(! PURPLE_BLIST_NODE_IS_GROUP(gn)) continue;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
679 grp = (PurpleGroup *) gn;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
680
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
681 /* the group's type (normal or dynamic) */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
682 gtype = purple_blist_node_get_int(gn, GROUP_KEY_TYPE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
683 if(! gtype) gtype = mwSametimeGroup_NORMAL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
684
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
685 /* if it's a normal group with none of our people in it, skip it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
686 if(gtype == mwSametimeGroup_NORMAL && !purple_group_on_account(grp, acct))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
687 continue;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
688
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
689 /* if the group has an owner and we're not it, skip it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
690 owner = purple_blist_node_get_string(gn, GROUP_KEY_OWNER);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
691 if(owner && strcmp(owner, purple_account_get_username(acct)))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
692 continue;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
693
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
694 /* the group's actual name may be different from the purple group's
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
695 name. Find whichever is there */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
696 gname = purple_blist_node_get_string(gn, GROUP_KEY_NAME);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
697 if(! gname) gname = grp->name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
698
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
699 /* we save this, but never actually honor it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
700 gopen = ! purple_blist_node_get_bool(gn, GROUP_KEY_COLLAPSED);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
701
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
702 stg = mwSametimeGroup_new(stlist, gtype, gname);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
703 mwSametimeGroup_setAlias(stg, grp->name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
704 mwSametimeGroup_setOpen(stg, gopen);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
705
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
706 /* don't attempt to put buddies in a dynamic group, it breaks
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
707 other clients */
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
708 if(gtype == mwSametimeGroup_DYNAMIC)
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
709 continue;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
710
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
711 for(cn = gn->child; cn; cn = cn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
712 if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
713
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
714 for(bn = cn->child; bn; bn = bn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
715 if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
716 if(! PURPLE_BLIST_NODE_SHOULD_SAVE(bn)) continue;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
717
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
718 bdy = (PurpleBuddy *) bn;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
719
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
720 if(bdy->account == acct) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
721 struct mwSametimeUser *stu;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
722 enum mwSametimeUserType utype;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
723
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
724 idb.user = bdy->name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
725
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
726 utype = purple_blist_node_get_int(bn, BUDDY_KEY_TYPE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
727 if(! utype) utype = mwSametimeUser_NORMAL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
728
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
729 stu = mwSametimeUser_new(stg, utype, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
730 mwSametimeUser_setShortName(stu, bdy->server_alias);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
731 mwSametimeUser_setAlias(stu, bdy->alias);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
732 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
733 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
734 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
735 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
736 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
737
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
738
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
739 static void blist_store(struct mwPurplePluginData *pd) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
740
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
741 struct mwSametimeList *stlist;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
742 struct mwServiceStorage *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
743 struct mwStorageUnit *unit;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
744
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
745 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
746
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
747 struct mwPutBuffer *b;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
748 struct mwOpaque *o;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
749
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
750 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
751
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
752 srvc = pd->srvc_store;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
753 g_return_if_fail(srvc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
754
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
755 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
756
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
757 if(BLIST_PREF_IS_LOCAL() || BLIST_PREF_IS_MERGE()) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
758 DEBUG_INFO("preferences indicate not to save remote blist\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
759 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
760
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
761 } else if(MW_SERVICE_IS_DEAD(srvc)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
762 DEBUG_INFO("aborting save of blist: storage service is not alive\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
763 return;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
764
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
765 } else if(BLIST_PREF_IS_STORE() || BLIST_PREF_IS_SYNCH()) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
766 DEBUG_INFO("saving remote blist\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
767
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
768 } else {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
769 g_return_if_reached();
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
770 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
771
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
772 /* create and export to a list object */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
773 stlist = mwSametimeList_new();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
774 blist_export(gc, stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
775
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
776 /* write it to a buffer */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
777 b = mwPutBuffer_new();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
778 mwSametimeList_put(b, stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
779 mwSametimeList_free(stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
780
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
781 /* put the buffer contents into a storage unit */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
782 unit = mwStorageUnit_new(mwStore_AWARE_LIST);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
783 o = mwStorageUnit_asOpaque(unit);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
784 mwPutBuffer_finalize(o, b);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
785
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
786 /* save the storage unit to the service */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
787 mwServiceStorage_save(srvc, unit, NULL, NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
788 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
789
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
790
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
791 static gboolean blist_save_cb(gpointer data) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
792 struct mwPurplePluginData *pd = data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
793
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
794 blist_store(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
795 pd->save_event = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
796 return FALSE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
797 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
798
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
799
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
800 /** schedules the buddy list to be saved to the server */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
801 static void blist_schedule(struct mwPurplePluginData *pd) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
802 if(pd->save_event) return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
803
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
804 pd->save_event = purple_timeout_add(BLIST_SAVE_SECONDS * 1000,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
805 blist_save_cb, pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
806 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
807
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
808
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
809 static gboolean buddy_is_external(PurpleBuddy *b) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
810 g_return_val_if_fail(b != NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
811 return purple_str_has_prefix(b->name, "@E ");
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
812 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
813
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
814
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
815 /** Actually add a buddy to the aware service, and schedule the buddy
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
816 list to be saved to the server */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
817 static void buddy_add(struct mwPurplePluginData *pd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
818 PurpleBuddy *buddy) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
819
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
820 struct mwAwareIdBlock idb = { mwAware_USER, (char *) buddy->name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
821 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
822
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
823 PurpleGroup *group;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
824 GList *add;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
825
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
826 add = g_list_prepend(NULL, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
827
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
828 group = purple_buddy_get_group(buddy);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
829 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
830
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
831 if(mwAwareList_addAware(list, add)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
832 purple_blist_remove_buddy(buddy);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
833 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
834
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
835 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
836
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
837 g_list_free(add);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
838 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
839
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
840
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
841 /** ensure that a PurpleBuddy exists in the group with data
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
842 appropriately matching the st user entry from the st list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
843 static PurpleBuddy *buddy_ensure(PurpleConnection *gc, PurpleGroup *group,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
844 struct mwSametimeUser *stuser) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
845
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
846 struct mwPurplePluginData *pd = gc->proto_data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
847 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
848 PurpleAccount *acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
849
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
850 const char *id = mwSametimeUser_getUser(stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
851 const char *name = mwSametimeUser_getShortName(stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
852 const char *alias = mwSametimeUser_getAlias(stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
853 enum mwSametimeUserType type = mwSametimeUser_getType(stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
854
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
855 g_return_val_if_fail(id != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
856 g_return_val_if_fail(strlen(id) > 0, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
857
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
858 buddy = purple_find_buddy_in_group(acct, id, group);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
859 if(! buddy) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
860 buddy = purple_buddy_new(acct, id, alias);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
861
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
862 purple_blist_add_buddy(buddy, NULL, group, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
863 buddy_add(pd, buddy);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
864 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
865
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
866 purple_blist_alias_buddy(buddy, alias);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
867 purple_blist_server_alias_buddy(buddy, name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
868 purple_blist_node_set_string((PurpleBlistNode *) buddy, BUDDY_KEY_NAME, name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
869 purple_blist_node_set_int((PurpleBlistNode *) buddy, BUDDY_KEY_TYPE, type);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
870
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
871 return buddy;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
872 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
873
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
874
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
875 /** add aware watch for a dynamic group */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
876 static void group_add(struct mwPurplePluginData *pd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
877 PurpleGroup *group) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
878
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
879 struct mwAwareIdBlock idb = { mwAware_GROUP, NULL, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
880 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
881 const char *n;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
882 GList *add;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
883
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
884 n = purple_blist_node_get_string((PurpleBlistNode *) group, GROUP_KEY_NAME);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
885 if(! n) n = group->name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
886
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
887 idb.user = (char *) n;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
888 add = g_list_prepend(NULL, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
889
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
890 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
891 mwAwareList_addAware(list, add);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
892 g_list_free(add);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
893 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
894
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
895
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
896 /** ensure that a PurpleGroup exists in the blist with data
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
897 appropriately matching the st group entry from the st list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
898 static PurpleGroup *group_ensure(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
899 struct mwSametimeGroup *stgroup) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
900 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
901 PurpleGroup *group = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
902 PurpleBuddyList *blist;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
903 PurpleBlistNode *gn;
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
904 const char *name, *alias, *owner;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
905 enum mwSametimeGroupType type;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
906
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
907 acct = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
908 owner = purple_account_get_username(acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
909
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
910 blist = purple_get_blist();
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
911 g_return_val_if_fail(blist != NULL, NULL);
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
912
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
913 name = mwSametimeGroup_getName(stgroup);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
914 alias = mwSametimeGroup_getAlias(stgroup);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
915 type = mwSametimeGroup_getType(stgroup);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
916
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
917 DEBUG_INFO("attempting to ensure group %s, called %s\n",
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
918 NSTR(name), NSTR(alias));
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
919
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
920 /* first attempt at finding the group, by the name key */
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
921 for(gn = blist->root; gn; gn = gn->next) {
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
922 const char *n, *o;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
923 if(! PURPLE_BLIST_NODE_IS_GROUP(gn)) continue;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
924 n = purple_blist_node_get_string(gn, GROUP_KEY_NAME);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
925 o = purple_blist_node_get_string(gn, GROUP_KEY_OWNER);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
926
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
927 DEBUG_INFO("found group named %s, owned by %s\n", NSTR(n), NSTR(o));
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
928
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
929 if(n && !strcmp(n, name)) {
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
930 if(!o || !strcmp(o, owner)) {
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
931 DEBUG_INFO("that'll work\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
932 group = (PurpleGroup *) gn;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
933 break;
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
934 }
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
935 }
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
936 }
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
937
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
938 /* try again, by alias */
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
939 if(! group) {
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
940 DEBUG_INFO("searching for group by alias %s\n", NSTR(alias));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
941 group = purple_find_group(alias);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
942 }
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
943
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
944 /* oh well, no such group. Let's create it! */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
945 if(! group) {
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
946 DEBUG_INFO("creating group\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
947 group = purple_group_new(alias);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
948 purple_blist_add_group(group, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
949 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
950
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
951 gn = (PurpleBlistNode *) group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
952 purple_blist_node_set_string(gn, GROUP_KEY_NAME, name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
953 purple_blist_node_set_int(gn, GROUP_KEY_TYPE, type);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
954
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
955 if(type == mwSametimeGroup_DYNAMIC) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
956 purple_blist_node_set_string(gn, GROUP_KEY_OWNER, owner);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
957 group_add(gc->proto_data, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
958 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
959
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
960 return group;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
961 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
962
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
963
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
964 /** merge the entries from a st list into the purple blist */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
965 static void blist_merge(PurpleConnection *gc, struct mwSametimeList *stlist) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
966 struct mwSametimeGroup *stgroup;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
967 struct mwSametimeUser *stuser;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
968
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
969 PurpleGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
970 PurpleBuddy *buddy;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
971
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
972 GList *gl, *gtl, *ul, *utl;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
973
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
974 gl = gtl = mwSametimeList_getGroups(stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
975 for(; gl; gl = gl->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
976
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
977 stgroup = (struct mwSametimeGroup *) gl->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
978 group = group_ensure(gc, stgroup);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
979
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
980 ul = utl = mwSametimeGroup_getUsers(stgroup);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
981 for(; ul; ul = ul->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
982
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
983 stuser = (struct mwSametimeUser *) ul->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
984 buddy = buddy_ensure(gc, group, stuser);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
985 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
986 g_list_free(utl);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
987 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
988 g_list_free(gtl);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
989 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
990
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
991
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
992 /** remove all buddies on account from group. If del is TRUE and group
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
993 is left empty, remove group as well */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
994 static void group_clear(PurpleGroup *group, PurpleAccount *acct, gboolean del) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
995 PurpleConnection *gc;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
996 GList *prune = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
997 PurpleBlistNode *gn, *cn, *bn;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
998
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
999 g_return_if_fail(group != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1000
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1001 DEBUG_INFO("clearing members from pruned group %s\n", NSTR(group->name));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1002
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1003 gc = purple_account_get_connection(acct);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1004 g_return_if_fail(gc != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1005
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1006 gn = (PurpleBlistNode *) group;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1007
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1008 for(cn = gn->child; cn; cn = cn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1009 if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1010
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1011 for(bn = cn->child; bn; bn = bn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1012 PurpleBuddy *gb = (PurpleBuddy *) bn;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1013
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1014 if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1015
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1016 if(gb->account == acct) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1017 DEBUG_INFO("clearing %s from group\n", NSTR(gb->name));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1018 prune = g_list_prepend(prune, gb);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1019 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1020 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1021 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1022
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1023 /* quickly unsubscribe from presence for the entire group */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1024 purple_account_remove_group(acct, group);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1025
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1026 /* remove blist entries that need to go */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1027 while(prune) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1028 purple_blist_remove_buddy(prune->data);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1029 prune = g_list_delete_link(prune, prune);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1030 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1031 DEBUG_INFO("cleared buddies\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1032
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1033 /* optionally remove group from blist */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1034 if(del && !purple_blist_get_group_size(group, TRUE)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1035 DEBUG_INFO("removing empty group\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1036 purple_blist_remove_group(group);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1037 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1038 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1039
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1040
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1041 /** prune out group members that shouldn't be there */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1042 static void group_prune(PurpleConnection *gc, PurpleGroup *group,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1043 struct mwSametimeGroup *stgroup) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1044
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1045 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1046 PurpleBlistNode *gn, *cn, *bn;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1047
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1048 GHashTable *stusers;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1049 GList *prune = NULL;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1050 GList *ul, *utl;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1051
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1052 g_return_if_fail(group != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1053
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1054 DEBUG_INFO("pruning membership of group %s\n", NSTR(group->name));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1055
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1056 acct = purple_connection_get_account(gc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1057 g_return_if_fail(acct != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1058
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1059 stusers = g_hash_table_new(g_str_hash, g_str_equal);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1060
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1061 /* build a hash table for quick lookup while pruning the group
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1062 contents */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1063 utl = mwSametimeGroup_getUsers(stgroup);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1064 for(ul = utl; ul; ul = ul->next) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1065 const char *id = mwSametimeUser_getUser(ul->data);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1066 g_hash_table_insert(stusers, (char *) id, ul->data);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1067 DEBUG_INFO("server copy has %s\n", NSTR(id));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1068 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1069 g_list_free(utl);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1070
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1071 gn = (PurpleBlistNode *) group;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1072
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1073 for(cn = gn->child; cn; cn = cn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1074 if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1075
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1076 for(bn = cn->child; bn; bn = bn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1077 PurpleBuddy *gb = (PurpleBuddy *) bn;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1078
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1079 if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1080
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1081 /* if the account is correct and they're not in our table, mark
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1082 them for pruning */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1083 if(gb->account == acct && !g_hash_table_lookup(stusers, gb->name)) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1084 DEBUG_INFO("marking %s for pruning\n", NSTR(gb->name));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1085 prune = g_list_prepend(prune, gb);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1086 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1087 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1088 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1089 DEBUG_INFO("done marking\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1090
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1091 g_hash_table_destroy(stusers);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1092
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1093 if(prune) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1094 purple_account_remove_buddies(acct, prune, NULL);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1095 while(prune) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1096 purple_blist_remove_buddy(prune->data);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1097 prune = g_list_delete_link(prune, prune);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1098 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1099 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1100 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1101
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1102
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1103 /** synch the entries from a st list into the purple blist, removing any
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1104 existing buddies that aren't in the st list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1105 static void blist_sync(PurpleConnection *gc, struct mwSametimeList *stlist) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1106
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1107 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1108 PurpleBuddyList *blist;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1109 PurpleBlistNode *gn;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1110
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1111 GHashTable *stgroups;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1112 GList *g_prune = NULL;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1113
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1114 GList *gl, *gtl;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1115
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1116 const char *acct_n;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1117
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1118 DEBUG_INFO("synchronizing local buddy list from server list\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1119
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1120 acct = purple_connection_get_account(gc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1121 g_return_if_fail(acct != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1122
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1123 acct_n = purple_account_get_username(acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1124
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1125 blist = purple_get_blist();
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1126 g_return_if_fail(blist != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1127
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1128 /* build a hash table for quick lookup while pruning the local
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1129 list, mapping group name to group structure */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1130 stgroups = g_hash_table_new(g_str_hash, g_str_equal);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1131
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1132 gtl = mwSametimeList_getGroups(stlist);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1133 for(gl = gtl; gl; gl = gl->next) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1134 const char *name = mwSametimeGroup_getName(gl->data);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1135 g_hash_table_insert(stgroups, (char *) name, gl->data);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1136 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1137 g_list_free(gtl);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1138
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1139 /* find all groups which should be pruned from the local list */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1140 for(gn = blist->root; gn; gn = gn->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1141 PurpleGroup *grp = (PurpleGroup *) gn;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1142 const char *gname, *owner;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1143 struct mwSametimeGroup *stgrp;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1144
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1145 if(! PURPLE_BLIST_NODE_IS_GROUP(gn)) continue;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1146
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1147 /* group not belonging to this account */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1148 if(! purple_group_on_account(grp, acct))
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1149 continue;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1150
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1151 /* dynamic group belonging to this account. don't prune contents */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1152 owner = purple_blist_node_get_string(gn, GROUP_KEY_OWNER);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1153 if(owner && !strcmp(owner, acct_n))
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1154 continue;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1155
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1156 /* we actually are synching by this key as opposed to the group
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1157 title, which can be different things in the st list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1158 gname = purple_blist_node_get_string(gn, GROUP_KEY_NAME);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1159 if(! gname) gname = grp->name;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1160
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1161 stgrp = g_hash_table_lookup(stgroups, gname);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1162 if(! stgrp) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1163 /* remove the whole group */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1164 DEBUG_INFO("marking group %s for pruning\n", grp->name);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1165 g_prune = g_list_prepend(g_prune, grp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1166
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1167 } else {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1168 /* synch the group contents */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1169 group_prune(gc, grp, stgrp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1170 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1171 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1172 DEBUG_INFO("done marking groups\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1173
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1174 /* don't need this anymore */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1175 g_hash_table_destroy(stgroups);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1176
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1177 /* prune all marked groups */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1178 while(g_prune) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1179 PurpleGroup *grp = g_prune->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1180 PurpleBlistNode *gn = (PurpleBlistNode *) grp;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1181 const char *owner;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1182 gboolean del = TRUE;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1183
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1184 owner = purple_blist_node_get_string(gn, GROUP_KEY_OWNER);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1185 if(owner && strcmp(owner, acct_n)) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1186 /* it's a specialty group belonging to another account with some
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1187 of our members in it, so don't fully delete it */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1188 del = FALSE;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1189 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1190
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1191 group_clear(g_prune->data, acct, del);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1192 g_prune = g_list_delete_link(g_prune, g_prune);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1193 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1194
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1195 /* done with the pruning, let's merge in the additions */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1196 blist_merge(gc, stlist);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1197 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1198
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1199
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1200 /** callback passed to the storage service when it's told to load the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1201 st list */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1202 static void fetch_blist_cb(struct mwServiceStorage *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1203 guint32 result, struct mwStorageUnit *item,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1204 gpointer data) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1205
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1206 struct mwPurplePluginData *pd = data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1207 struct mwSametimeList *stlist;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1208
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1209 struct mwGetBuffer *b;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1210
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1211 g_return_if_fail(result == ERR_SUCCESS);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1212
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1213 /* check our preferences for loading */
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1214 if(BLIST_PREF_IS_LOCAL()) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1215 DEBUG_INFO("preferences indicate not to load remote buddy list\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1216 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1217 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1218
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1219 b = mwGetBuffer_wrap(mwStorageUnit_asOpaque(item));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1220
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1221 stlist = mwSametimeList_new();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1222 mwSametimeList_get(b, stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1223
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1224 /* merge or synch depending on preferences */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1225 if(BLIST_PREF_IS_MERGE() || BLIST_PREF_IS_STORE()) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1226 blist_merge(pd->gc, stlist);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1227
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1228 } else if(BLIST_PREF_IS_SYNCH()) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1229 blist_sync(pd->gc, stlist);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1230 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1231
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1232 mwSametimeList_free(stlist);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1233 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1234
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1235
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1236 /** signal triggered when a conversation is opened in Purple */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1237 static void conversation_created_cb(PurpleConversation *g_conv,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1238 struct mwPurplePluginData *pd) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1239
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1240 /* we need to tell the IM service to negotiate features for the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1241 conversation right away, otherwise it'll wait until the first
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1242 message is sent before offering NotesBuddy features. Therefore
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1243 whenever Purple creates a conversation, we'll immediately open the
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1244 channel to the other side and figure out what the target can
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1245 handle. Unfortunately, this makes us vulnerable to Psychic Mode,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1246 whereas a more lazy negotiation based on the first message
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1247 would not */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1248
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1249 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1250 struct mwIdBlock who = { 0, 0 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1251 struct mwConversation *conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1252
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1253 gc = purple_conversation_get_gc(g_conv);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1254 if(pd->gc != gc)
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1255 return; /* not ours */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1256
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1257 if(purple_conversation_get_type(g_conv) != PURPLE_CONV_TYPE_IM)
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1258 return; /* wrong type */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1259
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1260 who.user = (char *) purple_conversation_get_name(g_conv);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1261 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1262
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1263 convo_features(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1264
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1265 if(mwConversation_isClosed(conv))
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1266 mwConversation_open(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1267 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1268
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1269
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1270 static void blist_menu_nab(PurpleBlistNode *node, gpointer data) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1271 struct mwPurplePluginData *pd = data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1272 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1273
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1274 PurpleGroup *group = (PurpleGroup *) node;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1275
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1276 GString *str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1277 char *tmp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1278
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1279 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1280
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1281 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1282 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1283
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1284 g_return_if_fail(PURPLE_BLIST_NODE_IS_GROUP(node));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1285
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1286 str = g_string_new(NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1287
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1288 tmp = (char *) purple_blist_node_get_string(node, GROUP_KEY_NAME);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1289
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1290 g_string_append_printf(str, _("<b>Group Title:</b> %s<br>"), group->name);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1291 g_string_append_printf(str, _("<b>Notes Group ID:</b> %s<br>"), tmp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1292
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1293 tmp = g_strdup_printf(_("Info for Group %s"), group->name);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1294
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1295 purple_notify_formatted(gc, tmp, _("Notes Address Book Information"),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1296 NULL, str->str, NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1297
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1298 g_free(tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1299 g_string_free(str, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1300 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1301
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1302
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1303 /** The normal blist menu prpl function doesn't get called for groups,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1304 so we use the blist-node-extended-menu signal to trigger this
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1305 handler */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1306 static void blist_node_menu_cb(PurpleBlistNode *node,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1307 GList **menu, struct mwPurplePluginData *pd) {
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1308 const char *owner;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1309 PurpleGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1310 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1311 PurpleMenuAction *act;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1312
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1313 /* we only want groups */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1314 if(! PURPLE_BLIST_NODE_IS_GROUP(node)) return;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1315 group = (PurpleGroup *) node;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1316
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1317 acct = purple_connection_get_account(pd->gc);
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1318 g_return_if_fail(acct != NULL);
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1319
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1320 /* better make sure we're connected */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1321 if(! purple_account_is_connected(acct)) return;
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1322
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1323 #if 0
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1324 /* if there's anyone in the group for this acct, offer to invite
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1325 them all to a conference */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1326 if(purple_group_on_account(group, acct)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1327 act = purple_menu_action_new(_("Invite Group to Conference..."),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1328 PURPLE_CALLBACK(blist_menu_group_invite),
13021
64917077e624 [gaim-migrate @ 15374]
Etan Reisner <deryni@pidgin.im>
parents: 12970
diff changeset
1329 pd, NULL);
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1330 *menu = g_list_append(*menu, NULL);
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1331 }
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1332 #endif
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1333
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
1334 /* check if it's a NAB group for this account */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1335 owner = purple_blist_node_get_string(node, GROUP_KEY_OWNER);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1336 if(owner && !strcmp(owner, purple_account_get_username(acct))) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1337 act = purple_menu_action_new(_("Get Notes Address Book Info"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1338 PURPLE_CALLBACK(blist_menu_nab), pd, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1339 *menu = g_list_append(*menu, act);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1340 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1341 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1342
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1343
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1344 /* lifted this from oldstatus, since HEAD doesn't do this at login
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1345 anymore. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1346 static void blist_init(PurpleAccount *acct) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1347 PurpleBlistNode *gnode, *cnode, *bnode;
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1348 GList *add_buds = NULL;
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1349
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1350 for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1351 if(! PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue;
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1352
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1353 for(cnode = gnode->child; cnode; cnode = cnode->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1354 if(! PURPLE_BLIST_NODE_IS_CONTACT(cnode))
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1355 continue;
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1356 for(bnode = cnode->child; bnode; bnode = bnode->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1357 PurpleBuddy *b;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1358 if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode))
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1359 continue;
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1360
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1361 b = (PurpleBuddy *)bnode;
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1362 if(b->account == acct) {
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1363 add_buds = g_list_append(add_buds, b);
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1364 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1365 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1366 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1367 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1368
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1369 if(add_buds) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1370 purple_account_add_buddies(acct, add_buds);
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1371 g_list_free(add_buds);
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1372 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1373 }
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1374
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1375
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1376 /** Last thing to happen from a started session */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1377 static void services_starting(struct mwPurplePluginData *pd) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1378
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1379 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1380 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1381 struct mwStorageUnit *unit;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1382 PurpleBuddyList *blist;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1383 PurpleBlistNode *l;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1384
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1385 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1386 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1387
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1388 /* grab the buddy list from the server */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1389 unit = mwStorageUnit_new(mwStore_AWARE_LIST);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1390 mwServiceStorage_load(pd->srvc_store, unit, fetch_blist_cb, pd, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1391
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1392 /* find all the NAB groups and subscribe to them */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1393 blist = purple_get_blist();
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1394 for(l = blist->root; l; l = l->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1395 PurpleGroup *group = (PurpleGroup *) l;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1396 enum mwSametimeGroupType gt;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1397 const char *owner;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1398
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1399 if(! PURPLE_BLIST_NODE_IS_GROUP(l)) continue;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1400
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1401 /* if the group is ownerless, or has an owner and we're not it,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1402 skip it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1403 owner = purple_blist_node_get_string(l, GROUP_KEY_OWNER);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1404 if(!owner || strcmp(owner, purple_account_get_username(acct)))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1405 continue;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1406
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1407 gt = purple_blist_node_get_int(l, GROUP_KEY_TYPE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1408 if(gt == mwSametimeGroup_DYNAMIC)
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1409 group_add(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1410 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1411
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1412 /* set the aware attributes */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1413 /* indicate we understand what AV prefs are, but don't support any */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1414 mwServiceAware_setAttributeBoolean(pd->srvc_aware,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1415 mwAttribute_AV_PREFS_SET, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1416 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_MICROPHONE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1417 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_SPEAKERS);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1418 mwServiceAware_unsetAttribute(pd->srvc_aware, mwAttribute_VIDEO_CAMERA);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1419
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1420 /* ... but we can do file transfers! */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1421 mwServiceAware_setAttributeBoolean(pd->srvc_aware,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1422 mwAttribute_FILE_TRANSFER, TRUE);
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1423
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1424 blist_init(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1425 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1426
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1427
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1428 static void session_loginRedirect(struct mwSession *session,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1429 const char *host) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1430 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1431 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1432 PurpleAccount *account;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1433 guint port;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1434 const char *current_host;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1435
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1436 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1437 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1438 account = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1439 port = purple_account_get_int(account, MW_KEY_PORT, MW_PLUGIN_DEFAULT_PORT);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1440 current_host = purple_account_get_string(account, MW_KEY_HOST,
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1441 MW_PLUGIN_DEFAULT_HOST);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1442
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1443 if(purple_account_get_bool(account, MW_KEY_FORCE, FALSE) ||
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1444 (! strcmp(current_host, host)) ||
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1445 (purple_proxy_connect(NULL, account, host, port, connect_cb, pd) == NULL)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1446
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1447 /* if we're configured to force logins, or if we're being
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1448 redirected to the already configured host, or if we couldn't
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1449 connect to the new host, we'll force the login instead */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
1450
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1451 mwSession_forceLogin(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1452 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1453 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1454
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1455
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1456 static void mw_prpl_set_status(PurpleAccount *acct, PurpleStatus *status);
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1457
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1458
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1459 /** called from mw_session_stateChange when the session's state is
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1460 mwSession_STARTED. Any finalizing of start-up stuff should go
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1461 here */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1462 static void session_started(struct mwPurplePluginData *pd) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1463 PurpleStatus *status;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1464 PurpleAccount *acct;
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1465
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1466 /* set out initial status */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1467 acct = purple_connection_get_account(pd->gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1468 status = purple_account_get_active_status(acct);
12266
d61e488f64d6 [gaim-migrate @ 14568]
Christopher O'Brien <siege@pidgin.im>
parents: 12263
diff changeset
1469 mw_prpl_set_status(acct, status);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1470
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1471 /* start watching for new conversations */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1472 purple_signal_connect(purple_conversations_get_handle(),
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1473 "conversation-created", pd,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1474 PURPLE_CALLBACK(conversation_created_cb), pd);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1475
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1476 /* watch for group extended menu items */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1477 purple_signal_connect(purple_blist_get_handle(),
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1478 "blist-node-extended-menu", pd,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1479 PURPLE_CALLBACK(blist_node_menu_cb), pd);
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1480
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1481 /* use our services to do neat things */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1482 services_starting(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1483 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1484
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1485
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1486 static void session_stopping(struct mwPurplePluginData *pd) {
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1487 /* stop watching the signals from session_started */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1488 purple_signals_disconnect_by_handle(pd);
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1489 }
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1490
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1491
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1492 static void mw_session_stateChange(struct mwSession *session,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1493 enum mwSessionState state,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1494 gpointer info) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1495 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1496 PurpleConnection *gc;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1497 const char *msg = NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1498
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1499 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1500 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1501
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1502 switch(state) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1503 case mwSession_STARTING:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1504 msg = _("Sending Handshake");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1505 purple_connection_update_progress(gc, msg, 2, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1506 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1507
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1508 case mwSession_HANDSHAKE:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1509 msg = _("Waiting for Handshake Acknowledgement");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1510 purple_connection_update_progress(gc, msg, 3, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1511 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1512
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1513 case mwSession_HANDSHAKE_ACK:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1514 msg = _("Handshake Acknowledged, Sending Login");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1515 purple_connection_update_progress(gc, msg, 4, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1516 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1517
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1518 case mwSession_LOGIN:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1519 msg = _("Waiting for Login Acknowledgement");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1520 purple_connection_update_progress(gc, msg, 5, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1521 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1522
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1523 case mwSession_LOGIN_REDIR:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1524 msg = _("Login Redirected");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1525 purple_connection_update_progress(gc, msg, 6, MW_CONNECT_STEPS);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1526 session_loginRedirect(session, info);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1527 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1528
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1529 case mwSession_LOGIN_CONT:
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1530 msg = _("Forcing Login");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1531 purple_connection_update_progress(gc, msg, 7, MW_CONNECT_STEPS);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1532
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1533 case mwSession_LOGIN_ACK:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1534 msg = _("Login Acknowledged");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1535 purple_connection_update_progress(gc, msg, 8, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1536 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1537
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1538 case mwSession_STARTED:
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1539 msg = _("Starting Services");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1540 purple_connection_update_progress(gc, msg, 9, MW_CONNECT_STEPS);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1541
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1542 session_started(pd);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1543
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1544 msg = _("Connected");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1545 purple_connection_update_progress(gc, msg, 10, MW_CONNECT_STEPS);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1546 purple_connection_set_state(gc, PURPLE_CONNECTED);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1547 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1548
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1549 case mwSession_STOPPING:
15426
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1550
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1551 session_stopping(pd);
def1a5724556 [gaim-migrate @ 18157]
Christopher O'Brien <siege@pidgin.im>
parents: 15345
diff changeset
1552
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1553 if(GPOINTER_TO_UINT(info) & ERR_FAILURE) {
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1554 char *err = mwError(GPOINTER_TO_UINT(info));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1555 purple_connection_error(gc, err);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1556 g_free(err);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1557 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1558 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1559
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1560 case mwSession_STOPPED:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1561 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1562
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1563 case mwSession_UNKNOWN:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1564 default:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1565 DEBUG_WARN("session in unknown state\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1566 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1567 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1568
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1569
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1570 static void mw_session_setPrivacyInfo(struct mwSession *session) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1571 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1572 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1573 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1574 struct mwPrivacyInfo *privacy;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1575 GSList *l, **ll;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1576 guint count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1577
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1578 DEBUG_INFO("privacy information set from server\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1579
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1580 g_return_if_fail(session != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1581
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1582 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1583 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1584
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1585 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1586 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1587
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1588 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1589 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1590
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1591 privacy = mwSession_getPrivacyInfo(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1592 count = privacy->count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1593
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1594 ll = (privacy->deny)? &acct->deny: &acct->permit;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1595 for(l = *ll; l; l = l->next) g_free(l->data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1596 g_slist_free(*ll);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1597 l = *ll = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1598
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1599 while(count--) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1600 struct mwUserItem *u = privacy->users + count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1601 l = g_slist_prepend(l, g_strdup(u->id));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1602 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1603 *ll = l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1604 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1605
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1606
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1607 static void mw_session_setUserStatus(struct mwSession *session) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1608 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1609 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1610 struct mwAwareIdBlock idb = { mwAware_USER, NULL, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1611 struct mwUserStatus *stat;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1612
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1613 g_return_if_fail(session != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1614
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1615 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1616 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1617
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1618 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1619 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1620
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1621 idb.user = mwSession_getProperty(session, mwSession_AUTH_USER_ID);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1622 stat = mwSession_getUserStatus(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1623
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1624 /* trigger an update of our own status if we're in the buddy list */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1625 mwServiceAware_setStatus(pd->srvc_aware, &idb, stat);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1626 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1627
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1628
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1629 static void mw_session_admin(struct mwSession *session,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1630 const char *text) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1631 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1632 PurpleAccount *acct;
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1633 const char *host;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1634 const char *msg;
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1635 char *prim;
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1636
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1637 gc = session_to_gc(session);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1638 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1639
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1640 acct = purple_connection_get_account(gc);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1641 g_return_if_fail(acct != NULL);
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1642
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1643 host = purple_account_get_string(acct, MW_KEY_HOST, NULL);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1644
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1645 msg = _("A Sametime administrator has issued the following announcement"
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1646 " on server %s");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
1647 prim = g_strdup_printf(msg, NSTR(host));
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1648
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1649 purple_notify_message(gc, PURPLE_NOTIFY_MSG_INFO,
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1650 _("Sametime Administrator Announcement"),
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1651 prim, text, NULL, NULL);
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1652
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
1653 g_free(prim);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1654 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1655
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1656
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1657 /** called from read_cb, attempts to read available data from sock and
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1658 pass it to the session, passing back the return code from the read
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1659 call for handling in read_cb */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1660 static int read_recv(struct mwSession *session, int sock) {
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
1661 guchar buf[BUF_LEN];
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1662 int len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1663
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1664 len = read(sock, buf, BUF_LEN);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1665 if(len > 0) mwSession_recv(session, buf, len);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1666
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1667 return len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1668 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1669
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1670
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1671 /** callback triggered from purple_input_add, watches the socked for
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1672 available data to be processed by the session */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1673 static void read_cb(gpointer data, gint source, PurpleInputCondition cond) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1674 struct mwPurplePluginData *pd = data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1675 int ret = 0, err = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1676
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1677 g_return_if_fail(pd != NULL);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
1678
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1679 ret = read_recv(pd->session, pd->socket);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1680
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1681 /* normal operation ends here */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1682 if(ret > 0) return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1683
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1684 /* fetch the global error value */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1685 err = errno;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1686
14754
621ecdbdaf9a [gaim-migrate @ 17444]
Paul Schulz
parents: 14604
diff changeset
1687 /* read problem occurred if we're here, so we'll need to take care of
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1688 it and clean up internal state */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1689
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1690 if(pd->socket) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1691 close(pd->socket);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1692 pd->socket = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1693 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1694
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1695 if(pd->gc->inpa) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1696 purple_input_remove(pd->gc->inpa);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1697 pd->gc->inpa = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1698 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1699
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1700 if(! ret) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1701 DEBUG_INFO("connection reset\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1702 purple_connection_error(pd->gc, _("Connection reset"));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1703
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1704 } else if(ret < 0) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1705 char *msg = strerror(err);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1706
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1707 DEBUG_INFO("error in read callback: %s\n", msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1708
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1709 msg = g_strdup_printf(_("Error reading from socket: %s"), msg);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1710 purple_connection_error(pd->gc, msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1711 g_free(msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1712 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1713 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1714
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1715
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1716 /** Callback passed to purple_proxy_connect when an account is logged
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1717 in, and if the session logging in receives a redirect message */
14178
d12b287697c9 [gaim-migrate @ 16750]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
1718 static void connect_cb(gpointer data, gint source, const gchar *error_message) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1719
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1720 struct mwPurplePluginData *pd = data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1721 PurpleConnection *gc = pd->gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1722
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1723 if(source < 0) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1724 /* connection failed */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1725
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1726 if(pd->socket) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1727 /* this is a redirect connect, force login on existing socket */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1728 mwSession_forceLogin(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1729
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1730 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1731 /* this is a regular connect, error out */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1732 purple_connection_error(pd->gc, _("Unable to connect to host"));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1733 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1734
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1735 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1736 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1737
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1738 if(pd->socket) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1739 /* stop any existing login attempt */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1740 mwSession_stop(pd->session, ERR_SUCCESS);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1741 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1742
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1743 pd->socket = source;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1744 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ,
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
1745 read_cb, pd);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1746
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1747 mwSession_start(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1748 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1749
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1750
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1751 static void mw_session_announce(struct mwSession *s,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1752 struct mwLoginInfo *from,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1753 gboolean may_reply,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1754 const char *text) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1755 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1756 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1757 PurpleConversation *conv;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1758 PurpleBuddy *buddy;
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
1759 char *who = from->user_id;
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
1760 char *msg;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1761
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1762 pd = mwSession_getClientData(s);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1763 acct = purple_connection_get_account(pd->gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1764 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1765 if(! conv) conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, acct, who);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1766
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1767 buddy = purple_find_buddy(acct, who);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1768 if(buddy) who = (char *) purple_buddy_get_contact_alias(buddy);
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
1769
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
1770 who = g_strdup_printf(_("Announcement from %s"), who);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1771 msg = purple_markup_linkify(text);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1772
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1773 purple_conversation_write(conv, who, msg, PURPLE_MESSAGE_RECV, time(NULL));
12263
5f0ddc426a58 [gaim-migrate @ 14565]
Christopher O'Brien <siege@pidgin.im>
parents: 12216
diff changeset
1774 g_free(who);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
1775 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1776 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1777
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1778
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1779 static struct mwSessionHandler mw_session_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1780 mw_session_io_write,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1781 mw_session_io_close,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1782 mw_session_clear,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1783 mw_session_stateChange,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1784 mw_session_setPrivacyInfo,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1785 mw_session_setUserStatus,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1786 mw_session_admin,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1787 mw_session_announce,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1788 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1789
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1790
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1791 static void mw_aware_on_attrib(struct mwServiceAware *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1792 struct mwAwareAttribute *attrib) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1793
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1794 ; /** @todo handle server attributes. There may be some stuff we
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1795 actually want to look for, but I'm not aware of anything right
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1796 now.*/
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1797 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1798
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1799
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1800 static void mw_aware_clear(struct mwServiceAware *srvc) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1801 ; /* nothing for now */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1802 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1803
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1804
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1805 static struct mwAwareHandler mw_aware_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1806 mw_aware_on_attrib,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
1807 mw_aware_clear,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1808 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1809
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1810
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1811 static struct mwServiceAware *mw_srvc_aware_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1812 struct mwServiceAware *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1813 srvc = mwServiceAware_new(s, &mw_aware_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1814 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1815 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1816
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1817
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1818 static void mw_conf_invited(struct mwConference *conf,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1819 struct mwLoginInfo *inviter,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1820 const char *invitation) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1821
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1822 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1823 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1824 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1825 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1826
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1827 char *c_inviter, *c_name, *c_topic, *c_invitation;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1828 GHashTable *ht;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1829
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1830 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1831 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1832 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1833 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1834
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1835 ht = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1836
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1837 c_inviter = g_strdup(inviter->user_id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1838 g_hash_table_insert(ht, CHAT_KEY_CREATOR, c_inviter);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1839
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1840 c_name = g_strdup(mwConference_getName(conf));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1841 g_hash_table_insert(ht, CHAT_KEY_NAME, c_name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1842
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1843 c_topic = g_strdup(mwConference_getTitle(conf));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1844 g_hash_table_insert(ht, CHAT_KEY_TOPIC, c_topic);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1845
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1846 c_invitation = g_strdup(invitation);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1847 g_hash_table_insert(ht, CHAT_KEY_INVITE, c_invitation);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1848
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1849 DEBUG_INFO("received invitation from '%s' to join ('%s','%s'): '%s'\n",
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1850 NSTR(c_inviter), NSTR(c_name),
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1851 NSTR(c_topic), NSTR(c_invitation));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1852
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
1853 if(! c_topic) c_topic = "(no title)";
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
1854 if(! c_invitation) c_invitation = "(no message)";
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1855 serv_got_chat_invite(gc, c_topic, c_inviter, c_invitation, ht);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1856 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1857
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1858
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1859 /* The following mess helps us relate a mwConference to a PurpleConvChat
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1860 in the various forms by which either may be indicated */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1861
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1862 #define CONF_TO_ID(conf) (GPOINTER_TO_INT(conf))
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1863 #define ID_TO_CONF(pd, id) (conf_find_by_id((pd), (id)))
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1864
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1865 #define CHAT_TO_ID(chat) (purple_conv_chat_get_id(chat))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1866 #define ID_TO_CHAT(id) (purple_find_chat(id))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1867
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1868 #define CHAT_TO_CONF(pd, chat) (ID_TO_CONF((pd), CHAT_TO_ID(chat)))
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
1869 #define CONF_TO_CHAT(conf) (ID_TO_CHAT(CONF_TO_ID(conf)))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1870
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1871
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1872 static struct mwConference *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1873 conf_find_by_id(struct mwPurplePluginData *pd, int id) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1874
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1875 struct mwServiceConference *srvc = pd->srvc_conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1876 struct mwConference *conf = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1877 GList *l, *ll;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1878
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1879 ll = mwServiceConference_getConferences(srvc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1880 for(l = ll; l; l = l->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1881 struct mwConference *c = l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1882 PurpleConvChat *h = mwConference_getClientData(c);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1883
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1884 if(CHAT_TO_ID(h) == id) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1885 conf = c;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1886 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1887 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1888 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1889 g_list_free(ll);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1890
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1891 return conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1892 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1893
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1894
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1895 static void mw_conf_opened(struct mwConference *conf, GList *members) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1896 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1897 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1898 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1899 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1900 PurpleConversation *g_conf;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1901
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1902 const char *n = mwConference_getName(conf);
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
1903 const char *t = mwConference_getTitle(conf);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1904
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1905 DEBUG_INFO("conf %s opened, %u initial members\n",
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1906 NSTR(n), g_list_length(members));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1907
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1908 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1909 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1910 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1911 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1912
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
1913 if(! t) t = "(no title)";
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
1914 g_conf = serv_got_joined_chat(gc, CONF_TO_ID(conf), t);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1915
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1916 mwConference_setClientData(conf, PURPLE_CONV_CHAT(g_conf), NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1917
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1918 for(; members; members = members->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1919 struct mwLoginInfo *peer = members->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1920 purple_conv_chat_add_user(PURPLE_CONV_CHAT(g_conf), peer->user_id,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1921 NULL, PURPLE_CBFLAGS_NONE, FALSE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1922 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1923 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1924
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1925
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1926 static void mw_conf_closed(struct mwConference *conf, guint32 reason) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1927 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1928 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1929 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1930 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1931
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1932 const char *n = mwConference_getName(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1933 char *msg = mwError(reason);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1934
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1935 DEBUG_INFO("conf %s closed, 0x%08x\n", NSTR(n), reason);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1936
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1937 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1938 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1939 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1940 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1941
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1942 serv_got_chat_left(gc, CONF_TO_ID(conf));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1943
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1944 purple_notify_error(gc, _("Conference Closed"), NULL, msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1945 g_free(msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1946 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1947
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1948
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1949 static void mw_conf_peer_joined(struct mwConference *conf,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1950 struct mwLoginInfo *peer) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1951
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1952 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1953 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1954 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1955 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1956 PurpleConvChat *g_conf;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1957
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1958 const char *n = mwConference_getName(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1959
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1960 DEBUG_INFO("%s joined conf %s\n", NSTR(peer->user_id), NSTR(n));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1961
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1962 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1963 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1964 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1965 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1966
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1967 g_conf = mwConference_getClientData(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1968 g_return_if_fail(g_conf != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1969
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1970 purple_conv_chat_add_user(g_conf, peer->user_id,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1971 NULL, PURPLE_CBFLAGS_NONE, TRUE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1972 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1973
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1974
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1975 static void mw_conf_peer_parted(struct mwConference *conf,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1976 struct mwLoginInfo *peer) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1978 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1979 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1980 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1981 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1982 PurpleConvChat *g_conf;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1983
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1984 const char *n = mwConference_getName(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1985
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1986 DEBUG_INFO("%s left conf %s\n", NSTR(peer->user_id), NSTR(n));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1987
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1988 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1989 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1990 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1991 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1992
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1993 g_conf = mwConference_getClientData(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1994 g_return_if_fail(g_conf != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1995
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
1996 purple_conv_chat_remove_user(g_conf, peer->user_id, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1997 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1998
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1999
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2000 static void mw_conf_text(struct mwConference *conf,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2001 struct mwLoginInfo *who, const char *text) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2002
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2003 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2004 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2005 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2006 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2007 char *esc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2008
12863
535f2e11db82 [gaim-migrate @ 15214]
Christopher O'Brien <siege@pidgin.im>
parents: 12830
diff changeset
2009 if(! text) return;
535f2e11db82 [gaim-migrate @ 15214]
Christopher O'Brien <siege@pidgin.im>
parents: 12830
diff changeset
2010
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2011 srvc = mwConference_getService(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2012 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2013 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2014 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2015
12864
072fcb25d27b [gaim-migrate @ 15215]
Christopher O'Brien <siege@pidgin.im>
parents: 12863
diff changeset
2016 esc = g_markup_escape_text(text, -1);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2017 serv_got_chat_in(gc, CONF_TO_ID(conf), who->user_id, 0, esc, time(NULL));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2018 g_free(esc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2019 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2020
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2021
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2022 static void mw_conf_typing(struct mwConference *conf,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2023 struct mwLoginInfo *who, gboolean typing) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2024
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2025 /* purple really has no good way to expose this to the user. */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2026
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2027 const char *n = mwConference_getName(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2028 const char *w = who->user_id;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2029
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2030 if(typing) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2031 DEBUG_INFO("%s in conf %s: <typing>\n", NSTR(w), NSTR(n));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2032
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2033 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2034 DEBUG_INFO("%s in conf %s: <stopped typing>\n", NSTR(w), NSTR(n));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2035 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2036 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2037
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2038
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2039 static void mw_conf_clear(struct mwServiceConference *srvc) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2040 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2041 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2042
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2043
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2044 static struct mwConferenceHandler mw_conference_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2045 mw_conf_invited,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2046 mw_conf_opened,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2047 mw_conf_closed,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2048 mw_conf_peer_joined,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2049 mw_conf_peer_parted,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2050 mw_conf_text,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2051 mw_conf_typing,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2052 mw_conf_clear,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2053 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2054
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2055
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2056 static struct mwServiceConference *mw_srvc_conf_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2057 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2058 srvc = mwServiceConference_new(s, &mw_conference_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2059 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2060 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2061
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2062
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2063 /** size of an outgoing file transfer chunk */
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2064 #define MW_FT_LEN (BUF_LONG * 2)
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2065
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2066
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2067 static void ft_incoming_cancel(PurpleXfer *xfer) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2068 /* incoming transfer rejected or canceled in-progress */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2069 struct mwFileTransfer *ft = xfer->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2070 if(ft) mwFileTransfer_reject(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2071 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2072
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2073
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2074 static void ft_incoming_init(PurpleXfer *xfer) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2075 /* incoming transfer accepted */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2076
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2077 /* - accept the mwFileTransfer
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2078 - open/create the local FILE "wb"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2079 - stick the FILE's fp in xfer->dest_fp
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2080 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2081
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2082 struct mwFileTransfer *ft;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2083 FILE *fp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2084
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2085 ft = xfer->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2086
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2087 fp = g_fopen(xfer->local_filename, "wb");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2088 if(! fp) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2089 mwFileTransfer_cancel(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2090 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2091 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2092
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2093 xfer->dest_fp = fp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2094 mwFileTransfer_accept(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2095 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2096
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2097
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2098 static void mw_ft_offered(struct mwFileTransfer *ft) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2099 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2100 - create a purple ft object
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2101 - offer it
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2102 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2103
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2104 struct mwServiceFileTransfer *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2105 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2106 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2107 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2108 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2109 const char *who;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2110 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2111
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2112 /* @todo add some safety checks */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2113 srvc = mwFileTransfer_getService(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2114 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2115 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2116 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2117 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2118
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2119 who = mwFileTransfer_getUser(ft)->user;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2120
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2121 DEBUG_INFO("file transfer %p offered\n", ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2122 DEBUG_INFO(" from: %s\n", NSTR(who));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2123 DEBUG_INFO(" file: %s\n", NSTR(mwFileTransfer_getFileName(ft)));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2124 DEBUG_INFO(" size: %u\n", mwFileTransfer_getFileSize(ft));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2125 DEBUG_INFO(" text: %s\n", NSTR(mwFileTransfer_getMessage(ft)));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2126
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2127 xfer = purple_xfer_new(acct, PURPLE_XFER_RECEIVE, who);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
2128 if (xfer)
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
2129 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2130 purple_xfer_ref(xfer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2131 mwFileTransfer_setClientData(ft, xfer, (GDestroyNotify) purple_xfer_unref);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
2132 xfer->data = ft;
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
2133
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2134 purple_xfer_set_init_fnc(xfer, ft_incoming_init);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2135 purple_xfer_set_cancel_recv_fnc(xfer, ft_incoming_cancel);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2136 purple_xfer_set_request_denied_fnc(xfer, ft_incoming_cancel);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2137
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2138 purple_xfer_set_filename(xfer, mwFileTransfer_getFileName(ft));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2139 purple_xfer_set_size(xfer, mwFileTransfer_getFileSize(ft));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2140 purple_xfer_set_message(xfer, mwFileTransfer_getMessage(ft));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2141
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2142 purple_xfer_request(xfer);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
2143 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2144 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2145
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2146
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2147 static void ft_send(struct mwFileTransfer *ft, FILE *fp) {
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2148 guchar buf[MW_FT_LEN];
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2149 struct mwOpaque o = { .data = buf, .len = MW_FT_LEN };
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2150 guint32 rem;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2151 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2152
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2153 xfer = mwFileTransfer_getClientData(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2154
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2155 rem = mwFileTransfer_getRemaining(ft);
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2156 if(rem < MW_FT_LEN) o.len = rem;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2157
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2158 if(fread(buf, (size_t) o.len, 1, fp)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2159
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2160 /* calculate progress and display it */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2161 xfer->bytes_sent += o.len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2162 xfer->bytes_remaining -= o.len;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2163 purple_xfer_update_progress(xfer);
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2164
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2165 mwFileTransfer_send(ft, &o);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2166
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2167 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2168 int err = errno;
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2169 DEBUG_WARN("problem reading from file %s: %s\n",
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2170 NSTR(mwFileTransfer_getFileName(ft)), strerror(err));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2171
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2172 mwFileTransfer_cancel(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2173 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2174 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2175
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2176
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2177 static void mw_ft_opened(struct mwFileTransfer *ft) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2178 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2179 - get purple ft from client data in ft
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2180 - set the state to active
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2181 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2182
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2183 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2184
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2185 xfer = mwFileTransfer_getClientData(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2186
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2187 if(! xfer) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2188 mwFileTransfer_cancel(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2189 mwFileTransfer_free(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2190 g_return_if_reached();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2191 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2192
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2193 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2194 xfer->dest_fp = g_fopen(xfer->local_filename, "rb");
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2195 ft_send(ft, xfer->dest_fp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2196 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2197 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2198
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2199
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2200 static void mw_ft_closed(struct mwFileTransfer *ft, guint32 code) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2201 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2202 - get purple ft from client data in ft
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2203 - indicate rejection/cancelation/completion
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2204 - free the file transfer itself
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2205 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2206
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2207 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2208
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2209 xfer = mwFileTransfer_getClientData(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2210 if(xfer) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2211 xfer->data = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2212
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2213 if(! mwFileTransfer_getRemaining(ft)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2214 purple_xfer_set_completed(xfer, TRUE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2215 purple_xfer_end(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2216
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2217 } else if(mwFileTransfer_isCancelLocal(ft)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2218 /* calling purple_xfer_cancel_local is redundant, since that's
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2219 probably what triggered this function to be called */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2220 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2221
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2222 } else if(mwFileTransfer_isCancelRemote(ft)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2223 /* steal the reference for the xfer */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2224 mwFileTransfer_setClientData(ft, NULL, NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2225 purple_xfer_cancel_remote(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2226
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2227 /* drop the stolen reference */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2228 purple_xfer_unref(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2229 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2230 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2231 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2232
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2233 mwFileTransfer_free(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2234 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2235
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2236
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2237 static void mw_ft_recv(struct mwFileTransfer *ft,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2238 struct mwOpaque *data) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2239 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2240 - get purple ft from client data in ft
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2241 - update transfered percentage
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2242 - if done, destroy the ft, disassociate from purple ft
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2243 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2244
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2245 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2246 FILE *fp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2247
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2248 xfer = mwFileTransfer_getClientData(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2249 g_return_if_fail(xfer != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2250
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2251 fp = xfer->dest_fp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2252 g_return_if_fail(fp != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2253
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2254 /* we must collect and save our precious data */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2255 fwrite(data->data, 1, data->len, fp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2256
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2257 /* update the progress */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2258 xfer->bytes_sent += data->len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2259 xfer->bytes_remaining -= data->len;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2260 purple_xfer_update_progress(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2261
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2262 /* let the other side know we got it, and to send some more */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2263 mwFileTransfer_ack(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2264 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2265
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2266
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2267 static void mw_ft_ack(struct mwFileTransfer *ft) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2268 PurpleXfer *xfer;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2269
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2270 xfer = mwFileTransfer_getClientData(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2271 g_return_if_fail(xfer != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2272 g_return_if_fail(xfer->watcher == 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2273
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2274 if(! mwFileTransfer_getRemaining(ft)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2275 purple_xfer_set_completed(xfer, TRUE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2276 purple_xfer_end(xfer);
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2277
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2278 } else if(mwFileTransfer_isOpen(ft)) {
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2279 ft_send(ft, xfer->dest_fp);
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
2280 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2281 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2282
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2283
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2284 static void mw_ft_clear(struct mwServiceFileTransfer *srvc) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2285 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2286 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2287
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2288
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2289 static struct mwFileTransferHandler mw_ft_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2290 mw_ft_offered,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2291 mw_ft_opened,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2292 mw_ft_closed,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2293 mw_ft_recv,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2294 mw_ft_ack,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2295 mw_ft_clear,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2296 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2297
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2298
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2299 static struct mwServiceFileTransfer *mw_srvc_ft_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2300 struct mwServiceFileTransfer *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2301 GHashTable *ft_map;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2302
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2303 ft_map = g_hash_table_new(g_direct_hash, g_direct_equal);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2304
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2305 srvc = mwServiceFileTransfer_new(s, &mw_ft_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2306 mwService_setClientData(MW_SERVICE(srvc), ft_map,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2307 (GDestroyNotify) g_hash_table_destroy);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2308
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2309 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2310 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2311
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2312
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2313 static void convo_data_free(struct convo_data *cd) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2314 GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2315
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2316 /* clean the queue */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2317 for(l = cd->queue; l; l = g_list_delete_link(l, l)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2318 struct convo_msg *m = l->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2319 if(m->clear) m->clear(m->data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2320 g_free(m);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2321 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2322
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2323 g_free(cd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2324 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2325
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2326
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2327 /** allocates a convo_data structure and associates it with the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2328 conversation in the client data slot */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2329 static void convo_data_new(struct mwConversation *conv) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2330 struct convo_data *cd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2331
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2332 g_return_if_fail(conv != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2333
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2334 if(mwConversation_getClientData(conv))
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2335 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2336
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2337 cd = g_new0(struct convo_data, 1);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2338 cd->conv = conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2339
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2340 mwConversation_setClientData(conv, cd, (GDestroyNotify) convo_data_free);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2341 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2342
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2343
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2344 static PurpleConversation *convo_get_gconv(struct mwConversation *conv) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2345 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2346 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2347 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2348 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2349 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2350
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2351 struct mwIdBlock *idb;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2352
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2353 srvc = mwConversation_getService(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2354 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2355 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2356 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2357 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2358
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2359 idb = mwConversation_getTarget(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2360
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2361 return purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2362 idb->user, acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2363 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2364
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2365
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2366 static void convo_queue(struct mwConversation *conv,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2367 enum mwImSendType type, gconstpointer data) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2368
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2369 struct convo_data *cd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2370 struct convo_msg *m;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2371
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2372 convo_data_new(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2373 cd = mwConversation_getClientData(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2374
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2375 m = g_new0(struct convo_msg, 1);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2376 m->type = type;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2377
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2378 switch(type) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2379 case mwImSend_PLAIN:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2380 m->data = g_strdup(data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2381 m->clear = g_free;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2382 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2383
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2384 case mwImSend_TYPING:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2385 default:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2386 m->data = (gpointer) data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2387 m->clear = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2388 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2389
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2390 cd->queue = g_list_append(cd->queue, m);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2391 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2392
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2393
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2394 /* Does what it takes to get an error displayed for a conversation */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2395 static void convo_error(struct mwConversation *conv, guint32 err) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2396 PurpleConversation *gconv;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2397 char *tmp, *text;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2398 struct mwIdBlock *idb;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2399
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2400 idb = mwConversation_getTarget(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2401
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2402 tmp = mwError(err);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2403 text = g_strconcat(_("Unable to send message: "), tmp, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2404
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2405 gconv = convo_get_gconv(conv);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2406 if(gconv && !purple_conv_present_error(idb->user, gconv->account, text)) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2407
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2408 g_free(text);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2409 text = g_strdup_printf(_("Unable to send message to %s:"),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2410 (idb->user)? idb->user: "(unknown)");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2411 purple_notify_error(purple_account_get_connection(gconv->account),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2412 NULL, text, tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2413 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2414
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2415 g_free(tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2416 g_free(text);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2417 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2418
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2419
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2420 static void convo_queue_send(struct mwConversation *conv) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2421 struct convo_data *cd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2422 GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2423
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2424 cd = mwConversation_getClientData(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2425
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2426 for(l = cd->queue; l; l = g_list_delete_link(l, l)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2427 struct convo_msg *m = l->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2428
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2429 mwConversation_send(conv, m->type, m->data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2430
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2431 if(m->clear) m->clear(m->data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2432 g_free(m);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2433 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2434
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2435 cd->queue = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2436 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2437
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2438
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2439 /** called when a mw conversation leaves a purple conversation to
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2440 inform the purple conversation that it's unsafe to offer any *cool*
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2441 features. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2442 static void convo_nofeatures(struct mwConversation *conv) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2443 PurpleConversation *gconv;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2444 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2445
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2446 gconv = convo_get_gconv(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2447 if(! gconv) return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2448
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2449 gc = purple_conversation_get_gc(gconv);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2450 if(! gc) return;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2451
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2452 purple_conversation_set_features(gconv, gc->flags);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2453 }
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2454
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2455
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2456 /** called when a mw conversation and purple conversation come together,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2457 to inform the purple conversation of what features to offer the
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2458 user */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2459 static void convo_features(struct mwConversation *conv) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2460 PurpleConversation *gconv;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2461 PurpleConnectionFlags feat;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2462
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2463 gconv = convo_get_gconv(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2464 if(! gconv) return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2465
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2466 feat = purple_conversation_get_features(gconv);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2467
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2468 if(mwConversation_isOpen(conv)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2469 if(mwConversation_supports(conv, mwImSend_HTML)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2470 feat |= PURPLE_CONNECTION_HTML;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2471 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2472 feat &= ~PURPLE_CONNECTION_HTML;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2473 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2474
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2475 if(mwConversation_supports(conv, mwImSend_MIME)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2476 feat &= ~PURPLE_CONNECTION_NO_IMAGES;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2477 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2478 feat |= PURPLE_CONNECTION_NO_IMAGES;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2479 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2480
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2481 DEBUG_INFO("conversation features set to 0x%04x\n", feat);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2482 purple_conversation_set_features(gconv, feat);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2483
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2484 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2485 convo_nofeatures(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2486 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2487 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2488
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2489
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2490 static void mw_conversation_opened(struct mwConversation *conv) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2491 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2492 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2493 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2494 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2495 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2496
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2497 struct convo_dat *cd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2498
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2499 srvc = mwConversation_getService(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2500 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2501 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2502 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2503 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2504
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2505 /* set up the queue */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2506 cd = mwConversation_getClientData(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2507 if(cd) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2508 convo_queue_send(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2509
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2510 if(! convo_get_gconv(conv)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2511 mwConversation_free(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2512 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2513 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2514
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2515 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2516 convo_data_new(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2517 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2518
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2519 { /* record the client key for the buddy */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2520 PurpleBuddy *buddy;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2521 struct mwLoginInfo *info;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2522 info = mwConversation_getTargetInfo(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2523
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2524 buddy = purple_find_buddy(acct, info->user_id);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2525 if(buddy) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2526 purple_blist_node_set_int((PurpleBlistNode *) buddy,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2527 BUDDY_KEY_CLIENT, info->type);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2528 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2529 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2530
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2531 convo_features(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2532 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2533
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2534
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2535 static void mw_conversation_closed(struct mwConversation *conv,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2536 guint32 reason) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2537
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2538 struct convo_data *cd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2539
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2540 g_return_if_fail(conv != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2541
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2542 /* if there's an error code and a non-typing message in the queue,
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2543 print an error message to the conversation */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2544 cd = mwConversation_getClientData(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2545 if(reason && cd && cd->queue) {
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2546 GList *l;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2547 for(l = cd->queue; l; l = l->next) {
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2548 struct convo_msg *m = l->data;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2549 if(m->type != mwImSend_TYPING) {
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2550 convo_error(conv, reason);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2551 break;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2552 }
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2553 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2554 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2555
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2556 #if 0
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2557 /* don't do this, to prevent the occasional weird sending of
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2558 formatted messages as plaintext when the other end closes the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2559 conversation after we've begun composing the message */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2560 convo_nofeatures(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2561 #endif
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2562
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2563 mwConversation_removeClientData(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2564 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2565
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2566
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2567 static void im_recv_text(struct mwConversation *conv,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2568 struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2569 const char *msg) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2570
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2571 struct mwIdBlock *idb;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2572 char *txt, *esc;
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2573 const char *t;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2574
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2575 idb = mwConversation_getTarget(conv);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2576
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2577 txt = purple_utf8_try_convert(msg);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2578 t = txt? txt: msg;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2579
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2580 esc = g_markup_escape_text(t, -1);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2581 serv_got_im(pd->gc, idb->user, esc, 0, time(NULL));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2582 g_free(esc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2583
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2584 g_free(txt);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2585 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2586
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2587
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2588 static void im_recv_typing(struct mwConversation *conv,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2589 struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2590 gboolean typing) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2591
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2592 struct mwIdBlock *idb;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2593 idb = mwConversation_getTarget(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2594
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2595 serv_got_typing(pd->gc, idb->user, 0,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2596 typing? PURPLE_TYPING: PURPLE_NOT_TYPING);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2597 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2598
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2599
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2600 static void im_recv_html(struct mwConversation *conv,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2601 struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2602 const char *msg) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2603 struct mwIdBlock *idb;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2604 char *t1, *t2;
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2605 const char *t;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2606
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2607 idb = mwConversation_getTarget(conv);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2608
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2609 /* ensure we're receiving UTF8 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2610 t1 = purple_utf8_try_convert(msg);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2611 t = t1? t1: msg;
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2612
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2613 /* convert entities to UTF8 so they'll log correctly */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2614 t2 = purple_utf8_ncr_decode(t);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2615 t = t2? t2: t;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2616
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2617 serv_got_im(pd->gc, idb->user, t, 0, time(NULL));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2618
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2619 g_free(t1);
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2620 g_free(t2);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2621 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2622
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2623
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2624 static void im_recv_subj(struct mwConversation *conv,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2625 struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2626 const char *subj) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2627
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2628 /** @todo somehow indicate receipt of a conversation subject. It
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2629 would also be nice if we added a /topic command for the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2630 protocol */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2631 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2632 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2633
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2634
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2635 /** generate "cid:908@20582notesbuddy" from "<908@20582notesbuddy>" */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2636 static char *make_cid(const char *cid) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2637 gsize n;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2638 char *c, *d;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2639
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2640 g_return_val_if_fail(cid != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2641
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2642 n = strlen(cid);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2643 g_return_val_if_fail(n > 2, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2644
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2645 c = g_strndup(cid+1, n-2);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2646 d = g_strdup_printf("cid:%s", c);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2647
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2648 g_free(c);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2649 return d;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2650 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2651
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2652
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2653 static void im_recv_mime(struct mwConversation *conv,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2654 struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2655 const char *data) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2656
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2657 GHashTable *img_by_cid;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2658 GList *images;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2659
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2660 GString *str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2661
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2662 PurpleMimeDocument *doc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2663 const GList *parts;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2664
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2665 img_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2666 images = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2667
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2668 /* don't want the contained string to ever be NULL */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2669 str = g_string_new("");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2670
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2671 doc = purple_mime_document_parse(data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2672
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2673 /* handle all the MIME parts */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2674 parts = purple_mime_document_get_parts(doc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2675 for(; parts; parts = parts->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2676 PurpleMimePart *part = parts->data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2677 const char *type;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2678
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2679 type = purple_mime_part_get_field(part, "content-type");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2680 DEBUG_INFO("MIME part Content-Type: %s\n", NSTR(type));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2681
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2682 if(! type) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2683 ; /* feh */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2684
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2685 } else if(purple_str_has_prefix(type, "image")) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2686 /* put images into the image store */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2687
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11133
diff changeset
2688 guchar *d_dat;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2689 gsize d_len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2690 char *cid;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2691 int img;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2692
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2693 /* obtain and unencode the data */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2694 purple_mime_part_get_data_decoded(part, &d_dat, &d_len);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2695
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2696 /* look up the content id */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2697 cid = (char *) purple_mime_part_get_field(part, "Content-ID");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2698 cid = make_cid(cid);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2699
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2700 /* add image to the purple image store */
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16121
diff changeset
2701 img = purple_imgstore_add_with_id(d_dat, d_len, cid);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2702
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2703 /* map the cid to the image store identifier */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2704 g_hash_table_insert(img_by_cid, cid, GINT_TO_POINTER(img));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2705
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2706 /* recall the image for dereferencing later */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2707 images = g_list_append(images, GINT_TO_POINTER(img));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2708
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2709 } else if(purple_str_has_prefix(type, "text")) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2710
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2711 /* concatenate all the text parts together */
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11133
diff changeset
2712 guchar *data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2713 gsize len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2714
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2715 purple_mime_part_get_data_decoded(part, &data, &len);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2716 g_string_append(str, (const char *)data);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
2717 g_free(data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2718 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2719 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2720
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2721 purple_mime_document_free(doc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2722
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2723 /* @todo should put this in its own function */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2724 { /* replace each IMG tag's SRC attribute with an ID attribute. This
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2725 actually modifies the contents of str */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2726 GData *attribs;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2727 char *start, *end;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2728 char *tmp = str->str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2729
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2730 while(*tmp && purple_markup_find_tag("img", tmp, (const char **) &start,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2731 (const char **) &end, &attribs)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2732
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2733 char *alt, *align, *border, *src;
13580
5cf462f3bae1 [gaim-migrate @ 15961]
Christopher O'Brien <siege@pidgin.im>
parents: 13296
diff changeset
2734 int img = 0;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2735
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2736 alt = g_datalist_get_data(&attribs, "alt");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2737 align = g_datalist_get_data(&attribs, "align");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2738 border = g_datalist_get_data(&attribs, "border");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2739 src = g_datalist_get_data(&attribs, "src");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2740
13580
5cf462f3bae1 [gaim-migrate @ 15961]
Christopher O'Brien <siege@pidgin.im>
parents: 13296
diff changeset
2741 if(src)
5cf462f3bae1 [gaim-migrate @ 15961]
Christopher O'Brien <siege@pidgin.im>
parents: 13296
diff changeset
2742 img = GPOINTER_TO_INT(g_hash_table_lookup(img_by_cid, src));
5cf462f3bae1 [gaim-migrate @ 15961]
Christopher O'Brien <siege@pidgin.im>
parents: 13296
diff changeset
2743
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2744 if(img) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2745 GString *atstr;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2746 gsize len = (end - start);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2747 gsize mov;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2748
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2749 atstr = g_string_new("");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2750 if(alt) g_string_append_printf(atstr, " alt=\"%s\"", alt);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2751 if(align) g_string_append_printf(atstr, " align=\"%s\"", align);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2752 if(border) g_string_append_printf(atstr, " border=\"%s\"", border);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2753
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2754 mov = g_snprintf(start, len, "<img%s id=\"%i\"", atstr->str, img);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2755 while(mov < len) start[mov++] = ' ';
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2756
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2757 g_string_free(atstr, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2758 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2759
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2760 g_datalist_clear(&attribs);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2761 tmp = end + 1;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2762 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2763 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2764
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
2765 im_recv_html(conv, pd, str->str);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2766
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2767 g_string_free(str, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2768
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2769 /* clean up the cid table */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2770 g_hash_table_destroy(img_by_cid);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2771
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2772 /* dereference all the imgages */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2773 while(images) {
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16121
diff changeset
2774 purple_imgstore_unref_by_id(GPOINTER_TO_INT(images->data));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2775 images = g_list_delete_link(images, images);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2776 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2777 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2778
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2779
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2780 static void mw_conversation_recv(struct mwConversation *conv,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2781 enum mwImSendType type,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2782 gconstpointer msg) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2783 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2784 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2785 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2786
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2787 srvc = mwConversation_getService(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2788 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2789 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2790
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2791 switch(type) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2792 case mwImSend_PLAIN:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2793 im_recv_text(conv, pd, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2794 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2795
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2796 case mwImSend_TYPING:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2797 im_recv_typing(conv, pd, !! msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2798 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2799
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2800 case mwImSend_HTML:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2801 im_recv_html(conv, pd, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2802 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2803
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2804 case mwImSend_SUBJECT:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2805 im_recv_subj(conv, pd, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2806 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2807
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2808 case mwImSend_MIME:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2809 im_recv_mime(conv, pd, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2810 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2811
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2812 default:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2813 DEBUG_INFO("conversation received strange type, 0x%04x\n", type);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2814 ; /* erm... */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2815 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2816 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2817
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2818
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2819 static void mw_place_invite(struct mwConversation *conv,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2820 const char *message,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2821 const char *title, const char *name) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2822 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2823 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2824 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2825
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2826 struct mwIdBlock *idb;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2827 GHashTable *ht;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2828
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2829 srvc = mwConversation_getService(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2830 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2831 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2832
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2833 idb = mwConversation_getTarget(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2834
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2835 ht = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2836 g_hash_table_insert(ht, CHAT_KEY_CREATOR, g_strdup(idb->user));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2837 g_hash_table_insert(ht, CHAT_KEY_NAME, g_strdup(name));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2838 g_hash_table_insert(ht, CHAT_KEY_TOPIC, g_strdup(title));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2839 g_hash_table_insert(ht, CHAT_KEY_INVITE, g_strdup(message));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2840 g_hash_table_insert(ht, CHAT_KEY_IS_PLACE, g_strdup("")); /* ugh */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2841
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
2842 if(! title) title = "(no title)";
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
2843 if(! message) message = "(no message)";
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2844 serv_got_chat_invite(pd->gc, title, idb->user, message, ht);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2845
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2846 mwConversation_close(conv, ERR_SUCCESS);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2847 mwConversation_free(conv);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2848 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2849
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2850
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2851 static void mw_im_clear(struct mwServiceIm *srvc) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2852 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2853 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2854
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2855
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2856 static struct mwImHandler mw_im_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2857 mw_conversation_opened,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2858 mw_conversation_closed,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2859 mw_conversation_recv,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2860 mw_place_invite,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
2861 mw_im_clear,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2862 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2863
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2864
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2865 static struct mwServiceIm *mw_srvc_im_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2866 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2867 srvc = mwServiceIm_new(s, &mw_im_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2868 mwServiceIm_setClientType(srvc, mwImClient_NOTESBUDDY);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2869 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2870 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2871
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2872
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2873 /* The following helps us relate a mwPlace to a PurpleConvChat in the
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2874 various forms by which either may be indicated. Uses some of
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2875 the similar macros from the conference service above */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2876
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2877 #define PLACE_TO_ID(place) (GPOINTER_TO_INT(place))
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2878 #define ID_TO_PLACE(pd, id) (place_find_by_id((pd), (id)))
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2879
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2880 #define CHAT_TO_PLACE(pd, chat) (ID_TO_PLACE((pd), CHAT_TO_ID(chat)))
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2881 #define PLACE_TO_CHAT(place) (ID_TO_CHAT(PLACE_TO_ID(place)))
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2882
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2883
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2884 static struct mwPlace *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2885 place_find_by_id(struct mwPurplePluginData *pd, int id) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2886 struct mwServicePlace *srvc = pd->srvc_place;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2887 struct mwPlace *place = NULL;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2888 GList *l;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2889
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2890 l = (GList *) mwServicePlace_getPlaces(srvc);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2891 for(; l; l = l->next) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2892 struct mwPlace *p = l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2893 PurpleConvChat *h = PURPLE_CONV_CHAT(mwPlace_getClientData(p));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2894
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2895 if(CHAT_TO_ID(h) == id) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2896 place = p;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2897 break;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2898 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2899 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2900
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2901 return place;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2902 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2903
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2904
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2905 static void mw_place_opened(struct mwPlace *place) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2906 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2907 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2908 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2909 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2910 PurpleConversation *gconf;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2911
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2912 GList *members, *l;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2913
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2914 const char *n = mwPlace_getName(place);
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
2915 const char *t = mwPlace_getTitle(place);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2916
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2917 srvc = mwPlace_getService(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2918 session = mwService_getSession(MW_SERVICE(srvc));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2919 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2920 gc = pd->gc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2921
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2922 members = mwPlace_getMembers(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2923
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2924 DEBUG_INFO("place %s opened, %u initial members\n",
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2925 NSTR(n), g_list_length(members));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2926
12742
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
2927 if(! t) t = "(no title)";
88e624a344cb [gaim-migrate @ 15089]
Christopher O'Brien <siege@pidgin.im>
parents: 12735
diff changeset
2928 gconf = serv_got_joined_chat(gc, PLACE_TO_ID(place), t);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2929
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2930 mwPlace_setClientData(place, gconf, NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2931
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2932 for(l = members; l; l = l->next) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2933 struct mwIdBlock *idb = l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2934 purple_conv_chat_add_user(PURPLE_CONV_CHAT(gconf), idb->user,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2935 NULL, PURPLE_CBFLAGS_NONE, FALSE);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2936 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2937 g_list_free(members);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2938 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2939
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2940
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2941 static void mw_place_closed(struct mwPlace *place, guint32 code) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2942 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2943 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2944 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2945 PurpleConnection *gc;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2946
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2947 const char *n = mwPlace_getName(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2948 char *msg = mwError(code);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2949
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2950 DEBUG_INFO("place %s closed, 0x%08x\n", NSTR(n), code);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2951
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2952 srvc = mwPlace_getService(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2953 session = mwService_getSession(MW_SERVICE(srvc));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2954 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2955 gc = pd->gc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2956
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2957 serv_got_chat_left(gc, PLACE_TO_ID(place));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2958
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2959 purple_notify_error(gc, _("Place Closed"), NULL, msg);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2960 g_free(msg);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2961 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2962
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2963
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2964 static void mw_place_peerJoined(struct mwPlace *place,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2965 const struct mwIdBlock *peer) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2966 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2967 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2968 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2969 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2970 PurpleConversation *gconf;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2971
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2972 const char *n = mwPlace_getName(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2973
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2974 DEBUG_INFO("%s joined place %s\n", NSTR(peer->user), NSTR(n));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2975
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2976 srvc = mwPlace_getService(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2977 session = mwService_getSession(MW_SERVICE(srvc));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2978 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2979 gc = pd->gc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2980
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2981 gconf = mwPlace_getClientData(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2982 g_return_if_fail(gconf != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2983
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2984 purple_conv_chat_add_user(PURPLE_CONV_CHAT(gconf), peer->user,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2985 NULL, PURPLE_CBFLAGS_NONE, TRUE);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2986 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2987
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2988
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2989 static void mw_place_peerParted(struct mwPlace *place,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2990 const struct mwIdBlock *peer) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2991 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2992 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2993 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2994 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
2995 PurpleConversation *gconf;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2996
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2997 const char *n = mwPlace_getName(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2998
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
2999 DEBUG_INFO("%s left place %s\n", NSTR(peer->user), NSTR(n));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3000
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3001 srvc = mwPlace_getService(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3002 session = mwService_getSession(MW_SERVICE(srvc));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3003 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3004 gc = pd->gc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3005
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3006 gconf = mwPlace_getClientData(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3007 g_return_if_fail(gconf != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3008
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3009 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(gconf), peer->user, NULL);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3010 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3011
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3012
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3013 static void mw_place_peerSetAttribute(struct mwPlace *place,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3014 const struct mwIdBlock *peer,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3015 guint32 attr, struct mwOpaque *o) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3016 ;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3017 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3018
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3019
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3020 static void mw_place_peerUnsetAttribute(struct mwPlace *place,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3021 const struct mwIdBlock *peer,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3022 guint32 attr) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3023 ;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3024 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3025
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3026
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3027 static void mw_place_message(struct mwPlace *place,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3028 const struct mwIdBlock *who,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3029 const char *msg) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3030 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3031 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3032 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3033 PurpleConnection *gc;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3034 char *esc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3035
12863
535f2e11db82 [gaim-migrate @ 15214]
Christopher O'Brien <siege@pidgin.im>
parents: 12830
diff changeset
3036 if(! msg) return;
535f2e11db82 [gaim-migrate @ 15214]
Christopher O'Brien <siege@pidgin.im>
parents: 12830
diff changeset
3037
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3038 srvc = mwPlace_getService(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3039 session = mwService_getSession(MW_SERVICE(srvc));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3040 pd = mwSession_getClientData(session);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3041 gc = pd->gc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3042
12864
072fcb25d27b [gaim-migrate @ 15215]
Christopher O'Brien <siege@pidgin.im>
parents: 12863
diff changeset
3043 esc = g_markup_escape_text(msg, -1);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3044 serv_got_chat_in(gc, PLACE_TO_ID(place), who->user, 0, esc, time(NULL));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3045 g_free(esc);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3046 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3047
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3048
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3049 static void mw_place_clear(struct mwServicePlace *srvc) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3050 ;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3051 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3052
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3053
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3054 static struct mwPlaceHandler mw_place_handler = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3055 mw_place_opened,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3056 mw_place_closed,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3057 mw_place_peerJoined,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3058 mw_place_peerParted,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3059 mw_place_peerSetAttribute,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3060 mw_place_peerUnsetAttribute,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3061 mw_place_message,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
3062 mw_place_clear,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3063 };
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3064
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3065
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3066 static struct mwServicePlace *mw_srvc_place_new(struct mwSession *s) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3067 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3068 srvc = mwServicePlace_new(s, &mw_place_handler);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3069 return srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3070 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3071
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3072
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3073 static struct mwServiceResolve *mw_srvc_resolve_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3074 struct mwServiceResolve *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3075 srvc = mwServiceResolve_new(s);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3076 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3077 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3078
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3079
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3080 static struct mwServiceStorage *mw_srvc_store_new(struct mwSession *s) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3081 struct mwServiceStorage *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3082 srvc = mwServiceStorage_new(s);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3083 return srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3084 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3085
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3086
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3087 /** allocate and associate a mwPurplePluginData with a PurpleConnection */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3088 static struct mwPurplePluginData *mwPurplePluginData_new(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3089 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3090
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3091 g_return_val_if_fail(gc != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3092
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3093 pd = g_new0(struct mwPurplePluginData, 1);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3094 pd->gc = gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3095 pd->session = mwSession_new(&mw_session_handler);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3096 pd->srvc_aware = mw_srvc_aware_new(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3097 pd->srvc_conf = mw_srvc_conf_new(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3098 pd->srvc_ft = mw_srvc_ft_new(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3099 pd->srvc_im = mw_srvc_im_new(pd->session);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3100 pd->srvc_place = mw_srvc_place_new(pd->session);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3101 pd->srvc_resolve = mw_srvc_resolve_new(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3102 pd->srvc_store = mw_srvc_store_new(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3103 pd->group_list_map = g_hash_table_new(g_direct_hash, g_direct_equal);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3104 pd->sock_buf = purple_circ_buffer_new(0);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3105
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3106 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_aware));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3107 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_conf));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3108 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_ft));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3109 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_im));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3110 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_place));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3111 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_resolve));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3112 mwSession_addService(pd->session, MW_SERVICE(pd->srvc_store));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3113
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3114 mwSession_addCipher(pd->session, mwCipher_new_RC2_40(pd->session));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3115 mwSession_addCipher(pd->session, mwCipher_new_RC2_128(pd->session));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3116
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3117 mwSession_setClientData(pd->session, pd, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3118 gc->proto_data = pd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3119
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3120 return pd;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3121 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3122
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3123
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3124 static void mwPurplePluginData_free(struct mwPurplePluginData *pd) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3125 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3126
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3127 pd->gc->proto_data = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3128
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3129 mwSession_removeService(pd->session, mwService_AWARE);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3130 mwSession_removeService(pd->session, mwService_CONFERENCE);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3131 mwSession_removeService(pd->session, mwService_FILE_TRANSFER);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3132 mwSession_removeService(pd->session, mwService_IM);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3133 mwSession_removeService(pd->session, mwService_PLACE);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3134 mwSession_removeService(pd->session, mwService_RESOLVE);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3135 mwSession_removeService(pd->session, mwService_STORAGE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3136
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3137 mwService_free(MW_SERVICE(pd->srvc_aware));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3138 mwService_free(MW_SERVICE(pd->srvc_conf));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3139 mwService_free(MW_SERVICE(pd->srvc_ft));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3140 mwService_free(MW_SERVICE(pd->srvc_im));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3141 mwService_free(MW_SERVICE(pd->srvc_place));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3142 mwService_free(MW_SERVICE(pd->srvc_resolve));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3143 mwService_free(MW_SERVICE(pd->srvc_store));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3144
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3145 mwCipher_free(mwSession_getCipher(pd->session, mwCipher_RC2_40));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3146 mwCipher_free(mwSession_getCipher(pd->session, mwCipher_RC2_128));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3147
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3148 mwSession_free(pd->session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3149
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3150 g_hash_table_destroy(pd->group_list_map);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3151 purple_circ_buffer_destroy(pd->sock_buf);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3152
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3153 g_free(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3154 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3155
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3156
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3157 static const char *mw_prpl_list_icon(PurpleAccount *a, PurpleBuddy *b) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3158 /* my little green dude is a chopped up version of the aim running
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3159 guy. First, cut off the head and store someplace safe. Then,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3160 take the left-half side of the body and throw it away. Make a
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3161 copy of the remaining body, and flip it horizontally. Now attach
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3162 the two pieces into an X shape, and drop the head back on the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3163 top, being careful to center it. Then, just change the color
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3164 saturation to bring the red down a bit, and voila! */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3165
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3166 /* then, throw all of that away and use sodipodi to make a new
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3167 icon. You know, LIKE A REAL MAN. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3168
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3169 return "meanwhile";
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3170 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3171
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3172
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3173 static const char* mw_prpl_list_emblem(PurpleBuddy *b)
15524
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3174 {
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3175 if(buddy_is_external(b))
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3176 return "external";
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3177
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3178 return NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3179 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3180
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3181
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3182 static char *mw_prpl_status_text(PurpleBuddy *b) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3183 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3184 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3185 struct mwAwareIdBlock t = { mwAware_USER, b->name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3186 const char *ret;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3187
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3188 gc = b->account->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3189 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3190
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3191 ret = mwServiceAware_getText(pd->srvc_aware, &t);
12496
788b20ccec91 [gaim-migrate @ 14808]
Christopher O'Brien <siege@pidgin.im>
parents: 12489
diff changeset
3192 return ret? g_markup_escape_text(ret, -1): NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3193 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3194
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3195
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3196 static const char *status_text(PurpleBuddy *b) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3197 PurplePresence *presence;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3198 PurpleStatus *status;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3199
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3200 presence = purple_buddy_get_presence(b);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3201 status = purple_presence_get_active_status(presence);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3202
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3203 return purple_status_get_name(status);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3204 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3205
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3206
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3207 static gboolean user_supports(struct mwServiceAware *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3208 const char *who, guint32 feature) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3209
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3210 const struct mwAwareAttribute *attr;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3211 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3212
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3213 attr = mwServiceAware_getAttribute(srvc, &idb, feature);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3214 return (attr != NULL) && mwAwareAttribute_asBoolean(attr);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3215 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3216
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3217
12422
53fba178cadf [gaim-migrate @ 14729]
Richard Laager <rlaager@pidgin.im>
parents: 12312
diff changeset
3218 static char *user_supports_text(struct mwServiceAware *srvc, const char *who) {
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3219 const char *feat[] = {NULL, NULL, NULL, NULL, NULL};
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3220 const char **f = feat;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3221
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3222 if(user_supports(srvc, who, mwAttribute_AV_PREFS_SET)) {
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3223 gboolean mic, speak, video;
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3224
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3225 mic = user_supports(srvc, who, mwAttribute_MICROPHONE);
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3226 speak = user_supports(srvc, who, mwAttribute_SPEAKERS);
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3227 video = user_supports(srvc, who, mwAttribute_VIDEO_CAMERA);
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3228
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3229 if(mic) *f++ = _("Microphone");
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3230 if(speak) *f++ = _("Speakers");
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3231 if(video) *f++ = _("Video Camera");
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3232 }
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3233
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3234 if(user_supports(srvc, who, mwAttribute_FILE_TRANSFER))
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3235 *f++ = _("File Transfer");
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3236
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3237 return (*feat)? g_strjoinv(", ", (char **)feat): NULL;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3238 /* jenni loves siege */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3239 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3240
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3241
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3242 static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3243 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3244 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3245 struct mwAwareIdBlock idb = { mwAware_USER, b->name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3246
12953
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3247 const char *message;
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3248 const char *status;
12954
a0f02cc2e803 [gaim-migrate @ 15307]
Richard Laager <rlaager@pidgin.im>
parents: 12953
diff changeset
3249 char *tmp;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3250
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3251 gc = b->account->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3252 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3253
12953
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3254 message = mwServiceAware_getText(pd->srvc_aware, &idb);
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3255 status = status_text(b);
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3256
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3257 if(message != NULL && purple_utf8_strcasecmp(status, message)) {
12953
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3258 tmp = g_markup_escape_text(message, -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3259 purple_notify_user_info_add_pair(user_info, status, tmp);
12953
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3260 g_free(tmp);
12954
a0f02cc2e803 [gaim-migrate @ 15307]
Richard Laager <rlaager@pidgin.im>
parents: 12953
diff changeset
3261
a0f02cc2e803 [gaim-migrate @ 15307]
Richard Laager <rlaager@pidgin.im>
parents: 12953
diff changeset
3262 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3263 purple_notify_user_info_add_pair(user_info, _("Status"), status);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3264 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3265
12950
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3266 if(full) {
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3267 tmp = user_supports_text(pd->srvc_aware, b->name);
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3268 if(tmp) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3269 purple_notify_user_info_add_pair(user_info, _("Supports"), tmp);
12953
cb41397f42d4 [gaim-migrate @ 15306]
Richard Laager <rlaager@pidgin.im>
parents: 12952
diff changeset
3270 g_free(tmp);
12950
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3271 }
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3272
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3273 if(buddy_is_external(b)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3274 purple_notify_user_info_add_pair(user_info, NULL, _("External User"));
12950
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3275 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3276 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3277 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3278
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3279
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3280 static GList *mw_prpl_status_types(PurpleAccount *acct) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3281 GList *types = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3282 PurpleStatusType *type;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3283
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3284 type = purple_status_type_new(PURPLE_STATUS_AVAILABLE, MW_STATE_ACTIVE,
12950
167358332f4b [gaim-migrate @ 15303]
Christopher O'Brien <siege@pidgin.im>
parents: 12943
diff changeset
3285 NULL, TRUE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3286 purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3287 purple_value_new(PURPLE_TYPE_STRING));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3288 types = g_list_append(types, type);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3289
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3290 type = purple_status_type_new(PURPLE_STATUS_AWAY, MW_STATE_AWAY,
12595
8108c22aa723 [gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents: 12524
diff changeset
3291 NULL, TRUE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3292 purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3293 purple_value_new(PURPLE_TYPE_STRING));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3294 types = g_list_append(types, type);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3295
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3296 type = purple_status_type_new(PURPLE_STATUS_UNAVAILABLE, MW_STATE_BUSY,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3297 _("Do Not Disturb"), TRUE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3298 purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3299 purple_value_new(PURPLE_TYPE_STRING));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3300 types = g_list_append(types, type);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3301
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3302 type = purple_status_type_new(PURPLE_STATUS_OFFLINE, MW_STATE_OFFLINE,
12658
4aa7a873628d [gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents: 12650
diff changeset
3303 NULL, TRUE);
4aa7a873628d [gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents: 12650
diff changeset
3304 types = g_list_append(types, type);
4aa7a873628d [gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents: 12650
diff changeset
3305
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3306 return types;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3307 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3308
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3309
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3310 static void conf_create_prompt_cancel(PurpleBuddy *buddy,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3311 PurpleRequestFields *fields) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3312 ; /* nothing to do */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3313 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3314
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3315
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3316 static void conf_create_prompt_join(PurpleBuddy *buddy,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3317 PurpleRequestFields *fields) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3318 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3319 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3320 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3321 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3322
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3323 PurpleRequestField *f;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3324
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3325 const char *topic, *invite;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3326 struct mwConference *conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3327 struct mwIdBlock idb = { NULL, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3328
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3329 acct = buddy->account;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3330 gc = purple_account_get_connection(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3331 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3332 srvc = pd->srvc_conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3333
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3334 f = purple_request_fields_get_field(fields, CHAT_KEY_TOPIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3335 topic = purple_request_field_string_get_value(f);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3336
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3337 f = purple_request_fields_get_field(fields, CHAT_KEY_INVITE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3338 invite = purple_request_field_string_get_value(f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3339
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3340 conf = mwConference_new(srvc, topic);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3341 mwConference_open(conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3342
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3343 idb.user = buddy->name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3344 mwConference_invite(conf, &idb, invite);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3345 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3346
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3347
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3348 static void blist_menu_conf_create(PurpleBuddy *buddy, const char *msg) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3349
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3350 PurpleRequestFields *fields;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3351 PurpleRequestFieldGroup *g;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3352 PurpleRequestField *f;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3353
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3354 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3355 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3356
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3357 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3358 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3359 char *msg1;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3360
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3361 g_return_if_fail(buddy != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3362
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3363 acct = buddy->account;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3364 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3365
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3366 gc = purple_account_get_connection(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3367 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3368
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3369 fields = purple_request_fields_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3370
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3371 g = purple_request_field_group_new(NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3372 purple_request_fields_add_group(fields, g);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3373
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3374 f = purple_request_field_string_new(CHAT_KEY_TOPIC, _("Topic"), NULL, FALSE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3375 purple_request_field_group_add_field(g, f);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3376
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3377 f = purple_request_field_string_new(CHAT_KEY_INVITE, _("Message"), msg, FALSE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3378 purple_request_field_group_add_field(g, f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3379
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3380 msgA = _("Create conference with user");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3381 msgB = _("Please enter a topic for the new conference, and an invitation"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3382 " message to be sent to %s");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3383 msg1 = g_strdup_printf(msgB, buddy->name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3384
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3385 purple_request_fields(gc, _("New Conference"),
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3386 msgA, msg1, fields,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3387 _("Create"), G_CALLBACK(conf_create_prompt_join),
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3388 _("Cancel"), G_CALLBACK(conf_create_prompt_cancel),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
3389 acct, purple_buddy_get_name(buddy), NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3390 buddy);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3391 g_free(msg1);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3392 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3393
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3394
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3395 static void conf_select_prompt_cancel(PurpleBuddy *buddy,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3396 PurpleRequestFields *fields) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3397 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3398 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3399
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3400
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3401 static void conf_select_prompt_invite(PurpleBuddy *buddy,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3402 PurpleRequestFields *fields) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3403 PurpleRequestField *f;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3404 const GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3405 const char *msg;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3406
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3407 f = purple_request_fields_get_field(fields, CHAT_KEY_INVITE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3408 msg = purple_request_field_string_get_value(f);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3409
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3410 f = purple_request_fields_get_field(fields, "conf");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3411 l = purple_request_field_list_get_selected(f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3412
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3413 if(l) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3414 gpointer d = purple_request_field_list_get_data(f, l->data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3415
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3416 if(GPOINTER_TO_INT(d) == 0x01) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3417 blist_menu_conf_create(buddy, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3418
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3419 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3420 struct mwIdBlock idb = { buddy->name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3421 mwConference_invite(d, &idb, msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3422 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3423 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3424 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3425
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3426
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3427 static void blist_menu_conf_list(PurpleBuddy *buddy,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3428 GList *confs) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3429
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3430 PurpleRequestFields *fields;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3431 PurpleRequestFieldGroup *g;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3432 PurpleRequestField *f;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3433
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3434 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3435 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3436
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3437 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3438 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3439 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3440
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3441 acct = buddy->account;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3442 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3443
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3444 gc = purple_account_get_connection(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3445 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3446
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3447 fields = purple_request_fields_new();
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3448
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3449 g = purple_request_field_group_new(NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3450 purple_request_fields_add_group(fields, g);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3451
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3452 f = purple_request_field_list_new("conf", _("Available Conferences"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3453 purple_request_field_list_set_multi_select(f, FALSE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3454 for(; confs; confs = confs->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3455 struct mwConference *c = confs->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3456 purple_request_field_list_add(f, mwConference_getTitle(c), c);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3457 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3458 purple_request_field_list_add(f, _("Create New Conference..."),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3459 GINT_TO_POINTER(0x01));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3460 purple_request_field_group_add_field(g, f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3461
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3462 f = purple_request_field_string_new(CHAT_KEY_INVITE, "Message", NULL, FALSE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3463 purple_request_field_group_add_field(g, f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3464
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3465 msgA = _("Invite user to a conference");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3466 msgB = _("Select a conference from the list below to send an invite to"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3467 " user %s. Select \"Create New Conference\" if you'd like to"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3468 " create a new conference to invite this user to.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3469 msg = g_strdup_printf(msgB, buddy->name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3470
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3471 purple_request_fields(gc, _("Invite to Conference"),
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3472 msgA, msg, fields,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3473 _("Invite"), G_CALLBACK(conf_select_prompt_invite),
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3474 _("Cancel"), G_CALLBACK(conf_select_prompt_cancel),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
3475 acct, purple_buddy_get_name(buddy), NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3476 buddy);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3477 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3478 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3479
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3480
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3481 static void blist_menu_conf(PurpleBlistNode *node, gpointer data) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3482 PurpleBuddy *buddy = (PurpleBuddy *) node;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3483 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3484 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3485 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3486 GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3487
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3488 g_return_if_fail(node != NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3489 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3490
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3491 acct = buddy->account;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3492 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3493
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3494 gc = purple_account_get_connection(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3495 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3496
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3497 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3498 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3499
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3500 /*
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3501 - get a list of all conferences on this session
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3502 - if none, prompt to create one, and invite buddy to it
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3503 - else, prompt to select a conference or create one
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3504 */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3505
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3506 l = mwServiceConference_getConferences(pd->srvc_conf);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3507 if(l) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3508 blist_menu_conf_list(buddy, l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3509 g_list_free(l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3510
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3511 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3512 blist_menu_conf_create(buddy, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3513 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3514 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3515
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3516
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3517 #if 0
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3518 static void blist_menu_announce(PurpleBlistNode *node, gpointer data) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3519 PurpleBuddy *buddy = (PurpleBuddy *) node;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3520 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3521 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3522 struct mwPurplePluginData *pd;
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3523 struct mwSession *session;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3524 char *rcpt_name;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3525 GList *rcpt;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3526
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3527 g_return_if_fail(node != NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3528 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3529
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3530 acct = buddy->account;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3531 g_return_if_fail(acct != NULL);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3532
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3533 gc = purple_account_get_connection(acct);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3534 g_return_if_fail(gc != NULL);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3535
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3536 pd = gc->proto_data;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3537 g_return_if_fail(pd != NULL);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3538
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3539 rcpt_name = g_strdup_printf("@U %s", buddy->name);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3540 rcpt = g_list_prepend(NULL, rcpt_name);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3541
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3542 session = pd->session;
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3543 mwSession_sendAnnounce(session, FALSE,
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3544 "This is a TEST announcement. Please ignore.",
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3545 rcpt);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3546
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3547 g_list_free(rcpt);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3548 g_free(rcpt_name);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3549 }
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3550 #endif
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3551
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3552
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3553 static GList *mw_prpl_blist_node_menu(PurpleBlistNode *node) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3554 GList *l = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3555 PurpleMenuAction *act;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3556
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3557 if(! PURPLE_BLIST_NODE_IS_BUDDY(node))
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3558 return l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3559
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3560 l = g_list_append(l, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3561
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3562 act = purple_menu_action_new(_("Invite to Conference..."),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3563 PURPLE_CALLBACK(blist_menu_conf), NULL, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3564 l = g_list_append(l, act);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3565
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3566 #if 0
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3567 act = purple_menu_action_new(_("Send TEST Announcement"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3568 PURPLE_CALLBACK(blist_menu_announce), NULL, NULL);
13206
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3569 l = g_list_append(l, act);
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3570 #endif
fb1f9f01499c [gaim-migrate @ 15568]
Christopher O'Brien <siege@pidgin.im>
parents: 13158
diff changeset
3571
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3572 /** note: this never gets called for a PurpleGroup, have to use the
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3573 blist-node-extended-menu signal for that. The function
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3574 blist_node_menu_cb is assigned to this signal in the function
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3575 services_starting */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3576
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3577 return l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3578 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3579
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3580
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3581 static GList *mw_prpl_chat_info(PurpleConnection *gc) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3582 GList *l = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3583 struct proto_chat_entry *pce;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3584
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3585 pce = g_new0(struct proto_chat_entry, 1);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3586 pce->label = _("Topic:");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3587 pce->identifier = CHAT_KEY_TOPIC;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3588 l = g_list_append(l, pce);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3589
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3590 return l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3591 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3592
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3593
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3594 static GHashTable *mw_prpl_chat_info_defaults(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3595 const char *name) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3596 GHashTable *table;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3597
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3598 g_return_val_if_fail(gc != NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3599
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3600 table = g_hash_table_new_full(g_str_hash, g_str_equal,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3601 NULL, g_free);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3602
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3603 g_hash_table_insert(table, CHAT_KEY_NAME, g_strdup(name));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3604 g_hash_table_insert(table, CHAT_KEY_INVITE, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3605
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3606 return table;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3607 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3608
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3609
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3610 static void mw_prpl_login(PurpleAccount *acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3611
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3612
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3613 static void prompt_host_cancel_cb(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3614 purple_connection_error(gc, _("No Sametime Community Server specified"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3615 }
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3616
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3617
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3618 static void prompt_host_ok_cb(PurpleConnection *gc, const char *host) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3619 if(host && *host) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3620 PurpleAccount *acct = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3621 purple_account_set_string(acct, MW_KEY_HOST, host);
11837
2f1206084fef [gaim-migrate @ 14128]
Mark Doliner <markdoliner@pidgin.im>
parents: 11718
diff changeset
3622 mw_prpl_login(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3623
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3624 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3625 prompt_host_cancel_cb(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3626 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3627 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3628
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3629
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3630 static void prompt_host(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3631 PurpleAccount *acct;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3632 const char *msgA;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3633 char *msg;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3634
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3635 acct = purple_connection_get_account(gc);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
3636 msgA = _("No host or IP address has been configured for the"
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3637 " Meanwhile account %s. Please enter one below to"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3638 " continue logging in.");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3639 msg = g_strdup_printf(msgA, NSTR(purple_account_get_username(acct)));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3640
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3641 purple_request_input(gc, _("Meanwhile Connection Setup"),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3642 _("No Sametime Community Server Specified"), msg,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3643 MW_PLUGIN_DEFAULT_HOST, FALSE, FALSE, NULL,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3644 _("Connect"), G_CALLBACK(prompt_host_ok_cb),
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3645 _("Cancel"), G_CALLBACK(prompt_host_cancel_cb),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
3646 acct, NULL, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3647 gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3648
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3649 g_free(msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3650 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3651
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3652
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3653 static void mw_prpl_login(PurpleAccount *account) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3654 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3655 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3656
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3657 char *user, *pass, *host;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3658 guint port;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3659
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3660 gc = purple_account_get_connection(account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3661 pd = mwPurplePluginData_new(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3662
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3663 /* while we do support images, the default is to not offer it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3664 gc->flags |= PURPLE_CONNECTION_NO_IMAGES;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3665
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3666 user = g_strdup(purple_account_get_username(account));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3667 pass = g_strdup(purple_account_get_password(account));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3668
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3669 host = strrchr(user, ':');
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3670 if(host) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3671 /* annoying user split from 1.2.0, need to undo it */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3672 *host++ = '\0';
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3673 purple_account_set_string(account, MW_KEY_HOST, host);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3674 purple_account_set_username(account, user);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3675
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3676 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3677 host = (char *) purple_account_get_string(account, MW_KEY_HOST,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3678 MW_PLUGIN_DEFAULT_HOST);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3679 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3680
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3681 if(! host || ! *host) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3682 /* somehow, we don't have a host to connect to. Well, we need one
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3683 to actually continue, so let's ask the user directly. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3684 prompt_host(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3685 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3686 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3687
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3688 port = purple_account_get_int(account, MW_KEY_PORT, MW_PLUGIN_DEFAULT_PORT);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3689
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3690 DEBUG_INFO("user: '%s'\n", user);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3691 DEBUG_INFO("host: '%s'\n", host);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3692 DEBUG_INFO("port: %u\n", port);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3693
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3694 mwSession_setProperty(pd->session, mwSession_NO_SECRET,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3695 (char *) no_secret, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3696 mwSession_setProperty(pd->session, mwSession_AUTH_USER_ID, user, g_free);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3697 mwSession_setProperty(pd->session, mwSession_AUTH_PASSWORD, pass, g_free);
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3698
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3699 if(purple_account_get_bool(account, MW_KEY_FAKE_IT, FALSE)) {
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3700 guint client, major, minor;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3701
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3702 /* if we're faking the login, let's also fake the version we're
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3703 reporting. Let's also allow the actual values to be specified */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3704
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3705 client = purple_account_get_int(account, MW_KEY_CLIENT, mwLogin_BINARY);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3706 major = purple_account_get_int(account, MW_KEY_MAJOR, 0x001e);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3707 minor = purple_account_get_int(account, MW_KEY_MINOR, 0x001d);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3708
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3709 DEBUG_INFO("client id: 0x%04x\n", client);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3710 DEBUG_INFO("client major: 0x%04x\n", major);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3711 DEBUG_INFO("client minor: 0x%04x\n", minor);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3712
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3713 mwSession_setProperty(pd->session, mwSession_CLIENT_TYPE_ID,
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3714 GUINT_TO_POINTER(client), NULL);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3715
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3716 mwSession_setProperty(pd->session, mwSession_CLIENT_VER_MAJOR,
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3717 GUINT_TO_POINTER(major), NULL);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3718
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3719 mwSession_setProperty(pd->session, mwSession_CLIENT_VER_MINOR,
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3720 GUINT_TO_POINTER(minor), NULL);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
3721 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3722
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3723 purple_connection_update_progress(gc, _("Connecting"), 1, MW_CONNECT_STEPS);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3724
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3725 if (purple_proxy_connect(gc, account, host, port, connect_cb, pd) == NULL) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3726 purple_connection_error(gc, _("Unable to connect to host"));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3727 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3728 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3729
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3730
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3731 static void mw_prpl_close(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3732 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3733
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3734 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3735
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3736 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3737 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3738
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3739 /* get rid of the blist save timeout */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3740 if(pd->save_event) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3741 purple_timeout_remove(pd->save_event);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3742 pd->save_event = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3743 blist_store(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3744 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3745
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3746 /* stop the session */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3747 mwSession_stop(pd->session, 0x00);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3748
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3749 /* no longer necessary */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3750 gc->proto_data = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3751
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3752 /* stop watching the socket */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3753 if(gc->inpa) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3754 purple_input_remove(gc->inpa);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3755 gc->inpa = 0;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3756 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3757
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3758 /* clean up the rest */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3759 mwPurplePluginData_free(pd);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3760 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3761
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3762
12735
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3763 static int mw_rand() {
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3764 static int seed = 0;
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3765
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3766 /* for diversity, not security. don't touch */
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3767 srand(time(NULL) ^ seed);
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3768 seed = rand();
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3769
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3770 return seed;
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3771 }
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3772
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3773
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3774 /** generates a random-ish content id string */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3775 static char *im_mime_content_id() {
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3776 return g_strdup_printf("%03x@%05xmeanwhile",
12735
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3777 mw_rand() & 0xfff, mw_rand() & 0xfffff);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3778 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3779
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3780
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3781 /** generates a multipart/related content type with a random-ish
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3782 boundary value */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3783 static char *im_mime_content_type() {
12422
53fba178cadf [gaim-migrate @ 14729]
Richard Laager <rlaager@pidgin.im>
parents: 12312
diff changeset
3784 return g_strdup_printf("multipart/related; boundary=related_MW%03x_%04x",
12735
daa5dfe5e65a [gaim-migrate @ 15080]
Christopher O'Brien <siege@pidgin.im>
parents: 12658
diff changeset
3785 mw_rand() & 0xfff, mw_rand() & 0xffff);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3786 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3787
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3788
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3789 /** determine content type from extension. Not so happy about this,
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3790 but I don't want to actually write image type detection */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3791 static char *im_mime_img_content_type(PurpleStoredImage *img) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3792 const char *fn = purple_imgstore_get_filename(img);
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3793 const char *ct = NULL;
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3794
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3795 ct = strrchr(fn, '.');
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3796 if(! ct) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3797 ct = "image";
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3798
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3799 } else if(! strcmp(".png", ct)) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3800 ct = "image/png";
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3801
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3802 } else if(! strcmp(".jpg", ct)) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3803 ct = "image/jpeg";
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3804
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3805 } else if(! strcmp(".jpeg", ct)) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3806 ct = "image/jpeg";
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3807
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3808 } else if(! strcmp(".gif", ct)) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3809 ct = "image/gif";
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3810
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3811 } else {
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3812 ct = "image";
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3813 }
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3814
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3815 return g_strdup_printf("%s; name=\"%s\"", ct, fn);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3816 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3817
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3818
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3819 static char *im_mime_img_content_disp(PurpleStoredImage *img) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3820 const char *fn = purple_imgstore_get_filename(img);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3821 return g_strdup_printf("attachment; filename=\"%s\"", fn);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3822 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3823
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3824
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3825 /** turn an IM with embedded images into a multi-part mime document */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3826 static char *im_mime_convert(PurpleConnection *gc,
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3827 struct mwConversation *conv,
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3828 const char *message) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3829 GString *str;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3830 PurpleMimeDocument *doc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3831 PurpleMimePart *part;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3832
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3833 GData *attr;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3834 char *tmp, *start, *end;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3835
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3836 str = g_string_new(NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3837
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3838 doc = purple_mime_document_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3839
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3840 purple_mime_document_set_field(doc, "Mime-Version", "1.0");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3841 purple_mime_document_set_field(doc, "Content-Disposition", "inline");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3842
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3843 tmp = im_mime_content_type();
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3844 purple_mime_document_set_field(doc, "Content-Type", tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3845 g_free(tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3846
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3847 tmp = (char *) message;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3848 while(*tmp && purple_markup_find_tag("img", tmp, (const char **) &start,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3849 (const char **) &end, &attr)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3850 char *id;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3851 PurpleStoredImage *img = NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3852
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3853 gsize len = (start - tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3854
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3855 /* append the in-between-tags text */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3856 if(len) g_string_append_len(str, tmp, len);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3857
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3858 /* find the imgstore data by the id tag */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3859 id = g_datalist_get_data(&attr, "id");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3860 if(id && *id)
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16121
diff changeset
3861 img = purple_imgstore_find_by_id(atoi(id));
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3862
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3863 if(img) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3864 char *cid;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3865 gpointer data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3866 size_t size;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3867
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3868 part = purple_mime_part_new(doc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3869
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3870 data = im_mime_img_content_disp(img);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3871 purple_mime_part_set_field(part, "Content-Disposition", data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3872 g_free(data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3873
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3874 data = im_mime_img_content_type(img);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3875 purple_mime_part_set_field(part, "Content-Type", data);
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3876 g_free(data);
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3877
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3878 cid = im_mime_content_id();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3879 data = g_strdup_printf("<%s>", cid);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3880 purple_mime_part_set_field(part, "Content-ID", data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3881 g_free(data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3882
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3883 purple_mime_part_set_field(part, "Content-transfer-encoding", "base64");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3884
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3885 /* obtain and base64 encode the image data, and put it in the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3886 mime part */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3887 size = purple_imgstore_get_size(img);
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16121
diff changeset
3888 data = purple_base64_encode(purple_imgstore_get_data(img), (gsize) size);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3889 purple_mime_part_set_data(part, data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3890 g_free(data);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3891
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3892 /* append the modified tag */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3893 g_string_append_printf(str, "<img src=\"cid:%s\">", cid);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3894 g_free(cid);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3895
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3896 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3897 /* append the literal image tag, since we couldn't find a
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3898 relative imgstore object */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3899 gsize len = (end - start) + 1;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3900 g_string_append_len(str, start, len);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3901 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3902
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3903 g_datalist_clear(&attr);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3904 tmp = end + 1;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3905 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3906
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3907 /* append left-overs */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3908 g_string_append(str, tmp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3909
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3910 /* add the text/html part */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3911 part = purple_mime_part_new(doc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3912 purple_mime_part_set_field(part, "Content-Disposition", "inline");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3913
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3914 tmp = purple_utf8_ncr_encode(str->str);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3915 purple_mime_part_set_field(part, "Content-Type", "text/html");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3916 purple_mime_part_set_field(part, "Content-Transfer-Encoding", "7bit");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3917 purple_mime_part_set_data(part, tmp);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
3918 g_free(tmp);
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
3919
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3920 g_string_free(str, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3921
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3922 str = g_string_new(NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3923 purple_mime_document_write(doc, str);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3924 tmp = str->str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3925 g_string_free(str, FALSE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3926
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3927 return tmp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3928 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3929
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3930
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3931 static int mw_prpl_send_im(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3932 const char *name,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3933 const char *message,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3934 PurpleMessageFlags flags) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3935
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3936 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3937 struct mwIdBlock who = { (char *) name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3938 struct mwConversation *conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3939
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3940 g_return_val_if_fail(gc != NULL, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3941 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3942
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3943 g_return_val_if_fail(pd != NULL, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3944
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3945 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3946
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3947 /* this detection of features to determine how to send the message
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3948 (plain, html, or mime) is flawed because the other end of the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3949 conversation could close their channel at any time, rendering any
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3950 existing formatting in an outgoing message innapropriate. The end
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3951 result is that it may be possible that the other side of the
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3952 conversation will receive a plaintext message with html contents,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3953 which is bad. I'm not sure how to fix this correctly. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3954
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3955 if(strstr(message, "<img ") || strstr(message, "<IMG "))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3956 flags |= PURPLE_MESSAGE_IMAGES;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3957
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3958 if(mwConversation_isOpen(conv)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3959 char *tmp;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3960 int ret;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3961
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3962 if((flags & PURPLE_MESSAGE_IMAGES) &&
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3963 mwConversation_supports(conv, mwImSend_MIME)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3964 /* send a MIME message */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3965
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
3966 tmp = im_mime_convert(gc, conv, message);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3967 ret = mwConversation_send(conv, mwImSend_MIME, tmp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3968 g_free(tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3969
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3970 } else if(mwConversation_supports(conv, mwImSend_HTML)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3971 /* send an HTML message */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3972
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
3973 char *ncr;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3974 ncr = purple_utf8_ncr_encode(message);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3975 tmp = purple_strdup_withhtml(ncr);
12813
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
3976 g_free(ncr);
6f67cfa0e6a0 [gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents: 12742
diff changeset
3977
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3978 ret = mwConversation_send(conv, mwImSend_HTML, tmp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3979 g_free(tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3980
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3981 } else {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3982 /* default to text */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3983 tmp = purple_markup_strip_html(message);
12216
d80739091a63 [gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 12166
diff changeset
3984 ret = mwConversation_send(conv, mwImSend_PLAIN, tmp);
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
3985 g_free(tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3986 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3987
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3988 return !ret;
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3989
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3990 } else {
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3991
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3992 /* queue up the message safely as plain text */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
3993 char *tmp = purple_markup_strip_html(message);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3994 convo_queue(conv, mwImSend_PLAIN, tmp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3995 g_free(tmp);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
3996
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3997 if(! mwConversation_isPending(conv))
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3998 mwConversation_open(conv);
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
3999
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4000 return 1;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4001 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4002 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4003
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4004
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4005 static unsigned int mw_prpl_send_typing(PurpleConnection *gc,
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4006 const char *name,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4007 PurpleTypingState state) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4008
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4009 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4010 struct mwIdBlock who = { (char *) name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4011 struct mwConversation *conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4012
13844
835b8f7b3d1d [gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents: 13779
diff changeset
4013 gpointer t = GINT_TO_POINTER(!! state);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4014
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4015 g_return_val_if_fail(gc != NULL, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4016 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4017
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4018 g_return_val_if_fail(pd != NULL, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4019
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4020 conv = mwServiceIm_getConversation(pd->srvc_im, &who);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4021
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4022 if(mwConversation_isOpen(conv)) {
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4023 mwConversation_send(conv, mwImSend_TYPING, t);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4024
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4025 } else if((state == PURPLE_TYPING) || (state == PURPLE_TYPED)) {
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4026 /* only open a channel for sending typing notification, not for
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4027 when typing has stopped. There's no point in re-opening a
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4028 channel just to tell someone that this side isn't typing. */
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4029
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4030 convo_queue(conv, mwImSend_TYPING, t);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4031
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4032 if(! mwConversation_isPending(conv)) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4033 mwConversation_open(conv);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4034 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4035 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4036
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4037 return 0;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4038 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4039
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4040
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4041 static const char *mw_client_name(guint16 type) {
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4042 switch(type) {
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4043 case mwLogin_LIB:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4044 return "Lotus Binary Library";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4045
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4046 case mwLogin_JAVA_WEB:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4047 return "Lotus Java Client Applet";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4048
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4049 case mwLogin_BINARY:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4050 return "Lotus Sametime Connect";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4051
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4052 case mwLogin_JAVA_APP:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4053 return "Lotus Java Client Application";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4054
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4055 case mwLogin_LINKS:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4056 return "Lotus Sametime Links";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4057
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4058 case mwLogin_NOTES_6_5:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4059 case mwLogin_NOTES_6_5_3:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4060 case mwLogin_NOTES_7_0_beta:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4061 case mwLogin_NOTES_7_0:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4062 return "Lotus Notes Client";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4063
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4064 case mwLogin_ICT:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4065 case mwLogin_ICT_1_7_8_2:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4066 case mwLogin_ICT_SIP:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4067 return "IBM Community Tools";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4068
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4069 case mwLogin_NOTESBUDDY_4_14:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4070 case mwLogin_NOTESBUDDY_4_15:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4071 case mwLogin_NOTESBUDDY_4_16:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4072 return "Alphaworks NotesBuddy";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4073
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4074 case 0x1305:
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4075 case 0x1306:
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4076 case 0x1307:
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4077 return "Lotus Sametime Connect 7.5";
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4078
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4079 case mwLogin_SANITY:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4080 return "Sanity";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4081
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4082 case mwLogin_ST_PERL:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4083 return "ST-Send-Message";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4084
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4085 case mwLogin_TRILLIAN:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4086 case mwLogin_TRILLIAN_IBM:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4087 return "Trillian";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4088
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4089 case mwLogin_MEANWHILE:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4090 return "Meanwhile";
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4091
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4092 default:
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4093 return NULL;
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4094 }
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4095 }
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4096
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
4097
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4098 static void mw_prpl_get_info(PurpleConnection *gc, const char *who) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4099
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4100 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4101
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4102 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4103 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4104 PurpleBuddy *b;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4105 PurpleNotifyUserInfo *user_info;
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4106 char *tmp;
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4107 const char *tmp2;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4108
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4109 g_return_if_fail(who != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4110 g_return_if_fail(*who != '\0');
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4111
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4112 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4113
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4114 acct = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4115 b = purple_find_buddy(acct, who);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4116 user_info = purple_notify_user_info_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4117
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4118 if(purple_str_has_prefix(who, "@E ")) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4119 purple_notify_user_info_add_pair(user_info, _("External User"), NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4120 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4121
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4122 purple_notify_user_info_add_pair(user_info, _("User ID"), who);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4123
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4124 if(b) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4125 guint32 type;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4126
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4127 if(b->server_alias) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4128 purple_notify_user_info_add_pair(user_info, _("Full Name"), b->server_alias);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4129 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4130
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4131 type = purple_blist_node_get_int((PurpleBlistNode *) b, BUDDY_KEY_CLIENT);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4132 if(type) {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4133 tmp = g_strdup(mw_client_name(type));
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4134 if (!tmp)
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4135 tmp = g_strdup_printf(_("Unknown (0x%04x)<br>"), type);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4136
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4137 purple_notify_user_info_add_pair(user_info, _("Last Known Client"), tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4138
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4139 g_free(tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4140 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4141 }
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4142
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4143 tmp = user_supports_text(pd->srvc_aware, who);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4144 if(tmp) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4145 purple_notify_user_info_add_pair(user_info, _("Supports"), tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4146 g_free(tmp);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4147 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4148
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4149 if(b) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4150 purple_notify_user_info_add_pair(user_info, _("Status"), status_text(b));
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4151
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4152 /* XXX Is this adding a status message in its own section rather than with the "Status" label? */
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4153 tmp2 = mwServiceAware_getText(pd->srvc_aware, &idb);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4154 if(tmp2) {
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4155 tmp = g_markup_escape_text(tmp2, -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4156 purple_notify_user_info_add_section_break(user_info);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4157 purple_notify_user_info_add_pair(user_info, NULL, tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14976
diff changeset
4158 g_free(tmp);
12496
788b20ccec91 [gaim-migrate @ 14808]
Christopher O'Brien <siege@pidgin.im>
parents: 12489
diff changeset
4159 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4160 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4161
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4162 /* @todo emit a signal to allow a plugin to override the display of
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4163 this notification, so that it can create its own */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4164
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4165 purple_notify_userinfo(gc, who, user_info, NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4166 purple_notify_user_info_destroy(user_info);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4167 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4168
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4169
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4170 static void mw_prpl_set_status(PurpleAccount *acct, PurpleStatus *status) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4171 PurpleConnection *gc;
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4172 const char *state;
11641
554274717c25 [gaim-migrate @ 13918]
Richard Laager <rlaager@pidgin.im>
parents: 11638
diff changeset
4173 char *message = NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4174 struct mwSession *session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4175 struct mwUserStatus stat;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4176
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4177 g_return_if_fail(acct != NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4178 gc = purple_account_get_connection(acct);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4179
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4180 state = purple_status_get_id(status);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4181
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4182 DEBUG_INFO("Set status to %s\n", purple_status_get_name(status));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4183
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4184 g_return_if_fail(gc != NULL);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4185
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4186 session = gc_to_session(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4187 g_return_if_fail(session != NULL);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4188
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4189 /* get a working copy of the current status */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4190 mwUserStatus_clone(&stat, mwSession_getUserStatus(session));
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4191
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4192 /* determine the state */
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4193 if(! strcmp(state, MW_STATE_ACTIVE)) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4194 stat.status = mwStatus_ACTIVE;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4195
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4196 } else if(! strcmp(state, MW_STATE_AWAY)) {
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4197 stat.status = mwStatus_AWAY;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4198
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4199 } else if(! strcmp(state, MW_STATE_BUSY)) {
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4200 stat.status = mwStatus_BUSY;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4201 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4202
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4203 /* determine the message */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4204 message = (char *) purple_status_get_attr_string(status, MW_STATE_MESSAGE);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4205
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4206 if(message) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4207 /* all the possible non-NULL values of message up to this point
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4208 are const, so we don't need to free them */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4209 message = purple_markup_strip_html(message);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4210 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4211
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4212 /* out with the old */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4213 g_free(stat.desc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4214
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4215 /* in with the new */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4216 stat.desc = (char *) message;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4217
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4218 mwSession_setUserStatus(session, &stat);
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
4219 mwUserStatus_clear(&stat);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4220 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4221
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4222
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4223 static void mw_prpl_set_idle(PurpleConnection *gc, int t) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4224 struct mwSession *session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4225 struct mwUserStatus stat;
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4226
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4227
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4228 session = gc_to_session(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4229 g_return_if_fail(session != NULL);
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4230
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4231 mwUserStatus_clone(&stat, mwSession_getUserStatus(session));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4232
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4233 if(t) {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4234 time_t now = time(NULL);
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4235 stat.time = now - t;
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4236
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4237 } else {
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4238 stat.time = 0;
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4239 }
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4240
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4241 if(t > 0 && stat.status == mwStatus_ACTIVE) {
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4242 /* we were active and went idle, so change the status to IDLE. */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4243 stat.status = mwStatus_IDLE;
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4244
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4245 } else if(t == 0 && stat.status == mwStatus_IDLE) {
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4246 /* we only become idle automatically, so change back to ACTIVE */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4247 stat.status = mwStatus_ACTIVE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4248 }
12105
5ab1009c4164 [gaim-migrate @ 14402]
Christopher O'Brien <siege@pidgin.im>
parents: 12088
diff changeset
4249
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4250 mwSession_setUserStatus(session, &stat);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4251 mwUserStatus_clear(&stat);
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4252 }
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4253
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4254
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4255 static void notify_im(PurpleConnection *gc, GList *row, void *user_data) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4256 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4257 PurpleConversation *conv;
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4258 char *id;
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4259
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4260 acct = purple_connection_get_account(gc);
12631
b0e5f1ab374e [gaim-migrate @ 14967]
Christopher O'Brien <siege@pidgin.im>
parents: 12630
diff changeset
4261 id = g_list_nth_data(row, 1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4262 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, id, acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4263 if(! conv) conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, acct, id);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4264 purple_conversation_present(conv);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4265 }
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4266
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4267
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4268 static void notify_add(PurpleConnection *gc, GList *row, void *user_data) {
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4269 BuddyAddData *data = user_data;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4270 char *group_name = NULL;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4271
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4272 if (data && data->group) {
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4273 group_name = data->group->name;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4274 }
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4275
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4276 purple_blist_request_add_buddy(purple_connection_get_account(gc),
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4277 g_list_nth_data(row, 1), group_name,
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4278 g_list_nth_data(row, 0));
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4279 }
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4280
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4281
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4282 static void notify_close(gpointer data) {
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4283 if (data) {
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4284 g_free(data);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4285 }
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4286 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4287
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4288
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4289 static void multi_resolved_query(struct mwResolveResult *result,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4290 PurpleConnection *gc, gpointer data) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4291 GList *l;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4292 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4293 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4294 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4295
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4296 PurpleNotifySearchResults *sres;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4297 PurpleNotifySearchColumn *scol;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4298
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4299 sres = purple_notify_searchresults_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4300
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4301 scol = purple_notify_searchresults_column_new(_("User Name"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4302 purple_notify_searchresults_column_add(sres, scol);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4303
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4304 scol = purple_notify_searchresults_column_new(_("Sametime ID"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4305 purple_notify_searchresults_column_add(sres, scol);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4306
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4307 purple_notify_searchresults_button_add(sres, PURPLE_NOTIFY_BUTTON_IM,
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4308 notify_im);
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4309
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4310 purple_notify_searchresults_button_add(sres, PURPLE_NOTIFY_BUTTON_ADD,
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4311 notify_add);
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4312
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4313 for(l = result->matches; l; l = l->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4314 struct mwResolveMatch *match = l->data;
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4315 GList *row = NULL;
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
4316
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
4317 DEBUG_INFO("multi resolve: %s, %s\n",
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
4318 NSTR(match->id), NSTR(match->name));
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
4319
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4320 if(!match->id || !match->name)
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4321 continue;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4322
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4323 row = g_list_append(row, g_strdup(match->name));
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4324 row = g_list_append(row, g_strdup(match->id));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4325 purple_notify_searchresults_row_add(sres, row);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4326 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4327
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4328 msgA = _("An ambiguous user ID was entered");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4329 msgB = _("The identifier '%s' may possibly refer to any of the following"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4330 " users. Please select the correct user from the list below to"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4331 " add them to your buddy list.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4332 msg = g_strdup_printf(msgB, result->name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4333
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4334 purple_notify_searchresults(gc, _("Select User"),
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4335 msgA, msg, sres, notify_close, data);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4336
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4337 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4338 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4339
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4340
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4341 static void add_buddy_resolved(struct mwServiceResolve *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4342 guint32 id, guint32 code, GList *results,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4343 gpointer b) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4344
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4345 struct mwResolveResult *res = NULL;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4346 BuddyAddData *data = b;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4347 PurpleBuddy *buddy = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4348 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4349 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4350
16121
e5ad074a5f05 Avoid a possible NULL pointer dereference
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
4351 g_return_if_fail(data != NULL);
e5ad074a5f05 Avoid a possible NULL pointer dereference
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
4352
e5ad074a5f05 Avoid a possible NULL pointer dereference
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
4353 buddy = data->buddy;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4354
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4355 gc = purple_account_get_connection(buddy->account);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4356 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4357
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4358 if(results)
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4359 res = results->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4360
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4361 if(!code && res && res->matches) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4362 if(g_list_length(res->matches) == 1) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4363 struct mwResolveMatch *match = res->matches->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4364
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4365 /* only one? that might be the right one! */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4366 if(strcmp(res->name, match->id)) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4367 /* uh oh, the single result isn't identical to the search
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4368 term, better safe then sorry, so let's make sure it's who
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4369 the user meant to add */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4370 purple_blist_remove_buddy(buddy);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4371 multi_resolved_query(res, gc, data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4372
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4373 } else {
12829
c7c8fa0b90db [gaim-migrate @ 15177]
Christopher O'Brien <siege@pidgin.im>
parents: 12821
diff changeset
4374
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4375 /* same person, set the server alias */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4376 purple_blist_server_alias_buddy(buddy, match->name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4377 purple_blist_node_set_string((PurpleBlistNode *) buddy,
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4378 BUDDY_KEY_NAME, match->name);
12829
c7c8fa0b90db [gaim-migrate @ 15177]
Christopher O'Brien <siege@pidgin.im>
parents: 12821
diff changeset
4379
c7c8fa0b90db [gaim-migrate @ 15177]
Christopher O'Brien <siege@pidgin.im>
parents: 12821
diff changeset
4380 /* subscribe to awareness */
c7c8fa0b90db [gaim-migrate @ 15177]
Christopher O'Brien <siege@pidgin.im>
parents: 12821
diff changeset
4381 buddy_add(pd, buddy);
c7c8fa0b90db [gaim-migrate @ 15177]
Christopher O'Brien <siege@pidgin.im>
parents: 12821
diff changeset
4382
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
4383 blist_schedule(pd);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4384
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4385 g_free(data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4386 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4387
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4388 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4389 /* prompt user if more than one match was returned */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4390 purple_blist_remove_buddy(buddy);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4391 multi_resolved_query(res, gc, data);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4392 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4393
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4394 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4395 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4396
14976
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4397 #if 0
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4398 /* fall-through indicates that we couldn't find a matching user in
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4399 the resolve service (ether error or zero results), so we remove
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4400 this buddy */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4401
14976
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4402 /* note: I can't really think of a good reason to alter the buddy
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4403 list in any way. There has been at least one report where the
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4404 resolve service isn't returning correct results anyway, so let's
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4405 just leave them in the list. I'm just going to if0 this section
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4406 out unless I can think of a very good reason to do this. -siege */
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4407
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4408 DEBUG_INFO("no such buddy in community\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4409 purple_blist_remove_buddy(buddy);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4410 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4411
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4412 if(res && res->name) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4413 /* compose and display an error message */
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4414 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4415 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4416 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4417
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4418 msgA = _("Unable to add user: user not found");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4419
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4420 msgB = _("The identifier '%s' did not match any users in your"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4421 " Sametime community. This entry has been removed from"
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4422 " your buddy list.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4423 msg = g_strdup_printf(msgB, NSTR(res->name));
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4424
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4425 purple_notify_error(gc, _("Unable to add user"), msgA, msg);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4426
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
4427 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4428 }
14976
3f4e883a2766 [gaim-migrate @ 17686]
Christopher O'Brien <siege@pidgin.im>
parents: 14975
diff changeset
4429 #endif
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4430 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4431
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4432
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4433 static void mw_prpl_add_buddy(PurpleConnection *gc,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4434 PurpleBuddy *buddy,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4435 PurpleGroup *group) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4436
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4437 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4438 struct mwServiceResolve *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4439 GList *query;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4440 enum mwResolveFlag flags;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4441 guint32 req;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4442
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4443 BuddyAddData *data;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4444
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4445 data = g_new0(BuddyAddData, 1);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4446 data->buddy = buddy;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4447 data->group = group;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4448
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4449 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4450 srvc = pd->srvc_resolve;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4451
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4452 /* catch external buddies. They won't be in the resolve service */
12524
e9bf565601ad [gaim-migrate @ 14836]
Christopher O'Brien <siege@pidgin.im>
parents: 12496
diff changeset
4453 if(buddy_is_external(buddy)) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4454 buddy_add(pd, buddy);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4455 return;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4456 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4457
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4458 query = g_list_prepend(NULL, buddy->name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4459 flags = mwResolveFlag_FIRST | mwResolveFlag_USERS;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4460
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4461 req = mwServiceResolve_resolve(srvc, query, flags, add_buddy_resolved,
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4462 data, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4463 g_list_free(query);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4464
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4465 if(req == SEARCH_ERROR) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4466 purple_blist_remove_buddy(buddy);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4467 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4468 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4469 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4470
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4471
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4472 static void foreach_add_buddies(PurpleGroup *group, GList *buddies,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4473 struct mwPurplePluginData *pd) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4474 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4475
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4476 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4477 mwAwareList_addAware(list, buddies);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4478 g_list_free(buddies);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4479 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4480
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4481
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4482 static void mw_prpl_add_buddies(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4483 GList *buddies,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4484 GList *groups) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4485
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4486 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4487 GHashTable *group_sets;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4488 struct mwAwareIdBlock *idbs, *idb;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4489
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4490 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4491
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4492 /* map PurpleGroup:GList of mwAwareIdBlock */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4493 group_sets = g_hash_table_new(g_direct_hash, g_direct_equal);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4494
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4495 /* bunch of mwAwareIdBlock allocated at once, free'd at once */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4496 idb = idbs = g_new(struct mwAwareIdBlock, g_list_length(buddies));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4497
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4498 /* first pass collects mwAwareIdBlock lists for each group */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4499 for(; buddies; buddies = buddies->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4500 PurpleBuddy *b = buddies->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4501 PurpleGroup *g;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4502 const char *fn;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4503 GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4504
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4505 /* nab the saved server alias and stick it on the buddy */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4506 fn = purple_blist_node_get_string((PurpleBlistNode *) b, BUDDY_KEY_NAME);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4507 purple_blist_server_alias_buddy(b, fn);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4508
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4509 /* convert PurpleBuddy into a mwAwareIdBlock */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4510 idb->type = mwAware_USER;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4511 idb->user = (char *) b->name;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4512 idb->community = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4513
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4514 /* put idb into the list associated with the buddy's group */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4515 g = purple_buddy_get_group(b);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4516 l = g_hash_table_lookup(group_sets, g);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4517 l = g_list_prepend(l, idb++);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4518 g_hash_table_insert(group_sets, g, l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4519 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4520
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4521 /* each group's buddies get added in one shot, and schedule the blist
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4522 for saving */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4523 g_hash_table_foreach(group_sets, (GHFunc) foreach_add_buddies, pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4524 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4525
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4526 /* cleanup */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4527 g_hash_table_destroy(group_sets);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4528 g_free(idbs);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4529 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4530
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4531
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4532 static void mw_prpl_remove_buddy(PurpleConnection *gc,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4533 PurpleBuddy *buddy, PurpleGroup *group) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4534
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4535 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4536 struct mwAwareIdBlock idb = { mwAware_USER, buddy->name, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4537 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4538
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4539 GList *rem = g_list_prepend(NULL, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4540
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4541 pd = gc->proto_data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4542 group = purple_buddy_get_group(buddy);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4543 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4544
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4545 mwAwareList_removeAware(list, rem);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4546 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4547
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4548 g_list_free(rem);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4549 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4550
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4551
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4552 static void privacy_fill(struct mwPrivacyInfo *priv,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4553 GSList *members) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4554
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4555 struct mwUserItem *u;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4556 guint count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4557
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4558 count = g_slist_length(members);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4559 DEBUG_INFO("privacy_fill: %u members\n", count);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4560
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4561 priv->count = count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4562 priv->users = g_new0(struct mwUserItem, count);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4563
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4564 while(count--) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4565 u = priv->users + count;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4566 u->id = members->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4567 members = members->next;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4568 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4569 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4570
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4571
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4572 static void mw_prpl_set_permit_deny(PurpleConnection *gc) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4573 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4574 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4575 struct mwSession *session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4576
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4577 struct mwPrivacyInfo privacy = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
4578 FALSE, /* deny */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
4579 0, /* count */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
4580 NULL, /* users */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4581 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4582
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4583 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4584
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4585 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4586 g_return_if_fail(acct != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4587
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4588 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4589 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4590
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4591 session = pd->session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4592 g_return_if_fail(session != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4593
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4594 switch(acct->perm_deny) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4595 case PURPLE_PRIVACY_DENY_USERS:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4596 DEBUG_INFO("PURPLE_PRIVACY_DENY_USERS\n");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4597 privacy_fill(&privacy, acct->deny);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4598 privacy.deny = TRUE;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4599 break;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4600
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4601 case PURPLE_PRIVACY_ALLOW_ALL:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4602 DEBUG_INFO("PURPLE_PRIVACY_ALLOW_ALL\n");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4603 privacy.deny = TRUE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4604 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4605
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4606 case PURPLE_PRIVACY_ALLOW_USERS:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4607 DEBUG_INFO("PURPLE_PRIVACY_ALLOW_USERS\n");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4608 privacy_fill(&privacy, acct->permit);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4609 privacy.deny = FALSE;
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4610 break;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4611
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4612 case PURPLE_PRIVACY_DENY_ALL:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4613 DEBUG_INFO("PURPLE_PRIVACY_DENY_ALL\n");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4614 privacy.deny = FALSE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4615 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4616
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4617 default:
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4618 DEBUG_INFO("acct->perm_deny is 0x%x\n", acct->perm_deny);
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
4619 return;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4620 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4621
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4622 mwSession_setPrivacyInfo(session, &privacy);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4623 g_free(privacy.users);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4624 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4625
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4626
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4627 static void mw_prpl_add_permit(PurpleConnection *gc, const char *name) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4628 mw_prpl_set_permit_deny(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4629 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4630
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4631
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4632 static void mw_prpl_add_deny(PurpleConnection *gc, const char *name) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4633 mw_prpl_set_permit_deny(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4634 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4635
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4636
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4637 static void mw_prpl_rem_permit(PurpleConnection *gc, const char *name) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4638 mw_prpl_set_permit_deny(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4639 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4640
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4641
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4642 static void mw_prpl_rem_deny(PurpleConnection *gc, const char *name) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4643 mw_prpl_set_permit_deny(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4644 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4645
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4646
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4647 static struct mwConference *conf_find(struct mwServiceConference *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4648 const char *name) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4649 GList *l, *ll;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4650 struct mwConference *conf = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4651
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4652 ll = mwServiceConference_getConferences(srvc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4653 for(l = ll; l; l = l->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4654 struct mwConference *c = l->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4655 if(! strcmp(name, mwConference_getName(c))) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4656 conf = c;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4657 break;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4658 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4659 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4660 g_list_free(ll);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4661
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4662 return conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4663 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4664
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4665
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4666 static void mw_prpl_join_chat(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4667 GHashTable *components) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4668
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4669 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4670 char *c, *t;
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4671
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4672 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4673
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4674 c = g_hash_table_lookup(components, CHAT_KEY_NAME);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4675 t = g_hash_table_lookup(components, CHAT_KEY_TOPIC);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4676
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4677 if(g_hash_table_lookup(components, CHAT_KEY_IS_PLACE)) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4678 /* use place service */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4679 struct mwServicePlace *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4680 struct mwPlace *place = NULL;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4681
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4682 srvc = pd->srvc_place;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4683 place = mwPlace_new(srvc, c, t);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4684 mwPlace_open(place);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4685
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4686 } else {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4687 /* use conference service */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4688 struct mwServiceConference *srvc;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4689 struct mwConference *conf = NULL;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4690
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4691 srvc = pd->srvc_conf;
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4692 if(c) conf = conf_find(srvc, c);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4693
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4694 if(conf) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4695 DEBUG_INFO("accepting conference invitation\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4696 mwConference_accept(conf);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4697
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4698 } else {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4699 DEBUG_INFO("creating new conference\n");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4700 conf = mwConference_new(srvc, t);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4701 mwConference_open(conf);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4702 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4703 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4704 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4705
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4706
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4707 static void mw_prpl_reject_chat(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4708 GHashTable *components) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4709
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4710 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4711 struct mwServiceConference *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4712 char *c;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4713
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4714 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4715 srvc = pd->srvc_conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4716
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4717 if(g_hash_table_lookup(components, CHAT_KEY_IS_PLACE)) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4718 ; /* nothing needs doing */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4719
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4720 } else {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4721 /* reject conference */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4722 c = g_hash_table_lookup(components, CHAT_KEY_NAME);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4723 if(c) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4724 struct mwConference *conf = conf_find(srvc, c);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4725 if(conf) mwConference_reject(conf, ERR_SUCCESS, "Declined");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4726 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4727 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4728 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4729
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4730
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4731 static char *mw_prpl_get_chat_name(GHashTable *components) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4732 return g_hash_table_lookup(components, CHAT_KEY_NAME);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4733 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4734
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4735
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4736 static void mw_prpl_chat_invite(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4737 int id,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4738 const char *invitation,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4739 const char *who) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4740
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4741 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4742 struct mwConference *conf;
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4743 struct mwPlace *place;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4744 struct mwIdBlock idb = { (char *) who, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4745
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4746 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4747 g_return_if_fail(pd != NULL);
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4748
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4749 conf = ID_TO_CONF(pd, id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4750
12107
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4751 if(conf) {
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4752 mwConference_invite(conf, &idb, invitation);
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4753 return;
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4754 }
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4755
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4756 place = ID_TO_PLACE(pd, id);
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4757 g_return_if_fail(place != NULL);
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4758
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4759 /* @todo: use the IM service for invitation */
f14b83c0df1e [gaim-migrate @ 14405]
Christopher O'Brien <siege@pidgin.im>
parents: 12105
diff changeset
4760 mwPlace_legacyInvite(place, &idb, invitation);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4761 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4762
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4763
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4764 static void mw_prpl_chat_leave(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4765 int id) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4766
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4767 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4768 struct mwConference *conf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4769
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4770 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4771
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4772 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4773 conf = ID_TO_CONF(pd, id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4774
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4775 if(conf) {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4776 mwConference_destroy(conf, ERR_SUCCESS, "Leaving");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4777
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4778 } else {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4779 struct mwPlace *place = ID_TO_PLACE(pd, id);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4780 g_return_if_fail(place != NULL);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4781
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4782 mwPlace_destroy(place, ERR_SUCCESS);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4783 }
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4784 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4785
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4786
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4787 static void mw_prpl_chat_whisper(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4788 int id,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4789 const char *who,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4790 const char *message) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4791
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4792 mw_prpl_send_im(gc, who, message, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4793 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4794
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4795
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4796 static int mw_prpl_chat_send(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4797 int id,
12216
d80739091a63 [gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 12166
diff changeset
4798 const char *message,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4799 PurpleMessageFlags flags) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4800
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4801 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4802 struct mwConference *conf;
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4803 char *msg;
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4804 int ret;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4805
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4806 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4807
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4808 g_return_val_if_fail(pd != NULL, 0);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4809 conf = ID_TO_CONF(pd, id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4810
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4811 msg = purple_markup_strip_html(message);
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4812
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4813 if(conf) {
15772
8e23d860430a sf patch #1655707, from David Everly
Mark Doliner <markdoliner@pidgin.im>
parents: 15524
diff changeset
4814 ret = ! mwConference_sendText(conf, msg);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4815
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4816 } else {
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4817 struct mwPlace *place = ID_TO_PLACE(pd, id);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4818 g_return_val_if_fail(place != NULL, 0);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4819
15772
8e23d860430a sf patch #1655707, from David Everly
Mark Doliner <markdoliner@pidgin.im>
parents: 15524
diff changeset
4820 ret = ! mwPlace_sendText(place, msg);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
4821 }
14975
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4822
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4823 g_free(msg);
b177e7cbc8d8 [gaim-migrate @ 17685]
Christopher O'Brien <siege@pidgin.im>
parents: 14899
diff changeset
4824 return ret;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4825 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4826
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4827
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4828 static void mw_prpl_keepalive(PurpleConnection *gc) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4829 struct mwSession *session;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4830
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4831 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4832
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4833 session = gc_to_session(gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4834 g_return_if_fail(session != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4835
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4836 mwSession_sendKeepalive(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4837 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4838
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4839
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4840 static void mw_prpl_alias_buddy(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4841 const char *who,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4842 const char *alias) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4843
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4844 struct mwPurplePluginData *pd = gc->proto_data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4845 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4846
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4847 /* it's a change to the buddy list, so we've gotta reflect that in
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4848 the server copy */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4849
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4850 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4851 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4852
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4853
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4854 static void mw_prpl_group_buddy(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4855 const char *who,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4856 const char *old_group,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4857 const char *new_group) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4858
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4859 struct mwAwareIdBlock idb = { mwAware_USER, (char *) who, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4860 GList *gl = g_list_prepend(NULL, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4861
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4862 struct mwPurplePluginData *pd = gc->proto_data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4863 PurpleGroup *group;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4864 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4865
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4866 /* add who to new_group's aware list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4867 group = purple_find_group(new_group);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4868 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4869 mwAwareList_addAware(list, gl);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4870
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4871 /* remove who from old_group's aware list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4872 group = purple_find_group(old_group);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4873 list = list_ensure(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4874 mwAwareList_removeAware(list, gl);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4875
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4876 g_list_free(gl);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4877
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4878 /* schedule the changes to be saved */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4879 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4880 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4881
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4882
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4883 static void mw_prpl_rename_group(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4884 const char *old,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4885 PurpleGroup *group,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4886 GList *buddies) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4887
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4888 struct mwPurplePluginData *pd = gc->proto_data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4889 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4890
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4891 /* it's a change in the buddy list, so we've gotta reflect that in
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4892 the server copy. Also, having this function should prevent all
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4893 those buddies from being removed and re-added. We don't really
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4894 give a crap what the group is named in Purple other than to record
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4895 that as the group name/alias */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4896
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4897 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4898 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4899
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4900
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4901 static void mw_prpl_buddy_free(PurpleBuddy *buddy) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4902 /* I don't think we have any cleanup for buddies yet */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4903 ;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4904 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4905
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4906
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4907 static void mw_prpl_convo_closed(PurpleConnection *gc, const char *who) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4908 struct mwPurplePluginData *pd = gc->proto_data;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4909 struct mwServiceIm *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4910 struct mwConversation *conv;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4911 struct mwIdBlock idb = { (char *) who, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4912
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4913 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4914
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4915 srvc = pd->srvc_im;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4916 g_return_if_fail(srvc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4917
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4918 conv = mwServiceIm_findConversation(srvc, &idb);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4919 if(! conv) return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4920
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4921 if(mwConversation_isOpen(conv))
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4922 mwConversation_free(conv);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4923 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4924
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4925
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4926 static const char *mw_prpl_normalize(const PurpleAccount *account,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4927 const char *id) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4928
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4929 /* code elsewhere assumes that the return value points to different
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4930 memory than the passed value, but it won't free the normalized
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4931 data. wtf? */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4932
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4933 static char buf[BUF_LEN];
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4934 strncpy(buf, id, sizeof(buf));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4935 return buf;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4936 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4937
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4938
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4939 static void mw_prpl_remove_group(PurpleConnection *gc, PurpleGroup *group) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4940 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4941 struct mwAwareList *list;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4942
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4943 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4944 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4945 g_return_if_fail(pd->group_list_map != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4946
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4947 list = g_hash_table_lookup(pd->group_list_map, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4948
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4949 if(list) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4950 g_hash_table_remove(pd->group_list_map, list);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4951 g_hash_table_remove(pd->group_list_map, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4952 mwAwareList_free(list);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4953
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4954 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4955 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4956 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4957
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4958
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4959 static gboolean mw_prpl_can_receive_file(PurpleConnection *gc,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4960 const char *who) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4961 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4962 struct mwServiceAware *srvc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4963 PurpleAccount *acct;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4964
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4965 g_return_val_if_fail(gc != NULL, FALSE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4966
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4967 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4968 g_return_val_if_fail(pd != NULL, FALSE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4969
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4970 srvc = pd->srvc_aware;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4971 g_return_val_if_fail(srvc != NULL, FALSE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4972
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4973 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4974 g_return_val_if_fail(acct != NULL, FALSE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4975
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4976 return purple_find_buddy(acct, who) &&
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4977 user_supports(srvc, who, mwAttribute_FILE_TRANSFER);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4978 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4979
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4980
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4981 static void ft_outgoing_init(PurpleXfer *xfer) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4982 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4983 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4984
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4985 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4986 struct mwServiceFileTransfer *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4987 struct mwFileTransfer *ft;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4988
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4989 const char *filename;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4990 gsize filesize;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4991 FILE *fp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4992
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4993 struct mwIdBlock idb = { NULL, NULL };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4994
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4995 DEBUG_INFO("ft_outgoing_init\n");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4996
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4997 acct = purple_xfer_get_account(xfer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
4998 gc = purple_account_get_connection(acct);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4999 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5000 srvc = pd->srvc_ft;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5001
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5002 filename = purple_xfer_get_local_filename(xfer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5003 filesize = purple_xfer_get_size(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5004 idb.user = xfer->who;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5005
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5006 purple_xfer_update_progress(xfer);
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
5007
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5008 /* test that we can actually send the file */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5009 fp = g_fopen(filename, "rb");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5010 if(! fp) {
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5011 char *msg = g_strdup_printf(_("Error reading file %s: \n%s\n"),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5012 filename, strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5013 purple_xfer_error(purple_xfer_get_type(xfer), acct, xfer->who, msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5014 g_free(msg);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5015 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5016 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5017 fclose(fp);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5018
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5019 {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5020 char *tmp = strrchr(filename, G_DIR_SEPARATOR);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5021 if(tmp++) filename = tmp;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5022 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5023
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5024 ft = mwFileTransfer_new(srvc, &idb, NULL, filename, filesize);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5025
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5026 purple_xfer_ref(xfer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5027 mwFileTransfer_setClientData(ft, xfer, (GDestroyNotify) purple_xfer_unref);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5028 xfer->data = ft;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5029
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5030 mwFileTransfer_offer(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5031 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5032
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5033
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5034 static void ft_outgoing_cancel(PurpleXfer *xfer) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5035 struct mwFileTransfer *ft = xfer->data;
13208
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
5036
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
5037 DEBUG_INFO("ft_outgoing_cancel called\n");
3e9365fcfd0e [gaim-migrate @ 15571]
Christopher O'Brien <siege@pidgin.im>
parents: 13206
diff changeset
5038
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5039 if(ft) mwFileTransfer_cancel(ft);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5040 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5041
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5042
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5043 static PurpleXfer *mw_prpl_new_xfer(PurpleConnection *gc, const char *who) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5044 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5045 PurpleXfer *xfer;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5046
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5047 acct = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5048
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5049 xfer = purple_xfer_new(acct, PURPLE_XFER_SEND, who);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
5050 if (xfer)
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
5051 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5052 purple_xfer_set_init_fnc(xfer, ft_outgoing_init);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5053 purple_xfer_set_cancel_send_fnc(xfer, ft_outgoing_cancel);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
5054 }
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 15205
diff changeset
5055
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5056 return xfer;
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5057 }
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5058
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5059 static void mw_prpl_send_file(PurpleConnection *gc,
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5060 const char *who, const char *file) {
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5061
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5062 PurpleXfer *xfer = mw_prpl_new_xfer(gc, who);
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5063
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5064 if(file) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5065 DEBUG_INFO("file != NULL\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5066 purple_xfer_request_accepted(xfer, file);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5067
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5068 } else {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5069 DEBUG_INFO("file == NULL\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5070 purple_xfer_request(xfer);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5071 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5072 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5073
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5074
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5075 static PurplePluginProtocolInfo mw_prpl_info = {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5076 .options = OPT_PROTO_IM_IMAGE,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5077 .user_splits = NULL, /*< set in mw_plugin_init */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5078 .protocol_options = NULL, /*< set in mw_plugin_init */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5079 .icon_spec = NO_BUDDY_ICONS,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5080 .list_icon = mw_prpl_list_icon,
15524
8f365f9bf660 Emblems in the blist
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
5081 .list_emblem = mw_prpl_list_emblem,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5082 .status_text = mw_prpl_status_text,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5083 .tooltip_text = mw_prpl_tooltip_text,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5084 .status_types = mw_prpl_status_types,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5085 .blist_node_menu = mw_prpl_blist_node_menu,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5086 .chat_info = mw_prpl_chat_info,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5087 .chat_info_defaults = mw_prpl_chat_info_defaults,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5088 .login = mw_prpl_login,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5089 .close = mw_prpl_close,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5090 .send_im = mw_prpl_send_im,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5091 .set_info = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5092 .send_typing = mw_prpl_send_typing,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5093 .get_info = mw_prpl_get_info,
11638
1821b40269a3 [gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11547
diff changeset
5094 .set_status = mw_prpl_set_status,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5095 .set_idle = mw_prpl_set_idle,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5096 .change_passwd = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5097 .add_buddy = mw_prpl_add_buddy,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5098 .add_buddies = mw_prpl_add_buddies,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5099 .remove_buddy = mw_prpl_remove_buddy,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5100 .remove_buddies = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5101 .add_permit = mw_prpl_add_permit,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5102 .add_deny = mw_prpl_add_deny,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5103 .rem_permit = mw_prpl_rem_permit,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5104 .rem_deny = mw_prpl_rem_deny,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5105 .set_permit_deny = mw_prpl_set_permit_deny,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5106 .join_chat = mw_prpl_join_chat,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5107 .reject_chat = mw_prpl_reject_chat,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5108 .get_chat_name = mw_prpl_get_chat_name,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5109 .chat_invite = mw_prpl_chat_invite,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5110 .chat_leave = mw_prpl_chat_leave,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5111 .chat_whisper = mw_prpl_chat_whisper,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5112 .chat_send = mw_prpl_chat_send,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5113 .keepalive = mw_prpl_keepalive,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5114 .register_user = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5115 .get_cb_info = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5116 .get_cb_away = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5117 .alias_buddy = mw_prpl_alias_buddy,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5118 .group_buddy = mw_prpl_group_buddy,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5119 .rename_group = mw_prpl_rename_group,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5120 .buddy_free = mw_prpl_buddy_free,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5121 .convo_closed = mw_prpl_convo_closed,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5122 .normalize = mw_prpl_normalize,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5123 .set_buddy_icon = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5124 .remove_group = mw_prpl_remove_group,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5125 .get_cb_real_name = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5126 .set_chat_topic = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5127 .find_blist_chat = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5128 .roomlist_get_list = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5129 .roomlist_expand_category = NULL,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5130 .can_receive_file = mw_prpl_can_receive_file,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5131 .send_file = mw_prpl_send_file,
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 12135
diff changeset
5132 .new_xfer = mw_prpl_new_xfer,
12650
ca70a14f4994 [gaim-migrate @ 14988]
Mark Doliner <markdoliner@pidgin.im>
parents: 12631
diff changeset
5133 .offline_message = NULL,
ca70a14f4994 [gaim-migrate @ 14988]
Mark Doliner <markdoliner@pidgin.im>
parents: 12631
diff changeset
5134 .whiteboard_prpl_ops = NULL,
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17791
diff changeset
5135 .send_raw = NULL
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5136 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5137
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5138
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5139 static PurplePluginPrefFrame *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5140 mw_plugin_get_plugin_pref_frame(PurplePlugin *plugin) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5141 PurplePluginPrefFrame *frame;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5142 PurplePluginPref *pref;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5143
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5144 frame = purple_plugin_pref_frame_new();
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5145
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5146 pref = purple_plugin_pref_new_with_label(_("Remotely Stored Buddy List"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5147 purple_plugin_pref_frame_add(frame, pref);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5148
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5149
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5150 pref = purple_plugin_pref_new_with_name(MW_PRPL_OPT_BLIST_ACTION);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5151 purple_plugin_pref_set_label(pref, _("Buddy List Storage Mode"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5152
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5153 purple_plugin_pref_set_type(pref, PURPLE_PLUGIN_PREF_CHOICE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5154 purple_plugin_pref_add_choice(pref, _("Local Buddy List Only"),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5155 GINT_TO_POINTER(blist_choice_LOCAL));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5156 purple_plugin_pref_add_choice(pref, _("Merge List from Server"),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5157 GINT_TO_POINTER(blist_choice_MERGE));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5158 purple_plugin_pref_add_choice(pref, _("Merge and Save List to Server"),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5159 GINT_TO_POINTER(blist_choice_STORE));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5160 purple_plugin_pref_add_choice(pref, _("Synchronize List with Server"),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5161 GINT_TO_POINTER(blist_choice_SYNCH));
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5162
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5163 purple_plugin_pref_frame_add(frame, pref);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5164
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5165 return frame;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5166 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5167
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5168
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5169 static PurplePluginUiInfo mw_plugin_ui_info = {
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5170 mw_plugin_get_plugin_pref_frame,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5171 0, /* page_num */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5172 NULL, /* frame */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5173 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5174 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5175 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5176 NULL
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5177 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5178
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5179
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5180 static void st_import_action_cb(PurpleConnection *gc, char *filename) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5181 struct mwSametimeList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5182
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5183 FILE *file;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5184 char buf[BUF_LEN];
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5185 size_t len;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5186
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5187 GString *str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5188
13158
3b4295931fd6 [gaim-migrate @ 15520]
Richard Laager <rlaager@pidgin.im>
parents: 13107
diff changeset
5189 file = g_fopen(filename, "r");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5190 g_return_if_fail(file != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5191
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5192 str = g_string_new(NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5193 while( (len = fread(buf, 1, BUF_LEN, file)) ) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5194 g_string_append_len(str, buf, len);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5195 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5196
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5197 fclose(file);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5198
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5199 l = mwSametimeList_load(str->str);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5200 g_string_free(str, TRUE);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5201
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5202 blist_merge(gc, l);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5203 mwSametimeList_free(l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5204 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5205
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5206
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5207 /** prompts for a file to import blist from */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5208 static void st_import_action(PurplePluginAction *act) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5209 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5210 PurpleAccount *account;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5211 char *title;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5212
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5213 gc = act->context;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5214 account = purple_connection_get_account(gc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5215 title = g_strdup_printf(_("Import Sametime List for Account %s"),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5216 purple_account_get_username(account));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5217
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5218 purple_request_file(gc, title, NULL, FALSE,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5219 G_CALLBACK(st_import_action_cb), NULL,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5220 account, NULL, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5221 gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5222
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5223 g_free(title);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5224 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5225
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5226
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5227 static void st_export_action_cb(PurpleConnection *gc, char *filename) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5228 struct mwSametimeList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5229 char *str;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5230 FILE *file;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5231
13158
3b4295931fd6 [gaim-migrate @ 15520]
Richard Laager <rlaager@pidgin.im>
parents: 13107
diff changeset
5232 file = g_fopen(filename, "w");
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5233 g_return_if_fail(file != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5234
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5235 l = mwSametimeList_new();
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5236 blist_export(gc, l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5237 str = mwSametimeList_store(l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5238 mwSametimeList_free(l);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5239
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5240 fprintf(file, "%s", str);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5241 fclose(file);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5242
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5243 g_free(str);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5244 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5245
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5246
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5247 /** prompts for a file to export blist to */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5248 static void st_export_action(PurplePluginAction *act) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5249 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5250 PurpleAccount *account;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5251 char *title;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5252
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5253 gc = act->context;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5254 account = purple_connection_get_account(gc);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5255 title = g_strdup_printf(_("Export Sametime List for Account %s"),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5256 purple_account_get_username(account));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5257
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5258 purple_request_file(gc, title, NULL, TRUE,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5259 G_CALLBACK(st_export_action_cb), NULL,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5260 account, NULL, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5261 gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5262
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5263 g_free(title);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5264 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5265
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5266
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5267 static void remote_group_multi_cleanup(gpointer ignore,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5268 PurpleRequestFields *fields) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5269
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5270 PurpleRequestField *f;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5271 const GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5272
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5273 f = purple_request_fields_get_field(fields, "group");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5274 l = purple_request_field_list_get_items(f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5275
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5276 for(; l; l = l->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5277 const char *i = l->data;
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
5278 struct named_id *res;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5279
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5280 res = purple_request_field_list_get_data(f, i);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5281
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5282 g_free(res->id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5283 g_free(res->name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5284 g_free(res);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5285 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5286 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5287
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5288
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5289 static void remote_group_done(struct mwPurplePluginData *pd,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5290 const char *id, const char *name) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5291 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5292 PurpleAccount *acct;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5293 PurpleGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5294 PurpleBlistNode *gn;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5295 const char *owner;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5296
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5297 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5298
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5299 gc = pd->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5300 acct = purple_connection_get_account(gc);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5301
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5302 /* collision checking */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5303 group = purple_find_group(name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5304 if(group) {
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5305 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5306 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5307 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5308
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5309 msgA = _("Unable to add group: group exists");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5310 msgB = _("A group named '%s' already exists in your buddy list.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5311 msg = g_strdup_printf(msgB, name);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5312
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5313 purple_notify_error(gc, _("Unable to add group"), msgA, msg);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5314
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5315 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5316 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5317 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5318
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5319 group = purple_group_new(name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5320 gn = (PurpleBlistNode *) group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5321
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5322 owner = purple_account_get_username(acct);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5323
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5324 purple_blist_node_set_string(gn, GROUP_KEY_NAME, id);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5325 purple_blist_node_set_int(gn, GROUP_KEY_TYPE, mwSametimeGroup_DYNAMIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5326 purple_blist_node_set_string(gn, GROUP_KEY_OWNER, owner);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5327 purple_blist_add_group(group, NULL);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5328
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5329 group_add(pd, group);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5330 blist_schedule(pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5331 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5332
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5333
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5334 static void remote_group_multi_cb(struct mwPurplePluginData *pd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5335 PurpleRequestFields *fields) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5336 PurpleRequestField *f;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5337 const GList *l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5338
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5339 f = purple_request_fields_get_field(fields, "group");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5340 l = purple_request_field_list_get_selected(f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5341
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5342 if(l) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5343 const char *i = l->data;
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
5344 struct named_id *res;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5345
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5346 res = purple_request_field_list_get_data(f, i);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5347 remote_group_done(pd, res->id, res->name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5348 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5349
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5350 remote_group_multi_cleanup(NULL, fields);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5351 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5352
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5353
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5354 static void remote_group_multi(struct mwResolveResult *result,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5355 struct mwPurplePluginData *pd) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5356
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5357 PurpleRequestFields *fields;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5358 PurpleRequestFieldGroup *g;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5359 PurpleRequestField *f;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5360 GList *l;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5361 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5362 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5363 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5364
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5365 PurpleConnection *gc = pd->gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5366
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5367 fields = purple_request_fields_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5368
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5369 g = purple_request_field_group_new(NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5370 purple_request_fields_add_group(fields, g);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5371
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5372 f = purple_request_field_list_new("group", _("Possible Matches"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5373 purple_request_field_list_set_multi_select(f, FALSE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5374 purple_request_field_set_required(f, TRUE);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5375
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5376 for(l = result->matches; l; l = l->next) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5377 struct mwResolveMatch *match = l->data;
12624
c1c92f08976b [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12595
diff changeset
5378 struct named_id *res = g_new0(struct named_id, 1);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5379
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5380 res->id = g_strdup(match->id);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5381 res->name = g_strdup(match->name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5382
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5383 purple_request_field_list_add(f, res->name, res);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5384 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5385
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5386 purple_request_field_group_add_field(g, f);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5387
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5388 msgA = _("Notes Address Book group results");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5389 msgB = _("The identifier '%s' may possibly refer to any of the following"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5390 " Notes Address Book groups. Please select the correct group from"
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5391 " the list below to add it to your buddy list.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5392 msg = g_strdup_printf(msgB, result->name);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5393
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5394 purple_request_fields(gc, _("Select Notes Address Book"),
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5395 msgA, msg, fields,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5396 _("Add Group"), G_CALLBACK(remote_group_multi_cb),
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5397 _("Cancel"), G_CALLBACK(remote_group_multi_cleanup),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5398 purple_connection_get_account(gc), result->name, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5399 pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5400
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5401 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5402 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5403
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5404
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5405 static void remote_group_resolved(struct mwServiceResolve *srvc,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5406 guint32 id, guint32 code, GList *results,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5407 gpointer b) {
11133
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
5408
9418ce240eca [gaim-migrate @ 13192]
Christopher O'Brien <siege@pidgin.im>
parents: 11132
diff changeset
5409 struct mwResolveResult *res = NULL;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5410 struct mwSession *session;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5411 struct mwPurplePluginData *pd;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5412 PurpleConnection *gc;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5413
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5414 session = mwService_getSession(MW_SERVICE(srvc));
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5415 g_return_if_fail(session != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5416
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5417 pd = mwSession_getClientData(session);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5418 g_return_if_fail(pd != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5419
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5420 gc = pd->gc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5421 g_return_if_fail(gc != NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5422
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5423 if(!code && results) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5424 res = results->data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5425
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5426 if(res->matches) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5427 remote_group_multi(res, pd);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5428 return;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5429 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5430 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5431
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5432 if(res && res->name) {
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5433 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5434 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5435 char *msg;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5436
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5437 msgA = _("Unable to add group: group not found");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5438
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5439 msgB = _("The identifier '%s' did not match any Notes Address Book"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5440 " groups in your Sametime community.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5441 msg = g_strdup_printf(msgB, res->name);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5442
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5443 purple_notify_error(gc, _("Unable to add group"), msgA, msg);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5444
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5445 g_free(msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5446 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5447 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5448
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5449
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5450 static void remote_group_action_cb(PurpleConnection *gc, const char *name) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5451 struct mwPurplePluginData *pd;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5452 struct mwServiceResolve *srvc;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5453 GList *query;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5454 enum mwResolveFlag flags;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5455 guint32 req;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5456
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5457 pd = gc->proto_data;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5458 srvc = pd->srvc_resolve;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5459
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5460 query = g_list_prepend(NULL, (char *) name);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5461 flags = mwResolveFlag_FIRST | mwResolveFlag_GROUPS;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5462
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5463 req = mwServiceResolve_resolve(srvc, query, flags, remote_group_resolved,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5464 NULL, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5465 g_list_free(query);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5466
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5467 if(req == SEARCH_ERROR) {
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5468 /** @todo display error */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5469 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5470 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5471
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5472
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5473 static void remote_group_action(PurplePluginAction *act) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5474 PurpleConnection *gc;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5475 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5476 const char *msgB;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5477
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5478 gc = act->context;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5479
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5480 msgA = _("Notes Address Book Group");
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5481 msgB = _("Enter the name of a Notes Address Book group in the field below"
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5482 " to add the group and its members to your buddy list.");
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5483
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5484 purple_request_input(gc, _("Add Group"), msgA, msgB, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5485 FALSE, FALSE, NULL,
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5486 _("Add"), G_CALLBACK(remote_group_action_cb),
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5487 _("Cancel"), NULL,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5488 purple_connection_get_account(gc), NULL, NULL,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5489 gc);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5490 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5491
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5492
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5493 static void search_notify(struct mwResolveResult *result,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5494 PurpleConnection *gc) {
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5495 GList *l;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5496 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5497 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5498 char *msg1;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5499 char *msg2;
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5500
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5501 PurpleNotifySearchResults *sres;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5502 PurpleNotifySearchColumn *scol;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5503
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5504 sres = purple_notify_searchresults_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5505
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5506 scol = purple_notify_searchresults_column_new(_("User Name"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5507 purple_notify_searchresults_column_add(sres, scol);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5508
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5509 scol = purple_notify_searchresults_column_new(_("Sametime ID"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5510 purple_notify_searchresults_column_add(sres, scol);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5511
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5512 purple_notify_searchresults_button_add(sres, PURPLE_NOTIFY_BUTTON_IM,
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5513 notify_im);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5514
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5515 purple_notify_searchresults_button_add(sres, PURPLE_NOTIFY_BUTTON_ADD,
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5516 notify_add);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5517
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5518 for(l = result->matches; l; l = l->next) {
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5519 struct mwResolveMatch *match = l->data;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5520 GList *row = NULL;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5521
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5522 if(!match->id || !match->name)
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5523 continue;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5524
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5525 row = g_list_append(row, g_strdup(match->name));
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5526 row = g_list_append(row, g_strdup(match->id));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5527 purple_notify_searchresults_row_add(sres, row);
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5528 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5529
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5530 msgA = _("Search results for '%s'");
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5531 msgB = _("The identifier '%s' may possibly refer to any of the following"
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5532 " users. You may add these users to your buddy list or send them"
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5533 " messages with the action buttons below.");
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5534
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5535 msg1 = g_strdup_printf(msgA, result->name);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5536 msg2 = g_strdup_printf(msgB, result->name);
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5537
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5538 purple_notify_searchresults(gc, _("Search Results"),
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5539 msg1, msg2, sres, notify_close, NULL);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5540
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5541 g_free(msg1);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5542 g_free(msg2);
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5543 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5544
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5545
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5546 static void search_resolved(struct mwServiceResolve *srvc,
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5547 guint32 id, guint32 code, GList *results,
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5548 gpointer b) {
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5549
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5550 PurpleConnection *gc = b;
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5551 struct mwResolveResult *res = NULL;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5552
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5553 if(results) res = results->data;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5554
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5555 if(!code && res && res->matches) {
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5556 search_notify(res, gc);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5557
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5558 } else {
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5559 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5560 const char *msgB;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5561 char *msg;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5562
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5563 msgA = _("No matches");
13287
18cc0c33773d [gaim-migrate @ 15652]
Evan Schoenberg <evands@pidgin.im>
parents: 13211
diff changeset
5564 msgB = _("The identifier '%s' did not match any users in your"
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5565 " Sametime community.");
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5566 msg = g_strdup_printf(msgB, NSTR(res->name));
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5567
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5568 purple_notify_error(gc, _("No Matches"), msgA, msg);
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5569
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5570 g_free(msg);
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5571 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5572 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5573
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5574
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5575 static void search_action_cb(PurpleConnection *gc, const char *name) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5576 struct mwPurplePluginData *pd;
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5577 struct mwServiceResolve *srvc;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5578 GList *query;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5579 enum mwResolveFlag flags;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5580 guint32 req;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5581
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5582 pd = gc->proto_data;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5583 srvc = pd->srvc_resolve;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5584
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5585 query = g_list_prepend(NULL, (char *) name);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5586 flags = mwResolveFlag_FIRST | mwResolveFlag_USERS;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5587
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5588 req = mwServiceResolve_resolve(srvc, query, flags, search_resolved,
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5589 gc, NULL);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5590 g_list_free(query);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5591
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5592 if(req == SEARCH_ERROR) {
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5593 /** @todo display error */
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5594 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5595 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5596
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5597
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5598 static void search_action(PurplePluginAction *act) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5599 PurpleConnection *gc;
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5600 const char *msgA;
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 13021
diff changeset
5601 const char *msgB;
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5602
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5603 gc = act->context;
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5604
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5605 msgA = _("Search for a user");
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5606 msgB = _("Enter a name or partial ID in the field below to search"
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5607 " for matching users in your Sametime community.");
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5608
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5609 purple_request_input(gc, _("User Search"), msgA, msgB, NULL,
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5610 FALSE, FALSE, NULL,
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5611 _("Search"), G_CALLBACK(search_action_cb),
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5612 _("Cancel"), NULL,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5613 purple_connection_get_account(gc), NULL, NULL,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16121
diff changeset
5614 gc);
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5615 }
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5616
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5617
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5618 static GList *mw_plugin_actions(PurplePlugin *plugin, gpointer context) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5619 PurplePluginAction *act;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5620 GList *l = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5621
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5622 act = purple_plugin_action_new(_("Import Sametime List..."),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5623 st_import_action);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5624 l = g_list_append(l, act);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5625
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5626 act = purple_plugin_action_new(_("Export Sametime List..."),
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5627 st_export_action);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5628 l = g_list_append(l, act);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5629
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5630 act = purple_plugin_action_new(_("Add Notes Address Book Group..."),
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5631 remote_group_action);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5632 l = g_list_append(l, act);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5633
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5634 act = purple_plugin_action_new(_("User Search..."),
12630
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5635 search_action);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5636 l = g_list_append(l, act);
b0fad57c3fc0 [gaim-migrate @ 14966]
Christopher O'Brien <siege@pidgin.im>
parents: 12629
diff changeset
5637
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5638 return l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5639 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5640
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5641
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5642 static gboolean mw_plugin_load(PurplePlugin *plugin) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5643 return TRUE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5644 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5645
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5646
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5647 static gboolean mw_plugin_unload(PurplePlugin *plugin) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5648 return TRUE;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5649 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5650
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5651
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5652 static void mw_plugin_destroy(PurplePlugin *plugin) {
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5653 g_log_remove_handler(G_LOG_DOMAIN, log_handler[0]);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5654 g_log_remove_handler("meanwhile", log_handler[1]);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5655 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5656
17153
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5657 static PurplePluginInfo mw_plugin_info =
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5658 {
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5659 PURPLE_PLUGIN_MAGIC,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5660 PURPLE_MAJOR_VERSION,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5661 PURPLE_MINOR_VERSION,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5662 PURPLE_PLUGIN_PROTOCOL, /**< type */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5663 NULL, /**< ui_requirement */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5664 0, /**< flags */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5665 NULL, /**< dependencies */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5666 PURPLE_PRIORITY_DEFAULT, /**< priority */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5667
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5668 PLUGIN_ID, /**< id */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5669 PLUGIN_NAME, /**< name */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5670 VERSION, /**< version */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5671 PLUGIN_SUMMARY, /**< summary */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5672 PLUGIN_DESC, /**< description */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5673 PLUGIN_AUTHOR, /**< author */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5674 PLUGIN_HOMEPAGE, /**< homepage */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5675
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5676 mw_plugin_load, /**< load */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5677 mw_plugin_unload, /**< unload */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5678 mw_plugin_destroy, /**< destroy */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5679
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5680 NULL, /**< ui_info */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5681 &mw_prpl_info, /**< extra_info */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5682 &mw_plugin_ui_info, /**< prefs_info */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5683 mw_plugin_actions,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5684
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5685 /* padding */
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5686 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5687 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5688 NULL,
7da4e85b6a05 Replace some C99 struct syntax.
Richard Laager <rlaager@pidgin.im>
parents: 16545
diff changeset
5689 NULL
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5690 };
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5691
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5692
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5693 static void mw_log_handler(const gchar *domain, GLogLevelFlags flags,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5694 const gchar *msg, gpointer data) {
12005
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
5695
0256aeef8411 [gaim-migrate @ 14298]
Christopher O'Brien <siege@pidgin.im>
parents: 11953
diff changeset
5696 if(! (msg && *msg)) return;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5697
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5698 /* handle g_log requests via purple's built-in debug logging */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5699 if(flags & G_LOG_LEVEL_ERROR) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5700 purple_debug_error(domain, "%s\n", msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5701
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5702 } else if(flags & G_LOG_LEVEL_WARNING) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5703 purple_debug_warning(domain, "%s\n", msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5704
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5705 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5706 purple_debug_info(domain, "%s\n", msg);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5707 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5708 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5709
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5710
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5711 static void mw_plugin_init(PurplePlugin *plugin) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5712 PurpleAccountOption *opt;
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5713 GList *l = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5714
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5715 GLogLevelFlags logflags =
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5716 G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5717
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5718 /* set up the preferences */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5719 purple_prefs_add_none(MW_PRPL_OPT_BASE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5720 purple_prefs_add_int(MW_PRPL_OPT_BLIST_ACTION, BLIST_CHOICE_DEFAULT);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5721
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5722 /* remove dead preferences */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5723 purple_prefs_remove(MW_PRPL_OPT_PSYCHIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5724 purple_prefs_remove(MW_PRPL_OPT_SAVE_DYNAMIC);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5725
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5726 /* host to connect to */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5727 opt = purple_account_option_string_new(_("Server"), MW_KEY_HOST,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5728 MW_PLUGIN_DEFAULT_HOST);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5729 l = g_list_append(l, opt);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5730
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5731 /* port to connect to */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5732 opt = purple_account_option_int_new(_("Port"), MW_KEY_PORT,
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5733 MW_PLUGIN_DEFAULT_PORT);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5734 l = g_list_append(l, opt);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5735
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5736 { /* copy the old force login setting from prefs if it's
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5737 there. Don't delete the preference, since there may be more
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5738 than one account that wants to check for it. */
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5739 gboolean b = FALSE;
12489
14274d68d499 [gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12422
diff changeset
5740 const char *label = _("Force login (ignore server redirects)");
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5741
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5742 if(purple_prefs_exists(MW_PRPL_OPT_FORCE_LOGIN))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5743 b = purple_prefs_get_bool(MW_PRPL_OPT_FORCE_LOGIN);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5744
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5745 opt = purple_account_option_bool_new(label, MW_KEY_FORCE, b);
11943
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5746 l = g_list_append(l, opt);
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5747 }
81ee4bc13c28 [gaim-migrate @ 14234]
Christopher O'Brien <siege@pidgin.im>
parents: 11837
diff changeset
5748
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
5749 /* pretend to be Sametime Connect */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5750 opt = purple_account_option_bool_new(_("Hide client identity"),
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
5751 MW_KEY_FAKE_IT, FALSE);
12312
470a1452d009 [gaim-migrate @ 14616]
Christopher O'Brien <siege@pidgin.im>
parents: 12311
diff changeset
5752 l = g_list_append(l, opt);
12311
ee0f62f4fcd4 [gaim-migrate @ 14615]
Christopher O'Brien <siege@pidgin.im>
parents: 12266
diff changeset
5753
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5754 mw_prpl_info.protocol_options = l;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5755 l = NULL;
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5756
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5757 /* forward all our g_log messages to purple. Generally all the logging
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5758 calls are using purple_log directly, but the g_return macros will
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5759 get caught here */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5760 log_handler[0] = g_log_set_handler(G_LOG_DOMAIN, logflags,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5761 mw_log_handler, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5762
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5763 /* redirect meanwhile's logging to purple's */
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5764 log_handler[1] = g_log_set_handler("meanwhile", logflags,
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5765 mw_log_handler, NULL);
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5766 }
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5767
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5768
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15772
diff changeset
5769 PURPLE_INIT_PLUGIN(sametime, mw_plugin_init, mw_plugin_info);
10977
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5770 /* The End. */
5802457af313 [gaim-migrate @ 12803]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5771

mercurial