* modest-tny-folder.[ch]:
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Thu, 25 Jan 2007 09:17:10 +0000 (09:17 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Thu, 25 Jan 2007 09:17:10 +0000 (09:17 +0000)
- add modest_tny_folder_is_local_folder, and
- add modest_tny_folder_local_folder_type
* modest-local-folder-info.[ch]:
- remove ModestLocalFolderType, use TnyFolderType instead
- add some extra folder types
* modest-defs.h:
- add display name for local folders (N_("Local Folders")
* modest-init.c:
- adapt to these changes
* widgets/modest-folder-view.c:
- display the display names for local folders

pmo-trunk-r735

src/modest-defs.h
src/modest-init.c
src/modest-local-folder-info.c
src/modest-local-folder-info.h
src/modest-tny-folder.c
src/modest-tny-folder.h
src/widgets/modest-folder-view.c

index 2aa0e99..4160c83 100644 (file)
@@ -31,6 +31,7 @@
 #ifndef __MODEST_DEFS_H__
 #define __MODEST_DEFS_H__
 
+#include <glib/gi18n.h>
 
 /* exit codes for the modest executable*/
 enum {
@@ -56,6 +57,7 @@ enum {
 #define MODEST_CACHE_DIR                  "cache"
 #define MODEST_LOCAL_FOLDERS_MAILDIR      "local_folders"
 #define MODEST_LOCAL_FOLDERS_ACCOUNT_NAME "local_folders"
+#define MODEST_LOCAL_FOLDERS_DISPLAY_NAME N_("Local folders")
 
 /* configuration key definitions for modest */
 #define MODEST_CONF_NAMESPACE          "/apps/modest"
index 887f551..a9568d5 100644 (file)
@@ -73,14 +73,13 @@ static const FolderCols OUTBOX_COLUMNS_TWOLINES[] = {
         {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,200},
 };
         
-static const ModestLocalFolderType LOCAL_FOLDERS[] = {
-       MODEST_LOCAL_FOLDER_TYPE_OUTBOX,
-       MODEST_LOCAL_FOLDER_TYPE_DRAFTS,
-       MODEST_LOCAL_FOLDER_TYPE_SENT,
-       MODEST_LOCAL_FOLDER_TYPE_ARCHIVE        
+static const TnyFolderType LOCAL_FOLDERS[] = {
+       TNY_FOLDER_TYPE_OUTBOX,
+       TNY_FOLDER_TYPE_DRAFTS,
+       TNY_FOLDER_TYPE_SENT,
+       TNY_FOLDER_TYPE_ARCHIVE 
 };
 
-
 static ModestTnyPlatformFactory*
 get_platform_factory (void)
 {
index 2c1ca5e..25c02b7 100644 (file)
 #include <modest-local-folder-info.h>
 
 typedef struct {
-       ModestLocalFolderType   type;
-       const gchar             *name;
-       const gchar             *display_name;
+       TnyFolderType   type;
+       const gchar     *name;
+       const gchar     *display_name;
 } ModestLocalFolder;
 
 const ModestLocalFolder ModestLocalFolderMap[] = {
-       { MODEST_LOCAL_FOLDER_TYPE_JUNK,    "junk",    N_("Junk")},
-       { MODEST_LOCAL_FOLDER_TYPE_TRASH,   "trash",   N_("Trash")},
-       { MODEST_LOCAL_FOLDER_TYPE_DRAFTS,  "drafts",  N_("Drafts")},
-       { MODEST_LOCAL_FOLDER_TYPE_SENT,    "sent",    N_("Sent")},
-       { MODEST_LOCAL_FOLDER_TYPE_OUTBOX,  "outbox",  N_("Outbox")},
-       { MODEST_LOCAL_FOLDER_TYPE_ARCHIVE, "archive", N_("Archive")}
+       { TNY_FOLDER_TYPE_UNKNOWN,  "<unknown>",  N_("<Unknown>")},
+       { TNY_FOLDER_TYPE_NORMAL,   "<normal>",   N_("<Normal>")},
+       { TNY_FOLDER_TYPE_INBOX,    "inbox",      N_("Inbox")},
+       { TNY_FOLDER_TYPE_OUTBOX,   "outbox",     N_("Outbox")},
+       { TNY_FOLDER_TYPE_TRASH,    "trash",      N_("Trash")},
+       { TNY_FOLDER_TYPE_JUNK,     "junk",       N_("Junk")},
+       { TNY_FOLDER_TYPE_SENT,     "sent",       N_("Sent items")},
+       { TNY_FOLDER_TYPE_ROOT,     "<root>",     N_("<root>")},
+       { TNY_FOLDER_TYPE_NOTES,    "notes",      N_("Notes")},
+       { TNY_FOLDER_TYPE_DRAFTS,   "drafts",     N_("Drafts")},
+       { TNY_FOLDER_TYPE_OUTBOX,   "contacts",   N_("Contacts")},
+       { TNY_FOLDER_TYPE_OUTBOX,   "calendar",   N_("Calendar")},
+       { TNY_FOLDER_TYPE_ARCHIVE,  "archive",    N_("Archive")}
 };
 
 
-ModestLocalFolderType
+TnyFolderType
 modest_local_folder_info_get_type (const gchar *name)
 {
        int i;
-
-       g_return_val_if_fail (name, MODEST_LOCAL_FOLDER_TYPE_UNKNOWN);
+       g_return_val_if_fail (name, TNY_FOLDER_TYPE_UNKNOWN);
 
        for (i = 0; i != G_N_ELEMENTS(ModestLocalFolderMap); ++i) {
                if (strcmp (ModestLocalFolderMap[i].name, name) == 0)
                        return ModestLocalFolderMap[i].type;
        }
-       return MODEST_LOCAL_FOLDER_TYPE_UNKNOWN;
+       return TNY_FOLDER_TYPE_UNKNOWN;
 }
 
+
 const gchar*
-modest_local_folder_info_get_type_name (ModestLocalFolderType type)
+modest_local_folder_info_get_type_name (TnyFolderType type)
 {
        int i = 0;
-       g_return_val_if_fail (type > MODEST_LOCAL_FOLDER_TYPE_UNKNOWN &&
-                             type < MODEST_LOCAL_FOLDER_TYPE_NUM, NULL);
+       g_return_val_if_fail (type >= TNY_FOLDER_TYPE_UNKNOWN &&
+                             type <  TNY_FOLDER_TYPE_NUM, NULL);
        
        for (i = 0; i != G_N_ELEMENTS(ModestLocalFolderMap); ++i) {
                if (ModestLocalFolderMap[i].type == type)
@@ -76,11 +83,11 @@ modest_local_folder_info_get_type_name (ModestLocalFolderType type)
 }
 
 const gchar*
-modest_local_folder_info_get_type_display_name (ModestLocalFolderType type)
+modest_local_folder_info_get_type_display_name (TnyFolderType type)
 {
        int i = 0;
-       g_return_val_if_fail (type > MODEST_LOCAL_FOLDER_TYPE_UNKNOWN &&
-                             type < MODEST_LOCAL_FOLDER_TYPE_NUM, NULL);
+       g_return_val_if_fail (type >= TNY_FOLDER_TYPE_UNKNOWN &&
+                             type <  TNY_FOLDER_TYPE_NUM, NULL);
        
        for (i = 0; i != G_N_ELEMENTS(ModestLocalFolderMap); ++i) {
                if (ModestLocalFolderMap[i].type == type)
index 42fe037..13b3a33 100644 (file)
@@ -34,18 +34,7 @@ G_BEGIN_DECLS
 
 #include <glib.h>
 #include <modest-defs.h>
-
-typedef enum {
-       MODEST_LOCAL_FOLDER_TYPE_UNKNOWN,
-       MODEST_LOCAL_FOLDER_TYPE_DRAFTS,
-       MODEST_LOCAL_FOLDER_TYPE_SENT,
-       MODEST_LOCAL_FOLDER_TYPE_OUTBOX,
-       MODEST_LOCAL_FOLDER_TYPE_ARCHIVE,
-       MODEST_LOCAL_FOLDER_TYPE_JUNK,
-       MODEST_LOCAL_FOLDER_TYPE_TRASH, 
-       MODEST_LOCAL_FOLDER_TYPE_NUM    
-} ModestLocalFolderType;
-
+#include <tny-folder.h>
 
 /**
  * modest_local_folder_info_get_type
@@ -58,7 +47,7 @@ typedef enum {
  * in case of error
  *
  */
-ModestLocalFolderType modest_local_folder_info_get_type (const gchar *name);
+TnyFolderType modest_local_folder_info_get_type (const gchar *name);
 
 /**
  * modest_local_folder_get_type_name
@@ -70,7 +59,7 @@ ModestLocalFolderType modest_local_folder_info_get_type (const gchar *name);
  * the returned name should NOT be freed or modified
  *
  */
-const gchar* modest_local_folder_info_get_type_name (ModestLocalFolderType type);
+const gchar* modest_local_folder_info_get_type_name (TnyFolderType type);
 
 /**
  * modest_local_folder_info_get_type_display_name
@@ -82,7 +71,7 @@ const gchar* modest_local_folder_info_get_type_name (ModestLocalFolderType type)
  * the returned name should NOT be freed or modified
  *
  */
-const gchar* modest_local_folder_info_get_type_display_name (ModestLocalFolderType type);
+const gchar* modest_local_folder_info_get_type_display_name (TnyFolderType type);
 
 
 /**
index b527cd0..720e659 100644 (file)
@@ -31,7 +31,8 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <modest-tny-folder.h>
-
+#include <tny-camel-folder.h>
+#include <camel/camel-folder.h>
 
 TnyFolderType
 modest_tny_folder_guess_folder_type_from_name (const gchar* name)
@@ -106,3 +107,45 @@ modest_tny_folder_get_folder_rules   (const TnyFolder *folder)
        /* FIXME -- implement this */
        return 0;
 }
+
+
+gboolean
+modest_tny_folder_is_local_folder   (const TnyFolder *folder)
+{
+       TnyAccount*  account;
+       const gchar* account_name;
+       
+       g_return_val_if_fail (folder, FALSE);
+       
+       account = tny_folder_get_account ((TnyFolder*)folder);
+       if (!account)
+               return FALSE;
+
+       account_name = tny_account_get_id (account);
+       if (!account_name)
+               return FALSE;
+
+       return (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_NAME) == 0);
+}      
+
+
+TnyFolderType
+modest_tny_folder_get_local_folder_type  (const TnyFolder *folder)
+{
+       CamelFolder *camel_folder;
+       const gchar *full_name;
+       
+       g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN);
+       g_return_val_if_fail (modest_tny_folder_is_local_folder(folder),
+                             TNY_FOLDER_TYPE_UNKNOWN);
+
+       camel_folder = tny_camel_folder_get_folder (TNY_CAMEL_FOLDER(folder));
+       if (!camel_folder)
+               return TNY_FOLDER_TYPE_UNKNOWN;
+
+       full_name = camel_folder_get_full_name (camel_folder);
+       if (!full_name)
+               return TNY_FOLDER_TYPE_UNKNOWN;
+
+       return modest_local_folder_info_get_type (full_name);
+}
index 51a04db..c26922d 100644 (file)
@@ -35,6 +35,7 @@
 #define __MODEST_TNY_FOLDER_H__
 
 #include <tny-folder.h>
+#include <modest-local-folder-info.h>
 
 G_BEGIN_DECLS
 
@@ -70,6 +71,29 @@ TnyFolderType  modest_tny_folder_guess_folder_type   (const TnyFolder *folder);
 TnyFolderType  modest_tny_folder_guess_folder_type_from_name   (const gchar *folder_name);
 
 
+
+/**
+ * modest_tny_folder_is_local_folder:
+ * @folder: a valid tnymail folder
+ * 
+ * checks if the folder is part of the "local folders" pseudo-account
+ *  
+ * Returns: TRUE if it's a local folder, FALSE otherwise
+ */
+gboolean modest_tny_folder_is_local_folder   (const TnyFolder *folder);
+
+/**
+ * modest_tny_folder_get_local_folder_type:
+ * @folder: a valid tnymail folder
+ * 
+ * checks if the folder is part of the "local folders" pseudo-account
+ *  
+ * Returns: TRUE if it's a local folder, FALSE otherwise
+ */
+TnyFolderType modest_tny_folder_get_local_folder_type  (const TnyFolder *folder);
+
+
+
 /**
  * modest_tny_folder_get_rules:
  * @folder: a valid tnymail folder
@@ -82,6 +106,11 @@ TnyFolderType  modest_tny_folder_guess_folder_type_from_name   (const gchar *fol
  */
 ModestTnyFolderRules  modest_tny_folder_get_rules   (const TnyFolder *folder);
 
+
+
+
+
+
 G_END_DECLS
 
 #endif /* __MODEST_TNY_FOLDER_H__*/
index 3a36c89..bc31d32 100644 (file)
@@ -36,6 +36,7 @@
 #include <tny-account-store.h>
 #include <tny-account.h>
 #include <tny-folder.h>
+#include <tny-camel-folder.h>
 #include <modest-tny-folder.h>
 #include <modest-marshal.h>
 #include <modest-icon-names.h>
@@ -145,6 +146,7 @@ modest_folder_view_class_init (ModestFolderViewClass *klass)
 }
 
 
+
 static void
 text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                 GtkTreeModel *tree_model,  GtkTreeIter *iter,  gpointer data)
@@ -153,6 +155,7 @@ text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
        gchar *fname;
        gint unread;
        TnyFolderType type;
+       TnyFolder *folder;
        
        g_return_if_fail (column);
        g_return_if_fail (tree_model);
@@ -161,12 +164,29 @@ text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                            TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, &fname,
                            TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, &unread,
                            TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type,
+                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder,
                            -1);
        rendobj = G_OBJECT(renderer);
 
        if (!fname)
                return;
-
+       
+       if (folder && type != TNY_FOLDER_TYPE_ROOT) { /* FIXME: tnymail bug? crashes with root folders */
+               if (modest_tny_folder_is_local_folder (folder)) {
+                       TnyFolderType type;
+                       type = modest_tny_folder_get_local_folder_type (folder);
+                       if (type != TNY_FOLDER_TYPE_UNKNOWN) {
+                               g_free (fname);
+                               fname = g_strdup(modest_local_folder_info_get_type_display_name (type));
+                       }
+               }
+       } else if (folder && type == TNY_FOLDER_TYPE_ROOT) {
+               if (strcmp (fname, MODEST_LOCAL_FOLDERS_ACCOUNT_NAME) == 0) {/* FIXME: hack */
+                       g_free (fname);
+                       fname = g_strdup (MODEST_LOCAL_FOLDERS_DISPLAY_NAME);
+               }
+       }
+                       
        if (unread > 0) {
                gchar *folder_title = g_strdup_printf ("%s (%d)", fname, unread);
                g_object_set (rendobj,"text", folder_title,  "weight", 800, NULL);
@@ -586,7 +606,6 @@ modest_folder_view_get_selected (ModestFolderView *self)
        return priv->cur_folder;
 }
 
-       
 static gint
 cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
          gpointer user_data)