# HG changeset patch # User Michael Pavone # Date 1700336073 28800 # Node ID af3075c1e42122bd0067e1506fea61596295be98 # Parent 30e59954eab9838ccf5ebaf413a71e888d4230de Add media player file extensions to file browser config diff -r 30e59954eab9 -r af3075c1e421 config.c --- a/config.c Sat Nov 18 09:36:29 2023 -0800 +++ b/config.c Sat Nov 18 11:34:33 2023 -0800 @@ -316,7 +316,7 @@ *pads = tern_insert_node(*pads, key, val.ptrval); } -#define CONFIG_VERSION 7 +#define CONFIG_VERSION 8 static tern_node *migrate_config(tern_node *config, int from_version) { tern_node *def_config = parse_bundled_config("default.cfg"); @@ -408,6 +408,42 @@ config = tern_insert_path(config, "bindings\0pads\0", (tern_val){.ptrval = pad_bindings}, TVAL_NODE); } } + case 7: { + uint32_t num_exts; + char **exts = get_extension_list(config, &num_exts); + char *need_add[] = {"vgm", "vgz", "flac", "wav"}; + uint32_t num_need_add = sizeof(need_add)/sizeof(*need_add); + for (uint32_t i = 0; i < num_exts && num_need_add; i++) + { + for (uint32_t j = 0; j < num_need_add; j++) + { + if (!strcmp(exts[i], need_add[j])) { + num_need_add--; + need_add[j] = need_add[num_need_add]; + break; + } + } + } + if (num_need_add) { + const char **parts = calloc(2 * (num_exts + num_need_add) - 1, sizeof(char*)); + uint32_t dest = 0; + for (uint32_t i = 0; i < num_exts; i++) + { + parts[dest++] = exts[i]; + parts[dest++] = " "; + } + for (uint32_t i = 0; i < num_need_add - 1; i++) + { + parts[dest++] = need_add[i]; + parts[dest++] = " "; + } + parts[dest++] = need_add[num_need_add - 1]; + config = tern_insert_path(config, "ui\0extensions\0", (tern_val){.ptrval = alloc_concat_m(dest, parts)}, TVAL_PTR); + free(parts); + } + free(exts[0]);//All extensions in this list share an allocation, first one is a pointer to the buffer + free(exts); + } } char buffer[16]; sprintf(buffer, "%d", CONFIG_VERSION); @@ -483,7 +519,7 @@ char **get_extension_list(tern_node *config, uint32_t *num_exts_out) { - char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md smd sms gg cue iso"}, TVAL_PTR).ptrval); + char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md smd sms gg zip gz cue iso vgm vgz flac wav"}, TVAL_PTR).ptrval); uint32_t num_exts = 0, ext_storage = 5; char **ext_list = malloc(sizeof(char *) * ext_storage); char *cur_filter = ext_filter; diff -r 30e59954eab9 -r af3075c1e421 default.cfg --- a/default.cfg Sat Nov 18 09:36:29 2023 -0800 +++ b/default.cfg Sat Nov 18 11:34:33 2023 -0800 @@ -401,7 +401,7 @@ #accepts special variables $HOME, $EXEDIR, $USERDATA, $ROMNAME save_path $USERDATA/blastem/$ROMNAME #space delimited list of file extensions to filter against in menu - extensions bin gen md smd sms gg zip gz cue iso + extensions bin gen md smd sms gg zip gz cue iso vgm vgz flac wav #specifies the preferred save-state format, set to gst for Genecyst compatible states state_format native #set to on to use the native file picker on your OS instead of the builtin one @@ -437,4 +437,4 @@ } #Don't manually edit `version`, it's used for automatic config migration -version 7 +version 8