[gtranslator/dl-integration: 8/18] dl-integration: Add DL module, check teams



commit 5c20fae6f1b32c9453afe3dabf5c454cda654764
Author: Teja Cetinski <teja cetinski eu>
Date:   Wed Jan 9 21:30:50 2019 +0100

    dl-integration: Add DL module, check teams
    
    Add module combobox, load and parse JSON, create list store/model.
    Check for error in teams parse function.

 src/gtr-dl-teams.c | 123 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 102 insertions(+), 21 deletions(-)
---
diff --git a/src/gtr-dl-teams.c b/src/gtr-dl-teams.c
index ef228d99..ef7f9d42 100644
--- a/src/gtr-dl-teams.c
+++ b/src/gtr-dl-teams.c
@@ -36,8 +36,10 @@ typedef struct
   GtkWidget *open_button;
   GtkWidget *dl_button;
   GtkWidget *teams_combobox;
+  GtkWidget *modules_combobox;
 
   GtkListStore *teams_store;
+  GtkListStore *modules_store;
 
   GtrWindow *main_window;
 } GtrDlTeamsPrivate;
@@ -52,10 +54,10 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtrDlTeams, gtr_dl_teams, GTK_TYPE_BIN)
 static void team_add_cb (GtkButton *btn, GtrDlTeams *self);
 
 static void
-element_cb (JsonArray *array,
-            guint      index,
-            JsonNode  *element,
-            gpointer   data)
+gtr_dl_teams_list_add (JsonArray *array,
+                       guint      index,
+                       JsonNode  *element,
+                       gpointer   data)
 {
   JsonObject *object = json_node_get_object (element);
 
@@ -69,12 +71,26 @@ element_cb (JsonArray *array,
 }
 
 static void
-gtr_dl_teams_parse_json (GObject *object,
-                         GAsyncResult *result,
-                         gpointer user_data)
+gtr_dl_modules_list_add (JsonArray *array,
+                         guint      index,
+                         JsonNode  *element,
+                         gpointer   data)
+{
+  JsonObject *object = json_node_get_object (element);
+  JsonObject *fieldsNode = json_object_get_object_member (object, "fields");
+
+  gtk_list_store_insert_with_values(data, NULL, -1,0, json_object_get_string_member (fieldsNode, "name"),
+        -1);
+}
+
+static void
+gtr_dl_teams_parse_teams_json (GObject *object,
+                               GAsyncResult *result,
+                               gpointer user_data)
 {
   g_autoptr(JsonParser) parser = json_parser_new ();
   g_autoptr(GInputStream) stream;
+  GError *error = NULL;
   JsonNode *node = NULL;
   JsonArray *array = NULL;
 
@@ -82,16 +98,63 @@ gtr_dl_teams_parse_json (GObject *object,
   GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (widget);
 
   /* Parse JSON */
-  stream = soup_session_send_finish (SOUP_SESSION (object), result, NULL);
-  json_parser_load_from_stream (parser, stream, NULL, NULL);
+  stream = soup_session_send_finish (SOUP_SESSION (object), result, &error);
+
+  if (error)
+    {
+      // todo: display text in UI
+      //printf("error! code: %d, message: %s\n", error->code, error->message);
+    }
+  else
+    {
+      json_parser_load_from_stream (parser, stream, NULL, NULL);
+
+      node = json_parser_get_root (parser);
+      array = json_node_get_array (node);
+
+      /* Fill teams list store with values from JSON and set store as combo box model */
+      json_array_foreach_element (array, gtr_dl_teams_list_add, GTK_TREE_MODEL (priv->teams_store));
+
+      gtk_combo_box_set_model (GTK_COMBO_BOX (priv->teams_combobox), GTK_TREE_MODEL (priv->teams_store));
+    }
+}
+
+static void
+gtr_dl_teams_parse_modules_json (GObject *object,
+                                 GAsyncResult *result,
+                                 gpointer user_data)
+{
+  g_autoptr(JsonParser) parser = json_parser_new ();
+  g_autoptr(GInputStream) stream;
+       GError *error = NULL;
 
-  node = json_parser_get_root (parser);
-  array = json_node_get_array (node);
+  JsonNode *node = NULL;
+  JsonArray *array = NULL;
 
-  /* Fill teams list store with values from JSON and set store as combo box model */
-  json_array_foreach_element (array, element_cb, GTK_TREE_MODEL (priv->teams_store));
+  GtrDlTeams *widget = GTR_DL_TEAMS (user_data);
+  GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (widget);
 
-  gtk_combo_box_set_model (GTK_COMBO_BOX (priv->teams_combobox), GTK_TREE_MODEL (priv->teams_store));
+  /* Parse JSON */
+  stream = soup_session_send_finish (SOUP_SESSION (object), result, &error);
+  if (error)
+    {
+      // todo: display text in UI
+      //printf("error! code: %d, message: %s\n", error->code, error->message);
+    }
+  else
+    {
+      json_parser_load_from_stream (parser, stream, NULL, NULL);
+
+      node = json_parser_get_root (parser);
+      array = json_node_get_array (node);
+
+      /* Fill modules list store with values from JSON and set store as combo box model */
+      json_array_foreach_element (array, gtr_dl_modules_list_add, GTK_TREE_MODEL (priv->modules_store));
+
+      gtk_combo_box_set_model (GTK_COMBO_BOX (priv->modules_combobox), GTK_TREE_MODEL (priv->modules_store));
+
+      gtk_widget_set_sensitive (priv->modules_combobox, TRUE);
+    }
 }
 
 static void
@@ -101,7 +164,12 @@ gtr_dl_teams_load_json (GtkButton *btn,
   /* Get team list JSON from DL */
   g_autoptr(SoupSession) session = soup_session_new ();
   g_autoptr(SoupMessage) message = soup_message_new ("GET", "https://l10n.gnome.org/teams/json";);
-  soup_session_send_async (session, message, NULL, gtr_dl_teams_parse_json, self);
+  soup_session_send_async (session, message, NULL, gtr_dl_teams_parse_teams_json, self);
+
+  /* Get module list JSON from DL */
+  g_autoptr(SoupSession) session_modules = soup_session_new ();
+  g_autoptr(SoupMessage) message_modules = soup_message_new ("GET", "https://l10n.gnome.org/module/json";);
+  soup_session_send_async (session_modules, message_modules, NULL, gtr_dl_teams_parse_modules_json, self);
 }
 
 static void
@@ -145,22 +213,35 @@ gtr_dl_teams_init (GtrDlTeams *self)
 
   priv->main_window = NULL;
 
-  /* Init teams list store */
+  /* Init teams and modules list stores */
   priv->teams_store = gtk_list_store_new (1, G_TYPE_STRING);
+  priv->modules_store = gtk_list_store_new (1, G_TYPE_STRING);
 
-  /* Add a combo box for DL teams */
+  /* Add combo boxes for DL teams and modules */
   priv->teams_combobox = gtk_combo_box_new ();
 
-  column = gtk_cell_renderer_text_new();
-  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(priv->teams_combobox), column, TRUE);
+  column = gtk_cell_renderer_text_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(priv->teams_combobox), column, TRUE);
 
-  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(priv->teams_combobox), column,
+  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(priv->teams_combobox), column,
                                  "text", 0,
                                  //"text", 1,
                                  NULL);
 
   gtk_container_add (GTK_CONTAINER (priv->main_box), priv->teams_combobox);
-  gtk_widget_show (priv->teams_combobox);
+
+  priv->modules_combobox = gtk_combo_box_new ();
+
+  column = gtk_cell_renderer_text_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(priv->modules_combobox), column, TRUE);
+
+  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(priv->modules_combobox), column,
+                                 "text", 0,
+                                 //"text", 1,
+                                 NULL);
+
+  gtk_container_add (GTK_CONTAINER (priv->main_box), priv->modules_combobox);
+  gtk_widget_set_sensitive (priv->modules_combobox, FALSE);
 
   g_signal_connect (priv->open_button,
                     "clicked",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]