Re: [PATCH] anydata: port get_detailed_registration_state to use GTask

2017-10-20 Thread Aleksander Morgado
On 20/10/17 08:26, Ben Chan wrote:
> ---
>  plugins/anydata/mm-broadband-modem-anydata.c | 91 
> +++-
>  1 file changed, 35 insertions(+), 56 deletions(-)
> 

Pushed to git master, thanks!

> diff --git a/plugins/anydata/mm-broadband-modem-anydata.c 
> b/plugins/anydata/mm-broadband-modem-anydata.c
> index 4b579da1..a4acaf27 100644
> --- a/plugins/anydata/mm-broadband-modem-anydata.c
> +++ b/plugins/anydata/mm-broadband-modem-anydata.c
> @@ -47,34 +47,6 @@ typedef struct {
>  MMModemCdmaRegistrationState detailed_evdo_state;
>  } DetailedRegistrationStateResults;
>  
> -typedef struct {
> -MMBroadbandModem *self;
> -GSimpleAsyncResult *result;
> -MMModemCdmaRegistrationState cdma1x_state;
> -MMModemCdmaRegistrationState evdo_state;
> -GError *error;
> -} DetailedRegistrationStateContext;
> -
> -static void
> -detailed_registration_state_context_complete_and_free 
> (DetailedRegistrationStateContext *ctx)
> -{
> -if (ctx->error)
> -g_simple_async_result_take_error (ctx->result, ctx->error);
> -else {
> -DetailedRegistrationStateResults *results;
> -
> -results = g_new (DetailedRegistrationStateResults, 1);
> -results->detailed_cdma1x_state = ctx->cdma1x_state;
> -results->detailed_evdo_state = ctx->evdo_state;
> -g_simple_async_result_set_op_res_gpointer (ctx->result, results, 
> g_free);
> -}
> -
> -g_simple_async_result_complete (ctx->result);
> -g_object_unref (ctx->result);
> -g_object_unref (ctx->self);
> -g_free (ctx);
> -}
> -
>  static gboolean
>  get_detailed_registration_state_finish (MMIfaceModemCdma *self,
>  GAsyncResult *res,
> @@ -84,31 +56,36 @@ get_detailed_registration_state_finish (MMIfaceModemCdma 
> *self,
>  {
>  DetailedRegistrationStateResults *results;
>  
> -if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), 
> error))
> +results = g_task_propagate_pointer (G_TASK (res), error);
> +if (!results)
>  return FALSE;
>  
> -results = g_simple_async_result_get_op_res_gpointer 
> (G_SIMPLE_ASYNC_RESULT (res));
>  *detailed_cdma1x_state = results->detailed_cdma1x_state;
>  *detailed_evdo_state = results->detailed_evdo_state;
> +g_free (results);
>  return TRUE;
>  }
>  
>  static void
>  hstate_ready (MMIfaceModemCdma *self,
>GAsyncResult *res,
> -  DetailedRegistrationStateContext *ctx)
> +  GTask *task)
>  {
> +DetailedRegistrationStateResults *results;
>  GError *error = NULL;
>  const gchar *response;
>  GRegex *r;
>  GMatchInfo *match_info;
>  
> +results = g_task_get_task_data (task);
> +
>  response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, 
> );
>  if (error) {
>  /* Leave superclass' reg state alone if AT*HSTATE isn't supported */
>  g_error_free (error);
> -/* Result is set here when completing */
> -detailed_registration_state_context_complete_and_free (ctx);
> +
> +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), 
> g_free);
> +g_object_unref (task);
>  return;
>  }
>  
> @@ -135,11 +112,11 @@ hstate_ready (MMIfaceModemCdma *self,
>   * It may be that IDLE actually means NO SERVICE too; not 
> sure.
>   */
>  if (dbm > -105)
> -ctx->evdo_state = 
> MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
> +results->detailed_evdo_state = 
> MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
>  break;
>  case 4:  /* ACCESS */
>  case 5:  /* CONNECT */
> -ctx->evdo_state = 
> MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
> +results->detailed_evdo_state = 
> MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
>  break;
>  default:
>  mm_warn ("ANYDATA: unknown *STATE (%d); assuming no 
> service.", val);
> @@ -155,25 +132,29 @@ hstate_ready (MMIfaceModemCdma *self,
>  g_match_info_free (match_info);
>  g_regex_unref (r);
>  
> -/* Result is set here when completing */
> -detailed_registration_state_context_complete_and_free (ctx);
> +g_task_return_pointer (task, g_memdup (results, sizeof (*results)), 
> g_free);
> +g_object_unref (task);
>  }
>  
>  static void
>  state_ready (MMIfaceModemCdma *self,
>   GAsyncResult *res,
> - DetailedRegistrationStateContext *ctx)
> + GTask *task)
>  {
> +DetailedRegistrationStateResults *results;
> +GError *error = NULL;
>  const gchar *response;
>  GRegex *r;
>  GMatchInfo *match_info;
>  
> -response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, 
> >error);
> -if (ctx->error) {
> -detailed_registration_state_context_complete_and_free (ctx);
> +response = 

[PATCH] anydata: port get_detailed_registration_state to use GTask

2017-10-20 Thread Ben Chan
---
 plugins/anydata/mm-broadband-modem-anydata.c | 91 +++-
 1 file changed, 35 insertions(+), 56 deletions(-)

diff --git a/plugins/anydata/mm-broadband-modem-anydata.c 
b/plugins/anydata/mm-broadband-modem-anydata.c
index 4b579da1..a4acaf27 100644
--- a/plugins/anydata/mm-broadband-modem-anydata.c
+++ b/plugins/anydata/mm-broadband-modem-anydata.c
@@ -47,34 +47,6 @@ typedef struct {
 MMModemCdmaRegistrationState detailed_evdo_state;
 } DetailedRegistrationStateResults;
 
-typedef struct {
-MMBroadbandModem *self;
-GSimpleAsyncResult *result;
-MMModemCdmaRegistrationState cdma1x_state;
-MMModemCdmaRegistrationState evdo_state;
-GError *error;
-} DetailedRegistrationStateContext;
-
-static void
-detailed_registration_state_context_complete_and_free 
(DetailedRegistrationStateContext *ctx)
-{
-if (ctx->error)
-g_simple_async_result_take_error (ctx->result, ctx->error);
-else {
-DetailedRegistrationStateResults *results;
-
-results = g_new (DetailedRegistrationStateResults, 1);
-results->detailed_cdma1x_state = ctx->cdma1x_state;
-results->detailed_evdo_state = ctx->evdo_state;
-g_simple_async_result_set_op_res_gpointer (ctx->result, results, 
g_free);
-}
-
-g_simple_async_result_complete (ctx->result);
-g_object_unref (ctx->result);
-g_object_unref (ctx->self);
-g_free (ctx);
-}
-
 static gboolean
 get_detailed_registration_state_finish (MMIfaceModemCdma *self,
 GAsyncResult *res,
@@ -84,31 +56,36 @@ get_detailed_registration_state_finish (MMIfaceModemCdma 
*self,
 {
 DetailedRegistrationStateResults *results;
 
-if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), 
error))
+results = g_task_propagate_pointer (G_TASK (res), error);
+if (!results)
 return FALSE;
 
-results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT 
(res));
 *detailed_cdma1x_state = results->detailed_cdma1x_state;
 *detailed_evdo_state = results->detailed_evdo_state;
+g_free (results);
 return TRUE;
 }
 
 static void
 hstate_ready (MMIfaceModemCdma *self,
   GAsyncResult *res,
-  DetailedRegistrationStateContext *ctx)
+  GTask *task)
 {
+DetailedRegistrationStateResults *results;
 GError *error = NULL;
 const gchar *response;
 GRegex *r;
 GMatchInfo *match_info;
 
+results = g_task_get_task_data (task);
+
 response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, 
);
 if (error) {
 /* Leave superclass' reg state alone if AT*HSTATE isn't supported */
 g_error_free (error);
-/* Result is set here when completing */
-detailed_registration_state_context_complete_and_free (ctx);
+
+g_task_return_pointer (task, g_memdup (results, sizeof (*results)), 
g_free);
+g_object_unref (task);
 return;
 }
 
@@ -135,11 +112,11 @@ hstate_ready (MMIfaceModemCdma *self,
  * It may be that IDLE actually means NO SERVICE too; not sure.
  */
 if (dbm > -105)
-ctx->evdo_state = 
MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+results->detailed_evdo_state = 
MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
 break;
 case 4:  /* ACCESS */
 case 5:  /* CONNECT */
-ctx->evdo_state = MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+results->detailed_evdo_state = 
MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
 break;
 default:
 mm_warn ("ANYDATA: unknown *STATE (%d); assuming no service.", 
val);
@@ -155,25 +132,29 @@ hstate_ready (MMIfaceModemCdma *self,
 g_match_info_free (match_info);
 g_regex_unref (r);
 
-/* Result is set here when completing */
-detailed_registration_state_context_complete_and_free (ctx);
+g_task_return_pointer (task, g_memdup (results, sizeof (*results)), 
g_free);
+g_object_unref (task);
 }
 
 static void
 state_ready (MMIfaceModemCdma *self,
  GAsyncResult *res,
- DetailedRegistrationStateContext *ctx)
+ GTask *task)
 {
+DetailedRegistrationStateResults *results;
+GError *error = NULL;
 const gchar *response;
 GRegex *r;
 GMatchInfo *match_info;
 
-response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, 
>error);
-if (ctx->error) {
-detailed_registration_state_context_complete_and_free (ctx);
+response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, 
);
+if (error) {
+g_task_return_error (task, error);
+g_object_unref (task);
 return;
 }
 
+results = g_task_get_task_data (task);
 response = mm_strip_tag (response, "*STATE:");
 
 /* Format is ",,..." */
@@ -197,12 +178,12 @@ state_ready