summaryrefslogtreecommitdiff
path: root/apps/onplay.c
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-08-16 13:10:13 +0200
committerChristian Soffke <christian.soffke@gmail.com>2023-01-14 12:14:28 -0500
commit7f265ee8dd062a015e214b16f9c41fc27e867f22 (patch)
tree87ba5da95ef7870c922fd7206640c976ad72794a /apps/onplay.c
parentcc79f1b543535e8d7e5b9875af9043c16267e429 (diff)
downloadrockbox-7f265ee8dd062a015e214b16f9c41fc27e867f22.tar.gz
rockbox-7f265ee8dd062a015e214b16f9c41fc27e867f22.zip
Database: Add ability to insert multiple files into playlists
You could only add single files to playlists from the database browser before. This enables adding any database selection to a new or existing playlist. Change-Id: I811c7167641c589944bb2afc18dcc1d299a7b979
Diffstat (limited to 'apps/onplay.c')
-rw-r--r--apps/onplay.c57
1 files changed, 35 insertions, 22 deletions
diff --git a/apps/onplay.c b/apps/onplay.c
index ce2b3310f3..f92ed76050 100644
--- a/apps/onplay.c
+++ b/apps/onplay.c
@@ -70,7 +70,8 @@ static const char *selected_file = NULL;
70static char selected_file_path[MAX_PATH]; 70static char selected_file_path[MAX_PATH];
71static int selected_file_attr = 0; 71static int selected_file_attr = 0;
72static int onplay_result = ONPLAY_OK; 72static int onplay_result = ONPLAY_OK;
73static bool (*ctx_playlist_insert)(int position, bool queue, bool create_new); 73static bool (*ctx_current_playlist_insert)(int position, bool queue, bool create_new);
74static int (*ctx_add_to_playlist)(const char* playlist, bool new_playlist);
74extern struct menu_item_ex file_menu; /* settings_menu.c */ 75extern struct menu_item_ex file_menu; /* settings_menu.c */
75 76
76/* redefine MAKE_MENU so the MENU_EXITAFTERTHISMENU flag can be added easily */ 77/* redefine MAKE_MENU so the MENU_EXITAFTERTHISMENU flag can be added easily */
@@ -626,11 +627,11 @@ static int add_to_playlist(void* arg)
626#ifdef HAVE_TAGCACHE 627#ifdef HAVE_TAGCACHE
627 if (context == CONTEXT_ID3DB) 628 if (context == CONTEXT_ID3DB)
628 { 629 {
629 tagtree_insert_selection_playlist(position, queue); 630 tagtree_current_playlist_insert(position, queue);
630 } 631 }
631 else if (context == CONTEXT_STD && ctx_playlist_insert != NULL) 632 else if (context == CONTEXT_STD && ctx_current_playlist_insert != NULL)
632 { 633 {
633 ctx_playlist_insert(position, queue, false); 634 ctx_current_playlist_insert(position, queue, false);
634 } 635 }
635 else 636 else
636#endif 637#endif
@@ -837,7 +838,7 @@ static int treeplaylist_callback(int action,
837void onplay_show_playlist_menu(const char* path, void (*playlist_insert_cb)) 838void onplay_show_playlist_menu(const char* path, void (*playlist_insert_cb))
838{ 839{
839 context = CONTEXT_STD; 840 context = CONTEXT_STD;
840 ctx_playlist_insert = playlist_insert_cb; 841 ctx_current_playlist_insert = playlist_insert_cb;
841 selected_file = path; 842 selected_file = path;
842 if (dir_exists(path)) 843 if (dir_exists(path))
843 selected_file_attr = ATTR_DIRECTORY; 844 selected_file_attr = ATTR_DIRECTORY;
@@ -850,13 +851,13 @@ void onplay_show_playlist_menu(const char* path, void (*playlist_insert_cb))
850static bool cat_add_to_a_playlist(void) 851static bool cat_add_to_a_playlist(void)
851{ 852{
852 return catalog_add_to_a_playlist(selected_file, selected_file_attr, 853 return catalog_add_to_a_playlist(selected_file, selected_file_attr,
853 false, NULL); 854 false, NULL, ctx_add_to_playlist);
854} 855}
855 856
856static bool cat_add_to_a_new_playlist(void) 857static bool cat_add_to_a_new_playlist(void)
857{ 858{
858 return catalog_add_to_a_playlist(selected_file, selected_file_attr, 859 return catalog_add_to_a_playlist(selected_file, selected_file_attr,
859 true, NULL); 860 true, NULL, ctx_add_to_playlist);
860} 861}
861 862
862static int cat_playlist_callback(int action, 863static int cat_playlist_callback(int action,
@@ -871,11 +872,12 @@ MAKE_ONPLAYMENU(cat_playlist_menu, ID2P(LANG_ADD_TO_PL),
871 cat_playlist_callback, Icon_Playlist, 872 cat_playlist_callback, Icon_Playlist,
872 &cat_add_to_list, &cat_add_to_new); 873 &cat_add_to_list, &cat_add_to_new);
873 874
874void onplay_show_playlist_cat_menu(char* track_name) 875void onplay_show_playlist_cat_menu(const char* track_name, int attr, void (*add_to_pl_cb))
875{ 876{
876 context = CONTEXT_STD; 877 context = CONTEXT_STD;
878 ctx_add_to_playlist = add_to_pl_cb;
877 selected_file = track_name; 879 selected_file = track_name;
878 selected_file_attr = FILE_ATTR_AUDIO; 880 selected_file_attr = attr;
879 do_menu(&cat_playlist_menu, NULL, NULL, false); 881 do_menu(&cat_playlist_menu, NULL, NULL, false);
880} 882}
881 883
@@ -892,13 +894,6 @@ static int cat_playlist_callback(int action,
892 { 894 {
893 return ACTION_EXIT_MENUITEM; 895 return ACTION_EXIT_MENUITEM;
894 } 896 }
895#ifdef HAVE_TAGCACHE
896 if (context == CONTEXT_ID3DB &&
897 ((selected_file_attr & FILE_ATTR_MASK) != FILE_ATTR_AUDIO))
898 {
899 return ACTION_EXIT_MENUITEM;
900 }
901#endif
902 897
903 switch (action) 898 switch (action)
904 { 899 {
@@ -2026,13 +2021,31 @@ int onplay(char* file, int attr, int from, bool hotkey)
2026 const struct menu_item_ex *menu; 2021 const struct menu_item_ex *menu;
2027 onplay_result = ONPLAY_OK; 2022 onplay_result = ONPLAY_OK;
2028 context = from; 2023 context = from;
2029 ctx_playlist_insert = NULL; 2024 ctx_current_playlist_insert = NULL;
2030 if (file == NULL) 2025 selected_file = NULL;
2031 selected_file = NULL; 2026#ifdef HAVE_TAGCACHE
2032 else 2027 if (context == CONTEXT_ID3DB &&
2028 (attr & FILE_ATTR_MASK) != FILE_ATTR_AUDIO)
2033 { 2029 {
2034 strmemccpy(selected_file_path, file, MAX_PATH); 2030 ctx_add_to_playlist = tagtree_add_to_playlist;
2035 selected_file = selected_file_path; 2031 if (file != NULL)
2032 {
2033 /* add a leading slash so that catalog_add_to_a_playlist
2034 later prefills the name when creating a new playlist */
2035 snprintf(selected_file_path, MAX_PATH, "/%s", file);
2036 selected_file = selected_file_path;
2037 }
2038 }
2039 else
2040#endif
2041 {
2042 ctx_add_to_playlist = NULL;
2043 if (file != NULL)
2044 {
2045 strmemccpy(selected_file_path, file, MAX_PATH);
2046 selected_file = selected_file_path;
2047 }
2048
2036 } 2049 }
2037 selected_file_attr = attr; 2050 selected_file_attr = attr;
2038 int menu_selection; 2051 int menu_selection;