X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook.c;h=2cbbbd1244b3d115e8ce98b2e8ae7a0775c33eb6;hb=7c5cfcacf9b413a8b9c41dfd8a41f0c643fbee18;hp=c80ea53f034609cea3d33bed60e9cdcd84dad831;hpb=3990095c4ac65c7f6e10b2fa074f763d048a92eb;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index c80ea53..2cbbbd1 100644 --- a/abook.c +++ b/abook.c @@ -204,7 +204,6 @@ show_usage() } extern list_item *database; -extern int items; static void muttq_print_item(int item) @@ -224,73 +223,28 @@ muttq_print_item(int item) ); } -static int -mutt_query_name(char *str) -{ - int i, j; - char *tmp; - - for(i = 0, j = 0 ; i < items; i++) { - tmp = strdup(database[i][NAME]); - if( strstr( strupper(tmp), strupper(str) ) != NULL ) { - if( !j ) - putchar('\n'); - muttq_print_item(i); - j++; - } - free(tmp); - } - - return j; -} - -static int -mutt_query_email(char *str) -{ - int i, j, k; - char *tmp, emails[MAX_EMAILS][MAX_EMAIL_LEN]; - - for(i = 0, j = 0; i < items; i++) { - split_emailstr(i, emails); - for(k = 0; k < MAX_EMAILS; k++) { - if( *emails[k] ) { - tmp = strdup( emails[k] ); - if( strstr( strupper(tmp), strupper(str) ) != NULL ) { - if( !j ) - putchar('\n'); - j++; - if( options_get_int("mutt_return_all_emails") ) { - muttq_print_item(i); - free(tmp); - break; - } else - printf("%s\t%s\n", emails[k], - database[i][NAME]); - } - free(tmp); - } - } - } - - return j; -} - static void mutt_query(char *str) { - int i; - init_mutt_query(); if( str == NULL || !strcasecmp(str, "all") ) { + struct db_enumerator e = init_db_enumerator(ENUM_ALL); printf("All items\n"); - for(i = 0; i < items; i++) - muttq_print_item(i); + db_enumerate_items(e) + muttq_print_item(e.item); } else { - if( !mutt_query_name(str) && !mutt_query_email(str) ) { + int search_fields[] = {NAME, EMAIL, NICK, -1}; + int i; + if( (i = find_item(str, 0, search_fields)) < 0 ) { printf("Not found\n"); quit_mutt_query(1); } + putchar('\n'); + while(i >= 0) { + muttq_print_item(i); + i = find_item(str, i+1, search_fields); + } } quit_mutt_query(0); @@ -319,42 +273,50 @@ quit_mutt_query(int status) } -void -launch_mutt(int item) +static char * +make_mailstr(int item) { - int i; char email[MAX_EMAIL_LEN]; - char *cmd; - char *tmp = options_get_str("mutt_command"); + char *ret; + char *name = mkstr("\"%s\"", database[item][NAME]); - if( !is_valid_item(item) ) - return; + get_first_email(email, item); - cmd = strconcat(tmp, " '", NULL ); + ret = *database[item][EMAIL] ? + mkstr("%s <%s>", name, email) : + strdup(name); - for(i=0; i < items; i++) { - if( ! is_selected(i) && i != list_current_item() ) - continue; - get_first_email(email, i); - tmp = mkstr("%s \"%s\"", cmd, database[i][NAME]); - my_free(cmd); - if( *database[i][EMAIL] ) { - cmd = mkstr("%s <%s>", tmp, email); + free(name); + + return ret; +} + +void +launch_mutt(int item) +{ + char *cmd = NULL, *mailstr = NULL; + + if( is_valid_item(item) ) + mailstr = make_mailstr(item); + else { + struct db_enumerator e = init_db_enumerator(ENUM_SELECTED); + char *tmp = NULL; + db_enumerate_items(e) { + tmp = mailstr; + mailstr = tmp ? + strconcat(tmp, ",", make_mailstr(e.item), NULL): + strconcat(make_mailstr(e.item), NULL); free(tmp); - tmp = cmd; } - cmd = strconcat(tmp, " ", NULL); - free(tmp); } - tmp = mkstr("%s%c", cmd, '\''); - free(cmd); - cmd = tmp; + cmd = strconcat(options_get_str("mutt_command"), " \'", mailstr, + "\'", NULL); + free(mailstr); #ifdef DEBUG fprintf(stderr, "cmd: %s\n", cmd); #endif system(cmd); - free(cmd); }