(Playlist) Get rid of settings_t dependency

This commit is contained in:
twinaphex 2020-01-04 12:04:00 +01:00
parent 1d6f547e7f
commit 9c6c10da22
17 changed files with 277 additions and 186 deletions

View File

@ -17,6 +17,11 @@
#include <string/stdstring.h> #include <string/stdstring.h>
#include <retro_timers.h> #include <retro_timers.h>
#include <net/net_http.h>
#include <streams/file_stream.h>
#include <file/file_path.h>
#include <features/features_cpu.h>
#include "discord.h" #include "discord.h"
#include "discord_register.h" #include "discord_register.h"
@ -46,14 +51,10 @@
#include "../../menu/menu_cbs.h" #include "../../menu/menu_cbs.h"
#endif #endif
#include <net/net_http.h>
#include "../network/net_http_special.h" #include "../network/net_http_special.h"
#include "../tasks/tasks_internal.h" #include "../tasks/tasks_internal.h"
#include <streams/file_stream.h>
#include <file/file_path.h>
#include "../file_path_special.h" #include "../file_path_special.h"
#include <features/features_cpu.h>
static int64_t start_time = 0; static int64_t start_time = 0;
static int64_t pause_time = 0; static int64_t pause_time = 0;
@ -210,7 +211,7 @@ static void handle_discord_join_cb(retro_task_t *task,
task_push_netplay_crc_scan(room->gamecrc, task_push_netplay_crc_scan(room->gamecrc,
room->gamename, join_hostname, room->corename, room->subsystem_name); room->gamename, join_hostname, room->corename, room->subsystem_name);
connecting = true; connecting = true;
discord_update(DISCORD_PRESENCE_NETPLAY_CLIENT); discord_update(DISCORD_PRESENCE_NETPLAY_CLIENT, false);
} }
finish: finish:
@ -302,7 +303,9 @@ static void handle_discord_join_request(const DiscordUser* request)
#endif #endif
} }
void discord_update(enum discord_presence presence) /* TODO/FIXME - replace last parameter with struct type to allow for more
* arguments to be passed later */
void discord_update(enum discord_presence presence, bool fuzzy_archive_match)
{ {
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
@ -350,7 +353,8 @@ void discord_update(enum discord_presence presence)
if (current_playlist) if (current_playlist)
{ {
playlist_get_index_by_path( playlist_get_index_by_path(
current_playlist, path_get(RARCH_PATH_CONTENT), &entry); current_playlist, path_get(RARCH_PATH_CONTENT), &entry,
fuzzy_archive_match);
if (entry && !string_is_empty(entry->label)) if (entry && !string_is_empty(entry->label))
label = entry->label; label = entry->label;

View File

@ -45,7 +45,7 @@ void discord_init(const char *discord_app_id);
void discord_shutdown(void); void discord_shutdown(void);
void discord_update(enum discord_presence presence); void discord_update(enum discord_presence presence, bool fuzzy_archive_match);
bool discord_is_ready(void); bool discord_is_ready(void);

View File

@ -1077,7 +1077,8 @@ static bool manual_content_scan_get_playlist_content_label(
void manual_content_scan_add_content_to_playlist( void manual_content_scan_add_content_to_playlist(
manual_content_scan_task_config_t *task_config, manual_content_scan_task_config_t *task_config,
playlist_t *playlist, const char *content_path, playlist_t *playlist, const char *content_path,
int content_type, logiqx_dat_t *dat_file) int content_type, logiqx_dat_t *dat_file,
bool fuzzy_archive_match)
{ {
char playlist_content_path[PATH_MAX_LENGTH]; char playlist_content_path[PATH_MAX_LENGTH];
@ -1095,7 +1096,7 @@ void manual_content_scan_add_content_to_playlist(
/* Check whether content is already included /* Check whether content is already included
* in playlist */ * in playlist */
if (!playlist_entry_exists(playlist, playlist_content_path)) if (!playlist_entry_exists(playlist, playlist_content_path, fuzzy_archive_match))
{ {
struct playlist_entry entry = {0}; struct playlist_entry entry = {0};
char label[PATH_MAX_LENGTH]; char label[PATH_MAX_LENGTH];
@ -1119,6 +1120,6 @@ void manual_content_scan_add_content_to_playlist(
entry.db_name = task_config->database_name; entry.db_name = task_config->database_name;
/* Add entry to playlist */ /* Add entry to playlist */
playlist_push(playlist, &entry); playlist_push(playlist, &entry, fuzzy_archive_match);
} }
} }

View File

@ -228,7 +228,8 @@ struct string_list *manual_content_scan_get_content_list(manual_content_scan_tas
void manual_content_scan_add_content_to_playlist( void manual_content_scan_add_content_to_playlist(
manual_content_scan_task_config_t *task_config, manual_content_scan_task_config_t *task_config,
playlist_t *playlist, const char *content_path, playlist_t *playlist, const char *content_path,
int content_type, logiqx_dat_t *dat_file); int content_type, logiqx_dat_t *dat_file,
bool fuzzy_archive_match);
RETRO_END_DECLS RETRO_END_DECLS

View File

@ -392,6 +392,7 @@ static int playlist_association_left(unsigned type, const char *label,
{ {
char core_path[PATH_MAX_LENGTH]; char core_path[PATH_MAX_LENGTH];
size_t i, next, current = 0; size_t i, next, current = 0;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
core_info_list_t *core_info_list = NULL; core_info_list_t *core_info_list = NULL;
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
@ -450,7 +451,7 @@ static int playlist_association_left(unsigned type, const char *label,
/* Update playlist */ /* Update playlist */
playlist_set_default_core_path(playlist, core_info->path); playlist_set_default_core_path(playlist, core_info->path);
playlist_set_default_core_name(playlist, core_info->display_name); playlist_set_default_core_name(playlist, core_info->display_name);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -459,6 +460,7 @@ static int playlist_label_display_mode_left(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
enum playlist_label_display_mode label_display_mode; enum playlist_label_display_mode label_display_mode;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
@ -472,7 +474,7 @@ static int playlist_label_display_mode_left(unsigned type, const char *label,
label_display_mode = LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX; label_display_mode = LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX;
playlist_set_label_display_mode(playlist, label_display_mode); playlist_set_label_display_mode(playlist, label_display_mode);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -480,6 +482,7 @@ static int playlist_label_display_mode_left(unsigned type, const char *label,
static void playlist_thumbnail_mode_left(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, static void playlist_thumbnail_mode_left(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id,
bool wraparound) bool wraparound)
{ {
settings_t *settings = config_get_ptr();
enum playlist_thumbnail_mode thumbnail_mode = enum playlist_thumbnail_mode thumbnail_mode =
playlist_get_thumbnail_mode(playlist, thumbnail_id); playlist_get_thumbnail_mode(playlist, thumbnail_id);
@ -489,7 +492,7 @@ static void playlist_thumbnail_mode_left(playlist_t *playlist, enum playlist_thu
thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_BOXARTS; thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_BOXARTS;
playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode); playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
} }
static int playlist_right_thumbnail_mode_left(unsigned type, const char *label, static int playlist_right_thumbnail_mode_left(unsigned type, const char *label,

View File

@ -1981,6 +1981,7 @@ static int action_ok_playlist_entry_collection(const char *path,
const struct playlist_entry *entry = NULL; const struct playlist_entry *entry = NULL;
unsigned i = 0; unsigned i = 0;
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
settings_t *settings = config_get_ptr();
if (!menu) if (!menu)
return menu_cbs_exit(); return menu_cbs_exit();
@ -2077,7 +2078,8 @@ static int action_ok_playlist_entry_collection(const char *path,
command_playlist_update_write( command_playlist_update_write(
tmp_playlist, tmp_playlist,
selection_ptr, selection_ptr,
&entry); &entry,
settings->bools.playlist_use_old_format);
} }
} }
else else
@ -2110,9 +2112,10 @@ static int action_ok_playlist_entry(const char *path,
{ {
char new_core_path[PATH_MAX_LENGTH]; char new_core_path[PATH_MAX_LENGTH];
size_t selection_ptr = 0; size_t selection_ptr = 0;
playlist_t *playlist = playlist_get_cached();
const struct playlist_entry *entry = NULL; const struct playlist_entry *entry = NULL;
const char *entry_label = NULL; const char *entry_label = NULL;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
new_core_path[0] = '\0'; new_core_path[0] = '\0';
@ -2161,7 +2164,8 @@ static int action_ok_playlist_entry(const char *path,
command_playlist_update_write(NULL, command_playlist_update_write(NULL,
selection_ptr, selection_ptr,
&entry); &entry,
settings->bools.playlist_use_old_format);
} }
} }
@ -2190,8 +2194,9 @@ static int action_ok_playlist_entry_start_content(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx) const char *label, unsigned type, size_t idx, size_t entry_idx)
{ {
size_t selection_ptr = 0; size_t selection_ptr = 0;
playlist_t *playlist = playlist_get_cached();
const struct playlist_entry *entry = NULL; const struct playlist_entry *entry = NULL;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
if (!playlist || !menu) if (!playlist || !menu)
@ -2242,7 +2247,8 @@ static int action_ok_playlist_entry_start_content(const char *path,
command_playlist_update_write( command_playlist_update_write(
playlist, playlist,
selection_ptr, selection_ptr,
&entry); &entry,
settings->bools.playlist_use_old_format);
} }
} }
@ -2499,6 +2505,7 @@ static int action_ok_audio_add_to_mixer_and_collection(const char *path,
{ {
char combined_path[PATH_MAX_LENGTH]; char combined_path[PATH_MAX_LENGTH];
struct playlist_entry entry = {0}; struct playlist_entry entry = {0};
settings_t *settings = config_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
combined_path[0] = '\0'; combined_path[0] = '\0';
@ -2514,7 +2521,9 @@ static int action_ok_audio_add_to_mixer_and_collection(const char *path,
entry.core_path = (char*)"builtin"; entry.core_path = (char*)"builtin";
entry.core_name = (char*)"musicplayer"; entry.core_name = (char*)"musicplayer";
command_playlist_push_write(g_defaults.music_history, &entry); command_playlist_push_write(g_defaults.music_history, &entry,
settings->bools.playlist_fuzzy_archive_match,
settings->bools.playlist_use_old_format);
if (filestream_exists(combined_path)) if (filestream_exists(combined_path))
task_push_audio_mixer_load(combined_path, task_push_audio_mixer_load(combined_path,
@ -2530,6 +2539,7 @@ static int action_ok_audio_add_to_mixer_and_collection_and_play(const char *path
{ {
char combined_path[PATH_MAX_LENGTH]; char combined_path[PATH_MAX_LENGTH];
struct playlist_entry entry = {0}; struct playlist_entry entry = {0};
settings_t *settings = config_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
combined_path[0] = '\0'; combined_path[0] = '\0';
@ -2545,7 +2555,10 @@ static int action_ok_audio_add_to_mixer_and_collection_and_play(const char *path
entry.core_path = (char*)"builtin"; entry.core_path = (char*)"builtin";
entry.core_name = (char*)"musicplayer"; entry.core_name = (char*)"musicplayer";
command_playlist_push_write(g_defaults.music_history, &entry); command_playlist_push_write(g_defaults.music_history, &entry,
settings->bools.playlist_fuzzy_archive_match,
settings->bools.playlist_use_old_format
);
if (filestream_exists(combined_path)) if (filestream_exists(combined_path))
task_push_audio_mixer_load_and_play(combined_path, task_push_audio_mixer_load_and_play(combined_path,
@ -2605,6 +2618,7 @@ static void menu_input_wifi_cb(void *userdata, const char *passphrase)
static void menu_input_st_string_cb_rename_entry(void *userdata, static void menu_input_st_string_cb_rename_entry(void *userdata,
const char *str) const char *str)
{ {
settings_t *settings = config_get_ptr();
if (str && *str) if (str && *str)
{ {
const char *label = menu_input_dialog_get_buffer(); const char *label = menu_input_dialog_get_buffer();
@ -2618,7 +2632,8 @@ static void menu_input_st_string_cb_rename_entry(void *userdata,
command_playlist_update_write(NULL, command_playlist_update_write(NULL,
menu_input_dialog_get_kb_idx(), menu_input_dialog_get_kb_idx(),
&entry); &entry,
settings->bools.playlist_use_old_format);
} }
} }
@ -3195,7 +3210,8 @@ static int action_ok_core_deferred_set(const char *new_core_path,
command_playlist_update_write( command_playlist_update_write(
NULL, NULL,
menu->scratchpad.unsigned_var, menu->scratchpad.unsigned_var,
&entry); &entry,
settings->bools.playlist_use_old_format);
/* Provide visual feedback */ /* Provide visual feedback */
strlcpy(msg, msg_hash_to_str(MSG_SET_CORE_ASSOCIATION), sizeof(msg)); strlcpy(msg, msg_hash_to_str(MSG_SET_CORE_ASSOCIATION), sizeof(msg));
@ -4666,6 +4682,7 @@ static int action_ok_delete_entry(const char *path,
char *def_conf_img_path = NULL; char *def_conf_img_path = NULL;
#endif #endif
char *def_conf_fav_path = NULL; char *def_conf_fav_path = NULL;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
@ -4701,7 +4718,7 @@ static int action_ok_delete_entry(const char *path,
if (playlist) if (playlist)
{ {
playlist_delete_index(playlist, menu->rpl_entry_selection_ptr); playlist_delete_index(playlist, menu->rpl_entry_selection_ptr);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
} }
new_selection_ptr = menu_navigation_get_selection(); new_selection_ptr = menu_navigation_get_selection();
@ -5552,6 +5569,7 @@ static int action_ok_push_dropdown_item_playlist_default_core(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx) const char *label, unsigned type, size_t idx, size_t entry_idx)
{ {
core_info_list_t *core_info_list = NULL; core_info_list_t *core_info_list = NULL;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
const char* core_name = path; const char* core_name = path;
@ -5608,7 +5626,8 @@ static int action_ok_push_dropdown_item_playlist_default_core(const char *path,
} }
/* In all cases, update file on disk */ /* In all cases, update file on disk */
playlist_write_file(playlist); playlist_write_file(playlist,
settings->bools.playlist_use_old_format);
return action_cancel_pop_default(NULL, NULL, 0, 0); return action_cancel_pop_default(NULL, NULL, 0, 0);
} }
@ -5617,25 +5636,29 @@ static int action_ok_push_dropdown_item_playlist_default_core(const char *path,
static int action_ok_push_dropdown_item_playlist_label_display_mode(const char *path, static int action_ok_push_dropdown_item_playlist_label_display_mode(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx) const char *label, unsigned type, size_t idx, size_t entry_idx)
{ {
playlist_t *playlist = playlist_get_cached(); settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached();
playlist_set_label_display_mode(playlist, (enum playlist_label_display_mode)idx); playlist_set_label_display_mode(playlist, (enum playlist_label_display_mode)idx);
/* In all cases, update file on disk */ /* In all cases, update file on disk */
playlist_write_file(playlist); playlist_write_file(playlist,
settings->bools.playlist_use_old_format);
return action_cancel_pop_default(NULL, NULL, 0, 0); return action_cancel_pop_default(NULL, NULL, 0, 0);
} }
static int generic_set_thumbnail_mode(enum playlist_thumbnail_id thumbnail_id, size_t idx) static int generic_set_thumbnail_mode(enum playlist_thumbnail_id thumbnail_id, size_t idx)
{ {
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
return -1; return -1;
playlist_set_thumbnail_mode(playlist, thumbnail_id, (enum playlist_thumbnail_mode)idx); playlist_set_thumbnail_mode(playlist, thumbnail_id, (enum playlist_thumbnail_mode)idx);
playlist_write_file(playlist); playlist_write_file(playlist,
settings->bools.playlist_use_old_format);
return action_cancel_pop_default(NULL, NULL, 0, 0); return action_cancel_pop_default(NULL, NULL, 0, 0);
} }

View File

@ -472,9 +472,10 @@ static int playlist_association_right(unsigned type, const char *label,
{ {
char core_path[PATH_MAX_LENGTH]; char core_path[PATH_MAX_LENGTH];
size_t i, next, current = 0; size_t i, next, current = 0;
playlist_t *playlist = playlist_get_cached();
core_info_list_t *core_info_list = NULL; core_info_list_t *core_info_list = NULL;
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached();
core_path[0] = '\0'; core_path[0] = '\0';
@ -537,7 +538,7 @@ static int playlist_association_right(unsigned type, const char *label,
/* Update playlist */ /* Update playlist */
playlist_set_default_core_path(playlist, core_info->path); playlist_set_default_core_path(playlist, core_info->path);
playlist_set_default_core_name(playlist, core_info->display_name); playlist_set_default_core_name(playlist, core_info->display_name);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -546,6 +547,7 @@ static int playlist_label_display_mode_right(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
enum playlist_label_display_mode label_display_mode; enum playlist_label_display_mode label_display_mode;
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
@ -559,7 +561,7 @@ static int playlist_label_display_mode_right(unsigned type, const char *label,
label_display_mode = LABEL_DISPLAY_MODE_DEFAULT; label_display_mode = LABEL_DISPLAY_MODE_DEFAULT;
playlist_set_label_display_mode(playlist, label_display_mode); playlist_set_label_display_mode(playlist, label_display_mode);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -567,6 +569,7 @@ static int playlist_label_display_mode_right(unsigned type, const char *label,
static void playlist_thumbnail_mode_right(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, static void playlist_thumbnail_mode_right(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id,
bool wraparound) bool wraparound)
{ {
settings_t *settings = config_get_ptr();
enum playlist_thumbnail_mode thumbnail_mode = enum playlist_thumbnail_mode thumbnail_mode =
playlist_get_thumbnail_mode(playlist, thumbnail_id); playlist_get_thumbnail_mode(playlist, thumbnail_id);
@ -576,7 +579,7 @@ static void playlist_thumbnail_mode_right(playlist_t *playlist, enum playlist_th
thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT;
playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode); playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
} }
static int playlist_right_thumbnail_mode_right(unsigned type, const char *label, static int playlist_right_thumbnail_mode_right(unsigned type, const char *label,

View File

@ -295,6 +295,7 @@ static int action_start_playlist_association(
const char *path, const char *label, const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx) unsigned type, size_t idx, size_t entry_idx)
{ {
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
@ -303,7 +304,7 @@ static int action_start_playlist_association(
/* Set default core path + name to DETECT */ /* Set default core path + name to DETECT */
playlist_set_default_core_path(playlist, file_path_str(FILE_PATH_DETECT)); playlist_set_default_core_path(playlist, file_path_str(FILE_PATH_DETECT));
playlist_set_default_core_name(playlist, file_path_str(FILE_PATH_DETECT)); playlist_set_default_core_name(playlist, file_path_str(FILE_PATH_DETECT));
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -312,6 +313,7 @@ static int action_start_playlist_label_display_mode(
const char *path, const char *label, const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx) unsigned type, size_t idx, size_t entry_idx)
{ {
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
@ -319,7 +321,7 @@ static int action_start_playlist_label_display_mode(
/* Set label display mode to the default */ /* Set label display mode to the default */
playlist_set_label_display_mode(playlist, LABEL_DISPLAY_MODE_DEFAULT); playlist_set_label_display_mode(playlist, LABEL_DISPLAY_MODE_DEFAULT);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -328,14 +330,15 @@ static int action_start_playlist_right_thumbnail_mode(
const char *path, const char *label, const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx) unsigned type, size_t idx, size_t entry_idx)
{ {
playlist_t *playlist = playlist_get_cached(); settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
return -1; return -1;
/* Set thumbnail_mode to default value */ /* Set thumbnail_mode to default value */
playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT, PLAYLIST_THUMBNAIL_MODE_DEFAULT); playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT, PLAYLIST_THUMBNAIL_MODE_DEFAULT);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }
@ -344,6 +347,7 @@ static int action_start_playlist_left_thumbnail_mode(
const char *path, const char *label, const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx) unsigned type, size_t idx, size_t entry_idx)
{ {
settings_t *settings = config_get_ptr();
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
if (!playlist) if (!playlist)
@ -351,7 +355,7 @@ static int action_start_playlist_left_thumbnail_mode(
/* Set thumbnail_mode to default value */ /* Set thumbnail_mode to default value */
playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT, PLAYLIST_THUMBNAIL_MODE_DEFAULT); playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT, PLAYLIST_THUMBNAIL_MODE_DEFAULT);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
return 0; return 0;
} }

View File

@ -23,6 +23,7 @@
#include <libretro.h> #include <libretro.h>
#include <boolean.h> #include <boolean.h>
#include <retro_assert.h> #include <retro_assert.h>
#include <retro_miscellaneous.h>
#include <compat/posix_string.h> #include <compat/posix_string.h>
#include <string/stdstring.h> #include <string/stdstring.h>
#include <streams/interface_stream.h> #include <streams/interface_stream.h>
@ -33,7 +34,6 @@
#include "playlist.h" #include "playlist.h"
#include "verbosity.h" #include "verbosity.h"
#include "configuration.h"
#include "file_path_special.h" #include "file_path_special.h"
#ifndef PLAYLIST_ENTRIES #ifndef PLAYLIST_ENTRIES
@ -94,14 +94,12 @@ typedef int (playlist_sort_fun_t)(
* (Taking into account relative paths, case insensitive * (Taking into account relative paths, case insensitive
* filesystems, 'incomplete' archive paths) * filesystems, 'incomplete' archive paths)
**/ **/
static bool playlist_path_equal(const char *real_path, const char *entry_path) static bool playlist_path_equal(const char *real_path,
const char *entry_path, bool fuzzy_archive_match)
{ {
bool real_path_is_compressed; bool real_path_is_compressed;
bool entry_real_path_is_compressed; bool entry_real_path_is_compressed;
char entry_real_path[PATH_MAX_LENGTH]; char entry_real_path[PATH_MAX_LENGTH];
#ifdef RARCH_INTERNAL
settings_t *settings = config_get_ptr();
#endif
entry_real_path[0] = '\0'; entry_real_path[0] = '\0';
@ -128,7 +126,7 @@ static bool playlist_path_equal(const char *real_path, const char *entry_path)
#ifdef RARCH_INTERNAL #ifdef RARCH_INTERNAL
/* If fuzzy matching is disabled, we can give up now */ /* If fuzzy matching is disabled, we can give up now */
if (!settings || !settings->bools.playlist_fuzzy_archive_match) if (!fuzzy_archive_match)
return false; return false;
#endif #endif
@ -342,7 +340,8 @@ void playlist_delete_index(playlist_t *playlist,
void playlist_get_index_by_path(playlist_t *playlist, void playlist_get_index_by_path(playlist_t *playlist,
const char *search_path, const char *search_path,
const struct playlist_entry **entry) const struct playlist_entry **entry,
bool fuzzy_archive_match)
{ {
size_t i; size_t i;
char real_search_path[PATH_MAX_LENGTH]; char real_search_path[PATH_MAX_LENGTH];
@ -358,7 +357,8 @@ void playlist_get_index_by_path(playlist_t *playlist,
for (i = 0; i < playlist->size; i++) for (i = 0; i < playlist->size; i++)
{ {
if (!playlist_path_equal(real_search_path, playlist->entries[i].path)) if (!playlist_path_equal(real_search_path, playlist->entries[i].path,
fuzzy_archive_match))
continue; continue;
*entry = &playlist->entries[i]; *entry = &playlist->entries[i];
@ -368,7 +368,7 @@ void playlist_get_index_by_path(playlist_t *playlist,
} }
bool playlist_entry_exists(playlist_t *playlist, bool playlist_entry_exists(playlist_t *playlist,
const char *path) const char *path, bool fuzzy_archive_match)
{ {
size_t i; size_t i;
char real_search_path[PATH_MAX_LENGTH]; char real_search_path[PATH_MAX_LENGTH];
@ -383,7 +383,8 @@ bool playlist_entry_exists(playlist_t *playlist,
path_resolve_realpath(real_search_path, sizeof(real_search_path), true); path_resolve_realpath(real_search_path, sizeof(real_search_path), true);
for (i = 0; i < playlist->size; i++) for (i = 0; i < playlist->size; i++)
if (playlist_path_equal(real_search_path, playlist->entries[i].path)) if (playlist_path_equal(real_search_path, playlist->entries[i].path,
fuzzy_archive_match))
return true; return true;
return false; return false;
@ -558,7 +559,8 @@ void playlist_update_runtime(playlist_t *playlist, size_t idx,
} }
bool playlist_push_runtime(playlist_t *playlist, bool playlist_push_runtime(playlist_t *playlist,
const struct playlist_entry *entry) const struct playlist_entry *entry,
bool fuzzy_archive_match)
{ {
size_t i; size_t i;
char real_path[PATH_MAX_LENGTH]; char real_path[PATH_MAX_LENGTH];
@ -600,7 +602,7 @@ bool playlist_push_runtime(playlist_t *playlist,
const char *entry_path = playlist->entries[i].path; const char *entry_path = playlist->entries[i].path;
bool equal_path = bool equal_path =
(string_is_empty(real_path) && string_is_empty(entry_path)) || (string_is_empty(real_path) && string_is_empty(entry_path)) ||
playlist_path_equal(real_path, entry_path); playlist_path_equal(real_path, entry_path, fuzzy_archive_match);
/* Core name can have changed while still being the same core. /* Core name can have changed while still being the same core.
* Differentiate based on the core path only. */ * Differentiate based on the core path only. */
@ -725,7 +727,8 @@ void playlist_resolve_path(enum playlist_file_mode mode,
* Push entry to top of playlist. * Push entry to top of playlist.
**/ **/
bool playlist_push(playlist_t *playlist, bool playlist_push(playlist_t *playlist,
const struct playlist_entry *entry) const struct playlist_entry *entry,
bool fuzzy_archive_match)
{ {
size_t i; size_t i;
char real_path[PATH_MAX_LENGTH]; char real_path[PATH_MAX_LENGTH];
@ -782,7 +785,7 @@ bool playlist_push(playlist_t *playlist,
const char *entry_path = playlist->entries[i].path; const char *entry_path = playlist->entries[i].path;
bool equal_path = bool equal_path =
(string_is_empty(real_path) && string_is_empty(entry_path)) || (string_is_empty(real_path) && string_is_empty(entry_path)) ||
playlist_path_equal(real_path, entry_path); playlist_path_equal(real_path, entry_path, fuzzy_archive_match);
/* Core name can have changed while still being the same core. /* Core name can have changed while still being the same core.
* Differentiate based on the core path only. */ * Differentiate based on the core path only. */
@ -839,7 +842,8 @@ bool playlist_push(playlist_t *playlist,
path_resolve_realpath(real_rom_path, sizeof(real_rom_path), true); path_resolve_realpath(real_rom_path, sizeof(real_rom_path), true);
} }
if (!playlist_path_equal(real_rom_path, roms->elems[j].data)) if (!playlist_path_equal(real_rom_path, roms->elems[j].data,
fuzzy_archive_match))
{ {
unequal = true; unequal = true;
break; break;
@ -1214,13 +1218,10 @@ end:
filestream_close(file); filestream_close(file);
} }
void playlist_write_file(playlist_t *playlist) void playlist_write_file(playlist_t *playlist, bool use_old_format)
{ {
size_t i; size_t i;
RFILE *file = NULL; RFILE *file = NULL;
#ifdef RARCH_INTERNAL
settings_t *settings = config_get_ptr();
#endif
if (!playlist || !playlist->modified) if (!playlist || !playlist->modified)
return; return;
@ -1235,7 +1236,7 @@ void playlist_write_file(playlist_t *playlist)
} }
#ifdef RARCH_INTERNAL #ifdef RARCH_INTERNAL
if (settings->bools.playlist_use_old_format) if (use_old_format)
{ {
for (i = 0; i < playlist->size; i++) for (i = 0; i < playlist->size; i++)
filestream_printf(file, "%s\n%s\n%s\n%s\n%s\n%s\n", filestream_printf(file, "%s\n%s\n%s\n%s\n%s\n%s\n",
@ -2454,22 +2455,22 @@ void playlist_qsort(playlist_t *playlist)
void command_playlist_push_write( void command_playlist_push_write(
playlist_t *playlist, playlist_t *playlist,
const struct playlist_entry *entry) const struct playlist_entry *entry,
bool fuzzy_archive_match,
bool use_old_format)
{ {
if (!playlist) if (!playlist)
return; return;
if (playlist_push( if (playlist_push(playlist, entry, fuzzy_archive_match))
playlist, playlist_write_file(playlist, use_old_format);
entry
))
playlist_write_file(playlist);
} }
void command_playlist_update_write( void command_playlist_update_write(
playlist_t *plist, playlist_t *plist,
size_t idx, size_t idx,
const struct playlist_entry *entry) const struct playlist_entry *entry,
bool use_old_format)
{ {
playlist_t *playlist = plist ? plist : playlist_get_cached(); playlist_t *playlist = plist ? plist : playlist_get_cached();
@ -2481,7 +2482,7 @@ void command_playlist_update_write(
idx, idx,
entry); entry);
playlist_write_file(playlist); playlist_write_file(playlist, use_old_format);
} }
bool playlist_index_is_valid(playlist_t *playlist, size_t idx, bool playlist_index_is_valid(playlist_t *playlist, size_t idx,

View File

@ -192,10 +192,12 @@ void playlist_resolve_path(enum playlist_file_mode mode,
* Push entry to top of playlist. * Push entry to top of playlist.
**/ **/
bool playlist_push(playlist_t *playlist, bool playlist_push(playlist_t *playlist,
const struct playlist_entry *entry); const struct playlist_entry *entry,
bool fuzzy_archive_match);
bool playlist_push_runtime(playlist_t *playlist, bool playlist_push_runtime(playlist_t *playlist,
const struct playlist_entry *entry); const struct playlist_entry *entry,
bool fuzzy_archive_match);
void playlist_update(playlist_t *playlist, size_t idx, void playlist_update(playlist_t *playlist, size_t idx,
const struct playlist_entry *update_entry); const struct playlist_entry *update_entry);
@ -211,16 +213,17 @@ void playlist_update_runtime(playlist_t *playlist, size_t idx,
void playlist_get_index_by_path(playlist_t *playlist, void playlist_get_index_by_path(playlist_t *playlist,
const char *search_path, const char *search_path,
const struct playlist_entry **entry); const struct playlist_entry **entry,
bool fuzzy_archive_match);
bool playlist_entry_exists(playlist_t *playlist, bool playlist_entry_exists(playlist_t *playlist,
const char *path); const char *path, bool fuzzy_archive_match);
char *playlist_get_conf_path(playlist_t *playlist); char *playlist_get_conf_path(playlist_t *playlist);
uint32_t playlist_get_size(playlist_t *playlist); uint32_t playlist_get_size(playlist_t *playlist);
void playlist_write_file(playlist_t *playlist); void playlist_write_file(playlist_t *playlist, bool use_old_format);
void playlist_write_runtime_file(playlist_t *playlist); void playlist_write_runtime_file(playlist_t *playlist);
@ -234,12 +237,15 @@ bool playlist_init_cached(const char *path, size_t size);
void command_playlist_push_write( void command_playlist_push_write(
playlist_t *playlist, playlist_t *playlist,
const struct playlist_entry *entry); const struct playlist_entry *entry,
bool fuzzy_archive_match,
bool use_old_format);
void command_playlist_update_write( void command_playlist_update_write(
playlist_t *playlist, playlist_t *playlist,
size_t idx, size_t idx,
const struct playlist_entry *entry); const struct playlist_entry *entry,
bool use_old_format);
/* Returns true if specified playlist index matches /* Returns true if specified playlist index matches
* specified content/core paths */ * specified content/core paths */

View File

@ -4709,7 +4709,8 @@ static bool run_translation_service(void)
if (current_playlist) if (current_playlist)
{ {
playlist_get_index_by_path( playlist_get_index_by_path(
current_playlist, path_get(RARCH_PATH_CONTENT), &entry); current_playlist, path_get(RARCH_PATH_CONTENT), &entry,
settings->bools.playlist_fuzzy_archive_match);
if (entry && !string_is_empty(entry->label)) if (entry && !string_is_empty(entry->label))
label = entry->label; label = entry->label;
@ -6765,14 +6766,18 @@ TODO: Add a setting for these tweaks */
case CMD_EVENT_HISTORY_DEINIT: case CMD_EVENT_HISTORY_DEINIT:
if (g_defaults.content_history) if (g_defaults.content_history)
{ {
playlist_write_file(g_defaults.content_history); settings_t *settings = configuration_settings;
playlist_write_file(g_defaults.content_history,
settings->bools.playlist_use_old_format);
playlist_free(g_defaults.content_history); playlist_free(g_defaults.content_history);
} }
g_defaults.content_history = NULL; g_defaults.content_history = NULL;
if (g_defaults.music_history) if (g_defaults.music_history)
{ {
playlist_write_file(g_defaults.music_history); settings_t *settings = configuration_settings;
playlist_write_file(g_defaults.music_history,
settings->bools.playlist_use_old_format);
playlist_free(g_defaults.music_history); playlist_free(g_defaults.music_history);
} }
g_defaults.music_history = NULL; g_defaults.music_history = NULL;
@ -6780,7 +6785,9 @@ TODO: Add a setting for these tweaks */
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV) #if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
if (g_defaults.video_history) if (g_defaults.video_history)
{ {
playlist_write_file(g_defaults.video_history); settings_t *settings = configuration_settings;
playlist_write_file(g_defaults.video_history,
settings->bools.playlist_use_old_format);
playlist_free(g_defaults.video_history); playlist_free(g_defaults.video_history);
} }
g_defaults.video_history = NULL; g_defaults.video_history = NULL;
@ -6790,7 +6797,9 @@ TODO: Add a setting for these tweaks */
#ifdef HAVE_IMAGEVIEWER #ifdef HAVE_IMAGEVIEWER
if (g_defaults.image_history) if (g_defaults.image_history)
{ {
playlist_write_file(g_defaults.image_history); settings_t *settings = configuration_settings;
playlist_write_file(g_defaults.image_history,
settings->bools.playlist_use_old_format);
playlist_free(g_defaults.image_history); playlist_free(g_defaults.image_history);
} }
g_defaults.image_history = NULL; g_defaults.image_history = NULL;
@ -6966,13 +6975,14 @@ TODO: Add a setting for these tweaks */
entry.db_name = str_list->elems[5].data; /* db_name */ entry.db_name = str_list->elems[5].data; /* db_name */
/* Write playlist entry */ /* Write playlist entry */
if (playlist_push(g_defaults.content_favorites, &entry)) if (playlist_push(g_defaults.content_favorites, &entry, settings->bools.playlist_fuzzy_archive_match))
{ {
/* New addition - need to resort if option is enabled */ /* New addition - need to resort if option is enabled */
if (settings->bools.playlist_sort_alphabetical) if (settings->bools.playlist_sort_alphabetical)
playlist_qsort(g_defaults.content_favorites); playlist_qsort(g_defaults.content_favorites);
playlist_write_file(g_defaults.content_favorites); playlist_write_file(g_defaults.content_favorites,
settings->bools.playlist_use_old_format);
runloop_msg_queue_push(msg_hash_to_str(MSG_ADDED_TO_FAVORITES), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); runloop_msg_queue_push(msg_hash_to_str(MSG_ADDED_TO_FAVORITES), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
} }
} }
@ -6982,6 +6992,7 @@ TODO: Add a setting for these tweaks */
} }
case CMD_EVENT_RESET_CORE_ASSOCIATION: case CMD_EVENT_RESET_CORE_ASSOCIATION:
{ {
settings_t *settings = configuration_settings;
const char *core_name = "DETECT"; const char *core_name = "DETECT";
const char *core_path = "DETECT"; const char *core_path = "DETECT";
size_t *playlist_index = (size_t*)data; size_t *playlist_index = (size_t*)data;
@ -6994,7 +7005,9 @@ TODO: Add a setting for these tweaks */
command_playlist_update_write( command_playlist_update_write(
NULL, NULL,
*playlist_index, *playlist_index,
&entry); &entry,
settings->bools.playlist_use_old_format
);
runloop_msg_queue_push(msg_hash_to_str(MSG_RESET_CORE_ASSOCIATION), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); runloop_msg_queue_push(msg_hash_to_str(MSG_RESET_CORE_ASSOCIATION), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
break; break;
@ -7497,8 +7510,9 @@ TODO: Add a setting for these tweaks */
return false; return false;
{ {
settings_t *settings = configuration_settings;
discord_userdata_t *userdata = (discord_userdata_t*)data; discord_userdata_t *userdata = (discord_userdata_t*)data;
discord_update(userdata->status); discord_update(userdata->status, settings->bools.playlist_fuzzy_archive_match);
} }
#endif #endif
break; break;
@ -27628,7 +27642,7 @@ int runloop_iterate(void)
#ifdef HAVE_DISCORD #ifdef HAVE_DISCORD
if (discord_is_inited && discord_is_ready()) if (discord_is_inited && discord_is_ready())
discord_update(DISCORD_PRESENCE_GAME); discord_update(DISCORD_PRESENCE_GAME, settings->bools.playlist_fuzzy_archive_match);
#endif #endif
for (i = 0; i < max_users; i++) for (i = 0; i < max_users; i++)
@ -28658,7 +28672,8 @@ void rarch_favorites_deinit(void)
{ {
if (g_defaults.content_favorites) if (g_defaults.content_favorites)
{ {
playlist_write_file(g_defaults.content_favorites); settings_t *settings = configuration_settings;
playlist_write_file(g_defaults.content_favorites, settings->bools.playlist_use_old_format);
playlist_free(g_defaults.content_favorites); playlist_free(g_defaults.content_favorites);
g_defaults.content_favorites = NULL; g_defaults.content_favorites = NULL;
} }

View File

@ -1435,7 +1435,9 @@ static void task_push_to_history_list(
entry.subsystem_roms = (struct string_list*)path_get_subsystem_list(); entry.subsystem_roms = (struct string_list*)path_get_subsystem_list();
command_playlist_push_write( command_playlist_push_write(
playlist_hist, &entry); playlist_hist, &entry,
settings->bools.playlist_fuzzy_archive_match,
settings->bools.playlist_use_old_format);
} }
} }

View File

@ -58,6 +58,8 @@ typedef struct database_state_handle
typedef struct db_handle typedef struct db_handle
{ {
bool pl_fuzzy_archive_match;
bool pl_use_old_format;
bool is_directory; bool is_directory;
bool scan_started; bool scan_started;
bool scan_without_core_match; bool scan_without_core_match;
@ -850,7 +852,8 @@ static int database_info_list_iterate_found_match(
fprintf(stderr, "entry path str: %s\n", entry_path_str); fprintf(stderr, "entry path str: %s\n", entry_path_str);
#endif #endif
if (!playlist_entry_exists(playlist, entry_path_str)) if (!playlist_entry_exists(playlist, entry_path_str,
_db->pl_fuzzy_archive_match))
{ {
struct playlist_entry entry; struct playlist_entry entry;
@ -874,10 +877,10 @@ static int database_info_list_iterate_found_match(
entry.last_played_minute= 0; entry.last_played_minute= 0;
entry.last_played_second= 0; entry.last_played_second= 0;
playlist_push(playlist, &entry); playlist_push(playlist, &entry, _db->pl_fuzzy_archive_match);
} }
playlist_write_file(playlist); playlist_write_file(playlist, _db->pl_use_old_format);
playlist_free(playlist); playlist_free(playlist);
database_info_list_free(db_state->info); database_info_list_free(db_state->info);
@ -1052,7 +1055,8 @@ static int task_database_iterate_playlist_lutro(
free(db_playlist_path); free(db_playlist_path);
if (!playlist_entry_exists(playlist, path)) if (!playlist_entry_exists(playlist, path,
_db->pl_fuzzy_archive_match))
{ {
struct playlist_entry entry; struct playlist_entry entry;
char *game_title = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); char *game_title = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
@ -1082,12 +1086,12 @@ static int task_database_iterate_playlist_lutro(
entry.last_played_minute= 0; entry.last_played_minute= 0;
entry.last_played_second= 0; entry.last_played_second= 0;
playlist_push(playlist, &entry); playlist_push(playlist, &entry, _db->pl_fuzzy_archive_match);
free(game_title); free(game_title);
} }
playlist_write_file(playlist); playlist_write_file(playlist, _db->pl_use_old_format);
playlist_free(playlist); playlist_free(playlist);
return 0; return 0;
@ -1387,27 +1391,29 @@ bool task_push_dbscan(
#ifdef RARCH_INTERNAL #ifdef RARCH_INTERNAL
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
#endif #endif
db_handle_t *db = (db_handle_t*)calloc(1, sizeof(db_handle_t)); db_handle_t *db = (db_handle_t*)calloc(1, sizeof(db_handle_t));
if (!t || !db) if (!t || !db)
goto error; goto error;
t->handler = task_database_handler; t->handler = task_database_handler;
t->state = db; t->state = db;
t->callback = cb; t->callback = cb;
t->title = strdup(msg_hash_to_str(MSG_PREPARING_FOR_CONTENT_SCAN)); t->title = strdup(msg_hash_to_str(MSG_PREPARING_FOR_CONTENT_SCAN));
t->alternative_look = true; t->alternative_look = true;
#ifdef RARCH_INTERNAL #ifdef RARCH_INTERNAL
t->progress_cb = task_database_progress_cb; t->progress_cb = task_database_progress_cb;
db->scan_without_core_match = settings->bools.scan_without_core_match; db->scan_without_core_match = settings->bools.scan_without_core_match;
#endif #endif
db->show_hidden_files = db_dir_show_hidden_files; db->show_hidden_files = db_dir_show_hidden_files;
db->is_directory = directory; db->is_directory = directory;
db->playlist_directory = NULL; db->playlist_directory = NULL;
db->fullpath = strdup(fullpath); db->fullpath = strdup(fullpath);
db->playlist_directory = strdup(playlist_directory); db->playlist_directory = strdup(playlist_directory);
db->content_database_path = strdup(content_database); db->content_database_path = strdup(content_database);
db->pl_fuzzy_archive_match = settings->bools.playlist_fuzzy_archive_match;
db->pl_use_old_format = settings->bools.playlist_use_old_format;
task_queue_push(t); task_queue_push(t);

View File

@ -57,6 +57,8 @@ typedef struct manual_scan_handle
size_t list_size; size_t list_size;
size_t list_index; size_t list_index;
enum manual_scan_status status; enum manual_scan_status status;
bool fuzzy_archive_match;
bool use_old_format;
} manual_scan_handle_t; } manual_scan_handle_t;
/* Frees task handle + all constituent objects */ /* Frees task handle + all constituent objects */
@ -197,7 +199,8 @@ static void task_manual_content_scan_handler(retro_task_t *task)
/* Add content to playlist */ /* Add content to playlist */
manual_content_scan_add_content_to_playlist( manual_content_scan_add_content_to_playlist(
manual_scan->task_config, manual_scan->playlist, manual_scan->task_config, manual_scan->playlist,
content_path, content_type, manual_scan->dat_file); content_path, content_type, manual_scan->dat_file,
manual_scan->fuzzy_archive_match);
} }
/* Increment content index */ /* Increment content index */
@ -217,7 +220,7 @@ static void task_manual_content_scan_handler(retro_task_t *task)
playlist_qsort(manual_scan->playlist); playlist_qsort(manual_scan->playlist);
/* Save playlist changes to disk */ /* Save playlist changes to disk */
playlist_write_file(manual_scan->playlist); playlist_write_file(manual_scan->playlist, manual_scan->use_old_format);
/* If this is the currently cached playlist, then /* If this is the currently cached playlist, then
* it must be re-cached (otherwise changes will be * it must be re-cached (otherwise changes will be
@ -309,13 +312,15 @@ bool task_push_manual_content_scan(void)
goto error; goto error;
/* Configure handle */ /* Configure handle */
manual_scan->task_config = NULL; manual_scan->task_config = NULL;
manual_scan->playlist = NULL; manual_scan->playlist = NULL;
manual_scan->content_list = NULL; manual_scan->content_list = NULL;
manual_scan->dat_file = NULL; manual_scan->dat_file = NULL;
manual_scan->list_size = 0; manual_scan->list_size = 0;
manual_scan->list_index = 0; manual_scan->list_index = 0;
manual_scan->status = MANUAL_SCAN_BEGIN; manual_scan->status = MANUAL_SCAN_BEGIN;
manual_scan->fuzzy_archive_match = settings->bools.playlist_fuzzy_archive_match;
manual_scan->use_old_format = settings->bools.playlist_use_old_format;
/* > Get current manual content scan configuration */ /* > Get current manual content scan configuration */
manual_scan->task_config = (manual_content_scan_task_config_t*) manual_scan->task_config = (manual_content_scan_task_config_t*)

View File

@ -25,6 +25,7 @@
#include "tasks_internal.h" #include "tasks_internal.h"
#include "../configuration.h"
#include "../msg_hash.h" #include "../msg_hash.h"
#include "../file_path_special.h" #include "../file_path_special.h"
#include "../playlist.h" #include "../playlist.h"
@ -44,6 +45,7 @@ typedef struct pl_manager_handle
size_t list_size; size_t list_size;
size_t list_index; size_t list_index;
enum pl_manager_status status; enum pl_manager_status status;
bool use_old_format;
} pl_manager_handle_t; } pl_manager_handle_t;
/**************************/ /**************************/
@ -182,7 +184,7 @@ static void task_pl_manager_reset_cores_handler(retro_task_t *task)
task_title[0] = '\0'; task_title[0] = '\0';
/* Save playlist changes to disk */ /* Save playlist changes to disk */
playlist_write_file(pl_manager->playlist); playlist_write_file(pl_manager->playlist, pl_manager->use_old_format);
/* If this is the currently cached playlist, then /* If this is the currently cached playlist, then
* it must be re-cached (otherwise changes will be * it must be re-cached (otherwise changes will be
@ -245,6 +247,7 @@ bool task_push_pl_manager_reset_cores(const char *playlist_path)
task_finder_data_t find_data; task_finder_data_t find_data;
char playlist_name[PATH_MAX_LENGTH]; char playlist_name[PATH_MAX_LENGTH];
char task_title[PATH_MAX_LENGTH]; char task_title[PATH_MAX_LENGTH];
settings_t *settings = config_get_ptr();
retro_task_t *task = task_init(); retro_task_t *task = task_init();
pl_manager_handle_t *pl_manager = (pl_manager_handle_t*)calloc(1, sizeof(pl_manager_handle_t)); pl_manager_handle_t *pl_manager = (pl_manager_handle_t*)calloc(1, sizeof(pl_manager_handle_t));
@ -290,6 +293,7 @@ bool task_push_pl_manager_reset_cores(const char *playlist_path)
pl_manager->list_size = 0; pl_manager->list_size = 0;
pl_manager->list_index = 0; pl_manager->list_index = 0;
pl_manager->status = PL_MANAGER_BEGIN; pl_manager->status = PL_MANAGER_BEGIN;
pl_manager->use_old_format = settings->bools.playlist_use_old_format;
task_queue_push(task); task_queue_push(task);

View File

@ -66,6 +66,8 @@ struct screenshot_task_state
bool is_idle; bool is_idle;
bool is_paused; bool is_paused;
bool history_list_enable; bool history_list_enable;
bool pl_fuzzy_archive_match;
bool pl_use_old_format;
int pitch; int pitch;
unsigned width; unsigned width;
unsigned height; unsigned height;
@ -177,7 +179,9 @@ static void task_screenshot_handler(retro_task_t *task)
entry.core_path = (char*)"builtin"; entry.core_path = (char*)"builtin";
entry.core_name = (char*)"imageviewer"; entry.core_name = (char*)"imageviewer";
command_playlist_push_write(g_defaults.image_history, &entry); command_playlist_push_write(g_defaults.image_history, &entry,
state->pl_fuzzy_archive_match,
state->pl_use_old_format);
} }
#endif #endif
@ -240,22 +244,24 @@ static bool screenshot_dump(
if (fullpath) if (fullpath)
strlcpy(state->filename, name_base, sizeof(state->filename)); strlcpy(state->filename, name_base, sizeof(state->filename));
state->is_idle = is_idle; state->pl_fuzzy_archive_match = settings->bools.playlist_fuzzy_archive_match;
state->is_paused = is_paused; state->pl_use_old_format = settings->bools.playlist_use_old_format;
state->bgr24 = bgr24; state->is_idle = is_idle;
state->height = height; state->is_paused = is_paused;
state->width = width; state->bgr24 = bgr24;
state->pitch = pitch; state->height = height;
state->frame = frame; state->width = width;
state->userbuf = userbuf; state->pitch = pitch;
state->frame = frame;
state->userbuf = userbuf;
#ifdef HAVE_MENU_WIDGETS #ifdef HAVE_MENU_WIDGETS
state->widgets_ready = menu_widgets_ready(); state->widgets_ready = menu_widgets_ready();
#else #else
state->widgets_ready = false; state->widgets_ready = false;
#endif #endif
state->silence = savestate; state->silence = savestate;
state->history_list_enable = settings->bools.history_list_enable; state->history_list_enable = settings->bools.history_list_enable;
state->pixel_format_type = pixel_format_type; state->pixel_format_type = pixel_format_type;
if (!fullpath) if (!fullpath)
{ {

View File

@ -358,21 +358,22 @@ void MainWindow::onPlaylistFilesDropped(QStringList files)
/* Takes a list of files and folders and adds them to the currently selected playlist. Folders will have their contents added recursively. */ /* Takes a list of files and folders and adds them to the currently selected playlist. Folders will have their contents added recursively. */
void MainWindow::addFilesToPlaylist(QStringList files) void MainWindow::addFilesToPlaylist(QStringList files)
{ {
int i;
QStringList list; QStringList list;
QString currentPlaylistPath; QString currentPlaylistPath;
QListWidgetItem *currentItem = m_listWidget->currentItem(); QListWidgetItem *currentItem = m_listWidget->currentItem();
QByteArray currentPlaylistArray; QByteArray currentPlaylistArray;
QScopedPointer<QProgressDialog> dialog(NULL); QScopedPointer<QProgressDialog> dialog(NULL);
PlaylistEntryDialog *playlistDialog = playlistEntryDialog();
QHash<QString, QString> selectedCore; QHash<QString, QString> selectedCore;
QHash<QString, QString> itemToAdd; QHash<QString, QString> itemToAdd;
QString selectedDatabase; QString selectedDatabase;
QString selectedName; QString selectedName;
QString selectedPath; QString selectedPath;
QStringList selectedExtensions; QStringList selectedExtensions;
const char *currentPlaylistData = NULL; PlaylistEntryDialog *playlistDialog = playlistEntryDialog();
playlist_t *playlist = NULL; const char *currentPlaylistData = NULL;
int i; playlist_t *playlist = NULL;
settings_t *settings = config_get_ptr();
/* Assume a blank list means we will manually enter in all fields. */ /* Assume a blank list means we will manually enter in all fields. */
if (files.isEmpty()) if (files.isEmpty())
@ -604,18 +605,18 @@ void MainWindow::addFilesToPlaylist(QStringList files)
struct playlist_entry entry = {0}; struct playlist_entry entry = {0};
/* the push function reads our entry as const, so these casts are safe */ /* the push function reads our entry as const, so these casts are safe */
entry.path = const_cast<char*>(pathData); entry.path = const_cast<char*>(pathData);
entry.label = const_cast<char*>(fileNameNoExten); entry.label = const_cast<char*>(fileNameNoExten);
entry.core_path = const_cast<char*>(corePathData); entry.core_path = const_cast<char*>(corePathData);
entry.core_name = const_cast<char*>(coreNameData); entry.core_name = const_cast<char*>(coreNameData);
entry.crc32 = const_cast<char*>("00000000|crc"); entry.crc32 = const_cast<char*>("00000000|crc");
entry.db_name = const_cast<char*>(databaseData); entry.db_name = const_cast<char*>(databaseData);
playlist_push(playlist, &entry); playlist_push(playlist, &entry, settings->bools.playlist_fuzzy_archive_match);
} }
} }
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
playlist_free(playlist); playlist_free(playlist);
reloadPlaylists(); reloadPlaylists();
@ -623,7 +624,6 @@ void MainWindow::addFilesToPlaylist(QStringList files)
bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &contentHash) bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &contentHash)
{ {
QString playlistPath = getCurrentPlaylistPath();
QString path; QString path;
QString label; QString label;
QString corePath; QString corePath;
@ -637,18 +637,22 @@ bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &conte
QByteArray coreNameArray; QByteArray coreNameArray;
QByteArray dbNameArray; QByteArray dbNameArray;
QByteArray crc32Array; QByteArray crc32Array;
settings_t *settings = config_get_ptr();
QString playlistPath = getCurrentPlaylistPath();
const char *playlistPathData = NULL; const char *playlistPathData = NULL;
const char *pathData = NULL; const char *pathData = NULL;
const char *labelData = NULL; const char *labelData = NULL;
const char *corePathData = NULL; const char *corePathData = NULL;
const char *coreNameData = NULL; const char *coreNameData = NULL;
const char *dbNameData = NULL; const char *dbNameData = NULL;
const char *crc32Data = NULL; const char *crc32Data = NULL;
playlist_t *playlist = NULL; playlist_t *playlist = NULL;
unsigned index = 0; unsigned index = 0;
bool ok = false; bool ok = false;
if (playlistPath.isEmpty() || contentHash.isEmpty() || !contentHash.contains("index")) if ( playlistPath.isEmpty() ||
contentHash.isEmpty() ||
!contentHash.contains("index"))
return false; return false;
index = contentHash.value("index").toUInt(&ok); index = contentHash.value("index").toUInt(&ok);
@ -656,42 +660,42 @@ bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &conte
if (!ok) if (!ok)
return false; return false;
path = contentHash.value("path"); path = contentHash.value("path");
label = contentHash.value("label"); label = contentHash.value("label");
coreName = contentHash.value("core_name"); coreName = contentHash.value("core_name");
corePath = contentHash.value("core_path"); corePath = contentHash.value("core_path");
dbName = contentHash.value("db_name"); dbName = contentHash.value("db_name");
crc32 = contentHash.value("crc32"); crc32 = contentHash.value("crc32");
if (path.isEmpty() || if (path.isEmpty() ||
label.isEmpty() || label.isEmpty() ||
coreName.isEmpty() || coreName.isEmpty() ||
corePath.isEmpty() corePath.isEmpty()
) )
return false; return false;
playlistPathArray = playlistPath.toUtf8(); playlistPathArray = playlistPath.toUtf8();
pathArray = QDir::toNativeSeparators(path).toUtf8(); pathArray = QDir::toNativeSeparators(path).toUtf8();
labelArray = label.toUtf8(); labelArray = label.toUtf8();
coreNameArray = coreName.toUtf8(); coreNameArray = coreName.toUtf8();
corePathArray = QDir::toNativeSeparators(corePath).toUtf8(); corePathArray = QDir::toNativeSeparators(corePath).toUtf8();
if (!dbName.isEmpty()) if (!dbName.isEmpty())
{ {
dbNameArray = (dbName + ".lpl").toUtf8(); dbNameArray = (dbName + ".lpl").toUtf8();
dbNameData = dbNameArray.constData(); dbNameData = dbNameArray.constData();
} }
playlistPathData = playlistPathArray.constData(); playlistPathData = playlistPathArray.constData();
pathData = pathArray.constData(); pathData = pathArray.constData();
labelData = labelArray.constData(); labelData = labelArray.constData();
coreNameData = coreNameArray.constData(); coreNameData = coreNameArray.constData();
corePathData = corePathArray.constData(); corePathData = corePathArray.constData();
if (!crc32.isEmpty()) if (!crc32.isEmpty())
{ {
crc32Array = crc32.toUtf8(); crc32Array = crc32.toUtf8();
crc32Data = crc32Array.constData(); crc32Data = crc32Array.constData();
} }
if (path_is_compressed_file(pathData)) if (path_is_compressed_file(pathData))
@ -717,17 +721,17 @@ bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &conte
struct playlist_entry entry = {0}; struct playlist_entry entry = {0};
/* the update function reads our entry as const, so these casts are safe */ /* the update function reads our entry as const, so these casts are safe */
entry.path = const_cast<char*>(pathData); entry.path = const_cast<char*>(pathData);
entry.label = const_cast<char*>(labelData); entry.label = const_cast<char*>(labelData);
entry.core_path = const_cast<char*>(corePathData); entry.core_path = const_cast<char*>(corePathData);
entry.core_name = const_cast<char*>(coreNameData); entry.core_name = const_cast<char*>(coreNameData);
entry.crc32 = const_cast<char*>(crc32Data); entry.crc32 = const_cast<char*>(crc32Data);
entry.db_name = const_cast<char*>(dbNameData); entry.db_name = const_cast<char*>(dbNameData);
playlist_update(playlist, index, &entry); playlist_update(playlist, index, &entry);
} }
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
playlist_free(playlist); playlist_free(playlist);
reloadPlaylists(); reloadPlaylists();
@ -737,7 +741,7 @@ bool MainWindow::updateCurrentPlaylistEntry(const QHash<QString, QString> &conte
void MainWindow::onPlaylistWidgetContextMenuRequested(const QPoint&) void MainWindow::onPlaylistWidgetContextMenuRequested(const QPoint&)
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
QScopedPointer<QMenu> menu; QScopedPointer<QMenu> menu;
QScopedPointer<QMenu> associateMenu; QScopedPointer<QMenu> associateMenu;
QScopedPointer<QMenu> hiddenPlaylistsMenu; QScopedPointer<QMenu> hiddenPlaylistsMenu;
@ -750,20 +754,21 @@ void MainWindow::onPlaylistWidgetContextMenuRequested(const QPoint&)
QScopedPointer<QAction> downloadAllThumbnailsThisPlaylistAction; QScopedPointer<QAction> downloadAllThumbnailsThisPlaylistAction;
QPointer<QAction> selectedAction; QPointer<QAction> selectedAction;
QPoint cursorPos = QCursor::pos(); QPoint cursorPos = QCursor::pos();
QListWidgetItem *selectedItem = m_listWidget->itemAt(m_listWidget->viewport()->mapFromGlobal(cursorPos));
QDir playlistDir(settings->paths.directory_playlist); QDir playlistDir(settings->paths.directory_playlist);
QString playlistDirAbsPath = playlistDir.absolutePath();
QString currentPlaylistDirPath; QString currentPlaylistDirPath;
QString currentPlaylistPath; QString currentPlaylistPath;
QString currentPlaylistFileName; QString currentPlaylistFileName;
QFile currentPlaylistFile; QFile currentPlaylistFile;
QFileInfo currentPlaylistFileInfo; QFileInfo currentPlaylistFileInfo;
QMap<QString, const core_info_t*> coreList; QMap<QString, const core_info_t*> coreList;
QListWidgetItem *selectedItem = m_listWidget->itemAt(
m_listWidget->viewport()->mapFromGlobal(cursorPos));
QString playlistDirAbsPath = playlistDir.absolutePath();
core_info_list_t *core_info_list = NULL; core_info_list_t *core_info_list = NULL;
unsigned i = 0; unsigned i = 0;
int j = 0; int j = 0;
bool specialPlaylist = false; bool specialPlaylist = false;
bool foundHiddenPlaylist = false; bool foundHiddenPlaylist = false;
if (selectedItem) if (selectedItem)
{ {
@ -948,7 +953,8 @@ void MainWindow::onPlaylistWidgetContextMenuRequested(const QPoint&)
} }
/* Write changes to disk */ /* Write changes to disk */
playlist_write_file(playlist); playlist_write_file(playlist,
settings->bools.playlist_use_old_format);
/* Free playlist, if required */ /* Free playlist, if required */
if (loadPlaylist) if (loadPlaylist)
@ -1275,14 +1281,15 @@ bool MainWindow::currentPlaylistIsAll()
void MainWindow::deleteCurrentPlaylistItem() void MainWindow::deleteCurrentPlaylistItem()
{ {
QString playlistPath = getCurrentPlaylistPath();
QByteArray playlistArray; QByteArray playlistArray;
QString playlistPath = getCurrentPlaylistPath();
QHash<QString, QString> contentHash = getCurrentContentHash(); QHash<QString, QString> contentHash = getCurrentContentHash();
playlist_t *playlist = NULL; playlist_t *playlist = NULL;
const char *playlistData = NULL; const char *playlistData = NULL;
unsigned index = 0; unsigned index = 0;
bool ok = false; bool ok = false;
bool isAllPlaylist = currentPlaylistIsAll(); bool isAllPlaylist = currentPlaylistIsAll();
settings_t *settings = config_get_ptr();
if (isAllPlaylist) if (isAllPlaylist)
return; return;
@ -1307,7 +1314,7 @@ void MainWindow::deleteCurrentPlaylistItem()
playlist = playlist_init(playlistData, COLLECTION_SIZE); playlist = playlist_init(playlistData, COLLECTION_SIZE);
playlist_delete_index(playlist, index); playlist_delete_index(playlist, index);
playlist_write_file(playlist); playlist_write_file(playlist, settings->bools.playlist_use_old_format);
playlist_free(playlist); playlist_free(playlist);
reloadPlaylists(); reloadPlaylists();