Mercurial > pidgin
annotate src/server.c @ 14122:dabbcb9b013d
[gaim-migrate @ 16759]
This initializes threads for glib and dbus, because under some
circumstances multithreaded libraries are causing dbus badness
(namely, gnome-vfs). This fix doesn't really belong in Gaim, but in
the interest of expedience (we don't want to wait for upstream
libraries to get their initializations all worked around to make
things safe) the fix goes here. Note that all Gaim frontends will
have to initialize glib threads if other threaded libraries which
interact with glib or dbus or what-have-you come into play.
committer: Tailor Script <tailor@pidgin.im>
| author | Ethan Blanton <elb@pidgin.im> |
|---|---|
| date | Mon, 14 Aug 2006 21:46:17 +0000 |
| parents | 8bda65b88e49 |
| children |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 8046 | 4 * Gaim is the legal property of its developers, whose names are too numerous |
| 5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 6 * source distribution. | |
| 1 | 7 * |
| 8 * This program is free software; you can redistribute it and/or modify | |
| 9 * it under the terms of the GNU General Public License as published by | |
| 10 * the Free Software Foundation; either version 2 of the License, or | |
| 11 * (at your option) any later version. | |
| 12 * | |
| 13 * This program is distributed in the hope that it will be useful, | |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 * GNU General Public License for more details. | |
| 17 * | |
| 18 * You should have received a copy of the GNU General Public License | |
| 19 * along with this program; if not, write to the Free Software | |
| 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 * | |
| 22 */ | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
23 #include "internal.h" |
| 9944 | 24 #include "blist.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
25 #include "conversation.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
26 #include "debug.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
27 #include "log.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
28 #include "notify.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
29 #include "prefs.h" |
|
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
30 #include "privacy.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
31 #include "prpl.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
32 #include "request.h" |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
33 #include "signals.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
34 #include "server.h" |
| 9944 | 35 #include "status.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
36 #include "util.h" |
| 1 | 37 |
| 8948 | 38 #define SECS_BEFORE_RESENDING_AUTORESPONSE 600 |
| 9285 | 39 #define SEX_BEFORE_RESENDING_AUTORESPONSE "Only after you're married" |
| 8948 | 40 |
| 13842 | 41 unsigned int |
| 42 serv_send_typing(GaimConnection *gc, const char *name, GaimTypingState state) | |
| 43 { | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
44 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
45 |
| 13842 | 46 if (gc != NULL && gc->prpl != NULL) |
| 47 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
48 |
| 13842 | 49 if (prpl_info && prpl_info->send_typing) |
| 50 return prpl_info->send_typing(gc, name, state); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
51 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
52 return 0; |
| 2993 | 53 } |
| 1 | 54 |
| 10871 | 55 static GSList *last_auto_responses = NULL; |
| 6479 | 56 struct last_auto_response { |
| 57 GaimConnection *gc; | |
| 3815 | 58 char name[80]; |
| 6479 | 59 time_t sent; |
| 3815 | 60 }; |
| 61 | |
| 10850 | 62 static gboolean |
| 63 expire_last_auto_responses(gpointer data) | |
| 6479 | 64 { |
| 65 GSList *tmp, *cur; | |
| 66 struct last_auto_response *lar; | |
| 67 | |
| 68 tmp = last_auto_responses; | |
| 69 | |
| 70 while (tmp) { | |
| 71 cur = tmp; | |
| 72 tmp = tmp->next; | |
| 73 lar = (struct last_auto_response *)cur->data; | |
| 74 | |
| 8948 | 75 if ((time(NULL) - lar->sent) > SECS_BEFORE_RESENDING_AUTORESPONSE) { |
| 6479 | 76 last_auto_responses = g_slist_remove(last_auto_responses, lar); |
| 77 g_free(lar); | |
| 78 } | |
| 79 } | |
| 80 | |
| 81 return FALSE; /* do not run again */ | |
| 82 } | |
| 83 | |
| 10850 | 84 static struct last_auto_response * |
| 85 get_last_auto_response(GaimConnection *gc, const char *name) | |
| 6479 | 86 { |
| 87 GSList *tmp; | |
| 88 struct last_auto_response *lar; | |
| 89 | |
| 90 /* because we're modifying or creating a lar, schedule the | |
| 91 * function to expire them as the pref dictates */ | |
| 8948 | 92 gaim_timeout_add((SECS_BEFORE_RESENDING_AUTORESPONSE + 1) * 1000, expire_last_auto_responses, NULL); |
| 6479 | 93 |
| 94 tmp = last_auto_responses; | |
| 95 | |
| 96 while (tmp) { | |
| 97 lar = (struct last_auto_response *)tmp->data; | |
| 98 | |
| 99 if (gc == lar->gc && !strncmp(name, lar->name, sizeof(lar->name))) | |
| 100 return lar; | |
| 101 | |
| 102 tmp = tmp->next; | |
| 103 } | |
| 104 | |
| 105 lar = (struct last_auto_response *)g_new0(struct last_auto_response, 1); | |
| 106 g_snprintf(lar->name, sizeof(lar->name), "%s", name); | |
| 107 lar->gc = gc; | |
| 108 lar->sent = 0; | |
|
13789
99688ab310c8
[gaim-migrate @ 16201]
Richard Laager <rlaager@wiktel.com>
parents:
13663
diff
changeset
|
109 last_auto_responses = g_slist_prepend(last_auto_responses, lar); |
| 6479 | 110 |
| 111 return lar; | |
| 112 } | |
| 113 | |
| 6059 | 114 int serv_send_im(GaimConnection *gc, const char *name, const char *message, |
| 12216 | 115 GaimMessageFlags flags) |
| 1 | 116 { |
| 9949 | 117 GaimConversation *conv; |
| 118 GaimAccount *account; | |
| 119 GaimPresence *presence; | |
|
13421
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
120 GaimPluginProtocolInfo *prpl_info; |
|
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2108
diff
changeset
|
121 int val = -EINVAL; |
| 9594 | 122 const gchar *auto_reply_pref; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
123 |
|
13421
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
124 g_return_val_if_fail(gc != NULL, val); |
|
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
125 g_return_val_if_fail(gc->prpl != NULL, val); |
|
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
126 |
|
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
127 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
128 |
| 9949 | 129 account = gaim_connection_get_account(gc); |
| 130 presence = gaim_account_get_presence(account); | |
| 131 | |
| 11338 | 132 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
133 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
134 if (prpl_info && prpl_info->send_im) |
| 12216 | 135 val = prpl_info->send_im(gc, name, message, flags); |
|
94
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
79
diff
changeset
|
136 |
| 9594 | 137 /* |
| 138 * XXX - If "only auto-reply when away & idle" is set, then shouldn't | |
| 139 * this only reset lar->sent if we're away AND idle? | |
| 140 */ | |
| 141 auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply"); | |
| 9949 | 142 if ((gc->flags & GAIM_CONNECTION_AUTO_RESP) && |
| 143 !gaim_presence_is_available(presence) && | |
| 144 strcmp(auto_reply_pref, "never")) { | |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5539
diff
changeset
|
145 |
| 6479 | 146 struct last_auto_response *lar; |
| 147 lar = get_last_auto_response(gc, name); | |
| 148 lar->sent = time(NULL); | |
| 3815 | 149 } |
| 150 | |
| 13842 | 151 if (conv && gaim_conv_im_get_send_typed_timeout(GAIM_CONV_IM(conv))) |
| 152 gaim_conv_im_stop_send_typed_timeout(GAIM_CONV_IM(conv)); | |
| 3601 | 153 |
|
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2108
diff
changeset
|
154 return val; |
| 1 | 155 } |
| 156 | |
| 9285 | 157 void serv_get_info(GaimConnection *gc, const char *name) |
| 1 | 158 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
159 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
160 |
| 9285 | 161 if (gc != NULL && gc->prpl != NULL) |
| 162 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
163 |
| 9285 | 164 if (gc && prpl_info && prpl_info->get_info) |
| 165 prpl_info->get_info(gc, name); | |
|
249
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
248
diff
changeset
|
166 } |
|
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
248
diff
changeset
|
167 |
| 9285 | 168 void serv_set_info(GaimConnection *gc, const char *info) |
| 1 | 169 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
170 GaimPluginProtocolInfo *prpl_info = NULL; |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
171 GaimAccount *account; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
172 |
| 9285 | 173 if (gc != NULL && gc->prpl != NULL) |
| 174 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
175 |
| 9285 | 176 if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
177 prpl_info->set_info) { |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
178 |
| 9285 | 179 account = gaim_connection_get_account(gc); |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
180 |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
181 if (gaim_signal_emit_return_1(gaim_accounts_get_handle(), |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
182 "account-setting-info", account, info)) |
| 3456 | 183 return; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
184 |
| 9285 | 185 prpl_info->set_info(gc, info); |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
186 |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
187 gaim_signal_emit(gaim_accounts_get_handle(), |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
188 "account-set-info", account, info); |
|
1749
5bfc58c20e82
[gaim-migrate @ 1759]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1734
diff
changeset
|
189 } |
|
237
6ced2f1c8b24
[gaim-migrate @ 247]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
190 } |
|
6ced2f1c8b24
[gaim-migrate @ 247]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
191 |
| 3136 | 192 /* |
| 193 * Set buddy's alias on server roster/list | |
| 194 */ | |
| 6695 | 195 void serv_alias_buddy(GaimBuddy *b) |
| 3136 | 196 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
197 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
198 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
199 if (b != NULL && b->account->gc->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
200 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(b->account->gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
201 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
202 if (b && prpl_info && prpl_info->alias_buddy) { |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
203 prpl_info->alias_buddy(b->account->gc, b->name, b->alias); |
| 3136 | 204 } |
| 205 } | |
| 206 | |
|
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
207 void |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
208 serv_got_alias(GaimConnection *gc, const char *who, const char *alias) |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
209 { |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
210 GaimAccount *account = gaim_connection_get_account(gc); |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
211 GSList *buds, *buddies = gaim_find_buddies(account, who); |
| 8870 | 212 GaimBuddy *b; |
|
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
213 GaimConversation *conv; |
| 6058 | 214 |
|
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
215 for (buds = buddies; buds; buds = buds->next) |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
216 { |
| 8870 | 217 b = buds->data; |
| 218 gaim_blist_server_alias_buddy(b, alias); | |
|
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
219 |
| 11338 | 220 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, b->name, account); |
|
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
221 |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
222 if (conv != NULL && b->server_alias != NULL && |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
223 strcmp(b->server_alias, alias)) |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
224 { |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
225 char *tmp = g_strdup_printf(_("%s is now known as %s.\n"), |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
226 who, alias); |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
227 |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
228 gaim_conversation_write(conv, NULL, tmp, GAIM_MESSAGE_SYSTEM, |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
229 time(NULL)); |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
230 |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
231 g_free(tmp); |
|
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
232 } |
| 8870 | 233 } |
| 8894 | 234 g_slist_free(buddies); |
| 4227 | 235 } |
| 236 | |
| 3136 | 237 /* |
| 238 * Move a buddy from one group to another on server. | |
| 239 * | |
| 240 * Note: For now we'll not deal with changing gc's at the same time, but | |
| 9285 | 241 * it should be possible. Probably needs to be done, someday. Although, |
| 242 * the UI for that would be difficult, because groups are Gaim-wide. | |
| 3136 | 243 */ |
| 6695 | 244 void serv_move_buddy(GaimBuddy *b, GaimGroup *og, GaimGroup *ng) |
| 3136 | 245 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
246 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
247 |
|
13417
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
248 g_return_if_fail(b != NULL); |
|
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
249 g_return_if_fail(og != NULL); |
|
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
250 g_return_if_fail(ng != NULL); |
|
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
251 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
252 if (b->account->gc != NULL && b->account->gc->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
253 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(b->account->gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
254 |
|
13417
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
255 if (b->account->gc && og && ng) { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
256 if (prpl_info && prpl_info->group_buddy) { |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
257 prpl_info->group_buddy(b->account->gc, b->name, og->name, ng->name); |
| 3136 | 258 } |
| 259 } | |
| 260 } | |
| 261 | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
262 void serv_add_permit(GaimConnection *g, const char *name) |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
263 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
264 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
265 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
266 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
267 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
268 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
269 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_permit) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
270 prpl_info->add_permit(g, name); |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
271 } |
|
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
272 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
273 void serv_add_deny(GaimConnection *g, const char *name) |
| 1 | 274 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
275 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
276 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
277 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
278 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
279 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
280 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_deny) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
281 prpl_info->add_deny(g, name); |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
282 } |
|
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
283 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
284 void serv_rem_permit(GaimConnection *g, const char *name) |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
285 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
286 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
287 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
288 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
289 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
290 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
291 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_permit) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
292 prpl_info->rem_permit(g, name); |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
293 } |
| 1 | 294 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
295 void serv_rem_deny(GaimConnection *g, const char *name) |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
296 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
297 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
298 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
299 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
300 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
301 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
302 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_deny) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
303 prpl_info->rem_deny(g, name); |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
304 } |
|
678
c72f58814e9f
[gaim-migrate @ 688]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
660
diff
changeset
|
305 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
306 void serv_set_permit_deny(GaimConnection *g) |
|
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
307 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
308 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
309 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
310 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
311 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
312 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
313 /* |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
314 * this is called when either you import a buddy list, and make lots |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
315 * of changes that way, or when the user toggles the permit/deny mode |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
316 * in the prefs. In either case you should probably be resetting and |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
317 * resending the permit/deny info when you get this. |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
318 */ |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
319 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->set_permit_deny) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
320 prpl_info->set_permit_deny(g); |
| 1 | 321 } |
| 322 | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
323 void serv_join_chat(GaimConnection *g, GHashTable *data) |
| 1 | 324 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
325 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
326 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
327 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
328 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
329 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
330 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->join_chat) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
331 prpl_info->join_chat(g, data); |
| 1 | 332 } |
| 333 | |
| 8562 | 334 |
| 335 void serv_reject_chat(GaimConnection *g, GHashTable *data) | |
| 336 { | |
| 337 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 338 | |
| 339 if (g != NULL && g->prpl != NULL) | |
| 340 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); | |
| 341 | |
| 342 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->reject_chat) | |
| 343 prpl_info->reject_chat(g, data); | |
| 344 } | |
| 345 | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
346 void serv_chat_invite(GaimConnection *g, int id, const char *message, const char *name) |
| 1 | 347 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
348 GaimPluginProtocolInfo *prpl_info = NULL; |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
349 GaimConversation *conv; |
|
2359
ad56a93661fc
[gaim-migrate @ 2372]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2345
diff
changeset
|
350 char *buffy = message && *message ? g_strdup(message) : NULL; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
351 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
352 conv = gaim_find_chat(g, id); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
353 |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
354 if (conv == NULL) |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
355 return; |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
356 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
357 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
358 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
359 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
360 gaim_signal_emit(gaim_conversations_get_handle(), "chat-inviting-user", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
361 conv, name, &buffy); |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
362 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
363 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->chat_invite) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
364 prpl_info->chat_invite(g, id, buffy, name); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
365 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
366 gaim_signal_emit(gaim_conversations_get_handle(), "chat-invited-user", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
367 conv, name, buffy); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
368 |
| 14035 | 369 g_free(buffy); |
| 1 | 370 } |
| 371 | |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
372 /* Ya know, nothing uses this except gaim_conversation_destroy(), |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
373 * I think I'll just merge it into that later... |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
374 * Then again, something might want to use this, from outside prpl-land |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
375 * to leave a chat without destroying the conversation. |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
376 */ |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
377 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
378 void serv_chat_leave(GaimConnection *g, int id) |
| 1 | 379 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
380 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
381 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
382 if (!g_list_find(gaim_connections_get_all(), g)) |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
383 return; |
|
1015
c3579d03a0c1
[gaim-migrate @ 1025]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1013
diff
changeset
|
384 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
385 if (g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
386 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
387 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
388 if (prpl_info && prpl_info->chat_leave) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
389 prpl_info->chat_leave(g, id); |
| 1 | 390 } |
| 391 | |
| 6059 | 392 void serv_chat_whisper(GaimConnection *g, int id, const char *who, const char *message) |
| 1 | 393 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
394 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
395 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
396 if (g != NULL && g->prpl != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
397 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
398 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
399 if (prpl_info && prpl_info->chat_whisper) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
400 prpl_info->chat_whisper(g, id, who, message); |
| 1 | 401 } |
| 402 | |
| 12216 | 403 int serv_chat_send(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags) |
| 1 | 404 { |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
405 int val = -EINVAL; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
406 GaimPluginProtocolInfo *prpl_info = NULL; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
407 |
| 11907 | 408 if (gc->prpl != NULL) |
| 409 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
410 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
411 if (prpl_info && prpl_info->chat_send) |
| 12216 | 412 val = prpl_info->chat_send(gc, id, message, flags); |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
413 |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
414 return val; |
| 1 | 415 } |
| 416 | |
| 5842 | 417 void serv_set_buddyicon(GaimConnection *gc, const char *filename) |
| 418 { | |
| 419 GaimPluginProtocolInfo *prpl_info = NULL; | |
|
8674
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
420 |
| 5842 | 421 if (gc->prpl != NULL) |
| 422 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 423 | |
| 424 if (prpl_info && prpl_info->set_buddy_icon) | |
| 425 prpl_info->set_buddy_icon(gc, filename); | |
|
8674
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
426 |
|
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
427 } |
| 5842 | 428 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
429 /* |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
430 * woo. i'm actually going to comment this function. isn't that fun. make |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
431 * sure to follow along, kids |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
432 */ |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
433 void serv_got_im(GaimConnection *gc, const char *who, const char *msg, |
| 12216 | 434 GaimMessageFlags flags, time_t mtime) |
| 1 | 435 { |
| 9944 | 436 GaimAccount *account; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
437 GaimConversation *cnv; |
| 5136 | 438 char *message, *name; |
| 6622 | 439 char *angel, *buffy; |
| 440 int plugin_return; | |
|
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
441 |
| 11903 | 442 g_return_if_fail(msg != NULL); |
| 443 | |
| 9944 | 444 account = gaim_connection_get_account(gc); |
|
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
445 |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
446 if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->set_permit_deny == NULL) { |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
447 /* protocol does not support privacy, handle it ourselves */ |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
448 if (!gaim_privacy_check(account, who)) |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
449 return; |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
450 } |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
451 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
452 /* |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
453 * We should update the conversation window buttons and menu, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
454 * if it exists. |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
455 */ |
| 11338 | 456 cnv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, who, gc->account); |
|
2106
efb39c151cf7
[gaim-migrate @ 2116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2104
diff
changeset
|
457 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
458 /* |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
459 * Plugin stuff. we pass a char ** but we don't want to pass what's |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
460 * been given us by the prpls. So we create temp holders and pass |
| 6982 | 461 * those instead. It's basically just to avoid segfaults. |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
462 */ |
| 6982 | 463 buffy = g_malloc(MAX(strlen(msg) + 1, BUF_LONG)); |
| 464 strcpy(buffy, msg); | |
| 465 angel = g_strdup(who); | |
| 1339 | 466 |
| 6982 | 467 plugin_return = GPOINTER_TO_INT( |
| 468 gaim_signal_emit_return_1(gaim_conversations_get_handle(), | |
| 8999 | 469 "receiving-im-msg", gc->account, |
| 12216 | 470 &angel, &buffy, cnv, &flags)); |
| 6982 | 471 |
| 472 if (!buffy || !angel || plugin_return) { | |
| 14035 | 473 g_free(buffy); |
| 474 g_free(angel); | |
| 6982 | 475 return; |
|
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
476 } |
| 8619 | 477 |
| 8999 | 478 name = angel; |
| 6982 | 479 message = buffy; |
|
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
480 |
| 8999 | 481 gaim_signal_emit(gaim_conversations_get_handle(), "received-im-msg", gc->account, |
| 12216 | 482 name, message, cnv, flags); |
| 8999 | 483 |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
484 /* search for conversation again in case it was created by received-im-msg handler */ |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
485 if (cnv == NULL) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
486 cnv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
487 |
| 8882 | 488 /* Make sure URLs are clickable */ |
| 489 buffy = gaim_markup_linkify(message); | |
| 490 g_free(message); | |
| 491 message = buffy; | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
492 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
493 /* |
| 12216 | 494 * XXX: Should we be setting this here, or relying on prpls to set it? |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
495 */ |
| 12216 | 496 flags |= GAIM_MESSAGE_RECV; |
| 1 | 497 |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
498 if (cnv == NULL) |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
499 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, name); |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
500 |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
501 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, flags, mtime); |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
502 g_free(message); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12114
diff
changeset
|
503 |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
504 /* |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
505 * Don't autorespond if: |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
506 * |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
507 * - it's not supported on this connection |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
508 * - we are available |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
509 * - or it's disabled |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
510 * - or we're not idle and the 'only auto respond if idle' pref |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
511 * is set |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
512 */ |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
513 if (gc->flags & GAIM_CONNECTION_AUTO_RESP) |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
514 { |
| 12981 | 515 GaimPresence *presence; |
| 516 GaimStatus *status; | |
| 517 GaimStatusType *status_type; | |
| 518 GaimStatusPrimitive primitive; | |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
519 const gchar *auto_reply_pref; |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
520 const char *away_msg = NULL; |
|
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
521 |
| 9594 | 522 auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply"); |
| 10052 | 523 |
| 12981 | 524 presence = gaim_account_get_presence(account); |
| 12980 | 525 status = gaim_presence_get_active_status(presence); |
| 12981 | 526 status_type = gaim_status_get_type(status); |
| 527 primitive = gaim_status_type_get_primitive(status_type); | |
| 528 if ((primitive == GAIM_STATUS_AVAILABLE) || | |
| 529 (primitive == GAIM_STATUS_INVISIBLE) || | |
| 530 (primitive == GAIM_STATUS_MOBILE) || | |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
531 !strcmp(auto_reply_pref, "never") || |
| 12981 | 532 (!gaim_presence_is_idle(presence) && !strcmp(auto_reply_pref, "awayidle"))) |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
533 { |
|
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
534 g_free(name); |
|
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
535 return; |
|
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
536 } |
|
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
537 |
| 12980 | 538 away_msg = gaim_value_get_string( |
| 539 gaim_status_get_attr_value(status, "message")); | |
|
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
540 |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
541 if ((away_msg != NULL) && (*away_msg != '\0')) { |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
542 struct last_auto_response *lar; |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
543 time_t now = time(NULL); |
| 10052 | 544 |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
545 /* |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
546 * This used to be based on the conversation window. But um, if |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
547 * you went away, and someone sent you a message and got your |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
548 * auto-response, and then you closed the window, and then they |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
549 * sent you another one, they'd get the auto-response back too |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
550 * soon. Besides that, we need to keep track of this even if we've |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
551 * got a queue. So the rest of this block is just the auto-response, |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
552 * if necessary. |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
553 */ |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
554 lar = get_last_auto_response(gc, name); |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
555 if ((now - lar->sent) >= SECS_BEFORE_RESENDING_AUTORESPONSE) |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
556 { |
|
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
557 /* |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
558 * We don't want to send an autoresponse in response to the other user's |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
559 * autoresponse. We do, however, not want to then send one in response to the |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
560 * _next_ message, so we still set lar->sent to now. |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
561 */ |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
562 lar->sent = now; |
| 14035 | 563 |
|
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
564 if (!(flags & GAIM_MESSAGE_AUTO_RESP)) |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
565 { |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
566 serv_send_im(gc, name, away_msg, GAIM_MESSAGE_AUTO_RESP); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
567 |
|
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
568 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, away_msg, |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
569 GAIM_MESSAGE_SEND | GAIM_MESSAGE_AUTO_RESP, |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
570 mtime); |
|
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
571 } |
|
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
572 } |
|
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
573 } |
| 1 | 574 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
575 |
|
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
576 g_free(name); |
| 1 | 577 } |
| 578 | |
| 5630 | 579 void serv_got_typing(GaimConnection *gc, const char *name, int timeout, |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
580 GaimTypingState state) { |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
581 GaimConversation *conv; |
|
11709
cae2fb7e8594
[gaim-migrate @ 14000]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11706
diff
changeset
|
582 GaimConvIm *im = NULL; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
583 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
584 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
585 if (conv != NULL) { |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
586 im = GAIM_CONV_IM(conv); |
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
5024
diff
changeset
|
587 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
588 gaim_conv_im_set_typing_state(im, state); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
589 gaim_conv_im_update_typing(im); |
|
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
590 } else { |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
591 if (state == GAIM_TYPING) |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
592 { |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
593 gaim_signal_emit(gaim_conversations_get_handle(), |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
594 "buddy-typing", gc->account, name); |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
595 } |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
596 else |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
597 { |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
598 gaim_signal_emit(gaim_conversations_get_handle(), |
| 13842 | 599 "buddy-typed", gc->account, name); |
|
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
600 } |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
601 } |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
602 |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
603 if (conv != NULL && timeout > 0) |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
604 gaim_conv_im_start_typing_timeout(im, timeout); |
| 2993 | 605 } |
| 1 | 606 |
| 5630 | 607 void serv_got_typing_stopped(GaimConnection *gc, const char *name) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
608 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
609 GaimConversation *conv; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
610 GaimConvIm *im; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
611 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
612 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
613 if (conv != NULL) |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
614 { |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
615 im = GAIM_CONV_IM(conv); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
616 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
617 if (im->typing_state == GAIM_NOT_TYPING) |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
618 return; |
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
5024
diff
changeset
|
619 |
|
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
620 gaim_conv_im_stop_typing_timeout(im); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
621 gaim_conv_im_set_typing_state(im, GAIM_NOT_TYPING); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
622 gaim_conv_im_update_typing(im); |
|
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
623 } |
| 13842 | 624 else |
| 625 { | |
| 626 gaim_signal_emit(gaim_conversations_get_handle(), | |
| 627 "buddy-typing-stopped", gc->account, name); | |
| 628 } | |
| 2993 | 629 } |
| 1 | 630 |
| 4487 | 631 struct chat_invite_data { |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
632 GaimConnection *gc; |
| 5234 | 633 GHashTable *components; |
| 4487 | 634 }; |
|
1723
76e601b77099
[gaim-migrate @ 1733]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1722
diff
changeset
|
635 |
| 4487 | 636 static void chat_invite_data_free(struct chat_invite_data *cid) |
| 1 | 637 { |
| 5234 | 638 if (cid->components) |
| 639 g_hash_table_destroy(cid->components); | |
| 4487 | 640 g_free(cid); |
| 641 } | |
|
1723
76e601b77099
[gaim-migrate @ 1733]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1722
diff
changeset
|
642 |
| 8562 | 643 |
| 644 static void chat_invite_reject(struct chat_invite_data *cid) | |
| 645 { | |
| 646 serv_reject_chat(cid->gc, cid->components); | |
| 647 chat_invite_data_free(cid); | |
| 648 } | |
| 649 | |
| 650 | |
| 4487 | 651 static void chat_invite_accept(struct chat_invite_data *cid) |
| 652 { | |
| 5234 | 653 serv_join_chat(cid->gc, cid->components); |
| 4487 | 654 chat_invite_data_free(cid); |
| 1 | 655 } |
| 656 | |
| 657 | |
| 658 | |
| 5630 | 659 void serv_got_chat_invite(GaimConnection *gc, const char *name, |
| 660 const char *who, const char *message, GHashTable *data) | |
| 1 | 661 { |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
662 GaimAccount *account; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
663 char buf2[BUF_LONG]; |
| 4487 | 664 struct chat_invite_data *cid = g_new0(struct chat_invite_data, 1); |
|
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
665 int plugin_return; |
| 1 | 666 |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
667 account = gaim_connection_get_account(gc); |
|
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
668 if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->set_permit_deny == NULL) { |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
669 /* protocol does not support privacy, handle it ourselves */ |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
670 if (!gaim_privacy_check(account, who)) |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
671 return; |
|
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
672 } |
| 1 | 673 |
|
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
674 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1( |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
675 gaim_conversations_get_handle(), |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
676 "chat-invited", account, who, name, message, data)); |
| 1 | 677 |
| 4487 | 678 cid->gc = gc; |
| 5234 | 679 cid->components = data; |
| 1 | 680 |
|
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
681 if (plugin_return == 0) |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
682 { |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
683 if (message != NULL) |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
684 { |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
685 g_snprintf(buf2, sizeof(buf2), |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
686 _("%s has invited %s to the chat room %s:\n%s"), |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
687 who, gaim_account_get_username(account), name, message); |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
688 } |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
689 else |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
690 g_snprintf(buf2, sizeof(buf2), |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
691 _("%s has invited %s to the chat room %s\n"), |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
692 who, gaim_account_get_username(account), name); |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
693 |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
694 |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
695 gaim_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2, |
| 9976 | 696 GAIM_DEFAULT_ACTION_NONE, cid, |
|
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5461
diff
changeset
|
697 G_CALLBACK(chat_invite_accept), |
| 8562 | 698 G_CALLBACK(chat_invite_reject)); |
|
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
699 } |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
700 else if (plugin_return > 0) |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
701 chat_invite_accept(cid); |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
702 else |
|
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
703 chat_invite_reject(cid); |
| 1 | 704 } |
| 705 | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
706 GaimConversation *serv_got_joined_chat(GaimConnection *gc, |
| 5630 | 707 int id, const char *name) |
| 1 | 708 { |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
709 GaimConversation *conv; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
710 GaimConvChat *chat; |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
711 GaimAccount *account; |
| 1 | 712 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
713 account = gaim_connection_get_account(gc); |
| 1 | 714 |
| 11338 | 715 conv = gaim_conversation_new(GAIM_CONV_TYPE_CHAT, account, name); |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
716 chat = GAIM_CONV_CHAT(conv); |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
717 |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
718 if (!g_slist_find(gc->buddy_chats, conv)) |
|
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
719 gc->buddy_chats = g_slist_append(gc->buddy_chats, conv); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
720 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
721 gaim_conv_chat_set_id(chat, id); |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4440
diff
changeset
|
722 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
723 gaim_signal_emit(gaim_conversations_get_handle(), "chat-joined", conv); |
| 3710 | 724 |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
725 return conv; |
| 1 | 726 } |
| 727 | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
728 void serv_got_chat_left(GaimConnection *g, int id) |
| 1 | 729 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
730 GSList *bcs; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
731 GaimConversation *conv = NULL; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
732 GaimConvChat *chat = NULL; |
| 1 | 733 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
734 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
735 conv = (GaimConversation *)bcs->data; |
| 1 | 736 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
737 chat = GAIM_CONV_CHAT(conv); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
738 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
739 if (gaim_conv_chat_get_id(chat) == id) |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
740 break; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
741 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
742 conv = NULL; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
743 } |
| 1 | 744 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
745 if (!conv) |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
746 return; |
| 1 | 747 |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
748 gaim_debug(GAIM_DEBUG_INFO, "server", "Leaving room: %s\n", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
749 gaim_conversation_get_name(conv)); |
| 1 | 750 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
751 g->buddy_chats = g_slist_remove(g->buddy_chats, conv); |
| 1 | 752 |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
753 gaim_conv_chat_left(GAIM_CONV_CHAT(conv)); |
|
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
754 |
|
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
755 gaim_signal_emit(gaim_conversations_get_handle(), "chat-left", conv); |
| 1 | 756 } |
| 757 | |
| 6059 | 758 void serv_got_chat_in(GaimConnection *g, int id, const char *who, |
| 12216 | 759 GaimMessageFlags flags, const char *message, time_t mtime) |
| 1 | 760 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
761 GSList *bcs; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
762 GaimConversation *conv = NULL; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
763 GaimConvChat *chat = NULL; |
|
2296
878503b60006
[gaim-migrate @ 2306]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
764 char *buf; |
| 3163 | 765 char *buffy, *angel; |
| 766 int plugin_return; | |
| 1 | 767 |
|
12894
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
768 g_return_if_fail(who != NULL); |
|
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
769 g_return_if_fail(message != NULL); |
|
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
770 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
771 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
772 conv = (GaimConversation *)bcs->data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
773 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
774 chat = GAIM_CONV_CHAT(conv); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
775 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
776 if (gaim_conv_chat_get_id(chat) == id) |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
777 break; |
| 1 | 778 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
779 conv = NULL; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
780 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
781 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
782 if (!conv) |
|
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
783 return; |
|
391
be408b41c172
[gaim-migrate @ 401]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
368
diff
changeset
|
784 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
785 /* |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
786 * Plugin stuff. We pass a char ** but we don't want to pass what's |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
787 * been given us by the prpls. so we create temp holders and pass those |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
788 * instead. It's basically just to avoid segfaults. Of course, if the |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
789 * data is binary, plugins don't see it. Bitch all you want; i really |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
790 * don't want you to be dealing with it. |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
791 */ |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
792 |
| 3163 | 793 buffy = g_malloc(MAX(strlen(message) + 1, BUF_LONG)); |
| 794 strcpy(buffy, message); | |
| 795 angel = g_strdup(who); | |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
796 |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
797 plugin_return = GPOINTER_TO_INT( |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
798 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
| 8999 | 799 "receiving-chat-msg", g->account, |
| 12216 | 800 &angel, &buffy, conv, &flags)); |
| 3163 | 801 |
| 802 if (!buffy || !angel || plugin_return) { | |
|
12894
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
803 g_free(buffy); |
|
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
804 g_free(angel); |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2359
diff
changeset
|
805 return; |
| 3163 | 806 } |
| 807 who = angel; | |
| 808 message = buffy; | |
| 1 | 809 |
| 8999 | 810 gaim_signal_emit(gaim_conversations_get_handle(), "received-chat-msg", g->account, |
| 12216 | 811 who, message, conv, flags); |
| 8999 | 812 |
| 8882 | 813 /* Make sure URLs are clickable */ |
| 814 buf = gaim_markup_linkify(message); | |
|
1643
d7e380618fd5
[gaim-migrate @ 1653]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1587
diff
changeset
|
815 |
| 12216 | 816 gaim_conv_chat_write(chat, who, buf, flags, mtime); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
817 |
| 6350 | 818 g_free(angel); |
|
2296
878503b60006
[gaim-migrate @ 2306]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
819 g_free(buf); |
| 6062 | 820 g_free(buffy); |
| 1 | 821 } |
| 9466 | 822 |
| 823 void serv_send_file(GaimConnection *gc, const char *who, const char *file) | |
| 824 { | |
| 825 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 10751 | 826 |
| 9466 | 827 if (gc != NULL && gc->prpl != NULL) |
| 828 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 829 | |
| 9647 | 830 if (prpl_info && prpl_info->send_file) { |
| 831 if (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who)) { | |
| 832 prpl_info->send_file(gc, who, file); | |
| 833 } | |
| 834 } | |
| 9466 | 835 } |
