afm-udb: improve comment
[src/app-framework-main.git] / src / afm-udb.c
index 718aa5c..586c429 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright 2015, 2016, 2017 IoT.bzh
+ Copyright (C) 2015-2018 IoT.bzh
 
  author: José Bollo <jose.bollo@iot.bzh>
 
@@ -78,6 +78,11 @@ struct afm_updt {
        struct afm_apps applications;
 };
 
+/*
+ * The default language
+ */
+static char *default_lang;
+
 /*
  * Release the data of the afm_apps object 'apps'.
  */
@@ -112,7 +117,7 @@ static int append_field(
                        array = json_object_new_array();
                        if (!array)
                                goto error;
-                       json_object_array_add(array, item);
+                       json_object_array_add(array, json_object_get(item));
                        json_object_object_add(object, name, array);
                }
                json_object_array_add(array, data);
@@ -460,15 +465,25 @@ int afm_udb_update(struct afm_udb *afudb)
        tmp = afudb->applications;
        afudb->applications = updt.applications;
        apps_put(&tmp);
-       afm_udb_addref(afudb);
+       afm_udb_unref(afudb);
        return 0;
 
 error:
        apps_put(&updt.applications);
-       afm_udb_addref(afudb);
+       afm_udb_unref(afudb);
        return -1;
 }
 
+/*
+ * set the default language to 'lang'
+ */
+void afm_udb_set_default_lang(const char *lang)
+{
+       char *oldval = default_lang;
+       default_lang = lang ? strdup(lang) : NULL;
+       free(oldval);
+}
+
 /*
  * Get the list of the applications private data of the afm_udb object 'afudb'.
  * The list is returned as a JSON-array that must be released using
@@ -486,7 +501,7 @@ struct json_object *afm_udb_applications_private(struct afm_udb *afudb, int uid)
  * 'json_object_put'.
  * Returns NULL in case of error.
  */
-struct json_object *afm_udb_applications_public(struct afm_udb *afudb, int uid)
+struct json_object *afm_udb_applications_public(struct afm_udb *afudb, int uid, const char *lang)
 {
        return json_object_get(afudb->applications.pubarr);
 }
@@ -496,7 +511,7 @@ struct json_object *afm_udb_applications_public(struct afm_udb *afudb, int uid)
  * It returns a JSON-object that must be released using 'json_object_put'.
  * Returns NULL in case of error.
  */
-static struct json_object *get_no_case(struct json_object *object, const char *id, int uid)
+static struct json_object *get_no_case(struct json_object *object, const char *id, int uid, const char *lang)
 {
        struct json_object *result;
        struct json_object_iter i;
@@ -520,7 +535,7 @@ static struct json_object *get_no_case(struct json_object *object, const char *i
  */
 struct json_object *afm_udb_get_application_private(struct afm_udb *afudb, const char *id, int uid)
 {
-       return get_no_case(afudb->applications.prvobj, id, uid);
+       return get_no_case(afudb->applications.prvobj, id, uid, NULL);
 }
 
 /*
@@ -529,9 +544,9 @@ struct json_object *afm_udb_get_application_private(struct afm_udb *afudb, const
  * Returns NULL in case of error.
  */
 struct json_object *afm_udb_get_application_public(struct afm_udb *afudb,
-                                                       const char *id, int uid)
+                                                       const char *id, int uid, const char *lang)
 {
-       return get_no_case(afudb->applications.pubobj, id, uid);
+       return get_no_case(afudb->applications.pubobj, id, uid, lang);
 }