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);
}
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:
}
} 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 */
}
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;
}
/* 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)
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);
}