* centralize formatstr parsing, cleanup
This commit is contained in:
@ -31,52 +31,15 @@
|
||||
#include "mu-contacts.h"
|
||||
#include "mu-runtime.h"
|
||||
|
||||
enum _OutputFormat {
|
||||
FORMAT_PLAIN,
|
||||
FORMAT_MUTT_ALIAS,
|
||||
FORMAT_MUTT_AB, /* mutt external address book */
|
||||
FORMAT_WL,
|
||||
FORMAT_BBDB,
|
||||
FORMAT_CSV,
|
||||
FORMAT_ORG_CONTACT,
|
||||
|
||||
FORMAT_NONE
|
||||
};
|
||||
typedef enum _OutputFormat OutputFormat;
|
||||
|
||||
static OutputFormat
|
||||
get_output_format (const char *formatstr)
|
||||
{
|
||||
int i;
|
||||
struct {
|
||||
const char* name;
|
||||
OutputFormat format;
|
||||
} formats [] = {
|
||||
{MU_CONFIG_FORMAT_PLAIN, FORMAT_PLAIN},
|
||||
{MU_CONFIG_FORMAT_MUTT_ALIAS, FORMAT_MUTT_ALIAS},
|
||||
{MU_CONFIG_FORMAT_MUTT_AB, FORMAT_MUTT_AB},
|
||||
{MU_CONFIG_FORMAT_WL, FORMAT_WL},
|
||||
{MU_CONFIG_FORMAT_BBDB, FORMAT_BBDB},
|
||||
{MU_CONFIG_FORMAT_CSV, FORMAT_CSV},
|
||||
{MU_CONFIG_FORMAT_ORG_CONTACT, FORMAT_ORG_CONTACT}
|
||||
};
|
||||
|
||||
for (i = 0; i != G_N_ELEMENTS(formats); i++)
|
||||
if (g_strcmp0 (formats[i].name, formatstr) == 0)
|
||||
return formats[i].format;
|
||||
|
||||
return FORMAT_NONE;
|
||||
}
|
||||
|
||||
static void
|
||||
print_header (OutputFormat format)
|
||||
print_header (MuConfigFormat format)
|
||||
{
|
||||
switch (format) {
|
||||
case FORMAT_BBDB:
|
||||
case MU_CONFIG_FORMAT_BBDB:
|
||||
g_print (";; -*-coding: utf-8-emacs;-*-\n"
|
||||
";;; file-version: 6\n");
|
||||
break;
|
||||
case FORMAT_MUTT_AB:
|
||||
case MU_CONFIG_FORMAT_MUTT_AB:
|
||||
g_print ("Matching addresses in the mu database:\n");
|
||||
break;
|
||||
default:
|
||||
@ -84,8 +47,6 @@ print_header (OutputFormat format)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
each_contact_bbdb (const char *email, const char *name, time_t tstamp)
|
||||
{
|
||||
@ -110,28 +71,31 @@ each_contact_bbdb (const char *email, const char *name, time_t tstamp)
|
||||
static void
|
||||
each_contact_mutt_alias (const char *email, const char *name)
|
||||
{
|
||||
if (name) {
|
||||
gchar *nick;
|
||||
gchar *nick;
|
||||
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
nick = mu_str_guess_nick (name);
|
||||
mu_util_print_encoded ("alias %s %s <%s>\n",
|
||||
nick, name, email);
|
||||
g_free (nick);
|
||||
|
||||
nick = mu_str_guess_nick (name);
|
||||
mu_util_print_encoded ("alias %s %s <%s>\n",
|
||||
nick, name, email);
|
||||
|
||||
g_free (nick);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
each_contact_wl (const char *email, const char *name)
|
||||
{
|
||||
if (name) {
|
||||
gchar *nick;
|
||||
nick = mu_str_guess_nick (name);
|
||||
mu_util_print_encoded ("%s \"%s\" \"%s\"\n",
|
||||
email, nick, name);
|
||||
g_free (nick);
|
||||
}
|
||||
gchar *nick;
|
||||
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
nick = mu_str_guess_nick (name);
|
||||
mu_util_print_encoded ("%s \"%s\" \"%s\"\n",
|
||||
email, nick, name);
|
||||
g_free (nick);
|
||||
}
|
||||
|
||||
|
||||
@ -153,14 +117,19 @@ print_plain (const char *email, const char *name, gboolean color)
|
||||
fputs (" ", stdout);
|
||||
}
|
||||
|
||||
if (color) fputs (MU_COLOR_GREEN, stdout);
|
||||
if (color)
|
||||
fputs (MU_COLOR_GREEN, stdout);
|
||||
|
||||
mu_util_fputs_encoded (email, stdout);
|
||||
if (color) fputs (MU_COLOR_DEFAULT, stdout);
|
||||
|
||||
if (color)
|
||||
fputs (MU_COLOR_DEFAULT, stdout);
|
||||
|
||||
fputs ("\n", stdout);
|
||||
}
|
||||
|
||||
struct _ECData {
|
||||
OutputFormat format;
|
||||
MuConfigFormat format;
|
||||
gboolean color;
|
||||
};
|
||||
typedef struct _ECData ECData;
|
||||
@ -171,14 +140,23 @@ each_contact (const char *email, const char *name, time_t tstamp,
|
||||
ECData *ecdata)
|
||||
{
|
||||
switch (ecdata->format) {
|
||||
case FORMAT_MUTT_ALIAS: each_contact_mutt_alias (email, name); break;
|
||||
case FORMAT_MUTT_AB:
|
||||
case MU_CONFIG_FORMAT_MUTT_ALIAS:
|
||||
each_contact_mutt_alias (email, name);
|
||||
break;
|
||||
case MU_CONFIG_FORMAT_MUTT_AB:
|
||||
mu_util_print_encoded ("%s\t%s\t\n",
|
||||
email, name ? name : ""); break;
|
||||
case FORMAT_WL: each_contact_wl (email, name); break;
|
||||
case FORMAT_ORG_CONTACT: each_contact_org_contact (email, name); break;
|
||||
case FORMAT_BBDB: each_contact_bbdb (email, name, tstamp); break;
|
||||
case FORMAT_CSV:
|
||||
email, name ? name : "");
|
||||
break;
|
||||
case MU_CONFIG_FORMAT_WL:
|
||||
each_contact_wl (email, name);
|
||||
break;
|
||||
case MU_CONFIG_FORMAT_ORG_CONTACT:
|
||||
each_contact_org_contact (email, name);
|
||||
break;
|
||||
case MU_CONFIG_FORMAT_BBDB:
|
||||
each_contact_bbdb (email, name, tstamp);
|
||||
break;
|
||||
case MU_CONFIG_FORMAT_CSV:
|
||||
mu_util_print_encoded ("%s,%s\n", name ? name : "", email);
|
||||
break;
|
||||
default:
|
||||
@ -188,7 +166,7 @@ each_contact (const char *email, const char *name, time_t tstamp,
|
||||
|
||||
|
||||
static MuExitCode
|
||||
run_cmd_cfind (const char* pattern, OutputFormat format,
|
||||
run_cmd_cfind (const char* pattern, MuConfigFormat format,
|
||||
gboolean color)
|
||||
{
|
||||
gboolean rv;
|
||||
@ -219,17 +197,19 @@ run_cmd_cfind (const char* pattern, OutputFormat format,
|
||||
|
||||
}
|
||||
|
||||
MuExitCode
|
||||
mu_cmd_cfind (MuConfig *opts)
|
||||
static gboolean
|
||||
cfind_params_valid (MuConfig *opts)
|
||||
{
|
||||
OutputFormat format;
|
||||
|
||||
g_return_val_if_fail (opts, MU_EXITCODE_ERROR);
|
||||
g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_CFIND,
|
||||
MU_EXITCODE_ERROR);
|
||||
|
||||
format = get_output_format (opts->formatstr);
|
||||
if (format == FORMAT_NONE) {
|
||||
switch (opts->format) {
|
||||
case MU_CONFIG_FORMAT_PLAIN:
|
||||
case MU_CONFIG_FORMAT_MUTT_ALIAS:
|
||||
case MU_CONFIG_FORMAT_MUTT_AB:
|
||||
case MU_CONFIG_FORMAT_WL:
|
||||
case MU_CONFIG_FORMAT_BBDB:
|
||||
case MU_CONFIG_FORMAT_CSV:
|
||||
case MU_CONFIG_FORMAT_ORG_CONTACT:
|
||||
break;
|
||||
default:
|
||||
g_warning ("invalid output format %s",
|
||||
opts->formatstr ? opts->formatstr : "<none>");
|
||||
return FALSE;
|
||||
@ -238,9 +218,23 @@ mu_cmd_cfind (MuConfig *opts)
|
||||
/* only one pattern allowed */
|
||||
if (opts->params[1] && opts->params[2]) {
|
||||
g_warning ("usage: mu cfind [options] [<ptrn>]");
|
||||
return MU_EXITCODE_ERROR;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return run_cmd_cfind (opts->params[1], format, opts->color);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
MuExitCode
|
||||
mu_cmd_cfind (MuConfig *opts)
|
||||
{
|
||||
g_return_val_if_fail (opts, MU_EXITCODE_ERROR);
|
||||
g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_CFIND,
|
||||
MU_EXITCODE_ERROR);
|
||||
|
||||
if (!cfind_params_valid (opts))
|
||||
return MU_EXITCODE_ERROR;
|
||||
|
||||
return run_cmd_cfind (opts->params[1], opts->format, opts->color);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user