* mu-cmd-server: add support for moving without renaming

This commit is contained in:
djcb 2013-05-27 03:44:46 -07:00
parent ea5e6bc83e
commit f4d3eb2d7a
1 changed files with 20 additions and 15 deletions

View File

@ -1128,7 +1128,7 @@ get_flags (const char *path, const char *flagstr)
static MuError static MuError
do_move (MuStore *store, unsigned docid, MuMsg *msg, const char *maildir, do_move (MuStore *store, unsigned docid, MuMsg *msg, const char *maildir,
MuFlags flags, GError **err) MuFlags flags, gboolean new_name, GError **err)
{ {
unsigned rv; unsigned rv;
gchar *sexp; gchar *sexp;
@ -1142,7 +1142,7 @@ do_move (MuStore *store, unsigned docid, MuMsg *msg, const char *maildir,
different_mdir = different_mdir =
(g_strcmp0 (maildir, mu_msg_get_maildir(msg)) != 0); (g_strcmp0 (maildir, mu_msg_get_maildir(msg)) != 0);
if (!mu_msg_move_to_maildir (msg, maildir, flags, TRUE, err)) if (!mu_msg_move_to_maildir (msg, maildir, flags, TRUE, new_name, err))
return MU_G_ERROR_CODE (err); return MU_G_ERROR_CODE (err);
/* note, after mu_msg_move_to_maildir, path will be the *new* /* note, after mu_msg_move_to_maildir, path will be the *new*
@ -1166,11 +1166,12 @@ do_move (MuStore *store, unsigned docid, MuMsg *msg, const char *maildir,
} }
static MuError static MuError
move_msgid (MuStore *store, unsigned docid, const char* flagstr, GError **err) move_msgid (MuStore *store, unsigned docid, const char* flagstr, gboolean new_name,
GError **err)
{ {
MuMsg *msg; MuMsg *msg;
MuError rv; MuError rv;
MuFlags flags; MuFlags flags;
rv = MU_ERROR; rv = MU_ERROR;
msg = mu_store_get_msg (store, docid, err); msg = mu_store_get_msg (store, docid, err);
@ -1186,7 +1187,7 @@ move_msgid (MuStore *store, unsigned docid, const char* flagstr, GError **err)
goto leave; goto leave;
} }
rv = do_move (store, docid, msg, NULL, flags, err); rv = do_move (store, docid, msg, NULL, flags, new_name, err);
leave: leave:
if (msg) if (msg)
@ -1206,10 +1207,11 @@ leave:
static gboolean static gboolean
move_msgid_maybe (ServerContext *ctx, GHashTable *args, GError **err) move_msgid_maybe (ServerContext *ctx, GHashTable *args, GError **err)
{ {
GSList *docids, *cur; GSList *docids, *cur;
const char *maildir = get_string_from_args (args, "maildir", TRUE, err); const char *maildir = get_string_from_args (args, "maildir", TRUE, err);
const char *msgid = get_string_from_args (args, "msgid", TRUE, err); const char *msgid = get_string_from_args (args, "msgid", TRUE, err);
const char *flagstr = get_string_from_args (args, "flags", TRUE, err); const char *flagstr = get_string_from_args (args, "flags", TRUE, err);
gboolean new_name = get_bool_from_args (args, "newname", TRUE, err);
/* you cannot use 'maildir' for multiple messages at once */ /* you cannot use 'maildir' for multiple messages at once */
if (!msgid || !flagstr || maildir) if (!msgid || !flagstr || maildir)
@ -1222,7 +1224,7 @@ move_msgid_maybe (ServerContext *ctx, GHashTable *args, GError **err)
for (cur = docids; cur; cur = g_slist_next(cur)) for (cur = docids; cur; cur = g_slist_next(cur))
if (move_msgid (ctx->store, GPOINTER_TO_SIZE(cur->data), if (move_msgid (ctx->store, GPOINTER_TO_SIZE(cur->data),
flagstr, err) != MU_OK) flagstr, new_name, err) != MU_OK)
break; break;
g_slist_free (docids); g_slist_free (docids);
@ -1248,14 +1250,16 @@ cmd_move (ServerContext *ctx, GHashTable *args, GError **err)
MuMsg *msg; MuMsg *msg;
MuFlags flags; MuFlags flags;
const char *maildir, *flagstr; const char *maildir, *flagstr;
gboolean new_name;
/* check if the move is based on the message id; if so, handle /* check if the move is based on the message id; if so, handle
* it in move_msgid_maybe */ * it in move_msgid_maybe */
if (move_msgid_maybe (ctx, args, err)) if (move_msgid_maybe (ctx, args, err))
return MU_OK; return MU_OK;
maildir = get_string_from_args (args, "maildir", TRUE, err); maildir = get_string_from_args (args, "maildir", TRUE, err);
flagstr = get_string_from_args (args, "flags", TRUE, err); flagstr = get_string_from_args (args, "flags", TRUE, err);
new_name = get_bool_from_args (args, "newname", TRUE, err);
docid = determine_docid (ctx->query, args, err); docid = determine_docid (ctx->query, args, err);
if (docid == MU_STORE_INVALID_DOCID || if (docid == MU_STORE_INVALID_DOCID ||
@ -1281,7 +1285,8 @@ cmd_move (ServerContext *ctx, GHashTable *args, GError **err)
goto leave; goto leave;
} }
if ((do_move (ctx->store, docid, msg, maildir, flags, err) != MU_OK)) if ((do_move (ctx->store, docid, msg, maildir, flags, new_name, err)
!= MU_OK))
print_and_clear_g_error (err); print_and_clear_g_error (err);
leave: leave: