diff options
Diffstat (limited to 'apps/onplay.c')
-rw-r--r-- | apps/onplay.c | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/apps/onplay.c b/apps/onplay.c index 3e085cea59..2f0ee3b861 100644 --- a/apps/onplay.c +++ b/apps/onplay.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include "buffer.h" | 40 | #include "buffer.h" |
41 | #include "settings.h" | 41 | #include "settings.h" |
42 | #include "status.h" | 42 | #include "status.h" |
43 | #include "playlist_viewer.h" | ||
43 | #include "onplay.h" | 44 | #include "onplay.h" |
44 | 45 | ||
45 | static char* selected_file = NULL; | 46 | static char* selected_file = NULL; |
@@ -60,7 +61,7 @@ static bool add_to_playlist(int position, bool queue) | |||
60 | playlist_create(NULL, NULL); | 61 | playlist_create(NULL, NULL); |
61 | 62 | ||
62 | if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) | 63 | if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) |
63 | playlist_insert_track(selected_file, position, queue); | 64 | playlist_insert_track(NULL, selected_file, position, queue); |
64 | else if (selected_file_attr & ATTR_DIRECTORY) | 65 | else if (selected_file_attr & ATTR_DIRECTORY) |
65 | { | 66 | { |
66 | bool recurse = false; | 67 | bool recurse = false; |
@@ -99,10 +100,11 @@ static bool add_to_playlist(int position, bool queue) | |||
99 | } | 100 | } |
100 | } | 101 | } |
101 | 102 | ||
102 | playlist_insert_directory(selected_file, position, queue, recurse); | 103 | playlist_insert_directory(NULL, selected_file, position, queue, |
104 | recurse); | ||
103 | } | 105 | } |
104 | else if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) | 106 | else if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) |
105 | playlist_insert_playlist(selected_file, position, queue); | 107 | playlist_insert_playlist(NULL, selected_file, position, queue); |
106 | 108 | ||
107 | if (new_playlist && (playlist_amount() > 0)) | 109 | if (new_playlist && (playlist_amount() > 0)) |
108 | { | 110 | { |
@@ -119,12 +121,36 @@ static bool add_to_playlist(int position, bool queue) | |||
119 | return false; | 121 | return false; |
120 | } | 122 | } |
121 | 123 | ||
124 | static bool view_playlist(void) | ||
125 | { | ||
126 | bool was_playing = mpeg_status() & MPEG_STATUS_PLAY; | ||
127 | bool result; | ||
128 | |||
129 | result = playlist_viewer_ex(selected_file); | ||
130 | |||
131 | if (!was_playing && (mpeg_status() & MPEG_STATUS_PLAY) && | ||
132 | onplay_result == ONPLAY_OK) | ||
133 | /* playlist was started from viewer */ | ||
134 | onplay_result = ONPLAY_START_PLAY; | ||
135 | |||
136 | return result; | ||
137 | } | ||
138 | |||
122 | /* Sub-menu for playlist options */ | 139 | /* Sub-menu for playlist options */ |
123 | static bool playlist_options(void) | 140 | static bool playlist_options(void) |
124 | { | 141 | { |
125 | struct menu_items menu[6]; | 142 | struct menu_items menu[7]; |
126 | struct playlist_args args[6]; /* increase these 2 if you add entries! */ | 143 | struct playlist_args args[7]; /* increase these 2 if you add entries! */ |
127 | int m, i=0, result; | 144 | int m, i=0, pstart=0, result; |
145 | bool ret = false; | ||
146 | |||
147 | if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) | ||
148 | { | ||
149 | menu[i].desc = str(LANG_VIEW); | ||
150 | menu[i].function = view_playlist; | ||
151 | i++; | ||
152 | pstart++; | ||
153 | } | ||
128 | 154 | ||
129 | if (mpeg_status() & MPEG_STATUS_PLAY) | 155 | if (mpeg_status() & MPEG_STATUS_PLAY) |
130 | { | 156 | { |
@@ -169,11 +195,13 @@ static bool playlist_options(void) | |||
169 | 195 | ||
170 | m = menu_init( menu, i ); | 196 | m = menu_init( menu, i ); |
171 | result = menu_show(m); | 197 | result = menu_show(m); |
172 | if (result >= 0) | 198 | if (result >= 0 && result < pstart) |
173 | add_to_playlist(args[result].position, args[result].queue); | 199 | ret = menu[result].function(); |
200 | else if (result >= pstart) | ||
201 | ret = add_to_playlist(args[result].position, args[result].queue); | ||
174 | menu_exit(m); | 202 | menu_exit(m); |
175 | 203 | ||
176 | return false; | 204 | return ret; |
177 | } | 205 | } |
178 | 206 | ||
179 | static bool delete_file(void) | 207 | static bool delete_file(void) |
@@ -489,8 +517,9 @@ int onplay(char* file, int attr) | |||
489 | selected_file = file; | 517 | selected_file = file; |
490 | selected_file_attr = attr; | 518 | selected_file_attr = attr; |
491 | 519 | ||
492 | if (((attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) || (attr & ATTR_DIRECTORY) || | 520 | if (((attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) || |
493 | (((attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) && (mpeg_status() & MPEG_STATUS_PLAY))) | 521 | (attr & ATTR_DIRECTORY) || |
522 | ((attr & TREE_ATTR_MASK) == TREE_ATTR_M3U)) | ||
494 | { | 523 | { |
495 | menu[i].desc = str(LANG_PLAYINDICES_PLAYLIST); | 524 | menu[i].desc = str(LANG_PLAYINDICES_PLAYLIST); |
496 | menu[i].function = playlist_options; | 525 | menu[i].function = playlist_options; |