X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-singletons.c;h=76f6ec19e6fa0341a6b2cbb180adcfbe786052b1;hp=401e6a69d1d42990493ec2e9aa7d8453211d5e99;hb=9f073d6025a94379ba9e17f3a5eff44bed3b9925;hpb=31bb0518a45f4ca59a30a650475d3a3f9ff87610 diff --git a/src/modest-singletons.c b/src/modest-singletons.c index 401e6a6..76f6ec1 100644 --- a/src/modest-singletons.c +++ b/src/modest-singletons.c @@ -28,6 +28,15 @@ */ #include "modest-singletons.h" +#include "modest-runtime.h" +#include "modest-defs.h" +#include "modest-debug.h" +#ifdef MODEST_TOOLKIT_HILDON2 +#include "hildon2/modest-hildon2-window-mgr.h" +#else +#include "widgets/modest-hildon1-window-mgr.h" +#endif +#include /* 'private'/'protected' functions */ static void modest_singletons_class_init (ModestSingletonsClass *klass); @@ -38,10 +47,15 @@ typedef struct _ModestSingletonsPrivate ModestSingletonsPrivate; struct _ModestSingletonsPrivate { ModestConf *conf; ModestAccountMgr *account_mgr; - ModestTnyAccountStore *account_store; + ModestEmailClipboard *email_clipboard; ModestCacheMgr *cache_mgr; ModestMailOperationQueue *mail_op_queue; - ModestWidgetFactory *widget_factory; + TnyPlatformFactory *platform_fact; + TnyDevice *device; + ModestWindowMgr *window_mgr; + ModestProtocolRegistry *protocol_registry; + ModestPluginFactory *plugin_factory; + TnyStreamCache *images_cache; }; #define MODEST_SINGLETONS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_SINGLETONS, \ @@ -89,14 +103,27 @@ static void modest_singletons_init (ModestSingletons *obj) { ModestSingletonsPrivate *priv; + gchar *images_cache_path; priv = MODEST_SINGLETONS_GET_PRIVATE(obj); - priv->conf = NULL; - priv->account_mgr = NULL; - priv->account_store = NULL; - priv->cache_mgr = NULL; - priv->mail_op_queue = NULL; - priv->widget_factory = NULL; + priv->conf = NULL; + priv->account_mgr = NULL; + priv->email_clipboard = NULL; + priv->cache_mgr = NULL; + priv->mail_op_queue = NULL; + priv->platform_fact = NULL; + priv->device = NULL; + priv->window_mgr = NULL; + priv->protocol_registry = NULL; + priv->plugin_factory = NULL; + + priv->protocol_registry = modest_protocol_registry_new (); + if (!priv->protocol_registry) { + g_printerr ("modest:cannot create protocol registry instance\n"); + return; + } + modest_protocol_registry_set_to_default (priv->protocol_registry); + priv->images_cache = NULL; priv->conf = modest_conf_new (); if (!priv->conf) { @@ -110,12 +137,24 @@ modest_singletons_init (ModestSingletons *obj) return; } - priv->account_store = modest_tny_account_store_new (priv->account_mgr); - if (!priv->account_store) { - g_printerr ("modest: cannot create modest tny account store instance\n"); + priv->email_clipboard = modest_email_clipboard_new (); + if (!priv->email_clipboard) { + g_printerr ("modest: cannot create modest email clipboard instance\n"); + return; + } + + priv->platform_fact = modest_tny_platform_factory_get_instance (); + if (!priv->platform_fact) { + g_printerr ("modest: cannot create platform factory instance\n"); return; } + priv->device = tny_platform_factory_new_device (priv->platform_fact); + if (!priv->device) { + g_printerr ("modest: cannot create tny device instance\n"); + return; + } + priv->cache_mgr = modest_cache_mgr_new (); if (!priv->cache_mgr) { g_printerr ("modest: cannot create modest cache mgr instance\n"); @@ -128,39 +167,107 @@ modest_singletons_init (ModestSingletons *obj) return; } - /* don't initialize widget_factory here, but do it lazily, so we can - * instaniatie modest-singletons before gtk_init - */ +#if MODEST_TOOLKIT_HILDON2 + priv->window_mgr = modest_hildon2_window_mgr_new (); +#else + priv->window_mgr = modest_hildon1_window_mgr_new (); +#endif + if (!priv->window_mgr) { + g_printerr ("modest: cannot create modest window manager instance\n"); + return; + } + + priv->plugin_factory = modest_plugin_factory_new (); + if (!priv->plugin_factory) { + g_printerr ("modest: cannot create modest mail plugin factory instance\n"); + return; + } + + images_cache_path = g_build_filename (g_get_home_dir (), MODEST_DIR, MODEST_IMAGES_CACHE_DIR, NULL); + priv->images_cache = tny_fs_stream_cache_new (images_cache_path, MODEST_IMAGES_CACHE_SIZE); + g_free (images_cache_path); + if (!priv->images_cache) { + g_printerr ("modest: cannot create images cache instance\n"); + return; + } + } static void modest_singletons_finalize (GObject *obj) { ModestSingletonsPrivate *priv; + priv = MODEST_SINGLETONS_GET_PRIVATE(obj); - if (priv->conf) { - g_object_unref (G_OBJECT(priv->conf)); - priv->conf = NULL; + if (priv->images_cache) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF (priv->images_cache, ""); + g_object_unref (G_OBJECT (priv->images_cache)); + priv->images_cache = NULL; } - if (priv->account_mgr) { - g_object_unref (G_OBJECT(priv->account_mgr)); - priv->account_mgr = NULL; + if (priv->window_mgr) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->window_mgr,""); + g_object_unref (G_OBJECT(priv->window_mgr)); + priv->window_mgr = NULL; } - if (priv->account_store) { - g_object_unref (G_OBJECT(priv->account_store)); - priv->account_store = NULL; + + if (priv->mail_op_queue) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->mail_op_queue,""); + g_object_unref (G_OBJECT(priv->mail_op_queue)); + priv->mail_op_queue = NULL; } if (priv->cache_mgr) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->cache_mgr,""); g_object_unref (G_OBJECT(priv->cache_mgr)); priv->cache_mgr = NULL; } - if (priv->widget_factory) { - g_object_unref (G_OBJECT(priv->widget_factory)); - priv->widget_factory = NULL; + if (priv->device) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->device,""); + g_object_unref (G_OBJECT(priv->device)); + priv->device = NULL; + } + + if (priv->platform_fact) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->platform_fact,""); + g_object_unref (G_OBJECT(priv->platform_fact)); + priv->platform_fact = NULL; + } + + if (priv->email_clipboard) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->email_clipboard,""); + g_object_unref (G_OBJECT(priv->email_clipboard)); + priv->email_clipboard = NULL; + } + + if (priv->plugin_factory) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->plugin_factory,""); + g_object_unref (G_OBJECT(priv->plugin_factory)); + priv->plugin_factory = NULL; + } + + if (priv->protocol_registry) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->protocol_registry,""); + g_object_unref (G_OBJECT(priv->protocol_registry)); + priv->protocol_registry = NULL; + } + + /* It is important that the account manager is uninitialized after + * the mail op queue is uninitialized because the mail op queue + * cancells any mail operations which in turn access the account + * manager (see modest_mail_operation_notify_end()). */ + if (priv->account_mgr) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->account_mgr,""); + g_object_unref (G_OBJECT(priv->account_mgr)); + priv->account_mgr = NULL; + } + + if (priv->conf) { + MODEST_DEBUG_VERIFY_OBJECT_LAST_REF(priv->conf,""); + g_object_unref (G_OBJECT(priv->conf)); + priv->conf = NULL; } G_OBJECT_CLASS(parent_class)->finalize (obj); @@ -171,18 +278,28 @@ modest_singletons_new (void) { ModestSingletonsPrivate *priv; ModestSingletons *self; + static gboolean invoked = FALSE; + + if (invoked) { + g_printerr ("%s: modest: modest_singletons_new may only be called once, aborting...\n", + __FUNCTION__); + abort(); + return NULL; + } self = MODEST_SINGLETONS(g_object_new(MODEST_TYPE_SINGLETONS, NULL)); priv = MODEST_SINGLETONS_GET_PRIVATE(self); - + /* widget_factory will still be NULL, as it is initialized lazily */ - if (!(priv->conf && priv->account_mgr && priv->account_store && - priv->cache_mgr && priv->mail_op_queue)) { - g_printerr ("modest: failed to create singletons instance\n"); + if (!(priv->conf && priv->account_mgr && priv->email_clipboard && + priv->cache_mgr && priv->mail_op_queue && priv->device && + priv->platform_fact && priv->plugin_factory)) { + g_printerr ("modest: failed to create singletons object\n"); g_object_unref (G_OBJECT(self)); self = NULL; } - + + invoked = TRUE; return self; } @@ -201,11 +318,11 @@ modest_singletons_get_account_mgr (ModestSingletons *self) return MODEST_SINGLETONS_GET_PRIVATE(self)->account_mgr; } -ModestTnyAccountStore* -modest_singletons_get_account_store (ModestSingletons *self) +ModestEmailClipboard* +modest_singletons_get_email_clipboard (ModestSingletons *self) { g_return_val_if_fail (self, NULL); - return MODEST_SINGLETONS_GET_PRIVATE(self)->account_store; + return MODEST_SINGLETONS_GET_PRIVATE(self)->email_clipboard; } ModestCacheMgr* @@ -215,7 +332,6 @@ modest_singletons_get_cache_mgr (ModestSingletons *self) return MODEST_SINGLETONS_GET_PRIVATE(self)->cache_mgr; } - ModestMailOperationQueue* modest_singletons_get_mail_operation_queue (ModestSingletons *self) { @@ -223,21 +339,46 @@ modest_singletons_get_mail_operation_queue (ModestSingletons *self) return MODEST_SINGLETONS_GET_PRIVATE(self)->mail_op_queue; } +TnyDevice* +modest_singletons_get_device (ModestSingletons *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_SINGLETONS_GET_PRIVATE(self)->device; +} + -ModestWidgetFactory* -modest_singletons_get_widget_factory (ModestSingletons *self) +TnyPlatformFactory* +modest_singletons_get_platform_factory (ModestSingletons *self) { - ModestSingletonsPrivate *priv; + g_return_val_if_fail (self, NULL); + return MODEST_SINGLETONS_GET_PRIVATE(self)->platform_fact; +} +ModestWindowMgr* +modest_singletons_get_window_mgr (ModestSingletons *self) +{ g_return_val_if_fail (self, NULL); + return MODEST_SINGLETONS_GET_PRIVATE(self)->window_mgr; +} - priv = MODEST_SINGLETONS_GET_PRIVATE(self); +ModestProtocolRegistry* +modest_singletons_get_protocol_registry (ModestSingletons *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_SINGLETONS_GET_PRIVATE(self)->protocol_registry; +} - if (G_UNLIKELY(!priv->widget_factory)) - priv->widget_factory = modest_widget_factory_new (priv->account_store); - if (G_UNLIKELY(!priv->widget_factory)) { - g_printerr ("modest: cannot create modest widget factory instance\n"); - return NULL; - } - return priv->widget_factory; +TnyStreamCache* +modest_singletons_get_images_cache (ModestSingletons *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_SINGLETONS_GET_PRIVATE(self)->images_cache; +} + +ModestPluginFactory * +modest_singletons_get_plugin_factory (ModestSingletons *self) +{ + g_return_val_if_fail (self, NULL); + + return MODEST_SINGLETONS_GET_PRIVATE (self)->plugin_factory; }