diff options
Diffstat (limited to 'get-contact-numbers.c')
-rw-r--r-- | get-contact-numbers.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/get-contact-numbers.c b/get-contact-numbers.c index 0d9c02b..3b032ce 100644 --- a/get-contact-numbers.c +++ b/get-contact-numbers.c @@ -1,26 +1,44 @@ /* See LICENSE file for copyright and license details. */ #include "common.h" -USAGE("[-c context] [-F | -f] [-M | -m] contact-id ..."); +USAGE("[-a address-book-country-calling-code] [-l local-country-calling-code] " + "[-c context] [-n number] [-F | -f] [-M | -m] [-CNT] contact-id ..."); int main(int argc, char *argv[]) { + int display_ctx = 0, display_num = 0, display_type = 0; int require_mobile = -1, require_fax = -1; struct passwd *user; struct libcontacts_contact contact; struct libcontacts_number **numbers, *number; - const char *lookup_ctx = NULL; + const char *lookup_ctx = NULL, *lookup_num = NULL; + const char *cc_contacts = NULL, *cc_location = NULL; int ret = 0; size_t i; ARGBEGIN { + case 'a': + if (cc_contacts) + usage(); + cc_contacts = ARG(); + break; + case 'l': + if (cc_location) + usage(); + cc_location = ARG(); + break; case 'c': if (lookup_ctx) usage(); lookup_ctx = ARG(); break; + case 'n': + if (lookup_num) + usage(); + lookup_num = ARG(); + break; case 'F': if (require_fax >= 0) usage(); @@ -41,6 +59,15 @@ main(int argc, char *argv[]) usage(); require_mobile = 1; break; + case 'C': + display_ctx = 1; + break; + case 'N': + display_num = 1; + break; + case 'T': + display_type = 1; + break; default: usage(); } ARGEND; @@ -48,6 +75,12 @@ main(int argc, char *argv[]) if (!argc) usage(); + if (!display_ctx && !display_num && !display_type) { + display_ctx = !lookup_ctx; + display_num = !lookup_num; + display_type = (require_mobile < 0 || require_fax < 0); + } + for (i = 0; argv[i]; i++) if (!*argv[i] || strchr(argv[i], '/')) usage(); @@ -73,13 +106,20 @@ main(int argc, char *argv[]) continue; if (lookup_ctx && strcmpnul(number->context, lookup_ctx)) continue; + if (lookup_num && !libcontacts_same_number(number->number, cc_contacts, lookup_num, cc_location)) + continue; if (argc > 1) printf("%s: ", *argv); - printf("%c%c", "-m"[number->is_mobile], "-f"[number->is_facsimile]); - if (!lookup_ctx) - printf(" %s (%s)\n", number->number, number->context); - else - printf(" %s\n", number->number); + if (display_type) { + printf("%c%c", "-m"[number->is_mobile], "-f"[number->is_facsimile]); + if (display_ctx || display_num) + printf(" "); + } + if (display_ctx) + printf("%s%s", number->context, display_num ? ": " : ""); + if (display_num) + printf("%s", number->number); + printf("\n"); } } libcontacts_contact_destroy(&contact); |