Added "Ask" option to recursive dir insert which, if enabled, will ask users whether they want to recursively insert selected dir. Also, renamed "Insert first" and "Queue first" to "Insert next" and "Queue next" respectively.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3799 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Hardeep Sidhu 2003-07-02 15:54:44 +00:00
parent 8dd3a822c7
commit 11e7ad50a0
7 changed files with 80 additions and 20 deletions

View file

@ -1650,12 +1650,12 @@ new:
id: LANG_QUEUE_FIRST
desc: in onplay menu. queue a track/playlist into dynamic playlist.
eng: "Queue first"
eng: "Queue next"
new:
id: LANG_INSERT_FIRST
desc: in onplay menu. insert a track/playlist into dynamic playlist.
eng: "Insert first"
eng: "Insert next"
new:
id: LANG_SAVE_DYNAMIC_PLAYLIST
@ -1722,3 +1722,8 @@ id: LANG_RECURSE_DIRECTORY
desc: In playlist menu
eng: "Recursively Insert Directories"
new:
id: LANG_RECURSE_DIRECTORY_QUESTION
desc: Asked from onplay screen
eng: "Recursively?"
new:

View file

@ -62,7 +62,45 @@ static bool add_to_playlist(int position, bool queue)
if (selected_file_attr & TREE_ATTR_MPA)
playlist_insert_track(selected_file, position, queue);
else if (selected_file_attr & ATTR_DIRECTORY)
playlist_insert_directory(selected_file, position, queue);
{
bool recurse = false;
if (global_settings.recursive_dir_insert != RECURSE_ASK)
recurse = (bool)global_settings.recursive_dir_insert;
else
{
/* Ask if user wants to recurse directory */
bool exit = false;
lcd_clear_display();
lcd_puts_scroll(0,0,str(LANG_RECURSE_DIRECTORY_QUESTION));
lcd_puts_scroll(0,1,selected_file);
#ifdef HAVE_LCD_BITMAP
lcd_puts(0,3,str(LANG_CONFIRM_WITH_PLAY_RECORDER));
lcd_puts(0,4,str(LANG_CANCEL_WITH_ANY_RECORDER));
#endif
lcd_update();
while (!exit) {
int btn = button_get(true);
switch (btn) {
case BUTTON_PLAY:
recurse = true;
exit = true;
break;
default:
/* ignore button releases */
if (!(btn & BUTTON_REL))
exit = true;
break;
}
}
}
playlist_insert_directory(selected_file, position, queue, recurse);
}
else if (selected_file_attr & TREE_ATTR_M3U)
playlist_insert_playlist(selected_file, position, queue);

View file

@ -131,7 +131,7 @@ static int add_indices_to_playlist(void);
static int add_track_to_playlist(char *filename, int position, bool queue,
int seek_pos);
static int add_directory_to_playlist(char *dirname, int *position, bool queue,
int *count);
int *count, bool recurse);
static int remove_track_from_playlist(int position, bool write);
static int randomise_playlist(unsigned int seed, bool start_current,
bool write);
@ -402,7 +402,7 @@ static int add_track_to_playlist(char *filename, int position, bool queue,
* Insert directory into playlist. May be called recursively.
*/
static int add_directory_to_playlist(char *dirname, int *position, bool queue,
int *count)
int *count, bool recurse)
{
char buf[MAX_PATH+1];
char *count_str;
@ -446,12 +446,12 @@ static int add_directory_to_playlist(char *dirname, int *position, bool queue,
if (files[i].attr & ATTR_DIRECTORY)
{
if (global_settings.recursive_dir_insert)
if (recurse)
{
/* recursively add directories */
snprintf(buf, sizeof(buf), "%s/%s", dirname, files[i].name);
result = add_directory_to_playlist(buf, position, queue,
count);
count, recurse);
if (result < 0)
break;
@ -1385,7 +1385,8 @@ int playlist_insert_track(char *filename, int position, bool queue)
/*
* Insert all tracks from specified directory into playlist.
*/
int playlist_insert_directory(char *dirname, int position, bool queue)
int playlist_insert_directory(char *dirname, int position, bool queue,
bool recurse)
{
int count = 0;
int result;
@ -1398,7 +1399,8 @@ int playlist_insert_directory(char *dirname, int position, bool queue)
display_playlist_count(count, count_str);
result = add_directory_to_playlist(dirname, &position, queue, &count);
result = add_directory_to_playlist(dirname, &position, queue, &count,
recurse);
fsync(playlist.control_fd);
display_playlist_count(count, count_str);

View file

@ -51,7 +51,8 @@ int playlist_create(char *dir, char *file);
int playlist_resume(void);
int playlist_add(char *filename);
int playlist_insert_track(char *filename, int position, bool queue);
int playlist_insert_directory(char *dirname, int position, bool queue);
int playlist_insert_directory(char *dirname, int position, bool queue,
bool recurse);
int playlist_insert_playlist(char *filename, int position, bool queue);
int playlist_delete(int index);
int playlist_shuffle(int random_seed, int start_index);

View file

@ -49,8 +49,13 @@ static bool save_playlist(void)
static bool recurse_directory(void)
{
return (set_bool( str(LANG_RECURSE_DIRECTORY),
&global_settings.recursive_dir_insert));
char* names[] = { str(LANG_OFF),
str(LANG_ON),
str(LANG_RESUME_SETTING_ASK) };
return set_option( str(LANG_RECURSE_DIRECTORY),
&global_settings.recursive_dir_insert, INT, names, 3,
NULL );
}
bool playlist_menu(void)

View file

@ -351,7 +351,7 @@ int settings_save( void )
config_block[0x1b] = (unsigned char)
(((global_settings.browse_current & 1)) |
((global_settings.play_selected & 1) << 1) |
((global_settings.recursive_dir_insert & 1) << 2));
((global_settings.recursive_dir_insert & 3) << 2));
config_block[0x1c] = (unsigned char)global_settings.peak_meter_hold |
(global_settings.rec_editable?0x80:0);
@ -646,7 +646,7 @@ void settings_load(void)
global_settings.browse_current = (config_block[0x1b]) & 1;
global_settings.play_selected = (config_block[0x1b] >> 1) & 1;
global_settings.recursive_dir_insert =
(config_block[0x1b] >> 2) & 1;
(config_block[0x1b] >> 2) & 3;
}
if (config_block[0x1c] != 0xFF) {
@ -1079,8 +1079,11 @@ bool settings_load_config(char* file)
else if (!strcasecmp(name, "max files in playlist"))
set_cfg_int(&global_settings.max_files_in_playlist, value,
1000, 20000);
else if (!strcasecmp(name, "recursive directory insert"))
set_cfg_bool(&global_settings.recursive_dir_insert, value);
else if (!strcasecmp(name, "recursive directory insert")) {
static char* options[] = {"off", "on", "ask"};
set_cfg_option(&global_settings.recursive_dir_insert, value,
options, 3);
}
}
close(fd);
@ -1369,8 +1372,11 @@ bool settings_save_config(void)
fprintf(fd, "max files in playlist: %d\r\n",
global_settings.max_files_in_playlist);
fprintf(fd, "recursive directory insert: %s\r\n",
boolopt[global_settings.recursive_dir_insert]);
{
static char* options[] = {"off", "on", "ask"};
fprintf(fd, "recursive directory insert: %s\r\n",
options[global_settings.recursive_dir_insert]);
}
close(fd);
@ -1459,7 +1465,7 @@ void settings_reset(void) {
global_settings.max_files_in_dir = 400;
global_settings.max_files_in_playlist = 10000;
global_settings.show_icons = true;
global_settings.recursive_dir_insert = false;
global_settings.recursive_dir_insert = RECURSE_OFF;
}
bool set_bool(char* string, bool* variable )

View file

@ -166,7 +166,7 @@ struct user_settings
int max_files_in_dir; /* Max entries in directory (file browser) */
int max_files_in_playlist; /* Max entries in playlist */
bool show_icons; /* 0=hide 1=show */
bool recursive_dir_insert;/* should directories be inserted recursively */
int recursive_dir_insert; /* should directories be inserted recursively */
};
enum optiontype { INT, BOOL };
@ -223,4 +223,7 @@ enum { REPEAT_OFF, REPEAT_ALL, REPEAT_ONE, NUM_REPEAT_MODES };
/* dir filter options */
enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, NUM_FILTER_MODES };
/* recursive dir insert options */
enum { RECURSE_OFF, RECURSE_ON, RECURSE_ASK };
#endif /* __SETTINGS_H__ */