comparison libpurple/protocols/qq/buddy_list.c @ 24157:1ee91ff0d5fe

2008.10.09 - ccpaging <ccpaging(at)gmail.com> * Update 'group' protocol * Functions of group_find, group_free, group_search merged into group_join and group_internal * Removed group_find.c/h, group_free.c/h, group_search.c/h
author SHiNE CsyFeK <csyfek@gmail.com>
date Tue, 28 Oct 2008 16:38:16 +0000
parents 147f1b17b6ce
children d35672443baa
comparison
equal deleted inserted replaced
24156:147f1b17b6ce 24157:1ee91ff0d5fe
35 #include "buddy_opt.h" 35 #include "buddy_opt.h"
36 #include "char_conv.h" 36 #include "char_conv.h"
37 #include "qq_define.h" 37 #include "qq_define.h"
38 #include "qq_base.h" 38 #include "qq_base.h"
39 #include "group.h" 39 #include "group.h"
40 #include "group_find.h"
41 #include "group_internal.h" 40 #include "group_internal.h"
42 #include "group_info.h" 41 #include "group_info.h"
43 42
44 #include "qq_network.h" 43 #include "qq_network.h"
45 44
234 /* we find one and update qq_buddy_data */ 233 /* we find one and update qq_buddy_data */
235 /* 234 /*
236 if(0 != fe->s->client_tag) 235 if(0 != fe->s->client_tag)
237 q_bud->client_tag = fe->s->client_tag; 236 q_bud->client_tag = fe->s->client_tag;
238 */ 237 */
238 if (bd->status != bs.status || bd->comm_flag != packet.comm_flag) {
239 bd->status = bs.status;
240 bd->comm_flag = packet.comm_flag;
241 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag);
242 }
239 bd->ip.s_addr = bs.ip.s_addr; 243 bd->ip.s_addr = bs.ip.s_addr;
240 bd->port = bs.port; 244 bd->port = bs.port;
241 bd->status = bs.status;
242 bd->ext_flag = packet.ext_flag; 245 bd->ext_flag = packet.ext_flag;
243 bd->comm_flag = packet.comm_flag;
244 bd->last_update = time(NULL); 246 bd->last_update = time(NULL);
245 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag);
246 count++; 247 count++;
247 } 248 }
248 249
249 if(bytes > data_len) { 250 if(bytes > data_len) {
250 purple_debug_error("QQ", 251 purple_debug_error("QQ",
356 gint bytes; 357 gint bytes;
357 guint8 sub_cmd, reply_code; 358 guint8 sub_cmd, reply_code;
358 guint32 unknown, position; 359 guint32 unknown, position;
359 guint32 uid; 360 guint32 uid;
360 guint8 type; 361 guint8 type;
361 qq_group *group; 362 qq_room_data *rmd;
362 363
363 g_return_val_if_fail(data != NULL && data_len != 0, -1); 364 g_return_val_if_fail(data != NULL && data_len != 0, -1);
364 365
365 qd = (qq_data *) gc->proto_data; 366 qd = (qq_data *) gc->proto_data;
366 367
392 if(0x1 == type) { /* a buddy */ 393 if(0x1 == type) { /* a buddy */
393 /* don't do anything but count - buddies are handled by 394 /* don't do anything but count - buddies are handled by
394 * qq_request_get_buddies */ 395 * qq_request_get_buddies */
395 ++i; 396 ++i;
396 } else { /* a group */ 397 } else { /* a group */
397 group = qq_room_search_id(gc, uid); 398 rmd = qq_room_data_find(gc, uid);
398 if(group == NULL) { 399 if(rmd == NULL) {
399 purple_debug_info("QQ", 400 purple_debug_info("QQ", "Unknow room id %d", uid);
400 "Not find room id %d in qq_process_get_buddies_and_rooms\n", uid); 401 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, uid);
401 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, uid, NULL, 0,
402 0, QQ_ROOM_INFO_CREATE);
403 } else { 402 } else {
404 group->my_role = QQ_ROOM_ROLE_YES; 403 rmd->my_role = QQ_ROOM_ROLE_YES;
405 qq_group_refresh(gc, group);
406 } 404 }
407 ++j; 405 ++j;
408 } 406 }
409 } 407 }
410 408
559 557
560 if(bs.ip.s_addr != 0) { 558 if(bs.ip.s_addr != 0) {
561 bd->ip.s_addr = bs.ip.s_addr; 559 bd->ip.s_addr = bs.ip.s_addr;
562 bd->port = bs.port; 560 bd->port = bs.port;
563 } 561 }
564 bd->status =bs.status; 562 if (bd->status != bs.status) {
565 563 bd->status = bs.status;
564 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag);
565 }
566 bd->last_update = time(NULL); 566 bd->last_update = time(NULL);
567 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag);
568 567
569 if (bd->status == QQ_BUDDY_ONLINE_NORMAL && bd->level <= 0) { 568 if (bd->status == QQ_BUDDY_ONLINE_NORMAL && bd->level <= 0) {
570 if (qd->client_version >= 2007) { 569 if (qd->client_version >= 2007) {
571 qq_request_get_level_2007(gc, bd->uid); 570 qq_request_get_level_2007(gc, bd->uid);
572 } else { 571 } else {
647 bd = (qq_buddy_data *)buddy->proto_data; 646 bd = (qq_buddy_data *)buddy->proto_data;
648 if (bd->uid == 0) continue; 647 if (bd->uid == 0) continue;
649 if (bd->uid == qd->uid) continue; /* my status is always online in my buddy list */ 648 if (bd->uid == qd->uid) continue; /* my status is always online in my buddy list */
650 if (tm_limit < bd->last_update) continue; 649 if (tm_limit < bd->last_update) continue;
651 if (bd->status == QQ_BUDDY_ONLINE_INVISIBLE) continue; 650 if (bd->status == QQ_BUDDY_ONLINE_INVISIBLE) continue;
651 if (bd->status == QQ_BUDDY_CHANGE_TO_OFFLINE) continue;
652 652
653 bd->status = QQ_BUDDY_CHANGE_TO_OFFLINE; 653 bd->status = QQ_BUDDY_CHANGE_TO_OFFLINE;
654 bd->last_update = time(NULL); 654 bd->last_update = time(NULL);
655 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag); 655 qq_update_buddy_status(gc, bd->uid, bd->status, bd->comm_flag);
656 } 656 }