diff scictl.c @ 18:600204c31bf0

misc: refactor
author David Demelier <markand@malikania.fr>
date Tue, 12 Jul 2022 20:20:51 +0200
parents 3051ef92173a
children
line wrap: on
line diff
--- a/scictl.c	Wed Oct 06 16:22:23 2021 +0200
+++ b/scictl.c	Tue Jul 12 20:20:51 2022 +0200
@@ -81,17 +81,69 @@
 	return console;
 }
 
+static size_t
+extract(char *s, size_t w, size_t n, void *data)
+{
+	return fwrite(s, w, n, data);
+}
+
+static json_t *
+parse(const char *data)
+{
+	json_t *doc;
+	json_error_t err;
+
+	if (!(json_loads(doc, 0, &err)))
+		die("abort: unable to parse JSON: %s\n", err.text);
+
+	return doc;
+}
+
+static json_t *
+get(const char *url)
+{
+	CURL *curl;
+	CURLcode code;
+	FILE *fp;
+	char buf[HTTP_BUF_MAX];
+	long ret;
+
+	if (!(fp = fmemopen(buf, sizeof (buf), "w")))
+		die("abort: %s", strerror(errno));
+
+	curl = curl_easy_init();
+	curl_easy_setopt(curl, CURLOPT_URL, url);
+	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, extract);
+	curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
+	curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3L);
+	code = curl_easy_perform(curl);
+
+	if (code != CURLE_OK)
+		die("abort: %s", curl_easy_strerror(code));
+
+	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &ret);
+
+	if (ret != 200)
+		die("abort: HTTP %ld\n", ret);
+
+	curl_easy_cleanup(curl);
+	fclose(fp);
+
+	return parse(buf);
+}
+
 static struct req
 cmd_job_add(int argc, char **argv)
 {
 	struct job job = {0};
 	struct project project = {0};
-	struct req rp, rj;
 
 	if (argc < 2)
 		usage();
 
-	if ((rp = req_project_find(&project, argv[0])).status)
+	project.name = argv[0];
+
+	if (_project_find(&project, argv[0])).status)
 		return rp;
 
 	job.project_id = project.id;