From cc727e972f7fdc871ee1f42cf014151b67422bf0 Mon Sep 17 00:00:00 2001 From: nirav Date: Tue, 26 Mar 2019 07:54:56 +0530 Subject: Update login flow and timeline window --- src/account.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/account.c (limited to 'src/account.c') diff --git a/src/account.c b/src/account.c new file mode 100644 index 0000000..c407d56 --- /dev/null +++ b/src/account.c @@ -0,0 +1,92 @@ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include "account.h" +#include "log.h" + +struct account *account_from_json(const char *json_data) +{ + struct account *a; + json_t *root; + json_error_t error; + + root = json_loads(json_data, 0, &error); + if (!root) { + log_msg(LOG_WARNING, "account_from_json", "json parse error: line %d: %s", + error.line, error.text); + return NULL; + } + + a = account_from_json_t(root); + json_decref(root); + return a; +} + +struct account *account_from_json_t(const json_t *root) +{ + struct account *a; + if (!root) { + log_msg(LOG_WARNING, "account_from_json_t", "json data is null"); + return NULL; + } + + if (!json_is_object(root)) { + log_msg(LOG_WARNING, "account_from_json_t", "json root is not object"); + return NULL; + } + + a = calloc(1, sizeof(struct account)); + if (!a) { + err(1, "account_from_json_t"); + return NULL; + } + + json_t *id = json_object_get(root, "id"); + if (json_is_string(id)) { + a->id = strdup(json_string_value(id)); + } + + json_t *username = json_object_get(root, "username"); + if (json_is_string(username)) { + a->username = strdup(json_string_value(username)); + } + + json_t *acct = json_object_get(root, "acct"); + if (json_is_string(acct)) { + a->acct = strdup(json_string_value(acct)); + } + + json_t *display_name = json_object_get(root, "display_name"); + if (json_is_string(display_name)) { + a->display_name = strdup(json_string_value(display_name)); + } + + return a; +} + +void account_free(struct account *a) +{ + if (a->id) + free(a->id); + if (a->username) + free(a->username); + if (a->acct) + free(a->acct); + if (a->display_name) + free(a->display_name); + if (a->note) + free(a->note); + if (a->url) + free(a->url); + if (a->avatar) + free(a->avatar); + if (a->avatar_static) + free(a->avatar_static); + if (a->header) + free(a->header); + if (a->header_static) + free(a->header_static); + free(a); +} + -- cgit v1.2.3