comparison libgaim/protocols/qq/qq.c @ 14265:584cbd1628d0

[gaim-migrate @ 16947] Added support for QQ faces. Thanks to csyfek@gmail.com for the images and protocol update. committer: Tailor Script <tailor@pidgin.im>
author Mark Huetsch <markhuetsch>
date Mon, 21 Aug 2006 07:17:40 +0000
parents 85f3808ca472
children e6892c0050ad
comparison
equal deleted inserted replaced
14264:d171bdecf17b 14265:584cbd1628d0
145 } 145 }
146 146
147 /* returns the icon name for a buddy or protocol */ 147 /* returns the icon name for a buddy or protocol */
148 static const gchar *_qq_list_icon(GaimAccount *a, GaimBuddy *b) 148 static const gchar *_qq_list_icon(GaimAccount *a, GaimBuddy *b)
149 { 149 {
150 /* XXX temp commented out until we figure out what to do with
151 * status icons */
152 /*
153 gchar *filename; 150 gchar *filename;
154 qq_buddy *q_bud; 151 qq_buddy *q_bud;
155 gchar icon_suffix;
156 */
157 152
158 /* do not use g_return_val_if_fail, as it is not assertion */ 153 /* do not use g_return_val_if_fail, as it is not assertion */
159 if (b == NULL || b->proto_data == NULL) 154 if (b == NULL || b->proto_data == NULL)
160 return "qq"; 155 return "qq";
161 156
162 /*
163 q_bud = (qq_buddy *) b->proto_data; 157 q_bud = (qq_buddy *) b->proto_data;
164 158 filename = get_icon_name(q_bud->icon / 3 + 1);
165 icon_suffix = get_suffix_from_status(q_bud->status);
166 filename = get_icon_name(q_bud->icon / 3 + 1, icon_suffix);
167 159
168 return filename; 160 return filename;
169 */
170 return "qq";
171 } 161 }
172 162
173 163
174 /* a short status text beside buddy icon*/ 164 /* a short status text beside buddy icon*/
175 static gchar *_qq_status_text(GaimBuddy *b) 165 static gchar *_qq_status_text(GaimBuddy *b)
280 { 270 {
281 /* each char ** are refering to filename in pixmaps/gaim/status/default/ *png */ 271 /* each char ** are refering to filename in pixmaps/gaim/status/default/ *png */
282 272
283 qq_buddy *q_bud = b->proto_data; 273 qq_buddy *q_bud = b->proto_data;
284 const char *emblems[4] = { NULL, NULL, NULL, NULL }; 274 const char *emblems[4] = { NULL, NULL, NULL, NULL };
285 int i = 0; 275 int i = 1;
286 276
287 if (q_bud == NULL) { 277 if (q_bud == NULL) {
288 emblems[0] = "offline"; 278 emblems[0] = "offline";
289 } else { 279 } else {
280 /* TODO the wireless icon is a bit too big to look good with QQ faces */
281 if (q_bud->status == QQ_BUDDY_ONLINE_AWAY || q_bud->status == QQ_SELF_STATUS_AWAY)
282 emblems[i++] = "away";
290 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) 283 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER)
291 emblems[i++] = "qq_member"; 284 emblems[i++] = "qq_member";
292 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE) 285 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE)
293 emblems[i++] = "wireless"; 286 emblems[i++] = "wireless";
294 if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO) 287 if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO)
295 emblems[i++] = "video"; 288 emblems[i%4] = "video";
296 289
297 } 290 }
298 291
299 *se = emblems[0]; 292 *se = emblems[0];
300 *sw = emblems[1]; 293 *sw = emblems[1];
433 426
434 g_return_if_fail(gc != NULL && gc->proto_data != NULL); 427 g_return_if_fail(gc != NULL && gc->proto_data != NULL);
435 428
436 qd = (qq_data *) gc->proto_data; 429 qd = (qq_data *) gc->proto_data;
437 qq_prepare_modify_info(gc); 430 qq_prepare_modify_info(gc);
431 }
432
433 static void _qq_change_face_cb(GaimConnection *gc, GaimRequestFields *fields)
434 {
435 qq_data *qd;
436 GaimRequestField *field;
437 gint suffix;
438
439 g_return_if_fail(gc != NULL && gc->proto_data != NULL);
440 qd = (qq_data *) gc->proto_data;
441
442 field = gaim_request_fields_get_field(fields, "face_num");
443 suffix = get_icon_offset_from_self_status(qd->status);
444 qd->my_icon = gaim_request_field_choice_get_value(field) * 3 + suffix;
445 qd->modifying_face = TRUE;
446 qq_send_packet_get_info(gc, qd->uid, FALSE);
447 }
448
449 static void _qq_add_face_choice(GaimRequestFieldGroup *group, gint face_num)
450 {
451 GaimRequestField *field;
452 struct stat img_stat;
453 FILE *file;
454 gchar *filename, *prefix, *img_data, *face;
455 gint size;
456
457 face = g_strdup_printf("qq_%i.png", face_num);
458 prefix = br_extract_prefix(DATADIR);
459 filename = g_build_filename(prefix, "share","pixmaps",
460 "gaim","status","default", face, NULL);
461 g_free(face);
462 face = g_strdup_printf("%i", face_num);
463 stat(filename, &img_stat);
464 file = g_fopen(filename, "rb");
465 if (file) {
466 img_data = g_malloc(img_stat.st_size);
467 size = fread(img_data, 1, img_stat.st_size, file);
468
469 field = gaim_request_field_image_new(face, face, img_data, size);
470 gaim_request_field_group_add_field(group, field);
471
472 g_free(img_data);
473 fclose(file);
474 }
475 g_free(face);
476 g_free(prefix);
477 }
478
479 static void _qq_menu_change_face(GaimPluginAction *action)
480 {
481 GaimConnection *gc = (GaimConnection *) action->context;
482 qq_data *qd = (qq_data *) gc->proto_data;
483 GaimRequestFields *fields;
484 GaimRequestFieldGroup *group;
485 GaimRequestField *field;
486 gchar *label;
487 gint i;
488
489 fields = gaim_request_fields_new();
490 group = gaim_request_field_group_new(_("Selection"));
491 gaim_request_fields_add_group(fields, group);
492 field = gaim_request_field_choice_new("face_num",
493 _("Select a number"), qd->my_icon / 3);
494 for(i = 1; i <= QQ_FACES; i++) {
495 label = g_strdup_printf("%i", i);
496 gaim_request_field_choice_add(field, label);
497 g_free(label);
498 }
499 gaim_request_field_group_add_field(group, field);
500 group = gaim_request_field_group_new(_("Faces"));
501 gaim_request_fields_add_group(fields, group);
502 for(i = 1; i <= QQ_FACES; i++)
503 _qq_add_face_choice(group, i);
504
505 gaim_request_fields(gc, _("Change Your QQ Face"),
506 _("Change Face"), NULL, fields,
507 _("Update"), G_CALLBACK(_qq_change_face_cb),
508 _("Cancel"), NULL,
509 gc);
438 } 510 }
439 511
440 static void _qq_menu_change_password(GaimPluginAction *action) 512 static void _qq_menu_change_password(GaimPluginAction *action)
441 { 513 {
442 gaim_notify_uri(NULL, "https://password.qq.com"); 514 gaim_notify_uri(NULL, "https://password.qq.com");
791 GList *m; 863 GList *m;
792 GaimPluginAction *act; 864 GaimPluginAction *act;
793 865
794 m = NULL; 866 m = NULL;
795 act = gaim_plugin_action_new(_("Modify My Information"), _qq_menu_modify_my_info); 867 act = gaim_plugin_action_new(_("Modify My Information"), _qq_menu_modify_my_info);
868 m = g_list_append(m, act);
869
870 act = gaim_plugin_action_new(_("Change My Face"), _qq_menu_change_face);
796 m = g_list_append(m, act); 871 m = g_list_append(m, act);
797 872
798 act = gaim_plugin_action_new(_("Change Password"), _qq_menu_change_password); 873 act = gaim_plugin_action_new(_("Change Password"), _qq_menu_change_password);
799 m = g_list_append(m, act); 874 m = g_list_append(m, act);
800 875