| 111 |
111 |
| 112 return lar; |
112 return lar; |
| 113 } |
113 } |
| 114 |
114 |
| 115 int serv_send_im(GaimConnection *gc, const char *name, const char *message, |
115 int serv_send_im(GaimConnection *gc, const char *name, const char *message, |
| 116 GaimConvImFlags imflags) |
116 GaimMessageFlags flags) |
| 117 { |
117 { |
| 118 GaimConversation *conv; |
118 GaimConversation *conv; |
| 119 GaimAccount *account; |
119 GaimAccount *account; |
| 120 GaimPresence *presence; |
120 GaimPresence *presence; |
| 121 GaimPluginProtocolInfo *prpl_info = NULL; |
121 GaimPluginProtocolInfo *prpl_info = NULL; |
| 129 presence = gaim_account_get_presence(account); |
129 presence = gaim_account_get_presence(account); |
| 130 |
130 |
| 131 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
131 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
| 132 |
132 |
| 133 if (prpl_info && prpl_info->send_im) |
133 if (prpl_info && prpl_info->send_im) |
| 134 val = prpl_info->send_im(gc, name, message, imflags); |
134 val = prpl_info->send_im(gc, name, message, flags); |
| 135 |
135 |
| 136 /* Only update the last_sent_time if the user actually sent the message */ |
136 /* Only update the last_sent_time if the user actually sent the message */ |
| 137 if (!(imflags & GAIM_CONV_IM_AUTO_RESP)) |
137 if (!(flags & GAIM_MESSAGE_AUTO_RESP)) |
| 138 time(&gc->last_sent_time); |
138 time(&gc->last_sent_time); |
| 139 |
139 |
| 140 /* |
140 /* |
| 141 * XXX - If "only auto-reply when away & idle" is set, then shouldn't |
141 * XXX - If "only auto-reply when away & idle" is set, then shouldn't |
| 142 * this only reset lar->sent if we're away AND idle? |
142 * this only reset lar->sent if we're away AND idle? |
| 398 |
398 |
| 399 if (prpl_info && prpl_info->chat_whisper) |
399 if (prpl_info && prpl_info->chat_whisper) |
| 400 prpl_info->chat_whisper(g, id, who, message); |
400 prpl_info->chat_whisper(g, id, who, message); |
| 401 } |
401 } |
| 402 |
402 |
| 403 int serv_chat_send(GaimConnection *gc, int id, const char *message) |
403 int serv_chat_send(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags) |
| 404 { |
404 { |
| 405 int val = -EINVAL; |
405 int val = -EINVAL; |
| 406 GaimPluginProtocolInfo *prpl_info = NULL; |
406 GaimPluginProtocolInfo *prpl_info = NULL; |
| 407 |
407 |
| 408 if (gc->prpl != NULL) |
408 if (gc->prpl != NULL) |
| 409 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
409 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
| 410 |
410 |
| 411 if (prpl_info && prpl_info->chat_send) |
411 if (prpl_info && prpl_info->chat_send) |
| 412 val = prpl_info->chat_send(gc, id, message); |
412 val = prpl_info->chat_send(gc, id, message, flags); |
| 413 |
413 |
| 414 time(&gc->last_sent_time); |
414 time(&gc->last_sent_time); |
| 415 |
415 |
| 416 return val; |
416 return val; |
| 417 } |
417 } |
| 431 /* |
431 /* |
| 432 * woo. i'm actually going to comment this function. isn't that fun. make |
432 * woo. i'm actually going to comment this function. isn't that fun. make |
| 433 * sure to follow along, kids |
433 * sure to follow along, kids |
| 434 */ |
434 */ |
| 435 void serv_got_im(GaimConnection *gc, const char *who, const char *msg, |
435 void serv_got_im(GaimConnection *gc, const char *who, const char *msg, |
| 436 GaimConvImFlags imflags, time_t mtime) |
436 GaimMessageFlags flags, time_t mtime) |
| 437 { |
437 { |
| 438 GaimAccount *account; |
438 GaimAccount *account; |
| 439 GaimConversation *cnv; |
439 GaimConversation *cnv; |
| 440 GaimPresence *presence; |
440 GaimPresence *presence; |
| 441 GaimStatus *status; |
441 GaimStatus *status; |
| 442 GaimMessageFlags msgflags; |
|
| 443 char *message, *name; |
442 char *message, *name; |
| 444 char *angel, *buffy; |
443 char *angel, *buffy; |
| 445 int plugin_return; |
444 int plugin_return; |
| 446 |
445 |
| 447 g_return_if_fail(msg != NULL); |
446 g_return_if_fail(msg != NULL); |
| 465 angel = g_strdup(who); |
464 angel = g_strdup(who); |
| 466 |
465 |
| 467 plugin_return = GPOINTER_TO_INT( |
466 plugin_return = GPOINTER_TO_INT( |
| 468 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
467 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
| 469 "receiving-im-msg", gc->account, |
468 "receiving-im-msg", gc->account, |
| 470 &angel, &buffy, cnv, &imflags)); |
469 &angel, &buffy, cnv, &flags)); |
| 471 |
470 |
| 472 if (!buffy || !angel || plugin_return) { |
471 if (!buffy || !angel || plugin_return) { |
| 473 if (buffy) |
472 if (buffy) |
| 474 g_free(buffy); |
473 g_free(buffy); |
| 475 if (angel) |
474 if (angel) |
| 479 |
478 |
| 480 name = angel; |
479 name = angel; |
| 481 message = buffy; |
480 message = buffy; |
| 482 |
481 |
| 483 gaim_signal_emit(gaim_conversations_get_handle(), "received-im-msg", gc->account, |
482 gaim_signal_emit(gaim_conversations_get_handle(), "received-im-msg", gc->account, |
| 484 name, message, cnv, imflags); |
483 name, message, cnv, flags); |
| 485 |
484 |
| 486 /* Make sure URLs are clickable */ |
485 /* Make sure URLs are clickable */ |
| 487 buffy = gaim_markup_linkify(message); |
486 buffy = gaim_markup_linkify(message); |
| 488 g_free(message); |
487 g_free(message); |
| 489 message = buffy; |
488 message = buffy; |
| 490 |
489 |
| 491 /* |
490 /* |
| 492 * Um. When we call gaim_conversation_write with the message we received, |
491 * XXX: Should we be setting this here, or relying on prpls to set it? |
| 493 * it's nice to pass whether or not it was an auto-response. So if it |
|
| 494 * was an auto-response, we set the appropriate flag. This is just so |
|
| 495 * prpls don't have to know about GAIM_MESSAGE_* (though some do anyway). |
|
| 496 */ |
492 */ |
| 497 msgflags = GAIM_MESSAGE_RECV; |
493 flags |= GAIM_MESSAGE_RECV; |
| 498 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
|
| 499 msgflags |= GAIM_MESSAGE_AUTO_RESP; |
|
| 500 |
494 |
| 501 /* |
495 /* |
| 502 * Alright. Two cases for how to handle this. Either we're away or |
496 * Alright. Two cases for how to handle this. Either we're away or |
| 503 * we're not. If we're not, then it's easy. If we are, then there |
497 * we're not. If we're not, then it's easy. If we are, then there |
| 504 * are three or four different ways of handling it and different |
498 * are three or four different ways of handling it and different |
| 514 const char *away_msg; |
508 const char *away_msg; |
| 515 |
509 |
| 516 if (cnv == NULL) |
510 if (cnv == NULL) |
| 517 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, name); |
511 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, name); |
| 518 |
512 |
| 519 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, msgflags, mtime); |
513 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, flags, mtime); |
| 520 |
514 |
| 521 /* |
515 /* |
| 522 * Don't autorespond if: |
516 * Don't autorespond if: |
| 523 * |
517 * |
| 524 * - it's not supported on this connection |
518 * - it's not supported on this connection |
| 567 if ((away_msg == NULL) || (*away_msg == '\0')) |
561 if ((away_msg == NULL) || (*away_msg == '\0')) |
| 568 return; |
562 return; |
| 569 |
563 |
| 570 /* Move this to oscar.c! */ |
564 /* Move this to oscar.c! */ |
| 571 buffy = gaim_str_sub_away_formatters(away_msg, alias); |
565 buffy = gaim_str_sub_away_formatters(away_msg, alias); |
| 572 serv_send_im(gc, name, buffy, GAIM_CONV_IM_AUTO_RESP); |
566 serv_send_im(gc, name, buffy, GAIM_MESSAGE_AUTO_RESP); |
| 573 |
567 |
| 574 #if 0 |
568 #if 0 |
| 575 if (!cnv && awayqueue && |
569 if (!cnv && awayqueue && |
| 576 gaim_prefs_get_bool("/gaim/gtk/away/queue_messages")) { |
570 gaim_prefs_get_bool("/gaim/gtk/away/queue_messages")) { |
| 577 |
571 |
| 789 |
783 |
| 790 gaim_conv_chat_left(GAIM_CONV_CHAT(conv)); |
784 gaim_conv_chat_left(GAIM_CONV_CHAT(conv)); |
| 791 } |
785 } |
| 792 |
786 |
| 793 void serv_got_chat_in(GaimConnection *g, int id, const char *who, |
787 void serv_got_chat_in(GaimConnection *g, int id, const char *who, |
| 794 GaimConvChatFlags chatflags, const char *message, time_t mtime) |
788 GaimMessageFlags flags, const char *message, time_t mtime) |
| 795 { |
789 { |
| 796 GaimMessageFlags msgflags = 0; |
|
| 797 GSList *bcs; |
790 GSList *bcs; |
| 798 GaimConversation *conv = NULL; |
791 GaimConversation *conv = NULL; |
| 799 GaimConvChat *chat = NULL; |
792 GaimConvChat *chat = NULL; |
| 800 char *buf; |
793 char *buf; |
| 801 char *buffy, *angel; |
794 char *buffy, *angel; |
| 828 angel = g_strdup(who); |
821 angel = g_strdup(who); |
| 829 |
822 |
| 830 plugin_return = GPOINTER_TO_INT( |
823 plugin_return = GPOINTER_TO_INT( |
| 831 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
824 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
| 832 "receiving-chat-msg", g->account, |
825 "receiving-chat-msg", g->account, |
| 833 &angel, &buffy, conv, &chatflags)); |
826 &angel, &buffy, conv, &flags)); |
| 834 |
827 |
| 835 if (!buffy || !angel || plugin_return) { |
828 if (!buffy || !angel || plugin_return) { |
| 836 if (buffy) |
829 if (buffy) |
| 837 g_free(buffy); |
830 g_free(buffy); |
| 838 if (angel) |
831 if (angel) |
| 841 } |
834 } |
| 842 who = angel; |
835 who = angel; |
| 843 message = buffy; |
836 message = buffy; |
| 844 |
837 |
| 845 gaim_signal_emit(gaim_conversations_get_handle(), "received-chat-msg", g->account, |
838 gaim_signal_emit(gaim_conversations_get_handle(), "received-chat-msg", g->account, |
| 846 who, message, conv, chatflags); |
839 who, message, conv, flags); |
| 847 |
840 |
| 848 /* Make sure URLs are clickable */ |
841 /* Make sure URLs are clickable */ |
| 849 buf = gaim_markup_linkify(message); |
842 buf = gaim_markup_linkify(message); |
| 850 |
843 |
| 851 if (chatflags & GAIM_CONV_CHAT_WHISPER) |
844 gaim_conv_chat_write(chat, who, buf, flags, mtime); |
| 852 msgflags |= GAIM_MESSAGE_WHISPER; |
|
| 853 if (chatflags & GAIM_CONV_CHAT_DELAYED) |
|
| 854 msgflags |= GAIM_MESSAGE_DELAYED; |
|
| 855 if (chatflags & GAIM_CONV_CHAT_ALERT) |
|
| 856 msgflags |= GAIM_MESSAGE_NICK; |
|
| 857 |
|
| 858 gaim_conv_chat_write(chat, who, buf, msgflags, mtime); |
|
| 859 |
845 |
| 860 g_free(angel); |
846 g_free(angel); |
| 861 g_free(buf); |
847 g_free(buf); |
| 862 g_free(buffy); |
848 g_free(buffy); |
| 863 } |
849 } |