/* Updates path for specified thumbnail identifier (right, left). * Must be called after: * - menu_thumbnail_set_system() * - menu_thumbnail_set_content*() * ...and before: * - menu_thumbnail_get_path() * Returns true if generated path is valid */ bool menu_thumbnail_update_path(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id) { settings_t *settings = config_get_ptr(); const char *type = menu_thumbnail_get_type(thumbnail_id); const char *system_name = NULL; char *thumbnail_path = NULL; char content_dir[PATH_MAX_LENGTH]; if (!path_data) return false; /* Determine which path we are updating... */ switch (thumbnail_id) { case MENU_THUMBNAIL_RIGHT: thumbnail_path = path_data->right_path; break; case MENU_THUMBNAIL_LEFT: thumbnail_path = path_data->left_path; break; default: return false; } thumbnail_path[0] = '\0'; /* Sundry error checking */ if (!settings) return false; if (string_is_empty(settings->paths.directory_thumbnails)) return false; if (!menu_thumbnail_is_enabled(thumbnail_id)) return false; /* Generate new path */ /* > Check path_data for empty strings */ if (string_is_empty(path_data->content_path) || string_is_empty(path_data->content_img) || (string_is_empty(path_data->system) && string_is_empty(path_data->content_db_name))) return false; /* > Get current system */ if (string_is_empty(path_data->content_db_name)) { /* If this is a content history or favorites playlist * then the current 'path_data->system' string is * meaningless. In this case, we fall back to the * content directory name */ if (string_is_equal(path_data->system, "history") || string_is_equal(path_data->system, "favorites")) { char tmp_buf[PATH_MAX_LENGTH] = {0}; const char *last_slash = find_last_slash(path_data->content_path); content_dir[0] = '\0'; system_name = content_dir; if (last_slash) { size_t path_length = last_slash + 1 - path_data->content_path; if ((path_length > 1) && (path_length < PATH_MAX_LENGTH)) { strlcpy(tmp_buf, path_data->content_path, path_length * sizeof(char)); strlcpy(content_dir, path_basename(tmp_buf), sizeof(content_dir)); } } if (string_is_empty(system_name)) return false; } else system_name = path_data->system; } else system_name = path_data->content_db_name; /* > Special case: thumbnail for imageviewer content * is the image file itself */ if (string_is_equal(system_name, "images_history") || string_is_equal(path_data->content_core_name, "imageviewer")) { /* imageviewer content is identical for left and right thumbnails */ if (path_is_media_type(path_data->content_path) == RARCH_CONTENT_IMAGE) strlcpy(thumbnail_path, path_data->content_path, PATH_MAX_LENGTH * sizeof(char)); } else { char tmp_buf[PATH_MAX_LENGTH]; tmp_buf[0] = '\0'; /* > Normal content: assemble path */ /* >> Base + system name */ fill_pathname_join(thumbnail_path, settings->paths.directory_thumbnails, system_name, PATH_MAX_LENGTH * sizeof(char)); /* >> Add type */ fill_pathname_join(tmp_buf, thumbnail_path, type, sizeof(tmp_buf)); /* >> Add content image */ thumbnail_path[0] = '\0'; fill_pathname_join(thumbnail_path, tmp_buf, path_data->content_img, PATH_MAX_LENGTH * sizeof(char)); } /* Final error check - is cached path empty? */ if (string_is_empty(thumbnail_path)) return false; return true; }
/* Updates path for specified thumbnail identifier (right, left). * Must be called after: * - menu_thumbnail_set_system() * - menu_thumbnail_set_content*() * ...and before: * - menu_thumbnail_get_path() * Returns true if generated path is valid */ bool menu_thumbnail_update_path(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id) { settings_t *settings = config_get_ptr(); const char *type = menu_thumbnail_get_type(thumbnail_id); const char *system_name = NULL; char *thumbnail_path = NULL; if (!path_data) return false; /* Determine which path we are updating... */ switch (thumbnail_id) { case MENU_THUMBNAIL_RIGHT: thumbnail_path = path_data->right_path; break; case MENU_THUMBNAIL_LEFT: thumbnail_path = path_data->left_path; break; default: return false; } thumbnail_path[0] = '\0'; /* Sundry error checking */ if (!settings) return false; if (string_is_empty(settings->paths.directory_thumbnails)) return false; if (!menu_thumbnail_is_enabled(thumbnail_id)) return false; /* Generate new path */ /* > Check path_data for empty strings */ if (string_is_empty(path_data->content_img) || (string_is_empty(path_data->system) && string_is_empty(path_data->content_db_name))) return false; /* > Get current system */ system_name = string_is_empty(path_data->content_db_name) ? path_data->system : path_data->content_db_name; /* > Special case: thumbnail for imageviewer content * is the image file itself */ if (string_is_equal(system_name, "images_history") || string_is_equal(path_data->content_core_name, "imageviewer")) { if (string_is_empty(path_data->content_path)) return false; /* imageviewer content is identical for left and right thumbnails */ if (path_is_media_type(path_data->content_path) == RARCH_CONTENT_IMAGE) strlcpy(thumbnail_path, path_data->content_path, PATH_MAX_LENGTH * sizeof(char)); } else { char tmp_buf[PATH_MAX_LENGTH]; tmp_buf[0] = '\0'; /* > Normal content: assemble path */ /* >> Base + system name */ fill_pathname_join(thumbnail_path, settings->paths.directory_thumbnails, system_name, PATH_MAX_LENGTH * sizeof(char)); /* >> Add type */ fill_pathname_join(tmp_buf, thumbnail_path, type, sizeof(tmp_buf)); /* >> Add content image */ thumbnail_path[0] = '\0'; fill_pathname_join(thumbnail_path, tmp_buf, path_data->content_img, PATH_MAX_LENGTH * sizeof(char)); } /* Final error check - is cached path empty? */ if (string_is_empty(thumbnail_path)) return false; return true; }