forked from len0rd/rockbox
Renamed "wps.config" to "default.wps".
Added *.wps loading from dir browser. Added ugly 'wps' icon. :-) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2131 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
52a87c7ce7
commit
1a682bedad
5 changed files with 163 additions and 130 deletions
|
|
@ -64,6 +64,8 @@ unsigned char bitmap_icons_6x8[LastIcon][6] =
|
|||
{ 0x00, 0x1c, 0x3e, 0x3e, 0x3e, 0x1c },
|
||||
/* Cursor / Marker */
|
||||
{ 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00 },
|
||||
/* WPS file */
|
||||
{ 0x03, 0x3a, 0x9b, 0xe0, 0x20, 0x00 },
|
||||
};
|
||||
|
||||
static unsigned char bitmap_icon_7x8[][7] =
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
enum icons_6x8 {
|
||||
Box_Filled, Box_Empty, Slider_Horizontal, File,
|
||||
Folder, Directory, Playlist, Repeat,
|
||||
Selected, Cursor, LastIcon
|
||||
Selected, Cursor, Wps, LastIcon
|
||||
};
|
||||
|
||||
extern unsigned char bitmap_icons_6x8[LastIcon][6];
|
||||
|
|
|
|||
46
apps/tree.c
46
apps/tree.c
|
|
@ -37,6 +37,7 @@
|
|||
#include "playlist.h"
|
||||
#include "menu.h"
|
||||
#include "wps.h"
|
||||
#include "wps-display.h"
|
||||
#include "settings.h"
|
||||
#include "status.h"
|
||||
#include "debug.h"
|
||||
|
|
@ -297,15 +298,17 @@ static int showdir(char *path, int start)
|
|||
icon_type = Playlist;
|
||||
else if ( dircache[i].attr & TREE_ATTR_MPA )
|
||||
icon_type = File;
|
||||
else if (!strcasecmp(&dircache[i].name[len-4], ".wps"))
|
||||
icon_type = Wps;
|
||||
else
|
||||
icon_type = 0;
|
||||
|
||||
if (icon_type)
|
||||
lcd_bitmap(bitmap_icons_6x8[icon_type],
|
||||
CURSOR_X * 6 + CURSOR_WIDTH, MARGIN_Y+(i-start)*line_height, 6, 8, true);
|
||||
CURSOR_X * 6 + CURSOR_WIDTH,
|
||||
MARGIN_Y+(i-start)*line_height, 6, 8, true);
|
||||
#endif
|
||||
|
||||
|
||||
/* if MP3 filter is on, cut off the extension */
|
||||
if (global_settings.mp3filter &&
|
||||
(dircache[i].attr & (TREE_ATTR_M3U|TREE_ATTR_MPA)))
|
||||
|
|
@ -466,6 +469,8 @@ bool dirbrowse(char *root)
|
|||
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
|
||||
|
||||
while(1) {
|
||||
struct entry* file = &dircache[dircursor+start];
|
||||
|
||||
bool restore = false;
|
||||
|
||||
button = button_get_w_tmo(HZ/5);
|
||||
|
|
@ -519,14 +524,12 @@ bool dirbrowse(char *root)
|
|||
if ( !numentries )
|
||||
break;
|
||||
if ((currdir[0]=='/') && (currdir[1]==0)) {
|
||||
snprintf(buf,sizeof(buf),"%s%s",currdir,
|
||||
dircache[dircursor+start].name);
|
||||
snprintf(buf,sizeof(buf),"%s%s",currdir, file->name);
|
||||
} else {
|
||||
snprintf(buf,sizeof(buf),"%s/%s",currdir,
|
||||
dircache[dircursor+start].name);
|
||||
snprintf(buf,sizeof(buf),"%s/%s",currdir, file->name);
|
||||
}
|
||||
|
||||
if (dircache[dircursor+start].attr & ATTR_DIRECTORY) {
|
||||
if (file->attr & ATTR_DIRECTORY) {
|
||||
memcpy(currdir,buf,sizeof(currdir));
|
||||
if ( dirlevel < MAX_DIR_LEVELS ) {
|
||||
dirpos[dirlevel] = start;
|
||||
|
|
@ -538,21 +541,16 @@ bool dirbrowse(char *root)
|
|||
} else {
|
||||
int seed = current_tick;
|
||||
lcd_stop_scroll();
|
||||
if(dircache[dircursor+start].attr & TREE_ATTR_M3U )
|
||||
if (file->attr & TREE_ATTR_M3U )
|
||||
{
|
||||
if ( global_settings.resume )
|
||||
snprintf(global_settings.resume_file,
|
||||
MAX_PATH, "%s/%s",
|
||||
currdir,
|
||||
dircache[dircursor+start].name);
|
||||
play_list(currdir,
|
||||
dircache[dircursor+start].name,
|
||||
0,
|
||||
false,
|
||||
0, seed );
|
||||
currdir, file->name);
|
||||
play_list(currdir, file->name, 0, false, 0, seed );
|
||||
start_index = 0;
|
||||
}
|
||||
else if (dircache[dircursor+start].attr & TREE_ATTR_MPA ) {
|
||||
else if (file->attr & TREE_ATTR_MPA ) {
|
||||
if ( global_settings.resume )
|
||||
strncpy(global_settings.resume_file,
|
||||
currdir, MAX_PATH);
|
||||
|
|
@ -563,9 +561,19 @@ bool dirbrowse(char *root)
|
|||
start_index = play_list(currdir, NULL,
|
||||
start_index, false, 0, seed);
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
else {
|
||||
/* wps config file? */
|
||||
int len = strlen(file->name);
|
||||
if (!strcasecmp(&file->name[len-4], ".wps")) {
|
||||
snprintf(buf, sizeof buf, "%s/%s",
|
||||
currdir, file->name);
|
||||
wps_load_custom(buf);
|
||||
restore = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if ( global_settings.resume ) {
|
||||
/* the resume_index must always be the index in the
|
||||
shuffled list in case shuffle is enabled */
|
||||
|
|
|
|||
|
|
@ -46,9 +46,14 @@
|
|||
#include "ajf.h"
|
||||
#endif
|
||||
|
||||
#define WPS_CONFIG ROCKBOX_DIR "/wps.config"
|
||||
#define WPS_CONFIG ROCKBOX_DIR "/default.wps"
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
#define MAX_LINES 10
|
||||
#else
|
||||
#define MAX_LINES 2
|
||||
#endif
|
||||
|
||||
#define FORMAT_BUFFER_SIZE 300
|
||||
|
||||
struct format_flags
|
||||
|
|
@ -103,12 +108,19 @@ static void wps_format(char* fmt)
|
|||
}
|
||||
}
|
||||
|
||||
static bool load_custom_wps(void)
|
||||
bool wps_load_custom(char* file)
|
||||
{
|
||||
char buffer[FORMAT_BUFFER_SIZE];
|
||||
int fd;
|
||||
bool special = true;
|
||||
|
||||
fd = open(WPS_CONFIG, O_RDONLY);
|
||||
/* default wps file? */
|
||||
if (!file) {
|
||||
file = WPS_CONFIG;
|
||||
special = false;
|
||||
}
|
||||
|
||||
fd = open(file, O_RDONLY);
|
||||
|
||||
if (-1 != fd)
|
||||
{
|
||||
|
|
@ -121,6 +133,17 @@ static bool load_custom_wps(void)
|
|||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
if ( special ) {
|
||||
int i;
|
||||
lcd_clear_display();
|
||||
lcd_setmargins(0,0);
|
||||
for (i=0; i<MAX_LINES && format_lines[i]; i++)
|
||||
lcd_puts(0,i,format_lines[i]);
|
||||
lcd_update();
|
||||
sleep(HZ);
|
||||
}
|
||||
|
||||
return numread > 0;
|
||||
}
|
||||
|
||||
|
|
@ -195,8 +218,11 @@ static char* get_dir(char* buf, int buf_size, char* path, int level)
|
|||
*
|
||||
* Returns the tag. NULL indicates the tag wasn't available.
|
||||
*/
|
||||
static char* get_tag(struct mp3entry* id3, char* tag, char* buf, int buf_size,
|
||||
struct format_flags* flags)
|
||||
static char* get_tag(struct mp3entry* id3,
|
||||
char* tag,
|
||||
char* buf,
|
||||
int buf_size,
|
||||
struct format_flags* flags)
|
||||
{
|
||||
if ((0 == tag[0]) || (0 == tag[1]))
|
||||
{
|
||||
|
|
@ -205,122 +231,122 @@ static char* get_tag(struct mp3entry* id3, char* tag, char* buf, int buf_size,
|
|||
|
||||
switch (tag[0])
|
||||
{
|
||||
case 'i': /* ID3 Information */
|
||||
switch (tag[1])
|
||||
{
|
||||
case 't': /* ID3 Title */
|
||||
return id3->title;
|
||||
|
||||
case 'a': /* ID3 Artist */
|
||||
return id3->artist;
|
||||
|
||||
case 'n': /* ID3 Track Number */
|
||||
if (id3->tracknum)
|
||||
case 'i': /* ID3 Information */
|
||||
switch (tag[1])
|
||||
{
|
||||
snprintf(buf, buf_size, "%d", id3->tracknum);
|
||||
return buf;
|
||||
case 't': /* ID3 Title */
|
||||
return id3->title;
|
||||
|
||||
case 'a': /* ID3 Artist */
|
||||
return id3->artist;
|
||||
|
||||
case 'n': /* ID3 Track Number */
|
||||
if (id3->tracknum)
|
||||
{
|
||||
snprintf(buf, buf_size, "%d", id3->tracknum);
|
||||
return buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
case 'd': /* ID3 Album/Disc */
|
||||
return id3->album;
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
case 'f': /* File Information */
|
||||
switch(tag[1])
|
||||
{
|
||||
return NULL;
|
||||
case 'v': /* VBR file? */
|
||||
return id3->vbr ? "(avg)" : NULL;
|
||||
|
||||
case 'b': /* File Bitrate */
|
||||
snprintf(buf, buf_size, "%d", id3->bitrate);
|
||||
return buf;
|
||||
|
||||
case 'f': /* File Frequency */
|
||||
snprintf(buf, buf_size, "%d", id3->frequency);
|
||||
return buf;
|
||||
|
||||
case 'p': /* File Path */
|
||||
return id3->path;
|
||||
|
||||
case 'm': /* File Name - With Extension */
|
||||
return get_dir(buf, buf_size, id3->path, 0);
|
||||
|
||||
case 'n': /* File Name */
|
||||
if (get_dir(buf, buf_size, id3->path, 0))
|
||||
{
|
||||
/* Remove extension */
|
||||
char* sep = strrchr(buf, '.');
|
||||
|
||||
if (NULL != sep)
|
||||
{
|
||||
*sep = 0;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
case 's': /* File Size (in kilobytes) */
|
||||
snprintf(buf, buf_size, "%d", id3->filesize / 1024);
|
||||
return buf;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd': /* ID3 Album/Disc */
|
||||
return id3->album;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'f': /* File Information */
|
||||
switch(tag[1])
|
||||
{
|
||||
case 'v': /* VBR file? */
|
||||
return id3->vbr ? "(avg)" : NULL;
|
||||
|
||||
case 'b': /* File Bitrate */
|
||||
snprintf(buf, buf_size, "%d", id3->bitrate);
|
||||
return buf;
|
||||
|
||||
case 'f': /* File Frequency */
|
||||
snprintf(buf, buf_size, "%d", id3->frequency);
|
||||
return buf;
|
||||
|
||||
case 'p': /* File Path */
|
||||
return id3->path;
|
||||
|
||||
case 'm': /* File Name - With Extension */
|
||||
return get_dir(buf, buf_size, id3->path, 0);
|
||||
|
||||
case 'n': /* File Name */
|
||||
if (get_dir(buf, buf_size, id3->path, 0))
|
||||
case 'p': /* Playlist/Song Information */
|
||||
switch(tag[1])
|
||||
{
|
||||
/* Remove extension */
|
||||
char* sep = strrchr(buf, '.');
|
||||
|
||||
if (NULL != sep)
|
||||
{
|
||||
*sep = 0;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
case 's': /* File Size (in kilobytes) */
|
||||
snprintf(buf, buf_size, "%d", id3->filesize / 1024);
|
||||
return buf;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p': /* Playlist/Song Information */
|
||||
switch(tag[1])
|
||||
{
|
||||
#if defined(HAVE_LCD_CHARCELLS) && !defined(SIMULATOR)
|
||||
case 'b': /* Player progress bar */
|
||||
flags->player_progress = true;
|
||||
flags->dynamic = true;
|
||||
return "\x01";
|
||||
case 'b': /* Player progress bar */
|
||||
flags->player_progress = true;
|
||||
flags->dynamic = true;
|
||||
return "\x01";
|
||||
#endif
|
||||
|
||||
case 'p': /* Playlist Position */
|
||||
snprintf(buf, buf_size, "%d", id3->index + 1);
|
||||
return buf;
|
||||
case 'p': /* Playlist Position */
|
||||
snprintf(buf, buf_size, "%d", id3->index + 1);
|
||||
return buf;
|
||||
|
||||
case 'e': /* Playlist Total Entries */
|
||||
snprintf(buf, buf_size, "%d", playlist.amount);
|
||||
return buf;
|
||||
case 'e': /* Playlist Total Entries */
|
||||
snprintf(buf, buf_size, "%d", playlist.amount);
|
||||
return buf;
|
||||
|
||||
case 'c': /* Current Time in Song */
|
||||
flags->dynamic = true;
|
||||
format_time(buf, buf_size, id3->elapsed + ff_rewind_count);
|
||||
return buf;
|
||||
case 'c': /* Current Time in Song */
|
||||
flags->dynamic = true;
|
||||
format_time(buf, buf_size, id3->elapsed + ff_rewind_count);
|
||||
return buf;
|
||||
|
||||
case 'r': /* Remaining Time in Song */
|
||||
flags->dynamic = true;
|
||||
format_time(buf, buf_size, id3->length - id3->elapsed + ff_rewind_count);
|
||||
return buf;
|
||||
case 'r': /* Remaining Time in Song */
|
||||
flags->dynamic = true;
|
||||
format_time(buf, buf_size, id3->length - id3->elapsed + ff_rewind_count);
|
||||
return buf;
|
||||
|
||||
case 't': /* Total Time */
|
||||
format_time(buf, buf_size, id3->length);
|
||||
return buf;
|
||||
}
|
||||
break;
|
||||
case 't': /* Total Time */
|
||||
format_time(buf, buf_size, id3->length);
|
||||
return buf;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd': /* Directory path information */
|
||||
switch(tag[1])
|
||||
{
|
||||
case '1': /* Parent folder */
|
||||
return get_dir(buf, buf_size, id3->path, 1);
|
||||
case 'd': /* Directory path information */
|
||||
switch(tag[1])
|
||||
{
|
||||
case '1': /* Parent folder */
|
||||
return get_dir(buf, buf_size, id3->path, 1);
|
||||
|
||||
case '2': /* Parent of parent */
|
||||
return get_dir(buf, buf_size, id3->path, 2);
|
||||
case '2': /* Parent of parent */
|
||||
return get_dir(buf, buf_size, id3->path, 2);
|
||||
|
||||
case '3': /* Parent of parent of parent */
|
||||
return get_dir(buf, buf_size, id3->path, 3);
|
||||
}
|
||||
break;
|
||||
case '3': /* Parent of parent of parent */
|
||||
return get_dir(buf, buf_size, id3->path, 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
@ -507,11 +533,7 @@ bool wps_refresh(struct mp3entry* id3, int ffwd_offset, bool refresh_all)
|
|||
|
||||
ff_rewind_count = ffwd_offset;
|
||||
|
||||
#ifdef HAVE_LCD_CHARCELL
|
||||
for (i = 0; i < 2; i++)
|
||||
#else
|
||||
for (i = 0; i < MAX_LINES; i++)
|
||||
#endif
|
||||
{
|
||||
if ( !format_lines[i] )
|
||||
break;
|
||||
|
|
@ -586,7 +608,7 @@ void wps_display(struct mp3entry* id3)
|
|||
static bool wps_loaded = false;
|
||||
|
||||
if (!wps_loaded) {
|
||||
load_custom_wps();
|
||||
wps_load_custom(NULL);
|
||||
wps_loaded = true;
|
||||
|
||||
if ( !format_buffer[0] ) {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
bool wps_refresh(struct mp3entry* id3, int ffwd_offset, bool refresh_scroll);
|
||||
void wps_display(struct mp3entry* id3);
|
||||
bool wps_load_custom(char* file);
|
||||
|
||||
#ifdef HAVE_LCD_CHARCELLS
|
||||
bool draw_player_progress(struct mp3entry* id3, int ff_rewind_count);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue