Mercurial > hg
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); |