X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-runtime.c;h=2097db50c4e6cc8c8201c95287b2d894aa66f439;hp=f67db370cbddb141e31c2dc500c37089875e7dd3;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hpb=98bc76b00da273d0253f82b32ba4384e6b9dd957 diff --git a/src/modest-runtime.c b/src/modest-runtime.c index f67db37..2097db5 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -45,8 +45,17 @@ #include #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 +75,7 @@ modest_runtime_init (void) g_printerr ("modest: failed to create singletons\n"); return FALSE; } - + return TRUE; } @@ -77,10 +86,34 @@ modest_runtime_uninit (void) return TRUE; /* uninit maybe called if runtime_init failed */ g_return_val_if_fail (MODEST_IS_SINGLETONS(_singletons), FALSE); - g_object_unref(G_OBJECT(_singletons)); - modest_runtime_verify_object_death(_singletons,""); + + g_debug ("%s: cleaning up", __FUNCTION__); + + if (_sig_handlers) { + modest_signal_mgr_disconnect_all_and_destroy (_sig_handlers); + _sig_handlers = NULL; + } + + g_debug ("%s: cleaned up signal manager", __FUNCTION__); + + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(_singletons,""); + g_object_unref(_singletons); _singletons = NULL; - + + g_debug ("%s: cleaned up singletons", __FUNCTION__); + + if (_account_store) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(_account_store,""); + g_object_unref(_account_store); + _account_store = NULL; + } + + g_debug ("%s: cleaned up the account store", __FUNCTION__); + + + g_debug ("%s: all cleaned up", __FUNCTION__); + + return TRUE; } /*-----------------------------------------------------------------------------*/ @@ -93,12 +126,35 @@ modest_runtime_get_account_mgr (void) return modest_singletons_get_account_mgr (_singletons); } -ModestTnyAccountStore* -modest_runtime_get_account_store (void) +TnyStreamCache* +modest_runtime_get_images_cache (void) { g_return_val_if_fail (_singletons, NULL); - return modest_singletons_get_account_store (_singletons); + return modest_singletons_get_images_cache (_singletons); +} +ModestEmailClipboard* +modest_runtime_get_email_clipboard (void) +{ + g_return_val_if_fail (_singletons, NULL); + 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* @@ -142,11 +198,12 @@ modest_runtime_get_platform_factory (void) } ModestTnySendQueue* -modest_runtime_get_send_queue (TnyTransportAccount *account) +modest_runtime_get_send_queue (TnyTransportAccount *account, + gboolean create) { ModestCacheMgr *cache_mgr; GHashTable *send_queue_cache; - gpointer orig_key, send_queue; + gpointer orig_key = NULL, send_queue = NULL; g_return_val_if_fail (_singletons, NULL); g_return_val_if_fail (TNY_IS_TRANSPORT_ACCOUNT(account), NULL); @@ -155,12 +212,63 @@ modest_runtime_get_send_queue (TnyTransportAccount *account) send_queue_cache = modest_cache_mgr_get_cache (cache_mgr, MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); - if (!g_hash_table_lookup_extended (send_queue_cache, account, &orig_key, &send_queue)) { - send_queue = (gpointer)modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(account)); - g_hash_table_insert (send_queue_cache, account, send_queue); + /* Each modest account has its own send queue. + * Note that each modest account will have its own outbox folder, + * returned by TnySendQueue::get_outbox_func(). + */ + if (!g_hash_table_lookup_extended (send_queue_cache, account, &orig_key, &send_queue) && + create) { + /* Note that this send queue will start sending messages from its outbox + * as soon as it is instantiated: */ + send_queue = modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(account)); + + if (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), + send_queue); + } } - return MODEST_TNY_SEND_QUEUE(send_queue); + return (send_queue) ? MODEST_TNY_SEND_QUEUE(send_queue) : NULL; +} + +void modest_runtime_remove_all_send_queues () +{ + ModestCacheMgr *cache_mgr = modest_singletons_get_cache_mgr (_singletons); + + modest_cache_mgr_flush (cache_mgr, MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); +} + +void +modest_runtime_remove_send_queue (TnyTransportAccount *account) +{ + + ModestCacheMgr *cache_mgr; + GHashTable *send_queue_cache; + + g_return_if_fail (TNY_IS_TRANSPORT_ACCOUNT (account)); + g_return_if_fail (_singletons); + + cache_mgr = modest_singletons_get_cache_mgr (_singletons); + send_queue_cache = modest_cache_mgr_get_cache (cache_mgr, + MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); + + if (g_hash_table_lookup (send_queue_cache, account)) + g_hash_table_remove (send_queue_cache, account); } ModestWindowMgr * @@ -170,6 +278,20 @@ modest_runtime_get_window_mgr (void) return modest_singletons_get_window_mgr (_singletons); } +ModestPluginFactory * +modest_runtime_get_plugin_factory (void) +{ + g_return_val_if_fail (_singletons, NULL); + return modest_singletons_get_plugin_factory (_singletons); +} + +ModestProtocolRegistry * +modest_runtime_get_protocol_registry (void) +{ + g_return_val_if_fail (_singletons, NULL); + return modest_singletons_get_protocol_registry (_singletons); +} + /* http://primates.ximian.com/~federico/news-2006-04.html#memory-debugging-infrastructure*/ ModestRuntimeDebugFlags modest_runtime_get_debug_flags () @@ -177,9 +299,10 @@ modest_runtime_get_debug_flags () static const GDebugKey debug_keys[] = { { "abort-on-warning", MODEST_RUNTIME_DEBUG_ABORT_ON_WARNING }, { "log-actions", MODEST_RUNTIME_DEBUG_LOG_ACTIONS }, - { "debug-objects", MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS }, - { "debug-signals", MODEST_RUNTIME_DEBUG_DEBUG_SIGNALS }, - { "factory-settings", MODEST_RUNTIME_DEBUG_FACTORY_SETTINGS} + { "debug-objects", MODEST_RUNTIME_DEBUG_OBJECTS }, + { "debug-signals", MODEST_RUNTIME_DEBUG_SIGNALS }, + { "factory-settings", MODEST_RUNTIME_DEBUG_FACTORY_SETTINGS}, + { "debug-code", MODEST_RUNTIME_DEBUG_CODE} }; const gchar *str; static ModestRuntimeDebugFlags debug_flags = -1;