diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-12-30 23:47:39 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:41 +0100 |
commit | ba5321adf153bed36a3328b6178e3746c17140ce (patch) | |
tree | 55148458d97f5ff7752eb98ad8ba56140f05c0ea /src/mm-iface-modem.c | |
parent | 7d2626ea4495ffaac5a180ae167fe264b355c990 (diff) |
iface-modem: let different SIM object creation implementations
We let objects implementing the Modem interface to provide their own SIM
creation method. This allows plugins to subclass MMSim themselves.
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r-- | src/mm-iface-modem.c | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index cd9f4fe7..97c50c24 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -2426,22 +2426,25 @@ sim_new_ready (GAsyncInitable *initable, MMSim *sim; GError *error = NULL; - sim = mm_sim_new_finish (initable, res, &error); + sim = MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim_finish (ctx->self, res, &error); if (!sim) { + /* FATAL */ mm_warn ("couldn't create SIM: '%s'", error ? error->message : "Unknown error"); - g_clear_error (&error); - } else { - g_object_bind_property (sim, MM_SIM_PATH, - ctx->skeleton, "sim", - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); - - g_object_set (ctx->self, - MM_IFACE_MODEM_SIM, sim, - NULL); - g_object_unref (sim); + g_simple_async_result_take_error (ctx->result, error); + initialization_context_complete_and_free (ctx); + return; } + g_object_bind_property (sim, MM_SIM_PATH, + ctx->skeleton, "sim", + G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); + + g_object_set (ctx->self, + MM_IFACE_MODEM_SIM, sim, + NULL); + g_object_unref (sim); + /* Go on to next step */ ctx->step++; interface_initialization_step (ctx); @@ -2685,30 +2688,34 @@ interface_initialization_step (InitializationContext *ctx) /* Fall down to next step */ ctx->step++; - case INITIALIZATION_STEP_SIM: { - MMSim *sim = NULL; + case INITIALIZATION_STEP_SIM: + /* If the modem doesn't need any SIM, skip */ + if (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim && + MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim_finish) { + MMSim *sim = NULL; - g_object_get (ctx->self, - MM_IFACE_MODEM_SIM, &sim, - NULL); - if (!sim) { - mm_sim_new (MM_BASE_MODEM (ctx->self), - NULL, /* TODO: cancellable */ - (GAsyncReadyCallback)sim_new_ready, - ctx); + g_object_get (ctx->self, + MM_IFACE_MODEM_SIM, &sim, + NULL); + if (!sim) { + MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim ( + MM_IFACE_MODEM (ctx->self), + (GAsyncReadyCallback)sim_new_ready, + ctx); + return; + } + + /* If already available the sim object, relaunch initialization. + * This will try to load any missing property value that couldn't be + * retrieved before due to having the SIM locked. */ + mm_sim_initialize (sim, + NULL, /* TODO: cancellable */ + (GAsyncReadyCallback)sim_reinit_ready, + ctx); + g_object_unref (sim); return; } - /* If already available the sim object, relaunch initialization. - * This will try to load any missing property value that couldn't be - * retrieved before due to having the SIM locked. */ - mm_sim_initialize (sim, - NULL, /* TODO: cancellable */ - (GAsyncReadyCallback)sim_reinit_ready, - ctx); - return; - } - case INITIALIZATION_STEP_SUPPORTED_MODES: g_assert (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_modes != NULL); g_assert (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_modes_finish != NULL); |