]> git.deb.at Git - pkg/abook.git/blobdiff - abook.c
Merge remote-tracking branch 'upstream/master' into upstream
[pkg/abook.git] / abook.c
diff --git a/abook.c b/abook.c
index 85210584003ff10914d0e04ea2229229c1287bdc..7410f6b50747f53b074f819c3be3a87168192764 100644 (file)
--- a/abook.c
+++ b/abook.c
@@ -377,6 +377,11 @@ parse_command_line(int argc, char **argv)
                                set_convert_var(informat);
                                break;
                        case OPT_OUTFORMAT:
+                               if(mode != MODE_CONVERT && mode != MODE_QUERY) {
+                                 fprintf(stderr,
+                                         _("please use option --outformat after --convert or --mutt-query option\n"));
+                                 exit(EXIT_FAILURE);
+                               }
                                // ascii-name is stored, it's used to traverse
                                // e_filters[] in MODE_CONVERT (see export_file())
                                outformat = optarg;
@@ -385,8 +390,8 @@ parse_command_line(int argc, char **argv)
                                selected_item_filter = select_output_item_filter(outformat);
                                break;
                        case OPT_OUTFORMAT_STR:
-                               strncpy(custom_format, optarg, FORMAT_STRING_LEN - 1);
-                               custom_format[FORMAT_STRING_LEN] = 0;
+                               strncpy(custom_format, optarg, FORMAT_STRING_LEN);
+                               custom_format[FORMAT_STRING_LEN - 1] = 0;
                                break;
                        case OPT_INFILE:
                                set_convert_var(infile);
@@ -410,9 +415,13 @@ parse_command_line(int argc, char **argv)
        }
        if(! selected_item_filter.func)
                selected_item_filter = select_output_item_filter("muttq");
-       else if (! strcmp(outformat, "custom") && *custom_format) {
-               parsed_custom_format = (char *)malloc(FORMAT_STRING_LEN * sizeof(char*));
-               custom_format_fields = (enum field_types *)malloc(FORMAT_STRING_MAX_FIELDS * sizeof(enum field_types *));
+       else if (! strcmp(outformat, "custom")) {
+               if(! *custom_format) {
+                       fprintf(stderr, _("Invalid custom format string\n"));
+                       exit(EXIT_FAILURE);
+               }
+               parsed_custom_format = (char *)malloc(FORMAT_STRING_LEN);
+               custom_format_fields = (enum field_types *)malloc(FORMAT_STRING_MAX_FIELDS * sizeof(enum field_types));
                parse_custom_format(custom_format, parsed_custom_format, custom_format_fields);
        }
        if(optind < argc) {
@@ -460,6 +469,8 @@ show_usage()
        puts    (_("                                    (default: text)"));
        puts    (_("    --outfile       <file>          destination file"));
        puts    (_("                                    (default: stdout)"));
+       puts    (_("    --outformatstr  <str>           format to use for \"custom\" --outformat"));
+       puts    (_("                                    (default: \"{nick} ({name}): {mobile}\")"));
        puts    (_("    --formats                       list available formats"));
 }
 
@@ -491,7 +502,12 @@ mutt_query(char *str)
                        printf("Not found\n");
                        quit_mutt_query(EXIT_FAILURE);
                }
-               putchar('\n');
+               // mutt expects a leading line containing
+               // a message about the query.
+               // Others output filter supporting query (vcard, custom)
+               // don't needs this.
+               if(!strcmp(selected_item_filter.filtname, "muttq"))
+                       putchar('\n');
                while(i >= 0) {
                        e_write_item(stdout, i, selected_item_filter.func);
                        i = find_item(str, i + 1, search_fields);
@@ -688,7 +704,7 @@ convert(char *srcformat, char *srcfile, char *dstformat, char *dstfile)
  * --add-email handling
  */
 
-static int add_email_count = 0;
+static int add_email_count = 0, add_email_found = 0;
 
 static void
 quit_add_email()
@@ -699,7 +715,7 @@ quit_add_email()
                        exit(EXIT_FAILURE);
                }
                printf(_("%d item(s) added to %s\n"), add_email_count, datafile);
-       } else {
+       } else if (add_email_found == 0) {
                puts(_("Valid sender address not found"));
        }
 
@@ -798,6 +814,7 @@ add_email(int quiet)
        do {
                line = getaline(stdin);
                if(line && !strncasecmp("From:", line, 5) ) {
+                       add_email_found++;
                        getname(line, &name, &email);
                        add_email_count += add_email_add_item(quiet,
                                        name, email);