diff --git a/apps/filetypes.c b/apps/filetypes.c index 090898a3af..21ce17ce40 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c @@ -41,12 +41,20 @@ #include "icons.h" #include "logf.h" +/* max filetypes (plugins & icons stored here) */ +#if CONFIG_CODEC == SWCODEC +#define MAX_FILETYPES 128 +#else +#define MAX_FILETYPES 48 +#endif + /* a table for the know file types */ 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 }, @@ -96,7 +104,7 @@ const struct filetype inbuilt_filetypes[] = { { "cue", FILE_ATTR_CUE, Icon_Bookmark, VOICE_EXT_CUESHEET }, #ifdef BOOTFILE_EXT { BOOTFILE_EXT, FILE_ATTR_MOD, Icon_Firmware, VOICE_EXT_AJZ }, -#endif /* #ifndef BOOTFILE_EXT */ +#endif /* #ifndef SIMULATOR */ }; void tree_get_filetypes(const struct filetype** types, int* count) @@ -115,14 +123,14 @@ struct file_type { char* plugin; /* Which plugin to use, NULL if unknown, or builtin */ char* extension; /* NULL for none */ }; -static struct file_type *filetypes; -static int *custom_filetype_icons; +static struct file_type filetypes[MAX_FILETYPES]; +static int custom_filetype_icons[MAX_FILETYPES]; static bool custom_icons_loaded = false; #ifdef HAVE_LCD_COLOR -static int *custom_colors; +static int custom_colors[MAX_FILETYPES+1]; #endif +static int filetype_count = 0; static unsigned char heighest_attr = 0; -static int max_types = 0, filetype_count; static char *filetypes_strdup(char* string) { @@ -142,10 +150,7 @@ void read_color_theme_file(void) { int fd; char *ext, *color; int i; - - if (max_types == 0) - return; - for (i = 0; i < filetype_count+1; i++) { + for (i = 0; i < MAX_FILETYPES+1; i++) { custom_colors[i] = -1; } snprintf(buffer, MAX_PATH, "%s/%s.colours", THEME_DIR, @@ -164,7 +169,7 @@ void read_color_theme_file(void) { } if (!strcasecmp(ext, "???")) { - custom_colors[filetype_count] = hex_to_rgb(color); + custom_colors[MAX_FILETYPES] = hex_to_rgb(color); continue; } for (i=1; i>8; + filetypes[filetype_count].attr = inbuilt_filetypes[i].tree_attr>>8; if (filetypes[filetype_count].attr > heighest_attr) heighest_attr = filetypes[filetype_count].attr; - filetypes[filetype_count].icon = inbuilt_filetypes[i].icon; + filetypes[filetype_count].icon = inbuilt_filetypes[i].icon; filetype_count++; } } @@ -302,15 +291,14 @@ static void read_config(char* config_file) int fd = open(config_file, O_RDONLY); if (fd < 0) return; - /* config file is in the form + /* config file is in the for ,, ignore line if either of the first two are missing */ while (read_line(fd, line, 64) > 0) { - if (filetype_count >= max_types) + if (filetype_count >= MAX_FILETYPES) { gui_syncsplash(HZ, ID2P(LANG_FILETYPES_FULL)); - global_status.filetype_count = 0; /* make plenty of room for next reboot */ break; } rm_whitespaces(line); @@ -359,7 +347,7 @@ int filetype_get_attr(const char* file) if (!extension) return 0; extension++; - for (i=0; i