00001
00023
00024
00025 #include "internal.h"
00026
00027 #include "debug.h"
00028 #include "prpl.h"
00029 #include "request.h"
00030
00031 #include "utils.h"
00032 #include "group_hash.h"
00033 #include "group_info.h"
00034 #include "group_search.h"
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
00046 qq_send_cmd_group_search_group(gc, external_group_id);
00047 }
00048
00049
00050
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 }
00075
00076
00077
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 }
00122
00123
00124
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 }
00139
00140
00141
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 }
00160
00161 i = 0;
00162 for (node = ((GaimBlistNode *) gaim_group)->child; node != NULL; node = node->next)
00163 if (GAIM_BLIST_NODE_IS_CHAT(node)) {
00164 chat = (GaimChat *) node;
00165 if (account != chat->account)
00166 continue;
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);
00171 }
00172 }
00173
00174 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", i);
00175
00176 }
00177
00178
00179