talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit cc334ab9de45bf989e29e01921670c85b0e537ae
parent c00d3332dd0783737b21a10702429515ac81b738
Author: Charles Lehner <cel@celehner.com>
Date:   Fri, 17 Jul 2015 10:07:44 -0400

managesieve: show warnings received when setting active script

Diffstat:
Msrc/plugins/managesieve/managesieve.c | 30+++++++++++++++++++++++++-----
Msrc/plugins/managesieve/managesieve.h | 1+
Msrc/plugins/managesieve/sieve_manager.c | 6+++---
3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/plugins/managesieve/managesieve.c b/src/plugins/managesieve/managesieve.c @@ -673,15 +673,35 @@ static gint sieve_session_recv_msg(Session *session, const gchar *msg) sieve_session->state = SIEVE_READY; break; case SIEVE_SETACTIVE: - if (response_is_no(msg)) { - /* error */ + parse_response((gchar *)msg, &result); + if (result.success) { + /* clear status possibly set when setting another + * script active. TODO: give textual feedback */ + sieve_error(sieve_session, ""); + command_cb(sieve_session->current_cmd, NULL); - } else if (response_is_ok(msg)) { - command_cb(sieve_session->current_cmd, (void*)TRUE); + } else if (result.description) { + command_cb(sieve_session->current_cmd, + result.description); } else { log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } - sieve_session->state = SIEVE_READY; + if (result.has_octets) { + sieve_session->octets_remaining = result.octets; + sieve_session->state = SIEVE_SETACTIVE_DATA; + } else { + sieve_session->state = SIEVE_READY; + } + break; + case SIEVE_SETACTIVE_DATA: + /* Dovecot shows a script's warnings when making it active */ + sieve_session->octets_remaining -= strlen(msg) + 1; + if (sieve_session->octets_remaining > 0) { + /* TODO: buffer multi-line message */ + sieve_error(sieve_session, msg); + } else { + sieve_session->state = SIEVE_READY; + } break; case SIEVE_GETSCRIPT: if (response_is_no(msg)) { diff --git a/src/plugins/managesieve/managesieve.h b/src/plugins/managesieve/managesieve.h @@ -71,6 +71,7 @@ typedef enum SIEVE_AUTH_CRAM_MD5, SIEVE_RENAMESCRIPT, SIEVE_SETACTIVE, + SIEVE_SETACTIVE_DATA, SIEVE_GETSCRIPT, SIEVE_GETSCRIPT_DATA, SIEVE_PUTSCRIPT, diff --git a/src/plugins/managesieve/sieve_manager.c b/src/plugins/managesieve/sieve_manager.c @@ -245,14 +245,14 @@ static void filter_rename(GtkWidget *widget, SieveManagerPage *page) } static void filter_activated(SieveSession *session, gboolean abort, - gboolean success, CommandDataName *cmd_data) + const gchar *err, CommandDataName *cmd_data) { SieveManagerPage *page = cmd_data->page; GSList *cur; if (abort) { - } else if (!success) { - got_session_error(session, "Unable to set active script", page); + } else if (err) { + got_session_error(session, err, page); } else { manager_sessions_foreach(cur, session, page) { filter_set_active(page, cmd_data->filter_name);