| 223 } |
223 } |
| 224 |
224 |
| 225 void qq_request_buddy_info(PurpleConnection *gc, guint32 uid, |
225 void qq_request_buddy_info(PurpleConnection *gc, guint32 uid, |
| 226 guint32 update_class, int action) |
226 guint32 update_class, int action) |
| 227 { |
227 { |
| 228 qq_data *qd; |
|
| 229 gchar raw_data[16] = {0}; |
228 gchar raw_data[16] = {0}; |
| 230 |
229 |
| 231 g_return_if_fail(uid != 0); |
230 g_return_if_fail(uid != 0); |
| 232 |
231 |
| 233 qd = (qq_data *) gc->proto_data; |
|
| 234 g_snprintf(raw_data, sizeof(raw_data), "%u", uid); |
232 g_snprintf(raw_data, sizeof(raw_data), "%u", uid); |
| 235 qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDY_INFO, (guint8 *) raw_data, strlen(raw_data), |
233 qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDY_INFO, (guint8 *) raw_data, strlen(raw_data), |
| 236 update_class, action); |
234 update_class, action); |
| 237 } |
235 } |
| 238 |
236 |
| 270 |
268 |
| 271 /* parse fields and send info packet */ |
269 /* parse fields and send info packet */ |
| 272 static void info_modify_ok_cb(modify_info_request *info_request, PurpleRequestFields *fields) |
270 static void info_modify_ok_cb(modify_info_request *info_request, PurpleRequestFields *fields) |
| 273 { |
271 { |
| 274 PurpleConnection *gc; |
272 PurpleConnection *gc; |
| 275 qq_data *qd; |
|
| 276 gchar **segments; |
273 gchar **segments; |
| 277 int index; |
274 int index; |
| 278 const char *utf8_str; |
275 const char *utf8_str; |
| 279 gchar *value; |
276 gchar *value; |
| 280 int choice_num; |
277 int choice_num; |
| 281 |
278 |
| 282 gc = info_request->gc; |
279 gc = info_request->gc; |
| 283 g_return_if_fail(gc != NULL && info_request->gc); |
280 g_return_if_fail(gc != NULL); |
| 284 qd = (qq_data *) gc->proto_data; |
|
| 285 segments = info_request->segments; |
281 segments = info_request->segments; |
| 286 g_return_if_fail(segments != NULL); |
282 g_return_if_fail(segments != NULL); |
| 287 |
283 |
| 288 for (index = 1; segments[index] != NULL && index < QQ_INFO_LAST; index++) { |
284 for (index = 1; segments[index] != NULL && index < QQ_INFO_LAST; index++) { |
| 289 if (field_infos[index].iclass == QQ_FIELD_UNUSED) { |
285 if (field_infos[index].iclass == QQ_FIELD_UNUSED) { |
| 389 } |
385 } |
| 390 } |
386 } |
| 391 |
387 |
| 392 static void info_modify_dialogue(PurpleConnection *gc, gchar **segments, int iclass) |
388 static void info_modify_dialogue(PurpleConnection *gc, gchar **segments, int iclass) |
| 393 { |
389 { |
| 394 qq_data *qd; |
|
| 395 PurpleRequestFieldGroup *group; |
390 PurpleRequestFieldGroup *group; |
| 396 PurpleRequestFields *fields; |
391 PurpleRequestFields *fields; |
| 397 modify_info_request *info_request; |
392 modify_info_request *info_request; |
| 398 gchar *utf8_title, *utf8_prim; |
393 gchar *utf8_title, *utf8_prim; |
| 399 int index; |
394 int index; |
| 400 |
395 |
| 401 qd = (qq_data *) gc->proto_data; |
|
| 402 /* Keep one dialog once a time */ |
396 /* Keep one dialog once a time */ |
| 403 purple_request_close_with_handle(gc); |
397 purple_request_close_with_handle(gc); |
| 404 |
398 |
| 405 fields = purple_request_fields_new(); |
399 fields = purple_request_fields_new(); |
| 406 group = purple_request_field_group_new(NULL); |
400 group = purple_request_field_group_new(NULL); |
| 415 |
409 |
| 416 switch (iclass) { |
410 switch (iclass) { |
| 417 case QQ_FIELD_CONTACT: |
411 case QQ_FIELD_CONTACT: |
| 418 utf8_title = g_strdup(_("Modify Contact")); |
412 utf8_title = g_strdup(_("Modify Contact")); |
| 419 utf8_prim = g_strdup_printf("%s for %s", _("Modify Contact"), segments[0]); |
413 utf8_prim = g_strdup_printf("%s for %s", _("Modify Contact"), segments[0]); |
| |
414 break; |
| 420 case QQ_FIELD_ADDR: |
415 case QQ_FIELD_ADDR: |
| 421 utf8_title = g_strdup(_("Modify Address")); |
416 utf8_title = g_strdup(_("Modify Address")); |
| 422 utf8_prim = g_strdup_printf("%s for %s", _("Modify Address"), segments[0]); |
417 utf8_prim = g_strdup_printf("%s for %s", _("Modify Address"), segments[0]); |
| |
418 break; |
| 423 case QQ_FIELD_EXT: |
419 case QQ_FIELD_EXT: |
| 424 utf8_title = g_strdup(_("Modify Extended Information")); |
420 utf8_title = g_strdup(_("Modify Extended Information")); |
| 425 utf8_prim = g_strdup_printf("%s for %s", _("Modify Extended Information"), segments[0]); |
421 utf8_prim = g_strdup_printf("%s for %s", _("Modify Extended Information"), segments[0]); |
| 426 break; |
422 break; |
| 427 case QQ_FIELD_BASE: |
423 case QQ_FIELD_BASE: |
| 428 default: |
424 default: |
| 429 utf8_title = g_strdup(_("Modify Information")); |
425 utf8_title = g_strdup(_("Modify Information")); |
| 430 utf8_prim = g_strdup_printf("%s for %s", _("Modify Information"), segments[0]); |
426 utf8_prim = g_strdup_printf("%s for %s", _("Modify Information"), segments[0]); |
| |
427 break; |
| 431 } |
428 } |
| 432 |
429 |
| 433 info_request = g_new0(modify_info_request, 1); |
430 info_request = g_new0(modify_info_request, 1); |
| 434 info_request->gc = gc; |
431 info_request->gc = gc; |
| 435 info_request->iclass = iclass; |
432 info_request->iclass = iclass; |