aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/mmcli-output.c74
1 files changed, 57 insertions, 17 deletions
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c
index 6da8ac0d..48cadee8 100644
--- a/cli/mmcli-output.c
+++ b/cli/mmcli-output.c
@@ -358,6 +358,7 @@ typedef struct {
OutputItem base;
gchar **values;
gboolean multiline;
+ gboolean is_object;
} OutputItemMultiple;
typedef struct {
@@ -419,7 +420,8 @@ output_item_new_take_single (MmcF field,
static void
output_item_new_take_multiple (MmcF field,
gchar **values,
- gboolean multiline)
+ gboolean multiline,
+ gboolean is_object)
{
OutputItemMultiple *item;
@@ -427,6 +429,7 @@ output_item_new_take_multiple (MmcF field,
item->base.field = field;
item->base.type = VALUE_TYPE_MULTIPLE;
item->multiline = multiline;
+ item->is_object = is_object;
if (values && (g_strv_length (values) == 1) && filter_out_value (values[0]))
g_strfreev (values);
@@ -467,7 +470,7 @@ mmcli_output_string_list (MmcF field,
g_strstrip (split[i]);
}
- output_item_new_take_multiple (field, split, FALSE);
+ output_item_new_take_multiple (field, split, FALSE, FALSE);
}
void
@@ -491,7 +494,7 @@ mmcli_output_string_multiline (MmcF field,
g_strstrip (split[i]);
}
- output_item_new_take_multiple (field, split, TRUE);
+ output_item_new_take_multiple (field, split, TRUE, FALSE);
}
void
@@ -507,7 +510,7 @@ mmcli_output_string_array (MmcF field,
const gchar **strv,
gboolean multiline)
{
- output_item_new_take_multiple (field, g_strdupv ((gchar **)strv), multiline);
+ output_item_new_take_multiple (field, g_strdupv ((gchar **)strv), multiline, FALSE);
}
void
@@ -515,7 +518,7 @@ mmcli_output_string_array_take (MmcF field,
gchar **strv,
gboolean multiline)
{
- output_item_new_take_multiple (field, strv, multiline);
+ output_item_new_take_multiple (field, strv, multiline, FALSE);
}
void
@@ -551,7 +554,7 @@ mmcli_output_string_array_multiline_take (MmcF field,
merged = (gchar **)g_ptr_array_free (pointers, FALSE);
}
- output_item_new_take_multiple (field, merged, TRUE);
+ output_item_new_take_multiple (field, merged, TRUE, FALSE);
}
void
@@ -703,6 +706,8 @@ mmcli_output_sim_slots (gchar **sim_slot_paths,
/******************************************************************************/
/* (Custom) Network scan output */
+static gchar *json_strescape (const gchar *str);
+
static gchar *
build_network_info (MMModem3gppNetwork *network)
{
@@ -719,18 +724,49 @@ build_network_info (MMModem3gppNetwork *network)
access_technologies = mm_modem_access_technology_build_string_from_mask (mm_modem_3gpp_network_get_access_technology (network));
availability = mm_modem_3gpp_network_availability_get_string (mm_modem_3gpp_network_get_availability (network));
- if (selected_type == MMC_OUTPUT_TYPE_HUMAN)
+ if (selected_type == MMC_OUTPUT_TYPE_HUMAN) {
out = g_strdup_printf ("%s - %s (%s, %s)",
operator_code ? operator_code : "code n/a",
operator_name ? operator_name : "name n/a",
access_technologies,
availability);
- else
+ } else if (selected_type == MMC_OUTPUT_TYPE_JSON) {
+ GString *str;
+ gchar *escape;
+
+ str = g_string_new (NULL);
+
+ g_string_append_printf (str, "{");
+
+ escape = json_strescape (operator_code);
+ g_string_append_printf (str, "\"operator-code\":\"%s\"", escape ? escape: "--");
+ g_free (escape);
+ g_string_append_printf (str, ",");
+
+ escape = json_strescape (operator_name);
+ g_string_append_printf (str, "\"operator-name\":\"%s\"", escape ? escape: "--");
+ g_free (escape);
+ g_string_append_printf (str, ",");
+
+ escape = json_strescape (access_technologies);
+ g_string_append_printf (str, "\"access-technologies\":\"%s\"", escape);
+ g_free (escape);
+ g_string_append_printf (str, ",");
+
+ escape = json_strescape (availability);
+ g_string_append_printf (str, "\"availability\":\"%s\"", escape);
+ g_free (escape);
+
+ g_string_append_printf (str, "}");
+
+ out = g_string_free (str, FALSE);
+ } else {
out = g_strdup_printf ("operator-code: %s, operator-name: %s, access-technologies: %s, availability: %s",
operator_code ? operator_code : "--",
operator_name ? operator_name : "--",
access_technologies,
availability);
+ }
g_free (access_technologies);
return out;
@@ -757,7 +793,7 @@ mmcli_output_scan_networks (GList *network_list)
if (selected_type == MMC_OUTPUT_TYPE_HUMAN && !networks)
output_item_new_take_single (MMC_F_3GPP_SCAN_NETWORKS, g_strdup ("n/a"));
else
- output_item_new_take_multiple (MMC_F_3GPP_SCAN_NETWORKS, networks, TRUE);
+ output_item_new_take_multiple (MMC_F_3GPP_SCAN_NETWORKS, networks, TRUE, TRUE);
}
/******************************************************************************/
@@ -849,7 +885,7 @@ mmcli_output_firmware_list (GList *firmware_list,
if (selected_type == MMC_OUTPUT_TYPE_HUMAN && !firmwares)
output_item_new_take_single (MMC_F_FIRMWARE_LIST, g_strdup ("n/a"));
else
- output_item_new_take_multiple (MMC_F_FIRMWARE_LIST, firmwares, TRUE);
+ output_item_new_take_multiple (MMC_F_FIRMWARE_LIST, firmwares, TRUE, FALSE);
}
/******************************************************************************/
@@ -891,7 +927,7 @@ mmcli_output_pco_list (GList *pco_list)
}
g_ptr_array_add (aux, NULL);
- output_item_new_take_multiple (MMC_F_3GPP_PCO, (gchar **) g_ptr_array_free (aux, FALSE), TRUE);
+ output_item_new_take_multiple (MMC_F_3GPP_PCO, (gchar **) g_ptr_array_free (aux, FALSE), TRUE, FALSE);
}
/******************************************************************************/
@@ -999,7 +1035,7 @@ output_profile_list (MmcF field,
if (selected_type == MMC_OUTPUT_TYPE_HUMAN && !profiles)
output_item_new_take_single (field, g_strdup ("n/a"));
else
- output_item_new_take_multiple (field, profiles, TRUE);
+ output_item_new_take_multiple (field, profiles, TRUE, FALSE);
}
void
@@ -1042,7 +1078,7 @@ mmcli_output_cell_info (GList *cell_info_list)
if (selected_type == MMC_OUTPUT_TYPE_HUMAN && !cell_infos)
output_item_new_take_single (MMC_F_CELL_INFO, g_strdup ("n/a"));
else
- output_item_new_take_multiple (MMC_F_CELL_INFO, cell_infos, TRUE);
+ output_item_new_take_multiple (MMC_F_CELL_INFO, cell_infos, TRUE, FALSE);
}
/******************************************************************************/
@@ -1490,13 +1526,17 @@ dump_output_json (void)
g_print ("\"%s\":[", current_path[cur_dlen]);
for (i = 0; i < n; i++) {
- gchar *escaped;
+ if (multiple->is_object) {
+ g_print ("%s", multiple->values[i]);
+ } else {
+ gchar *escaped;
- escaped = json_strescape (multiple->values[i]);
- g_print("\"%s\"", escaped);
+ escaped = json_strescape (multiple->values[i]);
+ g_print ("\"%s\"", escaped);
+ g_free (escaped);
+ }
if (i < n - 1)
g_print(",");
- g_free (escaped);
}
g_print("]");
} else