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