X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-folder.c;h=d4e4a19aed6e601b13c59ea4384c354995b66fc3;hp=f4c00145c9506307944fa4d24d151248cc1e496f;hb=7441d1df9d7eb43ff93e411e7b4b9e7d72d9d066;hpb=90b7d85fe6a7f3a46b14810fb9476982d021716d diff --git a/src/modest-tny-folder.c b/src/modest-tny-folder.c index f4c0014..d4e4a19 100644 --- a/src/modest-tny-folder.c +++ b/src/modest-tny-folder.c @@ -92,14 +92,16 @@ TnyFolderType modest_tny_folder_guess_folder_type (const TnyFolder *folder) { TnyFolderType type; + + g_return_val_if_fail (TNY_IS_FOLDER(folder), TNY_FOLDER_TYPE_UNKNOWN); - g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN); - - type = tny_folder_get_folder_type (TNY_FOLDER (folder)); + if (modest_tny_folder_is_local_folder ((TnyFolder*)folder)) + type = modest_tny_folder_get_local_folder_type ((TnyFolder*)folder); + else + type = tny_folder_get_folder_type (TNY_FOLDER (folder)); if (type == TNY_FOLDER_TYPE_UNKNOWN) { const gchar *folder_name; - folder_name = tny_folder_get_name (TNY_FOLDER (folder)); type = modest_tny_folder_guess_folder_type_from_name (folder_name); } @@ -117,15 +119,16 @@ modest_tny_folder_get_rules (TnyFolder *folder) g_return_val_if_fail (TNY_IS_FOLDER(folder), -1); - if (modest_tny_folder_is_local_folder (folder)) { + if (modest_tny_folder_is_local_folder (folder) || + modest_tny_folder_is_memory_card_folder (folder)) { type = modest_tny_folder_get_local_folder_type (folder); switch (type) { case TNY_FOLDER_TYPE_OUTBOX: case TNY_FOLDER_TYPE_SENT: - rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; case TNY_FOLDER_TYPE_DRAFTS: + rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; case TNY_FOLDER_TYPE_INBOX: case TNY_FOLDER_TYPE_JUNK: case TNY_FOLDER_TYPE_TRASH: @@ -144,8 +147,10 @@ modest_tny_folder_get_rules (TnyFolder *folder) } } else { ModestTransportStoreProtocol proto; - TnyAccount *account = - modest_tny_folder_get_account ((TnyFolder*)folder); + TnyFolderType folder_type; + TnyAccount *account; + + account = modest_tny_folder_get_account ((TnyFolder*)folder); if (!account) return -1; /* no account: nothing is allowed */ @@ -163,6 +168,15 @@ modest_tny_folder_get_rules (TnyFolder *folder) } g_object_unref (G_OBJECT(account)); + + /* Neither INBOX not ROOT folders should me moveable */ + folder_type = modest_tny_folder_guess_folder_type (folder); + if ((folder_type == TNY_FOLDER_TYPE_INBOX) || + (folder_type == TNY_FOLDER_TYPE_ROOT)) { + rules |= MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE; + rules |= MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE; + rules |= MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE; + } } return rules; } @@ -188,9 +202,35 @@ modest_tny_folder_is_local_folder (TnyFolder *folder) /* Outbox is a special case, using a derived TnyAccount: */ if (MODEST_IS_TNY_OUTBOX_ACCOUNT (account)) { - g_object_unref (account); - return TRUE; + g_object_unref (G_OBJECT(account)); + return TRUE; + } + + const gchar* account_id = tny_account_get_id (account); + if (!account_id) { + g_object_unref (G_OBJECT(account)); + return FALSE; } + + g_object_unref (G_OBJECT(account)); + return (strcmp (account_id, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) == 0); +} + +gboolean +modest_tny_folder_is_memory_card_folder (TnyFolder *folder) +{ + g_return_val_if_fail (folder, FALSE); + + /* The merge folder is a special case, + * used to merge the per-account local outbox folders. + * and can have no get_account() implementation. + */ + if (TNY_IS_MERGE_FOLDER (folder)) + return FALSE; + + TnyAccount* account = tny_folder_get_account ((TnyFolder*)folder); + if (!account) + return FALSE; const gchar* account_id = tny_account_get_id (account); if (!account_id) @@ -198,7 +238,7 @@ modest_tny_folder_is_local_folder (TnyFolder *folder) g_object_unref (G_OBJECT(account)); - return (strcmp (account_id, MODEST_ACTUAL_LOCAL_FOLDERS_ACCOUNT_ID) == 0); + return (strcmp (account_id, MODEST_MMC_ACCOUNT_ID) == 0); }