* modest-header-view.[ch]:
[modest] / src / widgets / modest-folder-view.c
index b636eec..e16aba7 100644 (file)
@@ -36,6 +36,7 @@
 #include <tny-account-store.h>
 #include <tny-account.h>
 #include <tny-folder.h>
+#include <modest-tny-folder.h>
 #include <modest-marshal.h>
 #include <modest-icon-names.h>
 #include <modest-icon-factory.h>
@@ -58,7 +59,6 @@ static void         on_subscription_changed  (TnyStoreAccount *store_account, Tn
 
 static gboolean     modest_folder_view_update_model     (ModestFolderView *self,
                                                         TnyAccountStore *account_store);
-static const gchar *get_account_name_from_folder        (GtkTreeModel *model, GtkTreeIter iter);
 
 static void         modest_folder_view_disconnect_store_account_handlers (GtkTreeView *self);
 
@@ -141,7 +141,6 @@ modest_folder_view_class_init (ModestFolderViewClass *klass)
 }
 
 
-
 static void
 text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                 GtkTreeModel *tree_model,  GtkTreeIter *iter,  gpointer data)
@@ -168,69 +167,6 @@ text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
 }
 
 
-/* guess the folder type based on the name, or -1 in case of error */
-static TnyFolderType
-guess_type_from_name (const gchar* name)
-{
-       gint  type;
-       gchar *folder;
-       
-       if (!name)
-               return -1;
-       
-       type = TNY_FOLDER_TYPE_NORMAL;
-       folder = g_utf8_strdown (name, strlen(name));
-
-       if (strcmp (folder, "inbox") == 0 ||
-           strcmp (folder, _("inbox")) == 0)
-               type = TNY_FOLDER_TYPE_INBOX;
-       else if (strcmp (folder, "outbox") == 0 ||
-                strcmp (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_JUNK;
-       else if (g_str_has_prefix(folder, "sent") ||
-                g_str_has_prefix(folder, _("sent")))
-               type = TNY_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_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;
-       
-       g_free (folder);
-       return type;
-}
-
-
-
-TnyFolderType
-modest_folder_view_guess_folder_type (TnyFolder *folder)
-{
-       TnyFolderType type;
-
-       g_return_val_if_fail (folder, -1);
-
-       type = tny_folder_get_folder_type (folder);
-       if (type == TNY_FOLDER_TYPE_NORMAL)
-               type = guess_type_from_name (tny_folder_get_name (folder));
-
-       return type;
-}
-
 
 static void
 icon_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
@@ -249,11 +185,9 @@ icon_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                            TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, &unread, -1);
        rendobj = G_OBJECT(renderer);
        
-       if (type == TNY_FOLDER_TYPE_NORMAL)
-               type = guess_type_from_name (fname);
-       
-       if (fname)
-               g_free (fname);
+       if (type == TNY_FOLDER_TYPE_NORMAL || type == TNY_FOLDER_TYPE_UNKNOWN)
+               type = modest_tny_folder_guess_folder_type_from_name (fname);
+       g_free (fname);
 
        switch (type) {
        case TNY_FOLDER_TYPE_ROOT:
@@ -357,11 +291,12 @@ modest_folder_view_disconnect_store_account_handlers (GtkTreeView *self)
 
        priv =  MODEST_FOLDER_VIEW_GET_PRIVATE (self);  
        iter = tny_list_create_iterator (TNY_LIST (model));
-       do {
+       while (!tny_iterator_is_done (iter)) {
                g_signal_handler_disconnect (G_OBJECT (tny_iterator_get_current (iter)),
                                             priv->store_accounts_handlers [i++]);
                tny_iterator_next (iter);
-       } while (!tny_iterator_is_done (iter));
+       }
+       g_object_unref (G_OBJECT (iter));
 }
 
 
@@ -462,26 +397,11 @@ modest_folder_view_new (ModestTnyAccountStore *account_store,
        sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(self));
        priv->sig2 = g_signal_connect (sel, "changed",
                                       G_CALLBACK(on_selection_changed), self);
-                                       
+
        return GTK_WIDGET(self);
 }
 
 
-const gchar *
-modest_folder_view_get_selected_account (ModestFolderView *self)
-{
-       GtkTreeModel *model;
-       GtkTreeIter iter;
-       ModestFolderViewPrivate *priv;
-       
-       g_return_val_if_fail (self, NULL);
-       priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self);
-
-       gtk_tree_selection_get_selected (priv->cur_selection, &model, &iter);
-
-       return get_account_name_from_folder (model, iter);
-}
-
 static gboolean
 update_model_empty (ModestFolderView *self)
 {
@@ -520,24 +440,24 @@ update_model_empty (ModestFolderView *self)
 static void
 update_store_account_handlers (ModestFolderView *self, TnyList *account_list)
 {
-       gint size;
        ModestFolderViewPrivate *priv;
        TnyIterator *iter;
+       guint len;
        
        priv =  MODEST_FOLDER_VIEW_GET_PRIVATE(self);
 
        /* Listen to subscription changes */
-       size = tny_list_get_length (TNY_LIST (account_list)) * sizeof (gulong);
+       len = tny_list_get_length (TNY_LIST (account_list));
 
        g_assert (priv->store_accounts_handlers == NULL); /* don't leak */
-       priv->store_accounts_handlers = g_malloc0 (size);
+       priv->store_accounts_handlers = g_malloc0 (sizeof (guint) * len);
        iter = tny_list_create_iterator (account_list);
        
-       if (!tny_iterator_is_done (iter))       
-               priv->view_is_empty = FALSE; 
-       else {
+       if (!tny_iterator_is_done (iter)) {
                gint i = 0;
-               while (!tny_iterator_is_done (iter)) {
+
+               priv->view_is_empty = FALSE;
+               do  {
                        
                        priv->store_accounts_handlers [i++] =
                                g_signal_connect (G_OBJECT (tny_iterator_get_current (iter)),
@@ -545,9 +465,9 @@ update_store_account_handlers (ModestFolderView *self, TnyList *account_list)
                                                  G_CALLBACK (on_subscription_changed),
                                                  self);
                        tny_iterator_next (iter);
-                       }
-       }       
-       g_object_unref (iter);                         
+               } while (!tny_iterator_is_done (iter));
+       }
+       g_object_unref (G_OBJECT (iter));       
 }
 
 
@@ -612,14 +532,14 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
        }
        
        tree_view = MODEST_FOLDER_VIEW (user_data);
-       gtk_tree_model_get (model, &iter, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder, 
+       gtk_tree_model_get (model, &iter,
+                           TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type,
+                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder,
                            -1);
 
        if (type == TNY_FOLDER_TYPE_ROOT)
-               return; 
-       
+               return;
+
        /* emit 2 signals: one for the unselection of the old one,
         * and one for the selection of the new on */
        g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0,
@@ -661,26 +581,3 @@ modest_folder_view_update_model (ModestFolderView *self, TnyAccountStore *accoun
 
        return retval;
 }
-
-
-/* ugly */
-static const gchar *
-get_account_name_from_folder (GtkTreeModel *model, GtkTreeIter iter)
-{
-       GtkTreePath *path;
-       GtkTreeIter new_iter;
-       TnyFolder *account_folder;
-       gint depth, i;
-
-       path = gtk_tree_model_get_path (model, &iter);
-       depth = gtk_tree_path_get_depth (path);
-
-       for (i = 1; i < depth; ++i)
-               gtk_tree_path_up (path);
-
-       gtk_tree_model_get_iter (model, &new_iter, path);
-       gtk_tree_model_get (model, &new_iter, 
-                           TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &account_folder, 
-                           -1);
-       return tny_account_get_name (TNY_ACCOUNT (account_folder));
-}