X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgt-config.c;h=453f295f8fa375f2d304b80bdbbe0ee64ebf436e;hb=86be207174efcb84f6eb22946724a25a3cd9b56c;hp=77358fd1dbe07ceebbd758dbecdf1f6d2a74a327;hpb=63f8720a3e610c0dc37bda3138d2e8de98ec1a78;p=src%2Fapp-framework-main.git diff --git a/src/wgt-config.c b/src/wgt-config.c index 77358fd..453f295 100644 --- a/src/wgt-config.c +++ b/src/wgt-config.c @@ -1,5 +1,7 @@ /* - Copyright 2015 IoT.bzh + Copyright 2015, 2016, 2017 IoT.bzh + + author: José Bollo Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +18,6 @@ #include #include -#include #include #include @@ -24,47 +25,58 @@ #include #include +#include "verbose.h" #include "wgt.h" #include "wgt-config.h" -const char wgt_config_string_xml_file[] = "config.xml"; -const char wgt_config_string_name[] = "name"; -const char wgt_config_string_description[] = "description"; const char wgt_config_string_author[] = "author"; -const char wgt_config_string_license[] = "license"; -const char wgt_config_string_icon[] = "icon"; const char wgt_config_string_content[] = "content"; +const char wgt_config_string_defaultlocale[] = "defaultlocale"; +const char wgt_config_string_description[] = "description"; +const char wgt_config_string_email[] = "email"; +const char wgt_config_string_encoding[] = "encoding"; const char wgt_config_string_feature[] = "feature"; +const char wgt_config_string_height[] = "height"; +const char wgt_config_string_href[] = "href"; +const char wgt_config_string_icon[] = "icon"; +const char wgt_config_string_id[] = "id"; +const char wgt_config_string_license[] = "license"; +const char wgt_config_string_name[] = "name"; +const char wgt_config_string_param[] = "param"; const char wgt_config_string_preference[] = "preference"; +const char wgt_config_string_readonly[] = "readonly"; +const char wgt_config_string_required[] = "required"; +const char wgt_config_string_short[] = "short"; +const char wgt_config_string_src[] = "src"; +const char wgt_config_string_type[] = "type"; +const char wgt_config_string_value[] = "value"; +const char wgt_config_string_version[] = "version"; +const char wgt_config_string_viewmodes[] = "viewmodes"; +const char wgt_config_string_widget[] = "widget"; const char wgt_config_string_width[] = "width"; -const char wgt_config_string_height[] = "height"; - +const char wgt_config_string_xml_file[] = "config.xml"; static struct wgt *configwgt = NULL; static xmlDocPtr configxml = NULL; static xmlNodePtr next(xmlNodePtr node, const char *type) { - while (node && node->type != XML_ELEMENT_NODE && strcmp(type, node->name)) + while (node && (node->type != XML_ELEMENT_NODE || strcmp(type, node->name))) node = node->next; return node; } static xmlNodePtr first(const char *type) { - xmlNodePtr root; - if (configxml) { - root = xmlDocGetRootElement(configxml); - if (root) - return next(root->children, type); - } - return NULL; + assert(configxml); + assert(xmlDocGetRootElement(configxml)); + return next(xmlDocGetRootElement(configxml)->children, type); } -static int scorelang(xmlNodePtr node) +static unsigned int scorelang(xmlNodePtr node) { char *lang = xmlNodeGetLang(node); - int score = wgt_locales_score(configwgt, lang); + unsigned int score = wgt_locales_score(configwgt, lang); xmlFree(lang); return score; } @@ -72,13 +84,13 @@ static int scorelang(xmlNodePtr node) static xmlNodePtr element_based_localisation(const char *type) { xmlNodePtr resu, elem; - int sr, s; + unsigned int sr, s; resu = first(type); if (resu) { sr = scorelang(resu); elem = next(resu->next, type); - while (resu) { + while (elem) { s = scorelang(elem); if (s < sr) { resu = elem; @@ -105,43 +117,57 @@ int wgt_config_open(struct wgt *wgt) assert(!configxml); fd = wgt_open_read(wgt, wgt_config_string_xml_file); if (fd < 0) { - syslog(LOG_ERR, "can't open config file %s", wgt_config_string_xml_file); + ERROR("can't open config file %s", wgt_config_string_xml_file); return fd; } configxml = xmlReadFd(fd, wgt_config_string_xml_file, NULL, 0); close(fd); if (configxml == NULL) { - syslog(LOG_ERR, "xml parse of config file %s failed", wgt_config_string_xml_file); + ERROR("xml parse of config file %s failed", wgt_config_string_xml_file); return -1; } + assert(xmlDocGetRootElement(configxml)); configwgt = wgt; return 0; } +xmlNodePtr wgt_config_widget() +{ + xmlNodePtr root; + assert(configxml); + root = xmlDocGetRootElement(configxml); + return strcmp(wgt_config_string_widget, root->name) ? NULL : root; +} + /* elements based on localisation */ xmlNodePtr wgt_config_name() { + assert(configxml); return element_based_localisation(wgt_config_string_name); } xmlNodePtr wgt_config_description() { + assert(configxml); return element_based_localisation(wgt_config_string_description); } xmlNodePtr wgt_config_license() { + assert(configxml); return element_based_localisation(wgt_config_string_license); } /* elements based on path localisation */ xmlNodePtr wgt_config_author() { + assert(configxml); return first(wgt_config_string_author); } xmlNodePtr wgt_config_content() { + assert(configxml); return first(wgt_config_string_content); } @@ -149,34 +175,57 @@ xmlNodePtr wgt_config_content() xmlNodePtr wgt_config_first_feature() { + assert(configxml); return first(wgt_config_string_feature); } xmlNodePtr wgt_config_next_feature(xmlNodePtr node) { + assert(configxml); + assert(node); return next(node->next, wgt_config_string_feature); } xmlNodePtr wgt_config_first_preference() { + assert(configxml); return first(wgt_config_string_preference); } xmlNodePtr wgt_config_next_preference(xmlNodePtr node) { + assert(configxml); + assert(node); return next(node->next, wgt_config_string_preference); } xmlNodePtr wgt_config_first_icon() { + assert(configxml); return first(wgt_config_string_icon); } xmlNodePtr wgt_config_next_icon(xmlNodePtr node) { + assert(configxml); + assert(node); return next(node->next, wgt_config_string_icon); } +xmlNodePtr wgt_config_first_param(xmlNodePtr node) +{ + assert(configxml); + assert(node); + return next(node->children, wgt_config_string_param); +} + +xmlNodePtr wgt_config_next_param(xmlNodePtr node) +{ + assert(configxml); + assert(node); + return next(node->next, wgt_config_string_param); +} + /* best sized icon */ static int score_dim(xmlNodePtr ref, xmlNodePtr x, const char *dim, int request) @@ -229,7 +278,7 @@ static int score_dim(xmlNodePtr ref, xmlNodePtr x, const char *dim, int request) return r; } -static int better_icon(xmlNodePtr ref, xmlNodePtr x, int width, int height) +static int is_better_icon(xmlNodePtr ref, xmlNodePtr x, int width, int height) { int sw = score_dim(ref, x, wgt_config_string_width, width); int sh = score_dim(ref, x, wgt_config_string_height, height); @@ -238,12 +287,13 @@ static int better_icon(xmlNodePtr ref, xmlNodePtr x, int width, int height) xmlNodePtr wgt_config_icon(int width, int height) { + assert(configxml); xmlNodePtr resu, icon; resu = wgt_config_first_icon(); icon = wgt_config_next_icon(resu); while (icon) { - if (better_icon(resu, icon, width, height)) + if (is_better_icon(resu, icon, width, height)) resu = icon; icon = wgt_config_next_icon(icon); }