#include <glib.h>
+#include <libsyscommon/list.h>
+
#include "feedback-config.h"
#include "profiles.h"
#include "log.h"
};
static unsigned int default_sound_theme_id;
-static GHashTable *g_sound_theme_list;
-
-static void destroy_sound_theme_hashtable_value(gpointer data)
-{
- struct feedback_config_info *sound_info = (struct feedback_config_info*)data;
-
- if (!sound_info)
- return;
-
- feedback_free_config(sound_info);
- free(sound_info);
-}
-
-static bool is_g_sound_theme_list_initialized(void)
-{
- if (!g_sound_theme_list) {
- _E("Sound theme is not initialized. please check sound config file.");
- return false;
- }
- return true;
-}
+static GList *g_sound_theme_list;
bool sound_thememan_is_sound_theme_id_exist(unsigned int sound_theme_id)
{
- gint *hash_key = g_new(gint, 1);
-
- *hash_key = sound_theme_id;
- if (!is_g_sound_theme_list_initialized()) {
- g_free(hash_key);
- return false;
- }
+ struct sound_theme_element *sound_theme_elem = NULL;
+ GList *temp_glist = NULL;
- if (!g_hash_table_lookup(g_sound_theme_list, hash_key)) {
- g_free(hash_key);
- return false;
+ SYS_G_LIST_FOREACH(g_sound_theme_list, temp_glist, sound_theme_elem) {
+ if (sound_theme_elem->id == sound_theme_id) {
+ return true;
+ }
}
- g_free(hash_key);
- return true;
+ return false;
}
void sound_thememan_set_default_sound_theme_id(unsigned int sound_theme_id)
int sound_thememan_get_number_of_theme(unsigned int *number_of_theme)
{
- if (!is_g_sound_theme_list_initialized())
- return -EPERM;
+ if (!number_of_theme) {
+ _E("Invalid parameter: number_of_theme(NULL)");
+ return -EINVAL;
+ }
- *number_of_theme = (unsigned int)g_hash_table_size(g_sound_theme_list);
+ *number_of_theme = (unsigned int)g_list_length(g_sound_theme_list);
return 0;
}
int sound_thememan_get_sound_theme_info(unsigned int sound_theme_id, void *sound_info)
{
- gint *hash_key = g_new(gint, 1);
- struct feedback_config_info* sound_theme_info;
+ struct sound_theme_element *sound_theme_elem = NULL;
+ GList *temp_glist = NULL;
+ int find_flag = 0;
- if (!is_g_sound_theme_list_initialized()) {
- g_free(hash_key);
- return -EPERM;
+ if (!sound_info) {
+ _E("Invalid parameter: sound_info(NULL)");
+ return -EINVAL;
}
- *hash_key = sound_theme_id;
- sound_theme_info = (struct feedback_config_info*)g_hash_table_lookup(g_sound_theme_list, hash_key);
- g_free(hash_key);
+ SYS_G_LIST_FOREACH(g_sound_theme_list, temp_glist, sound_theme_elem) {
+ if (sound_theme_elem->id == sound_theme_id) {
+ *(struct feedback_config_info**)sound_info = sound_theme_elem->sound_info;
+ find_flag = 1;
+ break;
+ }
+ }
- *(struct feedback_config_info**)sound_info = sound_theme_info;
- if (!sound_theme_info)
+ if (!find_flag)
return -EPERM;
return 0;
int sound_thememan_add_sound_theme(unsigned int sound_theme_id, const char* conf_file_path)
{
+ struct sound_theme_element *sound_theme_elem = NULL;
struct feedback_config_info *sound_info = NULL;
- gint *hash_key = NULL;
int ret = 0;
- if (!is_g_sound_theme_list_initialized())
- return -EPERM;
+ sound_theme_elem = (struct sound_theme_element*)calloc(1, sizeof(struct sound_theme_element));
+ if (!sound_theme_elem) {
+ _E("Failed to allocate memory for sound_theme_elem.");
+ return -ENOMEM;
+ }
sound_info = (struct feedback_config_info*)calloc(1, sizeof(struct feedback_config_info));
if (!sound_info) {
_E("Failed to allocate memory for sound_info.");
+ free(sound_theme_elem);
return -ENOMEM;
}
if (ret < 0) {
_E("Failed to load config file %s", conf_file_path);
feedback_free_config(sound_info);
- free(sound_info);
+ free(sound_theme_elem);
return ret;
}
- hash_key = g_new(gint, 1);
- *hash_key = sound_theme_id;
- g_hash_table_insert(g_sound_theme_list, hash_key, (gpointer)sound_info);
+ sound_theme_elem->id = sound_theme_id;
+ sound_theme_elem->sound_info = sound_info;
+ g_sound_theme_list = g_list_append(g_sound_theme_list, sound_theme_elem);
return 0;
}
int sound_thememan_get_sound_theme_ids(unsigned int *count_of_theme, unsigned int **sound_theme_ids)
{
- GHashTableIter iter;
- gpointer key, value;
- int get_id = 0;
int index = 0;
unsigned int *temp_sound_theme_ids = NULL;
+ struct sound_theme_element* sound_theme_elem = NULL;
+ GList *temp_glist = NULL;
- if (!is_g_sound_theme_list_initialized())
- return -EPERM;
-
- g_hash_table_iter_init(&iter, g_sound_theme_list);
sound_thememan_get_number_of_theme(count_of_theme);
temp_sound_theme_ids = calloc(*count_of_theme, sizeof(unsigned int));
if (!temp_sound_theme_ids)
return -ENOMEM;
- while (g_hash_table_iter_next(&iter, &key, &value)) {
- get_id = *(unsigned int*)key;
- temp_sound_theme_ids[index++] = get_id;
+ SYS_G_LIST_FOREACH(g_sound_theme_list, temp_glist, sound_theme_elem) {
+ temp_sound_theme_ids[index++] = sound_theme_elem->id;
}
*sound_theme_ids = g_steal_pointer(&temp_sound_theme_ids);
return 0;
}
-int sound_thememan_init(void)
+static void cleanup_sound_theme_element(gpointer data)
{
- g_sound_theme_list = g_hash_table_new_full(g_int_hash, g_int_equal, g_free,
- destroy_sound_theme_hashtable_value);
- if (!g_sound_theme_list)
- return -EPERM;
+ struct sound_theme_element *sound_theme_elem = NULL;
+
+ if (!data)
+ return;
+ sound_theme_elem = data;
+ sound_theme_elem->sound_info->name = NULL;
+ feedback_free_config(sound_theme_elem->sound_info);
+ free(sound_theme_elem);
+}
+
+int sound_thememan_init(void)
+{
+ g_sound_theme_list = NULL;
return 0;
}
void sound_thememan_exit(void)
{
if (g_sound_theme_list)
- g_hash_table_destroy(g_steal_pointer(&g_sound_theme_list));
+ g_list_free_full(g_steal_pointer(&g_sound_theme_list), cleanup_sound_theme_element);
}