From 486f438cc3a3f5deae207d0e668b929a84547933 Mon Sep 17 00:00:00 2001 From: natinusala Date: Tue, 30 Apr 2019 13:22:05 +0200 Subject: [PATCH] task_database: reimplement task progression --- libretro-common/include/queues/task_queue.h | 7 +++++- menu/widgets/menu_widgets.c | 26 ++++++++++++++------- tasks/task_database.c | 16 +++++++------ 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/libretro-common/include/queues/task_queue.h b/libretro-common/include/queues/task_queue.h index aaed4ea30e..3e182c755e 100644 --- a/libretro-common/include/queues/task_queue.h +++ b/libretro-common/include/queues/task_queue.h @@ -114,10 +114,15 @@ struct retro_task /* task identifier */ uint32_t ident; - /* frontend userdata + /* frontend userdata * (e.g. associate a sticky notification to a task) */ void *frontend_userdata; + /* if set to true, frontend will + use an alternative look for the + task progress display */ + bool alternative_look; + /* don't touch this. */ retro_task_t *next; }; diff --git a/menu/widgets/menu_widgets.c b/menu/widgets/menu_widgets.c index 8c096347ec..44d466dc31 100644 --- a/menu/widgets/menu_widgets.c +++ b/menu/widgets/menu_widgets.c @@ -448,7 +448,6 @@ static bool menu_widgets_msg_queue_push_internal(retro_task_t *task, const char if (task->title != msg_widget->task_title_ptr) { - menu_animation_ctx_entry_t entry; unsigned len = strlen(task->title); unsigned new_width = font_driver_get_message_width(font_regular, task->title, len, msg_queue_text_scale_factor); @@ -460,15 +459,24 @@ static bool menu_widgets_msg_queue_push_internal(retro_task_t *task, const char msg_widget->task_title_ptr = task->title; msg_widget->msg_transition_animation = 0; - entry.easing_enum = EASING_OUT_QUAD; - entry.tag = (uintptr_t) NULL; - entry.duration = MSG_QUEUE_ANIMATION_DURATION*2; - entry.target_value = msg_queue_height/2.0f; - entry.subject = &msg_widget->msg_transition_animation; - entry.cb = msg_widget_msg_transition_animation_done; - entry.userdata = msg_widget; + if (!task->alternative_look) + { + menu_animation_ctx_entry_t entry; - menu_animation_push(&entry); + entry.easing_enum = EASING_OUT_QUAD; + entry.tag = (uintptr_t) NULL; + entry.duration = MSG_QUEUE_ANIMATION_DURATION*2; + entry.target_value = msg_queue_height/2.0f; + entry.subject = &msg_widget->msg_transition_animation; + entry.cb = msg_widget_msg_transition_animation_done; + entry.userdata = msg_widget; + + menu_animation_push(&entry); + } + else + { + msg_widget_msg_transition_animation_done(msg_widget); + } msg_widget->task_count++; diff --git a/tasks/task_database.c b/tasks/task_database.c index 4a5e0e8548..4bf1fee131 100644 --- a/tasks/task_database.c +++ b/tasks/task_database.c @@ -15,6 +15,7 @@ * If not, see . */ +#include #include #include #include @@ -151,8 +152,10 @@ static int task_database_iterate_start(retro_task_t *task, if (!string_is_empty(msg)) { #ifdef RARCH_INTERNAL - runloop_msg_queue_push(msg, 1, 180, true, NULL, - MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + task_free_title(task); + task_set_title(task, strdup(msg)); + if (db->list->size != 0) + task_set_progress(task, roundf((float)db->list_ptr / (float)db->list->size * 100.0f)); #else fprintf(stderr, "msg: %s\n", msg); #endif @@ -1208,8 +1211,6 @@ static void task_database_handler(retro_task_t *task) db->handle = database_info_file_init(db->fullpath, DATABASE_TYPE_ITERATE, task); } - task_free_title(task); - if (db->handle) db->handle->status = DATABASE_STATUS_ITERATE_BEGIN; } @@ -1296,14 +1297,14 @@ static void task_database_handler(retro_task_t *task) } else { +#ifdef RARCH_INTERNAL + task_set_progress(task, 100); +#else const char *msg = NULL; if (db->is_directory) msg = msg_hash_to_str(MSG_SCANNING_OF_DIRECTORY_FINISHED); else msg = msg_hash_to_str(MSG_SCANNING_OF_FILE_FINISHED); -#ifdef RARCH_INTERNAL - runloop_msg_queue_push(msg, 0, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); -#else fprintf(stderr, "msg: %s\n", msg); #endif ui_companion_driver_notify_refresh(); @@ -1365,6 +1366,7 @@ bool task_push_dbscan( t->state = db; t->callback = cb; t->title = strdup(msg_hash_to_str(MSG_PREPARING_FOR_CONTENT_SCAN)); + t->alternative_look = true; db->show_hidden_files = db_dir_show_hidden_files; db->is_directory = directory;