Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

filetypes.c compress builtin filetypes

the builtin audio filetypes all use an int to signal (FILE_ATTR_AUDIO)
it takes less space to give them their own array and apply the attrib at runtime

bit of const correctness and some other small cleanup

Change-Id: I1cc3de9fe4ec1d5e49c8154cffdef3f05cf0b235

+59 -99
+59 -94
apps/filetypes.c
··· 50 50 static void read_viewers_config_init(void) INIT_ATTR; 51 51 static void read_config_init(int fd) INIT_ATTR; 52 52 53 - /* a table for the known file types */ 54 - static const struct filetype inbuilt_filetypes[] = { 55 - { "mp3", FILE_ATTR_AUDIO }, 56 - { "mp2", FILE_ATTR_AUDIO }, 57 - { "mpa", FILE_ATTR_AUDIO }, 58 - { "mp1", FILE_ATTR_AUDIO }, 59 - { "ogg", FILE_ATTR_AUDIO }, 60 - { "oga", FILE_ATTR_AUDIO }, 61 - { "wma", FILE_ATTR_AUDIO }, 62 - { "wmv", FILE_ATTR_AUDIO }, 63 - { "asf", FILE_ATTR_AUDIO }, 64 - { "wav", FILE_ATTR_AUDIO }, 65 - { "flac", FILE_ATTR_AUDIO }, 66 - { "ac3", FILE_ATTR_AUDIO }, 67 - { "a52", FILE_ATTR_AUDIO }, 68 - { "mpc", FILE_ATTR_AUDIO }, 69 - { "wv", FILE_ATTR_AUDIO }, 70 - { "m4a", FILE_ATTR_AUDIO }, 71 - { "m4b", FILE_ATTR_AUDIO }, 72 - { "mp4", FILE_ATTR_AUDIO }, 73 - { "mod", FILE_ATTR_AUDIO }, 74 - { "mpga", FILE_ATTR_AUDIO }, 75 - { "shn", FILE_ATTR_AUDIO }, 76 - { "aif", FILE_ATTR_AUDIO }, 77 - { "aiff", FILE_ATTR_AUDIO }, 78 - { "spx" , FILE_ATTR_AUDIO }, 79 - { "opus", FILE_ATTR_AUDIO }, 80 - { "sid", FILE_ATTR_AUDIO }, 81 - { "adx", FILE_ATTR_AUDIO }, 82 - { "nsf", FILE_ATTR_AUDIO }, 83 - { "nsfe", FILE_ATTR_AUDIO }, 84 - { "spc", FILE_ATTR_AUDIO }, 85 - { "ape", FILE_ATTR_AUDIO }, 86 - { "mac", FILE_ATTR_AUDIO }, 87 - { "sap" , FILE_ATTR_AUDIO }, 88 - { "rm", FILE_ATTR_AUDIO }, 89 - { "ra", FILE_ATTR_AUDIO }, 90 - { "rmvb", FILE_ATTR_AUDIO }, 91 - { "cmc", FILE_ATTR_AUDIO }, 92 - { "cm3", FILE_ATTR_AUDIO }, 93 - { "cmr", FILE_ATTR_AUDIO }, 94 - { "cms", FILE_ATTR_AUDIO }, 95 - { "dmc", FILE_ATTR_AUDIO }, 96 - { "dlt", FILE_ATTR_AUDIO }, 97 - { "mpt", FILE_ATTR_AUDIO }, 98 - { "mpd", FILE_ATTR_AUDIO }, 99 - { "rmt", FILE_ATTR_AUDIO }, 100 - { "tmc", FILE_ATTR_AUDIO }, 101 - { "tm8", FILE_ATTR_AUDIO }, 102 - { "tm2", FILE_ATTR_AUDIO }, 103 - { "oma", FILE_ATTR_AUDIO }, 104 - { "aa3", FILE_ATTR_AUDIO }, 105 - { "at3", FILE_ATTR_AUDIO }, 106 - { "mmf", FILE_ATTR_AUDIO }, 107 - { "au", FILE_ATTR_AUDIO }, 108 - { "snd", FILE_ATTR_AUDIO }, 109 - { "vox", FILE_ATTR_AUDIO }, 110 - { "w64", FILE_ATTR_AUDIO }, 111 - { "tta", FILE_ATTR_AUDIO }, 112 - { "ay", FILE_ATTR_AUDIO }, 113 - { "vtx", FILE_ATTR_AUDIO }, 114 - { "gbs", FILE_ATTR_AUDIO }, 115 - { "hes", FILE_ATTR_AUDIO }, 116 - { "sgc", FILE_ATTR_AUDIO }, 117 - { "vgm", FILE_ATTR_AUDIO }, 118 - { "vgz", FILE_ATTR_AUDIO }, 119 - { "kss", FILE_ATTR_AUDIO }, 120 - { "aac", FILE_ATTR_AUDIO }, 53 + /* string array for known audio file types (tree_attr == FILE_ATTR_AUDIO) */ 54 + static const char* inbuilt_audio_filetypes[] = { 55 + "mp3", "mp2", "mpa", "mp1", "ogg", "oga", "wma", "wmv", "asf", "wav", 56 + "flac", "ac3", "a52", "mpc", "wv", "m4a", "m4b", "mp4", "mod", "mpga", 57 + "shn", "aif", "aiff", "spx", "opus", "sid", "adx", "nsf", "nsfe", "spc", 58 + "ape", "mac", "sap", "rm", "ra", "rmvb", "cmc", "cm3", "cmr", "cms", "dmc", 59 + "dlt", "mpt", "mpd", "rmt", "tmc", "tm8", "tm2", "oma", "aa3", "at3", "mmf", 60 + "au", "snd", "vox", "w64", "tta", "ay", "vtx", "gbs", "hes", "sgc", "vgm", 61 + "vgz", "kss", "aac", 62 + }; 63 + 64 + struct filetype_inbuilt { 65 + const char* extension; 66 + int tree_attr; 67 + }; 68 + 69 + /* a table for the known file types, besides audio */ 70 + static const struct filetype_inbuilt inbuilt_filetypes[] = { 121 71 { "m3u", FILE_ATTR_M3U }, 122 72 { "m3u8", FILE_ATTR_M3U }, 123 73 { "cfg", FILE_ATTR_CFG }, ··· 219 169 struct file_type { 220 170 enum themable_icons icon; /* the icon which shall be used for it, NOICON if unknown */ 221 171 unsigned char attr; /* FILE_ATTR_MASK >> 8 */ 222 - char* plugin; /* Which plugin to use, NULL if unknown, or builtin */ 223 - char* extension; /* NULL for none */ 172 + const char* plugin; /* Which plugin to use, NULL if unknown, or builtin */ 173 + const char* extension; /* NULL for none */ 224 174 }; 175 + 225 176 static struct file_type filetypes[MAX_FILETYPES]; 226 - static int custom_filetype_icons[MAX_FILETYPES]; 177 + 178 + static enum themable_icons custom_filetype_icons[MAX_FILETYPES]; 179 + 227 180 static bool custom_icons_loaded = false; 228 181 #ifdef HAVE_LCD_COLOR 229 182 static int custom_colors[MAX_FILETYPES]; 230 183 #endif 231 184 struct filetype_unknown { 232 - int icon; 185 + enum themable_icons icon; 233 186 #ifdef HAVE_LCD_COLOR 234 187 int color; 235 188 #endif ··· 269 222 .shrink_callback = NULL, 270 223 }; 271 224 272 - static char *filetypes_strdup(char* string) 225 + static const char *filetypes_strdup(char* string) 273 226 { 274 227 char *buffer = core_get_data(strdup_handle) + strdup_cur_idx; 275 228 strdup_cur_idx += strlcpy(buffer, string, strdup_bufsize-strdup_cur_idx)+1; 276 229 return buffer; 277 230 } 278 231 279 - static char *filetypes_store_plugin(char *plugin, int n) 232 + static const char *filetypes_store_plugin(char *plugin, int n) 280 233 { 281 234 int i; 282 235 /* if the plugin is in the list already, use it. */ ··· 353 306 int fd; 354 307 char *ext, *icon; 355 308 int i; 356 - int *icon_dest; 309 + enum themable_icons *icon_dest; 357 310 global_status.viewer_icon_count = 0; 358 311 custom_icons_loaded = false; 359 312 custom_filetype_icons[0] = Icon_Folder; ··· 456 409 *s = '\0'; 457 410 } 458 411 459 - static void read_builtin_types_init(void) 412 + static void fill_from_builtin(const char *ext, int tree_attr) 460 413 { 461 - int tree_attr; 462 - size_t count = ARRAY_SIZE(inbuilt_filetypes); 463 414 size_t icon_count = ARRAY_SIZE(inbuilt_attr_icons_voices); 464 - for(size_t i = 0; (i < count) && (filetype_count < MAX_FILETYPES); i++) 465 - { 466 - filetypes[filetype_count].extension = inbuilt_filetypes[i].extension; 467 - filetypes[filetype_count].plugin = NULL; 415 + if (filetype_count >= MAX_FILETYPES) 416 + return; 468 417 469 - tree_attr = inbuilt_filetypes[i].tree_attr; 470 - filetypes[filetype_count].attr = tree_attr>>8; 471 - if (filetypes[filetype_count].attr > highest_attr) 472 - highest_attr = filetypes[filetype_count].attr; 418 + struct file_type *filetype = &filetypes[filetype_count]; 419 + filetype->icon = unknown_file.icon; 420 + filetype->attr = tree_attr>>8; 421 + filetype->plugin = NULL; 422 + filetype->extension = ext; 423 + 424 + if (filetype->attr > highest_attr) 425 + highest_attr = filetype->attr; 473 426 474 - filetypes[filetype_count].icon = unknown_file.icon; 475 - for (size_t j = icon_count - 1; j < icon_count; j--) 427 + for (size_t j = icon_count - 1; j < icon_count; j--) 428 + { 429 + if (tree_attr == inbuilt_attr_icons_voices[j].tree_attr) 476 430 { 477 - if (tree_attr == inbuilt_attr_icons_voices[j].tree_attr) 478 - { 479 - filetypes[filetype_count].icon = inbuilt_attr_icons_voices[j].icon; 480 - break; 481 - } 431 + filetype->icon = inbuilt_attr_icons_voices[j].icon; 432 + break; 482 433 } 483 - filetype_count++; 434 + } 435 + filetype_count++; 436 + } 437 + 438 + static void read_builtin_types_init(void) 439 + { 440 + for(size_t i = 0; (i < ARRAY_SIZE(inbuilt_audio_filetypes)); i++) 441 + { 442 + fill_from_builtin(inbuilt_audio_filetypes[i], FILE_ATTR_AUDIO); 443 + } 444 + 445 + for(size_t i = 0; (i < ARRAY_SIZE(inbuilt_filetypes)); i++) 446 + { 447 + fill_from_builtin(inbuilt_filetypes[i].extension, 448 + inbuilt_filetypes[i].tree_attr); 484 449 } 485 450 } 486 451
-5
apps/filetypes.h
··· 51 51 #define FILE_ATTR_LOG 0x1500 /* log file */ 52 52 #define FILE_ATTR_MASK 0xFF00 /* which bits tree.c uses for file types */ 53 53 54 - struct filetype { 55 - char* extension; 56 - int tree_attr; 57 - }; 58 - 59 54 long tree_get_filetype_voiceclip(int attr); 60 55 61 56 /* init the filetypes structs.