X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-runtime.c;h=66e34b2784c23262ba386e67dfd1c691bbb5ebcb;hb=fc4669939cc36749330dbb20b5b7d7fc720cd113;hp=24fe87bfcb3de5b3fffced9e7b253b761c16921b;hpb=11a7e8bd60ce134adc068ecedefd64faa1dd7ddf;p=modest diff --git a/src/modest-runtime.c b/src/modest-runtime.c index 24fe87b..66e34b2 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -45,8 +45,16 @@ #include #include #include +#include -static ModestSingletons *_singletons = NULL; +static ModestSingletons *_singletons = NULL; + +// we get the account store here instead of in Singletons +// as it leads to various chicken & problems with initialization +static ModestTnyAccountStore *_account_store = NULL; + +/* Signal handlers for the send queues */ +static GSList *_sig_handlers = NULL; /* * private functions declared in modest-runtime-priv.h - @@ -66,7 +74,7 @@ modest_runtime_init (void) g_printerr ("modest: failed to create singletons\n"); return FALSE; } - + return TRUE; } @@ -80,7 +88,19 @@ modest_runtime_uninit (void) modest_runtime_verify_object_last_ref(_singletons,""); g_object_unref(G_OBJECT(_singletons)); _singletons = NULL; - + + if (_account_store) { + modest_runtime_verify_object_last_ref(_account_store,""); + g_object_unref(G_OBJECT(_account_store)); + _account_store = NULL; + } + + + if (_sig_handlers) { + modest_signal_mgr_disconnect_all_and_destroy (_sig_handlers); + _sig_handlers = NULL; + } + return TRUE; } /*-----------------------------------------------------------------------------*/ @@ -93,12 +113,28 @@ modest_runtime_get_account_mgr (void) return modest_singletons_get_account_mgr (_singletons); } -ModestTnyAccountStore* -modest_runtime_get_account_store (void) +ModestEmailClipboard* +modest_runtime_get_email_clipboard (void) { g_return_val_if_fail (_singletons, NULL); - return modest_singletons_get_account_store (_singletons); + return modest_singletons_get_email_clipboard (_singletons); +} +ModestTnyAccountStore* +modest_runtime_get_account_store (void) +{ + // we get the account store here instead of in Singletons + // as it leads to various chicken & problems with initialization + g_return_val_if_fail (_singletons, NULL); + if (!_account_store) { + _account_store = modest_tny_account_store_new (modest_runtime_get_account_mgr(), + modest_runtime_get_device()); + if (!_account_store) { + g_printerr ("modest: cannot create modest tny account store instance\n"); + return NULL; + } + } + return _account_store; } ModestConf* @@ -144,7 +180,6 @@ modest_runtime_get_platform_factory (void) ModestTnySendQueue* modest_runtime_get_send_queue (TnyTransportAccount *account) { - /* printf ("DEBUG: %s: transport account id=%s\n", __FUNCTION__, tny_account_get_id (TNY_ACCOUNT(account))); */ ModestCacheMgr *cache_mgr; GHashTable *send_queue_cache; gpointer orig_key, send_queue; @@ -165,8 +200,24 @@ modest_runtime_get_send_queue (TnyTransportAccount *account) * as soon as it is instantiated: */ send_queue = (gpointer)modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(account)); - g_hash_table_insert (send_queue_cache, account, send_queue); - g_object_ref (send_queue); + _sig_handlers = + modest_signal_mgr_connect (_sig_handlers, + send_queue, + "error_happened", + G_CALLBACK (modest_ui_actions_on_send_queue_error_happened), + NULL); + + _sig_handlers = + modest_signal_mgr_connect (_sig_handlers, + send_queue, + "status_changed", + G_CALLBACK (modest_ui_actions_on_send_queue_status_changed), + NULL); + + + g_hash_table_insert (send_queue_cache, + g_object_ref (account), + g_object_ref (send_queue)); } return MODEST_TNY_SEND_QUEUE(send_queue);