ModestMailOperationPrivate *priv = NULL;
ModestTnyFolderRules parent_rules = 0, rules;
XFerMsgAsyncHelper *helper = NULL;
+ const gchar *folder_name = NULL;
g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
g_return_if_fail (TNY_IS_FOLDER (folder));
g_return_if_fail (TNY_IS_FOLDER_STORE (parent));
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ folder_name = tny_folder_get_name (folder);
/* Get account and set it into mail_operation */
priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder));
if ((gpointer) parent == (gpointer) folder ||
(!TNY_IS_FOLDER_STORE (parent)) ||
(rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE)) {
+
/* Set status failed and set an error */
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
/* Notify the queue */
modest_mail_operation_notify_end (self);
+
} else if (TNY_IS_FOLDER (parent) &&
(parent_rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE)) {
+
/* Set status failed and set an error */
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
/* Notify the queue */
modest_mail_operation_notify_end (self);
+
} else if (TNY_IS_FOLDER (parent) &&
TNY_IS_FOLDER_STORE (folder) &&
folder_is_ancestor (TNY_FOLDER (parent), TNY_FOLDER_STORE (folder))) {
/* Notify the queue */
modest_mail_operation_notify_end (self);
- } else {
+
+ } else if (TNY_IS_FOLDER_STORE (parent) &&
+ modest_tny_folder_same_subfolder (parent, folder_name)) {
+ /* Check that the new folder name is not used by any
+ parent subfolder */
+
+ /* 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,
+ _("mail_in_ui_folder_move_target_error"));
+
+ /* Notify the queue */
+ modest_mail_operation_notify_end (self);
+
+ } else if (!(new_name_valid_if_local_account (priv, parent, folder_name))) {
/* Check that the new folder name is not used by any
special local folder */
- if (new_name_valid_if_local_account (priv, parent,
- tny_folder_get_name (folder))) {
- /* Create the helper */
- helper = g_slice_new0 (XFerMsgAsyncHelper);
- helper->mail_op = g_object_ref(self);
- helper->dest_folder = NULL;
- helper->headers = NULL;
- helper->user_callback = user_callback;
- helper->user_data = user_data;
-
- /* Move/Copy folder */
- tny_folder_copy_async (folder,
- parent,
- tny_folder_get_name (folder),
+
+ /* 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,
+ _("mail_in_ui_folder_move_target_error"));
+
+ /* Notify the queue */
+ modest_mail_operation_notify_end (self);
+ } else {
+ /* Create the helper */
+ helper = g_slice_new0 (XFerMsgAsyncHelper);
+ helper->mail_op = g_object_ref(self);
+ helper->dest_folder = NULL;
+ helper->headers = NULL;
+ helper->user_callback = user_callback;
+ helper->user_data = user_data;
+
+ /* Move/Copy folder */
+ tny_folder_copy_async (folder,
+ parent,
+ tny_folder_get_name (folder),
delete_original,
- transfer_folder_cb,
- transfer_folder_status_cb,
- helper);
- } else {
- modest_mail_operation_notify_end (self);
- }
- }
+ transfer_folder_cb,
+ transfer_folder_status_cb,
+ helper);
+ }
+
}
void
#include <string.h>
#include <modest-tny-folder.h>
#include <modest-tny-outbox-account.h>
+#include <tny-simple-list.h>
#include <tny-camel-folder.h>
#include <tny-merge-folder.h>
#include <camel/camel-folder.h>
return account;
}
+
+gboolean
+modest_tny_folder_same_subfolder (TnyFolderStore *parent,
+ const gchar *new_name)
+{
+ TnyList *subfolders = NULL;
+ TnyIterator *iter = NULL;
+ TnyFolder *folder = NULL;
+ GError *err = NULL;
+ const gchar *name = NULL;
+ gboolean same_subfolder = FALSE;
+
+ g_return_val_if_fail (TNY_IS_FOLDER_STORE (parent), FALSE);
+
+ /* Get direct subfolders */
+ subfolders = tny_simple_list_new ();
+ tny_folder_store_get_folders (parent, subfolders, NULL, &err);
+
+ /* Check names */
+ iter = tny_list_create_iterator (subfolders);
+ while (!tny_iterator_is_done (iter) && !same_subfolder) {
+ folder = TNY_FOLDER(tny_iterator_get_current (iter));
+ name = tny_folder_get_name (folder);
+
+ same_subfolder = !strcmp(name, new_name);
+
+ g_object_unref (folder);
+ tny_iterator_next(iter);
+ }
+
+ /* free */
+ if (iter != NULL)
+ g_object_unref (iter);
+ if (subfolders != NULL)
+ g_object_unref (subfolders);
+
+ return same_subfolder;
+}
**/
gchar* modest_tny_folder_get_header_unique_id (TnyHeader *header);
+/**
+ * modest_tny_msg_get_header_unique_id:
+ * @folder: a #TnyFolderStore
+ * @new_name: the new name to check into subfolders.
+ *
+ * This function check if subfolders of @folder has the same
+ * name as @new_name.
+ *
+ * Returns: TRUE if some subfolder has the name @new_name.
+ **/
+gboolean modest_tny_folder_same_subfolder (TnyFolderStore *folder,
+ const gchar *new_name);
+
+
+
+
G_END_DECLS
#endif /* __MODEST_TNY_FOLDER_H__*/
gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
- modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+/* modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent")); */
/* Create the mail operation */
ModestMailOperation *mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_SEND, G_OBJECT(edit_window));
/* Create folder view */
*tree_view = modest_platform_create_folder_view (NULL);
+/* *tree_view = modest_folder_view_new (NULL); */
g_signal_connect (G_OBJECT (new_button), "clicked", G_CALLBACK(create_move_to_dialog_on_new_folder), *tree_view);
window (msg window for example) after the main window was
closed, so we can not just get the model of the folder
view */
- if (MODEST_IS_FOLDER_VIEW (folder_view))
- gtk_tree_view_set_model (GTK_TREE_VIEW (*tree_view),
- gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view)));
- else
+ if (MODEST_IS_FOLDER_VIEW (folder_view)) {
+ modest_folder_view_copy_model (MODEST_FOLDER_VIEW(folder_view),
+ MODEST_FOLDER_VIEW(*tree_view));
+ } else
modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view),
TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
+ /* Hide special folders */
modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE);
gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
g_object_unref (headers);
}
-
/*
* UI handler for the "Move to" action when invoked from the
* ModestMainWindow
}
void
+modest_folder_view_copy_model (ModestFolderView *folder_view_src,
+ ModestFolderView *folder_view_dst)
+{
+ GtkTreeModel *filter_model = NULL;
+ GtkTreeModel *model = NULL;
+ GtkTreeModel *new_filter_model = NULL;
+
+ g_return_if_fail (MODEST_IS_FOLDER_VIEW (folder_view_src));
+ g_return_if_fail (MODEST_IS_FOLDER_VIEW (folder_view_dst));
+
+ /* Get src model*/
+ filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view_src));
+ model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER(filter_model));
+
+ /* Build new filter model */
+ new_filter_model = gtk_tree_model_filter_new (model, NULL);
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (new_filter_model),
+ filter_row,
+ folder_view_dst,
+ NULL);
+ /* Set copied model */
+ gtk_tree_view_set_model (GTK_TREE_VIEW (folder_view_dst), new_filter_model);
+
+ /* Free */
+ g_object_unref (new_filter_model);
+}
+
+void
modest_folder_view_show_non_move_folders (ModestFolderView *folder_view,
- gboolean show)
+ gboolean show)
{
+ GtkTreeModel *model = NULL;
ModestFolderViewPrivate* priv = MODEST_FOLDER_VIEW_GET_PRIVATE(folder_view);
priv->show_non_move = show;
- modest_folder_view_update_model(folder_view,
- TNY_ACCOUNT_STORE(modest_runtime_get_account_store()));
+/* modest_folder_view_update_model(folder_view, */
+/* TNY_ACCOUNT_STORE(modest_runtime_get_account_store())); */
+
+ /* Hide special folders */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view));
+ if (GTK_IS_TREE_MODEL_FILTER (model)) {
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
+ }
}
/* Returns FALSE if it did not selected anything */
modest_folder_view_show_non_move_folders (ModestFolderView *folder_view,
gboolean show);
+/*
+ * modest_folder_view_copy_model:
+ * @folder_view_src: a #ModestFolderView
+ * @folder_view_dst: a #ModestFolderView
+ *
+ * Get model from @folder_view_src and builds a new
+ * #GtkTreeFilterModel object for that model. This copied
+ * model will be asigned to @folder_view_dst.
+ **/
+void
+modest_folder_view_copy_model (ModestFolderView *folder_view_src,
+ ModestFolderView *folder_view_dst);
+
G_END_DECLS
#endif /* __MODEST_FOLDER_VIEW_H__ */