#include <tny-merge-folder.h>
#include <camel/camel-folder.h>
#include <modest-protocol-info.h>
+#include <modest-runtime.h>
+#include <modest-tny-account-store.h>
TnyFolderType
modest_tny_folder_guess_folder_type_from_name (const gchar* name)
type = TNY_FOLDER_TYPE_UNKNOWN;
folder = g_utf8_strdown (name, strlen(name));
- if (strcmp (folder, "inbox") == 0 ||
- strcmp (folder, _("inbox")) == 0 ||
- strcmp (folder, _("mcen_me_folder_inbox")) == 0)
- type = TNY_FOLDER_TYPE_INBOX;
- else if (strcmp (folder, "outbox") == 0 ||
+// if (strcmp (folder, "inbox") == 0 ||
+// strcmp (folder, _("inbox")) == 0 ||
+// strcmp (folder, _("mcen_me_folder_inbox")) == 0)
+// type = TNY_FOLDER_TYPE_INBOX;
+ if (strcmp (folder, "outbox") == 0 ||
strcmp (folder, _("outbox")) == 0 ||
strcmp (folder, _("mcen_me_folder_outbox")) == 0)
type = TNY_FOLDER_TYPE_OUTBOX;
- else if (g_str_has_prefix(folder, "junk") ||
- g_str_has_prefix(folder, _("junk")))
- type = TNY_FOLDER_TYPE_JUNK;
- else if (g_str_has_prefix(folder, "trash") ||
- g_str_has_prefix(folder, _("trash")))
- type = TNY_FOLDER_TYPE_TRASH;
+// else if (g_str_has_prefix(folder, "junk") ||
+// g_str_has_prefix(folder, _("junk")))
+// type = TNY_FOLDER_TYPE_JUNK;
+// else if (g_str_has_prefix(folder, "trash") ||
+// g_str_has_prefix(folder, _("trash")))
+// type = TNY_FOLDER_TYPE_TRASH;
else if (g_str_has_prefix(folder, "sent") ||
g_str_has_prefix(folder, _("sent")) ||
strcmp (folder, _("mcen_me_folder_sent")) == 0)
g_str_has_prefix(folder, _("draft")) ||
strcmp (folder, _("mcen_me_folder_drafts")) == 0)
type = TNY_FOLDER_TYPE_DRAFTS;
- else if (g_str_has_prefix(folder, "notes") ||
- g_str_has_prefix(folder, _("notes")))
- type = TNY_FOLDER_TYPE_NOTES;
- else if (g_str_has_prefix(folder, "contacts") ||
- g_str_has_prefix(folder, _("contacts")))
- type = TNY_FOLDER_TYPE_CONTACTS;
- else if (g_str_has_prefix(folder, "calendar") ||
- g_str_has_prefix(folder, _("calendar")))
- type = TNY_FOLDER_TYPE_CALENDAR;
+// else if (g_str_has_prefix(folder, "notes") ||
+// g_str_has_prefix(folder, _("notes")))
+// type = TNY_FOLDER_TYPE_NOTES;
+// else if (g_str_has_prefix(folder, "contacts") ||
+// g_str_has_prefix(folder, _("contacts")))
+// type = TNY_FOLDER_TYPE_CONTACTS;
+// else if (g_str_has_prefix(folder, "calendar") ||
+// g_str_has_prefix(folder, _("calendar")))
+// type = TNY_FOLDER_TYPE_CALENDAR;
g_free (folder);
return type;
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_DRAFTS:
case TNY_FOLDER_TYPE_OUTBOX:
case TNY_FOLDER_TYPE_SENT:
+ case TNY_FOLDER_TYPE_DRAFTS:
rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
case TNY_FOLDER_TYPE_INBOX:
case TNY_FOLDER_TYPE_JUNK:
}
} else {
ModestTransportStoreProtocol proto;
- TnyAccount *account =
- 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;
}
gboolean
modest_tny_folder_is_local_folder (TnyFolder *folder)
{
- g_return_val_if_fail (folder, FALSE);
+ g_return_val_if_fail (TNY_IS_FOLDER (folder), FALSE);
/* The merge folder is a special case,
* used to merge the per-account local outbox folders.
/* 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)
return FALSE;
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);
}
return retval;
}
+
+TnyAccount *modest_tny_folder_get_account (TnyFolder *folder)
+{
+ TnyAccount *account = NULL;
+
+ if (TNY_IS_MERGE_FOLDER (folder)) {
+ /* TnyMergeFolder does not support get_account(),
+ * because it could be merging folders from multiple accounts.
+ * So we assume that this is the local folders account: */
+
+ account = modest_tny_account_store_get_local_folders_account (
+ TNY_ACCOUNT_STORE (modest_runtime_get_account_store()));
+ } else {
+ account = tny_folder_get_account (folder);
+ }
+
+ return account;
+}
+