summaryrefslogtreecommitdiffstats
path: root/src/rest.c
diff options
context:
space:
mode:
authorAlejandro Sirgo Rica <asirgo@soleta.eu>2024-11-07 09:41:55 +0100
committerAlejandro Sirgo Rica <asirgo@soleta.eu>2024-11-11 12:29:11 +0100
commit892a8fa2e5a60f2390c74d6bf0599e942a80983c (patch)
treecfd1492a95d45ee8d2284d9f88fe109aa936826b /src/rest.c
parent55179decb79c7bf02662b8287efdd948cf006e94 (diff)
rest: update GET /oglive/list to include oglive data from database
Append oglive info at the end of the array of the "oglive" entry. Each entry defines the name of the oglive and the creation date.
Diffstat (limited to 'src/rest.c')
-rw-r--r--src/rest.c58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/rest.c b/src/rest.c
index e3d9aa7..c593292 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -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;