int dir_wd;
} vc_engine_inotify_s;
+typedef struct {
+ const char* before_lang;
+ const char* current_lang;
+} lang_cb_parameter_s;
+
+typedef struct {
+ const char *engine_appid;
+} engine_cb_parameter_s;
+
+typedef struct {
+ bool enable;
+} enabled_cb_parameter_s;
+
const char* vc_config_tag()
{
return TAG_VCCONFIG;
int __vc_config_mgr_print_engine_info();
int __vc_config_mgr_print_client_info();
+static gint __compare_uid_in_client_list(gconstpointer a, gconstpointer b)
+{
+ const vc_config_client_s *client_info = a;
+ uintptr_t ptr_uid = (uintptr_t)b;
+ unsigned int uid = ptr_uid;
+
+ if (NULL == client_info) {
+ return 1;
+ }
+
+ if (uid == client_info->uid) {
+ SLOG(LOG_DEBUG, vc_config_tag(), "Find client information of %d", uid);
+ return 0;
+ }
+
+ return 1;
+}
+
+static vc_config_client_s *__find_client_info(unsigned int uid)
+{
+ uintptr_t ptr_uid = uid;
+ GSList *target = g_slist_find_custom(g_config_client_list, (gconstpointer)ptr_uid, __compare_uid_in_client_list);
+
+ vc_config_client_s *result = NULL;
+ if (NULL != target) {
+ result = target->data;
+ }
+
+ return result;
+}
+
+static gint __compare_engine_id_in_engine_list(gconstpointer a, gconstpointer b)
+{
+ const vc_engine_info_s *engine_info = a;
+ const char *engine_id = b;
+
+ if (NULL == engine_id) {
+ return 1;
+ }
+
+ if (NULL == engine_info || NULL == engine_info->uuid) {
+ return 1;
+ }
+
+ SLOG(LOG_DEBUG, vc_config_tag(), "Compare engine(%s). Target(%s)", engine_info->uuid, engine_id);
+ return strcmp(engine_info->uuid, engine_id);
+}
+
+static vc_engine_info_s *__find_engine_info(const char *engine_id)
+{
+ GSList *target = g_slist_find_custom(g_engine_list, engine_id, __compare_engine_id_in_engine_list);
+ vc_engine_info_s *result = NULL;
+ if (NULL != target) {
+ result = target->data;
+ }
+
+ return result;
+}
+
+static gint __compare_language_in_languages_of_engine_info(gconstpointer a, gconstpointer b)
+{
+ const char *language = a;
+ const char *target_language = b;
+
+ if (NULL == language || NULL == target_language) {
+ return 1;
+ }
+
+ SLOG(LOG_DEBUG, vc_config_tag(), "Compare langauge(%s), Target(%s)", language, target_language);
+ return strcmp(language, target_language);
+}
+
+static bool __is_language_valid(vc_engine_info_s *engine_info, const char *language)
+{
+ if (NULL == engine_info || NULL == language) {
+ return false;
+ }
+
+ GSList *target = g_slist_find_custom(engine_info->languages, language, __compare_language_in_languages_of_engine_info);
+ return (NULL != target);
+}
+
+static void __invoke_lang_cb_in_client_list(gpointer data, gpointer user_data)
+{
+ vc_config_client_s* client_info = (vc_config_client_s*)data;
+ lang_cb_parameter_s* parameter = (lang_cb_parameter_s*)user_data;
+
+ if (NULL == client_info || NULL == parameter) {
+ return;
+ }
+
+ if (NULL != client_info->lang_cb) {
+ client_info->lang_cb(parameter->before_lang, parameter->current_lang);
+ }
+}
+
+static void __invoke_engine_cb_in_client_list(gpointer data, gpointer user_data)
+{
+ vc_config_client_s* client_info = (vc_config_client_s*)data;
+ engine_cb_parameter_s* parameter = (engine_cb_parameter_s*)user_data;
+
+ if (NULL == client_info || NULL == parameter) {
+ return;
+ }
+
+ if (NULL != client_info->engine_cb) {
+ client_info->engine_cb(parameter->engine_appid);
+ }
+}
+
+static void __invoke_enabled_cb_in_client_list(gpointer data, gpointer user_data)
+{
+ vc_config_client_s* client_info = (vc_config_client_s*)data;
+ enabled_cb_parameter_s* parameter = (enabled_cb_parameter_s*)user_data;
+
+ if (NULL == client_info || NULL == parameter) {
+ return;
+ }
+
+ if (NULL != client_info->enabled_cb) {
+ client_info->enabled_cb(parameter->enable);
+ }
+}
+
+static void __vc_config_mgr_notify_language_changed(const char* before_lang, const char* current_lang)
+{
+ if (NULL == before_lang || NULL == current_lang) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL");
+ return;
+ }
+
+ lang_cb_parameter_s lang_cb_parameter;
+ lang_cb_parameter.before_lang = before_lang;
+ lang_cb_parameter.current_lang = current_lang;
+
+ g_slist_foreach(g_config_client_list, __invoke_lang_cb_in_client_list, &lang_cb_parameter);
+}
+
+static void __vc_config_mgr_notify_engine_changed(const char *engine_appid)
+{
+ if (NULL == engine_appid) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL");
+ return;
+ }
+
+ engine_cb_parameter_s engine_cb_parameter;
+ engine_cb_parameter.engine_appid = engine_appid;
+
+ g_slist_foreach(g_config_client_list, __invoke_engine_cb_in_client_list, &engine_cb_parameter);
+}
+
+static void __vc_config_mgr_notify_enabled_changed(bool enable)
+{
+ enabled_cb_parameter_s enabled_cb_parameter;
+ enabled_cb_parameter.enable = enable;
+
+ g_slist_foreach(g_config_client_list, __invoke_enabled_cb_in_client_list, &enabled_cb_parameter);
+}
+
int vc_config_convert_error_code(vc_config_error_e code)
{
if (code == VC_CONFIG_ERROR_NONE) return VC_ERROR_NONE;
{
if (NULL == engine_id) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL");
- return -1;
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
if (0 >= g_slist_length(g_engine_list)) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!");
- return -1;
+ return VC_CONFIG_ERROR_OPERATION_FAILED;
}
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL");
- return -1;
- }
-
- if (NULL == engine_info->uuid) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine id is NULL");
- return -1;
- }
-
- if (!strcmp(engine_id, engine_info->uuid)) {
- SLOG(LOG_DEBUG, vc_config_tag(), "Default engine is valid : %s", engine_id);
- return VC_ERROR_NONE;
- }
-
- iter = g_slist_next(iter);
+ if (NULL != __find_engine_info(engine_id)) {
+ SLOG(LOG_DEBUG, vc_config_tag(), "Default engine is valid : %s", engine_id);
+ return VC_CONFIG_ERROR_NONE;
}
- iter = g_slist_nth(g_engine_list, 0);
+ GSList *iter = g_slist_nth(g_engine_list, 0);
if (NULL == iter) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] No engine in list");
return -1;
}
- engine_info = iter->data;
-
+ vc_engine_info_s *engine_info = iter->data;
if (NULL == engine_info) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL");
return -1;
return false;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
if (0 >= g_slist_length(g_engine_list)) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!");
return false;
}
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL");
- return false;
- }
-
- if (0 != strcmp(engine_id, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
- }
-
- GSList *iter_lang = NULL;
- char* engine_lang;
- if (g_slist_length(engine_info->languages) > 0) {
- /* Get a first item */
- iter_lang = g_slist_nth(engine_info->languages, 0);
-
- int i = 1;
- while (NULL != iter_lang) {
- /*Get handle data from list*/
- engine_lang = iter_lang->data;
-
- SLOG(LOG_DEBUG, vc_config_tag(), " [%dth] %s", i, engine_lang);
-
- if (0 == strcmp(language, engine_lang)) {
- return true;
- }
-
- /*Get next item*/
- iter_lang = g_slist_next(iter_lang);
- i++;
- }
- }
- break;
+ vc_engine_info_s *engine_info = __find_engine_info(engine_id);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine_id);
+ return false;
}
- return false;
+ bool is_language_valid = __is_language_valid(engine_info, language);
+ SLOG(LOG_INFO, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", language, (int)is_language_valid);
+
+ return is_language_valid;
}
int __vc_config_mgr_select_lang(const char* engine_id, char** language)
return VC_ERROR_OPERATION_FAILED;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
if (0 >= g_slist_length(g_engine_list)) {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!");
return VC_ERROR_OPERATION_FAILED;
}
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL");
- iter = g_slist_next(iter);
- continue;
- }
-
- if (0 != strcmp(engine_id, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
- }
-
- if (NULL == engine_info->default_lang) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] default language of engine info is NULL");
- return VC_ERROR_INVALID_LANGUAGE;
- }
+ vc_engine_info_s *engine_info = __find_engine_info(engine_id);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine_id);
+ return VC_ERROR_INVALID_PARAMETER;
+ }
- *language = strdup(engine_info->default_lang);
+ if (NULL == engine_info->default_lang) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] default language of engine info is NULL");
+ return VC_CONFIG_ERROR_INVALID_LANGUAGE;
+ }
- if (NULL != *language) {
- SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language);
- return VC_ERROR_NONE;
- }
+ *language = strdup(engine_info->default_lang);
+ if (NULL == *language) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to allocate memory");
+ return VC_CONFIG_ERROR_OUT_OF_MEMORY;
}
- return VC_ERROR_OPERATION_FAILED;
+ SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language);
+ return VC_CONFIG_ERROR_NONE;
}
int __vc_config_release_client(unsigned int uid)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
- if (0 < g_slist_length(g_config_client_list)) {
- /* Check uid */
- iter = g_slist_nth(g_config_client_list, 0);
+ vc_config_client_s* temp_client = __find_client_info(uid);
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- g_config_client_list = g_slist_remove(g_config_client_list, temp_client);
- free(temp_client);
- break;
- }
- }
-
- iter = g_slist_next(iter);
- }
+ if (NULL != temp_client) {
+ g_config_client_list = g_slist_remove(g_config_client_list, temp_client);
+ free(temp_client);
}
SLOG(LOG_DEBUG, vc_config_tag(), "Client count (%d)", g_slist_length(g_config_client_list));
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to get engine info when config updated");
}
__vc_config_mgr_print_engine_info();
- bool support = vc_config_check_default_language_is_valid(g_config_info->language);
- if (false == support) {
- SLOG(LOG_DEBUG, vc_config_tag(), "[ERROR] Default language is valid");
+ bool is_language_valid = vc_config_check_default_language_is_valid(g_config_info->language);
+ if (false == is_language_valid) {
+ SLOG(LOG_DEBUG, vc_config_tag(), "[ERROR] Default language is not valid");
char* temp_lang = NULL;
ret = __vc_config_mgr_select_lang(g_config_info->engine_id, &temp_lang);
if (0 != ret) {
char* engine = NULL;
int enabled = -1;
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
if (0 != vc_parser_find_config_changed(&auto_lang, &lang, &engine, &enabled))
return ECORE_CALLBACK_PASS_ON;
g_config_info->language = strdup(lang);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (NULL != temp_client->lang_cb) {
- temp_client->lang_cb(before_lang, lang);
- }
- }
-
- iter = g_slist_next(iter);
- }
+ __vc_config_mgr_notify_language_changed(before_lang, lang);
if (NULL != before_lang) free(before_lang);
+ free(lang);
+ lang = NULL;
}
- if (NULL != lang) free(lang);
-
/* Only Engine changed */
if (NULL != engine) {
g_config_info->engine_id = strdup(engine);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (NULL != temp_client->engine_cb) {
- temp_client->engine_cb(engine);
- }
- }
-
- iter = g_slist_next(iter);
- }
- }
-
- if (NULL != engine) {
+ __vc_config_mgr_notify_engine_changed(engine);
free(engine);
engine = NULL;
}
g_config_info->enabled = enabled;
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (NULL != temp_client->enabled_cb) {
- temp_client->enabled_cb(enabled);
- }
- }
-
- iter = g_slist_next(iter);
- }
+ __vc_config_mgr_notify_enabled_changed((bool)enabled);
}
} else {
SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Undefined event");
before_lang, g_config_info->language);
/* Call all callbacks of client*/
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (NULL != temp_client->lang_cb) {
- temp_client->lang_cb(before_lang, g_config_info->language);
- }
- }
-
- iter = g_slist_next(iter);
- }
+ __vc_config_mgr_notify_language_changed(before_lang, g_config_info->language);
if (NULL != before_lang) free(before_lang);
} else {
before_lang, g_config_info->language);
/* Call all callbacks of client*/
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (NULL != temp_client->lang_cb) {
- temp_client->lang_cb(before_lang, g_config_info->language);
- }
- }
-
- iter = g_slist_next(iter);
- }
+ __vc_config_mgr_notify_language_changed(before_lang, g_config_info->language);
if (NULL != before_lang) free(before_lang);
}
int vc_config_mgr_initialize(unsigned int uid)
{
- GSList *iter = NULL;
- int* get_uid;
vc_config_client_s* temp_client = NULL;
SLOG(LOG_INFO, vc_config_tag(), "[WARNING] Enter critical section");
if (0 < g_slist_length(g_config_client_list)) {
/* Check uid */
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- get_uid = iter->data;
-
- if (uid == *get_uid) {
- SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%u) has already registered", uid);
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- ecore_thread_main_loop_end();
- SLOG(LOG_DEBUG, vc_config_tag(), "[WARNING] Leave critical section");
- return VC_ERROR_NONE;
- }
-
- iter = g_slist_next(iter);
+ if (NULL != __find_client_info(uid)) {
+ SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%u) has already registered", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ SLOG(LOG_DEBUG, vc_config_tag(), "[WARNING] Leave critical section");
+ return VC_CONFIG_ERROR_NONE;
}
temp_client = (vc_config_client_s*)calloc(1, sizeof(vc_config_client_s));
int vc_config_mgr_set_engine_cb(unsigned int uid, vc_config_engine_changed_cb engine_cb)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
ecore_thread_main_loop_begin();
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ }
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->engine_cb = engine_cb;
- if (0 != __vc_config_mgr_register_lang_event()) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event");
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_OPERATION_FAILED;
- }
- }
- }
- iter = g_slist_next(iter);
+ temp_client->engine_cb = engine_cb;
+ if (VC_CONFIG_ERROR_NONE != __vc_config_mgr_register_lang_event()) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event");
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_OPERATION_FAILED;
}
pthread_mutex_unlock(&vc_config_mgr_mutex);
int vc_config_mgr_unset_engine_cb(unsigned int uid)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
ecore_thread_main_loop_begin();
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->engine_cb = NULL;
- __vc_config_mgr_unregister_config_event();
- }
- }
- iter = g_slist_next(iter);
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
+ temp_client->engine_cb = NULL;
+ __vc_config_mgr_unregister_config_event();
+
pthread_mutex_unlock(&vc_config_mgr_mutex);
ecore_thread_main_loop_end();
return VC_ERROR_NONE;
int vc_config_mgr_set_lang_cb(unsigned int uid, vc_config_lang_changed_cb lang_cb)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
ecore_thread_main_loop_begin();
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ }
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->lang_cb = lang_cb;
- if (0 != __vc_config_mgr_register_lang_event()) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event");
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_OPERATION_FAILED;
- }
- }
- }
- iter = g_slist_next(iter);
+ temp_client->lang_cb = lang_cb;
+ if (0 != __vc_config_mgr_register_lang_event()) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event");
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_OPERATION_FAILED;
}
pthread_mutex_unlock(&vc_config_mgr_mutex);
int vc_config_mgr_unset_lang_cb(unsigned int uid)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
ecore_thread_main_loop_begin();
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->lang_cb = NULL;
- __vc_config_mgr_unregister_config_event();
- }
- }
- iter = g_slist_next(iter);
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ ecore_thread_main_loop_end();
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
+ temp_client->lang_cb = NULL;
+ __vc_config_mgr_unregister_config_event();
+
pthread_mutex_unlock(&vc_config_mgr_mutex);
ecore_thread_main_loop_end();
return VC_ERROR_NONE;
return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->enabled_cb = enabled_cb;
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_NONE;
- }
- }
- iter = g_slist_next(iter);
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
+ temp_client->enabled_cb = enabled_cb;
+
pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ return VC_CONFIG_ERROR_NONE;
}
int vc_config_mgr_unset_enabled_cb(unsigned int uid)
{
- GSList *iter = NULL;
- vc_config_client_s* temp_client = NULL;
-
pthread_mutex_lock(&vc_config_mgr_mutex);
/* Call all callbacks of client*/
- iter = g_slist_nth(g_config_client_list, 0);
-
- while (NULL != iter) {
- temp_client = iter->data;
-
- if (NULL != temp_client) {
- if (uid == temp_client->uid) {
- temp_client->enabled_cb = NULL;
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_ERROR_NONE;
- }
- }
- iter = g_slist_next(iter);
+ vc_config_client_s* temp_client = __find_client_info(uid);
+ if (NULL == temp_client) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
}
+ temp_client->enabled_cb = NULL;
+
pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ return VC_ERROR_NONE;
}
int vc_config_mgr_get_auto_language(bool* value)
/* Check current engine id with new engine id */
if (0 == strncmp(g_config_info->engine_id, engine, strlen(g_config_info->engine_id))) {
pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_ERROR_NONE;
+ return VC_CONFIG_ERROR_NONE;
}
SLOG(LOG_DEBUG, vc_config_tag(), "New engine id : %s", engine);
return ret;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
- bool is_valid_engine = false;
-
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL");
- iter = g_slist_next(iter);
- continue;
- }
-
- /* Check engine id is valid */
- if (NULL == engine_info->uuid || 0 != strcmp(engine, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
- }
-
- if (g_config_info->engine_id) {
- free(g_config_info->engine_id);
- g_config_info->engine_id = NULL;
- }
-
- g_config_info->engine_id = strdup(engine_info->uuid);
-
-
- /* Engine is valid*/
- GSList *iter_lang = NULL;
- char* lang;
- bool is_valid_lang = false;
-
- /* Get a first item */
- iter_lang = g_slist_nth(engine_info->languages, 0);
- while (NULL != iter_lang) {
- /*Get handle data from list*/
- lang = iter_lang->data;
-
- SLOG(LOG_DEBUG, vc_config_tag(), " %s", lang);
- if (NULL != lang && NULL != g_config_info->language) {
- if (0 == strcmp(lang, g_config_info->language)) {
- /* language is valid */
- is_valid_lang = true;
- break;
- }
- }
-
- /*Get next item*/
- iter_lang = g_slist_next(iter_lang);
- }
+ vc_engine_info_s *engine_info = __find_engine_info(engine);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ }
- if (false == is_valid_lang) {
- if (NULL != g_config_info->language) {
- free(g_config_info->language);
- g_config_info->language = NULL;
+ free(g_config_info->engine_id);
+ g_config_info->engine_id = strdup(engine_info->uuid);
- iter_lang = g_slist_nth(engine_info->languages, 0);
- if (NULL == iter_lang) {
- SLOG(LOG_ERROR, vc_config_tag(), "Fail to get default language");
- break;
- }
+ /* Engine is valid*/
+ bool is_language_valid = __is_language_valid(engine_info, g_config_info->language);
+ SLOG(LOG_ERROR, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", g_config_info->language, (int)is_language_valid);
- lang = iter_lang->data;
+ char* lang = NULL;
+ if (false == is_language_valid) {
+ free(g_config_info->language);
+ g_config_info->language = NULL;
- g_config_info->language = strdup(lang);
- }
+ GSList *iter_lang = g_slist_nth(engine_info->languages, 0);
+ if (NULL == iter_lang || NULL == iter_lang->data) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to get default language. Engine id(%s) is not valid", engine);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_OPERATION_FAILED;
}
- is_valid_engine = true;
- break;
+ lang = iter_lang->data;
+ g_config_info->language = strdup(lang);
}
- if (true == is_valid_engine) {
- SLOG(LOG_DEBUG, vc_config_tag(), "[Config] Engine changed");
- SLOG(LOG_DEBUG, vc_config_tag(), "Engine : %s", g_config_info->engine_id);
- SLOG(LOG_DEBUG, vc_config_tag(), "Auto lang : %s", g_config_info->auto_lang ? "true" : "false");
- SLOG(LOG_DEBUG, vc_config_tag(), "Language : %s", g_config_info->language);
- SLOG(LOG_DEBUG, vc_config_tag(), "Enabled : %s", g_config_info->enabled ? "true" : "false");
+ SLOG(LOG_DEBUG, vc_config_tag(), "[Config] Engine changed");
+ SLOG(LOG_DEBUG, vc_config_tag(), "Engine : %s", g_config_info->engine_id);
+ SLOG(LOG_DEBUG, vc_config_tag(), "Auto lang : %s", g_config_info->auto_lang ? "true" : "false");
+ SLOG(LOG_DEBUG, vc_config_tag(), "Language : %s", g_config_info->language);
+ SLOG(LOG_DEBUG, vc_config_tag(), "Enabled : %s", g_config_info->enabled ? "true" : "false");
- if (0 != vc_parser_set_engine(g_config_info->engine_id)) {
- SLOG(LOG_ERROR, vc_config_tag(), " Fail to save config");
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_OPERATION_FAILED;
- }
- } else {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine id is not valid");
+ if (0 != vc_parser_set_engine(g_config_info->engine_id)) {
+ SLOG(LOG_ERROR, vc_config_tag(), " Fail to save config");
pthread_mutex_unlock(&vc_config_mgr_mutex);
- return VC_CONFIG_ERROR_INVALID_PARAMETER;
+ return VC_CONFIG_ERROR_OPERATION_FAILED;
}
pthread_mutex_unlock(&vc_config_mgr_mutex);
return -1;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
+ vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "Fail to find engine information : %s", g_config_info->engine_id);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_NONE;
+ }
/* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
+ GSList *iter_lang = g_slist_nth(engine_info->languages, 0);
- while (NULL != iter) {
- engine_info = iter->data;
+ while (NULL != iter_lang) {
+ /*Get handle data from list*/
+ char* lang = iter_lang->data;
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL");
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return -1;
- }
-
- if (0 != strcmp(g_config_info->engine_id, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
+ SLOG(LOG_INFO, vc_config_tag(), "lang(%s)", lang);
+ if (NULL != lang) {
+ if (false == callback(lang, user_data))
+ break;
}
- GSList *iter_lang = NULL;
- char* lang;
-
- /* Get a first item */
- iter_lang = g_slist_nth(engine_info->languages, 0);
-
- while (NULL != iter_lang) {
- /*Get handle data from list*/
- lang = iter_lang->data;
-
- SLOG(LOG_INFO, vc_config_tag(), "lang(%s)", lang);
- if (NULL != lang) {
- if (false == callback(lang, user_data))
- break;
- }
-
- /*Get next item*/
- iter_lang = g_slist_next(iter_lang);
- }
- break;
+ /*Get next item*/
+ iter_lang = g_slist_next(iter_lang);
}
pthread_mutex_unlock(&vc_config_mgr_mutex);
return -1;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL");
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return -1;
- }
-
- if (0 != strcmp(g_config_info->engine_id, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
- }
+ if (NULL == g_config_info || NULL == g_config_info->engine_id) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine ID is not set in global config!!");
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_ENGINE_NOT_FOUND;
+ }
- *value = engine_info->non_fixed_support;
+ vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", g_config_info->engine_id);
+ pthread_mutex_unlock(&vc_config_mgr_mutex);
+ return VC_CONFIG_ERROR_ENGINE_NOT_FOUND;
+ };
- break;
- }
+ *value = engine_info->non_fixed_support;
pthread_mutex_unlock(&vc_config_mgr_mutex);
return VC_ERROR_NONE;
return false;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL != engine_info) {
- if (0 == strcmp(engine, engine_info->uuid)) {
- pthread_mutex_unlock(&vc_config_mgr_mutex);
- return true;
- }
- }
- iter = g_slist_next(iter);
- }
+ vc_engine_info_s *engine_info = __find_engine_info(engine);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine);
+ };
pthread_mutex_unlock(&vc_config_mgr_mutex);
- return false;
+ return (NULL != engine_info);
}
bool vc_config_check_default_language_is_valid(const char* language)
return false;
}
- GSList *iter = NULL;
- vc_engine_info_s *engine_info = NULL;
-
- /* Get a first item */
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
- engine_info = iter->data;
-
- if (NULL == engine_info) {
- SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL");
- iter = g_slist_next(iter);
- continue;
- }
-
- if (0 == strcmp(g_config_info->engine_id, engine_info->uuid)) {
- iter = g_slist_next(iter);
- continue;
- }
-
- GSList *iter_lang = NULL;
- char* lang;
-
- /* Get a first item */
- iter_lang = g_slist_nth(engine_info->languages, 0);
-
- while (NULL != iter_lang) {
- lang = iter_lang->data;
-
- if (0 == strcmp(language, lang)) {
- SLOG(LOG_INFO, vc_config_tag(), "[INFO] Default language(%s) is valid", language);
- return true;
- }
+ vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id);
+ if (NULL == engine_info) {
+ SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", g_config_info->engine_id);
+ return false;
+ };
- /*Get next item*/
- iter_lang = g_slist_next(iter_lang);
- }
- break;
- }
+ bool is_language_valid = __is_language_valid(engine_info, language);
+ SLOG(LOG_INFO, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", language, (int)is_language_valid);
- return false;
+ return is_language_valid;
}
int vc_config_mgr_set_foreground(int pid, bool value)
return vc_parser_get_foreground(pid);
}
-
-
int __vc_config_mgr_print_engine_info()
{
GSList *iter = NULL;