summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/lang/english.lang9
-rw-r--r--apps/onplay.c40
-rw-r--r--apps/playlist.c14
-rw-r--r--apps/playlist.h3
-rw-r--r--apps/playlist_menu.c9
-rw-r--r--apps/settings.c20
-rw-r--r--apps/settings.h5
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
1651id: LANG_QUEUE_FIRST 1651id: LANG_QUEUE_FIRST
1652desc: in onplay menu. queue a track/playlist into dynamic playlist. 1652desc: in onplay menu. queue a track/playlist into dynamic playlist.
1653eng: "Queue first" 1653eng: "Queue next"
1654new: 1654new:
1655 1655
1656id: LANG_INSERT_FIRST 1656id: LANG_INSERT_FIRST
1657desc: in onplay menu. insert a track/playlist into dynamic playlist. 1657desc: in onplay menu. insert a track/playlist into dynamic playlist.
1658eng: "Insert first" 1658eng: "Insert next"
1659new: 1659new:
1660 1660
1661id: LANG_SAVE_DYNAMIC_PLAYLIST 1661id: LANG_SAVE_DYNAMIC_PLAYLIST
@@ -1722,3 +1722,8 @@ id: LANG_RECURSE_DIRECTORY
1722desc: In playlist menu 1722desc: In playlist menu
1723eng: "Recursively Insert Directories" 1723eng: "Recursively Insert Directories"
1724new: 1724new:
1725
1726id: LANG_RECURSE_DIRECTORY_QUESTION
1727desc: Asked from onplay screen
1728eng: "Recursively?"
1729new:
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);
131static int add_track_to_playlist(char *filename, int position, bool queue, 131static int add_track_to_playlist(char *filename, int position, bool queue,
132 int seek_pos); 132 int seek_pos);
133static int add_directory_to_playlist(char *dirname, int *position, bool queue, 133static int add_directory_to_playlist(char *dirname, int *position, bool queue,
134 int *count); 134 int *count, bool recurse);
135static int remove_track_from_playlist(int position, bool write); 135static int remove_track_from_playlist(int position, bool write);
136static int randomise_playlist(unsigned int seed, bool start_current, 136static 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 */
404static int add_directory_to_playlist(char *dirname, int *position, bool queue, 404static 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 */
1388int playlist_insert_directory(char *dirname, int position, bool queue) 1388int 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);
51int playlist_resume(void); 51int playlist_resume(void);
52int playlist_add(char *filename); 52int playlist_add(char *filename);
53int playlist_insert_track(char *filename, int position, bool queue); 53int playlist_insert_track(char *filename, int position, bool queue);
54int playlist_insert_directory(char *dirname, int position, bool queue); 54int playlist_insert_directory(char *dirname, int position, bool queue,
55 bool recurse);
55int playlist_insert_playlist(char *filename, int position, bool queue); 56int playlist_insert_playlist(char *filename, int position, bool queue);
56int playlist_delete(int index); 57int playlist_delete(int index);
57int playlist_shuffle(int random_seed, int start_index); 58int 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
50static bool recurse_directory(void) 50static 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
56bool playlist_menu(void) 61bool 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
1465bool set_bool(char* string, bool* variable ) 1471bool 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
172enum optiontype { INT, BOOL }; 172enum 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 */
224enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, NUM_FILTER_MODES }; 224enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, NUM_FILTER_MODES };
225 225
226/* recursive dir insert options */
227enum { RECURSE_OFF, RECURSE_ON, RECURSE_ASK };
228
226#endif /* __SETTINGS_H__ */ 229#endif /* __SETTINGS_H__ */