[recipes/todoist-2: 3/3] Fix infinite loop introduced in previous commit
- From: Ekta Nandwani <ektan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes/todoist-2: 3/3] Fix infinite loop introduced in previous commit
- Date: Sat, 5 Aug 2017 15:28:54 +0000 (UTC)
commit 691a6d6c0338e19a3eafa761006438cfa72b4a85
Author: Ekta Nandwani <mailnandwaniekta gmail com>
Date: Tue Aug 1 08:20:57 2017 +0530
Fix infinite loop introduced in previous commit
src/gr-ingredients-exporter.c | 344 ++++++++++++++++++++++++----------------
1 files changed, 206 insertions(+), 138 deletions(-)
---
diff --git a/src/gr-ingredients-exporter.c b/src/gr-ingredients-exporter.c
index 0e9bce7..3dd7b56 100644
--- a/src/gr-ingredients-exporter.c
+++ b/src/gr-ingredients-exporter.c
@@ -44,7 +44,7 @@ get_project_id (GrIngredientsExporter *exporter);
gchar *access_token;
GoaObject *account_object;
- gchar *sync_token;
+ const gchar *sync_token;
glong project_id;
GtkWidget *export_button;
@@ -64,13 +64,11 @@ get_project_id (GrIngredientsExporter *exporter);
};
-G_DEFINE_TYPE (GrIngredientsExporter, gr_ingredients_exporter, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GrIngredientsExporter, gr_ingredients_exporter, G_TYPE_OBJECT);
static void
gr_ingredients_exporter_finalize (GObject *object)
{
- GrIngredientsExporter *exporter = GR_INGREDIENTS_EXPORTER (object);
-
G_OBJECT_CLASS (gr_ingredients_exporter_parent_class)->finalize (object);
}
@@ -79,7 +77,6 @@ static void
gr_ingredients_exporter_class_init (GrIngredientsExporterClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
object_class->finalize = gr_ingredients_exporter_finalize;
}
@@ -96,19 +93,31 @@ gr_ingredients_exporter_new (GtkWindow *parent)
exporter = g_object_new (GR_TYPE_INGREDIENTS_EXPORTER, NULL);
exporter->window = parent;
-
return exporter;
}
-static void
-get_ingredients_list(GrIngredientsExporter *exporter)
+static gboolean
+get_ingredients_list (GrIngredientsExporter *exporter)
{
- GtkWidget *shopping_page;
+ GtkWidget *shopping_page;
+ GList *list;
+ GString *s;
- shopping_page = gr_shopping_page_new ();
- gr_shopping_page_populate (GR_SHOPPING_PAGE(shopping_page));
- exporter->ingredients = get_ingredients (GR_SHOPPING_PAGE(shopping_page));
- g_print("inside get_ingredients_list\n");
+ shopping_page = gr_shopping_page_new ();
+ gr_shopping_page_populate (GR_SHOPPING_PAGE(shopping_page));
+ exporter->ingredients = get_ingredients (GR_SHOPPING_PAGE(shopping_page));
+
+ for (list = exporter->ingredients; list != NULL; list = list->next)
+ {
+ ShoppingListItem *item = list->data;
+ s = g_string_new ("");
+ g_string_append_printf (s, "%s %s", item->amount, item->name);
+ }
+
+ if (exporter->ingredients)
+ return TRUE;
+ else
+ return FALSE;
}
static void
@@ -117,7 +126,6 @@ switch_dialog_contents (GrIngredientsExporter *exporter)
if (gtk_stack_get_visible_child (GTK_STACK (exporter->dialog_stack)) ==
exporter->accounts_box)
{
if (!exporter->providers_box)
- g_print("providers_box empty");
gtk_widget_set_visible (exporter->export_button, FALSE);
gtk_stack_set_visible_child_name (GTK_STACK (exporter->dialog_stack),
"providers_box");
gtk_stack_set_visible_child_name (GTK_STACK (exporter->header_start_stack), "back");
@@ -131,8 +139,10 @@ switch_dialog_contents (GrIngredientsExporter *exporter)
gtk_header_bar_set_title (GTK_HEADER_BAR (exporter->header), "Export Ingredients");
}
}
+
static void
-export_shopping_list_callback (RestProxyCall *call, GError *error, GObject *obj, GrIngredientsExporter
*exporter)
+export_shopping_list_callback (RestProxyCall *call, GError *error,
+ GObject *obj, GrIngredientsExporter *exporter)
{
JsonObject *object;
JsonParser *parser;
@@ -140,11 +150,9 @@ export_shopping_list_callback (RestProxyCall *call, GError *error, GObject *obj,
const gchar *payload;
guint status_code;
gsize payload_length;
- gchar *sync_token;
- GList *lists;
- GList *l;
+ const gchar *sync_token;
- g_print("reaches do_something_here\n");
+ g_print("export_shopping_list_callback\n");
parse_error = NULL;
status_code = rest_proxy_call_get_status_code (call);
parser = json_parser_new ();
@@ -171,10 +179,8 @@ export_shopping_list_callback (RestProxyCall *call, GError *error, GObject *obj,
g_print("No Data found");
}
sync_token = json_object_get_string_member (object, "sync_token");
+ exporter->sync_token = sync_token;
g_print("%s",sync_token);
- exporter->sync_token;
-
- json_object_unref (object);
out:
g_object_unref (parser);
@@ -186,50 +192,49 @@ static void
export_shopping_list (GrIngredientsExporter *exporter)
{
- GError *error;
- JsonObject *params;
- JsonObject *project;
- params = json_object_new ();
- project = json_object_new ();
- GList *l;
RestProxy *proxy;
RestProxyCall *call;
+ GError *error;
+
+ GList *list;
+
GString *commands;
commands = g_string_new ("");
error = NULL;
GString *commands_arg;
+ gboolean got_ingredients;
+ got_ingredients = get_ingredients_list (exporter);
- json_object_set_string_member (project, "type", "project_add");
- json_object_set_string_member (project, "args", "{\"name\": \"Project4\"}");
-
- get_ingredients_list(exporter);
-
- for (l = exporter->ingredients; l != NULL; l = l->next)
- {
- GString *s;
+ if (got_ingredients)
+ {
+ for (list = exporter->ingredients; list != NULL; list = list->next)
+ {
+ GString *s;
+
+ ShoppingListItem *item = list->data;
+ s = g_string_new ("");
+ g_string_append_printf (s, "%s %s", item->amount, item->name);
+ g_print ("appending item");
+ g_print("%s\n",s->str);
+ gchar *uuid = g_uuid_string_random();
+ gchar *temp_id = g_uuid_string_random();
+
+ g_string_append_printf (commands, "{\"type\": \"item_add\",
\"temp_id\":\"%s\",\"uuid\":\"%s\", "
+ "\"args\":{\"content\":\"%s\",\"project_id\":%ld}},",
+ temp_id, uuid,
+ s->str, exporter->project_id);
+ }
+ }
- ShoppingListItem *item = l->data;
- s = g_string_new ("");
- g_string_append_printf (s, "%s %s", item->amount, item->name);
- g_print ("appending item");
- g_print("%s\n",s->str);
- gchar *uuid = g_uuid_string_random();
- gchar *temp_id = g_uuid_string_random();
-
- g_string_append_printf (commands, "{\"type\": \"item_add\",
\"temp_id\":\"%s\",\"uuid\":\"%s\", "
- "\"args\":{\"content\":\"%s\",\"project_id\":%ld}},",
- temp_id, uuid,
- s->str, exporter->project_id);
- }
g_print("exits the loop");
- g_print("%d",commands->len);
+
commands = g_string_truncate (commands, commands->len-1);
commands_arg = g_string_new("[");
g_string_append_printf (commands_arg, "%s]", commands->str);
- proxy = rest_proxy_new ("https://todoist.com/API/v7/sync", FALSE);
+ proxy = rest_proxy_new (TODOIST_URL, FALSE);
call = rest_proxy_new_call (proxy);
rest_proxy_call_set_method (call, "POST");
rest_proxy_call_add_header (call, "content-type", "application/x-www-form-urlencoded");
@@ -243,11 +248,9 @@ export_shopping_list (GrIngredientsExporter *exporter)
rest_proxy_call_add_param (call, "commands", commands_arg->str);
if (!rest_proxy_call_async (call, (RestProxyCallAsyncCallback) export_shopping_list_callback,
- NULL,
- exporter,
- &error))
+ NULL, exporter, &error))
{
- g_print("calling async failed\n");
+ g_print("calling async failed\n");
}
g_object_unref (proxy);
@@ -261,7 +264,7 @@ cancel_export (GrIngredientsExporter *exporter)
g_print ("cancel_export\n");
}
-static GtkWidget *
+static void
get_selected_account (GtkListBox *list, GrIngredientsExporter *exporter)
{
g_print("get_selected_account\n");
@@ -273,17 +276,17 @@ static gboolean
get_todoist_account(GrIngredientsExporter *exporter)
{
- GoaClient *client;
+ GoaClient *client;
GList *accounts, *l;
GoaAccount *account;
GError *error;
- client = goa_client_new_sync (NULL, &error);
+ client = goa_client_new_sync (NULL, &error);
if (!client)
{
g_error ("Could not create GoaClient: %s", error->message);
- return;
+ return 0;
}
accounts = goa_client_get_accounts (client);
@@ -300,38 +303,139 @@ get_todoist_account(GrIngredientsExporter *exporter)
exporter->account_object = GOA_OBJECT(l->data);
g_print("provider type %s \n", goa_account_get_provider_type(account));
return TRUE;
- }
- else
- return FALSE;
-
+ }
}
+ return FALSE;
}
static void get_access_token (GrIngredientsExporter *exporter)
{
- GoaObject *account_object;
gchar *access_token;
GoaOAuth2Based *oauth2 = NULL;
GError *error;
+ error = NULL;
+ oauth2 = goa_object_get_oauth2_based (GOA_OBJECT (exporter->account_object));
+ if (!goa_oauth2_based_call_get_access_token_sync (oauth2, &access_token, NULL, NULL, &error))
+ {
+ g_print("access token not found!");
+ }
- error = NULL;
- oauth2 = goa_object_get_oauth2_based (GOA_OBJECT (exporter->account_object));
-
- if (!goa_oauth2_based_call_get_access_token_sync (oauth2, &access_token, NULL, NULL, &error))
- {
- g_print("access token not found!");
- }
-
- if (exporter->todoist_row == exporter->account_row_selected)
- {
- g_print ("export the list here\n");
- }
- exporter->access_token = access_token;
- g_print("%s",access_token);
+ if (exporter->todoist_row == exporter->account_row_selected)
+ {
+ g_print ("export the list here\n");
+ }
+ exporter->access_token = access_token;
+ g_print("%s",access_token);
+}
+
+static void
+add_project_id (GrIngredientsExporter *exporter)
+{
+
+ RestProxy *proxy;
+ RestProxyCall *call;
+ gchar *uuid = g_uuid_string_random();
+ gchar *temp_id = g_uuid_string_random();
+ guint status_code;
+ GError *error;
+
+ JsonObject *object;
+ JsonParser *parser;
+ GError *parse_error;
+ const gchar *payload;
+ JsonArray *projects;
+
+ gsize payload_length;
+ const gchar *sync_token;
+
+ GList *lists;
+ GList *l;
+ GString *project_add_commands;
+
+ project_add_commands = g_string_new ("");
+ g_print("inside the loop to add project_id");
+ proxy = rest_proxy_new (TODOIST_URL, FALSE);
+ call = rest_proxy_new_call (proxy);
+ rest_proxy_call_set_method (call, "POST");
+ rest_proxy_call_add_header (call, "content-type", "application/x-www-form-urlencoded");
+ rest_proxy_call_add_param (call, "token", exporter->access_token);
+ rest_proxy_call_add_param (call, "resource_types", "[\"projects\"]" );
+
+
+ if (!exporter->sync_token)
+ rest_proxy_call_add_param (call, "sync_token", "\'*\'");
+ else
+ rest_proxy_call_add_param (call, "sync_token", exporter->sync_token);
+
+ g_string_append_printf (project_add_commands, "[{\"type\": \"project_add\",
\"temp_id\":\"%s\",\"uuid\":\"%s\", "
+ "\"args\":{\"name\":\"Shopping List from Recipes\"}}]",
+ temp_id, uuid);
+
+ rest_proxy_call_add_param (call, "commands",project_add_commands->str);
+ g_print("before caaling sync");
+
+ if (!rest_proxy_call_sync (call,
+ &error))
+ {
+ g_clear_error (&error);
+ }
+
+ g_print("after caaling sync");
+ status_code = rest_proxy_call_get_status_code (call);
+ g_print("status code : %d",status_code);
+ if (status_code != 200)
+ {
+ g_print("status code %d", status_code);
+ }
+
+ parser = json_parser_new ();
+ payload = rest_proxy_call_get_payload (call);
+ if (!payload)
+ {
+ g_print("payload empty\n");
+ }
+ payload_length = rest_proxy_call_get_payload_length (call);
+
+ if (!json_parser_load_from_data (parser, payload, payload_length, &parse_error))
+ {
+ g_clear_error (&parse_error);
+ g_print("couldnt load payload");
+ }
+
+ object = json_node_dup_object (json_parser_get_root (parser));
+
+ if (!object)
+ g_print("No Data found");
+ g_print("get array member");
+ projects = json_object_get_array_member (object, "projects");
+
+ lists = json_array_get_elements (projects);
+ sync_token = json_object_get_string_member(object, "sync_token");
+ exporter->sync_token = sync_token;
+
+ for (l = lists; l != NULL; l = l->next)
+ {
+ JsonObject *object;
+
+ const gchar *name;
+ double id;
+
+ object = json_node_get_object (l->data);
+
+ name = json_object_get_string_member (object, "name");
+ g_print("%s" , name);
+ if (strcmp (name, "Shopping List from Recipes") == 0)
+ {
+ id = json_object_get_double_member (object, "id");
+ (exporter->project_id) = (glong) id;
+ g_print("id : %ld\n",exporter->project_id);
+ // goto export;
+ }
+ }
}
static void
@@ -340,10 +444,17 @@ get_project_id (GrIngredientsExporter *exporter)
RestProxy *proxy;
RestProxyCall *call;
GError *error;
- JsonObject *params;
- JsonObject *project;
- params = json_object_new ();
- project = json_object_new ();
+
+ JsonObject *object;
+ JsonParser *parser;
+ GError *parse_error;
+ const gchar *payload;
+ guint status_code;
+ gsize payload_length;
+ const gchar *sync_token;
+ GList *lists;
+ GList *l;
+ JsonArray *projects;
proxy = rest_proxy_new (TODOIST_URL, FALSE);
@@ -357,26 +468,13 @@ get_project_id (GrIngredientsExporter *exporter)
rest_proxy_call_add_param (call, "sync_token", exporter->sync_token);
rest_proxy_call_add_param (call, "resource_types", "[\"projects\"]");
- if (!rest_proxy_call_sync (call,
- &error))
-
+ g_print("before get sync call");
+ if (!rest_proxy_call_sync (call, &error))
{
g_clear_error (&error);
-
}
g_object_unref(proxy);
- JsonObject *object;
- JsonParser *parser;
- GError *parse_error;
- const gchar *payload;
- guint status_code;
- gsize payload_length;
- gchar *sync_token;
- GList *lists;
- GList *l;
- JsonArray *projects;
- RestProxyCall *call2;
parse_error = NULL;
status_code = rest_proxy_call_get_status_code (call);
@@ -417,54 +515,24 @@ get_project_id (GrIngredientsExporter *exporter)
g_print("%s" , name);
if (strcmp (name, "Shopping List from Recipes") == 0)
{
+
id = json_object_get_double_member (object, "id");
- exporter->project_id = (glong)malloc(sizeof(glong));
- g_print ("size of project_id %d" , sizeof(exporter->project_id));
(exporter->project_id) = (glong) id;
g_print("id : %ld\n",exporter->project_id);
goto export;
}
}
- if (exporter->project_id == NULL)
+ if (!exporter->project_id)
{
- gchar *uuid = g_uuid_string_random();
- gchar *temp_id = g_uuid_string_random();
- guint status_code2;
- GString *project_add_commands;
- project_add_commands = g_string_new ("");
- g_print("inside the loop to add project_id");
- proxy = rest_proxy_new (TODOIST_URL, FALSE);
- call2 = rest_proxy_new_call (proxy);
- rest_proxy_call_set_method (call2, "POST");
- rest_proxy_call_add_header (call2, "content-type", "application/x-www-form-urlencoded");
- rest_proxy_call_add_param (call2, "token", exporter->access_token);
- if(!exporter->sync_token)
- rest_proxy_call_add_param (call2, "sync_token", "\'*\'");
- else
- rest_proxy_call_add_param (call2, "sync_token", exporter->sync_token);
-
- g_string_append_printf (project_add_commands, "[{\"type\": \"project_add\",
\"temp_id\":\"%s\",\"uuid\":\"%s\", "
- "\"args\":{\"name\":\"Shopping List from Recipes\"}}]",
- temp_id, uuid);
-
-
- rest_proxy_call_add_param (call2, "commands",project_add_commands->str);
-
- if (!rest_proxy_call_sync (call2,
- &error))
- {
- g_clear_error (&error);
-
- }
- status_code2 = rest_proxy_call_get_status_code (call2);
- if (status_code2 != 200)
- {
- g_print("status code %d", status_code);
- }
- get_project_id(exporter);
+ add_project_id(exporter);
}
+ sync_token = json_object_get_string_member (object, "sync_token");
+
+ exporter->sync_token = sync_token;
+ g_print("%s",exporter->sync_token);
+
export:
if (exporter->project_id)
{
@@ -474,10 +542,11 @@ get_project_id (GrIngredientsExporter *exporter)
}
static void
-initialize_export (GrIngredientsExporter *exporter) {
+initialize_export (GrIngredientsExporter *exporter)
+{
get_access_token (exporter);
- if (exporter->project_id == NULL)
+ if (!exporter->project_id)
{
get_project_id (exporter);
}
@@ -491,7 +560,6 @@ show_export_dialog (GrIngredientsExporter *exporter)
GtkWidget *dialog;
GObject *add_service;
-
builder = gtk_builder_new_from_resource ("/org/gnome/Recipes/ingredients-exporter-dialog.ui");
dialog = GTK_WIDGET (gtk_builder_get_object (builder, "dialog"));
exporter->todoist_row = GTK_WIDGET (gtk_builder_get_object (builder, "todoist_account_row"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]