}
+static char *
+make_mailstr(int item)
+{
+ char email[MAX_EMAIL_LEN];
+ char *ret;
+ char *name = mkstr("\"%s\"", database[item][NAME]);
+
+ get_first_email(email, item);
+
+ ret = *database[item][EMAIL] ?
+ mkstr("%s <%s>", name, email) :
+ strdup(name);
+
+ free(name);
+
+ return ret;
+}
+
void
launch_mutt(int item)
{
- /*
- * This is _broken_
- */
-#if 0
- struct db_enumerator e = init_db_enumerator(ENUM_ALL);
- char email[MAX_EMAIL_LEN];
- char *cmd;
- char *tmp = options_get_str("mutt_command");
-
- cmd = strconcat(tmp, " '", NULL );
-
- db_enumerate_items(e) {
- if( e.item != item );
- get_first_email(email, e.item);
- tmp = mkstr("%s, \"%s\"", cmd, database[e.item][NAME]);
- my_free(cmd);
- if( *database[e.item][EMAIL] ) {
- cmd = mkstr("%s <%s>", tmp, email);
+ char *cmd = NULL, *mailstr = NULL;
+ char *mutt_command = options_get_str("mutt_command");
+
+ if(mutt_command == NULL || !*mutt_command)
+ return;
+
+ 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 = strconcat(cmd, "\'", NULL);
- free(cmd);
- cmd = tmp;
+ cmd = strconcat(mutt_command, " \'", mailstr,
+ "\'", NULL);
+ free(mailstr);
#ifdef DEBUG
fprintf(stderr, "cmd: %s\n", cmd);
#endif
system(cmd);
-
free(cmd);
-#endif
}
void