diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/lang/english.lang | 10 | ||||
-rw-r--r-- | apps/main_menu.c | 9 | ||||
-rw-r--r-- | apps/tree.c | 101 | ||||
-rw-r--r-- | apps/tree.h | 1 |
4 files changed, 117 insertions, 4 deletions
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 | |||
1316 | desc: Shown key functions in alarm menu (for the RTC alarm mod). | 1316 | desc: Shown key functions in alarm menu (for the RTC alarm mod). |
1317 | eng: "PLAY=Set OFF=Cancel" | 1317 | eng: "PLAY=Set OFF=Cancel" |
1318 | new: | 1318 | new: |
1319 | |||
1320 | id: LANG_CREATE_PLAYLIST | ||
1321 | desc: Menu option for creating a playlist | ||
1322 | eng: "Create Playlist" | ||
1323 | new: | ||
1324 | |||
1325 | id: LANG_CREATING | ||
1326 | desc: Screen feedback during playlist creation | ||
1327 | eng: "Creating" | ||
1328 | 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) | |||
257 | struct menu_items items[] = { | 257 | struct menu_items items[] = { |
258 | { str(LANG_SOUND_SETTINGS), sound_menu }, | 258 | { str(LANG_SOUND_SETTINGS), sound_menu }, |
259 | { str(LANG_GENERAL_SETTINGS), settings_menu }, | 259 | { str(LANG_GENERAL_SETTINGS), settings_menu }, |
260 | #ifdef HAVE_MAS3587F | ||
261 | { str(LANG_RECORDING), recording_screen }, | ||
262 | { str(LANG_RECORDING_SETTINGS), recording_menu }, | ||
263 | #endif | ||
264 | { str(LANG_CREATE_PLAYLIST), create_playlist }, | ||
260 | { str(LANG_SLEEP_TIMER), sleeptimer_screen }, | 265 | { str(LANG_SLEEP_TIMER), sleeptimer_screen }, |
261 | #ifdef HAVE_ALARM_MOD | 266 | #ifdef HAVE_ALARM_MOD |
262 | { str(LANG_ALARM_MOD_ALARM_MENU), alarm_screen }, | 267 | { str(LANG_ALARM_MOD_ALARM_MENU), alarm_screen }, |
263 | #endif | 268 | #endif |
264 | #ifdef HAVE_MAS3587F | ||
265 | { str(LANG_RECORDING_SETTINGS), recording_menu }, | ||
266 | { str(LANG_RECORDING), recording_screen }, | ||
267 | #endif | ||
268 | #ifdef HAVE_LCD_BITMAP | 269 | #ifdef HAVE_LCD_BITMAP |
269 | #ifdef USE_GAMES | 270 | #ifdef USE_GAMES |
270 | { str(LANG_GAMES), games_menu }, | 271 | { 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) | |||
1419 | 1419 | ||
1420 | return false; | 1420 | return false; |
1421 | } | 1421 | } |
1422 | |||
1423 | static int plsize = 0; | ||
1424 | static 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 | |||
1498 | bool 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 | |||
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 @@ | |||
24 | void browse_root(void); | 24 | void browse_root(void); |
25 | void set_current_file(char *path); | 25 | void set_current_file(char *path); |
26 | bool dirbrowse(char *root); | 26 | bool dirbrowse(char *root); |
27 | bool create_playlist(void); | ||
27 | 28 | ||
28 | #endif | 29 | #endif |