Mercurial > pidgin
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 |