diff --git a/command.c b/command.c index 19b2de761e..69907bf40b 100644 --- a/command.c +++ b/command.c @@ -1991,6 +1991,13 @@ bool command_event(enum event_command cmd, void *data) } g_defaults.content_history = NULL; + if (g_defaults.content_favorites) + { + playlist_write_file(g_defaults.content_favorites); + playlist_free(g_defaults.content_favorites); + } + g_defaults.content_favorites = NULL; + if (g_defaults.music_history) { playlist_write_file(g_defaults.music_history); @@ -2173,6 +2180,17 @@ bool command_event(enum event_command cmd, void *data) if (ui_companion_is_on_foreground()) ui_companion_driver_toggle(); break; + case CMD_EVENT_ADD_TO_FAVORITES: + playlist_push( + g_defaults.content_favorites, + path_get(RARCH_PATH_CONTENT), + NULL, + file_path_str(FILE_PATH_DETECT), + file_path_str(FILE_PATH_DETECT), + NULL, + NULL + ); + break; case CMD_EVENT_RESTART_RETROARCH: if (!frontend_driver_set_fork(FRONTEND_FORK_RESTART)) return false; diff --git a/command.h b/command.h index ccac457ef8..4709d3f404 100644 --- a/command.h +++ b/command.h @@ -134,6 +134,8 @@ enum event_command CMD_EVENT_REBOOT, /* Resume RetroArch when in menu. */ CMD_EVENT_RESUME, + /* Add a playlist entry to favorites. */ + CMD_EVENT_ADD_TO_FAVORITES, /* Toggles pause. */ CMD_EVENT_PAUSE_TOGGLE, /* Pauses RetroArch. */ diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index a73475adb3..2518825b65 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3103,6 +3103,12 @@ static int action_ok_resume_content(const char *path, return generic_action_ok_command(CMD_EVENT_RESUME); } +static int action_ok_add_to_favorites(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + return generic_action_ok_command(CMD_EVENT_ADD_TO_FAVORITES); +} + static int action_ok_restart_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -4590,6 +4596,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_RESUME_CONTENT: BIND_ACTION_OK(cbs, action_ok_resume_content); break; + case MENU_ENUM_LABEL_ADD_TO_FAVORITES: + BIND_ACTION_OK(cbs, action_ok_add_to_favorites); + break; case MENU_ENUM_LABEL_RESTART_CONTENT: BIND_ACTION_OK(cbs, action_ok_restart_content); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 83616d442f..e8b3094cd0 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3001,11 +3001,6 @@ static int menu_displaylist_parse_horizontal_content_actions( msg_hash_to_str(MENU_ENUM_LABEL_RUN), MENU_ENUM_LABEL_RUN, FILE_TYPE_PLAYLIST_ENTRY, 0, idx); - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ADD_TO_FAVORITES), - msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_FAVORITES), - MENU_ENUM_LABEL_ADD_TO_FAVORITES, FILE_TYPE_PLAYLIST_ENTRY, 0, idx); - if (settings->bools.playlist_entry_remove) menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY),