From 75ae05d287c97492668b91fc80e5f27a74d9daf3 Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Fri, 16 Aug 2019 15:49:01 +0100 Subject: [PATCH] (menu_thumbnail_path) API clean-up + tiny bug fix --- menu/drivers/ozone/ozone.c | 3 +- menu/drivers/rgui.c | 3 +- menu/drivers/xmb.c | 3 +- menu/menu_thumbnail_path.c | 49 ++++++++++++++++++++---------- menu/menu_thumbnail_path.h | 5 ++- tasks/task_pl_thumbnail_download.c | 6 ++-- 6 files changed, 47 insertions(+), 22 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 96fbbbcc97..45f60bb493 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -1340,7 +1340,8 @@ static void ozone_set_thumbnail_system(void *data, char*s, size_t len) if (!ozone) return; - menu_thumbnail_set_system(ozone->thumbnail_path_data, s); + menu_thumbnail_set_system( + ozone->thumbnail_path_data, s, playlist_get_cached()); } static void ozone_get_thumbnail_system(void *data, char*s, size_t len) diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 0e4209f173..fb2101455b 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -4260,7 +4260,8 @@ static void rgui_set_thumbnail_system(void *userdata, char *s, size_t len) rgui_t *rgui = (rgui_t*)userdata; if (!rgui) return; - menu_thumbnail_set_system(rgui->thumbnail_path_data, s); + menu_thumbnail_set_system( + rgui->thumbnail_path_data, s, playlist_get_cached()); } static void rgui_get_thumbnail_system(void *userdata, char *s, size_t len) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index e1f136d82b..7aa3a4ee78 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1132,7 +1132,8 @@ static void xmb_set_thumbnail_system(void *data, char*s, size_t len) if (!xmb) return; - menu_thumbnail_set_system(xmb->thumbnail_path_data, s); + menu_thumbnail_set_system( + xmb->thumbnail_path_data, s, playlist_get_cached()); } static void xmb_get_thumbnail_system(void *data, char*s, size_t len) diff --git a/menu/menu_thumbnail_path.c b/menu/menu_thumbnail_path.c index b596e7ba10..bd9ad6b7cd 100644 --- a/menu/menu_thumbnail_path.c +++ b/menu/menu_thumbnail_path.c @@ -225,12 +225,13 @@ static void fill_content_img(menu_thumbnail_path_data_t *path_data) /* Sets current 'system' (default database name). * Returns true if 'system' is valid. + * If playlist is provided, extracts system-specific + * thumbnail assignment metadata (required for accurate + * usage of menu_thumbnail_is_enabled()) * > Used as a fallback when individual content lacks an * associated database name */ -bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char *system) +bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char *system, playlist_t *playlist) { - playlist_t *playlist = playlist_get_cached(); - if (!path_data) return false; @@ -261,26 +262,42 @@ bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char * menu_thumbnail_is_enabled() will go out of sync */ if (playlist) { - /* History/favourites are a special case: 'system' - * can only be set to these values if we have a - * valid playlist (cf. menu_displaylist_parse_playlist()) */ - bool playlist_valid = - string_is_equal(system, "history") || - string_is_equal(system, "favorites"); + const char *playlist_path = playlist_get_conf_path(playlist); + const char *playlist_file = NULL; + bool playlist_valid = false; + + /* Note: This is not considered an error + * (just means that input playlist is ignored) */ + if (string_is_empty(playlist_path)) + return true; + + playlist_file = path_basename(playlist_path); + + /* Note: This is not considered an error + * (just means that input playlist is ignored) */ + if (string_is_empty(playlist_file)) + return true; + + /* Check for history/favourites playlists */ + playlist_valid = + (string_is_equal(system, "history") && + string_is_equal(playlist_file, file_path_str(FILE_PATH_CONTENT_HISTORY))) || + (string_is_equal(system, "favorites") && + string_is_equal(playlist_file, file_path_str(FILE_PATH_CONTENT_FAVORITES))); if (!playlist_valid) { /* This means we have to work a little harder * i.e. check whether the cached playlist file * matches the database name */ - const char *playlist_path = playlist_get_conf_path(playlist); - char playlist_name[PATH_MAX_LENGTH]; + char *playlist_name = NULL; + char tmp[PATH_MAX_LENGTH]; + + tmp[0] = '\0'; + + strlcpy(tmp, playlist_file, sizeof(tmp)); + playlist_name = path_remove_extension(tmp); - playlist_name[0] = '\0'; - - if (!string_is_empty(playlist_path)) - fill_pathname_base_noext(playlist_name, playlist_path, sizeof(playlist_name)); - playlist_valid = string_is_equal(playlist_name, system); } diff --git a/menu/menu_thumbnail_path.h b/menu/menu_thumbnail_path.h index 95c5bf7471..b1f22794e0 100644 --- a/menu/menu_thumbnail_path.h +++ b/menu/menu_thumbnail_path.h @@ -83,9 +83,12 @@ bool menu_thumbnail_is_enabled(menu_thumbnail_path_data_t *path_data, enum menu_ /* Sets current 'system' (default database name). * Returns true if 'system' is valid. + * If playlist is provided, extracts system-specific + * thumbnail assignment metadata (required for accurate + * usage of menu_thumbnail_is_enabled()) * > Used as a fallback when individual content lacks an * associated database name */ -bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char *system); +bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char *system, playlist_t *playlist); /* Sets current thumbnail content according to the specified label. * Returns true if content is valid */ diff --git a/tasks/task_pl_thumbnail_download.c b/tasks/task_pl_thumbnail_download.c index 707369edc4..2b35f62b3f 100644 --- a/tasks/task_pl_thumbnail_download.c +++ b/tasks/task_pl_thumbnail_download.c @@ -276,7 +276,8 @@ static void task_pl_thumbnail_download_handler(retro_task_t *task) if (!pl_thumb->thumbnail_path_data) goto task_finished; - if (!menu_thumbnail_set_system(pl_thumb->thumbnail_path_data, pl_thumb->system)) + if (!menu_thumbnail_set_system( + pl_thumb->thumbnail_path_data, pl_thumb->system, pl_thumb->playlist)) goto task_finished; /* All good - can start iterating */ @@ -565,7 +566,8 @@ static void task_pl_entry_thumbnail_download_handler(retro_task_t *task) if (!pl_thumb->thumbnail_path_data) goto task_finished; - if (!menu_thumbnail_set_system(pl_thumb->thumbnail_path_data, pl_thumb->system)) + if (!menu_thumbnail_set_system( + pl_thumb->thumbnail_path_data, pl_thumb->system, pl_thumb->playlist)) goto task_finished; if (!menu_thumbnail_set_content_playlist(