X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-account.c;h=eee8fa1d89dd0ee92e8265d1444e56b826b2986c;hb=28f2206c21738a94d6a41de73abba693c7ff323d;hp=e63412009bc2f9769c388e148572d3f0f8f0e4a3;hpb=1ea9223c1a5f1025edf89944b9da1839cc3bfaa4;p=modest diff --git a/src/modest-tny-account.c b/src/modest-tny-account.c index e634120..eee8fa1 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 @@ -249,7 +250,7 @@ modest_tny_account_new_for_local_folders (ModestAccountMgr *account_mgr, TnySess url = camel_url_new ("maildir:", NULL); camel_url_set_path (url, maildir); /* Needed by tinymail's DBC assertions */ - camel_url_set_host (url, "localhost"); + 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); @@ -269,3 +270,111 @@ 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; + guint folders; +} 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); + + 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 (helper->function) + 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) +{ + RecurseFoldersHelper *helper; + gint retval; + + g_return_val_if_fail (TNY_IS_ACCOUNT (self), -1); + + /* Create helper */ + helper = g_malloc0 (sizeof (RecurseFoldersHelper)); + helper->function = NULL; + helper->sum = 0; + helper->folders = 0; + + recurse_folders (TNY_FOLDER_STORE (self), NULL, helper); + + retval = helper->folders; + + g_free (helper); + + return retval; +} + +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; +}