X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-folder-tree-view.c;h=8682daa7561811e92aea260d81a86c2acf57681d;hb=bab05fb4ddefb299db7a8b9d66a87fbeaa9af344;hp=53b2cafc5dc095156f3a4ee60de2d0065d7daed6;hpb=07ae8944e71d98725434b3ddf466bc9b27ca2bbe;p=modest diff --git a/src/modest-tny-folder-tree-view.c b/src/modest-tny-folder-tree-view.c index 53b2caf..8682daa 100644 --- a/src/modest-tny-folder-tree-view.c +++ b/src/modest-tny-folder-tree-view.c @@ -2,6 +2,7 @@ /* insert (c)/licensing information) */ #include +#include #include #include @@ -36,6 +37,7 @@ enum { typedef struct _ModestTnyFolderTreeViewPrivate ModestTnyFolderTreeViewPrivate; struct _ModestTnyFolderTreeViewPrivate { TnyAccountStoreIface *tny_account_store; + TnyMsgFolderIface *cur_folder; gboolean view_is_empty; }; #define MODEST_TNY_FOLDER_TREE_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -78,6 +80,8 @@ modest_tny_folder_tree_view_class_init (ModestTnyFolderTreeViewClass *klass) parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_tny_folder_tree_view_finalize; + + klass->update_model = modest_tny_folder_tree_view_update_model; g_type_class_add_private (gobject_class, sizeof(ModestTnyFolderTreeViewPrivate)); @@ -100,7 +104,6 @@ text_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, { GObject *rendobj; gchar *fname; - gchar *type_name; guint unread; TnyMsgFolderType type; @@ -120,6 +123,51 @@ text_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, g_free (fname); } +/* FIXME: move these to TnyMail */ +enum { + + TNY_MSG_FOLDER_TYPE_NOTES = TNY_MSG_FOLDER_TYPE_SENT + 1, /* urgh */ + TNY_MSG_FOLDER_TYPE_DRAFTS, + TNY_MSG_FOLDER_TYPE_CONTACTS, + TNY_MSG_FOLDER_TYPE_CALENDAR +}; + +static TnyMsgFolderType +guess_folder_type (const gchar* name) +{ + TnyMsgFolderType type; + gchar *folder; + + g_return_val_if_fail (name, TNY_MSG_FOLDER_TYPE_NORMAL); + + type = TNY_MSG_FOLDER_TYPE_NORMAL; + folder = g_utf8_strdown (name, strlen(name)); + + if (strcmp (folder, "inbox") == 0 || strcmp (folder, _("inbox")) == 0) + type = TNY_MSG_FOLDER_TYPE_INBOX; + else if (strcmp (folder, "outbox") == 0 || strcmp (folder, _("outbox")) == 0) + type = TNY_MSG_FOLDER_TYPE_OUTBOX; + else if (g_str_has_prefix(folder, "junk") || g_str_has_prefix(folder, _("junk"))) + type = TNY_MSG_FOLDER_TYPE_JUNK; + else if (g_str_has_prefix(folder, "trash") || g_str_has_prefix(folder, _("trash"))) + type = TNY_MSG_FOLDER_TYPE_JUNK; + else if (g_str_has_prefix(folder, "sent") || g_str_has_prefix(folder, _("sent"))) + type = TNY_MSG_FOLDER_TYPE_SENT; + + /* these are not *really* TNY_ types */ + else if (g_str_has_prefix(folder, "draft") || g_str_has_prefix(folder, _("draft"))) + type = TNY_MSG_FOLDER_TYPE_DRAFTS; + else if (g_str_has_prefix(folder, "notes") || g_str_has_prefix(folder, _("notes"))) + type = TNY_MSG_FOLDER_TYPE_NOTES; + else if (g_str_has_prefix(folder, "contacts") || g_str_has_prefix(folder, _("contacts"))) + type = TNY_MSG_FOLDER_TYPE_CONTACTS; + else if (g_str_has_prefix(folder, "calendar") || g_str_has_prefix(folder, _("calendar"))) + type = TNY_MSG_FOLDER_TYPE_CALENDAR; + + g_free (folder); + return type; +} + static void icon_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, @@ -128,13 +176,21 @@ icon_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GObject *rendobj; GdkPixbuf *pixbuf; TnyMsgFolderType type; - int unread; + gchar *fname = NULL; + gint unread; rendobj = G_OBJECT(renderer); gtk_tree_model_get (tree_model, iter, TNY_ACCOUNT_TREE_MODEL_TYPE_COLUMN, &type, + TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, &fname, TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN, &unread, -1); rendobj = G_OBJECT(renderer); + + if (type == TNY_MSG_FOLDER_TYPE_NORMAL) + type = guess_folder_type (fname); + + if (fname); + g_free (fname); switch (type) { case TNY_MSG_FOLDER_TYPE_INBOX: @@ -149,6 +205,19 @@ icon_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, case TNY_MSG_FOLDER_TYPE_SENT: pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_SENT); break; + case TNY_MSG_FOLDER_TYPE_DRAFTS: + pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_DRAFTS); + break; + case TNY_MSG_FOLDER_TYPE_NOTES: + pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_NOTES); + break; + case TNY_MSG_FOLDER_TYPE_CALENDAR: + pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_CALENDAR); + break; + case TNY_MSG_FOLDER_TYPE_CONTACTS: + pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_CONTACTS); + break; + case TNY_MSG_FOLDER_TYPE_NORMAL: default: pixbuf = modest_icon_factory_get_icon (MODEST_FOLDER_ICON_NORMAL); @@ -176,6 +245,7 @@ modest_tny_folder_tree_view_init (ModestTnyFolderTreeView *obj) priv->view_is_empty = TRUE; priv->tny_account_store = NULL; + priv->cur_folder = NULL; column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, @@ -209,7 +279,6 @@ modest_tny_folder_tree_view_init (ModestTnyFolderTreeView *obj) static void modest_tny_folder_tree_view_finalize (GObject *obj) { - int i; ModestTnyFolderTreeViewPrivate *priv; g_return_if_fail (obj); @@ -296,7 +365,7 @@ update_model_empty (ModestTnyFolderTreeView *self) static gboolean -update_model (ModestTnyFolderTreeView *self,TnyAccountStoreIface *iface) +update_model (ModestTnyFolderTreeView *self, TnyAccountStoreIface *iface) { const GList *accounts; TnyAccountTreeModel *folder_model; @@ -359,15 +428,25 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data) if (priv->view_is_empty) return; + /* folder was _un_selected if true */ if (!gtk_tree_selection_get_selected (sel, &model, &iter)) - return; /* folder was _un_selected */ + { + if (priv->cur_folder) + tny_msg_folder_iface_expunge (priv->cur_folder); + priv->cur_folder = NULL; + return; + } tree_view = MODEST_TNY_FOLDER_TREE_VIEW (user_data); gtk_tree_model_get (model, &iter, TNY_ACCOUNT_TREE_MODEL_INSTANCE_COLUMN, &folder, -1); - + + if (priv->cur_folder) + tny_msg_folder_iface_expunge (priv->cur_folder); + priv->cur_folder = folder; + /* folder will not be defined if you click eg. on the root node */ if (folder) g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTED_SIGNAL], 0, @@ -375,5 +454,11 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data) } - - +gboolean +modest_tny_folder_tree_view_update_model(ModestTnyFolderTreeView *self, + TnyAccountStoreIface *iface) +{ + g_return_val_if_fail (MODEST_IS_TNY_FOLDER_TREE_VIEW (self), FALSE); + + return update_model (self, iface); +}