Newer
Older
#include "dap_chain_plugins_manifest.h"
#undef LOG_TAG
#define LOG_TAG "dap_chain_plugins_manifest"
void dap_chain_plugins_list_char_delete_all(dap_chain_plugins_list_char_t *a_list){
dap_chain_plugins_list_char_t *l_element;
dap_chain_plugins_list_char_t *l_tmp;
LL_FOREACH_SAFE(a_list, l_element, l_tmp){
DAP_FREE(l_element->value);
LL_DELETE(a_list, l_element);
dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_new(const char *a_name, const char *a_version,
const dap_chain_plugins_list_char_t *a_dep,
const char *a_author,
const char *a_description){
dap_chain_plugins_list_manifest_t *l_man = (dap_chain_plugins_list_manifest_t*)DAP_NEW(dap_chain_plugins_list_manifest_t);
l_man->name = dap_strdup(a_name);
l_man->author = dap_strdup(a_author);
l_man->version = dap_strdup(a_version);
l_man->description = dap_strdup(a_description);
l_man->dependencys = NULL;

alexey.stratulat
committed
//copy informantion from dep to man->dependencys
int l_len_dep;
dap_chain_plugins_list_char_t *l_char_t;
LL_COUNT((dap_chain_plugins_list_char_t*)a_dep, l_char_t, l_len_dep);
LL_FOREACH((dap_chain_plugins_list_char_t*)a_dep, l_char_t){
LL_APPEND(l_man->dependencys, l_char_t);
l_man->dependencys = (dap_chain_plugins_list_char_t*)a_dep;
return l_man;
static dap_chain_plugins_list_char_t* JSON_array_to_dap_list_char(json_object *a_j_obj){
dap_chain_plugins_list_char_t *l_list = NULL;
dap_chain_plugins_list_char_t *l_element = NULL;
for (int i = 0; i < json_object_array_length(a_j_obj); i++){
l_element = (dap_chain_plugins_list_char_t*)DAP_NEW(dap_chain_plugins_list_char_t);
l_element->value = dap_strdup(json_object_get_string(json_object_array_get_idx(a_j_obj, i)));
LL_APPEND(l_list, l_element);

alexey.stratulat
committed
}

alexey.stratulat
committed
void dap_chain_plugins_manifest_list_create(){

alexey.stratulat
committed
int dap_chain_plugins_manifest_name_cmp(dap_chain_plugins_list_manifest_t *man, const char *name){
return dap_strcmp(man->name, name);
}

alexey.stratulat
committed
dap_chain_plugins_list_manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path){
//READ File in char
log_it(L_INFO, "Parse json file");
FILE *file = fopen(file_path, "rt");
if (file == NULL){
log_it(L_ERROR, "Error open manifest files along the way %s", file_path);
return NULL;
}
fseek(file, 0, SEEK_END);
size_t size_file = (size_t)ftell(file);
char *json = DAP_NEW_SIZE(char, size_file);
rewind(file);
fread(json, sizeof(char), size_file, file);
fclose(file);
//Parse JSON
json_object *j_obj = json_tokener_parse(json);
json_object *j_name = json_object_object_get(j_obj, "name");
json_object *j_version = json_object_object_get(j_obj, "version");
json_object *j_dependencys = json_object_object_get(j_obj, "dependencys");
json_object *j_author = json_object_object_get(j_obj, "author");
json_object *j_description = json_object_object_get(j_obj, "description");
const char *name, *version, *author, *description;
name = json_object_get_string(j_name);
version = json_object_get_string(j_version);
author = json_object_get_string(j_author);
description = json_object_get_string(j_description);

alexey.stratulat
committed
dap_chain_plugins_list_char_t *dep = JSON_array_to_dap_list_char(j_dependencys);
DAP_FREE(json);

alexey.stratulat
committed
dap_chain_plugins_list_char_t *tmp = NULL;
dap_chain_plugins_list_manifest_t *manifest = dap_chain_plugins_manifest_new(name, version, dep, author, description);
return manifest;
}

alexey.stratulat
committed
void dap_chain_plugins_manifest_list_add_manifest(dap_chain_plugins_list_manifest_t *man){

alexey.stratulat
committed
dap_chain_plugins_list_manifest_t* dap_chain_plugins_manifests_get_list(){
}
dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_list_get_name(const char *a_name){
dap_chain_plugins_list_manifest_t *l_element;
LL_SEARCH(s_manifests, l_element, a_name, dap_chain_plugins_manifest_name_cmp);
return l_element;
char* dap_chain_plugins_manifests_get_list_dependencyes(dap_chain_plugins_list_manifest_t *a_element){
if (a_element->dependencys == NULL) {
return NULL;
char *l_result = "";
dap_chain_plugins_list_char_t *l_el;
int l_max_count_list = 0;
LL_COUNT(a_element->dependencys, l_el, l_max_count_list);
int l_count_list = 1;
LL_FOREACH(a_element->dependencys, l_el){
if (l_count_list != l_max_count_list)
l_result = dap_strjoin(NULL, l_result, l_el->value, ", ", NULL);
l_result = dap_strjoin(NULL, l_result, l_el->value, NULL);
bool dap_chain_plugins_manifest_list_add_from_file(const char *a_file_path){
dap_chain_plugins_list_manifest_t *l_manifest = dap_chain_plugins_add_manifest_from_file(a_file_path);
if (l_manifest == NULL)
return false;
dap_chain_plugins_manifest_list_add_manifest(l_manifest);
return true;
}
bool dap_chain_plugins_manifest_list_delete_name(const char *a_name){
dap_chain_plugins_list_manifest_t *l_element;
LL_SEARCH(s_manifests, l_element, a_name, dap_chain_plugins_manifest_name_cmp);
if (l_element == NULL)
DAP_FREE(l_element->name);
DAP_FREE(l_element->version);
DAP_FREE(l_element->author);
DAP_FREE(l_element->description);
dap_chain_plugins_list_char_delete_all(l_element->dependencys);
LL_DELETE(s_manifests, l_element);
return true;
}
void dap_chain_plugins_manifest_list_delete_all(void){
dap_chain_plugins_list_manifest_t *l_element;
dap_chain_plugins_list_manifest_t *tmp;
LL_FOREACH_SAFE(s_manifests, l_element, tmp){
DAP_FREE(l_element->name);
DAP_FREE(l_element->version);
DAP_FREE(l_element->author);
DAP_FREE(l_element->description);
dap_chain_plugins_list_char_delete_all(l_element->dependencys);
LL_DELETE(s_manifests, l_element);