mirror of https://github.com/djcb/mu.git
* mu-cmd-server: add support for moving without renaming
This commit is contained in:
parent
ea5e6bc83e
commit
f4d3eb2d7a
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue