summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-05-17 15:20:02 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-05-17 15:20:02 +0200
commit6f1f7e74800faa0f06d2d3c7af3622aa87133341 (patch)
treebf4e626b6c8ffff4a578c7fa9046fe1d8603452d
parent2669bb7a9208fce9b0ec80f4ec119e081d883513 (diff)
downloadModemManager-aleksander/qmi-sms-fixes.tar.gz
fixup! HACK HACK HACKaleksander/qmi-sms-fixes
-rw-r--r--src/mm-broadband-modem-qmi.c130
1 files changed, 75 insertions, 55 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 706217dff..338cb7b86 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -5975,14 +5975,26 @@ messaging_set_default_storage (MMIfaceModemMessaging *self,
/*****************************************************************************/
/* Load initial SMS parts */
+typedef enum {
+ LOAD_INITIAL_SMS_PARTS_STEP_FIRST,
+ LOAD_INITIAL_SMS_PARTS_STEP_LIST_ALL,
+ LOAD_INITIAL_SMS_PARTS_STEP_LIST_MT_READ,
+ LOAD_INITIAL_SMS_PARTS_STEP_LIST_MT_NOT_READ,
+ LOAD_INITIAL_SMS_PARTS_STEP_LIST_MO_SENT,
+ LOAD_INITIAL_SMS_PARTS_STEP_LIST_MO_NOT_SENT,
+ LOAD_INITIAL_SMS_PARTS_STEP_LAST
+} LoadInitialSmsPartsStep;
+
typedef struct {
MMBroadbandModemQmi *self;
GSimpleAsyncResult *result;
QmiClientWms *client;
MMSmsStorage storage;
+ LoadInitialSmsPartsStep step;
+
+ /* For each step */
GArray *message_array;
guint i;
- guint step;
} LoadInitialSmsPartsContext;
static void
@@ -6105,6 +6117,8 @@ wms_raw_read_ready (QmiClientWms *client,
read_next_sms_part (ctx);
}
+static void load_initial_sms_parts_step (LoadInitialSmsPartsContext *ctx);
+
static void
read_next_sms_part (LoadInitialSmsPartsContext *ctx)
{
@@ -6113,8 +6127,12 @@ read_next_sms_part (LoadInitialSmsPartsContext *ctx)
if (ctx->i >= ctx->message_array->len ||
!ctx->message_array) {
- g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
- load_initial_sms_parts_context_complete_and_free (ctx);
+ /* If we just listed all SMS, we're done. Otherwise go to next tag. */
+ if (ctx->step == LOAD_INITIAL_SMS_PARTS_STEP_LIST_ALL)
+ ctx->step = LOAD_INITIAL_SMS_PARTS_STEP_LAST;
+ else
+ ctx->step++;
+ load_initial_sms_parts_step (ctx);
return;
}
@@ -6142,8 +6160,6 @@ read_next_sms_part (LoadInitialSmsPartsContext *ctx)
qmi_message_wms_raw_read_input_unref (input);
}
-static void step (LoadInitialSmsPartsContext *ctx);
-
static void
wms_list_messages_ready (QmiClientWms *client,
GAsyncResult *res,
@@ -6162,12 +6178,11 @@ wms_list_messages_ready (QmiClientWms *client,
}
if (!qmi_message_wms_list_messages_output_get_result (output, &error)) {
- g_prefix_error (&error, "Couldn't list messages: ");
-
- g_warning ("%s", error->message);
+ /* Ignore error, keep on */
+ g_debug ("Couldn't read SMS messages: %s", error->message);
g_error_free (error);
ctx->step++;
- step (ctx);
+ load_initial_sms_parts_step (ctx);
return;
}
@@ -6187,60 +6202,65 @@ wms_list_messages_ready (QmiClientWms *client,
}
static void
-step (LoadInitialSmsPartsContext *ctx)
+load_initial_sms_parts_step (LoadInitialSmsPartsContext *ctx)
{
QmiMessageWmsListMessagesInput *input;
- if (ctx->step == 8) {
- g_simple_async_result_set_error (ctx->result, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "kaka");
- load_initial_sms_parts_context_complete_and_free (ctx);
- return;
- }
-
- mm_dbg ("[STEP %u] loading messages from storage '%s'... (qmi: %u)",
- ctx->step,
- mm_sms_storage_get_string (ctx->storage),
- mm_sms_storage_to_qmi_storage_type (ctx->storage));
-
/* Request to list messages in a given storage */
input = qmi_message_wms_list_messages_input_new ();
qmi_message_wms_list_messages_input_set_storage_type (
input,
mm_sms_storage_to_qmi_storage_type (ctx->storage),
NULL);
+ qmi_message_wms_list_messages_input_set_message_mode (input,
+ QMI_WMS_MESSAGE_MODE_GSM_WCDMA,
+ NULL);
- if (ctx->step < 2) {
- qmi_message_wms_list_messages_input_set_message_tag (input,
- QMI_WMS_MESSAGE_TAG_TYPE_MT_READ,
- NULL);
- if (ctx->step < 1)
- qmi_message_wms_list_messages_input_set_message_mode (input,
- QMI_WMS_MESSAGE_MODE_GSM_WCDMA,
- NULL);
- } else if (ctx->step < 4) {
- qmi_message_wms_list_messages_input_set_message_tag (input,
- QMI_WMS_MESSAGE_TAG_TYPE_MT_NOT_READ,
- NULL);
- if (ctx->step < 3)
- qmi_message_wms_list_messages_input_set_message_mode (input,
- QMI_WMS_MESSAGE_MODE_GSM_WCDMA,
- NULL);
- } else if (ctx->step < 6) {
- qmi_message_wms_list_messages_input_set_message_tag (input,
- QMI_WMS_MESSAGE_TAG_TYPE_MO_SENT,
- NULL);
- if (ctx->step < 5)
- qmi_message_wms_list_messages_input_set_message_mode (input,
- QMI_WMS_MESSAGE_MODE_GSM_WCDMA,
- NULL);
- } else if (ctx->step < 8) {
- qmi_message_wms_list_messages_input_set_message_tag (input,
- QMI_WMS_MESSAGE_TAG_TYPE_MO_NOT_SENT,
- NULL);
- if (ctx->step < 7)
- qmi_message_wms_list_messages_input_set_message_mode (input,
- QMI_WMS_MESSAGE_MODE_GSM_WCDMA,
- NULL);
+ switch (ctx->step) {
+ case LOAD_INITIAL_SMS_PARTS_STEP_FIRST:
+ ctx->step++;
+ /* Fall down */
+ case LOAD_INITIAL_SMS_PARTS_STEP_LIST_ALL:
+ mm_dbg ("loading all messages from storage '%s'...",
+ mm_sms_storage_get_string (ctx->storage));
+ break;
+ case LOAD_INITIAL_SMS_PARTS_STEP_LIST_MT_READ:
+ mm_dbg ("loading MT-read messages from storage '%s'...",
+ mm_sms_storage_get_string (ctx->storage));
+ qmi_message_wms_list_messages_input_set_message_tag (
+ input,
+ QMI_WMS_MESSAGE_TAG_TYPE_MT_READ,
+ NULL);
+ break;
+ case LOAD_INITIAL_SMS_PARTS_STEP_LIST_MT_NOT_READ:
+ mm_dbg ("loading MT-not-read messages from storage '%s'...",
+ mm_sms_storage_get_string (ctx->storage));
+ qmi_message_wms_list_messages_input_set_message_tag (
+ input,
+ QMI_WMS_MESSAGE_TAG_TYPE_MT_NOT_READ,
+ NULL);
+ break;
+ case LOAD_INITIAL_SMS_PARTS_STEP_LIST_MO_SENT:
+ mm_dbg ("loading MO-sent messages from storage '%s'...",
+ mm_sms_storage_get_string (ctx->storage));
+ qmi_message_wms_list_messages_input_set_message_tag (
+ input,
+ QMI_WMS_MESSAGE_TAG_TYPE_MO_SENT,
+ NULL);
+ break;
+ case LOAD_INITIAL_SMS_PARTS_STEP_LIST_MO_NOT_SENT:
+ mm_dbg ("loading MO-not-sent messages from storage '%s'...",
+ mm_sms_storage_get_string (ctx->storage));
+ qmi_message_wms_list_messages_input_set_message_tag (
+ input,
+ QMI_WMS_MESSAGE_TAG_TYPE_MO_NOT_SENT,
+ NULL);
+ break;
+ case LOAD_INITIAL_SMS_PARTS_STEP_LAST:
+ /* All steps done */
+ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
+ load_initial_sms_parts_context_complete_and_free (ctx);
+ return;
}
qmi_client_wms_list_messages (QMI_CLIENT_WMS (ctx->client),
@@ -6274,9 +6294,9 @@ load_initial_sms_parts (MMIfaceModemMessaging *self,
callback,
user_data,
load_initial_sms_parts);
- ctx->step = 0;
+ ctx->step = LOAD_INITIAL_SMS_PARTS_STEP_FIRST;
- step (ctx);
+ load_initial_sms_parts_step (ctx);
}
/*****************************************************************************/