}
static void
-modest_tny_send_queue_add (TnySendQueue *self, TnyMsg *msg, GError **err)
+_on_added_to_outbox (TnySendQueue *self, gboolean cancelled, TnyMsg *msg, GError *err, gpointer user_data)
{
ModestTnySendQueuePrivate *priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE(self);
TnyHeader *header = NULL;
g_return_if_fail (TNY_IS_SEND_QUEUE(self));
g_return_if_fail (TNY_IS_CAMEL_MSG(msg));
- TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->add_func (self, msg, err); /* FIXME */
-
- /* TODO: We cannot access the message ID of the message here because
- * it might just have been created. Wait for it being added to outbox. */
-
header = tny_msg_get_header (msg);
- msg_id = tny_header_get_message_id (header);
+ msg_id = modest_tny_send_queue_get_msg_id (header);
+/* msg_id = tny_header_get_message_id (header); */
g_return_if_fail(msg_id != NULL);
/* Put newly added message in WAITING state */
g_object_unref(G_OBJECT(header));
}
+void
+modest_tny_send_queue_add (ModestTnySendQueue *self, TnyMsg *msg, GError **err)
+{
+ g_return_if_fail (MODEST_IS_TNY_SEND_QUEUE(self));
+ g_return_if_fail (TNY_IS_CAMEL_MSG(msg));
+
+ tny_send_queue_add_async (TNY_SEND_QUEUE(self),
+ msg,
+ _on_added_to_outbox,
+ NULL,
+ NULL);
+}
+
+
static void
_add_message (ModestTnySendQueue *self, TnyHeader *header)
{
parent_class = g_type_class_peek_parent (klass);
gobject_class->finalize = modest_tny_send_queue_finalize;
- TNY_CAMEL_SEND_QUEUE_CLASS(klass)->add_func = modest_tny_send_queue_add;
TNY_CAMEL_SEND_QUEUE_CLASS(klass)->get_outbox_func = modest_tny_send_queue_get_outbox;
TNY_CAMEL_SEND_QUEUE_CLASS(klass)->get_sentbox_func = modest_tny_send_queue_get_sentbox;
TNY_CAMEL_SEND_QUEUE_CLASS(klass)->cancel_func = modest_tny_send_queue_cancel;
static gboolean _selected_folder_is_empty (ModestMainWindow *win);
static gboolean _folder_view_has_focus (ModestWindow *win);
static gboolean _selected_folder_is_same_as_source (ModestWindow *win);
-static gboolean _msg_download_in_progress (ModestMsgViewWindow *win);
+static gboolean _msg_download_in_progress (ModestWindow *win);
static gboolean _msg_download_completed (ModestMainWindow *win);
static gboolean _selected_msg_sent_in_progress (ModestWindow *win);
static gboolean _sending_in_progress (ModestWindow *win);
+static gboolean _send_receive_in_progress (ModestWindow *win);
static gboolean _invalid_folder_for_purge (ModestWindow *win, ModestDimmingRule *rule);
static gboolean _transfer_mode_enabled (ModestWindow *win);
static gboolean _selected_folder_has_subfolder_with_same_name (ModestWindow *win);
/* Check dimmed rule */
if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
if (!dimmed) {
- dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+ dimmed = _msg_download_in_progress (win);
if (dimmed)
modest_dimming_rule_set_notification (rule, "");
}
modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
}
if (!dimmed) {
- dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win));
+ dimmed = _msg_download_in_progress (win);
if (dimmed)
modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
}
g_object_unref (folder_store);
}
+ if (!dimmed) {
+ dimmed = _msg_download_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+
}
}
/* Check dimmed rule */
if (!dimmed) {
if (MODEST_IS_MSG_VIEW_WINDOW (win))
- dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win));
+ dimmed = _msg_download_in_progress (win);
if (dimmed)
modest_dimming_rule_set_notification (rule, "");
}
{
ModestDimmingRule *rule = NULL;
TnyFolderType types[1];
- guint n_messages = 0;
const DimmedState *state = NULL;
gboolean dimmed = FALSE;
/* Check dimmed rules */
if (!dimmed) {
- dimmed = state->already_opened_msg;
- n_messages = state->n_selected;
+ dimmed = !_selected_folder_is_any_of_type (win, types, 1);
if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_cancel_send"));
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = !_sending_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
}
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_csm_cancel_sending (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ TnyFolderType types[1];
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ types[0] = TNY_FOLDER_TYPE_OUTBOX;
+
+ /* Check dimmed rules */
if (!dimmed) {
dimmed = !_selected_folder_is_any_of_type (win, types, 1);
if (dimmed)
modest_dimming_rule_set_notification (rule, "");
- }
+ }
if (!dimmed) {
- dimmed = !_sending_in_progress (win);
+ dimmed = !_send_receive_in_progress (win);
if (dimmed)
modest_dimming_rule_set_notification (rule, "");
}
static gboolean
-_msg_download_in_progress (ModestMsgViewWindow *win)
+_msg_download_in_progress (ModestWindow *win)
{
gboolean result = FALSE;
- g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE);
+ g_return_val_if_fail (MODEST_IS_WINDOW (win), FALSE);
- result = modest_msg_view_window_toolbar_on_transfer_mode (win);
+ if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ result = modest_msg_view_window_toolbar_on_transfer_mode (MODEST_MSG_VIEW_WINDOW(win));
+ }
+ else if (MODEST_IS_MAIN_WINDOW (win)) {
+ result = modest_main_window_transfer_mode_enabled (MODEST_MAIN_WINDOW(win));
+ }
return result;
}
static gboolean
_sending_in_progress (ModestWindow *win)
{
+ GHashTable *send_queue_cache = NULL;
+ ModestCacheMgr *cache_mgr = NULL;
+ ModestTnySendQueue *send_queue = NULL;
+ GSList *send_queues = NULL, *node = NULL;
+ gboolean result = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
+
+ /* Get send queue */
+ 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 && !result; node = g_slist_next (node)) {
+ send_queue = MODEST_TNY_SEND_QUEUE (node->data);
+
+ /* Check if send operation is in progress */
+ result = modest_tny_send_queue_sending_in_progress (send_queue);
+ }
+
+ return result;
+}
+
+static gboolean
+_send_receive_in_progress (ModestWindow *win)
+{
gboolean result = FALSE;
g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);