summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2020-10-27 16:24:39 +0100
committerAlexander Larsson <alexl@redhat.com>2020-10-27 16:27:22 +0100
commit822c8857de26d629096c24152977a8a52e69592e (patch)
tree90e2c380d7a1ea3925f550f5a2664685b15155d9
parent5d2d1e736b690f479ba7e49d9d16c07d6e1539b2 (diff)
downloadflatpak-822c8857de26d629096c24152977a8a52e69592e.tar.gz
table printer: Add some helpers
Allow looking up pre-existing rows (by key) and appending to existing cells.
-rw-r--r--app/flatpak-table-printer.c65
-rw-r--r--app/flatpak-table-printer.h11
2 files changed, 71 insertions, 5 deletions
diff --git a/app/flatpak-table-printer.c b/app/flatpak-table-printer.c
index 271d7efc..a6ab92b4 100644
--- a/app/flatpak-table-printer.c
+++ b/app/flatpak-table-printer.c
@@ -85,6 +85,7 @@ struct FlatpakTablePrinter
{
GPtrArray *columns;
GPtrArray *rows;
+ GHashTable *rows_ht;
char *key;
GPtrArray *current;
int n_columns;
@@ -97,6 +98,7 @@ flatpak_table_printer_new (void)
printer->columns = g_ptr_array_new_with_free_func (free_column);
printer->rows = g_ptr_array_new_with_free_func ((GDestroyNotify) free_row);
+ printer->rows_ht = g_hash_table_new (g_str_hash, g_str_equal);
printer->current = g_ptr_array_new_with_free_func (free_cell);
return printer;
@@ -107,6 +109,7 @@ flatpak_table_printer_free (FlatpakTablePrinter *printer)
{
g_ptr_array_free (printer->columns, TRUE);
g_ptr_array_free (printer->rows, TRUE);
+ g_hash_table_destroy (printer->rows_ht);
g_ptr_array_free (printer->current, TRUE);
g_free (printer->key);
g_free (printer);
@@ -222,6 +225,14 @@ flatpak_table_printer_add_column (FlatpakTablePrinter *printer,
}
void
+flatpak_table_printer_take_column (FlatpakTablePrinter *printer,
+ char *text)
+{
+ flatpak_table_printer_add_aligned_column (printer, text, -1);
+ g_free (text);
+}
+
+void
flatpak_table_printer_add_column_len (FlatpakTablePrinter *printer,
const char *text,
gsize len)
@@ -302,10 +313,22 @@ flatpak_table_printer_sort (FlatpakTablePrinter *printer, GCompareFunc cmp)
g_ptr_array_sort_with_data (printer->rows, cmp_row, cmp);
}
+int
+flatpak_table_printer_lookup_row (FlatpakTablePrinter *printer, const char *key)
+{
+ gpointer value;
+
+ if (g_hash_table_lookup_extended (printer->rows_ht, key, NULL, &value))
+ return GPOINTER_TO_INT(value);
+
+ return -1;
+}
+
void
flatpak_table_printer_finish_row (FlatpakTablePrinter *printer)
{
Row *row;
+ int row_nr = flatpak_table_printer_get_current_row (printer);
if (printer->current->len == 0)
return; /* Ignore empty rows */
@@ -315,6 +338,8 @@ flatpak_table_printer_finish_row (FlatpakTablePrinter *printer)
row->cells = g_steal_pointer (&printer->current);
row->key = g_steal_pointer (&printer->key);
g_ptr_array_add (printer->rows, row);
+ if (row->key)
+ g_hash_table_insert (printer->rows_ht, row->key, GINT_TO_POINTER (row_nr));
printer->current = g_ptr_array_new_with_free_func (free_cell);
}
@@ -706,10 +731,12 @@ set_cell (FlatpakTablePrinter *printer,
int r,
int c,
const char *text,
- int align)
+ int align,
+ int append)
{
Row *row;
Cell *cell;
+ char *old;
row = (Row *) g_ptr_array_index (printer->rows, r);
@@ -718,9 +745,19 @@ set_cell (FlatpakTablePrinter *printer,
cell = (Cell *) g_ptr_array_index (row->cells, c);
g_assert (cell);
- g_free (cell->text);
- cell->text = g_strdup (text);
+ old = cell->text;
+ if (old != NULL && append)
+ {
+ if (append == 2 && *old != 0)
+ cell->text = g_strconcat (old, ", ", text, NULL);
+ else
+ cell->text = g_strconcat (old, text, NULL);
+ }
+ else
+ cell->text = g_strdup (text);
cell->align = align;
+
+ g_free (old);
}
void
@@ -729,7 +766,25 @@ flatpak_table_printer_set_cell (FlatpakTablePrinter *printer,
int c,
const char *text)
{
- set_cell (printer, r, c, text, -1);
+ set_cell (printer, r, c, text, -1, 0);
+}
+
+void
+flatpak_table_printer_append_cell (FlatpakTablePrinter *printer,
+ int r,
+ int c,
+ const char *text)
+{
+ set_cell (printer, r, c, text, -1, 1);
+}
+
+void
+flatpak_table_printer_append_cell_with_comma (FlatpakTablePrinter *printer,
+ int r,
+ int c,
+ const char *text)
+{
+ set_cell (printer, r, c, text, -1, 2);
}
void
@@ -744,7 +799,7 @@ flatpak_table_printer_set_decimal_cell (FlatpakTablePrinter *printer,
if (decimal)
align = decimal - text;
- set_cell (printer, r, c, text, align);
+ set_cell (printer, r, c, text, align, 0);
}
void
diff --git a/app/flatpak-table-printer.h b/app/flatpak-table-printer.h
index 8a293bbe..d36c9548 100644
--- a/app/flatpak-table-printer.h
+++ b/app/flatpak-table-printer.h
@@ -37,6 +37,8 @@ void flatpak_table_printer_set_columns (FlatpakTablePrinter *prin
gboolean defaults);
void flatpak_table_printer_add_column (FlatpakTablePrinter *printer,
const char *text);
+void flatpak_table_printer_take_column (FlatpakTablePrinter *printer,
+ char *text);
void flatpak_table_printer_add_aligned_column (FlatpakTablePrinter *printer,
const char *text,
int align);
@@ -57,6 +59,7 @@ void flatpak_table_printer_set_key (FlatpakTablePrinter *printer,
void flatpak_table_printer_finish_row (FlatpakTablePrinter *printer);
void flatpak_table_printer_sort (FlatpakTablePrinter *printer,
GCompareFunc cmp);
+int flatpak_table_printer_lookup_row (FlatpakTablePrinter *printer, const char *key);
void flatpak_table_printer_print (FlatpakTablePrinter *printer);
void flatpak_table_printer_print_full (FlatpakTablePrinter *printer,
int skip,
@@ -68,6 +71,14 @@ void flatpak_table_printer_set_cell (FlatpakTablePrinter *printer
int row,
int col,
const char *cell);
+void flatpak_table_printer_append_cell (FlatpakTablePrinter *printer,
+ int row,
+ int col,
+ const char *cell);
+void flatpak_table_printer_append_cell_with_comma (FlatpakTablePrinter *printer,
+ int row,
+ int col,
+ const char *cell);
void flatpak_table_printer_set_decimal_cell (FlatpakTablePrinter *printer,
int row,
int col,