Merge pull request #8434 from jdgleaver/playlist-db-name

Populate crc32 and db_name fields when adding history/favourites playlist entries
This commit is contained in:
Twinaphex 2019-03-09 15:47:47 +01:00 committed by GitHub
commit c7213c81e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 154 additions and 29 deletions

View File

@ -2395,7 +2395,7 @@ TODO: Add a setting for these tweaks */
if (str_list) if (str_list)
{ {
if (str_list->size >= 4) if (str_list->size >= 6)
{ {
/* Write playlist entry */ /* Write playlist entry */
command_playlist_push_write( command_playlist_push_write(
@ -2403,7 +2403,9 @@ TODO: Add a setting for these tweaks */
str_list->elems[0].data, /* content_path */ str_list->elems[0].data, /* content_path */
str_list->elems[1].data, /* content_label */ str_list->elems[1].data, /* content_label */
str_list->elems[2].data, /* core_path */ str_list->elems[2].data, /* core_path */
str_list->elems[3].data /* core_name */ str_list->elems[3].data, /* core_name */
str_list->elems[4].data, /* crc32 */
str_list->elems[5].data /* db_name */
); );
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);
} }

View File

@ -2122,7 +2122,9 @@ static int action_ok_audio_add_to_mixer_and_collection(const char *path,
combined_path, combined_path,
NULL, NULL,
"builtin", "builtin",
"musicplayer"); "musicplayer",
NULL,
NULL);
if (filestream_exists(combined_path)) if (filestream_exists(combined_path))
task_push_audio_mixer_load(combined_path, task_push_audio_mixer_load(combined_path,
@ -2152,7 +2154,9 @@ static int action_ok_audio_add_to_mixer_and_collection_and_play(const char *path
combined_path, combined_path,
NULL, NULL,
"builtin", "builtin",
"musicplayer"); "musicplayer",
NULL,
NULL);
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,
@ -3824,7 +3828,10 @@ static int action_ok_add_to_favorites(const char *path,
{ {
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
struct retro_system_info *system = runloop_get_libretro_system_info(); struct retro_system_info *system = runloop_get_libretro_system_info();
menu_handle_t *menu = NULL;
struct string_list *str_list = NULL; struct string_list *str_list = NULL;
const char *crc32 = NULL;
const char *db_name = NULL;
union string_list_elem_attr attr; union string_list_elem_attr attr;
char content_label[PATH_MAX_LENGTH]; char content_label[PATH_MAX_LENGTH];
@ -3882,15 +3889,31 @@ static int action_ok_add_to_favorites(const char *path,
strlcpy(core_name, file_path_str(FILE_PATH_DETECT), sizeof(core_name)); strlcpy(core_name, file_path_str(FILE_PATH_DETECT), sizeof(core_name));
} }
/* > crc32 + db_name */
if (menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
{
playlist_t *playlist_curr = playlist_get_cached();
if (playlist_index_is_valid(playlist_curr, menu->rpl_entry_selection_ptr, content_path, core_path))
{
playlist_get_crc32(playlist_curr, menu->rpl_entry_selection_ptr, &crc32);
playlist_get_db_name(playlist_curr, menu->rpl_entry_selection_ptr, &db_name);
}
}
/* Copy playlist parameters into string list /* Copy playlist parameters into string list
* [0]: content_path * [0]: content_path
* [1]: content_label * [1]: content_label
* [2]: core_path * [2]: core_path
* [3]: core_name */ * [3]: core_name
* [4]: crc32
* [5]: db_name */
string_list_append(str_list, content_path, attr); string_list_append(str_list, content_path, attr);
string_list_append(str_list, content_label, attr); string_list_append(str_list, content_label, attr);
string_list_append(str_list, core_path, attr); string_list_append(str_list, core_path, attr);
string_list_append(str_list, core_name, attr); string_list_append(str_list, core_name, attr);
string_list_append(str_list, !string_is_empty(crc32) ? crc32 : "", attr);
string_list_append(str_list, !string_is_empty(db_name) ? db_name : "", attr);
/* Trigger 'ADD_TO_FAVORITES' event */ /* Trigger 'ADD_TO_FAVORITES' event */
if (!command_event(CMD_EVENT_ADD_TO_FAVORITES, (void*)str_list)) if (!command_event(CMD_EVENT_ADD_TO_FAVORITES, (void*)str_list))
@ -3913,19 +3936,21 @@ static int action_ok_add_to_favorites_playlist(const char *path,
const char *content_label = NULL; const char *content_label = NULL;
const char *core_path = NULL; const char *core_path = NULL;
const char *core_name = NULL; const char *core_name = NULL;
const char *crc32 = NULL;
const char *db_name = NULL;
menu_handle_t *menu = NULL; menu_handle_t *menu = NULL;
playlist_t *tmp_playlist = playlist_get_cached(); playlist_t *playlist_curr = playlist_get_cached();
int ret = 0; int ret = 0;
if (!tmp_playlist) if (!playlist_curr)
return 0; return 0;
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu)) if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return menu_cbs_exit(); return menu_cbs_exit();
/* Read current playlist parameters */ /* Read current playlist parameters */
playlist_get_index(tmp_playlist, menu->rpl_entry_selection_ptr, playlist_get_index(playlist_curr, menu->rpl_entry_selection_ptr,
&content_path, &content_label, &core_path, &core_name, &content_path, &content_label, &core_path, &core_name,
NULL, NULL); &crc32, NULL);
/* Error checking /* Error checking
* > If content path is empty, cannot do anything... */ * > If content path is empty, cannot do anything... */
@ -3947,7 +3972,9 @@ static int action_ok_add_to_favorites_playlist(const char *path,
* [0]: content_path * [0]: content_path
* [1]: content_label * [1]: content_label
* [2]: core_path * [2]: core_path
* [3]: core_name */ * [3]: core_name
* [4]: crc32
* [5]: db_name */
/* > content_path */ /* > content_path */
string_list_append(str_list, content_path, attr); string_list_append(str_list, content_path, attr);
@ -3994,6 +4021,13 @@ static int action_ok_add_to_favorites_playlist(const char *path,
string_list_append(str_list, file_path_str(FILE_PATH_DETECT), attr); string_list_append(str_list, file_path_str(FILE_PATH_DETECT), attr);
} }
/* crc32 */
string_list_append(str_list, !string_is_empty(crc32) ? crc32 : "", attr);
/* db_name */
playlist_get_db_name(playlist_curr, menu->rpl_entry_selection_ptr, &db_name);
string_list_append(str_list, !string_is_empty(db_name) ? db_name : "", attr);
/* Trigger 'ADD_TO_FAVORITES' event */ /* Trigger 'ADD_TO_FAVORITES' event */
if (!command_event(CMD_EVENT_ADD_TO_FAVORITES, (void*)str_list)) if (!command_event(CMD_EVENT_ADD_TO_FAVORITES, (void*)str_list))
ret = menu_cbs_exit(); ret = menu_cbs_exit();

View File

@ -1759,7 +1759,7 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu,
playlist_get_index(playlist, j, playlist_get_index(playlist, j,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, &crc32); &crc32, NULL);
if (crc32) if (crc32)
tmp_str_list = string_split(crc32, "|"); tmp_str_list = string_split(crc32, "|");

View File

@ -32,6 +32,7 @@
#include "playlist.h" #include "playlist.h"
#include "verbosity.h" #include "verbosity.h"
#include "configuration.h" #include "configuration.h"
#include "file_path_special.h"
#ifndef PLAYLIST_ENTRIES #ifndef PLAYLIST_ENTRIES
#define PLAYLIST_ENTRIES 6 #define PLAYLIST_ENTRIES 6
@ -1651,7 +1652,9 @@ void command_playlist_push_write(
const char *path, const char *path,
const char *label, const char *label,
const char *core_path, const char *core_path,
const char *core_name) const char *core_name,
const char *crc32,
const char *db_name)
{ {
if (!playlist) if (!playlist)
return; return;
@ -1662,8 +1665,8 @@ void command_playlist_push_write(
label, label,
core_path, core_path,
core_name, core_name,
NULL, crc32,
NULL db_name
)) ))
playlist_write_file(playlist); playlist_write_file(playlist);
} }
@ -1695,3 +1698,53 @@ void command_playlist_update_write(
playlist_write_file(playlist); playlist_write_file(playlist);
} }
bool playlist_index_is_valid(playlist_t *playlist, size_t idx,
const char *path, const char *core_path)
{
if (!playlist)
return false;
if (idx >= playlist->size)
return false;
return string_is_equal(playlist->entries[idx].path, path) &&
string_is_equal(path_basename(playlist->entries[idx].core_path), path_basename(core_path));
}
void playlist_get_crc32(playlist_t *playlist, size_t idx,
const char **crc32)
{
if (!playlist)
return;
if (crc32)
*crc32 = playlist->entries[idx].crc32;
}
void playlist_get_db_name(playlist_t *playlist, size_t idx,
const char **db_name)
{
if (!playlist)
return;
if (db_name)
{
if (!string_is_empty(playlist->entries[idx].db_name))
*db_name = playlist->entries[idx].db_name;
else
{
const char *conf_path_basename = path_basename(playlist->conf_path);
/* Only use file basename if this is a 'collection' playlist
* (i.e. ignore history/favourites) */
if (!string_is_empty(conf_path_basename) &&
!string_is_equal(conf_path_basename, file_path_str(FILE_PATH_CONTENT_FAVORITES)) &&
!string_is_equal(conf_path_basename, file_path_str(FILE_PATH_CONTENT_HISTORY)) &&
!string_is_equal(conf_path_basename, file_path_str(FILE_PATH_CONTENT_IMAGE_HISTORY)) &&
!string_is_equal(conf_path_basename, file_path_str(FILE_PATH_CONTENT_MUSIC_HISTORY)) &&
!string_is_equal(conf_path_basename, file_path_str(FILE_PATH_CONTENT_VIDEO_HISTORY)))
*db_name = conf_path_basename;
}
}
}

View File

@ -76,8 +76,8 @@ void playlist_get_index(playlist_t *playlist,
size_t idx, size_t idx,
const char **path, const char **label, const char **path, const char **label,
const char **core_path, const char **core_name, const char **core_path, const char **core_name,
const char **db_name, const char **crc32,
const char **crc32); const char **db_name);
void playlist_get_runtime_index(playlist_t *playlist, void playlist_get_runtime_index(playlist_t *playlist,
size_t idx, size_t idx,
@ -139,8 +139,8 @@ void playlist_get_index_by_path(playlist_t *playlist,
const char *search_path, const char *search_path,
char **path, char **label, char **path, char **label,
char **core_path, char **core_name, char **core_path, char **core_name,
char **db_name, char **crc32,
char **crc32); char **db_name);
bool playlist_entry_exists(playlist_t *playlist, bool playlist_entry_exists(playlist_t *playlist,
const char *path, const char *path,
@ -167,7 +167,9 @@ void command_playlist_push_write(
const char *path, const char *path,
const char *label, const char *label,
const char *core_path, const char *core_path,
const char *core_name); const char *core_name,
const char *crc32,
const char *db_name);
void command_playlist_update_write( void command_playlist_update_write(
playlist_t *playlist, playlist_t *playlist,
@ -179,6 +181,18 @@ void command_playlist_update_write(
const char *crc32, const char *crc32,
const char *db_name); const char *db_name);
/* Returns true if specified playlist index matches
* specified content/core paths */
bool playlist_index_is_valid(playlist_t *playlist, size_t idx,
const char *path, const char *core_path);
void playlist_get_crc32(playlist_t *playlist, size_t idx,
const char **crc32);
/* If db_name is empty, 'returns' playlist file basename */
void playlist_get_db_name(playlist_t *playlist, size_t idx,
const char **db_name);
RETRO_END_DECLS RETRO_END_DECLS
#endif #endif

View File

@ -1016,32 +1016,37 @@ static bool task_load_content(content_ctx_info_t *content_info,
const char *core_path = NULL; const char *core_path = NULL;
const char *core_name = NULL; const char *core_name = NULL;
const char *label = NULL; const char *label = NULL;
playlist_t *playlist_tmp = g_defaults.content_history; const char *crc32 = NULL;
const char *db_name = NULL;
playlist_t *playlist_hist = g_defaults.content_history;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
switch (path_is_media_type(tmp)) switch (path_is_media_type(tmp))
{ {
case RARCH_CONTENT_MOVIE: case RARCH_CONTENT_MOVIE:
#ifdef HAVE_FFMPEG #ifdef HAVE_FFMPEG
playlist_tmp = g_defaults.video_history; playlist_hist = g_defaults.video_history;
core_name = "movieplayer"; core_name = "movieplayer";
core_path = "builtin"; core_path = "builtin";
#endif #endif
break; break;
case RARCH_CONTENT_MUSIC: case RARCH_CONTENT_MUSIC:
playlist_tmp = g_defaults.music_history; playlist_hist = g_defaults.music_history;
core_name = "musicplayer"; core_name = "musicplayer";
core_path = "builtin"; core_path = "builtin";
break; break;
case RARCH_CONTENT_IMAGE: case RARCH_CONTENT_IMAGE:
#ifdef HAVE_IMAGEVIEWER #ifdef HAVE_IMAGEVIEWER
playlist_tmp = g_defaults.image_history; playlist_hist = g_defaults.image_history;
core_name = "imageviewer"; core_name = "imageviewer";
core_path = "builtin"; core_path = "builtin";
#endif #endif
break; break;
default: default:
{ {
#ifdef HAVE_MENU
menu_handle_t *menu = NULL;
#endif
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
/* Set core path */ /* Set core path */
@ -1057,6 +1062,19 @@ static bool task_load_content(content_ctx_info_t *content_info,
if (string_is_empty(core_name)) if (string_is_empty(core_name))
core_name = info->library_name; core_name = info->library_name;
#ifdef HAVE_MENU
/* Set database name + checksum */
if (menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
{
playlist_t *playlist_curr = playlist_get_cached();
if (playlist_index_is_valid(playlist_curr, menu->rpl_entry_selection_ptr, tmp, core_path))
{
playlist_get_crc32(playlist_curr, menu->rpl_entry_selection_ptr, &crc32);
playlist_get_db_name(playlist_curr, menu->rpl_entry_selection_ptr, &db_name);
}
}
#endif
break; break;
} }
} }
@ -1072,13 +1090,15 @@ static bool task_load_content(content_ctx_info_t *content_info,
if ( if (
content_ctx->history_list_enable content_ctx->history_list_enable
&& playlist_tmp) && playlist_hist)
command_playlist_push_write( command_playlist_push_write(
playlist_tmp, playlist_hist,
tmp, tmp,
label, label,
core_path, core_path,
core_name); core_name,
crc32,
db_name);
} }
free(tmp); free(tmp);

View File

@ -277,7 +277,7 @@ static void task_netplay_crc_scan_handler(retro_task_t *task)
const char *playlist_crc32 = NULL; const char *playlist_crc32 = NULL;
const char *playlist_path = NULL; const char *playlist_path = NULL;
playlist_get_index(playlist, j, &playlist_path, NULL, NULL, NULL, NULL, &playlist_crc32); playlist_get_index(playlist, j, &playlist_path, NULL, NULL, NULL, &playlist_crc32, NULL);
if(have_crc && string_is_equal(playlist_crc32, state->content_crc)) if(have_crc && string_is_equal(playlist_crc32, state->content_crc))
{ {
@ -345,7 +345,7 @@ static void task_netplay_crc_scan_handler(retro_task_t *task)
const char *playlist_crc32 = NULL; const char *playlist_crc32 = NULL;
const char *playlist_path = NULL; const char *playlist_path = NULL;
playlist_get_index(playlist, k, &playlist_path, NULL, NULL, NULL, NULL, &playlist_crc32); playlist_get_index(playlist, k, &playlist_path, NULL, NULL, NULL, &playlist_crc32, NULL);
get_entry(entry, sizeof(entry), playlist_path); get_entry(entry, sizeof(entry), playlist_path);
if(!string_is_empty(entry) && if(!string_is_empty(entry) &&

View File

@ -166,7 +166,9 @@ static void task_screenshot_handler(retro_task_t *task)
state->filename, state->filename,
NULL, NULL,
"builtin", "builtin",
"imageviewer"); "imageviewer",
NULL,
NULL);
#endif #endif
task_set_progress(task, 100); task_set_progress(task, 100);