src/server.c

changeset 6485
3c7ba18e32f1
parent 6479
ed29d5b112b5
child 6506
c3f40279e97b
equal deleted inserted replaced
6484:b8558c29e331 6485:3c7ba18e32f1
26 #include "notify.h" 26 #include "notify.h"
27 #include "pounce.h" 27 #include "pounce.h"
28 #include "prefs.h" 28 #include "prefs.h"
29 #include "prpl.h" 29 #include "prpl.h"
30 #include "request.h" 30 #include "request.h"
31 #include "signals.h"
31 #include "server.h" 32 #include "server.h"
32 #include "sound.h" 33 #include "sound.h"
33 #include "util.h" 34 #include "util.h"
34 35
35 /* XXX UI Stuff */ 36 /* XXX UI Stuff */
59 60
60 gaim_debug(GAIM_DEBUG_INFO, "server", 61 gaim_debug(GAIM_DEBUG_INFO, "server",
61 PACKAGE " " VERSION " logging in %s using %s\n", 62 PACKAGE " " VERSION " logging in %s using %s\n",
62 account->username, p->info->name); 63 account->username, p->info->name);
63 64
64 gaim_event_broadcast(event_connecting, account); 65 gaim_signal_emit(gaim_accounts_get_handle(),
66 "account-connecting", account);
65 prpl_info->login(account); 67 prpl_info->login(account);
66 } 68 }
67 } 69 }
68 70
69 static gboolean send_keepalive(gpointer d) 71 static gboolean send_keepalive(gpointer d)
354 356
355 357
356 void serv_set_away(GaimConnection *gc, const char *state, const char *message) 358 void serv_set_away(GaimConnection *gc, const char *state, const char *message)
357 { 359 {
358 GaimPluginProtocolInfo *prpl_info = NULL; 360 GaimPluginProtocolInfo *prpl_info = NULL;
361 GaimAccount *account;
359 362
360 if (gc->away_state == NULL && state == NULL && 363 if (gc->away_state == NULL && state == NULL &&
361 gc->away == NULL && message == NULL) { 364 gc->away == NULL && message == NULL) {
362 365
363 return; 366 return;
372 } 375 }
373 376
374 if (gc != NULL && gc->prpl != NULL) 377 if (gc != NULL && gc->prpl != NULL)
375 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); 378 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
376 379
380 account = gaim_connection_get_account(gc);
381
377 if (prpl_info && prpl_info->set_away) { 382 if (prpl_info && prpl_info->set_away) {
378 if (gc->away_state) { 383 if (gc->away_state) {
379 g_free(gc->away_state); 384 g_free(gc->away_state);
380 gc->away_state = NULL; 385 gc->away_state = NULL;
381 } 386 }
384 389
385 if (gc->away && state) { 390 if (gc->away && state) {
386 gc->away_state = g_strdup(state); 391 gc->away_state = g_strdup(state);
387 } 392 }
388 393
389 gaim_event_broadcast(event_away, gc, state, message); 394 gaim_signal_emit(gaim_accounts_get_handle(), "account-away",
390 395 account, state, message);
391 } 396 }
392 397
393 /* New away message... Clear out the record of sent autoresponses */ 398 /* New away message... Clear out the record of sent autoresponses */
394 flush_last_auto_responses(gc); 399 flush_last_auto_responses(gc);
395 400
409 } 414 }
410 415
411 void serv_set_info(GaimConnection *g, const char *info) 416 void serv_set_info(GaimConnection *g, const char *info)
412 { 417 {
413 GaimPluginProtocolInfo *prpl_info = NULL; 418 GaimPluginProtocolInfo *prpl_info = NULL;
414 419 GaimAccount *account;
415 if (g != NULL && g->prpl != NULL) 420
416 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); 421 if (g != NULL && g->prpl != NULL)
417 422 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl);
418 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->set_info) { 423
419 if (gaim_event_broadcast(event_set_info, g, info)) 424 if (prpl_info && g_list_find(gaim_connections_get_all(), g) &&
425 prpl_info->set_info) {
426
427 account = gaim_connection_get_account(g);
428
429 if (gaim_signal_emit_return_1(gaim_accounts_get_handle(),
430 "account-setting-info", account, info))
420 return; 431 return;
421 432
422 prpl_info->set_info(g, info); 433 prpl_info->set_info(g, info);
434
435 gaim_signal_emit(gaim_accounts_get_handle(),
436 "account-set-info", account, info);
423 } 437 }
424 } 438 }
425 439
426 void serv_change_passwd(GaimConnection *g, const char *orig, const char *new) 440 void serv_change_passwd(GaimConnection *g, const char *orig, const char *new)
427 { 441 {
676 } 690 }
677 691
678 void serv_chat_invite(GaimConnection *g, int id, const char *message, const char *name) 692 void serv_chat_invite(GaimConnection *g, int id, const char *message, const char *name)
679 { 693 {
680 GaimPluginProtocolInfo *prpl_info = NULL; 694 GaimPluginProtocolInfo *prpl_info = NULL;
695 GaimConversation *conv;
681 char *buffy = message && *message ? g_strdup(message) : NULL; 696 char *buffy = message && *message ? g_strdup(message) : NULL;
682 697
683 if (g != NULL && g->prpl != NULL) 698 conv = gaim_find_chat(g, id);
684 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); 699
685 700 if (conv == NULL)
686 gaim_event_broadcast(event_chat_send_invite, g, id, name, &buffy); 701 return;
702
703 if (g != NULL && g->prpl != NULL)
704 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl);
705
706 gaim_signal_emit(gaim_conversations_get_handle(), "chat-inviting-user",
707 conv, name, &buffy);
687 708
688 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->chat_invite) 709 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->chat_invite)
689 prpl_info->chat_invite(g, id, buffy, name); 710 prpl_info->chat_invite(g, id, buffy, name);
711
712 gaim_signal_emit(gaim_conversations_get_handle(), "chat-invited-user",
713 conv, name, buffy);
690 714
691 if (buffy) 715 if (buffy)
692 g_free(buffy); 716 g_free(buffy);
693 } 717 }
694 718
829 */ 853 */
830 if (len < 0) { 854 if (len < 0) {
831 buffy = g_malloc(MAX(strlen(msg) + 1, BUF_LONG)); 855 buffy = g_malloc(MAX(strlen(msg) + 1, BUF_LONG));
832 strcpy(buffy, msg); 856 strcpy(buffy, msg);
833 angel = g_strdup(who); 857 angel = g_strdup(who);
834 plugin_return = gaim_event_broadcast(event_im_recv, gc, &angel, &buffy, &flags); 858
859 plugin_return = GPOINTER_TO_INT(
860 gaim_signal_emit_return_1(gaim_conversations_get_handle(),
861 "received-im-msg",
862 cnv, &angel, &buffy, &flags));
835 863
836 if (!buffy || !angel || plugin_return) { 864 if (!buffy || !angel || plugin_return) {
837 if (buffy) 865 if (buffy)
838 g_free(buffy); 866 g_free(buffy);
839 if (angel) 867 if (angel)
1047 away | WFLAG_RECV, mtime); 1075 away | WFLAG_RECV, mtime);
1048 gaim_window_flash(gaim_conversation_get_window(cnv)); 1076 gaim_window_flash(gaim_conversation_get_window(cnv));
1049 } 1077 }
1050 } 1078 }
1051 1079
1052 gaim_event_broadcast(event_im_displayed_rcvd, gc, name, message, flags, mtime);
1053 g_free(name); 1080 g_free(name);
1054 g_free(message); 1081 g_free(message);
1055 } 1082 }
1056 1083
1057 1084
1095 gaim_blist_save(); 1122 gaim_blist_save();
1096 } 1123 }
1097 1124
1098 if (!b->idle && idle) { 1125 if (!b->idle && idle) {
1099 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_IDLE); 1126 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_IDLE);
1100 gaim_event_broadcast(event_buddy_idle, gc, b->name); 1127 gaim_signal_emit(gaim_blist_get_handle(), "buddy-idle", account, b);
1101 system_log(log_idle, gc, b, OPT_LOG_BUDDY_IDLE); 1128 system_log(log_idle, gc, b, OPT_LOG_BUDDY_IDLE);
1102 } else if (b->idle && !idle) { 1129 } else if (b->idle && !idle) {
1103 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_IDLE_RETURN); 1130 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_IDLE_RETURN);
1104 gaim_event_broadcast(event_buddy_unidle, gc, b->name); 1131 gaim_signal_emit(gaim_blist_get_handle(), "buddy-unidle", account, b);
1105 system_log(log_unidle, gc, b, OPT_LOG_BUDDY_IDLE); 1132 system_log(log_unidle, gc, b, OPT_LOG_BUDDY_IDLE);
1106 } 1133 }
1107 1134
1108 gaim_blist_update_buddy_idle(b, idle); 1135 gaim_blist_update_buddy_idle(b, idle);
1109 gaim_blist_update_buddy_evil(b, evil); 1136 gaim_blist_update_buddy_evil(b, evil);
1192 1219
1193 1220
1194 void serv_got_eviled(GaimConnection *gc, const char *name, int lev) 1221 void serv_got_eviled(GaimConnection *gc, const char *name, int lev)
1195 { 1222 {
1196 char buf2[1024]; 1223 char buf2[1024];
1197 1224 GaimAccount *account;
1198 gaim_event_broadcast(event_warned, gc, name, lev); 1225
1226 account = gaim_connection_get_account(gc);
1227
1228 gaim_signal_emit(gaim_accounts_get_handle(), "account-warned",
1229 account, name, lev);
1199 1230
1200 if (gc->evil >= lev) { 1231 if (gc->evil >= lev) {
1201 gc->evil = lev; 1232 gc->evil = lev;
1202 return; 1233 return;
1203 } 1234 }
1229 gaim_im_set_typing_state(im, state); 1260 gaim_im_set_typing_state(im, state);
1230 gaim_im_update_typing(im); 1261 gaim_im_update_typing(im);
1231 1262
1232 b = gaim_find_buddy(gc->account, name); 1263 b = gaim_find_buddy(gc->account, name);
1233 1264
1234 gaim_event_broadcast(event_got_typing, gc, name); 1265 gaim_signal_emit(gaim_conversations_get_handle(), "buddy-typing", cnv);
1235 1266
1236 if (b != NULL) { 1267 if (b != NULL) {
1237 if (state == GAIM_TYPING) 1268 if (state == GAIM_TYPING)
1238 gaim_pounce_execute(gc->account, name, GAIM_POUNCE_TYPING); 1269 gaim_pounce_execute(gc->account, name, GAIM_POUNCE_TYPING);
1239 else 1270 else
1296 char buf2[BUF_LONG]; 1327 char buf2[BUF_LONG];
1297 struct chat_invite_data *cid = g_new0(struct chat_invite_data, 1); 1328 struct chat_invite_data *cid = g_new0(struct chat_invite_data, 1);
1298 1329
1299 account = gaim_connection_get_account(gc); 1330 account = gaim_connection_get_account(gc);
1300 1331
1301 gaim_event_broadcast(event_chat_invited, gc, who, name, message); 1332 gaim_signal_emit(gaim_conversations_get_handle(),
1333 "chat-invited", account, who, name, message);
1302 1334
1303 if (message) 1335 if (message)
1304 g_snprintf(buf2, sizeof(buf2), 1336 g_snprintf(buf2, sizeof(buf2),
1305 _("User '%s' invites %s to buddy chat room: '%s'\n%s"), 1337 _("User '%s' invites %s to buddy chat room: '%s'\n%s"),
1306 who, gaim_account_get_username(account), name, message); 1338 who, gaim_account_get_username(account), name, message);
1319 } 1351 }
1320 1352
1321 GaimConversation *serv_got_joined_chat(GaimConnection *gc, 1353 GaimConversation *serv_got_joined_chat(GaimConnection *gc,
1322 int id, const char *name) 1354 int id, const char *name)
1323 { 1355 {
1324 GaimConversation *b; 1356 GaimConversation *conv;
1325 GaimChat *chat; 1357 GaimChat *chat;
1326 1358 GaimAccount *account;
1327 b = gaim_conversation_new(GAIM_CONV_CHAT, gc->account, name); 1359
1328 chat = GAIM_CHAT(b); 1360 account = gaim_connection_get_account(gc);
1329 1361
1330 gc->buddy_chats = g_slist_append(gc->buddy_chats, b); 1362 conv = gaim_conversation_new(GAIM_CONV_CHAT, account, name);
1363 chat = GAIM_CHAT(conv);
1364
1365 gc->buddy_chats = g_slist_append(gc->buddy_chats, conv);
1331 1366
1332 gaim_chat_set_id(chat, id); 1367 gaim_chat_set_id(chat, id);
1333 1368
1334 /* TODO Move this to UI logging code! */ 1369 /* TODO Move this to UI logging code! */
1335 if (gaim_prefs_get_bool("/gaim/gtk/logging/log_chats") || 1370 if (gaim_prefs_get_bool("/gaim/gtk/logging/log_chats") ||
1336 find_log_info(gaim_conversation_get_name(b))) { 1371 find_log_info(gaim_conversation_get_name(conv))) {
1337 1372
1338 FILE *fd; 1373 FILE *fd;
1339 char *filename; 1374 char *filename;
1340 1375
1341 filename = (char *)malloc(100); 1376 filename = (char *)malloc(100);
1342 g_snprintf(filename, 100, "%s.chat", gaim_conversation_get_name(b)); 1377 g_snprintf(filename, 100, "%s.chat", gaim_conversation_get_name(conv));
1343 1378
1344 fd = open_log_file(filename, TRUE); 1379 fd = open_log_file(filename, TRUE);
1345 1380
1346 if (fd) { 1381 if (fd) {
1347 if (!gaim_prefs_get_bool("/gaim/gtk/logging/strip_html")) 1382 if (!gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
1354 fclose(fd); 1389 fclose(fd);
1355 } 1390 }
1356 free(filename); 1391 free(filename);
1357 } 1392 }
1358 1393
1359 gaim_window_show(gaim_conversation_get_window(b)); 1394 gaim_window_show(gaim_conversation_get_window(conv));
1360 gaim_window_switch_conversation(gaim_conversation_get_window(b), 1395 gaim_window_switch_conversation(gaim_conversation_get_window(conv),
1361 gaim_conversation_get_index(b)); 1396 gaim_conversation_get_index(conv));
1362 1397
1363 gaim_event_broadcast(event_chat_join, gc, id, name); 1398 gaim_signal_emit(gaim_conversations_get_handle(), "chat-joined", conv);
1364 1399
1365 return b; 1400 return conv;
1366 } 1401 }
1367 1402
1368 void serv_got_chat_left(GaimConnection *g, int id) 1403 void serv_got_chat_left(GaimConnection *g, int id)
1369 { 1404 {
1370 GSList *bcs; 1405 GSList *bcs;
1371 GaimConversation *conv = NULL; 1406 GaimConversation *conv = NULL;
1372 GaimChat *chat = NULL; 1407 GaimChat *chat = NULL;
1408 GaimAccount *account;
1409
1410 account = gaim_connection_get_account(g);
1373 1411
1374 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) { 1412 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) {
1375 conv = (GaimConversation *)bcs->data; 1413 conv = (GaimConversation *)bcs->data;
1376 1414
1377 chat = GAIM_CHAT(conv); 1415 chat = GAIM_CHAT(conv);
1383 } 1421 }
1384 1422
1385 if (!conv) 1423 if (!conv)
1386 return; 1424 return;
1387 1425
1388 gaim_event_broadcast(event_chat_leave, g, gaim_chat_get_id(chat)); 1426 gaim_signal_emit(gaim_conversations_get_handle(), "chat-left", conv);
1389 1427
1390 gaim_debug(GAIM_DEBUG_INFO, "server", "Leaving room: %s\n", 1428 gaim_debug(GAIM_DEBUG_INFO, "server", "Leaving room: %s\n",
1391 gaim_conversation_get_name(conv)); 1429 gaim_conversation_get_name(conv));
1392 1430
1393 g->buddy_chats = g_slist_remove(g->buddy_chats, conv); 1431 g->buddy_chats = g_slist_remove(g->buddy_chats, conv);
1429 */ 1467 */
1430 1468
1431 buffy = g_malloc(MAX(strlen(message) + 1, BUF_LONG)); 1469 buffy = g_malloc(MAX(strlen(message) + 1, BUF_LONG));
1432 strcpy(buffy, message); 1470 strcpy(buffy, message);
1433 angel = g_strdup(who); 1471 angel = g_strdup(who);
1434 plugin_return = gaim_event_broadcast(event_chat_recv, g, gaim_chat_get_id(chat), 1472
1435 &angel, &buffy); 1473 plugin_return = GPOINTER_TO_INT(
1474 gaim_signal_emit_return_1(gaim_conversations_get_handle(),
1475 "received-chat-msg",
1476 conv, &angel, &buffy));
1436 1477
1437 if (!buffy || !angel || plugin_return) { 1478 if (!buffy || !angel || plugin_return) {
1438 if (buffy) 1479 if (buffy)
1439 g_free(buffy); 1480 g_free(buffy);
1440 if (angel) 1481 if (angel)

mercurial