comparison src/server.c @ 13842:a9ff4499d9ce

[gaim-migrate @ 16295] Hopefully improve the typing notification code so it's a lot easier to understand. This also creates a distinction between the signals emitted when receiving GAIM_TYPED and GAIM_NOT_TYPING messages (by adding a gaim-typed signal). And the gaim-not-typing signal should work in all cases. Most of this is stuff I changed last week during work, thanks to Meebo committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 20 Jun 2006 08:17:49 +0000
parents 99688ab310c8
children 7d513e44201b
comparison
equal deleted inserted replaced
13841:f3d4a9902ead 13842:a9ff4499d9ce
36 #include "util.h" 36 #include "util.h"
37 37
38 #define SECS_BEFORE_RESENDING_AUTORESPONSE 600 38 #define SECS_BEFORE_RESENDING_AUTORESPONSE 600
39 #define SEX_BEFORE_RESENDING_AUTORESPONSE "Only after you're married" 39 #define SEX_BEFORE_RESENDING_AUTORESPONSE "Only after you're married"
40 40
41 /* This should return the elapsed time in seconds in which Gaim will not send 41 unsigned int
42 * typing notifications. 42 serv_send_typing(GaimConnection *gc, const char *name, GaimTypingState state)
43 * if it returns zero, it will not send any more typing notifications 43 {
44 * typing is a flag - TRUE for typing, FALSE for stopped typing */ 44 GaimPluginProtocolInfo *prpl_info = NULL;
45 int serv_send_typing(GaimConnection *g, const char *name, int typing) { 45
46 GaimPluginProtocolInfo *prpl_info = NULL; 46 if (gc != NULL && gc->prpl != NULL)
47 47 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
48 if (g != NULL && g->prpl != NULL) 48
49 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); 49 if (prpl_info && prpl_info->send_typing)
50 50 return prpl_info->send_typing(gc, name, state);
51 if (g && prpl_info && prpl_info->send_typing)
52 return prpl_info->send_typing(g, name, typing);
53 51
54 return 0; 52 return 0;
55 } 53 }
56 54
57 static GSList *last_auto_responses = NULL; 55 static GSList *last_auto_responses = NULL;
148 struct last_auto_response *lar; 146 struct last_auto_response *lar;
149 lar = get_last_auto_response(gc, name); 147 lar = get_last_auto_response(gc, name);
150 lar->sent = time(NULL); 148 lar->sent = time(NULL);
151 } 149 }
152 150
153 if (conv && gaim_conv_im_get_type_again_timeout(GAIM_CONV_IM(conv))) 151 if (conv && gaim_conv_im_get_send_typed_timeout(GAIM_CONV_IM(conv)))
154 gaim_conv_im_stop_type_again_timeout(GAIM_CONV_IM(conv)); 152 gaim_conv_im_stop_send_typed_timeout(GAIM_CONV_IM(conv));
155 153
156 return val; 154 return val;
157 } 155 }
158 156
159 void serv_get_info(GaimConnection *gc, const char *name) 157 void serv_get_info(GaimConnection *gc, const char *name)
591 "buddy-typing", gc->account, name); 589 "buddy-typing", gc->account, name);
592 } 590 }
593 else 591 else
594 { 592 {
595 gaim_signal_emit(gaim_conversations_get_handle(), 593 gaim_signal_emit(gaim_conversations_get_handle(),
596 "buddy-typing-stopped", gc->account, name); 594 "buddy-typed", gc->account, name);
597 } 595 }
598 } 596 }
599 597
600 if (conv != NULL && timeout > 0) 598 if (conv != NULL && timeout > 0)
601 gaim_conv_im_start_typing_timeout(im, timeout); 599 gaim_conv_im_start_typing_timeout(im, timeout);
615 return; 613 return;
616 614
617 gaim_conv_im_stop_typing_timeout(im); 615 gaim_conv_im_stop_typing_timeout(im);
618 gaim_conv_im_set_typing_state(im, GAIM_NOT_TYPING); 616 gaim_conv_im_set_typing_state(im, GAIM_NOT_TYPING);
619 gaim_conv_im_update_typing(im); 617 gaim_conv_im_update_typing(im);
618 }
619 else
620 {
621 gaim_signal_emit(gaim_conversations_get_handle(),
622 "buddy-typing-stopped", gc->account, name);
620 } 623 }
621 624
622 gaim_signal_emit(gaim_conversations_get_handle(), 625 gaim_signal_emit(gaim_conversations_get_handle(),
623 "buddy-typing-stopped", gc->account, name); 626 "buddy-typing-stopped", gc->account, name);
624 } 627 }