comparison mcabber/src/jab_iq.c @ 1005:e5c10cc29660

Improve vcard support This patch adds support for the address, telephone and email fields when receiving a vCard IQ result.
author Mikael Berthe <mikael@lilotux.net>
date Fri, 10 Nov 2006 20:54:10 +0100
parents b57a01ffeed6
children f61131cd86a0
comparison
equal deleted inserted replaced
1004:b57a01ffeed6 1005:e5c10cc29660
401 if (data) { 401 if (data) {
402 buf = g_strdup_printf("Middle Name: %s", data); 402 buf = g_strdup_printf("Middle Name: %s", data);
403 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE); 403 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
404 g_free(buf); 404 g_free(buf);
405 } 405 }
406 } else if (!strcmp(p, "ADR")) { // TODO 406 } else if (!strcmp(p, "ADR")) {
407 } else if (!strcmp(p, "TEL")) { // TODO 407 enum {
408 adr_home = 1<<0,
409 adr_work = 1<<1,
410 adr_postal = 1<<2,
411 adr_pref = 1<<3,
412 } adr_attrib = 0;
413 if (xmlnode_get_tag(x, "HOME"))
414 adr_attrib |= adr_home;
415 if (xmlnode_get_tag(x, "WORK"))
416 adr_attrib |= adr_work;
417 if (xmlnode_get_tag(x, "POSTAL"))
418 adr_attrib |= adr_postal;
419 if (xmlnode_get_tag(x, "PREF"))
420 adr_attrib |= adr_pref;
421 data = xmlnode_get_tag_data(x, "EXTADD"); // Ext. Address
422 if (data) {
423 buf = g_strdup_printf("Addr (ext): %s%s%s%s %s",
424 (adr_attrib & adr_home ? "[home]" : ""),
425 (adr_attrib & adr_work ? "[work]" : ""),
426 (adr_attrib & adr_postal ? "[voice]" : ""),
427 (adr_attrib & adr_pref ? "[pref]" : ""),
428 data);
429 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
430 g_free(buf);
431 }
432 data = xmlnode_get_tag_data(x, "STREET"); // Street
433 if (data) {
434 buf = g_strdup_printf("Street: %s%s%s%s %s",
435 (adr_attrib & adr_home ? "[home]" : ""),
436 (adr_attrib & adr_work ? "[work]" : ""),
437 (adr_attrib & adr_postal ? "[voice]" : ""),
438 (adr_attrib & adr_pref ? "[pref]" : ""),
439 data);
440 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
441 g_free(buf);
442 }
443 data = xmlnode_get_tag_data(x, "LOCALITY"); // Locality
444 if (data) {
445 buf = g_strdup_printf("Locality: %s%s%s%s %s",
446 (adr_attrib & adr_home ? "[home]" : ""),
447 (adr_attrib & adr_work ? "[work]" : ""),
448 (adr_attrib & adr_postal ? "[voice]" : ""),
449 (adr_attrib & adr_pref ? "[pref]" : ""),
450 data);
451 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
452 g_free(buf);
453 }
454 data = xmlnode_get_tag_data(x, "REGION"); // Region
455 if (data) {
456 buf = g_strdup_printf("Region: %s%s%s%s %s",
457 (adr_attrib & adr_home ? "[home]" : ""),
458 (adr_attrib & adr_work ? "[work]" : ""),
459 (adr_attrib & adr_postal ? "[voice]" : ""),
460 (adr_attrib & adr_pref ? "[pref]" : ""),
461 data);
462 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
463 g_free(buf);
464 }
465 data = xmlnode_get_tag_data(x, "PCODE"); // Postal Code
466 if (data) {
467 buf = g_strdup_printf("Postal code: %s%s%s%s %s",
468 (adr_attrib & adr_home ? "[home]" : ""),
469 (adr_attrib & adr_work ? "[work]" : ""),
470 (adr_attrib & adr_postal ? "[voice]" : ""),
471 (adr_attrib & adr_pref ? "[pref]" : ""),
472 data);
473 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
474 g_free(buf);
475 }
476 data = xmlnode_get_tag_data(x, "CTRY"); // Country
477 if (data) {
478 buf = g_strdup_printf("Country: %s%s%s%s %s",
479 (adr_attrib & adr_home ? "[home]" : ""),
480 (adr_attrib & adr_work ? "[work]" : ""),
481 (adr_attrib & adr_postal ? "[voice]" : ""),
482 (adr_attrib & adr_pref ? "[pref]" : ""),
483 data);
484 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
485 g_free(buf);
486 }
487 } else if (!strcmp(p, "TEL")) {
488 enum {
489 tel_home = 1<<0,
490 tel_work = 1<<1,
491 tel_voice = 1<<2,
492 tel_fax = 1<<3,
493 tel_cell = 1<<4,
494 tel_pref = 1<<5
495 } tel_attrib = 0;
496 data = xmlnode_get_tag_data(x, "NUMBER");
497 if (data) {
498 if (xmlnode_get_tag(x, "HOME"))
499 tel_attrib |= tel_home;
500 if (xmlnode_get_tag(x, "WORK"))
501 tel_attrib |= tel_work;
502 if (xmlnode_get_tag(x, "VOICE"))
503 tel_attrib |= tel_voice;
504 if (xmlnode_get_tag(x, "FAX"))
505 tel_attrib |= tel_fax;
506 if (xmlnode_get_tag(x, "CELL"))
507 tel_attrib |= tel_cell;
508 if (xmlnode_get_tag(x, "PREF"))
509 tel_attrib |= tel_pref;
510 buf = g_strdup_printf("Phone: %s%s%s%s%s%s %s",
511 (tel_attrib & tel_home ? "[home]" : ""),
512 (tel_attrib & tel_work ? "[work]" : ""),
513 (tel_attrib & tel_voice ? "[voice]" : ""),
514 (tel_attrib & tel_fax ? "[fax]" : ""),
515 (tel_attrib & tel_cell ? "[cell]" : ""),
516 (tel_attrib & tel_pref ? "[pref]" : ""),
517 data);
518 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
519 g_free(buf);
520 }
408 } else if (!strcmp(p, "EMAIL")) { 521 } else if (!strcmp(p, "EMAIL")) {
522 enum {
523 email_home = 1<<0,
524 email_work = 1<<1,
525 email_inet = 1<<2,
526 email_pref = 1<<3
527 } email_attrib = 0;
409 data = xmlnode_get_tag_data(x, "USERID"); 528 data = xmlnode_get_tag_data(x, "USERID");
410 if (data) 529 if (data) {
411 title = "Email"; // XXX 530 if (xmlnode_get_tag(x, "HOME"))
412 } else if (!strcmp(p, "ORG")) { // TODO 531 email_attrib |= email_home;
532 if (xmlnode_get_tag(x, "WORK"))
533 email_attrib |= email_work;
534 if (xmlnode_get_tag(x, "INTERNET"))
535 email_attrib |= email_inet;
536 if (xmlnode_get_tag(x, "PREF"))
537 email_attrib |= email_pref;
538 buf = g_strdup_printf("Email: %s%s%s%s %s",
539 (email_attrib & email_home ? "[home]" : ""),
540 (email_attrib & email_work ? "[work]" : ""),
541 (email_attrib & email_inet ? "[inet]" : ""),
542 (email_attrib & email_pref ? "[pref]" : ""),
543 data);
544 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
545 g_free(buf);
546 }
547 } else if (!strcmp(p, "ORG")) {
548 data = xmlnode_get_tag_data(x, "ORGNAME");
549 if (data) {
550 buf = g_strdup_printf("Organisation name: %s", data);
551 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
552 g_free(buf);
553 }
554 data = xmlnode_get_tag_data(x, "ORGUNIT");
555 if (data) {
556 buf = g_strdup_printf("Organisation unit: %s", data);
557 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);
558 g_free(buf);
559 }
413 } 560 }
414 561
415 if (title) { 562 if (title) {
416 buf = g_strdup_printf("%s: %s", title, data); 563 buf = g_strdup_printf("%s: %s", title, data);
417 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE); 564 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_NONE);