comparison src/protocols/qq/group_opt.c @ 14021:ef8490f9e823

[gaim-migrate @ 16618] Replaced all C++-style comments with C-style ones. Cleaned up some comments and implemented a more consistent formatting scheme. committer: Tailor Script <tailor@pidgin.im>
author Mark Huetsch <markhuetsch>
date Wed, 02 Aug 2006 15:35:36 +0000
parents 16102b9c5c4a
children 6342ffdeb3ac
comparison
equal deleted inserted replaced
14020:13e7ba964993 14021:ef8490f9e823
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */ 21 */
22 22
23 // START OF FILE 23 #include "debug.h"
24 /*****************************************************************************/ 24 #include "notify.h"
25 #include "debug.h" // gaim_debug 25 #include "request.h"
26 #include "notify.h" // gaim_notify_info 26
27 #include "request.h" // gaim_request_input 27 #include "buddy_info.h"
28 28 #include "char_conv.h"
29 #include "utils.h" // uid_to_gaim_name 29 /*#include "group_admindlg.h" */
30 #include "packet_parse.h" // create_packet_b 30 #include "group_find.h"
31 #include "buddy_info.h" // qq_send_packet_get_info 31 #include "group_hash.h"
32 #include "char_conv.h" // utf8_to_qq 32 #include "group_info.h"
33 //#include "group_admindlg.h" // qq_group_detail_window_show 33 #include "group_join.h"
34 #include "group_find.h" // qq_group_find_by_internal_group_id 34 #include "group_network.h"
35 #include "group_hash.h" // qq_group_refresh
36 #include "group_info.h" // qq_send_cmd_group_get_group_info
37 #include "group_join.h" // qq_send_cmd_group_auth
38 #include "group_network.h" // qq_send_group_cmd
39 #include "group_opt.h" 35 #include "group_opt.h"
36 #include "packet_parse.h"
40 #include "qq.h" 37 #include "qq.h"
41 38 #include "utils.h"
42 /*****************************************************************************/ 39
43 // This implement quick sort algorithm (low->high) 40 /* This implement quick sort algorithm (low->high) */
44 static void _quick_sort(gint * numbers, gint left, gint right) 41 static void _quick_sort(gint *numbers, gint left, gint right)
45 { 42 {
46 gint pivot, l_hold, r_hold; 43 gint pivot, l_hold, r_hold;
47 44
48 l_hold = left; 45 l_hold = left;
49 r_hold = right; 46 r_hold = right;
52 while ((numbers[right] >= pivot) && (left < right)) 49 while ((numbers[right] >= pivot) && (left < right))
53 right--; 50 right--;
54 if (left != right) { 51 if (left != right) {
55 numbers[left] = numbers[right]; 52 numbers[left] = numbers[right];
56 left++; 53 left++;
57 } // if 54 }
58 while ((numbers[left] <= pivot) && (left < right)) 55 while ((numbers[left] <= pivot) && (left < right))
59 left++; 56 left++;
60 if (left != right) { 57 if (left != right) {
61 numbers[right] = numbers[left]; 58 numbers[right] = numbers[left];
62 right--; 59 right--;
63 } // if 60 }
64 } // while 61 }
65 numbers[left] = pivot; 62 numbers[left] = pivot;
66 pivot = left; 63 pivot = left;
67 left = l_hold; 64 left = l_hold;
68 right = r_hold; 65 right = r_hold;
69 if (left < pivot) 66 if (left < pivot)
70 _quick_sort(numbers, left, pivot - 1); 67 _quick_sort(numbers, left, pivot - 1);
71 if (right > pivot) 68 if (right > pivot)
72 _quick_sort(numbers, pivot + 1, right); 69 _quick_sort(numbers, pivot + 1, right);
73 } // _quick_sort 70 }
74 71
75 /*****************************************************************************/ 72 static void _sort(guint32 *list)
76 static void _sort(guint32 * list)
77 { 73 {
78 gint i; 74 gint i;
79 for (i = 0; list[i] < 0xffffffff; i++) {; 75 for (i = 0; list[i] < 0xffffffff; i++) {;
80 } 76 }
81 _quick_sort(list, 0, i - 1); 77 _quick_sort(list, 0, i - 1);
82 } // _sort 78 }
83 79
84 /*****************************************************************************/ 80 static void _qq_group_member_opt(GaimConnection *gc, qq_group *group, gint operation, guint32 *members)
85 static void _qq_group_member_opt(GaimConnection * gc, qq_group * group, gint operation, guint32 * members) { 81 {
86 guint8 *data, *cursor; 82 guint8 *data, *cursor;
87 gint i, count, data_len; 83 gint i, count, data_len;
88 g_return_if_fail(gc != NULL && group != NULL && members != NULL); 84 g_return_if_fail(gc != NULL && group != NULL && members != NULL);
89 85
90 for (i = 0; members[i] != 0xffffffff; i++) {; 86 for (i = 0; members[i] != 0xffffffff; i++) {;
97 create_packet_dw(data, &cursor, group->internal_group_id); 93 create_packet_dw(data, &cursor, group->internal_group_id);
98 create_packet_b(data, &cursor, operation); 94 create_packet_b(data, &cursor, operation);
99 for (i = 0; i < count; i++) 95 for (i = 0; i < count; i++)
100 create_packet_dw(data, &cursor, members[i]); 96 create_packet_dw(data, &cursor, members[i]);
101 qq_send_group_cmd(gc, group, data, data_len); 97 qq_send_group_cmd(gc, group, data, data_len);
102 } // _qq_group_member_opt 98 }
103 99
104 /*****************************************************************************/ 100 static void _qq_group_do_nothing_with_struct(group_member_opt *g)
105 static void _qq_group_do_nothing_with_struct(group_member_opt * g)
106 { 101 {
107 if (g != NULL) 102 if (g != NULL)
108 g_free(g); 103 g_free(g);
109 } // _qq_group_do_nothing_with_struct 104 }
110 105
111 /*****************************************************************************/ 106 static void _qq_group_reject_application_real(group_member_opt *g, gchar *msg_utf8)
112 static void _qq_group_reject_application_real(group_member_opt * g, gchar * msg_utf8)
113 { 107 {
114 qq_group *group; 108 qq_group *group;
115 g_return_if_fail(g != NULL && g->gc != NULL && g->internal_group_id > 0 && g->member > 0); 109 g_return_if_fail(g != NULL && g->gc != NULL && g->internal_group_id > 0 && g->member > 0);
116 group = qq_group_find_by_internal_group_id(g->gc, g->internal_group_id); 110 group = qq_group_find_by_internal_group_id(g->gc, g->internal_group_id);
117 g_return_if_fail(group != NULL); 111 g_return_if_fail(group != NULL);
118 qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_REJECT, g->member, msg_utf8); 112 qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_REJECT, g->member, msg_utf8);
119 g_free(g); 113 g_free(g);
120 } // _qq_group_reject_application_real 114 }
121 115
122 /*****************************************************************************/ 116 void qq_group_search_application_with_struct(group_member_opt *g)
123 void qq_group_search_application_with_struct(group_member_opt * g)
124 { 117 {
125 g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0); 118 g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
126 119
127 qq_send_packet_get_info(g->gc, g->member, TRUE); // we wanna see window 120 qq_send_packet_get_info(g->gc, g->member, TRUE); /* we wanna see window */
128 gaim_request_action 121 gaim_request_action
129 (g->gc, NULL, _("Do you wanna approve the request?"), "", 2, g, 122 (g->gc, NULL, _("Do you wanna approve the request?"), "", 2, g,
130 2, _("Reject"), 123 2, _("Reject"),
131 G_CALLBACK(qq_group_reject_application_with_struct), 124 G_CALLBACK(qq_group_reject_application_with_struct),
132 _("Approve"), G_CALLBACK(qq_group_approve_application_with_struct)); 125 _("Approve"), G_CALLBACK(qq_group_approve_application_with_struct));
133 126 }
134 } // qq_group_search_application_with_struct 127
135 128 void qq_group_reject_application_with_struct(group_member_opt *g)
136 /*****************************************************************************/
137 void qq_group_reject_application_with_struct(group_member_opt * g)
138 { 129 {
139 gchar *msg1, *msg2; 130 gchar *msg1, *msg2;
140 g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0); 131 g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
141 132
142 msg1 = g_strdup_printf(_("You rejected %d's request"), g->member); 133 msg1 = g_strdup_printf(_("You rejected %d's request"), g->member);
148 G_CALLBACK(_qq_group_reject_application_real), 139 G_CALLBACK(_qq_group_reject_application_real),
149 _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct), g); 140 _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct), g);
150 141
151 g_free(msg1); 142 g_free(msg1);
152 g_free(msg2); 143 g_free(msg2);
153 144 }
154 } // qq_group_do_nothing_with_struct 145
155 146 void qq_group_approve_application_with_struct(group_member_opt *g)
156 /*****************************************************************************/
157 void qq_group_approve_application_with_struct(group_member_opt * g)
158 { 147 {
159 qq_group *group; 148 qq_group *group;
160 g_return_if_fail(g != NULL && g->gc != NULL && g->internal_group_id > 0 && g->member > 0); 149 g_return_if_fail(g != NULL && g->gc != NULL && g->internal_group_id > 0 && g->member > 0);
161 group = qq_group_find_by_internal_group_id(g->gc, g->internal_group_id); 150 group = qq_group_find_by_internal_group_id(g->gc, g->internal_group_id);
162 g_return_if_fail(group != NULL); 151 g_return_if_fail(group != NULL);
163 qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_APPROVE, g->member, ""); 152 qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_APPROVE, g->member, "");
164 qq_group_find_or_add_member(g->gc, group, g->member); 153 qq_group_find_or_add_member(g->gc, group, g->member);
165 g_free(g); 154 g_free(g);
166 } // qq_group_add_member_with_gc_and_uid 155 }
167 156
168 /*****************************************************************************/ 157 void qq_group_modify_members(GaimConnection *gc, qq_group *group, guint32 *new_members)
169 void qq_group_modify_members(GaimConnection * gc, qq_group * group, guint32 * new_members) { 158 {
170 guint32 *old_members, *del_members, *add_members; 159 guint32 *old_members, *del_members, *add_members;
171 qq_buddy *q_bud; 160 qq_buddy *q_bud;
172 qq_data *qd; 161 qq_data *qd;
173 gint i = 0, old = 0, new = 0, del = 0, add = 0; 162 gint i = 0, old = 0, new = 0, del = 0, add = 0;
174 GList *list; 163 GList *list;
180 169
181 old_members = g_newa(guint32, QQ_QUN_MEMBER_MAX); 170 old_members = g_newa(guint32, QQ_QUN_MEMBER_MAX);
182 del_members = g_newa(guint32, QQ_QUN_MEMBER_MAX); 171 del_members = g_newa(guint32, QQ_QUN_MEMBER_MAX);
183 add_members = g_newa(guint32, QQ_QUN_MEMBER_MAX); 172 add_members = g_newa(guint32, QQ_QUN_MEMBER_MAX);
184 173
185 // construct the old member list 174 /* construct the old member list */
186 list = group->members; 175 list = group->members;
187 while (list != NULL) { 176 while (list != NULL) {
188 q_bud = (qq_buddy *) list->data; 177 q_bud = (qq_buddy *) list->data;
189 if (q_bud != NULL) 178 if (q_bud != NULL)
190 old_members[i++] = q_bud->uid; 179 old_members[i++] = q_bud->uid;
191 list = list->next; 180 list = list->next;
192 } // while 181 }
193 old_members[i] = 0xffffffff; // this is the end 182 old_members[i] = 0xffffffff; /* this is the end */
194 183
195 // sort to speed up making del_members and add_members list 184 /* sort to speed up making del_members and add_members list */
196 _sort(old_members); 185 _sort(old_members);
197 _sort(new_members); 186 _sort(new_members);
198 187
199 for (old = 0, new = 0; old_members[old] < 0xffffffff || new_members[new] < 0xffffffff;) { 188 for (old = 0, new = 0; old_members[old] < 0xffffffff || new_members[new] < 0xffffffff;) {
200 if (old_members[old] > new_members[new]) 189 if (old_members[old] > new_members[new]) {
201 add_members[add++] = new_members[new++]; 190 add_members[add++] = new_members[new++];
202 else if (old_members[old] < new_members[new]) 191 } else if (old_members[old] < new_members[new]) {
203 del_members[del++] = old_members[old++]; 192 del_members[del++] = old_members[old++];
204 else { 193 } else {
205 if (old_members[old] < 0xffffffff) 194 if (old_members[old] < 0xffffffff)
206 old++; 195 old++;
207 if (new_members[new] < 0xffffffff) 196 if (new_members[new] < 0xffffffff)
208 new++; 197 new++;
209 } // if old_members, new_members 198 }
210 } // for old,new 199 }
211 del_members[del] = add_members[add] = 0xffffffff; 200 del_members[del] = add_members[add] = 0xffffffff;
212 201
213 for (i = 0; i < del; i++) 202 for (i = 0; i < del; i++)
214 qq_group_remove_member_by_uid(group, del_members[i]); 203 qq_group_remove_member_by_uid(group, del_members[i]);
215 for (i = 0; i < add; i++) 204 for (i = 0; i < add; i++)
217 206
218 if (del > 0) 207 if (del > 0)
219 _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_DEL, del_members); 208 _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_DEL, del_members);
220 if (add > 0) 209 if (add > 0)
221 _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_ADD, add_members); 210 _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_ADD, add_members);
222 211 }
223 } // qq_group_modify_members 212
224 213 void qq_group_process_modify_members_reply(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc)
225 /*****************************************************************************/ 214 {
226 void qq_group_process_modify_members_reply(guint8 * data, guint8 ** cursor, gint len, GaimConnection * gc) {
227 guint32 internal_group_id; 215 guint32 internal_group_id;
228 qq_group *group; 216 qq_group *group;
229 g_return_if_fail(data != NULL && gc != NULL); 217 g_return_if_fail(data != NULL && gc != NULL);
230 218
231 read_packet_dw(data, cursor, len, &internal_group_id); 219 read_packet_dw(data, cursor, len, &internal_group_id);
232 g_return_if_fail(internal_group_id > 0); 220 g_return_if_fail(internal_group_id > 0);
233 221
234 // we should have its info locally 222 /* we should have its info locally */
235 group = qq_group_find_by_internal_group_id(gc, internal_group_id); 223 group = qq_group_find_by_internal_group_id(gc, internal_group_id);
236 g_return_if_fail(group != NULL); 224 g_return_if_fail(group != NULL);
237 225
238 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in modify members for Qun %d\n", group->external_group_id); 226 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in modify members for Qun %d\n", group->external_group_id);
239 227
240 gaim_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modify Qun member"), NULL); 228 gaim_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modify Qun member"), NULL);
241 229 }
242 } // qq_group_process_modify_members_reply
243 230
244 /*****************************************************************************/ 231 /*****************************************************************************/
245 void qq_group_modify_info(GaimConnection * gc, qq_group * group) 232 void qq_group_modify_info(GaimConnection *gc, qq_group *group)
246 { 233 {
247 gint data_len, data_written; 234 gint data_len, data_written;
248 guint8 *data, *cursor; 235 guint8 *data, *cursor;
249 gchar *group_name, *group_desc, *notice; 236 gchar *group_name, *group_desc, *notice;
250 237
259 + 1 + strlen(notice); 246 + 1 + strlen(notice);
260 247
261 data = g_newa(guint8, data_len); 248 data = g_newa(guint8, data_len);
262 cursor = data; 249 cursor = data;
263 data_written = 0; 250 data_written = 0;
264 // 000-000 251 /* 000-000 */
265 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_MODIFY_GROUP_INFO); 252 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_MODIFY_GROUP_INFO);
266 // 001-004 253 /* 001-004 */
267 data_written += create_packet_dw(data, &cursor, group->internal_group_id); 254 data_written += create_packet_dw(data, &cursor, group->internal_group_id);
268 // 005-005 255 /* 005-005 */
269 data_written += create_packet_b(data, &cursor, 0x01); 256 data_written += create_packet_b(data, &cursor, 0x01);
270 // 006-006 257 /* 006-006 */
271 data_written += create_packet_b(data, &cursor, group->auth_type); 258 data_written += create_packet_b(data, &cursor, group->auth_type);
272 // 007-008 259 /* 007-008 */
273 data_written += create_packet_w(data, &cursor, 0x0000); 260 data_written += create_packet_w(data, &cursor, 0x0000);
274 // 009-010 261 /* 009-010 */
275 data_written += create_packet_w(data, &cursor, group->group_category); 262 data_written += create_packet_w(data, &cursor, group->group_category);
276 263
277 data_written += create_packet_b(data, &cursor, strlen(group_name)); 264 data_written += create_packet_b(data, &cursor, strlen(group_name));
278 data_written += create_packet_data(data, &cursor, group_name, strlen(group_name)); 265 data_written += create_packet_data(data, &cursor, group_name, strlen(group_name));
279 266
289 gaim_debug(GAIM_DEBUG_ERROR, "QQ", 276 gaim_debug(GAIM_DEBUG_ERROR, "QQ",
290 "Fail to create group_modify_info packet, expect %d bytes, wrote %d bytes\n", 277 "Fail to create group_modify_info packet, expect %d bytes, wrote %d bytes\n",
291 data_len, data_written); 278 data_len, data_written);
292 else 279 else
293 qq_send_group_cmd(gc, group, data, data_len); 280 qq_send_group_cmd(gc, group, data, data_len);
294 281 }
295 } // qq_group_modify_info 282
296 283 void qq_group_process_modify_info_reply(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc)
297 /*****************************************************************************/ 284 {
298 void qq_group_process_modify_info_reply(guint8 * data, guint8 ** cursor, gint len, GaimConnection * gc) {
299 guint32 internal_group_id; 285 guint32 internal_group_id;
300 qq_group *group; 286 qq_group *group;
301 g_return_if_fail(data != NULL && gc != NULL); 287 g_return_if_fail(data != NULL && gc != NULL);
302 288
303 read_packet_dw(data, cursor, len, &internal_group_id); 289 read_packet_dw(data, cursor, len, &internal_group_id);
304 g_return_if_fail(internal_group_id > 0); 290 g_return_if_fail(internal_group_id > 0);
305 291
306 // we should have its info locally 292 /* we should have its info locally */
307 group = qq_group_find_by_internal_group_id(gc, internal_group_id); 293 group = qq_group_find_by_internal_group_id(gc, internal_group_id);
308 g_return_if_fail(group != NULL); 294 g_return_if_fail(group != NULL);
309 295
310 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in modify info for Qun %d\n", group->external_group_id); 296 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in modify info for Qun %d\n", group->external_group_id);
311 qq_group_refresh(gc, group); 297 qq_group_refresh(gc, group);
312 298
313 gaim_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modify Qun information"), NULL); 299 gaim_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modify Qun information"), NULL);
314 300 }
315 } // qq_group_process_modify_info_reply 301
316 302 /* we create a very simple group first, and then let the user to modify */
317 /*****************************************************************************/ 303 void qq_group_create_with_name(GaimConnection *gc, const gchar *name)
318 // we create a very simple group first, and then let the user to modify
319 void qq_group_create_with_name(GaimConnection * gc, const gchar * name)
320 { 304 {
321 gint data_len, data_written; 305 gint data_len, data_written;
322 guint8 *data, *cursor; 306 guint8 *data, *cursor;
323 qq_data *qd; 307 qq_data *qd;
324 g_return_if_fail(gc != NULL && name != NULL); 308 g_return_if_fail(gc != NULL && name != NULL);
327 data_len = 7 + 1 + strlen(name) + 2 + 1 + 1 + 4; 311 data_len = 7 + 1 + strlen(name) + 2 + 1 + 1 + 4;
328 data = g_newa(guint8, data_len); 312 data = g_newa(guint8, data_len);
329 cursor = data; 313 cursor = data;
330 314
331 data_written = 0; 315 data_written = 0;
332 // we create the simpleset group, only group name is given 316 /* we create the simpleset group, only group name is given */
333 // 000 317 /* 000 */
334 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_CREATE_GROUP); 318 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_CREATE_GROUP);
335 // 001 319 /* 001 */
336 data_written += create_packet_b(data, &cursor, QQ_GROUP_TYPE_PERMANENT); 320 data_written += create_packet_b(data, &cursor, QQ_GROUP_TYPE_PERMANENT);
337 // 002 321 /* 002 */
338 data_written += create_packet_b(data, &cursor, QQ_GROUP_AUTH_TYPE_NEED_AUTH); 322 data_written += create_packet_b(data, &cursor, QQ_GROUP_AUTH_TYPE_NEED_AUTH);
339 // 003-004 323 /* 003-004 */
340 data_written += create_packet_w(data, &cursor, 0x0000); 324 data_written += create_packet_w(data, &cursor, 0x0000);
341 // 005-006 325 /* 005-006 */
342 data_written += create_packet_w(data, &cursor, 0x0003); 326 data_written += create_packet_w(data, &cursor, 0x0003);
343 // 007 327 /* 007 */
344 data_written += create_packet_b(data, &cursor, strlen(name)); 328 data_written += create_packet_b(data, &cursor, strlen(name));
345 data_written += create_packet_data(data, &cursor, (gchar *) name, strlen(name)); 329 data_written += create_packet_data(data, &cursor, (gchar *) name, strlen(name));
346 data_written += create_packet_w(data, &cursor, 0x0000); 330 data_written += create_packet_w(data, &cursor, 0x0000);
347 data_written += create_packet_b(data, &cursor, 0x00); // no group notice 331 data_written += create_packet_b(data, &cursor, 0x00); /* no group notice */
348 data_written += create_packet_b(data, &cursor, 0x00); // no group desc 332 data_written += create_packet_b(data, &cursor, 0x00); /* no group desc */
349 data_written += create_packet_dw(data, &cursor, qd->uid); // I am member of coz 333 data_written += create_packet_dw(data, &cursor, qd->uid); /* I am member of coz */
350 334
351 if (data_written != data_len) 335 if (data_written != data_len)
352 gaim_debug(GAIM_DEBUG_ERROR, "QQ", 336 gaim_debug(GAIM_DEBUG_ERROR, "QQ",
353 "Fail create create_group packet, expect %d bytes, written %d bytes\n", 337 "Fail create create_group packet, expect %d bytes, written %d bytes\n",
354 data_len, data_written); 338 data_len, data_written);
355 else 339 else
356 qq_send_group_cmd(gc, NULL, data, data_len); 340 qq_send_group_cmd(gc, NULL, data, data_len);
357 341 }
358 } // qq_group_create_with_name 342
359 343 static void qq_group_setup_with_gc_and_uid(gc_and_uid *g)
360 /*****************************************************************************/
361 static void qq_group_setup_with_gc_and_uid(gc_and_uid * g)
362 { 344 {
363 qq_group *group; 345 qq_group *group;
364 g_return_if_fail(g != NULL && g->gc != NULL && g->uid > 0); 346 g_return_if_fail(g != NULL && g->gc != NULL && g->uid > 0);
365 347
366 group = qq_group_find_by_internal_group_id(g->gc, g->uid); 348 group = qq_group_find_by_internal_group_id(g->gc, g->uid);
367 g_return_if_fail(group != NULL); 349 g_return_if_fail(group != NULL);
368 350
369 //XXX insert UI code here 351 /* XXX insert UI code here */
370 //qq_group_detail_window_show(g->gc, group); 352 /* qq_group_detail_window_show(g->gc, group); */
371 g_free(g); 353 g_free(g);
372 } // qq_group_setup_with_gc_and_uid 354 }
373 355
374 /*****************************************************************************/ 356 void qq_group_process_create_group_reply(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc)
375 void qq_group_process_create_group_reply(guint8 * data, guint8 ** cursor, gint len, GaimConnection * gc) { 357 {
376 guint32 internal_group_id, external_group_id; 358 guint32 internal_group_id, external_group_id;
377 qq_group *group; 359 qq_group *group;
378 gc_and_uid *g; 360 gc_and_uid *g;
379 qq_data *qd; 361 qq_data *qd;
380 362
405 _ 387 _
406 ("Would you like to set up the Qun details now?"), 388 ("Would you like to set up the Qun details now?"),
407 1, g, 2, _("Setup"), 389 1, g, 2, _("Setup"),
408 G_CALLBACK(qq_group_setup_with_gc_and_uid), 390 G_CALLBACK(qq_group_setup_with_gc_and_uid),
409 _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid)); 391 _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid));
410 392 }
411 } // qq_group_process_modify_info_reply 393
412 394 /* we have to activate group after creation, otherwise the group can not be searched */
413 /*****************************************************************************/ 395 void qq_group_activate_group(GaimConnection *gc, guint32 internal_group_id)
414 // we have to activate group after creation, otherwise the group can not be searched
415 void qq_group_activate_group(GaimConnection * gc, guint32 internal_group_id)
416 { 396 {
417 gint data_len, data_written; 397 gint data_len, data_written;
418 guint8 *data, *cursor; 398 guint8 *data, *cursor;
419 g_return_if_fail(gc != NULL && internal_group_id > 0); 399 g_return_if_fail(gc != NULL && internal_group_id > 0);
420 400
421 data_len = 5; 401 data_len = 5;
422 data = g_newa(guint8, data_len); 402 data = g_newa(guint8, data_len);
423 cursor = data; 403 cursor = data;
424 404
425 data_written = 0; 405 data_written = 0;
426 // we create the simpleset group, only group name is given 406 /* we create the simplest group, only group name is given */
427 // 000 407 /* 000 */
428 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_ACTIVATE_GROUP); 408 data_written += create_packet_b(data, &cursor, QQ_GROUP_CMD_ACTIVATE_GROUP);
429 // 001-005 409 /* 001-005 */
430 data_written += create_packet_dw(data, &cursor, internal_group_id); 410 data_written += create_packet_dw(data, &cursor, internal_group_id);
431 411
432 if (data_written != data_len) 412 if (data_written != data_len)
433 gaim_debug(GAIM_DEBUG_ERROR, "QQ", 413 gaim_debug(GAIM_DEBUG_ERROR, "QQ",
434 "Fail create activate_group packet, expect %d bytes, written %d bytes\n", 414 "Fail create activate_group packet, expect %d bytes, written %d bytes\n",
435 data_len, data_written); 415 data_len, data_written);
436 else 416 else
437 qq_send_group_cmd(gc, NULL, data, data_len); 417 qq_send_group_cmd(gc, NULL, data, data_len);
438 418 }
439 } // qq_group_activate_group 419
440 420 void qq_group_process_activate_group_reply(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc)
441 /*****************************************************************************/ 421 {
442 void qq_group_process_activate_group_reply(guint8 * data, guint8 ** cursor, gint len, GaimConnection * gc) {
443 guint32 internal_group_id; 422 guint32 internal_group_id;
444 qq_group *group; 423 qq_group *group;
445 g_return_if_fail(data != NULL && gc != NULL); 424 g_return_if_fail(data != NULL && gc != NULL);
446 425
447 read_packet_dw(data, cursor, len, &internal_group_id); 426 read_packet_dw(data, cursor, len, &internal_group_id);
448 g_return_if_fail(internal_group_id > 0); 427 g_return_if_fail(internal_group_id > 0);
449 428
450 // we should have its info locally 429 /* we should have its info locally */
451 group = qq_group_find_by_internal_group_id(gc, internal_group_id); 430 group = qq_group_find_by_internal_group_id(gc, internal_group_id);
452 g_return_if_fail(group != NULL); 431 g_return_if_fail(group != NULL);
453 432
454 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in activate Qun %d\n", group->external_group_id); 433 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Succeed in activate Qun %d\n", group->external_group_id);
455 434 }
456 } // qq_group_process_activate_group_reply 435
457 436 void qq_group_manage_group(GaimConnection *gc, GHashTable *data)
458 /*****************************************************************************/
459 void qq_group_manage_group(GaimConnection * gc, GHashTable * data)
460 { 437 {
461 gchar *internal_group_id_ptr; 438 gchar *internal_group_id_ptr;
462 guint32 internal_group_id; 439 guint32 internal_group_id;
463 qq_group *group; 440 qq_group *group;
464 441
469 g_return_if_fail(internal_group_id > 0); 446 g_return_if_fail(internal_group_id > 0);
470 447
471 group = qq_group_find_by_internal_group_id(gc, internal_group_id); 448 group = qq_group_find_by_internal_group_id(gc, internal_group_id);
472 g_return_if_fail(group != NULL); 449 g_return_if_fail(group != NULL);
473 450
474 //XXX insert UI code here 451 /* XXX insert UI code here */
475 //qq_group_detail_window_show(gc, group); 452 /* qq_group_detail_window_show(gc, group); */
476 453 }
477 } // qq_group_manage_members
478
479
480 /*****************************************************************************/
481 // END OF FILE