comparison libgaim/protocols/qq/qq.c @ 14318:437ce90442cf

[gaim-migrate @ 17011] Use GaimPresence to keep track of our status instead of qd->status. Also allow invisible logins. committer: Tailor Script <tailor@pidgin.im>
author Mark Huetsch <markhuetsch>
date Thu, 24 Aug 2006 07:00:34 +0000
parents a0394e417fab
children 69f594f56de5
comparison
equal deleted inserted replaced
14317:c8ddda5d8ec8 14318:437ce90442cf
92 { 92 {
93 const gchar *qq_server, *qq_port; 93 const gchar *qq_server, *qq_port;
94 qq_data *qd; 94 qq_data *qd;
95 GaimConnection *gc; 95 GaimConnection *gc;
96 GaimPresence *presence; 96 GaimPresence *presence;
97 gboolean login_hidden, use_tcp; 97 gboolean use_tcp;
98 98
99 g_return_if_fail(account != NULL); 99 g_return_if_fail(account != NULL);
100 100
101 gc = gaim_account_get_connection(account); 101 gc = gaim_account_get_connection(account);
102 g_return_if_fail(gc != NULL); 102 g_return_if_fail(gc != NULL);
109 109
110 qq_server = gaim_account_get_string(account, "server", NULL); 110 qq_server = gaim_account_get_string(account, "server", NULL);
111 qq_port = gaim_account_get_string(account, "port", NULL); 111 qq_port = gaim_account_get_string(account, "port", NULL);
112 use_tcp = gaim_account_get_bool(account, "use_tcp", FALSE); 112 use_tcp = gaim_account_get_bool(account, "use_tcp", FALSE);
113 presence = gaim_account_get_presence(account); 113 presence = gaim_account_get_presence(account);
114 login_hidden = gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE);
115 114
116 qd->use_tcp = use_tcp; 115 qd->use_tcp = use_tcp;
117 116
118 if (login_hidden) { 117 if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE)) {
119 qd->login_mode = QQ_LOGIN_MODE_HIDDEN; 118 qd->login_mode = QQ_LOGIN_MODE_HIDDEN;
120 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Login in hidden mode\n"); 119 } else if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_AWAY)
120 || gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_EXTENDED_AWAY)) {
121 qd->login_mode = QQ_LOGIN_MODE_AWAY;
121 } else { 122 } else {
122 qd->login_mode = QQ_LOGIN_MODE_NORMAL; 123 qd->login_mode = QQ_LOGIN_MODE_NORMAL;
123 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Login in normal mode\n");
124 } 124 }
125 125
126 if (qq_server == NULL || strlen(qq_server) == 0) 126 if (qq_server == NULL || strlen(qq_server) == 0)
127 qq_server = use_tcp ? 127 qq_server = use_tcp ?
128 tcp_server_list[random() % tcp_server_amount] : 128 tcp_server_list[random() % tcp_server_amount] :
256 256
257 if (q_bud == NULL) { 257 if (q_bud == NULL) {
258 emblems[0] = "offline"; 258 emblems[0] = "offline";
259 } else { 259 } else {
260 /* TODO the wireless icon is a bit too big to look good with QQ faces */ 260 /* TODO the wireless icon is a bit too big to look good with QQ faces */
261 if (q_bud->status == QQ_BUDDY_ONLINE_AWAY || q_bud->status == QQ_SELF_STATUS_AWAY) 261 if (q_bud->status == QQ_BUDDY_ONLINE_AWAY)
262 emblems[i++] = "away"; 262 emblems[i++] = "away";
263 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) 263 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER)
264 emblems[i++] = "qq_member"; 264 emblems[i++] = "qq_member";
265 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE) 265 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE)
266 emblems[i++] = "wireless"; 266 emblems[i++] = "wireless";
304 304
305 /* initiate QQ away with proper change_status packet */ 305 /* initiate QQ away with proper change_status packet */
306 static void _qq_set_away(GaimAccount *account, GaimStatus *status) 306 static void _qq_set_away(GaimAccount *account, GaimStatus *status)
307 { 307 {
308 GaimConnection *gc = gaim_account_get_connection(account); 308 GaimConnection *gc = gaim_account_get_connection(account);
309 const char *state = gaim_status_get_id(status);
310
311 qq_data *qd;
312
313
314 g_return_if_fail(gc != NULL && gc->proto_data != NULL);
315
316 qd = (qq_data *) gc->proto_data;
317
318 if(0 == strcmp(state, "available"))
319 qd->status = QQ_SELF_STATUS_AVAILABLE;
320 else if (0 == strcmp(state, "away"))
321 qd->status = QQ_SELF_STATUS_AWAY;
322 else if (0 == strcmp(state, "invisible"))
323 qd->status = QQ_SELF_STATUS_INVISIBLE;
324 else
325 qd->status = QQ_SELF_STATUS_AVAILABLE;
326 309
327 qq_send_packet_change_status(gc); 310 qq_send_packet_change_status(gc);
328 } 311 }
329 312
330 /* IMPORTANT: GaimConvImFlags -> GaimMessageFlags */ 313 /* IMPORTANT: GaimConvImFlags -> GaimMessageFlags */
418 401
419 g_return_if_fail(gc != NULL && gc->proto_data != NULL); 402 g_return_if_fail(gc != NULL && gc->proto_data != NULL);
420 qd = (qq_data *) gc->proto_data; 403 qd = (qq_data *) gc->proto_data;
421 404
422 field = gaim_request_fields_get_field(fields, "face_num"); 405 field = gaim_request_fields_get_field(fields, "face_num");
423 suffix = get_icon_offset_from_self_status(qd->status); 406 suffix = get_icon_offset(gc);
424 qd->my_icon = gaim_request_field_choice_get_value(field) * 3 + suffix; 407 qd->my_icon = gaim_request_field_choice_get_value(field) * 3 + suffix;
425 qd->modifying_face = TRUE; 408 qd->modifying_face = TRUE;
426 qq_send_packet_get_info(gc, qd->uid, FALSE); 409 qq_send_packet_get_info(gc, qd->uid, FALSE);
427 } 410 }
428 411