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;