gpointer user_data;
} RefreshAsyncHelper;
-typedef struct _XFerMsgAsyncHelper
+typedef struct _XFerMsgsAsyncHelper
{
ModestMailOperation *mail_op;
TnyList *headers;
TnyFolder *dest_folder;
- XferAsyncUserCallback user_callback;
+ XferMsgsAsyncUserCallback user_callback;
gboolean delete;
gpointer user_data;
gint last_total_bytes;
gint sum_total_bytes;
gint total_bytes;
-} XFerMsgAsyncHelper;
+} XFerMsgsAsyncHelper;
+
+typedef struct _XFerFolderAsyncHelper
+{
+ ModestMailOperation *mail_op;
+ XferFolderAsyncUserCallback user_callback;
+ gpointer user_data;
+} XFerFolderAsyncHelper;
typedef void (*ModestMailOperationCreateMsgCallback) (ModestMailOperation *mail_op,
TnyMsg *msg,
ModestMailOperation *self;
ModestMailOperationPrivate *priv;
ModestMailOperationState *state;
- XFerMsgAsyncHelper *helper;
+ XFerFolderAsyncHelper *helper;
g_return_if_fail (status != NULL);
g_return_if_fail (status->code == TNY_FOLDER_STATUS_CODE_COPY_FOLDER);
- helper = (XFerMsgAsyncHelper *) user_data;
+ helper = (XFerFolderAsyncHelper *) user_data;
g_return_if_fail (helper != NULL);
self = helper->mail_op;
GError *err,
gpointer user_data)
{
- XFerMsgAsyncHelper *helper;
+ XFerFolderAsyncHelper *helper;
ModestMailOperation *self = NULL;
ModestMailOperationPrivate *priv = NULL;
- helper = (XFerMsgAsyncHelper *) user_data;
+ helper = (XFerFolderAsyncHelper *) user_data;
g_return_if_fail (helper != NULL);
self = helper->mail_op;
* which is already GDK locked by Tinymail */
/* no gdk_threads_enter (), CHECKED */
- helper->user_callback (self, helper->user_data);
+ helper->user_callback (self, new_folder, helper->user_data);
/* no gdk_threads_leave () , CHECKED */
}
/* Free */
g_object_unref (helper->mail_op);
- g_slice_free (XFerMsgAsyncHelper, helper);
+ g_slice_free (XFerFolderAsyncHelper, helper);
}
/**
TnyFolder *folder,
TnyFolderStore *parent,
gboolean delete_original,
- XferAsyncUserCallback user_callback,
+ XferFolderAsyncUserCallback user_callback,
gpointer user_data)
{
ModestMailOperationPrivate *priv = NULL;
ModestTnyFolderRules parent_rules = 0, rules;
- XFerMsgAsyncHelper *helper = NULL;
+ XFerFolderAsyncHelper *helper = NULL;
const gchar *folder_name = NULL;
const gchar *error_msg;
goto error;
} else {
/* Create the helper */
- helper = g_slice_new0 (XFerMsgAsyncHelper);
+ helper = g_slice_new0 (XFerFolderAsyncHelper);
helper->mail_op = g_object_ref (self);
- helper->dest_folder = NULL;
- helper->headers = NULL;
helper->user_callback = user_callback;
helper->user_data = user_data;
/* Call the user callback if exists */
if (user_callback)
- user_callback (self, user_data);
+ user_callback (self, NULL, user_data);
/* Notify the queue */
modest_mail_operation_notify_end (self);
void
modest_mail_operation_rename_folder (ModestMailOperation *self,
TnyFolder *folder,
- const gchar *name)
+ const gchar *name,
+ XferFolderAsyncUserCallback user_callback,
+ gpointer user_data)
{
ModestMailOperationPrivate *priv;
ModestTnyFolderRules rules;
- XFerMsgAsyncHelper *helper;
+ XFerFolderAsyncHelper *helper;
g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
g_return_if_fail (TNY_IS_FOLDER_STORE (folder));
/* Check folder rules */
rules = modest_tny_folder_get_rules (TNY_FOLDER (folder));
if (rules & MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE) {
- /* Set status failed and set an error */
- priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
- g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
- MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("FIXME: unable to rename"));
-
- /* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ goto error;
} else if (!strcmp (name, " ") || strchr (name, '/')) {
- priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
- g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
- MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
- _("FIXME: unable to rename"));
- /* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ goto error;
} else {
TnyFolderStore *into;
special local folder */
if (new_name_valid_if_local_account (priv, into, name)) {
/* Create the helper */
- helper = g_slice_new0 (XFerMsgAsyncHelper);
+ helper = g_slice_new0 (XFerFolderAsyncHelper);
helper->mail_op = g_object_ref(self);
- helper->dest_folder = NULL;
- helper->headers = NULL;
- helper->user_callback = NULL;
- helper->user_data = NULL;
+ helper->user_callback = user_callback;
+ helper->user_data = user_data;
/* Rename. Camel handles folder subscription/unsubscription */
modest_mail_operation_notify_start (self);
transfer_folder_status_cb,
helper);
} else {
- modest_mail_operation_notify_end (self);
+ goto error;
}
g_object_unref (into);
+
+ return;
}
+ error:
+ /* Set status failed and set an error */
+ priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+ g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+ MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
+ _("FIXME: unable to rename"));
+
+ if (user_callback)
+ user_callback (self, NULL, user_data);
+
+ /* Notify about operation end */
+ modest_mail_operation_notify_end (self);
}
/* ******************************************************************* */
TnyStatus *status,
gpointer user_data)
{
- XFerMsgAsyncHelper *helper;
+ XFerMsgsAsyncHelper *helper;
g_return_if_fail (status != NULL);
g_return_if_fail (status->code == TNY_FOLDER_STATUS_CODE_XFER_MSGS);
- helper = (XFerMsgAsyncHelper *) user_data;
+ helper = (XFerMsgsAsyncHelper *) user_data;
g_return_if_fail (helper != NULL);
/* Notify progress */
static void
transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data)
{
- XFerMsgAsyncHelper *helper;
+ XFerMsgsAsyncHelper *helper;
ModestMailOperation *self;
ModestMailOperationPrivate *priv;
TnyIterator *iter = NULL;
TnyHeader *header = NULL;
- helper = (XFerMsgAsyncHelper *) user_data;
+ helper = (XFerMsgsAsyncHelper *) user_data;
self = helper->mail_op;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
g_object_unref (folder);
if (iter)
g_object_unref (iter);
- g_slice_free (XFerMsgAsyncHelper, helper);
+ g_slice_free (XFerMsgsAsyncHelper, helper);
}
static guint
TnyList *headers,
TnyFolder *folder,
gboolean delete_original,
- XferAsyncUserCallback user_callback,
+ XferMsgsAsyncUserCallback user_callback,
gpointer user_data)
{
ModestMailOperationPrivate *priv = NULL;
TnyIterator *iter = NULL;
TnyFolder *src_folder = NULL;
- XFerMsgAsyncHelper *helper = NULL;
+ XFerMsgsAsyncHelper *helper = NULL;
TnyHeader *header = NULL;
ModestTnyFolderRules rules = 0;
}
/* Create the helper */
- helper = g_slice_new0 (XFerMsgAsyncHelper);
+ helper = g_slice_new0 (XFerMsgsAsyncHelper);
helper->mail_op = g_object_ref(self);
helper->dest_folder = g_object_ref(folder);
helper->headers = g_object_ref(headers);
gpointer user_data);
/**
- * XferAsyncUserCallback:
+ * XferMsgsAsyncUserCallback:
*
* @obj: a #GObject generic object which has created current mail operation.
+ * @new_folder: the new instance of the #TnyFolder that has been transferred
* @user_data: generic data passed to user defined function.
*
* This function will be called after transfer_msgs_cb private function, which is
* used as tinymail operation callback. The private function fills private
* fields of mail operation and calls user defined callback if it exists.
*/
-typedef void (*XferAsyncUserCallback) (ModestMailOperation *mail_op, gpointer user_data);
+typedef void (*XferMsgsAsyncUserCallback) (ModestMailOperation *mail_op,
+ gpointer user_data);
+
+
+/**
+ * XferFolderAsyncUserCallback:
+ *
+ * @obj: a #GObject generic object which has created current mail operation.
+ * @new_folder: the new instance of the #TnyFolder that has been transferred
+ * @user_data: generic data passed to user defined function.
+ *
+ * This function will be called after transfer_msgs_cb private function, which is
+ * used as tinymail operation callback. The private function fills private
+ * fields of mail operation and calls user defined callback if it exists.
+ */
+typedef void (*XferFolderAsyncUserCallback) (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data);
/**
**/
void modest_mail_operation_rename_folder (ModestMailOperation *self,
TnyFolder *folder,
- const gchar *name);
+ const gchar *name,
+ XferFolderAsyncUserCallback user_callback,
+ gpointer user_data);
/**
* modest_mail_operation_xfer_folder:
* @folder: a #TnyFolder
* @parent: the new parent of the folder as #TnyFolderStore
* @delete_original: wheter or not delete the original folder
- * @user_callback: a #XferAsyncUserCallback function to call after tinymail callback execution.
+ * @user_callback: a #XferFolderAsyncUserCallback function to call after tinymail callback execution.
* @user_data: generic user data which will be passed to @user_callback function.
*
* Sets the given @folder as child of a provided #TnyFolderStore. This
TnyFolder *folder,
TnyFolderStore *parent,
gboolean delete_original,
- XferAsyncUserCallback user_callback,
+ XferFolderAsyncUserCallback user_callback,
gpointer user_data);
* @header_list: a #TnyList of #TnyHeader to transfer
* @folder: the #TnyFolder where the messages will be transferred
* @delete_original: whether or not delete the source messages
- * @user_callback: a #XferAsyncUserCallback function to call after tinymail callback execution.
+ * @user_callback: a #XferFolderAsyncUserCallback function to call after tinymail callback execution.
* @user_data: generic user data which will be passed to @user_callback function.
*
* Asynchronously transfers messages from their current folder to
TnyList *header_list,
TnyFolder *folder,
gboolean delete_original,
- XferAsyncUserCallback user_callback,
+ XferMsgsAsyncUserCallback user_callback,
gpointer user_data);
/**
} RenameFolderInfo;
static void
-on_rename_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
- TnyAccount *account, gpointer user_data)
+on_rename_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
+{
+ /* Select now */
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW (user_data),
+ new_folder, FALSE);
+}
+
+static void
+on_rename_folder_performer (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
ModestMailOperation *mail_op = NULL;
GtkTreeSelection *sel = NULL;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
gtk_tree_selection_unselect_all (sel);
- /* Select *after* the changes */
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view),
- TNY_FOLDER(data->folder), TRUE);
-
/* Actually rename the folder */
modest_mail_operation_rename_folder (mail_op,
- TNY_FOLDER (data->folder),
- (const gchar *) (data->new_name));
-
- /* TODO folder view filter refilter */
- /*
- GtkTreeModel *tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view));
- if (GTK_IS_TREE_MODEL_FILTER (tree_model))
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model)); */
+ TNY_FOLDER (data->folder),
+ (const gchar *) (data->new_name),
+ on_rename_folder_cb,
+ folder_view);
}
g_object_unref (mail_op);
rename_folder_data->folder = folder;
rename_folder_data->new_name = folder_name;
modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window),
- folder, on_rename_folder_cb, rename_folder_data);
+ folder, on_rename_folder_performer, rename_folder_data);
}
}
g_object_unref (folder);
static void
-destroy_information_note (ModestMailOperation *mail_op, gpointer user_data)
+destroy_information_note (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ /* destroy information note */
+ gtk_widget_destroy (GTK_WIDGET(user_data));
+}
+
+static void
+destroy_folder_information_note (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
{
/* destroy information note */
gtk_widget_destroy (GTK_WIDGET(user_data));
src_folder,
folder_store,
delete,
- destroy_information_note,
+ destroy_folder_information_note,
inf_note);
}
return response;
}
-
-
static void
-move_to_cb (ModestMailOperation *mail_op, gpointer user_data)
+move_to_cb (ModestMailOperation *mail_op,
+ gpointer user_data)
{
MoveToHelper *helper = (MoveToHelper *) user_data;
g_free (helper);
}
+static void
+folder_move_to_cb (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
+{
+ move_to_cb (mail_op, user_data);
+}
+
+static void
+msgs_move_to_cb (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ move_to_cb (mail_op, user_data);
+}
+
void
modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
headers,
TNY_FOLDER (dst_folder),
TRUE,
- move_to_cb,
+ msgs_move_to_cb,
helper);
g_object_unref (G_OBJECT (mail_op));
TNY_FOLDER (info->src_folder),
info->dst_folder,
info->delete_original,
- move_to_cb,
+ folder_move_to_cb,
helper);
modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
g_slice_free (DndHelper, helper);
}
-/*
- * This function is the callback of the
- * modest_mail_operation_xfer_msgs () and
- * modest_mail_operation_xfer_folder() calls. We check here if the
- * message/folder was correctly asynchronously transferred. The reason
- * to use the same callback is that the code is the same, it only has
- * to check that the operation went fine and then finalize the drag
- * and drop action
- */
static void
xfer_cb (ModestMailOperation *mail_op,
gpointer user_data)
dnd_helper_destroyer (helper);
}
+static void
+xfer_msgs_cb (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ /* Common part */
+ xfer_cb (mail_op, user_data);
+}
+
+static void
+xfer_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
+{
+ DndHelper *helper;
+
+ helper = (DndHelper *) user_data;
+
+ /* Common part */
+ xfer_cb (mail_op, user_data);
+
+ /* Select the folder */
+ if (new_folder)
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW (helper->folder_view),
+ new_folder, FALSE);
+}
+
+
/* get the folder for the row the treepath refers to. */
/* folder must be unref'd */
static TnyFolderStore *
headers,
folder,
helper->delete_source,
- xfer_cb, helper);
+ xfer_msgs_cb, helper);
/* Frees */
cleanup:
TNY_FOLDER (info->src_folder),
info->dst_folder,
info->helper->delete_source,
- xfer_cb,
+ xfer_folder_cb,
info->helper);
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
- TNY_FOLDER (info->dst_folder), TRUE);
+/* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view), */
+/* TNY_FOLDER (info->dst_folder), TRUE); */
g_object_unref (G_OBJECT (mail_op));
}
static void
-on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter,
+on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
ModestFolderView *self)
{
ModestFolderViewPrivate *priv = NULL;
/* Disable next */
modest_folder_view_disable_next_folder_selection (self);
-/* g_object_unref (priv->folder_to_select); */
-/* priv->folder_to_select = NULL; */
/* Refilter the model */
gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model));