#include <tny-simple-list.h>
#include <tny-camel-folder.h>
#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)
-{
- gint type;
- gchar *folder;
- gchar *dc_outbox = NULL;
- gchar *dc_sent = NULL;
- gchar *dc_drafts = NULL;
- g_return_val_if_fail (name, TNY_FOLDER_TYPE_UNKNOWN);
-
- type = TNY_FOLDER_TYPE_UNKNOWN;
- folder = g_utf8_strdown (name, strlen(name));
- dc_outbox = g_utf8_strdown (_("mcen_me_folder_outbox"), -1);
- dc_sent = g_utf8_strdown (_("mcen_me_folder_sent"), -1);
- dc_drafts = g_utf8_strdown (_("mcen_me_folder_drafts"), -1);
-
-// if (strcmp (folder, "inbox") == 0 ||
-// strcmp (folder, _("inbox")) == 0 ||
-// strcmp (folder, _("mcen_me_folder_inbox")) == 0)
-// type = TNY_FOLDER_TYPE_INBOX;
- if (strcmp (folder, dc_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 (strcmp (folder, dc_sent) == 0)
- type = TNY_FOLDER_TYPE_SENT;
- else if (strcmp (folder, dc_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;
+/* make sure you use the *full* name, because foo/drafts is not the same as drafts */
+static TnyFolderType
+modest_tny_folder_guess_folder_type_from_name (const gchar* full_name)
+{
+ g_return_val_if_fail (full_name, TNY_FOLDER_TYPE_INVALID);
- g_free (folder);
- g_free (dc_outbox);
- g_free (dc_sent);
- g_free (dc_drafts);
- return type;
+ if (strcmp (full_name, modest_local_folder_info_get_type_name(TNY_FOLDER_TYPE_OUTBOX)) == 0)
+ return TNY_FOLDER_TYPE_OUTBOX;
+ else if (strcmp (full_name, modest_local_folder_info_get_type_name(TNY_FOLDER_TYPE_DRAFTS)) == 0)
+ return TNY_FOLDER_TYPE_DRAFTS;
+ return
+ TNY_FOLDER_TYPE_NORMAL;
}
{
TnyFolderType type;
- g_return_val_if_fail (TNY_IS_FOLDER(folder), TNY_FOLDER_TYPE_UNKNOWN);
+ g_return_val_if_fail (TNY_IS_FOLDER(folder), TNY_FOLDER_TYPE_INVALID);
if (modest_tny_folder_is_local_folder ((TnyFolder*)folder))
type = modest_tny_folder_get_local_or_mmc_folder_type ((TnyFolder*)folder);
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));
+ const gchar *folder_name =
+ tny_camel_folder_get_full_name (TNY_CAMEL_FOLDER (folder));
type = modest_tny_folder_guess_folder_type_from_name (folder_name);
}
+ if (type == TNY_FOLDER_TYPE_INVALID)
+ g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
+
return type;
}
+const gchar*
+modest_tny_folder_get_help_id (const TnyFolder *folder)
+{
+ TnyFolderType type;
+ const gchar* help_id = NULL;
+
+ g_return_val_if_fail (folder, NULL);
+ g_return_val_if_fail (TNY_IS_FOLDER(folder), NULL);
+
+ type = modest_tny_folder_guess_folder_type (TNY_FOLDER (folder));
+
+ switch (type) {
+ case TNY_FOLDER_TYPE_NORMAL: help_id = "applications_email_managefolders"; break;
+ case TNY_FOLDER_TYPE_INBOX: help_id = "applications_email_inbox";break;
+ case TNY_FOLDER_TYPE_OUTBOX: help_id = "applications_email_outbox";break;
+ case TNY_FOLDER_TYPE_SENT: help_id = "applications_email_sent"; break;
+ case TNY_FOLDER_TYPE_DRAFTS: help_id = "applications_email_drafts";break;
+ case TNY_FOLDER_TYPE_ARCHIVE: help_id = "applications_email_managefolders";break;
+
+ case TNY_FOLDER_TYPE_INVALID: g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);break;
+ default: g_warning ("%s: BUG: unexpected folder type (%d)", __FUNCTION__, type);
+ }
+
+ return help_id;
+}
+
+
+
/* FIXME: encode all folder rules here */
ModestTnyFolderRules
modest_tny_folder_get_rules (TnyFolder *folder)
TnyFolderType type;
g_return_val_if_fail (TNY_IS_FOLDER(folder), -1);
-
+
if (modest_tny_folder_is_local_folder (folder) ||
modest_tny_folder_is_memory_card_folder (folder)) {
type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
+ g_return_val_if_fail (type != TNY_FOLDER_TYPE_INVALID, -1);
switch (type) {
case TNY_FOLDER_TYPE_OUTBOX:
/* Neither INBOX nor ROOT, nor ARCHIVE folders should me moveable */
folder_type = modest_tny_folder_guess_folder_type (folder);
+ g_return_val_if_fail (folder_type != TNY_FOLDER_TYPE_INVALID, -1);
+
if ((folder_type == TNY_FOLDER_TYPE_INBOX) ||
(folder_type == TNY_FOLDER_TYPE_ROOT) ||
(folder_type == TNY_FOLDER_TYPE_ARCHIVE)) {
modest_tny_folder_is_memory_card_folder (TnyFolder *folder)
{
g_return_val_if_fail (folder, FALSE);
+ g_return_val_if_fail (modest_tny_folder_guess_folder_type (folder) !=
+ TNY_FOLDER_TYPE_INVALID, FALSE);
/* The merge folder is a special case,
* used to merge the per-account local outbox folders.
return !is_local;
}
+
TnyFolderType
modest_tny_folder_get_local_or_mmc_folder_type (TnyFolder *folder)
{
- g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN);
+ g_return_val_if_fail (folder, TNY_FOLDER_TYPE_INVALID);
g_return_val_if_fail (modest_tny_folder_is_local_folder(folder)||
modest_tny_folder_is_memory_card_folder(folder),
- TNY_FOLDER_TYPE_UNKNOWN);
+ TNY_FOLDER_TYPE_INVALID);
/* The merge folder is a special case,
* used to merge the per-account local outbox folders.
return same_subfolder;
}
+
+gboolean
+modest_tny_folder_is_ancestor (TnyFolder *folder,
+ TnyFolderStore *ancestor)
+{
+ TnyFolderStore *tmp = NULL;
+ gboolean found = FALSE;
+
+ tmp = TNY_FOLDER_STORE (folder);
+ while (!found && tmp && !TNY_IS_ACCOUNT (tmp)) {
+ TnyFolderStore *folder_store;
+
+ folder_store = tny_folder_get_folder_store (TNY_FOLDER (tmp));
+ if (ancestor == folder_store)
+ found = TRUE;
+ else
+ tmp = folder_store;
+ g_object_unref (folder_store);
+ }
+ return found;
+}