* mu-cmd-server: some cleanups for the 'contacts' command

This commit is contained in:
djcb
2012-06-20 11:29:46 +03:00
parent b1449376b4
commit 4dee4ccd28

View File

@ -525,8 +525,8 @@ cmd_compose (MuStore *store, MuQuery *query, GSList *args, GError **err)
struct _SexpData { struct _SexpData {
GString *gstr; GString *gstr;
gboolean only_personal; gboolean personal;
time_t newer_than; time_t after;
}; };
typedef struct _SexpData SexpData; typedef struct _SexpData SexpData;
@ -535,31 +535,33 @@ static void
each_contact_sexp (const char *email, const char *name, gboolean personal, each_contact_sexp (const char *email, const char *name, gboolean personal,
time_t tstamp, SexpData *sdata) time_t tstamp, SexpData *sdata)
{ {
static const char *nil = "nil"; char *escmail;
char *escmail, *escname;
/* only include newer-than-x contacts */
if (tstamp < sdata->newer_than)
return;
/* (maybe) only include 'personal' contacts */ /* (maybe) only include 'personal' contacts */
if (sdata->only_personal && !personal) if (sdata->personal && !personal)
return; return;
escmail = email ? mu_str_escape_c_literal (email, TRUE) : (char*)nil; /* only include newer-than-x contacts */
escname = name ? mu_str_escape_c_literal (name, TRUE) : (char*)nil; if (tstamp < sdata->after)
return;
g_string_append_printf (sdata->gstr, /* only include *real* e-mail addresses (ignore local
"(:name %s :mail %s " * addresses... there's little to complete there anyway...) */
":timestamp (%u %u 0))\n", if (!email || !strstr (email, "@"))
escname, escmail, return;
(unsigned)(tstamp >> 16),
(unsigned)(tstamp & 0xffff));
if (escmail != nil)
g_free (escmail);
if (escname != nil) escmail = mu_str_escape_c_literal (email, TRUE);
if (name) {
char *escname;
escname = mu_str_escape_c_literal (name, TRUE);
g_string_append_printf (sdata->gstr, "(:name %s :mail %s)\n",
escname, escmail);
g_free (escname); g_free (escname);
} else
g_string_append_printf (sdata->gstr, "(:mail %s)\n", escmail);
g_free (escmail);
} }
@ -572,15 +574,14 @@ each_contact_sexp (const char *email, const char *name, gboolean personal,
* @return the sexp * @return the sexp
*/ */
static char* static char*
contacts_to_sexp (MuContacts *contacts, contacts_to_sexp (MuContacts *contacts, gboolean personal, time_t after)
gboolean only_personal, time_t newer_than)
{ {
SexpData sdata; SexpData sdata;
g_return_val_if_fail (contacts, NULL); g_return_val_if_fail (contacts, NULL);
sdata.only_personal = only_personal; sdata.personal = personal;
sdata.newer_than = newer_than; sdata.after = after;
/* make a guess for the initial size */ /* make a guess for the initial size */
sdata.gstr = g_string_sized_new (mu_contacts_count(contacts) * 128); sdata.gstr = g_string_sized_new (mu_contacts_count(contacts) * 128);
@ -599,14 +600,13 @@ cmd_contacts (MuStore *store, MuQuery *query, GSList *args, GError **err)
{ {
MuContacts *contacts; MuContacts *contacts;
char *sexp; char *sexp;
gboolean only_personal; gboolean personal;
time_t newer_than; time_t after;
const char *str; const char *str;
only_personal = get_bool_from_args (args, "only-personal", TRUE, personal = get_bool_from_args (args, "personal", TRUE, NULL);
NULL); str = get_string_from_args (args, "after", TRUE, NULL);
str = get_string_from_args (args, "newer-than", TRUE, NULL); after = str ? (time_t)atoi(str) : 0;
newer_than = str ? (time_t)atoi(str) : 0;
contacts = mu_contacts_new contacts = mu_contacts_new
(mu_runtime_path (MU_RUNTIME_PATH_CONTACTS)); (mu_runtime_path (MU_RUNTIME_PATH_CONTACTS));
@ -617,8 +617,8 @@ cmd_contacts (MuStore *store, MuQuery *query, GSList *args, GError **err)
} }
/* dump the contacts cache as a giant sexp */ /* dump the contacts cache as a giant sexp */
sexp = contacts_to_sexp (contacts, only_personal, newer_than); sexp = contacts_to_sexp (contacts, personal, after);
print_expr ("%s", sexp); print_expr ("%s\n", sexp);
g_free (sexp); g_free (sexp);
mu_contacts_destroy (contacts); mu_contacts_destroy (contacts);