Skip to content

Commit

Permalink
refine display group member detail
Browse files Browse the repository at this point in the history
Signed-off-by: xiehuc <[email protected]>
  • Loading branch information
xiehuc committed Apr 2, 2013
1 parent 3a41985 commit 8a3d8d4
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 32 deletions.
19 changes: 15 additions & 4 deletions src/liblwqq/info.c
Original file line number Diff line number Diff line change
Expand Up @@ -1985,16 +1985,27 @@ LwqqAsyncEvent* lwqq_info_mask_group(LwqqClient* lc,LwqqGroup* group,LwqqMask ma
return ev;
}

LwqqAsyncEvent* lwqq_info_get_stranger_info(LwqqClient* lc,char* tuin,char *code,LwqqBuddy* buddy)
LwqqAsyncEvent* lwqq_info_get_group_member_detail(LwqqClient* lc,const char* serv_id,LwqqBuddy* out)
{
if(!lc||!tuin||!buddy) return NULL;
if(!lc||!serv_id||!out) return NULL;
char url[512];
snprintf(url,sizeof(url),WEBQQ_S_HOST"/api/get_stranger_info2?tuin=%s&verifysession=&gid=0&code=%s&vfwebqq=%s&t=%ld",tuin,code?code:"",lc->vfwebqq,time(NULL));
snprintf(url,sizeof(url),WEBQQ_S_HOST"/api/get_stranger_info2?tuin=%s&verifysession=&gid=0&code=&vfwebqq=%s&t=%ld",serv_id,lc->vfwebqq,time(NULL));
LwqqHttpRequest* req = lwqq_http_create_default_request(lc, url, NULL);
req->set_header(req,"Cookie",lwqq_get_cookies(lc));
req->set_header(req,"Referer",WEBQQ_S_REF_URL);
lwqq_verbose(3,"%s\n",url);
return req->do_request_async(req,0,NULL,_C_(2p,process_friend_detail,req,buddy));
return req->do_request_async(req,0,NULL,_C_(2p,process_friend_detail,req,out));
}
LwqqAsyncEvent* lwqq_info_get_stranger_info(LwqqClient* lc,LwqqMsgSysGMsg* msg,LwqqBuddy* out)
{
if(!lc||!msg||!out) return NULL;
char url[512];
snprintf(url,sizeof(url),WEBQQ_S_HOST"/api/get_stranger_info2?tuin=%s&verifysession=&gid=0&code=%s-%s&vfwebqq=%s&t=%ld",msg->member_uin,"group_request_join",msg->group_uin,lc->vfwebqq,time(NULL));
LwqqHttpRequest* req = lwqq_http_create_default_request(lc, url, NULL);
req->set_header(req,"Cookie",lwqq_get_cookies(lc));
req->set_header(req,"Referer",WEBQQ_S_REF_URL);
lwqq_verbose(3,"%s\n",url);
return req->do_request_async(req,0,NULL,_C_(2p,process_friend_detail,req,out));
}

LwqqAsyncEvent* lwqq_info_answer_request_join_group(LwqqClient* lc,LwqqMsgSysGMsg* msg ,LwqqAnswer answer,const char* reason)
Expand Down
3 changes: 2 additions & 1 deletion src/liblwqq/info.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ LwqqAsyncEvent* lwqq_info_add_group(LwqqClient* lc,LwqqGroup* group,const char*
* because poll msg would auto free original message data. so we should
* 'move' it to another handle.
*/
LwqqAsyncEvent* lwqq_info_get_stranger_info(LwqqClient* lc,char* tuin,char *code,LwqqBuddy* buddy);
LwqqAsyncEvent* lwqq_info_get_stranger_info(LwqqClient* lc,LwqqMsgSysGMsg* msg,LwqqBuddy* out);
/** use this when you received sys g message with type (request join).
* normally you should use get_stanger_info first and ask user whether accept or deny request.
* @param msg : use you moved message.
Expand All @@ -198,5 +198,6 @@ LwqqAsyncEvent* lwqq_info_get_group_memo(LwqqClient* lc,LwqqGroup* g);
LwqqAsyncEvent* lwqq_info_set_dicsu_topic(LwqqClient* lc,LwqqGroup* d,const char* topic);
void lwqq_recent_list_free(LwqqRecentList* list);
LwqqAsyncEvent* lwqq_info_recent_list(LwqqClient* lc,LwqqRecentList* list);
LwqqAsyncEvent* lwqq_info_get_group_member_detail(LwqqClient* lc,const char* serv_id,LwqqBuddy* out);

#endif /* LWQQ_INFO_H */
60 changes: 33 additions & 27 deletions src/webqq.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,22 @@ static LwqqSimpleBuddy* find_group_member_by_nick_or_card(LwqqGroup* group,const
return NULL;
}

static int find_group_and_member_by_card(LwqqClient* lc,const char* card,LwqqGroup** p_g,LwqqSimpleBuddy** p_sb)
{
if(!card) return 0;
char nick[128]={0};
char gname[128]={0};
const char* pos;
if((pos = strstr(card," ### "))!=NULL) {
strcpy(gname,pos+strlen(" ### "));
strncpy(nick,card,pos-card);
nick[pos-card] = '\0';
*p_g = find_group_by_name(lc,gname);
*p_sb = find_group_member_by_nick_or_card(*p_g,nick);
return 1;
}
return 0;
}
static void action_about_webqq(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *) action->context;
Expand Down Expand Up @@ -630,10 +646,8 @@ static void sys_g_message(LwqqClient* lc,LwqqMsgSysGMsg* msg)
{
LwqqBuddy* buddy = lwqq_buddy_new();
LwqqMsgSysGMsg* nmsg = s_malloc0(sizeof(*nmsg));
char code[512];
lwqq_msg_move(nmsg,msg);
snprintf(code,sizeof(code),"%s-%s","group_request_join",nmsg->group_uin);
LwqqAsyncEvent* ev = lwqq_info_get_stranger_info(lc,nmsg->member_uin,code,buddy);
LwqqAsyncEvent* ev = lwqq_info_get_stranger_info(lc,nmsg,buddy);
lwqq_async_add_event_listener(ev, _C_(3p,sys_g_request_join,lc,buddy,nmsg));
return;
} break;
Expand Down Expand Up @@ -1468,18 +1482,14 @@ static int qq_send_im(PurpleConnection *gc, const gchar *who, const gchar *what,
{
qq_account* ac = (qq_account*)purple_connection_get_protocol_data(gc);
LwqqClient* lc = ac->qq;
char nick[32]={0},gname[32]={0};
const char* pos;
LwqqMsg* msg;
LwqqMsgMessage *mmsg;
if((pos = strstr(who," ### "))!=NULL) {
strcpy(gname,pos+strlen(" ### "));
strncpy(nick,who,pos-who);
nick[pos-who] = '\0';
LwqqGroup* group = NULL;
LwqqSimpleBuddy* sb = NULL;
if(find_group_and_member_by_card(lc, who, &group, &sb)){
msg = lwqq_msg_new(LWQQ_MS_SESS_MSG);
mmsg = (LwqqMsgMessage*)msg;
LwqqGroup* group = find_group_by_name(lc,gname);
LwqqSimpleBuddy* sb = find_group_member_by_nick_or_card(group,nick);

mmsg->super.to = s_strdup(sb->uin);
if(!sb->group_sig)
lwqq_info_get_group_sig(lc,group,sb->uin);
Expand Down Expand Up @@ -2449,46 +2459,42 @@ static void display_user_info(PurpleConnection* gc,LwqqBuddy* b,char *who)
ADD_STRING("网页",b->homepage);
ADD_STRING("简介","");
purple_notify_userinfo(gc, who?who:try_get(b->qqnumber,b->uin), info, (PurpleNotifyCloseCallback)purple_notify_user_info_destroy, info);
if(who) s_free(who);
//if who is not NULL,this is a group member
//detail info display.we should free buddy.
if(who) {
lwqq_buddy_free(b);
s_free(who);
}
#undef ADD_STRING
#undef ADD_HEADER
}

static void qq_get_user_info(PurpleConnection* gc,const char* who)
{
qq_account* ac = gc->proto_data;
LwqqClient* lc = ac->qq;
LwqqBuddy* buddy;
char nick[32]={0},gname[32]={0};
const char* pos;
if(ac->qq_use_qqnum)
buddy = lc->find_buddy_by_qqnumber(lc,who);
else
buddy = lc->find_buddy_by_uin(lc,who);
if(buddy){
LwqqAsyncEvent* ev = lwqq_info_get_friend_detail_info(lc, buddy);
lwqq_async_add_event_listener(ev, _C_(3p,display_user_info,gc,buddy,NULL));
}
else{
// Not a buddy? try fetch stranger info
if((pos = strstr(who," ### "))!=NULL) {
}else{
// Not a buddy? try fetch stranger info
LwqqGroup* g = NULL;
LwqqSimpleBuddy* sb = NULL;
if(find_group_and_member_by_card(lc,who, &g, &sb)){
buddy = lwqq_buddy_new();
strcpy(gname,pos+strlen(" ### "));
strncpy(nick,who,pos-who);
nick[pos-who] = '\0';
LwqqGroup* group = find_group_by_name(lc,gname);
LwqqSimpleBuddy* sb = find_group_member_by_nick_or_card(group,nick);
buddy->uin = s_strdup(sb->uin);

LwqqAsyncEvset* set = lwqq_async_evset_new();
LwqqAsyncEvent* ev = NULL;
ev = lwqq_info_get_stranger_info(lc,sb->uin,NULL,buddy);
ev = lwqq_info_get_group_member_detail(lc,sb->uin,buddy);
lwqq_async_evset_add_event(set, ev);
ev = lwqq_info_get_friend_qqnumber(lc,buddy);
lwqq_async_evset_add_event(set, ev);
lwqq_async_add_evset_listener(set, _C_(3p,display_user_info,gc,buddy,s_strdup(who)));
} else {
// What should be done here?
}
}
}
Expand Down

0 comments on commit 8a3d8d4

Please sign in to comment.