}
pui_error
-_ani_stop(pui_ani_t *ani)
+_ani_stop(pui_ani_t *ani, pui_bool force)
{
pui_int_error e = PUI_INT_ERROR_NONE;
pui_backend_ani_data *ani_data = NULL;
//TODO
(void) info;
- pui_info("... info->id: %s\n", info->id);
+ pui_info("... info->id: %s, force=%d\n", info->id, force);
pui_backend_ani_remove_frame_cb(ani);
- pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
+
+ if (force)
+ pui_backend_ani_status_update(ani, PUI_ANI_STATUS_PAUSED);
+ else
+ pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
return e;
}
return NULL;
}
-static int
-_scandir_filter(const struct dirent *dirent)
+int
+_find_directory(const char *path, Eina_List **json_list)
{
- if (!strncmp(dirent->d_name, ".", sizeof(".")) ||
- !strncmp(dirent->d_name, "..", sizeof("..")))
- return 0;
- if (!strstr(dirent->d_name, ".json"))
- return 0;
+ DIR *dir;
+ struct dirent *cur;
+ int count = 0, ret_cnt = 0;
+
+ dir = opendir(path);
+ if (!dir)
+ {
+ pui_err("Failed to open %s.\n", path);
+ return count;
+ }
- return 1;
+ while ((cur = readdir(dir)) != NULL)
+ {
+ char next_path[MAX_STR] = {0, };
+ if (cur->d_type == DT_DIR)
+ {
+ if (!strncmp(cur->d_name, ".", sizeof(".")) ||
+ !strncmp(cur->d_name, "..", sizeof("..")))
+ continue;
+
+ snprintf(next_path, MAX_STR, "%s/%s", path, cur->d_name);
+ ret_cnt = _find_directory(next_path, json_list);
+ count += ret_cnt;
+ }
+ else
+ {
+ if (strstr(cur->d_name, ".json"))
+ {
+ snprintf(next_path, MAX_STR, "%s/%s", path, cur->d_name);
+ *json_list = eina_list_append(*json_list, eina_stringshare_add(next_path));
+ count++;
+ }
+ }
+ }
+ closedir(dir);
+
+ return count;
}
{
pui_int_error e = PUI_INT_ERROR_NONE;
default_ani_info *ani_info;
- struct dirent **files;
- int count, i;
- char file_path[MAX_STR] = {0, };
+ Eina_List *json_list = NULL;
+ Eina_List *l, *l_next;
+ Eina_Stringshare *path;
// load and store all of animation data
- if ((count = scandir(ANI_COLLECTION_DIR, &files, _scandir_filter, alphasort)) == -1) {
- printf("Failed to get %s directory (%s)\n", ANI_COLLECTION_DIR, strerror(errno));
- e = PUI_INT_ERROR_INVALID_RESOURCES;
- return e;
- }
-
- for (i = 0; i < count; i++) {
- snprintf(file_path, sizeof(file_path), "%s%s", ANI_COLLECTION_DIR, files[i]->d_name);
+ _find_directory(ANI_COLLECTION_DIR, &json_list);
- ani_info = _read_json(file_path);
+ EINA_LIST_FOREACH_SAFE(json_list, l, l_next, path)
+ {
+ ani_info = _read_json(path);
if (ani_info) {
eina_hash_add(_animations_hash, ani_info->id, ani_info);
- printf("Success to load %s animation\n", files[i]->d_name);
+ pui_info("Success to load %s animation (id: %s)\n", path, ani_info->id);
}
+ eina_stringshare_del(path);
+ json_list = eina_list_remove_list(json_list, l);
}
- for (i = 0; i < count; i++) {
- free(files[i]);
- }
- free(files);
-
//TODO
return e;
}
/* Assign each function pointer that corresponds to the given id if needed. */
- if (!strncmp(ani_info->id, "processing", sizeof("processing")))
+ if (!strncmp(ani_info->id, "system/easy_setup", sizeof("system/easy_setup")))
{
- pui_default_backend_ani_processing_func_set(ani_func);
+ pui_default_backend_ani_easysetup_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "listening", sizeof("listening")))
+ else if (!strncmp(ani_info->id, "system/processing", sizeof("system/processing")))
{
- pui_default_backend_ani_listening_func_set(ani_func);
+ pui_default_backend_ani_system_processing_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "speaking", sizeof("speaking")))
+ else if (!strncmp(ani_info->id, "system/sw_update_done", sizeof("system/sw_update_done")))
{
- pui_default_backend_ani_speaking_func_set(ani_func);
+ pui_default_backend_ani_swupdatedone_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "streaming", sizeof("streaming")))
+ else if (!strncmp(ani_info->id, "system/mic_off", sizeof("system/mic_off")))
{
- pui_default_backend_ani_streaming_func_set(ani_func);
+ pui_default_backend_ani_micoff_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "time_out", sizeof("time_out")))
+ else if (!strncmp(ani_info->id, "voice/listening", sizeof("voice/listening")))
{
- pui_default_backend_ani_timeout_func_set(ani_func);
+ pui_default_backend_ani_listening_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "system_processing", sizeof("system_processing")))
+ else if (!strncmp(ani_info->id, "voice/streaming", sizeof("voice/streaming")))
{
- pui_default_backend_ani_system_processing_func_set(ani_func);
+ pui_default_backend_ani_streaming_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "normal", sizeof("normal")))
+ else if (!strncmp(ani_info->id, "voice/processing", sizeof("voice/processing")))
{
- pui_default_backend_ani_normal_func_set(ani_func);
+ pui_default_backend_ani_processing_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "emergency", sizeof("emergency")))
+ else if (!strncmp(ani_info->id, "voice/speaking", sizeof("voice/speaking")))
{
- pui_default_backend_ani_emergency_func_set(ani_func);
+ pui_default_backend_ani_speaking_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "easy_setup", sizeof("easy_setup")))
+ else if (!strncmp(ani_info->id, "voice/timeout", sizeof("voice/timeout")))
{
- pui_default_backend_ani_easysetup_func_set(ani_func);
+ pui_default_backend_ani_timeout_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "sw_update_done", sizeof("sw_update_done")))
+ else if (!strncmp(ani_info->id, "notification/normal", sizeof("notification/normal")))
{
- pui_default_backend_ani_swupdatedone_func_set(ani_func);
+ pui_default_backend_ani_normal_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "mic_off", sizeof("mic_off")))
+ else if (!strncmp(ani_info->id, "notification/emergency", sizeof("notification/emergency")))
{
- pui_default_backend_ani_micoff_func_set(ani_func);
+ pui_default_backend_ani_emergency_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "network_error", sizeof("network_error")))
+ else if (!strncmp(ani_info->id, "notification/network_error", sizeof("notification/network_error")))
{
pui_default_backend_ani_networkerror_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "error", sizeof("error")))
+ else if (!strncmp(ani_info->id, "notification/error", sizeof("notification/error")))
{
pui_default_backend_ani_error_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "alarm", sizeof("alarm")))
+ else if (!strncmp(ani_info->id, "notification/alarm", sizeof("notification/alarm")))
{
pui_default_backend_ani_alarm_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "connected", sizeof("connected")))
+ else if (!strncmp(ani_info->id, "bt/pairing", sizeof("bt/pairing")))
{
- pui_default_backend_ani_connected_func_set(ani_func);
+ pui_default_backend_ani_pairing_func_set(ani_func);
}
- else if (!strncmp(ani_info->id, "pairing", sizeof("pairing")))
+ else if (!strncmp(ani_info->id, "bt/connected", sizeof("bt/connected")))
{
- pui_default_backend_ani_pairing_func_set(ani_func);
+ pui_default_backend_ani_connected_func_set(ani_func);
}
else
{