diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2003-01-29 13:20:22 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2003-01-29 13:20:22 +0000 |
| commit | efb165f65c860356d91b67e26ac1a5b8d4a2bd4d (patch) | |
| tree | d13e539fa4028bf99594d6e21530e47c23bb8797 /apps/tree.c | |
| parent | 38bc30b0d62eadb904c320f7c0f5f2086b170ccc (diff) | |
| download | rockbox-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/tree.c')
| -rw-r--r-- | apps/tree.c | 101 |
1 files changed, 101 insertions, 0 deletions
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; +} + |