* Added some missing rules to the xfer_folder and xfer_msgs operations
authorSergio Villar Senin <svillar@igalia.com>
Tue, 22 May 2007 17:54:40 +0000 (17:54 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 22 May 2007 17:54:40 +0000 (17:54 +0000)
pmo-trunk-r1956

src/modest-mail-operation.c
src/modest-tny-folder.c
src/modest-tny-folder.h

index f5d4ed4..54955b6 100644 (file)
@@ -957,7 +957,7 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self,
 {
        XFerFolderAsyncHelper *helper = NULL;
        ModestMailOperationPrivate *priv = NULL;
-       ModestTnyFolderRules rules;
+       ModestTnyFolderRules parent_rules, rules;
 
        g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
        g_return_if_fail (TNY_IS_FOLDER_STORE (parent));
@@ -969,12 +969,22 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self,
        g_object_ref (folder);
        g_object_ref (parent);
 
+       /* Get folder rules */
+       rules = modest_tny_folder_get_rules (TNY_FOLDER (folder));
+       parent_rules = modest_tny_folder_get_rules (TNY_FOLDER (parent));
+
        /* The moveable restriction is applied also to copy operation */
-       rules = modest_tny_folder_get_rules (TNY_FOLDER (parent));
        if (rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE) {
                g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
                             MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
-                            _("FIXME: unable to rename"));
+                            _("FIXME: unable to transfer folder"));
+
+               /* Notify the queue */
+               modest_mail_operation_notify_end (self);
+       } else if (parent_rules & MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_FOLDERS) {
+               g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                            MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
+                            _("FIXME: parent folder does not accept new folders"));
 
                /* Notify the queue */
                modest_mail_operation_notify_end (self);
@@ -1236,7 +1246,7 @@ get_msgs_full_thread (gpointer thr_user_data)
                                                         notify_get_msgs_full, 
                                                         info_notify, NULL);
                                }
-                               g_object_unref (msg);                           
+                               g_object_unref (msg);
                        }
                } else {
                        /* Set status failed and set an error */
@@ -1482,11 +1492,28 @@ modest_mail_operation_xfer_msgs (ModestMailOperation *self,
        TnyFolder *src_folder;
        XFerMsgAsyncHelper *helper;
        TnyHeader *header;
+       ModestTnyFolderRules rules;
 
        g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
        g_return_if_fail (TNY_IS_LIST (headers));
        g_return_if_fail (TNY_IS_FOLDER (folder));
 
+       /* Get folder rules */
+       rules = modest_tny_folder_get_rules (TNY_FOLDER (folder));
+
+       /* Apply folder rules */
+       if (rules & MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_MSGS) {
+               g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                            MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
+                            _("FIXME: folder does not accept msgs"));
+               /* Notify the queue */
+               modest_mail_operation_notify_end (self);
+
+               g_object_unref (headers);
+               g_object_unref (folder);
+               return;
+       }
+
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
        priv->total = 1;
        priv->done = 0;
index 10e77e5..098c33c 100644 (file)
@@ -120,6 +120,8 @@ modest_tny_folder_get_rules   (const TnyFolder *folder)
                switch (type) {
                case TNY_FOLDER_TYPE_DRAFTS:
                case TNY_FOLDER_TYPE_OUTBOX:
+                       rules |= MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_FOLDERS;
+                       rules |= MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_MSGS;
                case TNY_FOLDER_TYPE_SENT:
                        rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
                case TNY_FOLDER_TYPE_INBOX:
index f540e6d..fb08ebc 100644 (file)
 G_BEGIN_DECLS
 
 typedef enum {
-       MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE  = 1 << 1,
-       MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE  = 1 << 2,
-       MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE   = 1 << 3,
-       MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE = 1 << 4
+       MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE       = 1 << 1,
+       MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE       = 1 << 2,
+       MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE        = 1 << 3,
+       MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE      = 1 << 4,
+       MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_FOLDERS = 1 << 5,
+       MODEST_FOLDER_RULES_FOLDER_DONT_ACCEPT_MSGS    = 1 << 6
 } ModestTnyFolderRules;
 
 /**