aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-12-30 23:47:39 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:41 +0100
commitba5321adf153bed36a3328b6178e3746c17140ce (patch)
tree55148458d97f5ff7752eb98ad8ba56140f05c0ea /src/mm-iface-modem.c
parent7d2626ea4495ffaac5a180ae167fe264b355c990 (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.c69
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);