src/server.c

changeset 12216
d80739091a63
parent 12116
17bf39d2678f
child 12272
4eee92ead973
equal deleted inserted replaced
12215:aefc01185eda 12216:d80739091a63
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
605 */ 599 */
606 600
607 if (cnv == NULL) 601 if (cnv == NULL)
608 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, gc->account, name); 602 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, gc->account, name);
609 603
610 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, msgflags, mtime); 604 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, flags, mtime);
611 } 605 }
612 606
613 g_free(name); 607 g_free(name);
614 g_free(message); 608 g_free(message);
615 } 609 }
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 }

mercurial