首页 | 数据结构 | 文件列表 | 数据字段 | 全局定义

group.c

浏览该文件的文档。
00001 
00023 // START OF FILE
00024 /*****************************************************************************/
00025 #include "internal.h"
00026 
00027 #include "debug.h"              // gaim_debug
00028 #include "prpl.h"               // struct proto_chat_entry
00029 #include "request.h"            // gaim_request_input
00030 
00031 #include "utils.h"              // qq_string_to_dec_value
00032 #include "group_hash.h"         // QQ_GROUP_KEY_EXTERNAL_ID
00033 #include "group_info.h"         // qq_send_cmd_group_get_group_info
00034 #include "group_search.h"       // qq_send_cmd_group_search_group
00035 
00036 #include "group.h"
00037 
00038 /*****************************************************************************/
00039 void _qq_group_search_callback(GaimConnection * gc, const gchar * input)
00040 {
00041         guint32 external_group_id;
00042 
00043         g_return_if_fail(gc != NULL && input != NULL);
00044         external_group_id = qq_string_to_dec_value(input);
00045         // 0x00000000 means search for demo group
00046         qq_send_cmd_group_search_group(gc, external_group_id);
00047 }                               // _qq_group_search_callback
00048 
00049 /*****************************************************************************/
00050 // This is needed for GaimChat node to be valid
00051 GList *qq_chat_info(GaimConnection * gc)
00052 {
00053         GList *m;
00054         struct proto_chat_entry *pce;
00055 
00056         m = NULL;
00057 
00058         pce = g_new0(struct proto_chat_entry, 1);
00059         pce->label = _("ID: ");
00060         pce->identifier = QQ_GROUP_KEY_EXTERNAL_ID;
00061         m = g_list_append(m, pce);
00062 
00063         pce = g_new0(struct proto_chat_entry, 1);
00064         pce->label = _("Admin: ");
00065         pce->identifier = QQ_GROUP_KEY_CREATOR_UID;
00066         m = g_list_append(m, pce);
00067 
00068         pce = g_new0(struct proto_chat_entry, 1);
00069         pce->label = _("Status: ");
00070         pce->identifier = QQ_GROUP_KEY_MEMBER_STATUS_DESC;
00071         m = g_list_append(m, pce);
00072 
00073         return m;
00074 }                               // qq_chat_info
00075 
00076 /*****************************************************************************/
00077 //  get a list of qq groups
00078 GaimRoomlist *qq_roomlist_get_list(GaimConnection * gc)
00079 {
00080         GList *fields;
00081         qq_data *qd;
00082         GaimRoomlist *rl;
00083         GaimRoomlistField *f;
00084 
00085         g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, NULL);
00086         qd = (qq_data *) gc->proto_data;
00087 
00088         fields = NULL;
00089         rl = gaim_roomlist_new(gaim_connection_get_account(gc));
00090         qd->roomlist = rl;
00091 
00092         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_GROUP_KEY_EXTERNAL_ID, FALSE);
00093         fields = g_list_append(fields, f);
00094         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Creator"), QQ_GROUP_KEY_CREATOR_UID, FALSE);
00095         fields = g_list_append(fields, f);
00096         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING,
00097                                     _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE);
00098         fields = g_list_append(fields, f);
00099         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE);
00100         fields = g_list_append(fields, f);
00101         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_TYPE, TRUE);
00102         fields = g_list_append(fields, f);
00103         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE);
00104         fields = g_list_append(fields, f);
00105         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE);
00106         fields = g_list_append(fields, f);
00107         f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_NAME_UTF8, TRUE);
00108 
00109         fields = g_list_append(fields, f);
00110         gaim_roomlist_set_fields(rl, fields);
00111         gaim_roomlist_set_in_progress(qd->roomlist, TRUE);
00112 
00113         gaim_request_input(gc, _("QQ Qun"),
00114                            _("Please input external group ID"),
00115                            _
00116                            ("You can only search for permanent QQ group\nInput 0 or leave it blank to search for demo groups"),
00117                            NULL, FALSE, FALSE, NULL, _("Search"),
00118                            G_CALLBACK(_qq_group_search_callback), _("Cancel"), NULL, gc);
00119 
00120         return qd->roomlist;
00121 }                               // qq_roomlist_get_list
00122 
00123 /*****************************************************************************/
00124 // free roomlist space, I have no idea when this one is called ...
00125 void qq_roomlist_cancel(GaimRoomlist * list)
00126 {
00127         qq_data *qd;
00128         GaimConnection *gc;
00129 
00130         g_return_if_fail(list != NULL);
00131         gc = gaim_account_get_connection(list->account);
00132 
00133         g_return_if_fail(gc != NULL && gc->proto_data != NULL);
00134         qd = (qq_data *) gc->proto_data;
00135 
00136         gaim_roomlist_set_in_progress(list, FALSE);
00137         gaim_roomlist_unref(list);
00138 }                               // qq_roomlist_cancel
00139 
00140 /*****************************************************************************/
00141 // this should be called upon signin, even we did not open group chat window
00142 void qq_group_init(GaimConnection * gc)
00143 {
00144         gint i;
00145         GaimAccount *account;
00146         GaimChat *chat;
00147         GaimGroup *gaim_group;
00148         GaimBlistNode *node;
00149         qq_group *group;
00150 
00151         g_return_if_fail(gc != NULL);
00152         account = gaim_connection_get_account(gc);
00153 
00154 
00155         gaim_group = gaim_find_group(GAIM_GROUP_QQ_QUN);
00156         if (gaim_group == NULL) {
00157                 gaim_debug(GAIM_DEBUG_INFO, "QQ", "We have no QQ Qun\n");
00158                 return;
00159         }                       // if group
00160 
00161         i = 0;
00162         for (node = ((GaimBlistNode *) gaim_group)->child; node != NULL; node = node->next)
00163                 if (GAIM_BLIST_NODE_IS_CHAT(node)) {    // got one
00164                         chat = (GaimChat *) node;
00165                         if (account != chat->account)
00166                                 continue;       // very important here !
00167                         group = qq_group_from_hashtable(gc, chat->components);
00168                         if (group != NULL) {
00169                                 i++;
00170                                 qq_send_cmd_group_get_group_info(gc, group);    // get group info and members
00171                         }       // if group
00172                 }               // if is chat
00173 
00174         gaim_debug(GAIM_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", i);
00175 
00176 }                               // qq_group_init
00177 
00178 /*****************************************************************************/
00179 // END OF FILE

Generated at Mon May 8 15:41:23 2006 for OpenQ by  doxygen 1.4.4