qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd, guint32 member_uid) { qq_buddy_data *member, *bd; PurpleBuddy *buddy; gchar * member_name; g_return_val_if_fail(rmd != NULL && member_uid > 0, NULL); member = qq_room_buddy_find(rmd, member_uid); if (member == NULL) { /* first appear during my session */ member = g_new0(qq_buddy_data, 1); member->uid = member_uid; member_name = uid_to_purple_name(member_uid); buddy = purple_find_buddy(purple_connection_get_account(gc), member_name); g_free(member_name); if (buddy != NULL) { const gchar *alias = NULL; bd = purple_buddy_get_protocol_data(buddy); if (bd != NULL && bd->nickname != NULL) member->nickname = g_strdup(bd->nickname); else if ((alias = purple_buddy_get_alias(buddy)) != NULL) member->nickname = g_strdup(alias); } rmd->members = g_list_append(rmd->members, member); } return member; }
void qq_room_got_chat_in(PurpleConnection *gc, guint32 room_id, guint32 uid_from, const gchar *msg, time_t in_time) { PurpleConversation *conv; qq_data *qd; qq_buddy_data *bd; qq_room_data *rmd; gchar *from; g_return_if_fail(gc != NULL && room_id != 0); g_return_if_fail(msg != NULL); qd = (qq_data *)gc->proto_data; conv = purple_find_chat(gc, room_id); rmd = qq_room_data_find(gc, room_id); g_return_if_fail(rmd != NULL); purple_debug_info("QQ", "is_show_chat:%d\n", qd->is_show_chat); if (NULL == conv && qd->is_show_chat) { conv = qq_room_conv_open(gc, rmd); } if (NULL == conv) { purple_debug_info("QQ", "Conversion of %u is not open, missing from %d:/n%s/v\n", room_id, uid_from, msg); return; } if (uid_from != 0) { bd = qq_room_buddy_find(rmd, uid_from); if (bd == NULL || bd->nickname == NULL) from = g_strdup_printf("%u", uid_from); else from = g_strdup(bd->nickname); } else { from = g_strdup(""); } serv_got_chat_in(gc, room_id, from, 0, msg, in_time); g_free(from); }