g_return_val_if_fail (error_handler != NULL, obj);
priv->error_checking = error_handler;
+ priv->error_checking_user_data = user_data;
return obj;
}
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
"modest: could not find send queue for account\n");
+ priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+
} else {
/* TODO: connect to the msg-sent in order to know when
the mail operation is finished */
- tny_send_queue_add (send_queue, msg, &(priv->error));
+
+/* tny_send_queue_add (send_queue, msg, &(priv->error)); */
+ modest_tny_send_queue_add (MODEST_TNY_SEND_QUEUE(send_queue),
+ msg,
+ &(priv->error));
+
/* TODO: we're setting always success, do the check in
the handler */
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
}
+ if (priv->status == MODEST_MAIL_OPERATION_STATUS_SUCCESS)
+ modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
/* TODO: do this in the handler of the "msg-sent"
signal.Notify about operation end */
modest_mail_operation_notify_end (self);
TnyFolder *draft_folder = NULL;
TnyFolder *outbox_folder = NULL;
TnyHeader *header;
+ GError *err = NULL;
if (!msg) {
goto end;
* because this function requires it to have a UID. */
header = tny_msg_get_header (info->draft_msg);
tny_folder_remove_msg (src_folder, header, NULL);
- tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
- tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
+
+ tny_folder_sync (folder, TRUE, &err); /* FALSE --> don't expunge */
+/* tny_folder_sync_async (src_folder, TRUE, NULL, NULL, NULL); /\* expunge *\/ */
+
g_object_unref (header);
g_object_unref (folder);
}
end:
+ if (err != NULL)
+ g_error_free(err);
if (info->draft_msg)
g_object_unref (info->draft_msg);
if (draft_folder)
if ((!priv->error) && (info->draft_msg != NULL)) {
header = tny_msg_get_header (info->draft_msg);
src_folder = tny_header_get_folder (header);
+
/* Remove the old draft expunging it */
tny_folder_remove_msg (src_folder, header, NULL);
- tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
- tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
+/* tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); */
+/* tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN); */
+
+ tny_folder_sync (folder, TRUE, &(priv->error)); /* FALSE --> don't expunge */
tny_folder_sync_async (src_folder, TRUE, NULL, NULL, NULL); /* expunge */
+
g_object_unref (header);
}
if (G_UNLIKELY (!first_time))
tny_folder_poke_status (TNY_FOLDER (folder));
}
+
tny_folder_remove_observer (TNY_FOLDER (folder), TNY_FOLDER_OBSERVER (observer));
g_object_unref (observer);
observer = NULL;
ModestMailOperationPrivate *priv;
TnyFolder *new_folder = NULL;
- TnyList *list = tny_simple_list_new ();
- TnyFolderStoreQuery *query = tny_folder_store_query_new ();
-
g_return_val_if_fail (TNY_IS_FOLDER_STORE (parent), NULL);
g_return_val_if_fail (name, NULL);
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
/* Check for already existing folder */
- tny_folder_store_query_add_item (query, name, TNY_FOLDER_STORE_QUERY_OPTION_MATCH_ON_NAME);
- tny_folder_store_get_folders (parent, list, query, NULL);
- g_object_unref (G_OBJECT (query));
-
- if (tny_list_get_length (list) > 0) {
+ if (modest_tny_folder_has_subfolder_with_name (parent, name)) {
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS,
_CS("ckdg_ib_folder_already_exists"));
}
- g_object_unref (G_OBJECT (list));
-
/* Check parent */
if (TNY_IS_FOLDER (parent)) {
/* Check folder rules */
static void
-transfer_folder_cb (TnyFolder *folder, gboolean cancelled,
+transfer_folder_cb (TnyFolder *folder,
+ gboolean cancelled,
TnyFolderStore *into,
TnyFolder *new_folder,
GError *err,
ModestTnyFolderRules parent_rules = 0, rules;
XFerMsgAsyncHelper *helper = NULL;
const gchar *folder_name = NULL;
+ const gchar *error_msg;
g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
g_return_if_fail (TNY_IS_FOLDER (folder));
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
folder_name = tny_folder_get_name (folder);
+ /* Set the error msg */
+ error_msg = (delete_original) ?
+ _("mail_in_ui_folder_move_target_error") :
+ _("mail_in_ui_folder_copy_target_error");
+
/* Get account and set it into mail_operation */
priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder));
priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("mail_in_ui_folder_move_target_error"));
+ error_msg);
/* Notify the queue */
modest_mail_operation_notify_end (self);
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("FIXME: parent folder does not accept new folders"));
+ error_msg);
/* Notify the queue */
modest_mail_operation_notify_end (self);
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("mail_in_ui_folder_copy_target_error"));
+ error_msg);
/* Notify the queue */
modest_mail_operation_notify_end (self);
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("mail_in_ui_folder_move_target_error"));
+ error_msg);
/* Notify the queue */
modest_mail_operation_notify_end (self);
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("mail_in_ui_folder_move_target_error"));
+ error_msg);
/* Notify the queue */
modest_mail_operation_notify_end (self);
tny_folder_copy_async (folder,
parent,
tny_folder_get_name (folder),
- delete_original,
+ delete_original,
transfer_folder_cb,
transfer_folder_status_cb,
- helper);
+ helper);
}
}
void
-modest_mail_operation_remove_msg (ModestMailOperation *self, TnyHeader *header,
+modest_mail_operation_remove_msg (ModestMailOperation *self,
+ TnyHeader *header,
gboolean remove_to_trash /*ignored*/)
{
TnyFolder *folder;
/* remove message from folder */
tny_folder_remove_msg (folder, header, &(priv->error));
-/* if (!priv->error) { */
-/* tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); */
-/* tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN); */
+ if (!priv->error) {
+ tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
+ tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
+
+ if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
+/* tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
+ tny_folder_sync (folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */
+ else if (TNY_IS_CAMEL_POP_FOLDER (folder))
+/* tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
+ tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+ else
+ /* local folders */
+/* tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
+ tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+ }
+
+
+ /* Set status */
+ if (!priv->error)
+ priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+ else
+ priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+
+ /* Free */
+ g_object_unref (G_OBJECT (folder));
+
+ /* Notify about operation end */
+ modest_mail_operation_notify_end (self);
+}
+
+void
+modest_mail_operation_remove_msgs (ModestMailOperation *self,
+ TnyList *headers,
+ gboolean remove_to_trash /*ignored*/)
+{
+ TnyFolder *folder;
+ ModestMailOperationPrivate *priv;
+ TnyIterator *iter = NULL;
+ TnyHeader *header = NULL;
-/* if (TNY_IS_CAMEL_IMAP_FOLDER (folder)) */
+ g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
+ g_return_if_fail (TNY_IS_LIST (headers));
+
+ if (remove_to_trash)
+ g_warning ("remove to trash is not implemented");
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+ /* Get folder from first header and sync it */
+ iter = tny_list_create_iterator (headers);
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ folder = tny_header_get_folder (header);
+
+ /* Get account and set it into mail_operation */
+ priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder));
+
+ priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
+
+ /* remove message from folder */
+ tny_folder_remove_msgs (folder, headers, &(priv->error));
+ if (!priv->error) {
+ if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
/* tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
-/* /\* tny_folder_sync (folder, FALSE, &(priv->error)); /\\* FALSE --> don't expunge *\\/ *\/ */
-/* else if (TNY_IS_CAMEL_POP_FOLDER (folder)) */
+ tny_folder_sync (folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */
+ else if (TNY_IS_CAMEL_POP_FOLDER (folder))
/* tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
-/* /\* tny_folder_sync (folder, TRUE, &(priv->error)); /\\* TRUE --> expunge *\\/ *\/ */
-/* else */
-/* /\* local folders *\/ */
+ tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+ else
+ /* local folders */
/* tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
-/* /\* tny_folder_sync (folder, TRUE, &(priv->error)); /\\* TRUE --> expunge *\\/ *\/ */
-/* } */
+ tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+ }
/* Set status */
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
/* Free */
+ g_object_unref (header);
+ g_object_unref (iter);
g_object_unref (G_OBJECT (folder));
/* Notify about operation end */
modest_mail_operation_notify_end (self);
}
+
static void
transfer_msgs_status_cb (GObject *obj,
TnyStatus *status,
} else {
priv->done = 1;
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+
+ /* Update folder counts */
+ tny_folder_poke_status (folder);
+ tny_folder_poke_status (helper->dest_folder);
}
/* This is not a GDK lock because we are a Tinymail callback and
* Tinymail already acquires the Gdk lock */
-
- /* no gdk_threads_enter (), CHECKED */
helper->user_callback (self, folder, helper->user_data);
- /* no gdk_threads_leave (), CHECKED */
}
out:
/* This is not a GDK lock because we are a Tinymail callback and
* Tinymail already acquires the Gdk lock */
-
- /* no gdk_threads_enter (), CHECKED */
-
g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
- /* no gdk_threads_leave (), CHECKED */
-
g_slice_free (ModestMailOperationState, state);
}