Mercurial > pidgin
view src/protocols/qq/group.c @ 13910:6c907830a45f
[gaim-migrate @ 16408]
Get rid of an assertion failure that I hit
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 03 Jul 2006 01:39:51 +0000 |
parents | 983fd420e86b |
children | ef8490f9e823 |
line wrap: on
line source
/** * The QQ2003C protocol plugin * * for gaim * * Copyright (C) 2004 Puzzlebird * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // START OF FILE /*****************************************************************************/ #include "internal.h" #include "debug.h" // gaim_debug #include "prpl.h" // struct proto_chat_entry #include "request.h" // gaim_request_input #include "utils.h" // qq_string_to_dec_value #include "group_hash.h" // QQ_GROUP_KEY_EXTERNAL_ID #include "group_info.h" // qq_send_cmd_group_get_group_info #include "group_search.h" // qq_send_cmd_group_search_group #include "group.h" /*****************************************************************************/ static void _qq_group_search_callback(GaimConnection * gc, const gchar * input) { guint32 external_group_id; g_return_if_fail(gc != NULL && input != NULL); external_group_id = qq_string_to_dec_value(input); // 0x00000000 means search for demo group qq_send_cmd_group_search_group(gc, external_group_id); } // _qq_group_search_callback /*****************************************************************************/ // This is needed for GaimChat node to be valid GList *qq_chat_info(GaimConnection * gc) { GList *m; struct proto_chat_entry *pce; m = NULL; pce = g_new0(struct proto_chat_entry, 1); pce->label = _("ID: "); pce->identifier = QQ_GROUP_KEY_EXTERNAL_ID; m = g_list_append(m, pce); pce = g_new0(struct proto_chat_entry, 1); pce->label = _("Admin: "); pce->identifier = QQ_GROUP_KEY_CREATOR_UID; m = g_list_append(m, pce); pce = g_new0(struct proto_chat_entry, 1); pce->label = _("Status: "); pce->identifier = QQ_GROUP_KEY_MEMBER_STATUS_DESC; m = g_list_append(m, pce); return m; } // qq_chat_info /*****************************************************************************/ // get a list of qq groups GaimRoomlist *qq_roomlist_get_list(GaimConnection * gc) { GList *fields; qq_data *qd; GaimRoomlist *rl; GaimRoomlistField *f; g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, NULL); qd = (qq_data *) gc->proto_data; fields = NULL; rl = gaim_roomlist_new(gaim_connection_get_account(gc)); qd->roomlist = rl; f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_GROUP_KEY_EXTERNAL_ID, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Creator"), QQ_GROUP_KEY_CREATOR_UID, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_TYPE, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_NAME_UTF8, TRUE); fields = g_list_append(fields, f); gaim_roomlist_set_fields(rl, fields); gaim_roomlist_set_in_progress(qd->roomlist, TRUE); gaim_request_input(gc, _("QQ Qun"), _("Please input external group ID"), _ ("You can only search for permanent QQ group\nInput 0 or leave it blank to search for demo groups"), NULL, FALSE, FALSE, NULL, _("Search"), G_CALLBACK(_qq_group_search_callback), _("Cancel"), NULL, gc); return qd->roomlist; } // qq_roomlist_get_list /*****************************************************************************/ // free roomlist space, I have no idea when this one is called ... void qq_roomlist_cancel(GaimRoomlist * list) { qq_data *qd; GaimConnection *gc; g_return_if_fail(list != NULL); gc = gaim_account_get_connection(list->account); g_return_if_fail(gc != NULL && gc->proto_data != NULL); qd = (qq_data *) gc->proto_data; gaim_roomlist_set_in_progress(list, FALSE); gaim_roomlist_unref(list); } // qq_roomlist_cancel /*****************************************************************************/ // this should be called upon signin, even we did not open group chat window void qq_group_init(GaimConnection * gc) { gint i; GaimAccount *account; GaimChat *chat; GaimGroup *gaim_group; GaimBlistNode *node; qq_group *group; g_return_if_fail(gc != NULL); account = gaim_connection_get_account(gc); gaim_group = gaim_find_group(GAIM_GROUP_QQ_QUN); if (gaim_group == NULL) { gaim_debug(GAIM_DEBUG_INFO, "QQ", "We have no QQ Qun\n"); return; } // if group i = 0; for (node = ((GaimBlistNode *) gaim_group)->child; node != NULL; node = node->next) if (GAIM_BLIST_NODE_IS_CHAT(node)) { // got one chat = (GaimChat *) node; if (account != chat->account) continue; // very important here ! group = qq_group_from_hashtable(gc, chat->components); if (group != NULL) { i++; qq_send_cmd_group_get_group_info(gc, group); // get group info and members } // if group } // if is chat gaim_debug(GAIM_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", i); } // qq_group_init /*****************************************************************************/ // END OF FILE