2007-07-31 Philip Van Hoof <pvanhoof@gnome.org>
[modest] / src / modest-tny-account.c
index ac3c94e..c718034 100644 (file)
@@ -74,21 +74,24 @@ modest_tny_account_get_special_folder (TnyAccount *account,
        if (special_type == TNY_FOLDER_TYPE_OUTBOX) {
                const gchar *modest_account_name = 
                        modest_tny_account_get_parent_modest_account_name_for_server_account (account);
-               g_assert (modest_account_name);
-
-               gchar *account_id = g_strdup_printf (
-                       MODEST_PER_ACCOUNT_LOCAL_OUTBOX_FOLDER_ACCOUNT_ID_PREFIX "%s", 
-                       modest_account_name);
                
-               local_account = modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store(),
-                                                                            MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
-                                                                            account_id);
-               if (!local_account) {
-                       g_printerr ("modest: %s: modest_tny_account_store_get_tny_account_by(ID) returned NULL for %s\n", __FUNCTION__, account_id);
-               return NULL;
+               if (modest_account_name) {
+                       gchar *account_id = g_strdup_printf (
+                               MODEST_PER_ACCOUNT_LOCAL_OUTBOX_FOLDER_ACCOUNT_ID_PREFIX "%s", 
+                               modest_account_name);
+                       
+                       local_account = modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store(),
+                                                                                    MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
+                                                                                    account_id);
+                       if (!local_account) {
+                               g_printerr ("modest: %s: modest_tny_account_store_get_tny_account_by(ID) returned NULL for %s\n", __FUNCTION__, account_id);
+                       return NULL;
+                       }
+               
+                       g_free (account_id);
+               } else {
+                       g_warning ("%s: modest_account_name was NULL.", __FUNCTION__);
                }
-       
-               g_free (account_id);
        } else {
                /* Other local folders are all in one on-disk directory: */
                local_account = modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store(),
@@ -126,12 +129,15 @@ modest_tny_account_get_special_folder (TnyAccount *account,
        while (!tny_iterator_is_done (iter)) {
                TnyFolder *folder =
                        TNY_FOLDER (tny_iterator_get_current (iter));
-               if (modest_tny_folder_get_local_folder_type (folder) == special_type) {
-                       special_folder = folder;
-                       break;
-               }
+               if (folder) {
+                       if (modest_tny_folder_get_local_or_mmc_folder_type (folder) == special_type) {
+                               special_folder = folder;
+                               break; /* Leaving a ref for the special_folder return value. */
+                       }
                
-               g_object_unref (G_OBJECT(folder));
+                       g_object_unref (G_OBJECT(folder));
+               }
+
                tny_iterator_next (iter);
        }
        
@@ -780,9 +786,12 @@ modest_tny_account_new_for_per_account_local_outbox_folder (ModestAccountMgr *ac
 
 
 typedef gint (*TnyStatsFunc) (TnyFolderStats *stats);
+#define TASK_GET_ALL_COUNT     0
+#define TASK_GET_LOCAL_SIZE    1
+#define TASK_GET_FOLDER_COUNT  2
 
 typedef struct _RecurseFoldersHelper {
-       TnyStatsFunc function;
+       gint task;
        guint sum;
        guint folders;
 } RecurseFoldersHelper;
@@ -801,23 +810,22 @@ recurse_folders (TnyFolderStore *store,
        helper->folders += tny_list_get_length (folders);
 
        while (!tny_iterator_is_done (iter)) {
-               TnyFolderStats *stats;
                TnyFolder *folder;
 
                folder = TNY_FOLDER (tny_iterator_get_current (iter));
-               stats = tny_folder_get_stats (folder);
+               if (folder) {
+                       if (helper->task == TASK_GET_ALL_COUNT)
+                               helper->sum += tny_folder_get_all_count (folder);
 
-               if (stats) {
-                       /* initially, we sometimes get -1 from tinymail; ignore that */
-                       if (helper->function && helper->function (stats) > 0)
-                               helper->sum += helper->function (stats);
+                       if (helper->task == TASK_GET_LOCAL_SIZE)
+                               helper->sum += tny_folder_get_local_size (folder);
 
-                       if (TNY_IS_FOLDER_STORE (folder)) {
+                       if (TNY_IS_FOLDER_STORE (folder))
                                recurse_folders (TNY_FOLDER_STORE (folder), query, helper);
-                       }
-                       g_object_unref (stats);
-               }    
-               g_object_unref (folder);
+
+                       g_object_unref (folder);
+               }
+
                tny_iterator_next (iter);
        }
         g_object_unref (G_OBJECT (iter));
@@ -834,7 +842,7 @@ modest_tny_folder_store_get_folder_count (TnyFolderStore *self)
 
        /* Create helper */
        helper = g_malloc0 (sizeof (RecurseFoldersHelper));
-       helper->function = NULL;
+       helper->task = TASK_GET_FOLDER_COUNT;
        helper->sum = 0;
        helper->folders = 0;
 
@@ -857,7 +865,7 @@ modest_tny_folder_store_get_message_count (TnyFolderStore *self)
        
        /* Create helper */
        helper = g_malloc0 (sizeof (RecurseFoldersHelper));
-       helper->function = (TnyStatsFunc) tny_folder_stats_get_all_count;
+       helper->task = TASK_GET_ALL_COUNT;
        helper->sum = 0;
 
        recurse_folders (self, NULL, helper);
@@ -879,7 +887,7 @@ modest_tny_folder_store_get_local_size (TnyFolderStore *self)
 
        /* Create helper */
        helper = g_malloc0 (sizeof (RecurseFoldersHelper));
-       helper->function = (TnyStatsFunc) tny_folder_stats_get_local_size;
+       helper->task = TASK_GET_LOCAL_SIZE;
        helper->sum = 0;
 
        recurse_folders (self, NULL, helper);
@@ -891,17 +899,43 @@ modest_tny_folder_store_get_local_size (TnyFolderStore *self)
        return retval;
 }
 
-const gchar* modest_tny_account_get_parent_modest_account_name_for_server_account (TnyAccount *self)
+const gchar* 
+modest_tny_account_get_parent_modest_account_name_for_server_account (TnyAccount *self)
 {
        return (const gchar *)g_object_get_data (G_OBJECT (self), "modest_account");
 }
 
-void modest_tny_account_set_parent_modest_account_name_for_server_account (TnyAccount *self, const gchar* parent_modest_acount_name)
+void 
+modest_tny_account_set_parent_modest_account_name_for_server_account (TnyAccount *self, 
+                                                                     const gchar* parent_modest_acount_name)
 {
        g_object_set_data_full (G_OBJECT(self), "modest_account",
                                (gpointer) g_strdup (parent_modest_acount_name), g_free);
 }
 
+gboolean
+modest_tny_account_is_virtual_local_folders (TnyAccount *self)
+{
+       /* We should make this more sophisticated if we ever use ModestTnyLocalFoldersAccount 
+        * for anything else. */
+       return MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (self);
+}
+
+
+gboolean
+modest_tny_account_is_memory_card_account (TnyAccount *self)
+{
+       const gchar* account_id = NULL;
+
+       g_return_val_if_fail (TNY_ACCOUNT (self), FALSE);
 
+       if (!self)
+               return FALSE;
 
+       account_id = tny_account_get_id (self);
 
+       if (!account_id)
+               return FALSE;
+       else    
+               return (strcmp (account_id, MODEST_MMC_ACCOUNT_ID) == 0);
+}