summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2003-01-29 13:20:22 +0000
committerBjörn Stenberg <bjorn@haxx.se>2003-01-29 13:20:22 +0000
commitefb165f65c860356d91b67e26ac1a5b8d4a2bd4d (patch)
treed13e539fa4028bf99594d6e21530e47c23bb8797 /apps
parent38bc30b0d62eadb904c320f7c0f5f2086b170ccc (diff)
downloadrockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.zip
rockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.tar.gz
rockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.tar.bz2
rockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.tar.xz
Added basic playlist creation. Creates <dirname>.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
Diffstat (limited to 'apps')
-rw-r--r--apps/lang/english.lang10
-rw-r--r--apps/main_menu.c9
-rw-r--r--apps/tree.c101
-rw-r--r--apps/tree.h1
4 files changed, 117 insertions, 4 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 9e80f95..14e3172 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 03406b4..0b71d1d 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 4923b97..d408e65 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 25e6539..6b88790 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