mirror of https://github.com/djcb/mu.git
* initial JSON output support (WIP)
This commit is contained in:
parent
4409b565dc
commit
3ab2cd11a9
6
TODO
6
TODO
|
@ -9,16 +9,16 @@
|
||||||
- [ ] completion for zsh
|
- [ ] completion for zsh
|
||||||
- [ ] don't make test mail files executable
|
- [ ] don't make test mail files executable
|
||||||
|
|
||||||
** release 0.9.2 [20%]
|
** release 0.9.2 [30%]
|
||||||
|
|
||||||
- [ ] xml,json,sexp output
|
- [ ] xml,json,sexp output
|
||||||
- [ ] check all strings are really UTF8
|
- [ ] check all strings are really UTF8
|
||||||
- [ ] fix size value
|
- [ ] fix size value
|
||||||
- [ ] separate exit code for 'not found' vs other errors
|
- [X] separate exit code for 'not found' vs other errors
|
||||||
- [ ] fix build for Solaris
|
- [ ] fix build for Solaris
|
||||||
- [X] clearer errors when /home/user does not exist
|
- [X] clearer errors when /home/user does not exist
|
||||||
- [X] fix -pedantic build
|
- [X] fix -pedantic build
|
||||||
- [ ] make commit batch size configure param
|
- [X] make commit batch size configurable param
|
||||||
- [ ] better 'usage' info
|
- [ ] better 'usage' info
|
||||||
- [ ] add version info to output of configure, mu.log
|
- [ ] add version info to output of configure, mu.log
|
||||||
- [ ] make 'make check' more useful for others
|
- [ ] make 'make check' more useful for others
|
||||||
|
|
|
@ -229,20 +229,18 @@ mu_output_plain (MuMsgIter *iter, const char *fields, size_t summary_len,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_attr (const char* elm, const char *str)
|
print_attr_xml (const char* elm, const char *str)
|
||||||
{
|
{
|
||||||
gchar *esc;
|
gchar *esc;
|
||||||
|
|
||||||
if (!str || strlen(str) == 0)
|
if (!str || strlen(str) == 0)
|
||||||
return; /* empty: don't include */
|
return; /* empty: don't include */
|
||||||
|
|
||||||
esc = mu_str_escape_xml (str);
|
esc = g_markup_escape_text (str, -1);
|
||||||
g_print ("\t\t<%s>%s</%s>\n", elm, esc, elm);
|
g_print ("\t\t<%s>%s</%s>\n", elm, esc, elm);
|
||||||
g_free (esc);
|
g_free (esc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
mu_output_xml (MuMsgIter *iter, size_t *count)
|
mu_output_xml (MuMsgIter *iter, size_t *count)
|
||||||
{
|
{
|
||||||
|
@ -257,17 +255,17 @@ mu_output_xml (MuMsgIter *iter, size_t *count)
|
||||||
for (myiter = iter, mycount = 0; !mu_msg_iter_is_done (myiter);
|
for (myiter = iter, mycount = 0; !mu_msg_iter_is_done (myiter);
|
||||||
mu_msg_iter_next (myiter), ++mycount) {
|
mu_msg_iter_next (myiter), ++mycount) {
|
||||||
g_print ("\t<message>\n");
|
g_print ("\t<message>\n");
|
||||||
print_attr ("from", mu_msg_iter_get_from (iter));
|
print_attr_xml ("from", mu_msg_iter_get_from (iter));
|
||||||
print_attr ("to", mu_msg_iter_get_to (iter));
|
print_attr_xml ("to", mu_msg_iter_get_to (iter));
|
||||||
print_attr ("cc", mu_msg_iter_get_cc (iter));
|
print_attr_xml ("cc", mu_msg_iter_get_cc (iter));
|
||||||
print_attr ("subject", mu_msg_iter_get_subject (iter));
|
print_attr_xml ("subject", mu_msg_iter_get_subject (iter));
|
||||||
g_print ("\t\t<date>%u</date>\n",
|
g_print ("\t\t<date>%u</date>\n",
|
||||||
(unsigned) mu_msg_iter_get_date (iter));
|
(unsigned) mu_msg_iter_get_date (iter));
|
||||||
g_print ("\t\t<size>%u</size>\n",
|
g_print ("\t\t<size>%u</size>\n",
|
||||||
(unsigned) mu_msg_iter_get_size (iter));
|
(unsigned) mu_msg_iter_get_size (iter));
|
||||||
print_attr ("msgid", mu_msg_iter_get_msgid (iter));
|
print_attr_xml ("msgid", mu_msg_iter_get_msgid (iter));
|
||||||
print_attr ("path", mu_msg_iter_get_path (iter));
|
print_attr_xml ("path", mu_msg_iter_get_path (iter));
|
||||||
print_attr ("maildir", mu_msg_iter_get_maildir (iter));
|
print_attr_xml ("maildir", mu_msg_iter_get_maildir (iter));
|
||||||
g_print ("\t</message>\n");
|
g_print ("\t</message>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,13 +277,58 @@ mu_output_xml (MuMsgIter *iter, size_t *count)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_attr_json (const char* elm, const char *str, gboolean comma)
|
||||||
|
{
|
||||||
|
gchar *esc;
|
||||||
|
|
||||||
|
if (!str || strlen(str) == 0)
|
||||||
|
return; /* empty: don't include */
|
||||||
|
|
||||||
|
esc = g_strescape (str, NULL);
|
||||||
|
g_print ("\t\t\t\"%s\":\"%s\"%s\n", elm, esc, comma ? "," : "");
|
||||||
|
g_free (esc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
mu_output_json (MuMsgIter *iter, size_t *count)
|
mu_output_json (MuMsgIter *iter, size_t *count)
|
||||||
{
|
{
|
||||||
g_print ("{\n");
|
MuMsgIter *myiter;
|
||||||
g_print ("\t%s\n", __FUNCTION__);
|
size_t mycount;
|
||||||
g_print ("}\n");
|
|
||||||
|
g_return_val_if_fail (iter, FALSE);
|
||||||
|
|
||||||
|
g_print ("{\n\t\"messages\":\n\t[\n");
|
||||||
|
|
||||||
|
for (myiter = iter, mycount = 0; !mu_msg_iter_is_done (myiter);
|
||||||
|
mu_msg_iter_next (myiter), ++mycount) {
|
||||||
|
|
||||||
|
if (mycount != 0)
|
||||||
|
g_print (",\n");
|
||||||
|
|
||||||
|
g_print ("\t\t{\n");
|
||||||
|
print_attr_json ("from", mu_msg_iter_get_from (iter), TRUE);
|
||||||
|
print_attr_json ("to", mu_msg_iter_get_to (iter),TRUE);
|
||||||
|
print_attr_json ("cc", mu_msg_iter_get_cc (iter),TRUE);
|
||||||
|
print_attr_json ("subject", mu_msg_iter_get_subject (iter),
|
||||||
|
TRUE);
|
||||||
|
g_print ("\t\t\t\"date\":%u,\n",
|
||||||
|
(unsigned) mu_msg_iter_get_date (iter));
|
||||||
|
g_print ("\t\t\t\"size\":%u,\n",
|
||||||
|
(unsigned) mu_msg_iter_get_size (iter));
|
||||||
|
print_attr_json ("msgid", mu_msg_iter_get_msgid (iter),TRUE);
|
||||||
|
print_attr_json ("path", mu_msg_iter_get_path (iter),TRUE);
|
||||||
|
print_attr_json ("maildir", mu_msg_iter_get_maildir (iter),
|
||||||
|
TRUE);
|
||||||
|
g_print ("\t\t}");
|
||||||
|
}
|
||||||
|
g_print ("\t]\n}\n");
|
||||||
|
|
||||||
|
if (count)
|
||||||
|
*count = mycount;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -368,12 +368,3 @@ mu_str_fullpath_s (const char* path, const char* name)
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
char*
|
|
||||||
mu_str_escape_xml (const gchar* str)
|
|
||||||
{
|
|
||||||
if (!str)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return g_markup_escape_text (str, -1);
|
|
||||||
}
|
|
||||||
|
|
10
src/mu-str.h
10
src/mu-str.h
|
@ -221,16 +221,6 @@ time_t mu_str_date_parse_hdwmy (const char* str);
|
||||||
const char* mu_str_fullpath_s (const char* path, const char* name);
|
const char* mu_str_fullpath_s (const char* path, const char* name);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* escape string for inclusion in XML-data
|
|
||||||
*
|
|
||||||
* @param str a str or NULL
|
|
||||||
*
|
|
||||||
* @return the escaped version of the string; g_free when you're done
|
|
||||||
* with it.
|
|
||||||
*/
|
|
||||||
char* mu_str_escape_xml (const gchar* str);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /*__MU_STR_H__*/
|
#endif /*__MU_STR_H__*/
|
||||||
|
|
Loading…
Reference in New Issue