mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-23 07:59:42 +00:00
Use flags for some structs instead of tons of bools - less state/variables to bookkeep,
less memory used
This commit is contained in:
parent
141c33ceb5
commit
30eb0edcf8
@ -226,33 +226,26 @@ void gfx_widgets_msg_queue_push(
|
||||
msg_widget->offset_y = 0;
|
||||
msg_widget->alpha = 1.0f;
|
||||
|
||||
msg_widget->dying = false;
|
||||
msg_widget->expired = false;
|
||||
msg_widget->width = 0;
|
||||
|
||||
msg_widget->expiration_timer = 0;
|
||||
msg_widget->expiration_timer_started = false;
|
||||
|
||||
msg_widget->task_ptr = task;
|
||||
msg_widget->task_count = 0;
|
||||
|
||||
msg_widget->task_progress = 0;
|
||||
msg_widget->task_finished = false;
|
||||
msg_widget->task_error = false;
|
||||
msg_widget->task_cancelled = false;
|
||||
msg_widget->task_ident = 0;
|
||||
|
||||
msg_widget->unfolded = false;
|
||||
msg_widget->unfolding = false;
|
||||
msg_widget->unfold = 0.0f;
|
||||
|
||||
msg_widget->hourglass_rotation = 0.0f;
|
||||
msg_widget->hourglass_timer = 0.0f;
|
||||
msg_widget->flags = 0;
|
||||
|
||||
if (!p_dispwidget->msg_queue_has_icons)
|
||||
{
|
||||
msg_widget->unfolded = true;
|
||||
msg_widget->unfolding = false;
|
||||
msg_widget->flags |= DISPWIDG_FLAG_UNFOLDED;
|
||||
msg_widget->flags &= ~DISPWIDG_FLAG_UNFOLDING;
|
||||
msg_widget->unfold = 1.0f;
|
||||
}
|
||||
|
||||
@ -262,14 +255,17 @@ void gfx_widgets_msg_queue_push(
|
||||
msg_widget->msg_new = strdup(title);
|
||||
msg_widget->msg_len = strlen(title);
|
||||
|
||||
msg_widget->task_error = !string_is_empty(task->error);
|
||||
msg_widget->task_cancelled = task->cancelled;
|
||||
msg_widget->task_finished = task->finished;
|
||||
if (!string_is_empty(task->error))
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_ERROR;
|
||||
if (task->cancelled)
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_CANCELLED;
|
||||
if (task->finished)
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_FINISHED;
|
||||
msg_widget->task_progress = task->progress;
|
||||
msg_widget->task_ident = task->ident;
|
||||
msg_widget->task_count = 1;
|
||||
|
||||
msg_widget->unfolded = true;
|
||||
msg_widget->flags |= DISPWIDG_FLAG_UNFOLDED;
|
||||
|
||||
msg_widget->width = font_driver_get_message_width(
|
||||
p_dispwidget->gfx_widget_fonts.msg_queue.font,
|
||||
@ -337,11 +333,11 @@ void gfx_widgets_msg_queue_push(
|
||||
/* Update task info */
|
||||
else
|
||||
{
|
||||
if (msg_widget->expiration_timer_started)
|
||||
if (msg_widget->flags & DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED)
|
||||
{
|
||||
uintptr_t _tag = (uintptr_t)&msg_widget->expiration_timer;
|
||||
uintptr_t _tag = (uintptr_t)&msg_widget->expiration_timer;
|
||||
gfx_animation_kill_by_tag(&_tag);
|
||||
msg_widget->expiration_timer_started = false;
|
||||
msg_widget->flags &= ~DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED;
|
||||
}
|
||||
|
||||
if (!string_is_equal(task->title, msg_widget->msg_new))
|
||||
@ -389,9 +385,12 @@ void gfx_widgets_msg_queue_push(
|
||||
msg_widget->width = new_width;
|
||||
}
|
||||
|
||||
msg_widget->task_error = !string_is_empty(task->error);
|
||||
msg_widget->task_cancelled = task->cancelled;
|
||||
msg_widget->task_finished = task->finished;
|
||||
if (!string_is_empty(task->error))
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_ERROR;
|
||||
if (task->cancelled)
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_CANCELLED;
|
||||
if (task->finished)
|
||||
msg_widget->flags |= DISPWIDG_FLAG_TASK_FINISHED;
|
||||
msg_widget->task_progress = task->progress;
|
||||
}
|
||||
}
|
||||
@ -402,7 +401,7 @@ static void gfx_widgets_unfold_end(void *userdata)
|
||||
disp_widget_msg_t *unfold = (disp_widget_msg_t*)userdata;
|
||||
dispgfx_widget_t *p_dispwidget = &dispwidget_st;
|
||||
|
||||
unfold->unfolding = false;
|
||||
unfold->flags &= ~DISPWIDG_FLAG_UNFOLDING;
|
||||
p_dispwidget->moving = false;
|
||||
}
|
||||
|
||||
@ -425,8 +424,8 @@ static void gfx_widgets_move_end(void *userdata)
|
||||
|
||||
gfx_animation_push(&entry);
|
||||
|
||||
unfold->unfolded = true;
|
||||
unfold->unfolding = true;
|
||||
unfold->flags |= DISPWIDG_FLAG_UNFOLDED;
|
||||
unfold->flags |= DISPWIDG_FLAG_UNFOLDING;
|
||||
}
|
||||
else
|
||||
p_dispwidget->moving = false;
|
||||
@ -436,8 +435,8 @@ static void gfx_widgets_msg_queue_expired(void *userdata)
|
||||
{
|
||||
disp_widget_msg_t *msg = (disp_widget_msg_t *)userdata;
|
||||
|
||||
if (msg && !msg->expired)
|
||||
msg->expired = true;
|
||||
if (msg && !(msg->flags & DISPWIDG_FLAG_EXPIRED))
|
||||
msg->flags |= DISPWIDG_FLAG_EXPIRED;
|
||||
}
|
||||
|
||||
static void gfx_widgets_msg_queue_move(dispgfx_widget_t *p_dispwidget)
|
||||
@ -455,13 +454,13 @@ static void gfx_widgets_msg_queue_move(dispgfx_widget_t *p_dispwidget)
|
||||
{
|
||||
disp_widget_msg_t* msg = p_dispwidget->current_msgs[i];
|
||||
|
||||
if (!msg || msg->dying)
|
||||
if (!msg || (msg->flags & DISPWIDG_FLAG_DYING))
|
||||
continue;
|
||||
|
||||
y += p_dispwidget->msg_queue_height
|
||||
/ (msg->task_ptr ? 2 : 1) + p_dispwidget->msg_queue_spacing;
|
||||
|
||||
if (!msg->unfolded)
|
||||
if (!(msg->flags & DISPWIDG_FLAG_UNFOLDED))
|
||||
unfold = msg;
|
||||
|
||||
if (msg->offset_y != y)
|
||||
@ -499,7 +498,9 @@ static void gfx_widgets_msg_queue_free(
|
||||
/* remove the reference the task has of ourself
|
||||
only if the task is not finished already
|
||||
(finished tasks are freed before the widget) */
|
||||
if (!msg->task_finished && !msg->task_error && !msg->task_cancelled)
|
||||
if ( !(msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
&& !(msg->flags & DISPWIDG_FLAG_TASK_ERROR)
|
||||
&& !(msg->flags & DISPWIDG_FLAG_TASK_CANCELLED))
|
||||
msg->task_ptr->frontend_userdata = NULL;
|
||||
|
||||
/* update tasks count */
|
||||
@ -511,7 +512,7 @@ static void gfx_widgets_msg_queue_free(
|
||||
gfx_animation_kill_by_tag(&tag);
|
||||
|
||||
/* Kill all timers */
|
||||
if (msg->expiration_timer_started)
|
||||
if (msg->flags & DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED)
|
||||
{
|
||||
uintptr_t _tag = (uintptr_t)&msg->expiration_timer;
|
||||
gfx_animation_kill_by_tag(&_tag);
|
||||
@ -569,7 +570,7 @@ static void gfx_widgets_msg_queue_kill(
|
||||
return;
|
||||
|
||||
p_dispwidget->moving = true;
|
||||
msg->dying = true;
|
||||
msg->flags |= DISPWIDG_FLAG_DYING;
|
||||
|
||||
p_dispwidget->msg_queue_kill = idx;
|
||||
|
||||
@ -710,7 +711,8 @@ static void gfx_widgets_start_msg_expiration_timer(
|
||||
|
||||
gfx_animation_timer_start(&msg_widget->expiration_timer, &timer);
|
||||
|
||||
msg_widget->expiration_timer_started = true;
|
||||
msg_widget->flags |=
|
||||
DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED;
|
||||
}
|
||||
|
||||
static void gfx_widgets_hourglass_tick(void *userdata);
|
||||
@ -1012,7 +1014,7 @@ void gfx_widgets_iterate(
|
||||
/* Start expiration timer if not associated to a task */
|
||||
if (!msg_widget->task_ptr)
|
||||
{
|
||||
if (!msg_widget->expiration_timer_started)
|
||||
if (!(msg_widget->flags & DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED))
|
||||
gfx_widgets_start_msg_expiration_timer(
|
||||
msg_widget, MSG_QUEUE_ANIMATION_DURATION * 2
|
||||
+ msg_widget->duration);
|
||||
@ -1038,12 +1040,14 @@ void gfx_widgets_iterate(
|
||||
if (!msg_widget)
|
||||
continue;
|
||||
|
||||
if (msg_widget->task_ptr && (msg_widget->task_finished
|
||||
|| msg_widget->task_cancelled))
|
||||
if (!msg_widget->expiration_timer_started)
|
||||
if (msg_widget->task_ptr
|
||||
&& ((msg_widget->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
|| (msg_widget->flags & DISPWIDG_FLAG_TASK_CANCELLED)))
|
||||
if (!(msg_widget->flags & DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED))
|
||||
gfx_widgets_start_msg_expiration_timer(msg_widget, TASK_FINISHED_DURATION);
|
||||
|
||||
if (msg_widget->expired && !p_dispwidget->moving)
|
||||
if ( (msg_widget->flags & DISPWIDG_FLAG_EXPIRED)
|
||||
&& !p_dispwidget->moving)
|
||||
{
|
||||
gfx_widgets_msg_queue_kill(p_dispwidget,
|
||||
(unsigned)i);
|
||||
@ -1176,12 +1180,12 @@ static void gfx_widgets_draw_task_msg(
|
||||
|
||||
task_percentage_offset =
|
||||
p_dispwidget->gfx_widget_fonts.msg_queue.glyph_width
|
||||
* (msg->task_error ? 12 : 5)
|
||||
* ((msg->flags & DISPWIDG_FLAG_TASK_ERROR) ? 12 : 5)
|
||||
+ p_dispwidget->simple_widget_padding * 1.25f; /*11 = STRLEN_CONST("Task failed") + 1 */
|
||||
|
||||
if (msg->task_finished)
|
||||
if (msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
{
|
||||
if (msg->task_error)
|
||||
if (msg->flags & DISPWIDG_FLAG_TASK_ERROR)
|
||||
strlcpy(task_percentage, "Task failed", sizeof(task_percentage));
|
||||
else
|
||||
{
|
||||
@ -1203,7 +1207,7 @@ static void gfx_widgets_draw_task_msg(
|
||||
text_color = COLOR_TEXT_ALPHA(0xFFFFFF00, (unsigned)(msg->alpha*255.0f));
|
||||
|
||||
/* Rect */
|
||||
if (msg->task_finished)
|
||||
if (msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
if (msg->task_count == 1)
|
||||
msg_queue_current_background = msg_queue_task_progress_1;
|
||||
else
|
||||
@ -1231,7 +1235,9 @@ static void gfx_widgets_draw_task_msg(
|
||||
);
|
||||
|
||||
/* Progress bar */
|
||||
if (!msg->task_finished && msg->task_progress >= 0 && msg->task_progress <= 100)
|
||||
if ( !(msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
&& (msg->task_progress >= 0)
|
||||
&& (msg->task_progress <= 100))
|
||||
{
|
||||
if (msg->task_count == 1)
|
||||
msg_queue_current_bar = msg_queue_task_progress_1;
|
||||
@ -1259,7 +1265,7 @@ static void gfx_widgets_draw_task_msg(
|
||||
float radians = 0.0f; /* rad */
|
||||
float cosine = 1.0f; /* cos(rad) = cos(0) = 1.0f */
|
||||
float sine = 0.0f; /* sine(rad) = sine(0) = 0.0f */
|
||||
if (!msg->task_finished)
|
||||
if (!msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
{
|
||||
radians = msg->hourglass_rotation;
|
||||
cosine = cosf(radians);
|
||||
@ -1273,7 +1279,7 @@ static void gfx_widgets_draw_task_msg(
|
||||
p_dispwidget->msg_queue_height / 2,
|
||||
p_dispwidget->msg_queue_height / 2,
|
||||
p_dispwidget->gfx_widgets_icons_textures[
|
||||
msg->task_finished
|
||||
(msg->flags & DISPWIDG_FLAG_TASK_FINISHED)
|
||||
? MENU_WIDGETS_ICON_CHECK
|
||||
: MENU_WIDGETS_ICON_HOURGLASS],
|
||||
p_dispwidget->msg_queue_task_hourglass_x,
|
||||
@ -1361,8 +1367,8 @@ static void gfx_widgets_draw_regular_msg(
|
||||
unsigned text_color;
|
||||
static float last_alpha = 0.0f;
|
||||
|
||||
msg->unfolding = false;
|
||||
msg->unfolded = true;
|
||||
msg->flags &= ~DISPWIDG_FLAG_UNFOLDING;
|
||||
msg->flags |= DISPWIDG_FLAG_UNFOLDED;
|
||||
|
||||
if (last_alpha != msg->alpha)
|
||||
{
|
||||
@ -1373,7 +1379,8 @@ static void gfx_widgets_draw_regular_msg(
|
||||
last_alpha = msg->alpha;
|
||||
}
|
||||
|
||||
if (!msg->unfolded || msg->unfolding)
|
||||
if ( !(msg->flags & DISPWIDG_FLAG_UNFOLDED)
|
||||
|| (msg->flags & DISPWIDG_FLAG_UNFOLDING))
|
||||
{
|
||||
gfx_widgets_flush_text(video_width, video_height,
|
||||
&p_dispwidget->gfx_widget_fonts.regular);
|
||||
@ -1437,7 +1444,8 @@ static void gfx_widgets_draw_regular_msg(
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
|
||||
if (!msg->unfolded || msg->unfolding)
|
||||
if ( !(msg->flags & DISPWIDG_FLAG_UNFOLDED)
|
||||
|| (msg->flags & DISPWIDG_FLAG_UNFOLDING))
|
||||
{
|
||||
gfx_widgets_flush_text(video_width, video_height, &p_dispwidget->gfx_widget_fonts.regular);
|
||||
gfx_widgets_flush_text(video_width, video_height, &p_dispwidget->gfx_widget_fonts.bold);
|
||||
|
@ -110,6 +110,21 @@ typedef struct
|
||||
gfx_widget_font_data_t msg_queue;
|
||||
} gfx_widget_fonts_t;
|
||||
|
||||
enum disp_widget_flags_enum
|
||||
{
|
||||
DISPWIDG_FLAG_TASK_FINISHED = (1 << 0),
|
||||
DISPWIDG_FLAG_TASK_ERROR = (1 << 1),
|
||||
DISPWIDG_FLAG_TASK_CANCELLED = (1 << 2),
|
||||
DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED = (1 << 3),
|
||||
/* Is it currently doing the fade out animation ? */
|
||||
DISPWIDG_FLAG_DYING = (1 << 4),
|
||||
/* Has the timer expired ? if so, should be set to dying */
|
||||
DISPWIDG_FLAG_EXPIRED = (1 << 5),
|
||||
/* Unfold animation */
|
||||
DISPWIDG_FLAG_UNFOLDED = (1 << 6),
|
||||
DISPWIDG_FLAG_UNFOLDING = (1 << 7)
|
||||
};
|
||||
|
||||
typedef struct disp_widget_msg
|
||||
{
|
||||
char *msg;
|
||||
@ -130,21 +145,10 @@ typedef struct disp_widget_msg
|
||||
float hourglass_timer; /* float alignment */
|
||||
float expiration_timer; /* float alignment */
|
||||
|
||||
uint16_t flags;
|
||||
int8_t task_progress;
|
||||
/* How many tasks have used this notification? */
|
||||
uint8_t task_count;
|
||||
|
||||
bool task_finished;
|
||||
bool task_error;
|
||||
bool task_cancelled;
|
||||
bool expiration_timer_started;
|
||||
/* Is it currently doing the fade out animation ? */
|
||||
bool dying;
|
||||
/* Has the timer expired ? if so, should be set to dying */
|
||||
bool expired;
|
||||
/* Unfold animation */
|
||||
bool unfolded;
|
||||
bool unfolding;
|
||||
} disp_widget_msg_t;
|
||||
|
||||
typedef struct dispgfx_widget
|
||||
|
@ -119,6 +119,19 @@ struct content_stream
|
||||
uint32_t crc;
|
||||
};
|
||||
|
||||
enum content_information_flags
|
||||
{
|
||||
CONTENT_INFO_FLAG_BLOCK_EXTRACT = (1 << 0),
|
||||
CONTENT_INFO_FLAG_NEED_FULLPATH = (1 << 1),
|
||||
CONTENT_INFO_FLAG_SET_SUPPORTS_NO_GAME_ENABLE = (1 << 2),
|
||||
CONTENT_INFO_FLAG_IS_IPS_PREF = (1 << 3),
|
||||
CONTENT_INFO_FLAG_IS_BPS_PREF = (1 << 4),
|
||||
CONTENT_INFO_FLAG_IS_UPS_PREF = (1 << 5),
|
||||
CONTENT_INFO_FLAG_PATCH_IS_BLOCKED = (1 << 6),
|
||||
CONTENT_INFO_FLAG_BIOS_IS_MISSING = (1 << 7),
|
||||
CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING = (1 << 8)
|
||||
};
|
||||
|
||||
struct content_information_ctx
|
||||
{
|
||||
char *name_ips;
|
||||
@ -135,17 +148,7 @@ struct content_information_ctx
|
||||
unsigned size;
|
||||
} subsystem;
|
||||
|
||||
bool block_extract;
|
||||
bool need_fullpath;
|
||||
bool set_supports_no_game_enable;
|
||||
#ifdef HAVE_PATCH
|
||||
bool is_ips_pref;
|
||||
bool is_bps_pref;
|
||||
bool is_ups_pref;
|
||||
bool patch_is_blocked;
|
||||
#endif
|
||||
bool bios_is_missing;
|
||||
bool check_firmware_before_loading;
|
||||
uint16_t flags;
|
||||
};
|
||||
|
||||
/*************************************/
|
||||
@ -724,11 +727,11 @@ static bool content_file_load_into_memory(
|
||||
|
||||
#ifdef HAVE_PATCH
|
||||
/* Attempt to apply a patch. */
|
||||
if (!content_ctx->patch_is_blocked)
|
||||
if (!(content_ctx->flags & CONTENT_INFO_FLAG_PATCH_IS_BLOCKED))
|
||||
has_patch = patch_content(
|
||||
content_ctx->is_ips_pref,
|
||||
content_ctx->is_bps_pref,
|
||||
content_ctx->is_ups_pref,
|
||||
content_ctx->flags & CONTENT_INFO_FLAG_IS_IPS_PREF,
|
||||
content_ctx->flags & CONTENT_INFO_FLAG_IS_BPS_PREF,
|
||||
content_ctx->flags & CONTENT_INFO_FLAG_IS_UPS_PREF,
|
||||
content_ctx->name_ips,
|
||||
content_ctx->name_bps,
|
||||
content_ctx->name_ups,
|
||||
@ -1257,8 +1260,10 @@ static void content_file_set_attributes(
|
||||
content_get_status(&contentless, &is_inited);
|
||||
|
||||
CONTENT_FILE_ATTR_RESET(attr);
|
||||
CONTENT_FILE_ATTR_SET_BLOCK_EXTRACT(attr, content_ctx->block_extract);
|
||||
CONTENT_FILE_ATTR_SET_NEED_FULLPATH(attr, content_ctx->need_fullpath);
|
||||
CONTENT_FILE_ATTR_SET_BLOCK_EXTRACT(attr, content_ctx->flags &
|
||||
CONTENT_INFO_FLAG_BLOCK_EXTRACT);
|
||||
CONTENT_FILE_ATTR_SET_NEED_FULLPATH(attr, content_ctx->flags &
|
||||
CONTENT_INFO_FLAG_NEED_FULLPATH);
|
||||
CONTENT_FILE_ATTR_SET_REQUIRED(attr, !contentless);
|
||||
|
||||
#if defined(HAVE_RUNAHEAD)
|
||||
@ -1273,7 +1278,7 @@ static void content_file_set_attributes(
|
||||
if (string_is_empty(content_path))
|
||||
{
|
||||
if (contentless &&
|
||||
content_ctx->set_supports_no_game_enable)
|
||||
content_ctx->flags & CONTENT_INFO_FLAG_SET_SUPPORTS_NO_GAME_ENABLE)
|
||||
string_list_append(content, "", attr);
|
||||
}
|
||||
else
|
||||
@ -1888,8 +1893,8 @@ static bool firmware_update_status(
|
||||
retroarch_ctl(RARCH_CTL_SET_MISSING_BIOS, NULL);
|
||||
|
||||
if (
|
||||
content_ctx->bios_is_missing &&
|
||||
content_ctx->check_firmware_before_loading)
|
||||
(content_ctx->flags & CONTENT_INFO_FLAG_BIOS_IS_MISSING)
|
||||
&& (content_ctx->flags & CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING))
|
||||
{
|
||||
runloop_msg_queue_push(
|
||||
msg_hash_to_str(MSG_FIRMWARE),
|
||||
@ -1918,23 +1923,28 @@ bool task_push_start_dummy_core(content_ctx_info_t *content_info)
|
||||
if (!content_info)
|
||||
return false;
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
content_ctx.name_ips = NULL;
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -1998,24 +2008,30 @@ bool task_push_load_content_from_playlist_from_menu(
|
||||
#ifndef HAVE_DYNAMIC
|
||||
bool force_core_reload = settings->bools.always_reload_core_on_run_content;
|
||||
#endif
|
||||
bool check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
|
||||
content_ctx.check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
content_ctx.name_ips = NULL;
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -2122,34 +2138,38 @@ end:
|
||||
bool task_push_start_current_core(content_ctx_info_t *content_info)
|
||||
{
|
||||
content_information_ctx_t content_ctx;
|
||||
|
||||
content_state_t *p_content = content_state_get_ptr();
|
||||
bool ret = true;
|
||||
settings_t *settings = config_get_ptr();
|
||||
runloop_state_t *runloop_st = runloop_state_get_ptr();
|
||||
const char *path_dir_system = settings->paths.directory_system;
|
||||
bool check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
bool ret = true;
|
||||
content_state_t *p_content = content_state_get_ptr();
|
||||
settings_t *settings = config_get_ptr();
|
||||
runloop_state_t *runloop_st = runloop_state_get_ptr();
|
||||
const char *path_dir_system = settings->paths.directory_system;
|
||||
bool check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
|
||||
if (!content_info)
|
||||
return false;
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
content_ctx.name_ips = NULL;
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -2261,8 +2281,12 @@ bool task_push_load_contentless_core_from_menu(
|
||||
if (string_is_empty(core_path))
|
||||
return false;
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
if (!string_is_empty(path_dir_system))
|
||||
content_ctx.directory_system = strdup(path_dir_system);
|
||||
|
||||
@ -2358,23 +2382,28 @@ bool task_push_load_content_with_new_core_from_menu(
|
||||
type, cb, user_data);
|
||||
#endif
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
content_ctx.name_ips = NULL;
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -2458,23 +2487,28 @@ static bool task_load_content_internal(
|
||||
const char *path_dir_system = settings->paths.directory_system;
|
||||
const char *path_dir_cache = settings->paths.directory_cache;
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.bios_is_missing = retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL);
|
||||
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
content_ctx.name_ips = NULL;
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -2483,15 +2517,18 @@ static bool task_load_content_internal(
|
||||
{
|
||||
struct retro_system_info *system = &runloop_state_get_ptr()->system.info;
|
||||
|
||||
content_ctx.set_supports_no_game_enable = set_supports_no_game_enable;
|
||||
if (set_supports_no_game_enable)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_SET_SUPPORTS_NO_GAME_ENABLE;
|
||||
|
||||
if (!string_is_empty(path_dir_cache))
|
||||
content_ctx.directory_cache = strdup(path_dir_cache);
|
||||
if (!string_is_empty(system->valid_extensions))
|
||||
content_ctx.valid_extensions = strdup(system->valid_extensions);
|
||||
|
||||
content_ctx.block_extract = system->block_extract;
|
||||
content_ctx.need_fullpath = system->need_fullpath;
|
||||
if (system->block_extract)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BLOCK_EXTRACT;
|
||||
if (system->need_fullpath)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_NEED_FULLPATH;
|
||||
|
||||
content_ctx.subsystem.data = sys_info->subsystem.data;
|
||||
content_ctx.subsystem.size = sys_info->subsystem.size;
|
||||
@ -2976,28 +3013,35 @@ bool content_init(void)
|
||||
{
|
||||
struct string_list content;
|
||||
content_information_ctx_t content_ctx;
|
||||
enum msg_hash_enums error_enum = MSG_UNKNOWN;
|
||||
content_state_t *p_content = content_state_get_ptr();
|
||||
enum msg_hash_enums error_enum = MSG_UNKNOWN;
|
||||
content_state_t *p_content = content_state_get_ptr();
|
||||
|
||||
bool ret = true;
|
||||
char *error_string = NULL;
|
||||
runloop_state_t *runloop_st = runloop_state_get_ptr();
|
||||
rarch_system_info_t *sys_info = &runloop_st->system;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
bool set_supports_no_game_enable = settings->bools.set_supports_no_game_enable;
|
||||
const char *path_dir_system = settings->paths.directory_system;
|
||||
const char *path_dir_cache = settings->paths.directory_cache;
|
||||
bool ret = true;
|
||||
char *error_string = NULL;
|
||||
runloop_state_t *runloop_st = runloop_state_get_ptr();
|
||||
rarch_system_info_t *sys_info = &runloop_st->system;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool check_firmware_before_loading = settings->bools.check_firmware_before_loading;
|
||||
bool set_supports_no_game_enable = settings->bools.set_supports_no_game_enable;
|
||||
const char *path_dir_system = settings->paths.directory_system;
|
||||
const char *path_dir_cache = settings->paths.directory_cache;
|
||||
|
||||
content_file_list_free(p_content->content_list);
|
||||
p_content->content_list = NULL;
|
||||
p_content->content_list = NULL;
|
||||
|
||||
content_ctx.check_firmware_before_loading = check_firmware_before_loading;
|
||||
content_ctx.flags = 0;
|
||||
|
||||
if (check_firmware_before_loading)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
|
||||
#ifdef HAVE_PATCH
|
||||
content_ctx.is_ips_pref = retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL);
|
||||
content_ctx.is_bps_pref = retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL);
|
||||
content_ctx.is_ups_pref = retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL);
|
||||
content_ctx.patch_is_blocked = runloop_st->patch_blocked;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_IPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_BPS_PREF;
|
||||
if (retroarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL))
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_IS_UPS_PREF;
|
||||
if (runloop_st->patch_blocked)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
|
||||
#endif
|
||||
content_ctx.directory_system = NULL;
|
||||
content_ctx.directory_cache = NULL;
|
||||
@ -3005,9 +3049,6 @@ bool content_init(void)
|
||||
content_ctx.name_bps = NULL;
|
||||
content_ctx.name_ups = NULL;
|
||||
content_ctx.valid_extensions = NULL;
|
||||
content_ctx.block_extract = false;
|
||||
content_ctx.need_fullpath = false;
|
||||
content_ctx.set_supports_no_game_enable = false;
|
||||
|
||||
content_ctx.subsystem.data = NULL;
|
||||
content_ctx.subsystem.size = 0;
|
||||
@ -3023,7 +3064,8 @@ bool content_init(void)
|
||||
{
|
||||
struct retro_system_info *system = &runloop_state_get_ptr()->system.info;
|
||||
|
||||
content_ctx.set_supports_no_game_enable = set_supports_no_game_enable;
|
||||
if (set_supports_no_game_enable)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_SET_SUPPORTS_NO_GAME_ENABLE;
|
||||
|
||||
if (!string_is_empty(path_dir_system))
|
||||
content_ctx.directory_system = strdup(path_dir_system);
|
||||
@ -3032,8 +3074,10 @@ bool content_init(void)
|
||||
if (!string_is_empty(system->valid_extensions))
|
||||
content_ctx.valid_extensions = strdup(system->valid_extensions);
|
||||
|
||||
content_ctx.block_extract = system->block_extract;
|
||||
content_ctx.need_fullpath = system->need_fullpath;
|
||||
if (system->block_extract)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_BLOCK_EXTRACT;
|
||||
if (system->need_fullpath)
|
||||
content_ctx.flags |= CONTENT_INFO_FLAG_NEED_FULLPATH;
|
||||
|
||||
content_ctx.subsystem.data = sys_info->subsystem.data;
|
||||
content_ctx.subsystem.size = sys_info->subsystem.size;
|
||||
|
@ -57,6 +57,14 @@ typedef struct database_state_handle
|
||||
char serial[4096];
|
||||
} database_state_handle_t;
|
||||
|
||||
enum db_flags_enum
|
||||
{
|
||||
DB_HANDLE_FLAG_IS_DIRECTORY = (1 << 0),
|
||||
DB_HANDLE_FLAG_SCAN_STARTED = (1 << 1),
|
||||
DB_HANDLE_FLAG_SCAN_WITHOUT_CORE_MATCH = (1 << 2),
|
||||
DB_HANDLE_FLAG_SHOW_HIDDEN_FILES = (1 << 3)
|
||||
};
|
||||
|
||||
typedef struct db_handle
|
||||
{
|
||||
char *playlist_directory;
|
||||
@ -66,10 +74,7 @@ typedef struct db_handle
|
||||
database_state_handle_t state;
|
||||
playlist_config_t playlist_config; /* size_t alignment */
|
||||
unsigned status;
|
||||
bool is_directory;
|
||||
bool scan_started;
|
||||
bool scan_without_core_match;
|
||||
bool show_hidden_files;
|
||||
uint8_t flags;
|
||||
} db_handle_t;
|
||||
|
||||
static const char *database_info_get_current_name(
|
||||
@ -853,7 +858,7 @@ static int task_database_iterate_crc_lookup(
|
||||
|
||||
query[0] = '\0';
|
||||
|
||||
if (!_db->scan_without_core_match)
|
||||
if (!(_db->flags & DB_HANDLE_FLAG_SCAN_WITHOUT_CORE_MATCH))
|
||||
{
|
||||
/* don't scan files that can't be in this database.
|
||||
*
|
||||
@ -1111,16 +1116,16 @@ static void task_database_handler(retro_task_t *task)
|
||||
if (!db)
|
||||
goto task_finished;
|
||||
|
||||
if (!db->scan_started)
|
||||
if (!(db->flags & DB_HANDLE_FLAG_SCAN_STARTED))
|
||||
{
|
||||
db->scan_started = true;
|
||||
db->flags |= DB_HANDLE_FLAG_SCAN_STARTED;
|
||||
|
||||
if (!string_is_empty(db->fullpath))
|
||||
{
|
||||
if (db->is_directory)
|
||||
if (db->flags & DB_HANDLE_FLAG_IS_DIRECTORY)
|
||||
db->handle = database_info_dir_init(
|
||||
db->fullpath, DATABASE_TYPE_ITERATE,
|
||||
task, db->show_hidden_files);
|
||||
task, db->flags & DB_HANDLE_FLAG_SHOW_HIDDEN_FILES);
|
||||
else
|
||||
db->handle = database_info_file_init(
|
||||
db->fullpath, DATABASE_TYPE_ITERATE,
|
||||
@ -1146,12 +1151,12 @@ static void task_database_handler(retro_task_t *task)
|
||||
dbstate->list = dir_list_new(
|
||||
db->content_database_path,
|
||||
"rdb", false,
|
||||
db->show_hidden_files,
|
||||
db->flags & DB_HANDLE_FLAG_SHOW_HIDDEN_FILES,
|
||||
false, false);
|
||||
|
||||
/* If the scan path matches a database path exactly then
|
||||
* save time by only processing that database. */
|
||||
if (dbstate->list && db->is_directory)
|
||||
if (dbstate->list && (db->flags & DB_HANDLE_FLAG_IS_DIRECTORY))
|
||||
{
|
||||
size_t i;
|
||||
char *dirname = NULL;
|
||||
@ -1230,7 +1235,7 @@ static void task_database_handler(retro_task_t *task)
|
||||
else
|
||||
{
|
||||
const char *msg = NULL;
|
||||
if (db->is_directory)
|
||||
if (db->flags & DB_HANDLE_FLAG_IS_DIRECTORY)
|
||||
msg = msg_hash_to_str(MSG_SCANNING_OF_DIRECTORY_FINISHED);
|
||||
else
|
||||
msg = msg_hash_to_str(MSG_SCANNING_OF_FILE_FINISHED);
|
||||
@ -1317,7 +1322,8 @@ bool task_push_dbscan(
|
||||
|
||||
#ifdef RARCH_INTERNAL
|
||||
t->progress_cb = task_database_progress_cb;
|
||||
db->scan_without_core_match = settings->bools.scan_without_core_match;
|
||||
if (settings->bools.scan_without_core_match)
|
||||
db->flags |= DB_HANDLE_FLAG_SCAN_WITHOUT_CORE_MATCH;
|
||||
db->playlist_config.capacity = COLLECTION_SIZE;
|
||||
db->playlist_config.old_format = settings->bools.playlist_use_old_format;
|
||||
db->playlist_config.compress = settings->bools.playlist_compression;
|
||||
@ -1330,8 +1336,10 @@ bool task_push_dbscan(
|
||||
db->playlist_config.fuzzy_archive_match = false;
|
||||
playlist_config_set_base_content_directory(&db->playlist_config, NULL);
|
||||
#endif
|
||||
db->show_hidden_files = db_dir_show_hidden_files;
|
||||
db->is_directory = directory;
|
||||
if (db_dir_show_hidden_files)
|
||||
db->flags |= DB_HANDLE_FLAG_SHOW_HIDDEN_FILES;
|
||||
if (directory)
|
||||
db->flags |= DB_HANDLE_FLAG_IS_DIRECTORY;
|
||||
db->fullpath = strdup(fullpath);
|
||||
db->playlist_directory = strdup(playlist_directory);
|
||||
db->content_database_path = strdup(content_database);
|
||||
|
@ -38,6 +38,13 @@ enum image_status_enum
|
||||
IMAGE_STATUS_PROCESS_TRANSFER_PARSE
|
||||
};
|
||||
|
||||
enum image_flags_enum
|
||||
{
|
||||
IMAGE_FLAG_IS_BLOCKING = (1 << 0),
|
||||
IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING = (1 << 1),
|
||||
IMAGE_FLAG_IS_FINISHED = (1 << 2)
|
||||
};
|
||||
|
||||
struct nbio_image_handle
|
||||
{
|
||||
void *handle;
|
||||
@ -49,9 +56,7 @@ struct nbio_image_handle
|
||||
unsigned upscale_threshold;
|
||||
enum image_type_enum type;
|
||||
enum image_status_enum status;
|
||||
bool is_blocking;
|
||||
bool is_blocking_on_processing;
|
||||
bool is_finished;
|
||||
uint8_t flags;
|
||||
};
|
||||
|
||||
static int cb_image_upload_generic(void *data, size_t len)
|
||||
@ -78,9 +83,9 @@ static int cb_image_upload_generic(void *data, size_t len)
|
||||
image_texture_color_convert(r_shift, g_shift, b_shift,
|
||||
a_shift, &image->ti);
|
||||
|
||||
image->is_blocking_on_processing = false;
|
||||
image->is_blocking = true;
|
||||
image->is_finished = true;
|
||||
image->flags &= ~IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
|
||||
image->flags |= IMAGE_FLAG_IS_BLOCKING;
|
||||
image->flags |= IMAGE_FLAG_IS_FINISHED;
|
||||
nbio->is_finished = true;
|
||||
|
||||
return 0;
|
||||
@ -121,8 +126,14 @@ static int cb_image_thumbnail(void *data, size_t len)
|
||||
)
|
||||
return -1;
|
||||
|
||||
image->is_blocking_on_processing = (retval != IMAGE_PROCESS_END);
|
||||
image->is_finished = (retval == IMAGE_PROCESS_END);
|
||||
if (retval != IMAGE_PROCESS_END)
|
||||
image->flags |= IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
|
||||
else
|
||||
image->flags &= ~IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
|
||||
if (retval == IMAGE_PROCESS_END)
|
||||
image->flags |= IMAGE_FLAG_IS_FINISHED;
|
||||
else
|
||||
image->flags &= ~IMAGE_FLAG_IS_FINISHED;
|
||||
image->cb = &cb_image_upload_generic;
|
||||
|
||||
return 0;
|
||||
@ -218,8 +229,8 @@ static int cb_nbio_image_thumbnail(void *data, size_t len)
|
||||
return -1;
|
||||
}
|
||||
|
||||
image->is_blocking = false;
|
||||
image->is_finished = false;
|
||||
image->flags &= ~IMAGE_FLAG_IS_BLOCKING;
|
||||
image->flags &= ~IMAGE_FLAG_IS_FINISHED;
|
||||
nbio->is_finished = true;
|
||||
|
||||
return 0;
|
||||
@ -288,11 +299,12 @@ bool task_image_load_handler(retro_task_t *task)
|
||||
if (image->cb(nbio, len) == -1)
|
||||
return false;
|
||||
}
|
||||
if (image->is_blocking_on_processing)
|
||||
if (image->flags & IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING)
|
||||
image->status = IMAGE_STATUS_PROCESS_TRANSFER;
|
||||
break;
|
||||
case IMAGE_STATUS_TRANSFER:
|
||||
if (!image->is_blocking && !image->is_finished)
|
||||
if ( !(image->flags & IMAGE_FLAG_IS_BLOCKING)
|
||||
&& !(image->flags & IMAGE_FLAG_IS_FINISHED))
|
||||
{
|
||||
retro_time_t start_time = cpu_features_get_time_usec();
|
||||
do
|
||||
@ -313,13 +325,13 @@ bool task_image_load_handler(retro_task_t *task)
|
||||
if (image->cb(nbio, len) == -1)
|
||||
return false;
|
||||
}
|
||||
if (!image->is_finished)
|
||||
if (!(image->flags & IMAGE_FLAG_IS_FINISHED))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( nbio->is_finished
|
||||
&& (image && image->is_finished)
|
||||
&& (image && (image->flags & IMAGE_FLAG_IS_FINISHED))
|
||||
&& (!task_get_cancelled(task)))
|
||||
{
|
||||
struct texture_image *img = (struct texture_image*)malloc(sizeof(struct texture_image));
|
||||
@ -414,9 +426,6 @@ bool task_push_image_load(const char *fullpath,
|
||||
|
||||
image->type = image_texture_get_type(fullpath);
|
||||
image->status = IMAGE_STATUS_WAIT;
|
||||
image->is_blocking = false;
|
||||
image->is_blocking_on_processing = false;
|
||||
image->is_finished = false;
|
||||
image->processing_final_state = 0;
|
||||
image->frame_duration = 0;
|
||||
image->size = 0;
|
||||
|
@ -49,6 +49,14 @@ enum pl_thumb_status
|
||||
PL_THUMB_END
|
||||
};
|
||||
|
||||
enum pl_thumb_flags
|
||||
{
|
||||
PL_THUMB_FLAG_OVERWRITE = (1 << 0),
|
||||
PL_THUMB_FLAG_RIGHT_THUMB_EXISTS = (1 << 1),
|
||||
PL_THUMB_FLAG_LEFT_THUMB_EXISTS = (1 << 2),
|
||||
PL_THUMB_FLAG_HTTP_TASK_COMPLETE = (1 << 3)
|
||||
};
|
||||
|
||||
typedef struct pl_thumb_handle
|
||||
{
|
||||
char *system;
|
||||
@ -66,10 +74,7 @@ typedef struct pl_thumb_handle
|
||||
|
||||
enum pl_thumb_status status;
|
||||
|
||||
bool overwrite;
|
||||
bool right_thumbnail_exists;
|
||||
bool left_thumbnail_exists;
|
||||
bool http_task_complete;
|
||||
uint8_t flags;
|
||||
} pl_thumb_handle_t;
|
||||
|
||||
typedef struct pl_entry_id
|
||||
@ -192,7 +197,7 @@ void cb_http_task_download_pl_thumbnail(
|
||||
if (!(pl_thumb = (pl_thumb_handle_t*)transf->user_data))
|
||||
goto finish;
|
||||
|
||||
pl_thumb->http_task_complete = true;
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_HTTP_TASK_COMPLETE;
|
||||
|
||||
/* Remaining sanity checks... */
|
||||
if (!data || !data->data || string_is_empty(transf->path))
|
||||
@ -242,14 +247,14 @@ static void download_pl_thumbnail(pl_thumb_handle_t *pl_thumb)
|
||||
if (get_thumbnail_paths(pl_thumb, path, sizeof(path), url, sizeof(url)))
|
||||
{
|
||||
/* Only download missing thumbnails */
|
||||
if (!path_is_valid(path) || pl_thumb->overwrite)
|
||||
if (!path_is_valid(path) || (pl_thumb->flags & PL_THUMB_FLAG_OVERWRITE))
|
||||
{
|
||||
file_transfer_t *transf = (file_transfer_t*)malloc(sizeof(file_transfer_t));
|
||||
if (!transf)
|
||||
return; /* If this happens then everything is broken anyway... */
|
||||
|
||||
/* Initialise http task status */
|
||||
pl_thumb->http_task_complete = false;
|
||||
pl_thumb->flags &= ~PL_THUMB_FLAG_HTTP_TASK_COMPLETE;
|
||||
|
||||
transf->enum_idx = MSG_UNKNOWN;
|
||||
transf->path[0] = '\0';
|
||||
@ -265,7 +270,7 @@ static void download_pl_thumbnail(pl_thumb_handle_t *pl_thumb)
|
||||
* signal that the task is 'complete' */
|
||||
if (!(pl_thumb->http_task = (retro_task_t*)task_push_http_transfer_file(
|
||||
url, true, NULL, cb_http_task_download_pl_thumbnail, transf)))
|
||||
pl_thumb->http_task_complete = true;
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_HTTP_TASK_COMPLETE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -386,10 +391,10 @@ static void task_pl_thumbnail_download_handler(retro_task_t *task)
|
||||
* or an error occurred - in either case,
|
||||
* current task is 'complete' */
|
||||
if (!pl_thumb->http_task)
|
||||
pl_thumb->http_task_complete = true;
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_HTTP_TASK_COMPLETE;
|
||||
/* > Wait for task_push_http_transfer_file()
|
||||
* callback to trigger */
|
||||
else if (!pl_thumb->http_task_complete)
|
||||
else if (!(pl_thumb->flags & PL_THUMB_FLAG_HTTP_TASK_COMPLETE))
|
||||
break;
|
||||
|
||||
pl_thumb->http_task = NULL;
|
||||
@ -494,11 +499,9 @@ bool task_push_pl_thumbnail_download(
|
||||
pl_thumb->playlist = NULL;
|
||||
pl_thumb->thumbnail_path_data = NULL;
|
||||
pl_thumb->http_task = NULL;
|
||||
pl_thumb->http_task_complete = false;
|
||||
pl_thumb->list_size = 0;
|
||||
pl_thumb->list_index = 0;
|
||||
pl_thumb->type_idx = 1;
|
||||
pl_thumb->overwrite = false;
|
||||
pl_thumb->status = PL_THUMB_BEGIN;
|
||||
|
||||
/* Configure task */
|
||||
@ -601,13 +604,15 @@ static void cb_task_pl_entry_thumbnail_refresh_menu(
|
||||
* (with the caveat that we must also refresh if existing
|
||||
* files have been overwritten) */
|
||||
|
||||
if (!pl_thumb->right_thumbnail_exists || pl_thumb->overwrite)
|
||||
if ( !(pl_thumb->flags & PL_THUMB_FLAG_RIGHT_THUMB_EXISTS)
|
||||
||(pl_thumb->flags & PL_THUMB_FLAG_OVERWRITE))
|
||||
if (gfx_thumbnail_update_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
|
||||
if (gfx_thumbnail_get_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT, &thumbnail_path))
|
||||
do_refresh = path_is_valid(thumbnail_path);
|
||||
|
||||
if (!do_refresh)
|
||||
if (!pl_thumb->left_thumbnail_exists || pl_thumb->overwrite)
|
||||
if ( !(pl_thumb->flags & PL_THUMB_FLAG_LEFT_THUMB_EXISTS)
|
||||
|| (pl_thumb->flags & PL_THUMB_FLAG_OVERWRITE))
|
||||
if (gfx_thumbnail_update_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
|
||||
if (gfx_thumbnail_get_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_LEFT, &left_thumbnail_path))
|
||||
do_refresh = path_is_valid(left_thumbnail_path);
|
||||
@ -651,19 +656,37 @@ static void task_pl_entry_thumbnail_download_handler(retro_task_t *task)
|
||||
|
||||
/* Check whether current right/left thumbnails
|
||||
* already exist (required for menu refresh callback) */
|
||||
pl_thumb->right_thumbnail_exists = false;
|
||||
if (gfx_thumbnail_update_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
|
||||
if (gfx_thumbnail_get_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT, &right_thumbnail_path))
|
||||
pl_thumb->right_thumbnail_exists = path_is_valid(right_thumbnail_path);
|
||||
pl_thumb->flags &= ~PL_THUMB_FLAG_RIGHT_THUMB_EXISTS;
|
||||
pl_thumb->flags &= ~PL_THUMB_FLAG_LEFT_THUMB_EXISTS;
|
||||
|
||||
if (gfx_thumbnail_update_path(
|
||||
pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
|
||||
{
|
||||
if (gfx_thumbnail_get_path(
|
||||
pl_thumb->thumbnail_path_data,
|
||||
GFX_THUMBNAIL_RIGHT, &right_thumbnail_path))
|
||||
{
|
||||
if (path_is_valid(right_thumbnail_path))
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_RIGHT_THUMB_EXISTS;
|
||||
}
|
||||
}
|
||||
|
||||
pl_thumb->left_thumbnail_exists = false;
|
||||
if (gfx_thumbnail_update_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
|
||||
if (gfx_thumbnail_get_path(pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_LEFT, &left_thumbnail_path))
|
||||
pl_thumb->left_thumbnail_exists = path_is_valid(left_thumbnail_path);
|
||||
if (gfx_thumbnail_update_path(
|
||||
pl_thumb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
|
||||
{
|
||||
if (gfx_thumbnail_get_path(
|
||||
pl_thumb->thumbnail_path_data,
|
||||
GFX_THUMBNAIL_LEFT, &left_thumbnail_path))
|
||||
{
|
||||
if (path_is_valid(left_thumbnail_path))
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_LEFT_THUMB_EXISTS;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set task title */
|
||||
task_free_title(task);
|
||||
if (gfx_thumbnail_get_label(pl_thumb->thumbnail_path_data, &label))
|
||||
if (gfx_thumbnail_get_label(
|
||||
pl_thumb->thumbnail_path_data, &label))
|
||||
task_set_title(task, strdup(label));
|
||||
else
|
||||
task_set_title(task, strdup(""));
|
||||
@ -682,11 +705,11 @@ static void task_pl_entry_thumbnail_download_handler(retro_task_t *task)
|
||||
* or an error occurred - in either case,
|
||||
* current task is 'complete' */
|
||||
if (!pl_thumb->http_task)
|
||||
pl_thumb->http_task_complete = true;
|
||||
pl_thumb->flags |= PL_THUMB_FLAG_HTTP_TASK_COMPLETE;
|
||||
|
||||
/* > Wait for task_push_http_transfer_file()
|
||||
* callback to trigger */
|
||||
if (pl_thumb->http_task_complete)
|
||||
if (pl_thumb->flags & PL_THUMB_FLAG_HTTP_TASK_COMPLETE)
|
||||
pl_thumb->http_task = NULL;
|
||||
else
|
||||
break;
|
||||
@ -819,12 +842,13 @@ bool task_push_pl_entry_thumbnail_download(
|
||||
pl_thumb->playlist = NULL;
|
||||
pl_thumb->thumbnail_path_data = thumbnail_path_data;
|
||||
pl_thumb->http_task = NULL;
|
||||
pl_thumb->http_task_complete = false;
|
||||
pl_thumb->list_size = playlist_size(playlist);
|
||||
pl_thumb->list_index = idx;
|
||||
pl_thumb->type_idx = 1;
|
||||
pl_thumb->overwrite = overwrite;
|
||||
pl_thumb->status = PL_THUMB_BEGIN;
|
||||
|
||||
if (overwrite)
|
||||
pl_thumb->flags = PL_THUMB_FLAG_OVERWRITE;
|
||||
|
||||
/* Configure task */
|
||||
task->handler = task_pl_entry_thumbnail_download_handler;
|
||||
|
Loading…
Reference in New Issue
Block a user