From da78260d1ea50e18f9a307b2deb1a0adec2fc2c8 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Thu, 25 Jan 2007 09:17:10 +0000 Subject: [PATCH] * modest-tny-folder.[ch]: - 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 | 2 ++ src/modest-init.c | 11 +++++----- src/modest-local-folder-info.c | 45 ++++++++++++++++++++++---------------- src/modest-local-folder-info.h | 19 ++++------------ src/modest-tny-folder.c | 45 +++++++++++++++++++++++++++++++++++++- src/modest-tny-folder.h | 29 ++++++++++++++++++++++++ src/widgets/modest-folder-view.c | 23 +++++++++++++++++-- 7 files changed, 131 insertions(+), 43 deletions(-) diff --git a/src/modest-defs.h b/src/modest-defs.h index 2aa0e99..4160c83 100644 --- a/src/modest-defs.h +++ b/src/modest-defs.h @@ -31,6 +31,7 @@ #ifndef __MODEST_DEFS_H__ #define __MODEST_DEFS_H__ +#include /* 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" diff --git a/src/modest-init.c b/src/modest-init.c index 887f551..a9568d5 100644 --- a/src/modest-init.c +++ b/src/modest-init.c @@ -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) { diff --git a/src/modest-local-folder-info.c b/src/modest-local-folder-info.c index 2c1ca5e..25c02b7 100644 --- a/src/modest-local-folder-info.c +++ b/src/modest-local-folder-info.c @@ -32,41 +32,48 @@ #include 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, "", N_("")}, + { TNY_FOLDER_TYPE_NORMAL, "", N_("")}, + { 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, "", N_("")}, + { 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) diff --git a/src/modest-local-folder-info.h b/src/modest-local-folder-info.h index 42fe037..13b3a33 100644 --- a/src/modest-local-folder-info.h +++ b/src/modest-local-folder-info.h @@ -34,18 +34,7 @@ G_BEGIN_DECLS #include #include - -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 /** * 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); /** diff --git a/src/modest-tny-folder.c b/src/modest-tny-folder.c index b527cd0..720e659 100644 --- a/src/modest-tny-folder.c +++ b/src/modest-tny-folder.c @@ -31,7 +31,8 @@ #include #include #include - +#include +#include 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); +} diff --git a/src/modest-tny-folder.h b/src/modest-tny-folder.h index 51a04db..c26922d 100644 --- a/src/modest-tny-folder.h +++ b/src/modest-tny-folder.h @@ -35,6 +35,7 @@ #define __MODEST_TNY_FOLDER_H__ #include +#include 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__*/ diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 3a36c89..bc31d32 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -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) -- 1.7.9.5