Move the inbuilt filetype info into filetypes.c and rename the defines.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13201 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2007-04-18 13:03:01 +00:00
parent f44f961812
commit 36a2e30872
11 changed files with 159 additions and 155 deletions

View file

@ -63,7 +63,7 @@ int ft_build_playlist(struct tree_context* c, int start_index)
for(i = 0;i < c->filesindir;i++) for(i = 0;i < c->filesindir;i++)
{ {
if((dircache[i].attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) if((dircache[i].attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
{ {
DEBUGF("Adding %s\n", dircache[i].name); DEBUGF("Adding %s\n", dircache[i].name);
if (playlist_add(dircache[i].name) < 0) if (playlist_add(dircache[i].name) < 0)
@ -101,11 +101,11 @@ static void check_file_thumbnails(struct tree_context* c)
&dircache[i].name[strlen(dircache[i].name) &dircache[i].name[strlen(dircache[i].name)
- strlen(file_thumbnail_ext)])) - strlen(file_thumbnail_ext)]))
{ /* no .talk file */ { /* no .talk file */
dircache[i].attr &= ~TREE_ATTR_THUMBNAIL; /* clear */ dircache[i].attr &= ~FILE_ATTR_THUMBNAIL; /* clear */
} }
else else
{ /* .talk file, we later let them speak themselves */ { /* .talk file, we later let them speak themselves */
dircache[i].attr |= TREE_ATTR_THUMBNAIL; /* set */ dircache[i].attr |= FILE_ATTR_THUMBNAIL; /* set */
} }
} }
@ -130,7 +130,7 @@ static void check_file_thumbnails(struct tree_context* c)
{ {
if (!strcasecmp(dircache[i].name, (char *)entry->d_name)) if (!strcasecmp(dircache[i].name, (char *)entry->d_name))
{ /* match */ { /* match */
dircache[i].attr |= TREE_ATTR_THUMBNAIL; /* set the flag */ dircache[i].attr |= FILE_ATTR_THUMBNAIL; /* set the flag */
break; /* exit search loop, because we found it */ break; /* exit search loop, because we found it */
} }
} }
@ -171,8 +171,8 @@ static int compare(const void* p1, const void* p2)
{ {
case 3: /* sort type */ case 3: /* sort type */
{ {
int t1 = e1->attr & TREE_ATTR_MASK; int t1 = e1->attr & FILE_ATTR_MASK;
int t2 = e2->attr & TREE_ATTR_MASK; int t2 = e2->attr & FILE_ATTR_MASK;
if (!t1) /* unknown type */ if (!t1) /* unknown type */
t1 = INT_MAX; /* gets a high number, to sort after known */ t1 = INT_MAX; /* gets a high number, to sort after known */
@ -262,23 +262,23 @@ int ft_load(struct tree_context* c, const char* tempdir)
/* filter out non-visible files */ /* filter out non-visible files */
if ((!(dptr->attr & ATTR_DIRECTORY) && ( if ((!(dptr->attr & ATTR_DIRECTORY) && (
(*c->dirfilter == SHOW_PLAYLIST && (*c->dirfilter == SHOW_PLAYLIST &&
(dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_M3U) || (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_M3U) ||
((*c->dirfilter == SHOW_MUSIC && ((*c->dirfilter == SHOW_MUSIC &&
(dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_MPA) && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_AUDIO) &&
(dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_M3U) || (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_M3U) ||
(*c->dirfilter == SHOW_SUPPORTED && !filetype_supported(dptr->attr)))) || (*c->dirfilter == SHOW_SUPPORTED && !filetype_supported(dptr->attr)))) ||
(*c->dirfilter == SHOW_WPS && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_WPS) || (*c->dirfilter == SHOW_WPS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_WPS) ||
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
(*c->dirfilter == SHOW_RWPS && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_RWPS) || (*c->dirfilter == SHOW_RWPS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_RWPS) ||
#endif #endif
#if CONFIG_TUNER #if CONFIG_TUNER
(*c->dirfilter == SHOW_FMR && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_FMR) || (*c->dirfilter == SHOW_FMR && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_FMR) ||
#endif #endif
(*c->dirfilter == SHOW_CFG && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_CFG) || (*c->dirfilter == SHOW_CFG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_CFG) ||
(*c->dirfilter == SHOW_LNG && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_LNG) || (*c->dirfilter == SHOW_LNG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LNG) ||
(*c->dirfilter == SHOW_MOD && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_MOD) || (*c->dirfilter == SHOW_MOD && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_MOD) ||
(*c->dirfilter == SHOW_FONT && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_FONT) || (*c->dirfilter == SHOW_FONT && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_FONT) ||
(*c->dirfilter == SHOW_PLUGINS && (dptr->attr & TREE_ATTR_MASK) != TREE_ATTR_ROCK)) (*c->dirfilter == SHOW_PLUGINS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_ROCK))
{ {
i--; i--;
continue; continue;
@ -340,8 +340,8 @@ int ft_enter(struct tree_context* c)
bool play = false; bool play = false;
int start_index=0; int start_index=0;
switch ( file->attr & TREE_ATTR_MASK ) { switch ( file->attr & FILE_ATTR_MASK ) {
case TREE_ATTR_M3U: case FILE_ATTR_M3U:
if (global_settings.party_mode) { if (global_settings.party_mode) {
gui_syncsplash(HZ, str(LANG_PARTY_MODE)); gui_syncsplash(HZ, str(LANG_PARTY_MODE));
break; break;
@ -374,7 +374,7 @@ int ft_enter(struct tree_context* c)
} }
break; break;
case TREE_ATTR_MPA: case FILE_ATTR_AUDIO:
if (bookmark_autoload(c->currdir)) if (bookmark_autoload(c->currdir))
break; break;
@ -420,7 +420,7 @@ int ft_enter(struct tree_context* c)
#if CONFIG_TUNER #if CONFIG_TUNER
/* fmr preset file */ /* fmr preset file */
case TREE_ATTR_FMR: case FILE_ATTR_FMR:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
@ -448,7 +448,7 @@ int ft_enter(struct tree_context* c)
/* wps config file */ /* wps config file */
case TREE_ATTR_WPS: case FILE_ATTR_WPS:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
unload_wps_backdrop(); unload_wps_backdrop();
@ -460,7 +460,7 @@ int ft_enter(struct tree_context* c)
#if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) #if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1)
/* remote-wps config file */ /* remote-wps config file */
case TREE_ATTR_RWPS: case FILE_ATTR_RWPS:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
wps_data_load(gui_wps[1].data, buf, true); wps_data_load(gui_wps[1].data, buf, true);
set_file(buf, (char *)global_settings.rwps_file, set_file(buf, (char *)global_settings.rwps_file,
@ -468,20 +468,20 @@ int ft_enter(struct tree_context* c)
break; break;
#endif #endif
case TREE_ATTR_CFG: case FILE_ATTR_CFG:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
if (!settings_load_config(buf,true)) if (!settings_load_config(buf,true))
break; break;
gui_syncsplash(HZ, str(LANG_SETTINGS_LOADED)); gui_syncsplash(HZ, str(LANG_SETTINGS_LOADED));
break; break;
case TREE_ATTR_BMARK: case FILE_ATTR_BMARK:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
bookmark_load(buf, false); bookmark_load(buf, false);
reload_dir = true; reload_dir = true;
break; break;
case TREE_ATTR_LNG: case FILE_ATTR_LNG:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
if(!lang_load(buf)) { if(!lang_load(buf)) {
set_file(buf, (char *)global_settings.lang_file, set_file(buf, (char *)global_settings.lang_file,
@ -492,13 +492,13 @@ int ft_enter(struct tree_context* c)
break; break;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
case TREE_ATTR_FONT: case FILE_ATTR_FONT:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
font_load(buf); font_load(buf);
set_file(buf, (char *)global_settings.font_file, MAX_FILENAME); set_file(buf, (char *)global_settings.font_file, MAX_FILENAME);
break; break;
case TREE_ATTR_KBD: case FILE_ATTR_KBD:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
if (!load_kbd(buf)) if (!load_kbd(buf))
gui_syncsplash(HZ, str(LANG_KEYBOARD_LOADED)); gui_syncsplash(HZ, str(LANG_KEYBOARD_LOADED));
@ -508,14 +508,14 @@ int ft_enter(struct tree_context* c)
#ifndef SIMULATOR #ifndef SIMULATOR
/* firmware file */ /* firmware file */
case TREE_ATTR_MOD: case FILE_ATTR_MOD:
gui_syncsplash(0, str(LANG_WAIT)); gui_syncsplash(0, str(LANG_WAIT));
rolo_load(buf); rolo_load(buf);
break; break;
#endif #endif
/* plugin file */ /* plugin file */
case TREE_ATTR_ROCK: case FILE_ATTR_ROCK:
if (global_settings.party_mode) { if (global_settings.party_mode) {
gui_syncsplash(HZ, str(LANG_PARTY_MODE)); gui_syncsplash(HZ, str(LANG_PARTY_MODE));
break; break;
@ -534,7 +534,7 @@ int ft_enter(struct tree_context* c)
} }
break; break;
case TREE_ATTR_CUE: case FILE_ATTR_CUE:
display_cuesheet_content(buf); display_cuesheet_content(buf);
break; break;

View file

@ -48,8 +48,66 @@
#define MAX_FILETYPES 48 #define MAX_FILETYPES 48
#endif #endif
/* number of bytes for the binary icon */ /* a table for the know file types */
#define ICON_LENGTH 6 const struct filetype inbuilt_filetypes[] = {
{ "mp3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mp2", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mpa", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
#if CONFIG_CODEC == SWCODEC
/* Temporary hack to allow playlist creation */
{ "mp1", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "ogg", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "wma", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "wav", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "flac",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "ac3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "a52", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mpc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "wv", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "m4a", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "m4b", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mp4", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "shn", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "aif", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "aiff",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "spx" ,FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "sid", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "adx", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "nsf", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "nsfe",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "spc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
#endif
{ "m3u", FILE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST },
{ "m3u8",FILE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST },
{ "cfg", FILE_ATTR_CFG, Icon_Config, VOICE_EXT_CFG },
{ "wps", FILE_ATTR_WPS, Icon_Wps, VOICE_EXT_WPS },
#ifdef HAVE_REMOTE_LCD
{ "rwps",FILE_ATTR_RWPS, Icon_Wps, VOICE_EXT_RWPS },
#endif
#if LCD_DEPTH > 1
{ "bmp", FILE_ATTR_BMP, Icon_Wps, VOICE_EXT_WPS },
#endif
#if CONFIG_TUNER
{ "fmr", FILE_ATTR_FMR, Icon_Preset, LANG_FMR },
#endif
{ "lng", FILE_ATTR_LNG, Icon_Language, LANG_LANGUAGE },
{ "rock",FILE_ATTR_ROCK,Icon_Plugin, VOICE_EXT_ROCK },
#ifdef HAVE_LCD_BITMAP
{ "fnt", FILE_ATTR_FONT,Icon_Font, VOICE_EXT_FONT },
{ "kbd", FILE_ATTR_KBD, Icon_Keyboard, VOICE_EXT_KBD },
#endif
{ "bmark",FILE_ATTR_BMARK, Icon_Bookmark, VOICE_EXT_BMARK },
{ "cue", FILE_ATTR_CUE, Icon_Bookmark, LANG_CUESHEET },
#ifdef BOOTFILE_EXT
{ BOOTFILE_EXT, FILE_ATTR_MOD, Icon_Firmware, VOICE_EXT_AJZ },
#endif /* #ifndef SIMULATOR */
};
void tree_get_filetypes(const struct filetype** types, int* count)
{
*types = inbuilt_filetypes;
*count = sizeof(inbuilt_filetypes) / sizeof(*inbuilt_filetypes);
}
/* mask for dynamic filetype info in attribute */ /* mask for dynamic filetype info in attribute */
#define FILETYPES_MASK 0xFF00 #define FILETYPES_MASK 0xFF00
@ -155,17 +213,15 @@ static void rm_whitespaces(char* str)
static void read_builtin_types(void) static void read_builtin_types(void)
{ {
const struct filetype *types; int count = sizeof(inbuilt_filetypes)/sizeof(*inbuilt_filetypes), i;
int count, i;
tree_get_filetypes(&types, &count);
for(i=0; i<count && (filetype_count < MAX_FILETYPES); i++) for(i=0; i<count && (filetype_count < MAX_FILETYPES); i++)
{ {
filetypes[filetype_count].extension = types[i].extension; filetypes[filetype_count].extension = inbuilt_filetypes[i].extension;
filetypes[filetype_count].plugin = NULL; filetypes[filetype_count].plugin = NULL;
filetypes[filetype_count].attr = types[i].tree_attr>>8; filetypes[filetype_count].attr = inbuilt_filetypes[i].tree_attr>>8;
if (filetypes[filetype_count].attr > heighest_attr) if (filetypes[filetype_count].attr > heighest_attr)
heighest_attr = filetypes[filetype_count].attr; heighest_attr = filetypes[filetype_count].attr;
filetypes[filetype_count].icon = types[i].icon; filetypes[filetype_count].icon = inbuilt_filetypes[i].icon;
filetype_count++; filetype_count++;
} }
} }
@ -247,7 +303,7 @@ int filetype_get_attr(const char* file)
{ {
if (filetypes[i].extension && if (filetypes[i].extension &&
!strcasecmp(extension, filetypes[i].extension)) !strcasecmp(extension, filetypes[i].extension))
return (filetypes[i].attr<<8)&TREE_ATTR_MASK; return (filetypes[i].attr<<8)&FILE_ATTR_MASK;
} }
return 0; return 0;
} }

View file

@ -21,13 +21,40 @@
#include <stdbool.h> #include <stdbool.h>
#include <tree.h> #include <tree.h>
#include <menu.h>
/* using attribute bits not used by FAT (FAT uses lower 7) */
#define FILE_ATTR_THUMBNAIL 0x0080 /* corresponding .talk file exists */
/* (this also reflects the sort order if by type) */
#define FILE_ATTR_BMARK 0x0100 /* book mark file */
#define FILE_ATTR_M3U 0x0200 /* playlist */
#define FILE_ATTR_AUDIO 0x0300 /* audio file */
#define FILE_ATTR_CFG 0x0400 /* config file */
#define FILE_ATTR_WPS 0x0500 /* wps config file */
#define FILE_ATTR_FONT 0x0600 /* font file */
#define FILE_ATTR_LNG 0x0700 /* binary lang file */
#define FILE_ATTR_ROCK 0x0800 /* binary rockbox plugin */
#define FILE_ATTR_MOD 0x0900 /* firmware file */
#define FILE_ATTR_RWPS 0x0A00 /* remote-wps config file */
#define FILE_ATTR_BMP 0x0B00 /* backdrop bmp file */
#define FILE_ATTR_KBD 0x0C00 /* keyboard file */
#define FILE_ATTR_FMR 0x0D00 /* preset file */
#define FILE_ATTR_CUE 0x0E00 /* cuesheet file */
#define FILE_ATTR_MASK 0xFF00 /* which bits tree.c uses for file types */
struct filetype {
char* extension;
int tree_attr;
int icon;
int voiceclip;
};
void tree_get_filetypes(const struct filetype**, int*);
/* init the filetypes structs. /* init the filetypes structs.
uses audio buffer for storage, so call early in init... */ uses audio buffer for storage, so call early in init... */
void filetype_init(void); void filetype_init(void);
void read_viewer_theme_file(void); void read_viewer_theme_file(void);
/* Return the attribute (TREE_ATTR_*) of the file */ /* Return the attribute (FILE_ATTR_*) of the file */
int filetype_get_attr(const char* file); int filetype_get_attr(const char* file);
int filetype_get_icon(int attr); int filetype_get_icon(int attr);
/* return the plugin filename associated with the file */ /* return the plugin filename associated with the file */

View file

@ -28,7 +28,7 @@
#include "backlight.h" #include "backlight.h"
#include "action.h" #include "action.h"
#include "kernel.h" #include "kernel.h"
#include "tree.h" #include "filetypes.h"
#include "debug.h" #include "debug.h"
#include "sprintf.h" #include "sprintf.h"
#include "settings.h" #include "settings.h"
@ -236,7 +236,7 @@ long gui_wps_show(void)
show_main_backdrop(); show_main_backdrop();
#endif #endif
action_signalscreenchange(); action_signalscreenchange();
if (onplay(wps_state.id3->path, TREE_ATTR_MPA, CONTEXT_WPS) if (onplay(wps_state.id3->path, FILE_ATTR_AUDIO, CONTEXT_WPS)
== ONPLAY_MAINMENU) == ONPLAY_MAINMENU)
return GO_TO_ROOT; return GO_TO_ROOT;
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1

View file

@ -171,7 +171,7 @@ static bool add_to_playlist(int position, bool queue)
else else
#endif #endif
{ {
if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) if ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
playlist_insert_track(NULL, selected_file, position, queue, true); playlist_insert_track(NULL, selected_file, position, queue, true);
else if (selected_file_attr & ATTR_DIRECTORY) else if (selected_file_attr & ATTR_DIRECTORY)
{ {
@ -188,7 +188,7 @@ static bool add_to_playlist(int position, bool queue)
playlist_insert_directory(NULL, selected_file, position, queue, playlist_insert_directory(NULL, selected_file, position, queue,
recurse); recurse);
} }
else if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) else if ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)
playlist_insert_playlist(NULL, selected_file, position, queue); playlist_insert_playlist(NULL, selected_file, position, queue);
} }
@ -273,7 +273,7 @@ static bool playlist_options(void)
int m, i=0, pstart=0, result; int m, i=0, pstart=0, result;
bool ret = false; bool ret = false;
if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U && if ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U &&
context == CONTEXT_TREE) context == CONTEXT_TREE)
{ {
items[i].desc = ID2P(LANG_VIEW); items[i].desc = ID2P(LANG_VIEW);
@ -355,7 +355,7 @@ static bool playlist_options(void)
args[i].queue = false; args[i].queue = false;
i++; i++;
} }
else if (((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) || else if (((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO) ||
(selected_file_attr & ATTR_DIRECTORY)) (selected_file_attr & ATTR_DIRECTORY))
{ {
items[i].desc = ID2P(LANG_INSERT); items[i].desc = ID2P(LANG_INSERT);

View file

@ -91,6 +91,7 @@
#include "dircache.h" #include "dircache.h"
#include "thread.h" #include "thread.h"
#include "usb.h" #include "usb.h"
#include "filetypes.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "icons.h" #include "icons.h"
#endif #endif
@ -1536,7 +1537,7 @@ static int check_subdir_for_music(char *dir, char *subdir)
{ {
if (files[i].attr & ATTR_DIRECTORY) if (files[i].attr & ATTR_DIRECTORY)
has_subdir = true; has_subdir = true;
else if ((files[i].attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) else if ((files[i].attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
{ {
has_music = true; has_music = true;
break; break;
@ -3568,7 +3569,7 @@ int playlist_directory_tracksearch(const char* dirname, bool recurse,
else else
continue; continue;
} }
else if ((files[i].attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) else if ((files[i].attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
{ {
snprintf(buf, sizeof(buf), "%s/%s", dirname, files[i].name); snprintf(buf, sizeof(buf), "%s/%s", dirname, files[i].name);

View file

@ -37,6 +37,7 @@
#include "sprintf.h" #include "sprintf.h"
#include "tree.h" #include "tree.h"
#include "yesno.h" #include "yesno.h"
#include "filetypes.h"
#define PLAYLIST_CATALOG_CFG ROCKBOX_DIR "/playlist_catalog.config" #define PLAYLIST_CATALOG_CFG ROCKBOX_DIR "/playlist_catalog.config"
#define PLAYLIST_CATALOG_DEFAULT_DIR "/Playlists" #define PLAYLIST_CATALOG_DEFAULT_DIR "/Playlists"
@ -167,7 +168,7 @@ static int create_playlist_list(char** playlists, int num_items,
for (i=0; i<num_files && index<num_items; i++) for (i=0; i<num_files && index<num_items; i++)
{ {
if (files[i].attr & TREE_ATTR_M3U) if (files[i].attr & FILE_ATTR_M3U)
{ {
if (most_recent && !strncmp(files[i].name, most_recent_playlist, if (most_recent && !strncmp(files[i].name, most_recent_playlist,
sizeof(most_recent_playlist))) sizeof(most_recent_playlist)))
@ -287,7 +288,7 @@ static int display_playlists(char* playlist, bool view)
snprintf(playlist, MAX_PATH, "%s/%s", playlist_dir, snprintf(playlist, MAX_PATH, "%s/%s", playlist_dir,
sel_file); sel_file);
if (onplay(playlist, TREE_ATTR_M3U, if (onplay(playlist, FILE_ATTR_M3U,
CONTEXT_TREE) != ONPLAY_OK) CONTEXT_TREE) != ONPLAY_OK)
{ {
result = 0; result = 0;
@ -358,13 +359,13 @@ static int add_to_playlist(const char* playlist, char* sel, int sel_attr)
/* In case we're in the playlist directory */ /* In case we're in the playlist directory */
reload_directory(); reload_directory();
if ((sel_attr & TREE_ATTR_MASK) == TREE_ATTR_MPA) if ((sel_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
{ {
/* append the selected file */ /* append the selected file */
if (fdprintf(fd, "%s\n", sel) > 0) if (fdprintf(fd, "%s\n", sel) > 0)
result = 0; result = 0;
} }
else if ((sel_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) else if ((sel_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)
{ {
/* append playlist */ /* append playlist */
int f, fs, i; int f, fs, i;

View file

@ -32,7 +32,7 @@
#include "menu.h" #include "menu.h"
#include "plugin.h" #include "plugin.h"
#include "keyboard.h" #include "keyboard.h"
#include "tree.h" #include "filetypes.h"
#include "onplay.h" #include "onplay.h"
#include "talk.h" #include "talk.h"
#include "misc.h" #include "misc.h"
@ -487,7 +487,7 @@ static int onplay_menu(int index)
case 2: /* add to catalog */ case 2: /* add to catalog */
case 3: /* add to a new one */ case 3: /* add to a new one */
catalog_add_to_a_playlist(current_track->name, catalog_add_to_a_playlist(current_track->name,
TREE_ATTR_MPA, FILE_ATTR_AUDIO,
result==3 ); result==3 );
ret = 0; ret = 0;
break; break;

View file

@ -24,6 +24,7 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include "config.h"
#include "system.h" #include "system.h"
#include "kernel.h" #include "kernel.h"
#include "splash.h" #include "splash.h"
@ -43,6 +44,7 @@
#include "playback.h" #include "playback.h"
#include "yesno.h" #include "yesno.h"
#include "misc.h" #include "misc.h"
#include "filetypes.h"
#define FILE_SEARCH_INSTRUCTIONS ROCKBOX_DIR "/tagnavi.config" #define FILE_SEARCH_INSTRUCTIONS ROCKBOX_DIR "/tagnavi.config"
@ -1669,13 +1671,13 @@ int tagtree_get_attr(struct tree_context* c)
{ {
case navibrowse: case navibrowse:
if (csi->tagorder[c->currextra] == tag_title) if (csi->tagorder[c->currextra] == tag_title)
attr = TREE_ATTR_MPA; attr = FILE_ATTR_AUDIO;
else else
attr = ATTR_DIRECTORY; attr = ATTR_DIRECTORY;
break; break;
case allsubentries: case allsubentries:
attr = TREE_ATTR_MPA; attr = FILE_ATTR_AUDIO;
break; break;
default: default:
@ -1690,7 +1692,7 @@ int tagtree_get_icon(struct tree_context* c)
{ {
int icon = Icon_Folder; int icon = Icon_Folder;
if (tagtree_get_attr(c) == TREE_ATTR_MPA) if (tagtree_get_attr(c) == FILE_ATTR_AUDIO)
icon = Icon_Audio; icon = Icon_Audio;
return icon; return icon;

View file

@ -85,60 +85,8 @@
#include "backdrop.h" #include "backdrop.h"
#endif #endif
/* a table for the know file types */ static const struct filetype *filetypes;
const struct filetype filetypes[] = { static int filetypes_count;
{ "mp3", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "mp2", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "mpa", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
#if CONFIG_CODEC == SWCODEC
/* Temporary hack to allow playlist creation */
{ "mp1", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "ogg", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "wma", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "wav", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "flac",TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "ac3", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "a52", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "mpc", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "wv", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "m4a", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "m4b", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "mp4", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "shn", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "aif", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "aiff",TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "spx" ,TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "sid", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "adx", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "nsf", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "nsfe", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
{ "spc", TREE_ATTR_MPA, Icon_Audio, VOICE_EXT_MPA },
#endif
{ "m3u", TREE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST },
{ "m3u8", TREE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST },
{ "cfg", TREE_ATTR_CFG, Icon_Config, VOICE_EXT_CFG },
{ "wps", TREE_ATTR_WPS, Icon_Wps, VOICE_EXT_WPS },
#ifdef HAVE_REMOTE_LCD
{ "rwps", TREE_ATTR_RWPS, Icon_Wps, VOICE_EXT_RWPS },
#endif
#if LCD_DEPTH > 1
{ "bmp", TREE_ATTR_BMP, Icon_Wps, VOICE_EXT_WPS },
#endif
#if CONFIG_TUNER
{ "fmr", TREE_ATTR_FMR, Icon_Preset, LANG_FMR },
#endif
{ "lng", TREE_ATTR_LNG, Icon_Language, LANG_LANGUAGE },
{ "rock",TREE_ATTR_ROCK,Icon_Plugin, VOICE_EXT_ROCK },
#ifdef HAVE_LCD_BITMAP
{ "fnt", TREE_ATTR_FONT,Icon_Font, VOICE_EXT_FONT },
{ "kbd", TREE_ATTR_KBD, Icon_Keyboard, VOICE_EXT_KBD },
#endif
{ "bmark",TREE_ATTR_BMARK, Icon_Bookmark, VOICE_EXT_BMARK },
{ "cue", TREE_ATTR_CUE, Icon_Bookmark, LANG_CUESHEET },
#ifdef BOOTFILE_EXT
{ BOOTFILE_EXT, TREE_ATTR_MOD, Icon_Firmware, VOICE_EXT_AJZ },
#endif /* #ifndef SIMULATOR */
};
struct gui_synclist tree_lists; struct gui_synclist tree_lists;
@ -279,11 +227,7 @@ void browse_root(void)
root_menu(); root_menu();
} }
void tree_get_filetypes(const struct filetype** types, int* count)
{
*types = filetypes;
*count = sizeof(filetypes) / sizeof(*filetypes);
}
struct tree_context* tree_get_context(void) struct tree_context* tree_get_context(void)
{ {
@ -710,9 +654,9 @@ static int dirbrowse()
#ifdef HAVE_TAGCACHE #ifdef HAVE_TAGCACHE
if (id3db) if (id3db)
{ {
if (tagtree_get_attr(&tc) == TREE_ATTR_MPA) if (tagtree_get_attr(&tc) == FILE_ATTR_AUDIO)
{ {
attr = TREE_ATTR_MPA; attr = FILE_ATTR_AUDIO;
tagtree_get_filename(&tc, buf, sizeof(buf)); tagtree_get_filename(&tc, buf, sizeof(buf));
} }
else else
@ -931,7 +875,7 @@ static int dirbrowse()
case 1: /* files as numbers */ case 1: /* files as numbers */
ft_play_filenumber( ft_play_filenumber(
tc.selected_item-tc.dirsindir+1, tc.selected_item-tc.dirsindir+1,
attr & TREE_ATTR_MASK); attr & FILE_ATTR_MASK);
break; break;
case 2: /* files spelled */ case 2: /* files spelled */
@ -941,7 +885,7 @@ static int dirbrowse()
case 3: /* thumbnail clip */ case 3: /* thumbnail clip */
/* "schedule" a thumbnail, to have a little /* "schedule" a thumbnail, to have a little
delay */ delay */
if (attr & TREE_ATTR_THUMBNAIL) if (attr & FILE_ATTR_THUMBNAIL)
thumbnail_time = current_tick + HOVER_DELAY; thumbnail_time = current_tick + HOVER_DELAY;
else else
/* spell the number as fallback */ /* spell the number as fallback */
@ -1003,15 +947,15 @@ static bool add_dir(char* dirname, int len, int fd)
} }
else { else {
int x = strlen((char *)entry->d_name); int x = strlen((char *)entry->d_name);
unsigned int i; int i;
char *cp = strrchr((char *)entry->d_name,'.'); char *cp = strrchr((char *)entry->d_name,'.');
if (cp) { if (cp) {
cp++; cp++;
/* add all supported audio files to playlists */ /* add all supported audio files to playlists */
for (i=0; i < sizeof(filetypes)/sizeof(struct filetype); i++) { for (i=0; i < filetypes_count; i++) {
if (filetypes[i].tree_attr == TREE_ATTR_MPA) { if (filetypes[i].tree_attr == FILE_ATTR_AUDIO) {
if (!strcasecmp(cp, filetypes[i].extension)) { if (!strcasecmp(cp, filetypes[i].extension)) {
char buf[8]; char buf[8];
int i; int i;
@ -1147,6 +1091,7 @@ void tree_init(void)
tc.dircache_size = max_files * sizeof(struct entry); tc.dircache_size = max_files * sizeof(struct entry);
tc.dircache = buffer_alloc(tc.dircache_size); tc.dircache = buffer_alloc(tc.dircache_size);
tree_get_filetypes(&filetypes, &filetypes_count);
} }
void bookmark_play(char *resume_file, int index, int offset, int seed, void bookmark_play(char *resume_file, int index, int offset, int seed,
@ -1230,9 +1175,9 @@ void bookmark_play(char *resume_file, int index, int offset, int seed,
static int ft_play_filenumber(int pos, int attr) static int ft_play_filenumber(int pos, int attr)
{ {
/* try to find a voice ID for the extension, if known */ /* try to find a voice ID for the extension, if known */
unsigned int j; int j;
int ext_id = -1; /* default to none */ int ext_id = -1; /* default to none */
for (j=0; j<sizeof(filetypes)/sizeof(*filetypes); j++) for (j=0; j<filetypes_count; j++)
{ {
if (attr == filetypes[j].tree_attr) if (attr == filetypes[j].tree_attr)
{ {

View file

@ -29,12 +29,6 @@ struct entry {
char *name; char *name;
}; };
struct filetype {
char* extension;
int tree_attr;
int icon;
int voiceclip;
};
/* browser context for file or db */ /* browser context for file or db */
struct tree_context { struct tree_context {
@ -75,28 +69,6 @@ struct tree_context {
bool dirfull; bool dirfull;
}; };
/* using attribute bits not used by FAT (FAT uses lower 7) */
#define TREE_ATTR_THUMBNAIL 0x0080 /* corresponding .talk file exists */
/* (this also reflects the sort order if by type) */
#define TREE_ATTR_BMARK 0x0100 /* book mark file */
#define TREE_ATTR_M3U 0x0200 /* playlist */
#define TREE_ATTR_MPA 0x0300 /* mpeg audio file */
#define TREE_ATTR_CFG 0x0400 /* config file */
#define TREE_ATTR_WPS 0x0500 /* wps config file */
#define TREE_ATTR_FONT 0x0600 /* font file */
#define TREE_ATTR_LNG 0x0700 /* binary lang file */
#define TREE_ATTR_ROCK 0x0800 /* binary rockbox plugin */
#define TREE_ATTR_MOD 0x0900 /* firmware file */
#define TREE_ATTR_RWPS 0x1000 /* remote-wps config file */
#define TREE_ATTR_BMP 0x1100 /* backdrop bmp file */
#define TREE_ATTR_KBD 0x1200 /* keyboard file */
#define TREE_ATTR_FMR 0x1300 /* preset file */
#define TREE_ATTR_CUE 0x1400 /* cuesheet file */
#define TREE_ATTR_MASK 0xFF00 /* which bits tree.c uses for file types */
void tree_get_filetypes(const struct filetype**, int*);
void tree_init(void); void tree_init(void);
void browse_root(void); void browse_root(void);
void get_current_file(char* buffer, int buffer_len); void get_current_file(char* buffer, int buffer_len);