summaryrefslogtreecommitdiff
path: root/apps/tree.c
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/tree.c
parent38bc30b0d62eadb904c320f7c0f5f2086b170ccc (diff)
downloadrockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.tar.gz
rockbox-efb165f65c860356d91b67e26ac1a5b8d4a2bd4d.zip
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.c101
1 files changed, 101 insertions, 0 deletions
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)
1419 1419
1420 return false; 1420 return false;
1421} 1421}
1422
1423static int plsize = 0;
1424static bool add_dir(char* dirname, int fd)
1425{
1426 bool abort = false;
1427 char buf[MAX_PATH/2]; /* saving a little stack... */
1428
1429 DEBUGF("add_dir(%s)\n",dirname);
1430
1431 /* check for user abort */
1432#ifdef HAVE_PLAYER_KEYPAD
1433 if (button_get(false) == BUTTON_STOP)
1434#else
1435 if (button_get(false) == BUTTON_OFF)
1436#endif
1437 return true;
1438
1439 DIR* dir = opendir(dirname);
1440 if(!dir)
1441 return true;
1442
1443 while (true) {
1444 struct dirent *entry;
1445
1446 entry = readdir(dir);
1447 if (!entry)
1448 break;
1449 if (entry->attribute & ATTR_DIRECTORY) {
1450 if (!strcmp(entry->d_name, ".") ||
1451 !strcmp(entry->d_name, ".."))
1452 continue;
1453 snprintf(buf, sizeof buf, "%s/%s", dirname, entry->d_name);
1454 if (add_dir(buf,fd)) {
1455 abort = true;
1456 break;
1457 }
1458 }
1459 else {
1460 int x = strlen(entry->d_name);
1461 if ((!strcasecmp(&entry->d_name[x-4], ".mp3")) ||
1462 (!strcasecmp(&entry->d_name[x-4], ".mp2")) ||
1463 (!strcasecmp(&entry->d_name[x-4], ".mpa")))
1464 {
1465 DEBUGF("adding %s\n",entry->d_name);
1466 write(fd, dirname, strlen(dirname));
1467 write(fd, "/", 1);
1468 write(fd, entry->d_name, x);
1469 write(fd, "\n", 1);
1470
1471 plsize++;
1472 snprintf(buf, sizeof buf, "%d", plsize);
1473#ifdef HAVE_LCD_BITMAP
1474 lcd_puts(0,4,buf);
1475 lcd_update();
1476#else
1477 x = 10;
1478 if (plsize > 999)
1479 x=7;
1480 else {
1481 if (plsize > 99)
1482 x=8;
1483 else {
1484 if (plsize > 9)
1485 x=9;
1486 }
1487 }
1488 lcd_puts(x,0,buf);
1489#endif
1490 }
1491 }
1492 }
1493 closedir(dir);
1494
1495 return abort;
1496}
1497
1498bool create_playlist(void)
1499{
1500 int fd;
1501 char filename[MAX_PATH];
1502
1503 snprintf(filename, sizeof filename, "%s.m3u",
1504 currdir[1] ? currdir : "/root");
1505
1506 lcd_clear_display();
1507 lcd_puts(0,0,str(LANG_CREATING));
1508 lcd_puts_scroll(0,1,filename);
1509 lcd_update();
1510
1511 fd = creat(filename,0);
1512 if (!fd)
1513 return false;
1514
1515 plsize = 0;
1516 add_dir(currdir[1] ? currdir : "/", fd);
1517 close(fd);
1518 sleep(HZ);
1519
1520 return false;
1521}
1522