{ "ToolsSMTPServers", NULL, N_("mcen_me_inbox_globalsmtpservers"), NULL, NULL, G_CALLBACK(modest_ui_actions_on_smtp_servers) },
{ "ToolsSendReceive", NULL, N_("mcen_me_inbox_sendandreceive") }, /* submenu */
{ "ToolsSendReceiveAll", NULL, N_("mcen_me_inbox_sendandreceive_all"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_send_receive) },
- { "ToolsSendReceiveCancelSending", NULL, N_("mcen_me_outbox_cancelsend"), NULL, NULL, NULL },
+ { "ToolsSendReceiveCancelSending", NULL, N_("mcen_me_outbox_cancelsend"), NULL, NULL, G_CALLBACK (modest_ui_actions_cancel_send) },
{ "ToolsContacts", NULL, N_("mcen_me_inbox_open_addressbook"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_open_addressbook) },
{ "ToolsAddToContacts", NULL, N_("mcen_me_viewer_addtocontacts"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_add_to_contacts) },
{ "ToolsSearchMessages", NULL, N_("mcen_me_inbox_search"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_search_messages) },
{ "HeaderViewCSMCopy", NULL, N_("mcen_me_inbox_copy"), "<CTRL>C", NULL, G_CALLBACK (modest_ui_actions_on_copy) },
{ "HeaderViewCSMPaste", NULL, N_("mcen_me_inbox_paste"), "<CTRL>V", NULL, G_CALLBACK (modest_ui_actions_on_paste) },
{ "HeaderViewCSMDelete", NULL, N_("mcen_me_inbox_delete"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_delete) },
- { "HeaderViewCSMCancelSending", NULL, N_("mcen_me_outbox_cancelsend"), NULL, NULL, NULL },
+ { "HeaderViewCSMCancelSending", NULL, N_("mcen_me_outbox_cancelsend"), NULL, NULL, G_CALLBACK (modest_ui_actions_cancel_send) },
{ "HeaderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_help) },
};
g_ptr_array_free (new_headers, FALSE);
}
- /* Perform send */
+ /* Perform send (if operation was not cancelled) */
+ if (did_a_cancel) goto out;
priv->op_type = MODEST_MAIL_OPERATION_TYPE_SEND;
priv->done = 0;
priv->total = 0;
static void _on_msg_has_been_sent (TnySendQueue *self, TnyMsg *msg, gpointer user_data);
static void _on_msg_error_happened (TnySendQueue *self, TnyHeader *header, TnyMsg *msg, GError *err, gpointer user_data);
+static TnyFolder*modest_tny_send_queue_get_outbox (TnySendQueue *self);
+static TnyFolder*modest_tny_send_queue_get_sentbox (TnySendQueue *self);
/* list my signals */
enum {
g_signal_emit (self, signals[STATUS_CHANGED], 0, info->msg_id, info->status);
}
+ /* Set flags to supend sending operaiton (if removed, this is not necessary) */
+ if (!remove) {
+ TnyIterator *iter = NULL;
+ TnyFolder *outbox = NULL;
+ TnyList *headers = tny_simple_list_new ();
+ outbox = modest_tny_send_queue_get_outbox (self);
+ tny_folder_get_headers (outbox, headers, TRUE, err);
+ if (err != NULL && *err != NULL) goto frees;
+ iter = tny_list_create_iterator (headers);
+ while (!tny_iterator_is_done (iter)) {
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ tny_header_unset_flags (header, TNY_HEADER_FLAG_PRIORITY);
+ tny_header_set_flags (header, TNY_HEADER_FLAG_SUSPENDED_PRIORITY);
+ g_object_unref (header);
+ tny_iterator_next (iter);
+ }
+ frees:
+ g_object_unref (G_OBJECT (headers));
+ g_object_unref (G_OBJECT (outbox));
+ }
+
+ /* Dont call super class implementaiton, becasue camel removes messages from outbox */
TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->cancel_func (self, remove, err); /* FIXME */
}
void
modest_tny_send_queue_try_to_send (ModestTnySendQueue* self)
{
- /* TODO: Rename this to tny_camel_send_queue_try_to_send() in tinymail
- and check that it works, without creating a second worker. */
-/* tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self)); */
+ /* Flush send queue */
+ tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self));
}
gboolean
g_free (acc_name);
}
+
+static void
+modest_ui_actions_do_cancel_send (const gchar *account_name,
+ ModestWindow *win)
+{
+ TnyTransportAccount *transport_account;
+ TnySendQueue *send_queue = NULL;
+ GError *error = NULL;
+
+ /* Get transport account */
+ transport_account =
+ TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+ (modest_runtime_get_account_store(),
+ account_name,
+ TNY_ACCOUNT_TYPE_TRANSPORT));
+ if (!transport_account) {
+ g_printerr ("modest: no transport account found for '%s'\n", account_name);
+ goto frees;
+ }
+
+ /* Get send queue*/
+ send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account));
+ if (!TNY_IS_SEND_QUEUE(send_queue)) {
+ g_set_error (&error, MODEST_MAIL_OPERATION_ERROR,
+ MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
+ "modest: could not find send queue for account\n");
+ } else {
+ /* Keeep messages in outbox folder */
+ tny_send_queue_cancel (send_queue, FALSE, &error);
+ }
+
+ frees:
+ if (transport_account != NULL)
+ g_object_unref (G_OBJECT (transport_account));
+}
+
+static void
+modest_ui_actions_cancel_send_all (ModestWindow *win)
+{
+ GSList *account_names, *iter;
+
+ account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(),
+ TRUE);
+
+ iter = account_names;
+ while (iter) {
+ modest_ui_actions_do_cancel_send ((const char*) iter->data, win);
+ iter = g_slist_next (iter);
+ }
+
+ modest_account_mgr_free_account_names (account_names);
+ account_names = NULL;
+}
+
+void
+modest_ui_actions_cancel_send (GtkAction *action, ModestWindow *win)
+
+{
+ /* Check if accounts exist */
+ gboolean accounts_exist =
+ modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
+
+ /* If not, allow the user to create an account before trying to send/receive. */
+ if (!accounts_exist)
+ modest_ui_actions_on_accounts (NULL, win);
+
+ /* Cancel all sending operaitons */
+ modest_ui_actions_cancel_send_all (win);
+}
+
/*
* Refreshes all accounts. This function will be used by automatic
* updates
void modest_ui_actions_on_mark_as_unread (GtkAction *action,
ModestWindow *window);
+void modest_ui_actions_cancel_send (GtkAction *action, ModestWindow *win);
+
/**
* modest_ui_actions_do_send_receive_all:
* @win: the window that will be used as source of the refresh mail operation
*send_queues = g_slist_prepend (*send_queues, value);
}
-static ModestTnySendQueueStatus
-get_status_of_uid (const gchar *uid)
-{
- ModestCacheMgr *cache_mgr;
- GHashTable *send_queue_cache;
- GSList *send_queues = NULL, *node;
- /* get_msg_status returns suspended by default, so we want to detect changes */
- ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
+/* static ModestTnySendQueueStatus */
+/* get_status_of_uid (const gchar *uid) */
+/* { */
+/* ModestCacheMgr *cache_mgr; */
+/* GHashTable *send_queue_cache; */
+/* GSList *send_queues = NULL, *node; */
+/* /\* get_msg_status returns suspended by default, so we want to detect changes *\/ */
+/* ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_SUSPENDED; */
- cache_mgr = modest_runtime_get_cache_mgr ();
- send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
- MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
-
- g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
-
- for (node = send_queues; node != NULL; node = g_slist_next (node)) {
- ModestTnySendQueueStatus queue_status = modest_tny_send_queue_get_msg_status (
- MODEST_TNY_SEND_QUEUE (node->data), uid);
- if (queue_status != MODEST_TNY_SEND_QUEUE_SUSPENDED)
- status = queue_status;
- break;
- }
- g_slist_free (send_queues);
- return status;
-}
+/* cache_mgr = modest_runtime_get_cache_mgr (); */
+/* send_queue_cache = modest_cache_mgr_get_cache (cache_mgr, */
+/* MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); */
+
+/* g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues); */
+
+/* for (node = send_queues; node != NULL; node = g_slist_next (node)) { */
+/* ModestTnySendQueueStatus queue_status = modest_tny_send_queue_get_msg_status ( */
+/* MODEST_TNY_SEND_QUEUE (node->data), uid); */
+/* if (queue_status != MODEST_TNY_SEND_QUEUE_SUSPENDED) */
+/* status = queue_status; */
+/* break; */
+/* } */
+/* g_slist_free (send_queues); */
+/* return status; */
+/* } */
static const gchar *
get_status_string (ModestTnySendQueueStatus status)
_modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data)
{
- TnyHeaderFlags flags;
+ TnyHeaderFlags flags, prior_flags;
gchar *address, *subject, *header;
time_t date;
ModestHeaderViewCompactHeaderMode header_mode;
-1);
/* flags */
+ flags = tny_header_get_flags (msg_header);
+ prior_flags = flags & TNY_HEADER_FLAG_PRIORITY;
if (flags & TNY_HEADER_FLAG_ATTACHMENTS)
g_object_set (G_OBJECT (attach_cell), "pixbuf",
get_pixbuf_for_flag (TNY_HEADER_FLAG_ATTACHMENTS),
NULL, NULL);
if (flags & TNY_HEADER_FLAG_PRIORITY)
g_object_set (G_OBJECT (priority_cell), "pixbuf",
- get_pixbuf_for_flag (flags & TNY_HEADER_FLAG_PRIORITY),
+ get_pixbuf_for_flag (prior_flags),
+/* get_pixbuf_for_flag (flags & TNY_HEADER_FLAG_PRIORITY), */
NULL);
else
g_object_set (G_OBJECT (priority_cell), "pixbuf",
ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_WAITING;
const gchar *status_str = "";
if (msg_header != NULL) {
- status = get_status_of_uid (tny_header_get_message_id (msg_header));
+ /* TODO: ask send queue for msg sending status */
+/* status = get_status_of_uid (tny_header_get_message_id (msg_header)); */
+ if (prior_flags == TNY_HEADER_FLAG_SUSPENDED_PRIORITY)
+ status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
}
status_str = get_status_string (status);
/* TODO: for now we set the status to waiting always, we need a way to
* retrieve the current send status of a message */
- status_str = get_status_string (MODEST_TNY_SEND_QUEUE_WAITING);
+/* status_str = get_status_string (MODEST_TNY_SEND_QUEUE_WAITING); */
display_date = g_strdup_printf("<small>%s</small>", status_str);
g_object_set (G_OBJECT (date_or_status_cell),
"markup", display_date,
GtkTreeModel *tree_model, GtkTreeIter *iter,
gpointer user_data)
{
- TnyHeaderFlags flags;
+ TnyHeaderFlags flags, prior_flags;
//guint status;
gchar *status_str;
gtk_tree_model_get (tree_model, iter,
TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags,
- // TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN, &status,
-1);
- status_str = g_strdup(_("mcen_li_outbox_waiting"));
-
+ prior_flags = flags & TNY_HEADER_FLAG_PRIORITY;
+ if (prior_flags == TNY_HEADER_FLAG_SUSPENDED_PRIORITY)
+ status_str = g_strdup(_("mcen_li_outbox_suspended"));
+ else
+ status_str = g_strdup(_("mcen_li_outbox_waiting"));
+
g_object_set (G_OBJECT(renderer), "text", status_str, NULL);
set_common_flags (renderer, flags);