[gtranslator/dl-integration: 8/18] dl-integration: Add DL module, check teams
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtranslator/dl-integration: 8/18] dl-integration: Add DL module, check teams
- Date: Sat, 23 Mar 2019 09:27:59 +0000 (UTC)
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]