summaryrefslogtreecommitdiff
path: root/apps/filetypes.c
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-11-21 02:00:36 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2022-11-21 21:27:10 -0500
commit2056878e46321b5d22b814a535c0cc4a5184f5b9 (patch)
treea61ac30487fb6a47247c6bb92a4548624829e855 /apps/filetypes.c
parent658cc9588569af9cba054ad6f1b1e92204961d20 (diff)
downloadrockbox-2056878e46321b5d22b814a535c0cc4a5184f5b9.tar.gz
rockbox-2056878e46321b5d22b814a535c0cc4a5184f5b9.zip
move inbuilt_filetypes.icon to a separate struct
there are a lot of duplicated icons in the inbuilt_filetypes struct its only used at load so deduplicate and look-up by attr Change-Id: I5eb34e5243d88688984f689e0add08f92d953a6f
Diffstat (limited to 'apps/filetypes.c')
-rw-r--r--apps/filetypes.c229
1 files changed, 140 insertions, 89 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c
index 74607eac1c..da3fdd0283 100644
--- a/apps/filetypes.c
+++ b/apps/filetypes.c
@@ -47,103 +47,141 @@
47 47
48/* a table for the known file types */ 48/* a table for the known file types */
49static const struct filetype inbuilt_filetypes[] = { 49static const struct filetype inbuilt_filetypes[] = {
50 { "mp3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 50 { "mp3", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
51 { "mp2", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 51 { "mp2", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
52 { "mpa", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 52 { "mpa", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
53 { "mp1", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 53 { "mp1", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
54 { "ogg", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 54 { "ogg", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
55 { "oga", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 55 { "oga", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
56 { "wma", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 56 { "wma", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
57 { "wmv", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 57 { "wmv", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
58 { "asf", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 58 { "asf", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
59 { "wav", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 59 { "wav", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
60 { "flac",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 60 { "flac", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
61 { "ac3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 61 { "ac3", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
62 { "a52", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 62 { "a52", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
63 { "mpc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 63 { "mpc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
64 { "wv", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 64 { "wv", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
65 { "m4a", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 65 { "m4a", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
66 { "m4b", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 66 { "m4b", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
67 { "mp4", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 67 { "mp4", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
68 { "mod", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 68 { "mod", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
69 { "mpga", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 69 { "mpga", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
70 { "shn", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 70 { "shn", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
71 { "aif", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 71 { "aif", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
72 { "aiff",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 72 { "aiff", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
73 { "spx" ,FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 73 { "spx" , FILE_ATTR_AUDIO, VOICE_EXT_MPA },
74 { "opus",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 74 { "opus", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
75 { "sid", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 75 { "sid", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
76 { "adx", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 76 { "adx", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
77 { "nsf", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 77 { "nsf", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
78 { "nsfe",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 78 { "nsfe", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
79 { "spc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 79 { "spc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
80 { "ape", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 80 { "ape", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
81 { "mac", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 81 { "mac", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
82 { "sap" ,FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 82 { "sap" , FILE_ATTR_AUDIO, VOICE_EXT_MPA },
83 { "rm", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 83 { "rm", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
84 { "ra", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 84 { "ra", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
85 { "rmvb",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 85 { "rmvb", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
86 { "cmc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 86 { "cmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
87 { "cm3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 87 { "cm3", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
88 { "cmr", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 88 { "cmr", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
89 { "cms", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 89 { "cms", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
90 { "dmc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 90 { "dmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
91 { "dlt", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 91 { "dlt", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
92 { "mpt", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 92 { "mpt", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
93 { "mpd", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 93 { "mpd", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
94 { "rmt", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 94 { "rmt", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
95 { "tmc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 95 { "tmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
96 { "tm8", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 96 { "tm8", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
97 { "tm2", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 97 { "tm2", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
98 { "oma", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 98 { "oma", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
99 { "aa3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 99 { "aa3", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
100 { "at3", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 100 { "at3", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
101 { "mmf", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 101 { "mmf", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
102 { "au", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 102 { "au", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
103 { "snd", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 103 { "snd", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
104 { "vox", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 104 { "vox", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
105 { "w64", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 105 { "w64", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
106 { "tta", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 106 { "tta", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
107 { "ay", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 107 { "ay", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
108 { "vtx", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 108 { "vtx", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
109 { "gbs", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 109 { "gbs", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
110 { "hes", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 110 { "hes", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
111 { "sgc", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 111 { "sgc", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
112 { "vgm", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 112 { "vgm", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
113 { "vgz", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 113 { "vgz", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
114 { "kss", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 114 { "kss", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
115 { "aac", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA }, 115 { "aac", FILE_ATTR_AUDIO, VOICE_EXT_MPA },
116 { "m3u", FILE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST }, 116 { "m3u", FILE_ATTR_M3U, LANG_PLAYLIST },
117 { "m3u8",FILE_ATTR_M3U, Icon_Playlist, LANG_PLAYLIST }, 117 { "m3u8", FILE_ATTR_M3U, LANG_PLAYLIST },
118 { "cfg", FILE_ATTR_CFG, Icon_Config, VOICE_EXT_CFG }, 118 { "cfg", FILE_ATTR_CFG, VOICE_EXT_CFG },
119 { "wps", FILE_ATTR_WPS, Icon_Wps, VOICE_EXT_WPS }, 119 { "wps", FILE_ATTR_WPS, VOICE_EXT_WPS },
120#ifdef HAVE_REMOTE_LCD 120#ifdef HAVE_REMOTE_LCD
121 { "rwps",FILE_ATTR_RWPS, Icon_Wps, VOICE_EXT_RWPS }, 121 { "rwps", FILE_ATTR_RWPS, VOICE_EXT_RWPS },
122#endif 122#endif
123#if CONFIG_TUNER 123#if CONFIG_TUNER
124 { "fmr", FILE_ATTR_FMR, Icon_Preset, LANG_FMR }, 124 { "fmr", FILE_ATTR_FMR, LANG_FMR },
125 { "fms", FILE_ATTR_FMS, Icon_Wps, VOICE_EXT_FMS }, 125 { "fms", FILE_ATTR_FMS, VOICE_EXT_FMS },
126#endif 126#endif
127 { "lng", FILE_ATTR_LNG, Icon_Language, LANG_LANGUAGE }, 127 { "lng", FILE_ATTR_LNG, LANG_LANGUAGE },
128 { "rock",FILE_ATTR_ROCK,Icon_Plugin, VOICE_EXT_ROCK }, 128 { "rock", FILE_ATTR_ROCK, VOICE_EXT_ROCK },
129 { "lua", FILE_ATTR_LUA, Icon_Plugin, VOICE_EXT_ROCK }, 129 { "lua", FILE_ATTR_LUA, VOICE_EXT_ROCK },
130 { "opx", FILE_ATTR_OPX, Icon_Plugin, VOICE_EXT_ROCK }, 130 { "opx", FILE_ATTR_OPX, VOICE_EXT_ROCK },
131 { "fnt", FILE_ATTR_FONT,Icon_Font, VOICE_EXT_FONT }, 131 { "fnt", FILE_ATTR_FONT, VOICE_EXT_FONT },
132 { "kbd", FILE_ATTR_KBD, Icon_Keyboard, VOICE_EXT_KBD }, 132 { "kbd", FILE_ATTR_KBD, VOICE_EXT_KBD },
133 { "bmark",FILE_ATTR_BMARK, Icon_Bookmark, VOICE_EXT_BMARK }, 133 { "bmark",FILE_ATTR_BMARK, VOICE_EXT_BMARK },
134 { "cue", FILE_ATTR_CUE, Icon_Bookmark, VOICE_EXT_CUESHEET }, 134 { "cue", FILE_ATTR_CUE, VOICE_EXT_CUESHEET },
135 { "sbs", FILE_ATTR_SBS, Icon_Wps, VOICE_EXT_SBS }, 135 { "sbs", FILE_ATTR_SBS, VOICE_EXT_SBS },
136#ifdef HAVE_REMOTE_LCD 136#ifdef HAVE_REMOTE_LCD
137 { "rsbs", FILE_ATTR_RSBS, Icon_Wps, VOICE_EXT_RSBS }, 137 { "rsbs", FILE_ATTR_RSBS, VOICE_EXT_RSBS },
138#if CONFIG_TUNER 138#if CONFIG_TUNER
139 { "rfms", FILE_ATTR_RFMS, Icon_Wps, VOICE_EXT_RFMS }, 139 { "rfms", FILE_ATTR_RFMS, VOICE_EXT_RFMS },
140#endif 140#endif
141#endif 141#endif
142#ifdef BOOTFILE_EXT 142#ifdef BOOTFILE_EXT
143 { BOOTFILE_EXT, FILE_ATTR_MOD, Icon_Firmware, VOICE_EXT_AJZ }, 143 { BOOTFILE_EXT, FILE_ATTR_MOD, VOICE_EXT_AJZ },
144#endif 144#endif
145#ifdef BOOTFILE_EXT2 145#ifdef BOOTFILE_EXT2
146 { BOOTFILE_EXT2, FILE_ATTR_MOD, Icon_Firmware, VOICE_EXT_AJZ }, 146 { BOOTFILE_EXT2, FILE_ATTR_MOD, VOICE_EXT_AJZ },
147#endif
148};
149
150struct attr_icon {
151 uint16_t tree_attr;
152 uint16_t icon;
153};
154
155/* a table for the known file type icons */
156static const struct attr_icon inbuilt_attricons[] = {
157 { FILE_ATTR_AUDIO, Icon_Audio},
158 { FILE_ATTR_M3U, Icon_Playlist},
159 { FILE_ATTR_CFG, Icon_Config},
160 { FILE_ATTR_WPS, Icon_Wps},
161#ifdef HAVE_REMOTE_LCD
162 { FILE_ATTR_RWPS, Icon_Wps},
163#endif
164#if CONFIG_TUNER
165 { FILE_ATTR_FMR, Icon_Preset},
166 { FILE_ATTR_FMS, Icon_Wps},
167#endif
168 { FILE_ATTR_LNG, Icon_Language},
169 { FILE_ATTR_ROCK, Icon_Plugin},
170 { FILE_ATTR_LUA, Icon_Plugin},
171 { FILE_ATTR_OPX, Icon_Plugin},
172 { FILE_ATTR_FONT, Icon_Font},
173 { FILE_ATTR_KBD, Icon_Keyboard},
174 { FILE_ATTR_BMARK, Icon_Bookmark},
175 { FILE_ATTR_CUE, Icon_Bookmark},
176 { FILE_ATTR_SBS, Icon_Wps},
177#ifdef HAVE_REMOTE_LCD
178 { FILE_ATTR_RSBS, Icon_Wps},
179#if CONFIG_TUNER
180 { FILE_ATTR_RFMS, Icon_Wps},
181#endif
182#endif
183#if defined(BOOTFILE_EXT) || defined(BOOTFILE_EXT2)
184 { FILE_ATTR_MOD, Icon_Firmware},
147#endif 185#endif
148}; 186};
149 187
@@ -398,15 +436,28 @@ static void rm_whitespaces(char* str)
398 436
399static void read_builtin_types(void) 437static void read_builtin_types(void)
400{ 438{
401 int count = sizeof(inbuilt_filetypes)/sizeof(*inbuilt_filetypes), i; 439 int i,j, tree_attr;
440 int count = sizeof(inbuilt_filetypes)/sizeof(*inbuilt_filetypes);
441 int icon_count = sizeof(inbuilt_attricons)/sizeof(*inbuilt_attricons);
402 for(i=0; i<count && (filetype_count < MAX_FILETYPES); i++) 442 for(i=0; i<count && (filetype_count < MAX_FILETYPES); i++)
403 { 443 {
404 filetypes[filetype_count].extension = inbuilt_filetypes[i].extension; 444 filetypes[filetype_count].extension = inbuilt_filetypes[i].extension;
405 filetypes[filetype_count].plugin = NULL; 445 filetypes[filetype_count].plugin = NULL;
406 filetypes[filetype_count].attr = inbuilt_filetypes[i].tree_attr>>8; 446
447 tree_attr = inbuilt_filetypes[i].tree_attr;
448 filetypes[filetype_count].attr = tree_attr>>8;
407 if (filetypes[filetype_count].attr > highest_attr) 449 if (filetypes[filetype_count].attr > highest_attr)
408 highest_attr = filetypes[filetype_count].attr; 450 highest_attr = filetypes[filetype_count].attr;
409 filetypes[filetype_count].icon = inbuilt_filetypes[i].icon; 451
452 filetypes[filetype_count].icon = unknown_file.icon;
453 for (j = 0; j < icon_count; j++)
454 {
455 if (tree_attr == inbuilt_attricons[j].tree_attr)
456 {
457 filetypes[filetype_count].icon = inbuilt_attricons[j].icon;
458 break;
459 }
460 }
410 filetype_count++; 461 filetype_count++;
411 } 462 }
412} 463}