[gnome-todo] todoist: move access_token to provider struct
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] todoist: move access_token to provider struct
- Date: Fri, 14 Jul 2017 02:27:08 +0000 (UTC)
commit 253edc91314a758e9f8b187e934df423e31e7fb7
Author: Rohit Kaushik <kaushikrohit325 gmail com>
Date: Fri Jul 14 00:31:33 2017 +0530
todoist: move access_token to provider struct
This patch stores the Todoist Account access token
in Provider structure. Since access_token is to be
sent with every http post request, it is redundant
to fetch it again and again. Hence this patch proposes
to store it just once at the start. Also a function
to emit access_token related errors has been added.
https://bugzilla.gnome.org/show_bug.cgi?id=772278
plugins/todoist/gtd-provider-todoist.c | 145 ++++++++++++++++----------------
1 files changed, 73 insertions(+), 72 deletions(-)
---
diff --git a/plugins/todoist/gtd-provider-todoist.c b/plugins/todoist/gtd-provider-todoist.c
index ccdc6be..4a85f5a 100644
--- a/plugins/todoist/gtd-provider-todoist.c
+++ b/plugins/todoist/gtd-provider-todoist.c
@@ -34,6 +34,7 @@ struct _GtdProviderTodoist
GoaObject *account_object;
gchar *sync_token;
+ gchar *access_token;
gchar *description;
GIcon *icon;
@@ -183,6 +184,21 @@ emit_generic_error (const GError *error)
NULL);
}
+static void
+emit_access_token_error (void)
+{
+ g_warning ("%s: %s: %s",
+ G_STRFUNC,
+ "Error fetching Todoist account access_token",
+ "Unable to get access token from gnome-online-accounts");
+
+ gtd_manager_emit_error_message (gtd_manager_get_default (),
+ _("To Do cannot fetch Todoist account access_token"),
+ _("Please ensure that Todoist account is correctly configured."),
+ NULL,
+ NULL);
+}
+
static gint
get_color_code_index (GdkRGBA *rgba)
{
@@ -213,6 +229,22 @@ get_color_code_index (GdkRGBA *rgba)
}
static void
+store_access_token (GtdProviderTodoist *self)
+{
+ GoaOAuth2Based *o_auth2;
+ GError *error;
+
+ error = NULL;
+ o_auth2 = goa_object_get_oauth2_based (self->account_object);
+
+ if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &self->access_token, NULL, NULL, &error))
+ {
+ emit_generic_error (error);
+ g_clear_error (&error);
+ }
+}
+
+static void
parse_array_to_list (GtdProviderTodoist *self,
JsonArray *projects)
{
@@ -496,31 +528,22 @@ out:
static void
synchronize_call (GtdProviderTodoist *self)
{
- GoaOAuth2Based *o_auth2;
JsonObject *params;
- GError *error;
- g_autofree gchar *access_token;
-
- error = NULL;
- access_token = NULL;
- o_auth2 = goa_object_get_oauth2_based (self->account_object);
- params = json_object_new ();
- if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &access_token, NULL, NULL, &error))
+ if (!self->access_token)
{
- emit_generic_error (error);
- g_clear_error (&error);
- goto out;
+ emit_access_token_error ();
+ return;
}
- json_object_set_string_member (params, "token", access_token);
+ params = json_object_new ();
+
+ json_object_set_string_member (params, "token", self->access_token);
json_object_set_string_member (params, "sync_token", self->sync_token);
json_object_set_string_member (params, "resource_types", "[\"all\"]");
post (params, (RestProxyCallAsyncCallback) synchronize_call_cb, self);
-out:
- g_object_unref (o_auth2);
json_object_unref (params);
}
@@ -536,12 +559,9 @@ gtd_provider_todoist_update_task (GtdProvider *provider,
GtdTask *task)
{
GtdProviderTodoist *self;
- GoaOAuth2Based *o_auth2;
JsonObject *params;
GtdTask *parent;
GDateTime *due_date;
- GError *error;
- g_autofree gchar *access_token;
g_autofree gchar *command;
g_autofree gchar *command_uuid;
g_autofree gchar *due_dt;
@@ -552,10 +572,15 @@ gtd_provider_todoist_update_task (GtdProvider *provider,
gint indent;
gint checked;
- error = NULL;
- due_dt = command = command_uuid = access_token = NULL;
self = GTD_PROVIDER_TODOIST (provider);
- o_auth2 = goa_object_get_oauth2_based (self->account_object);
+ due_dt = command = command_uuid = NULL;
+
+ if (!self->access_token)
+ {
+ emit_access_token_error ();
+ return;
+ }
+
params = json_object_new ();
task_uid = gtd_object_get_uid (GTD_OBJECT (task));
title = gtd_task_get_title (task);
@@ -578,14 +603,6 @@ gtd_provider_todoist_update_task (GtdProvider *provider,
due_dt = g_strdup ("null");
}
-
- if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &access_token, NULL, NULL, &error))
- {
- emit_generic_error (error);
- g_clear_error (&error);
- return;
- }
-
command_uuid = g_uuid_string_random ();
command = g_strdup_printf ("[{\"type\": \"item_update\", \"uuid\": \"%s\", "
"\"args\": {\"id\": %s, \"content\": \"%s\", "
@@ -601,7 +618,7 @@ gtd_provider_todoist_update_task (GtdProvider *provider,
checked,
due_dt);
- json_object_set_string_member (params, "token", access_token);
+ json_object_set_string_member (params, "token", self->access_token);
json_object_set_string_member (params, "commands", command);
post (params, (RestProxyCallAsyncCallback) post_generic_cb, self);
@@ -614,36 +631,30 @@ gtd_provider_todoist_remove_task (GtdProvider *provider,
GtdTask *task)
{
GtdProviderTodoist *self;
- GoaOAuth2Based *o_auth2;
JsonObject *params;
- GError *error;
- g_autofree gchar *access_token;
g_autofree gchar *command;
g_autofree gchar *command_uuid;
const gchar *task_uid;
- error = NULL;
- access_token = NULL;
- command = command_uuid = NULL;
self = GTD_PROVIDER_TODOIST (provider);
- o_auth2 = goa_object_get_oauth2_based (self->account_object);
- params = json_object_new ();
- task_uid = gtd_object_get_uid (GTD_OBJECT (task));
+ command = command_uuid = NULL;
- if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &access_token, NULL, NULL, &error))
+ if (!self->access_token)
{
- emit_generic_error (error);
- g_clear_error (&error);
+ emit_access_token_error ();
return;
}
+ params = json_object_new ();
+ task_uid = gtd_object_get_uid (GTD_OBJECT (task));
+
command_uuid = g_uuid_string_random ();
command = g_strdup_printf ("[{\"type\": \"item_delete\", \"uuid\": \"%s\", "
"\"args\": {\"ids\": [%s]}}]",
command_uuid,
task_uid);
- json_object_set_string_member (params, "token", access_token);
+ json_object_set_string_member (params, "token", self->access_token);
json_object_set_string_member (params, "commands", command);
post (params, (RestProxyCallAsyncCallback) post_generic_cb, self);
@@ -661,35 +672,29 @@ gtd_provider_todoist_update_task_list (GtdProvider *provider,
GtdTaskList *list)
{
GtdProviderTodoist *self;
- GoaOAuth2Based *o_auth2;
JsonObject *params;
GdkRGBA *list_color;
- GError *error;
- g_autofree gchar *access_token;
g_autofree gchar *command;
g_autofree gchar *command_uuid;
const gchar *list_uid;
const gchar *list_name;
gint color_index;
- error = NULL;
- access_token = NULL;
- command = command_uuid = NULL;
self = GTD_PROVIDER_TODOIST (provider);
- o_auth2 = goa_object_get_oauth2_based (self->account_object);
+ command = command_uuid = NULL;
+
+ if (!self->access_token)
+ {
+ emit_access_token_error ();
+ return;
+ }
+
params = json_object_new ();
list_uid = gtd_object_get_uid (GTD_OBJECT (list));
list_name = gtd_task_list_get_name (list);
list_color = gtd_task_list_get_color (list);
color_index = get_color_code_index (list_color);
- if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &access_token, NULL, NULL, &error))
- {
- emit_generic_error (error);
- g_clear_error (&error);
- return;
- }
-
command_uuid = g_uuid_string_random ();
command = g_strdup_printf ("[{\"type\": \"project_update\", \"uuid\": \"%s\", "
"\"args\": {\"id\": %s, \"name\": \"%s\", \"color\": %d}}]",
@@ -698,7 +703,7 @@ gtd_provider_todoist_update_task_list (GtdProvider *provider,
list_name,
color_index);
- json_object_set_string_member (params, "token", access_token);
+ json_object_set_string_member (params, "token", self->access_token);
json_object_set_string_member (params, "commands", command);
post (params, (RestProxyCallAsyncCallback) post_generic_cb, self);
@@ -711,36 +716,30 @@ gtd_provider_todoist_remove_task_list (GtdProvider *provider,
GtdTaskList *list)
{
GtdProviderTodoist *self;
- GoaOAuth2Based *o_auth2;
JsonObject *params;
- GError *error;
- g_autofree gchar *access_token;
g_autofree gchar *command;
g_autofree gchar *command_uuid;
const gchar *list_uid;
- error = NULL;
- access_token = NULL;
- command = command_uuid = NULL;
self = GTD_PROVIDER_TODOIST (provider);
- o_auth2 = goa_object_get_oauth2_based (self->account_object);
- params = json_object_new ();
- list_uid = gtd_object_get_uid (GTD_OBJECT (list));
+ command = command_uuid = NULL;
- if (!goa_oauth2_based_call_get_access_token_sync (o_auth2, &access_token, NULL, NULL, &error))
+ if (!self->access_token)
{
- emit_generic_error (error);
- g_clear_error (&error);
+ emit_access_token_error ();
return;
}
+ params = json_object_new ();
+ list_uid = gtd_object_get_uid (GTD_OBJECT (list));
+
command_uuid = g_uuid_string_random ();
command = g_strdup_printf ("[{\"type\": \"project_delete\", \"uuid\": \"%s\", "
"\"args\": {\"ids\": [%s]}}]",
command_uuid,
list_uid);
- json_object_set_string_member (params, "token", access_token);
+ json_object_set_string_member (params, "token", self->access_token);
json_object_set_string_member (params, "commands", command);
post (params, (RestProxyCallAsyncCallback) post_generic_cb, self);
@@ -876,7 +875,9 @@ gtd_provider_todoist_set_property (GObject *object,
case PROP_GOA_OBJECT:
self->account_object = GOA_OBJECT (g_value_dup_object (value));
update_description (self);
- synchronize_call (self);
+ store_access_token (self);
+ if (self->access_token)
+ synchronize_call (self);
break;
default:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]