diff options
Diffstat (limited to 'src/rest.c')
-rw-r--r-- | src/rest.c | 58 |
1 files changed, 57 insertions, 1 deletions
@@ -4607,8 +4607,12 @@ static int og_cmd_oglive_list(char *buffer_reply) struct og_buffer og_buffer = { .data = buffer_reply }; + + const char *msglog, *live_name, *live_datetime; + json_t *root, *live_entry, *oglive_array; json_error_t json_err; - json_t *root; + struct og_dbi *dbi; + dbi_result result; root = json_load_file(OG_LIVE_JSON_FILE_PATH, 0, &json_err); if (!root) { @@ -4617,6 +4621,58 @@ static int og_cmd_oglive_list(char *buffer_reply) return -1; } + oglive_array = json_object_get(root, "oglive"); + if (!oglive_array || !json_is_array(oglive_array)) { + syslog(LOG_ERR, "Expected 'oglive' to be a JSON array\n"); + json_decref(root); + return -1; + } + + dbi = og_dbi_open(&ogconfig.db); + if (!dbi) { + syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", + __func__, __LINE__); + json_decref(root); + return -1; + } + + result = dbi_conn_queryf(dbi->conn, + "SELECT name, " + "DATE_FORMAT(creation_date, '%%a %%b %%d %%H:%%i:%%s %%Y') AS formatted_date " + "FROM oglive"); + + if (!result) { + dbi_conn_error(dbi->conn, &msglog); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + og_dbi_close(dbi); + json_decref(root); + return -1; + } + + while (dbi_result_next_row(result) > 0) { + live_name = dbi_result_get_string(result, "name"); + live_datetime = dbi_result_get_string(result, "formatted_date"); + + live_entry = json_object(); + if (!live_entry) { + syslog(LOG_ERR, "Cannot allocate JSON object (%s:%d)\n", + __func__, __LINE__); + dbi_result_free(result); + og_dbi_close(dbi); + json_decref(root); + return -1; + } + + json_object_set_new(live_entry, "name", json_string(live_name)); + json_object_set_new(live_entry, "date", json_string(live_datetime)); + + json_array_append_new(oglive_array, live_entry); + } + + dbi_result_free(result); + og_dbi_close(dbi); + if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); return -1; |