diff options
-rw-r--r-- | apps/lang/english.lang | 9 | ||||
-rw-r--r-- | apps/onplay.c | 40 | ||||
-rw-r--r-- | apps/playlist.c | 14 | ||||
-rw-r--r-- | apps/playlist.h | 3 | ||||
-rw-r--r-- | apps/playlist_menu.c | 9 | ||||
-rw-r--r-- | apps/settings.c | 20 | ||||
-rw-r--r-- | apps/settings.h | 5 |
7 files changed, 80 insertions, 20 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index dab8fa6bd4..5360c7c21e 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -1650,12 +1650,12 @@ new: | |||
1650 | 1650 | ||
1651 | id: LANG_QUEUE_FIRST | 1651 | id: LANG_QUEUE_FIRST |
1652 | desc: in onplay menu. queue a track/playlist into dynamic playlist. | 1652 | desc: in onplay menu. queue a track/playlist into dynamic playlist. |
1653 | eng: "Queue first" | 1653 | eng: "Queue next" |
1654 | new: | 1654 | new: |
1655 | 1655 | ||
1656 | id: LANG_INSERT_FIRST | 1656 | id: LANG_INSERT_FIRST |
1657 | desc: in onplay menu. insert a track/playlist into dynamic playlist. | 1657 | desc: in onplay menu. insert a track/playlist into dynamic playlist. |
1658 | eng: "Insert first" | 1658 | eng: "Insert next" |
1659 | new: | 1659 | new: |
1660 | 1660 | ||
1661 | id: LANG_SAVE_DYNAMIC_PLAYLIST | 1661 | id: LANG_SAVE_DYNAMIC_PLAYLIST |
@@ -1722,3 +1722,8 @@ id: LANG_RECURSE_DIRECTORY | |||
1722 | desc: In playlist menu | 1722 | desc: In playlist menu |
1723 | eng: "Recursively Insert Directories" | 1723 | eng: "Recursively Insert Directories" |
1724 | new: | 1724 | new: |
1725 | |||
1726 | id: LANG_RECURSE_DIRECTORY_QUESTION | ||
1727 | desc: Asked from onplay screen | ||
1728 | eng: "Recursively?" | ||
1729 | new: | ||
diff --git a/apps/onplay.c b/apps/onplay.c index 6c538f8d8a..6c6b2eed0b 100644 --- a/apps/onplay.c +++ b/apps/onplay.c | |||
@@ -62,7 +62,45 @@ static bool add_to_playlist(int position, bool queue) | |||
62 | if (selected_file_attr & TREE_ATTR_MPA) | 62 | if (selected_file_attr & TREE_ATTR_MPA) |
63 | playlist_insert_track(selected_file, position, queue); | 63 | playlist_insert_track(selected_file, position, queue); |
64 | else if (selected_file_attr & ATTR_DIRECTORY) | 64 | else if (selected_file_attr & ATTR_DIRECTORY) |
65 | playlist_insert_directory(selected_file, position, queue); | 65 | { |
66 | bool recurse = false; | ||
67 | |||
68 | if (global_settings.recursive_dir_insert != RECURSE_ASK) | ||
69 | recurse = (bool)global_settings.recursive_dir_insert; | ||
70 | else | ||
71 | { | ||
72 | /* Ask if user wants to recurse directory */ | ||
73 | bool exit = false; | ||
74 | |||
75 | lcd_clear_display(); | ||
76 | lcd_puts_scroll(0,0,str(LANG_RECURSE_DIRECTORY_QUESTION)); | ||
77 | lcd_puts_scroll(0,1,selected_file); | ||
78 | |||
79 | #ifdef HAVE_LCD_BITMAP | ||
80 | lcd_puts(0,3,str(LANG_CONFIRM_WITH_PLAY_RECORDER)); | ||
81 | lcd_puts(0,4,str(LANG_CANCEL_WITH_ANY_RECORDER)); | ||
82 | #endif | ||
83 | |||
84 | lcd_update(); | ||
85 | |||
86 | while (!exit) { | ||
87 | int btn = button_get(true); | ||
88 | switch (btn) { | ||
89 | case BUTTON_PLAY: | ||
90 | recurse = true; | ||
91 | exit = true; | ||
92 | break; | ||
93 | default: | ||
94 | /* ignore button releases */ | ||
95 | if (!(btn & BUTTON_REL)) | ||
96 | exit = true; | ||
97 | break; | ||
98 | } | ||
99 | } | ||
100 | } | ||
101 | |||
102 | playlist_insert_directory(selected_file, position, queue, recurse); | ||
103 | } | ||
66 | else if (selected_file_attr & TREE_ATTR_M3U) | 104 | else if (selected_file_attr & TREE_ATTR_M3U) |
67 | playlist_insert_playlist(selected_file, position, queue); | 105 | playlist_insert_playlist(selected_file, position, queue); |
68 | 106 | ||
diff --git a/apps/playlist.c b/apps/playlist.c index 05149d164f..b5309cdba0 100644 --- a/apps/playlist.c +++ b/apps/playlist.c | |||
@@ -131,7 +131,7 @@ static int add_indices_to_playlist(void); | |||
131 | static int add_track_to_playlist(char *filename, int position, bool queue, | 131 | static int add_track_to_playlist(char *filename, int position, bool queue, |
132 | int seek_pos); | 132 | int seek_pos); |
133 | static int add_directory_to_playlist(char *dirname, int *position, bool queue, | 133 | static int add_directory_to_playlist(char *dirname, int *position, bool queue, |
134 | int *count); | 134 | int *count, bool recurse); |
135 | static int remove_track_from_playlist(int position, bool write); | 135 | static int remove_track_from_playlist(int position, bool write); |
136 | static int randomise_playlist(unsigned int seed, bool start_current, | 136 | static int randomise_playlist(unsigned int seed, bool start_current, |
137 | bool write); | 137 | bool write); |
@@ -402,7 +402,7 @@ static int add_track_to_playlist(char *filename, int position, bool queue, | |||
402 | * Insert directory into playlist. May be called recursively. | 402 | * Insert directory into playlist. May be called recursively. |
403 | */ | 403 | */ |
404 | static int add_directory_to_playlist(char *dirname, int *position, bool queue, | 404 | static int add_directory_to_playlist(char *dirname, int *position, bool queue, |
405 | int *count) | 405 | int *count, bool recurse) |
406 | { | 406 | { |
407 | char buf[MAX_PATH+1]; | 407 | char buf[MAX_PATH+1]; |
408 | char *count_str; | 408 | char *count_str; |
@@ -446,12 +446,12 @@ static int add_directory_to_playlist(char *dirname, int *position, bool queue, | |||
446 | 446 | ||
447 | if (files[i].attr & ATTR_DIRECTORY) | 447 | if (files[i].attr & ATTR_DIRECTORY) |
448 | { | 448 | { |
449 | if (global_settings.recursive_dir_insert) | 449 | if (recurse) |
450 | { | 450 | { |
451 | /* recursively add directories */ | 451 | /* recursively add directories */ |
452 | snprintf(buf, sizeof(buf), "%s/%s", dirname, files[i].name); | 452 | snprintf(buf, sizeof(buf), "%s/%s", dirname, files[i].name); |
453 | result = add_directory_to_playlist(buf, position, queue, | 453 | result = add_directory_to_playlist(buf, position, queue, |
454 | count); | 454 | count, recurse); |
455 | if (result < 0) | 455 | if (result < 0) |
456 | break; | 456 | break; |
457 | 457 | ||
@@ -1385,7 +1385,8 @@ int playlist_insert_track(char *filename, int position, bool queue) | |||
1385 | /* | 1385 | /* |
1386 | * Insert all tracks from specified directory into playlist. | 1386 | * Insert all tracks from specified directory into playlist. |
1387 | */ | 1387 | */ |
1388 | int playlist_insert_directory(char *dirname, int position, bool queue) | 1388 | int playlist_insert_directory(char *dirname, int position, bool queue, |
1389 | bool recurse) | ||
1389 | { | 1390 | { |
1390 | int count = 0; | 1391 | int count = 0; |
1391 | int result; | 1392 | int result; |
@@ -1398,7 +1399,8 @@ int playlist_insert_directory(char *dirname, int position, bool queue) | |||
1398 | 1399 | ||
1399 | display_playlist_count(count, count_str); | 1400 | display_playlist_count(count, count_str); |
1400 | 1401 | ||
1401 | result = add_directory_to_playlist(dirname, &position, queue, &count); | 1402 | result = add_directory_to_playlist(dirname, &position, queue, &count, |
1403 | recurse); | ||
1402 | fsync(playlist.control_fd); | 1404 | fsync(playlist.control_fd); |
1403 | 1405 | ||
1404 | display_playlist_count(count, count_str); | 1406 | display_playlist_count(count, count_str); |
diff --git a/apps/playlist.h b/apps/playlist.h index a5318cd202..0b30e7a3e1 100644 --- a/apps/playlist.h +++ b/apps/playlist.h | |||
@@ -51,7 +51,8 @@ int playlist_create(char *dir, char *file); | |||
51 | int playlist_resume(void); | 51 | int playlist_resume(void); |
52 | int playlist_add(char *filename); | 52 | int playlist_add(char *filename); |
53 | int playlist_insert_track(char *filename, int position, bool queue); | 53 | int playlist_insert_track(char *filename, int position, bool queue); |
54 | int playlist_insert_directory(char *dirname, int position, bool queue); | 54 | int playlist_insert_directory(char *dirname, int position, bool queue, |
55 | bool recurse); | ||
55 | int playlist_insert_playlist(char *filename, int position, bool queue); | 56 | int playlist_insert_playlist(char *filename, int position, bool queue); |
56 | int playlist_delete(int index); | 57 | int playlist_delete(int index); |
57 | int playlist_shuffle(int random_seed, int start_index); | 58 | int playlist_shuffle(int random_seed, int start_index); |
diff --git a/apps/playlist_menu.c b/apps/playlist_menu.c index 3508240efe..4223e3cf72 100644 --- a/apps/playlist_menu.c +++ b/apps/playlist_menu.c | |||
@@ -49,8 +49,13 @@ static bool save_playlist(void) | |||
49 | 49 | ||
50 | static bool recurse_directory(void) | 50 | static bool recurse_directory(void) |
51 | { | 51 | { |
52 | return (set_bool( str(LANG_RECURSE_DIRECTORY), | 52 | char* names[] = { str(LANG_OFF), |
53 | &global_settings.recursive_dir_insert)); | 53 | str(LANG_ON), |
54 | str(LANG_RESUME_SETTING_ASK) }; | ||
55 | |||
56 | return set_option( str(LANG_RECURSE_DIRECTORY), | ||
57 | &global_settings.recursive_dir_insert, INT, names, 3, | ||
58 | NULL ); | ||
54 | } | 59 | } |
55 | 60 | ||
56 | bool playlist_menu(void) | 61 | bool playlist_menu(void) |
diff --git a/apps/settings.c b/apps/settings.c index e5fbfb5e06..90775edab3 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -351,7 +351,7 @@ int settings_save( void ) | |||
351 | config_block[0x1b] = (unsigned char) | 351 | config_block[0x1b] = (unsigned char) |
352 | (((global_settings.browse_current & 1)) | | 352 | (((global_settings.browse_current & 1)) | |
353 | ((global_settings.play_selected & 1) << 1) | | 353 | ((global_settings.play_selected & 1) << 1) | |
354 | ((global_settings.recursive_dir_insert & 1) << 2)); | 354 | ((global_settings.recursive_dir_insert & 3) << 2)); |
355 | 355 | ||
356 | config_block[0x1c] = (unsigned char)global_settings.peak_meter_hold | | 356 | config_block[0x1c] = (unsigned char)global_settings.peak_meter_hold | |
357 | (global_settings.rec_editable?0x80:0); | 357 | (global_settings.rec_editable?0x80:0); |
@@ -646,7 +646,7 @@ void settings_load(void) | |||
646 | global_settings.browse_current = (config_block[0x1b]) & 1; | 646 | global_settings.browse_current = (config_block[0x1b]) & 1; |
647 | global_settings.play_selected = (config_block[0x1b] >> 1) & 1; | 647 | global_settings.play_selected = (config_block[0x1b] >> 1) & 1; |
648 | global_settings.recursive_dir_insert = | 648 | global_settings.recursive_dir_insert = |
649 | (config_block[0x1b] >> 2) & 1; | 649 | (config_block[0x1b] >> 2) & 3; |
650 | } | 650 | } |
651 | 651 | ||
652 | if (config_block[0x1c] != 0xFF) { | 652 | if (config_block[0x1c] != 0xFF) { |
@@ -1079,8 +1079,11 @@ bool settings_load_config(char* file) | |||
1079 | else if (!strcasecmp(name, "max files in playlist")) | 1079 | else if (!strcasecmp(name, "max files in playlist")) |
1080 | set_cfg_int(&global_settings.max_files_in_playlist, value, | 1080 | set_cfg_int(&global_settings.max_files_in_playlist, value, |
1081 | 1000, 20000); | 1081 | 1000, 20000); |
1082 | else if (!strcasecmp(name, "recursive directory insert")) | 1082 | else if (!strcasecmp(name, "recursive directory insert")) { |
1083 | set_cfg_bool(&global_settings.recursive_dir_insert, value); | 1083 | static char* options[] = {"off", "on", "ask"}; |
1084 | set_cfg_option(&global_settings.recursive_dir_insert, value, | ||
1085 | options, 3); | ||
1086 | } | ||
1084 | } | 1087 | } |
1085 | 1088 | ||
1086 | close(fd); | 1089 | close(fd); |
@@ -1369,8 +1372,11 @@ bool settings_save_config(void) | |||
1369 | fprintf(fd, "max files in playlist: %d\r\n", | 1372 | fprintf(fd, "max files in playlist: %d\r\n", |
1370 | global_settings.max_files_in_playlist); | 1373 | global_settings.max_files_in_playlist); |
1371 | 1374 | ||
1372 | fprintf(fd, "recursive directory insert: %s\r\n", | 1375 | { |
1373 | boolopt[global_settings.recursive_dir_insert]); | 1376 | static char* options[] = {"off", "on", "ask"}; |
1377 | fprintf(fd, "recursive directory insert: %s\r\n", | ||
1378 | options[global_settings.recursive_dir_insert]); | ||
1379 | } | ||
1374 | 1380 | ||
1375 | close(fd); | 1381 | close(fd); |
1376 | 1382 | ||
@@ -1459,7 +1465,7 @@ void settings_reset(void) { | |||
1459 | global_settings.max_files_in_dir = 400; | 1465 | global_settings.max_files_in_dir = 400; |
1460 | global_settings.max_files_in_playlist = 10000; | 1466 | global_settings.max_files_in_playlist = 10000; |
1461 | global_settings.show_icons = true; | 1467 | global_settings.show_icons = true; |
1462 | global_settings.recursive_dir_insert = false; | 1468 | global_settings.recursive_dir_insert = RECURSE_OFF; |
1463 | } | 1469 | } |
1464 | 1470 | ||
1465 | bool set_bool(char* string, bool* variable ) | 1471 | bool set_bool(char* string, bool* variable ) |
diff --git a/apps/settings.h b/apps/settings.h index 25efd65e9a..e3eff50448 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -166,7 +166,7 @@ struct user_settings | |||
166 | int max_files_in_dir; /* Max entries in directory (file browser) */ | 166 | int max_files_in_dir; /* Max entries in directory (file browser) */ |
167 | int max_files_in_playlist; /* Max entries in playlist */ | 167 | int max_files_in_playlist; /* Max entries in playlist */ |
168 | bool show_icons; /* 0=hide 1=show */ | 168 | bool show_icons; /* 0=hide 1=show */ |
169 | bool recursive_dir_insert;/* should directories be inserted recursively */ | 169 | int recursive_dir_insert; /* should directories be inserted recursively */ |
170 | }; | 170 | }; |
171 | 171 | ||
172 | enum optiontype { INT, BOOL }; | 172 | enum optiontype { INT, BOOL }; |
@@ -223,4 +223,7 @@ enum { REPEAT_OFF, REPEAT_ALL, REPEAT_ONE, NUM_REPEAT_MODES }; | |||
223 | /* dir filter options */ | 223 | /* dir filter options */ |
224 | enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, NUM_FILTER_MODES }; | 224 | enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, NUM_FILTER_MODES }; |
225 | 225 | ||
226 | /* recursive dir insert options */ | ||
227 | enum { RECURSE_OFF, RECURSE_ON, RECURSE_ASK }; | ||
228 | |||
226 | #endif /* __SETTINGS_H__ */ | 229 | #endif /* __SETTINGS_H__ */ |