X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-account.c;h=0b2a71d73fb7fa89409babe7176634748f781b9c;hb=147ce908f5f1720d2a589e81bb1bf2163f460cb9;hp=fc30538521c742162c351893e6a5413489b06f1f;hpb=8cb5d470d68036f3fc73156897144bafb83c78ef;p=modest diff --git a/src/modest-tny-account.c b/src/modest-tny-account.c index fc30538..0b2a71d 100644 --- a/src/modest-tny-account.c +++ b/src/modest-tny-account.c @@ -37,6 +37,7 @@ #include #include #include +#include /* for now, ignore the account ===> the special folders are the same, * local folders for all accounts @@ -81,6 +82,7 @@ modest_tny_account_get_special_folder (TnyAccount *account, } g_object_unref (G_OBJECT (folders)); g_object_unref (G_OBJECT (iter)); + g_object_unref (G_OBJECT (local_account)); return special_folder; } @@ -220,6 +222,9 @@ modest_tny_account_new_from_account (ModestAccountMgr *account_mgr, const gchar if (account_data->display_name) tny_account_set_name (tny_account, account_data->display_name); + g_object_set_data_full (G_OBJECT(tny_account), "modest_account", + (gpointer*) g_strdup (account_name), g_free); + modest_account_mgr_free_account_data (account_mgr, account_data); return tny_account; } @@ -244,14 +249,20 @@ modest_tny_account_new_for_local_folders (ModestAccountMgr *account_mgr, TnySess maildir = modest_local_folder_info_get_maildir_path (); url = camel_url_new ("maildir:", NULL); camel_url_set_path (url, maildir); + /* Needed by tinymail's DBC assertions */ + camel_url_set_host (url, "localhost"); url_string = camel_url_to_string (url, 0); tny_account_set_url_string (TNY_ACCOUNT(tny_account), url_string); - tny_account_set_name (TNY_ACCOUNT(tny_account), MODEST_LOCAL_FOLDERS_ACCOUNT_NAME); + + tny_account_set_name (TNY_ACCOUNT(tny_account), MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME); tny_account_set_id (TNY_ACCOUNT(tny_account), MODEST_LOCAL_FOLDERS_ACCOUNT_ID); tny_account_set_forget_pass_func (TNY_ACCOUNT(tny_account), forget_pass_dummy); tny_account_set_pass_func (TNY_ACCOUNT(tny_account), get_pass_dummy); - + + g_object_set_data (G_OBJECT(tny_account), "modest_account", + (gpointer*)MODEST_LOCAL_FOLDERS_ACCOUNT_ID); + camel_url_free (url); g_free (maildir); g_free (url_string); @@ -259,4 +270,92 @@ modest_tny_account_new_for_local_folders (ModestAccountMgr *account_mgr, TnySess return TNY_ACCOUNT(tny_account); } +typedef gint (*TnyStatsFunc) (TnyFolderStats *stats); + +typedef struct _RecurseFoldersHelper { + TnyStatsFunc function; + guint sum; +} RecurseFoldersHelper; + +static void +recurse_folders (TnyFolderStore *store, + TnyFolderStoreQuery *query, + RecurseFoldersHelper *helper) +{ + TnyIterator *iter; + TnyList *folders = tny_simple_list_new (); + + tny_folder_store_get_folders (store, folders, query, NULL); + iter = tny_list_create_iterator (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); + + helper->sum += helper->function (stats); + + recurse_folders (TNY_FOLDER_STORE (folder), query, helper); + + g_object_unref (folder); + g_object_unref (stats); + tny_iterator_next (iter); + } + g_object_unref (G_OBJECT (iter)); + g_object_unref (G_OBJECT (folders)); +} + +gint +modest_tny_account_get_folder_count (TnyAccount *self) +{ + g_return_val_if_fail (TNY_IS_ACCOUNT (self), -1); + + return 8; +} + +gint +modest_tny_account_get_message_count (TnyAccount *self) +{ + RecurseFoldersHelper *helper; + gint retval; + + g_return_val_if_fail (TNY_IS_ACCOUNT (self), -1); + + /* Create helper */ + helper = g_malloc0 (sizeof (RecurseFoldersHelper)); + helper->function = (TnyStatsFunc) tny_folder_stats_get_all_count; + helper->sum = 0; + + recurse_folders (TNY_FOLDER_STORE (self), NULL, helper); + + retval = helper->sum; + + g_free (helper); + return retval; +} + +gint +modest_tny_account_get_local_size (TnyAccount *self) +{ + RecurseFoldersHelper *helper; + gint retval; + + g_return_val_if_fail (TNY_IS_ACCOUNT (self), -1); + + /* Create helper */ + helper = g_malloc0 (sizeof (RecurseFoldersHelper)); + helper->function = (TnyStatsFunc) tny_folder_stats_get_local_size; + helper->sum = 0; + + recurse_folders (TNY_FOLDER_STORE (self), NULL, helper); + + retval = helper->sum; + + g_free (helper); + + return retval; +}