comparison libpurple/protocols/qq/group.c @ 15374:5fe8042783c1

Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author Sean Egan <seanegan@gmail.com>
date Sat, 20 Jan 2007 02:32:10 +0000
parents
children 32c366eeeb99
comparison
equal deleted inserted replaced
15373:f79e0f4df793 15374:5fe8042783c1
1 /**
2 * @file group.c
3 *
4 * gaim
5 *
6 * Gaim is the legal property of its developers, whose names are too numerous
7 * to list here. Please refer to the COPYRIGHT file distributed with this
8 * source distribution.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24
25 #include "internal.h"
26
27 #include "debug.h"
28 #include "prpl.h"
29 #include "request.h"
30
31 #include "group_internal.h"
32 #include "group_info.h"
33 #include "group_search.h"
34 #include "utils.h"
35
36 #include "group.h"
37
38 static void _qq_group_search_callback(GaimConnection *gc, const gchar *input)
39 {
40 guint32 external_group_id;
41
42 g_return_if_fail(input != NULL);
43 external_group_id = qq_string_to_dec_value(input);
44 /* 0x00000000 means search for demo group */
45 qq_send_cmd_group_search_group(gc, external_group_id);
46 }
47
48 static void _qq_group_search_cancel_callback(GaimConnection *gc, const gchar *input)
49 {
50 qq_data *qd;
51
52 qd = (qq_data *) gc->proto_data;
53 gaim_roomlist_set_in_progress(qd->roomlist, FALSE);
54 }
55
56 /* This is needed for GaimChat node to be valid */
57 GList *qq_chat_info(GaimConnection *gc)
58 {
59 GList *m;
60 struct proto_chat_entry *pce;
61
62 m = NULL;
63
64 pce = g_new0(struct proto_chat_entry, 1);
65 pce->label = _("ID: ");
66 pce->identifier = QQ_GROUP_KEY_EXTERNAL_ID;
67 m = g_list_append(m, pce);
68
69 return m;
70 }
71
72 GHashTable *qq_chat_info_defaults(GaimConnection *gc, const gchar *chat_name)
73 {
74 GHashTable *defaults;
75
76 defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
77
78 if (chat_name != NULL)
79 g_hash_table_insert(defaults, QQ_GROUP_KEY_EXTERNAL_ID, g_strdup(chat_name));
80
81 return defaults;
82 }
83
84 /* get a list of qq groups */
85 GaimRoomlist *qq_roomlist_get_list(GaimConnection *gc)
86 {
87 GList *fields;
88 qq_data *qd;
89 GaimRoomlist *rl;
90 GaimRoomlistField *f;
91
92 qd = (qq_data *) gc->proto_data;
93
94 fields = NULL;
95 rl = gaim_roomlist_new(gaim_connection_get_account(gc));
96 qd->roomlist = rl;
97
98 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_GROUP_KEY_EXTERNAL_ID, FALSE);
99 fields = g_list_append(fields, f);
100 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Creator"), QQ_GROUP_KEY_CREATOR_UID, FALSE);
101 fields = g_list_append(fields, f);
102 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING,
103 _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE);
104 fields = g_list_append(fields, f);
105 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE);
106 fields = g_list_append(fields, f);
107 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_TYPE, TRUE);
108 fields = g_list_append(fields, f);
109 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE);
110 fields = g_list_append(fields, f);
111 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE);
112 fields = g_list_append(fields, f);
113 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_NAME_UTF8, TRUE);
114
115 fields = g_list_append(fields, f);
116 gaim_roomlist_set_fields(rl, fields);
117 gaim_roomlist_set_in_progress(qd->roomlist, TRUE);
118
119 gaim_request_input(gc, _("QQ Qun"),
120 _("Please input external group ID"),
121 _("You can only search for permanent QQ groups\n"),
122 NULL, FALSE, FALSE, NULL,
123 _("Search"), G_CALLBACK(_qq_group_search_callback),
124 _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback),
125 gc);
126
127 return qd->roomlist;
128 }
129
130 /* free roomlist space, I have no idea when this one is called ... */
131 void qq_roomlist_cancel(GaimRoomlist *list)
132 {
133 qq_data *qd;
134 GaimConnection *gc;
135
136 g_return_if_fail(list != NULL);
137 gc = gaim_account_get_connection(list->account);
138
139 qd = (qq_data *) gc->proto_data;
140 gaim_roomlist_set_in_progress(list, FALSE);
141 gaim_roomlist_unref(list);
142 }
143
144 /* this should be called upon signin, even when we did not open group chat window */
145 void qq_group_init(GaimConnection *gc)
146 {
147 gint i;
148 GaimAccount *account;
149 GaimChat *chat;
150 GaimGroup *gaim_group;
151 GaimBlistNode *node;
152 qq_group *group;
153
154 account = gaim_connection_get_account(gc);
155
156 gaim_group = gaim_find_group(GAIM_GROUP_QQ_QUN);
157 if (gaim_group == NULL) {
158 gaim_debug(GAIM_DEBUG_INFO, "QQ", "We have no QQ Qun\n");
159 return;
160 }
161
162 i = 0;
163 for (node = ((GaimBlistNode *) gaim_group)->child; node != NULL; node = node->next)
164 if (GAIM_BLIST_NODE_IS_CHAT(node)) { /* got one */
165 chat = (GaimChat *) node;
166 if (account != chat->account)
167 continue; /* very important here ! */
168 group = qq_group_from_hashtable(gc, chat->components);
169 if (group != NULL) {
170 i++;
171 qq_send_cmd_group_get_group_info(gc, group); /* get group info and members */
172 }
173 }
174
175 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", i);
176 }