From efb165f65c860356d91b67e26ac1a5b8d4a2bd4d Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Wed, 29 Jan 2003 13:20:22 +0000 Subject: Added basic playlist creation. Creates .m3u in the parent directory, containing all mp3/mp2/mpa files found recursively. The process can be aborted with OFF or STOP. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3185 a1c6a512-1295-4272-9138-f99709370657 --- apps/lang/english.lang | 10 +++++ apps/main_menu.c | 9 +++-- apps/tree.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ apps/tree.h | 1 + 4 files changed, 117 insertions(+), 4 deletions(-) (limited to 'apps') diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 9e80f95cd2..14e3172269 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -1316,3 +1316,13 @@ id: LANG_ALARM_MOD_KEYS desc: Shown key functions in alarm menu (for the RTC alarm mod). eng: "PLAY=Set OFF=Cancel" new: + +id: LANG_CREATE_PLAYLIST +desc: Menu option for creating a playlist +eng: "Create Playlist" +new: + +id: LANG_CREATING +desc: Screen feedback during playlist creation +eng: "Creating" +new: diff --git a/apps/main_menu.c b/apps/main_menu.c index 03406b4e8c..0b71d1d98a 100644 --- a/apps/main_menu.c +++ b/apps/main_menu.c @@ -257,14 +257,15 @@ bool main_menu(void) struct menu_items items[] = { { str(LANG_SOUND_SETTINGS), sound_menu }, { str(LANG_GENERAL_SETTINGS), settings_menu }, +#ifdef HAVE_MAS3587F + { str(LANG_RECORDING), recording_screen }, + { str(LANG_RECORDING_SETTINGS), recording_menu }, +#endif + { str(LANG_CREATE_PLAYLIST), create_playlist }, { str(LANG_SLEEP_TIMER), sleeptimer_screen }, #ifdef HAVE_ALARM_MOD { str(LANG_ALARM_MOD_ALARM_MENU), alarm_screen }, #endif -#ifdef HAVE_MAS3587F - { str(LANG_RECORDING_SETTINGS), recording_menu }, - { str(LANG_RECORDING), recording_screen }, -#endif #ifdef HAVE_LCD_BITMAP #ifdef USE_GAMES { str(LANG_GAMES), games_menu }, diff --git a/apps/tree.c b/apps/tree.c index 4923b970b8..d408e65eb8 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -1419,3 +1419,104 @@ bool dirbrowse(char *root) return false; } + +static int plsize = 0; +static bool add_dir(char* dirname, int fd) +{ + bool abort = false; + char buf[MAX_PATH/2]; /* saving a little stack... */ + + DEBUGF("add_dir(%s)\n",dirname); + + /* check for user abort */ +#ifdef HAVE_PLAYER_KEYPAD + if (button_get(false) == BUTTON_STOP) +#else + if (button_get(false) == BUTTON_OFF) +#endif + return true; + + DIR* dir = opendir(dirname); + if(!dir) + return true; + + while (true) { + struct dirent *entry; + + entry = readdir(dir); + if (!entry) + break; + if (entry->attribute & ATTR_DIRECTORY) { + if (!strcmp(entry->d_name, ".") || + !strcmp(entry->d_name, "..")) + continue; + snprintf(buf, sizeof buf, "%s/%s", dirname, entry->d_name); + if (add_dir(buf,fd)) { + abort = true; + break; + } + } + else { + int x = strlen(entry->d_name); + if ((!strcasecmp(&entry->d_name[x-4], ".mp3")) || + (!strcasecmp(&entry->d_name[x-4], ".mp2")) || + (!strcasecmp(&entry->d_name[x-4], ".mpa"))) + { + DEBUGF("adding %s\n",entry->d_name); + write(fd, dirname, strlen(dirname)); + write(fd, "/", 1); + write(fd, entry->d_name, x); + write(fd, "\n", 1); + + plsize++; + snprintf(buf, sizeof buf, "%d", plsize); +#ifdef HAVE_LCD_BITMAP + lcd_puts(0,4,buf); + lcd_update(); +#else + x = 10; + if (plsize > 999) + x=7; + else { + if (plsize > 99) + x=8; + else { + if (plsize > 9) + x=9; + } + } + lcd_puts(x,0,buf); +#endif + } + } + } + closedir(dir); + + return abort; +} + +bool create_playlist(void) +{ + int fd; + char filename[MAX_PATH]; + + snprintf(filename, sizeof filename, "%s.m3u", + currdir[1] ? currdir : "/root"); + + lcd_clear_display(); + lcd_puts(0,0,str(LANG_CREATING)); + lcd_puts_scroll(0,1,filename); + lcd_update(); + + fd = creat(filename,0); + if (!fd) + return false; + + plsize = 0; + add_dir(currdir[1] ? currdir : "/", fd); + close(fd); + sleep(HZ); + + return false; +} + diff --git a/apps/tree.h b/apps/tree.h index 25e653914c..6b8879001f 100644 --- a/apps/tree.h +++ b/apps/tree.h @@ -24,5 +24,6 @@ void browse_root(void); void set_current_file(char *path); bool dirbrowse(char *root); +bool create_playlist(void); #endif -- cgit v1.2.3