diff options
Diffstat (limited to 'apps/onplay.c')
-rw-r--r-- | apps/onplay.c | 57 |
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; | |||
70 | static char selected_file_path[MAX_PATH]; | 70 | static char selected_file_path[MAX_PATH]; |
71 | static int selected_file_attr = 0; | 71 | static int selected_file_attr = 0; |
72 | static int onplay_result = ONPLAY_OK; | 72 | static int onplay_result = ONPLAY_OK; |
73 | static bool (*ctx_playlist_insert)(int position, bool queue, bool create_new); | 73 | static bool (*ctx_current_playlist_insert)(int position, bool queue, bool create_new); |
74 | static int (*ctx_add_to_playlist)(const char* playlist, bool new_playlist); | ||
74 | extern struct menu_item_ex file_menu; /* settings_menu.c */ | 75 | extern 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, | |||
837 | void onplay_show_playlist_menu(const char* path, void (*playlist_insert_cb)) | 838 | void 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)) | |||
850 | static bool cat_add_to_a_playlist(void) | 851 | static 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 | ||
856 | static bool cat_add_to_a_new_playlist(void) | 857 | static 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 | ||
862 | static int cat_playlist_callback(int action, | 863 | static 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 | ||
874 | void onplay_show_playlist_cat_menu(char* track_name) | 875 | void 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; |