Mercurial > pidgin
comparison src/server.c @ 6392:e9974608b319
[gaim-migrate @ 6897]
deryni absolutely rocks. Amazing guy. We now have these beautiful protocol
icons on tabs that update to reflect status. Away, grey on idle, even the
sign on/off doors. Wow. This will no doubt be known as the highlight of
0.67.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 06 Aug 2003 11:38:57 +0000 |
parents | 34c07f5f34a0 |
children | 96de6d9eb422 |
comparison
equal
deleted
inserted
replaced
6391:4b2d8d7d0118 | 6392:e9974608b319 |
---|---|
1017 | 1017 |
1018 void serv_got_update(GaimConnection *gc, const char *name, int loggedin, | 1018 void serv_got_update(GaimConnection *gc, const char *name, int loggedin, |
1019 int evil, time_t signon, time_t idle, int type) | 1019 int evil, time_t signon, time_t idle, int type) |
1020 { | 1020 { |
1021 GaimAccount *account; | 1021 GaimAccount *account; |
1022 GaimConversation *c; | |
1022 struct buddy *b; | 1023 struct buddy *b; |
1023 GSList *buddies; | 1024 GSList *buddies; |
1024 | 1025 |
1025 account = gaim_connection_get_account(gc); | 1026 account = gaim_connection_get_account(gc); |
1026 b = gaim_find_buddy(account, name); | 1027 b = gaim_find_buddy(account, name); |
1028 c = gaim_find_conversation(b->name); | |
1027 | 1029 |
1028 if (signon && (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->options & | 1030 if (signon && (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->options & |
1029 OPT_PROTO_CORRECT_TIME)) { | 1031 OPT_PROTO_CORRECT_TIME)) { |
1030 | 1032 |
1031 char *tmp = g_strdup(normalize(name)); | 1033 char *tmp = g_strdup(normalize(name)); |
1073 system_log(log_away, gc, b, OPT_LOG_BUDDY_AWAY); | 1075 system_log(log_away, gc, b, OPT_LOG_BUDDY_AWAY); |
1074 } | 1076 } |
1075 | 1077 |
1076 gaim_blist_update_buddy_status(b, type); | 1078 gaim_blist_update_buddy_status(b, type); |
1077 | 1079 |
1078 | |
1079 if (loggedin) { | 1080 if (loggedin) { |
1080 if (!GAIM_BUDDY_IS_ONLINE(b)) { | 1081 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
1081 GaimConversation *c = gaim_find_conversation(b->name); | 1082 if (gaim_prefs_get_bool("/core/conversations/im/show_login")) { |
1082 if (c != NULL && | 1083 if (c != NULL) { |
1083 gaim_prefs_get_bool("/core/conversations/im/show_login")) { | 1084 |
1084 | 1085 char *tmp = g_strdup_printf(_("%s logged in."), |
1085 char *tmp = g_strdup_printf(_("%s logged in."), | 1086 gaim_get_buddy_alias(b)); |
1086 gaim_get_buddy_alias(b)); | 1087 |
1087 | 1088 gaim_conversation_write(c, NULL, tmp, -1, |
1088 gaim_conversation_write(c, NULL, tmp, -1, | 1089 WFLAG_SYSTEM, time(NULL)); |
1089 WFLAG_SYSTEM, time(NULL)); | 1090 g_free(tmp); |
1090 g_free(tmp); | 1091 } |
1091 } | 1092 else if (awayqueue && find_queue_total_by_name(b->name)) { |
1092 else if (awayqueue && find_queue_total_by_name(b->name)) { | 1093 struct queued_message *qm = g_new0(struct queued_message, 1); |
1093 struct queued_message *qm = g_new0(struct queued_message, 1); | 1094 g_snprintf(qm->name, sizeof(qm->name), "%s", b->name); |
1094 g_snprintf(qm->name, sizeof(qm->name), "%s", b->name); | 1095 qm->message = g_strdup_printf(_("%s logged in."), |
1095 qm->message = g_strdup_printf(_("%s logged in."), | 1096 gaim_get_buddy_alias(b)); |
1096 gaim_get_buddy_alias(b)); | 1097 qm->account = gc->account; |
1097 qm->account = gc->account; | 1098 qm->tm = time(NULL); |
1098 qm->tm = time(NULL); | 1099 qm->flags = WFLAG_SYSTEM; |
1099 qm->flags = WFLAG_SYSTEM; | 1100 qm->len = -1; |
1100 qm->len = -1; | 1101 message_queue = g_slist_append(message_queue, qm); |
1101 message_queue = g_slist_append(message_queue, qm); | 1102 } |
1102 } | 1103 } |
1103 gaim_sound_play_event(GAIM_SOUND_BUDDY_ARRIVE); | 1104 gaim_sound_play_event(GAIM_SOUND_BUDDY_ARRIVE); |
1104 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_SIGNON); | 1105 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_SIGNON); |
1105 system_log(log_signon, gc, b, OPT_LOG_BUDDY_SIGNON); | 1106 system_log(log_signon, gc, b, OPT_LOG_BUDDY_SIGNON); |
1106 } | 1107 } |
1107 } else { | 1108 } else { |
1108 if (GAIM_BUDDY_IS_ONLINE(b)) { | 1109 if (GAIM_BUDDY_IS_ONLINE(b)) { |
1109 GaimConversation *c = gaim_find_conversation(b->name); | 1110 |
1110 if (c != NULL && | 1111 if (gaim_prefs_get_bool("/core/conversations/im/show_login")) { |
1111 gaim_prefs_get_bool("/core/conversations/im/show_login")) { | 1112 if (c != NULL) { |
1112 | 1113 |
1113 char *tmp = g_strdup_printf(_("%s logged out."), | 1114 char *tmp = g_strdup_printf(_("%s logged out."), |
1114 gaim_get_buddy_alias(b)); | 1115 gaim_get_buddy_alias(b)); |
1115 gaim_conversation_write(c, NULL, tmp, -1, | 1116 gaim_conversation_write(c, NULL, tmp, -1, |
1116 WFLAG_SYSTEM, time(NULL)); | 1117 WFLAG_SYSTEM, time(NULL)); |
1117 g_free(tmp); | 1118 g_free(tmp); |
1118 } else if (awayqueue && find_queue_total_by_name(b->name)) { | 1119 } else if (awayqueue && find_queue_total_by_name(b->name)) { |
1119 struct queued_message *qm = g_new0(struct queued_message, 1); | 1120 struct queued_message *qm = g_new0(struct queued_message, 1); |
1120 g_snprintf(qm->name, sizeof(qm->name), "%s", b->name); | 1121 g_snprintf(qm->name, sizeof(qm->name), "%s", b->name); |
1121 qm->message = g_strdup_printf(_("%s logged out."), | 1122 qm->message = g_strdup_printf(_("%s logged out."), |
1122 gaim_get_buddy_alias(b)); | 1123 gaim_get_buddy_alias(b)); |
1123 qm->account = gc->account; | 1124 qm->account = gc->account; |
1124 qm->tm = time(NULL); | 1125 qm->tm = time(NULL); |
1125 qm->flags = WFLAG_SYSTEM; | 1126 qm->flags = WFLAG_SYSTEM; |
1126 qm->len = -1; | 1127 qm->len = -1; |
1127 message_queue = g_slist_append(message_queue, qm); | 1128 message_queue = g_slist_append(message_queue, qm); |
1129 } | |
1128 } | 1130 } |
1129 serv_got_typing_stopped(gc, name); /* obviously not typing */ | 1131 serv_got_typing_stopped(gc, name); /* obviously not typing */ |
1130 gaim_sound_play_event(GAIM_SOUND_BUDDY_LEAVE); | 1132 gaim_sound_play_event(GAIM_SOUND_BUDDY_LEAVE); |
1131 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_SIGNOFF); | 1133 gaim_pounce_execute(gc->account, b->name, GAIM_POUNCE_SIGNOFF); |
1132 system_log(log_signoff, gc, b, OPT_LOG_BUDDY_SIGNON); | 1134 system_log(log_signoff, gc, b, OPT_LOG_BUDDY_SIGNON); |
1133 } | 1135 } |
1134 } | 1136 } |
1137 | |
1138 if (c != NULL) | |
1139 gaim_conversation_update(c, GAIM_CONV_UPDATE_AWAY); | |
1135 | 1140 |
1136 gaim_blist_update_buddy_presence(b, loggedin); | 1141 gaim_blist_update_buddy_presence(b, loggedin); |
1137 | 1142 |
1138 for (buddies = gaim_find_buddies(account, name); buddies; buddies = g_slist_remove(buddies, buddies->data)) { | 1143 for (buddies = gaim_find_buddies(account, name); buddies; buddies = g_slist_remove(buddies, buddies->data)) { |
1139 b = buddies->data; | 1144 b = buddies->data; |