comparison config.c @ 2378:af3075c1e421

Add media player file extensions to file browser config
author Michael Pavone <pavone@retrodev.com>
date Sat, 18 Nov 2023 11:34:33 -0800
parents 62f316b76e9a
children 64cf80e683aa
comparison
equal deleted inserted replaced
2377:30e59954eab9 2378:af3075c1e421
314 val.ptrval = tern_insert_node(val.ptrval, "axes", axes); 314 val.ptrval = tern_insert_node(val.ptrval, "axes", axes);
315 } 315 }
316 *pads = tern_insert_node(*pads, key, val.ptrval); 316 *pads = tern_insert_node(*pads, key, val.ptrval);
317 } 317 }
318 318
319 #define CONFIG_VERSION 7 319 #define CONFIG_VERSION 8
320 static tern_node *migrate_config(tern_node *config, int from_version) 320 static tern_node *migrate_config(tern_node *config, int from_version)
321 { 321 {
322 tern_node *def_config = parse_bundled_config("default.cfg"); 322 tern_node *def_config = parse_bundled_config("default.cfg");
323 switch(from_version) 323 switch(from_version)
324 { 324 {
406 if (pad_bindings) { 406 if (pad_bindings) {
407 tern_foreach(pad_bindings, update_pad_menu_binding, &pad_bindings); 407 tern_foreach(pad_bindings, update_pad_menu_binding, &pad_bindings);
408 config = tern_insert_path(config, "bindings\0pads\0", (tern_val){.ptrval = pad_bindings}, TVAL_NODE); 408 config = tern_insert_path(config, "bindings\0pads\0", (tern_val){.ptrval = pad_bindings}, TVAL_NODE);
409 } 409 }
410 } 410 }
411 case 7: {
412 uint32_t num_exts;
413 char **exts = get_extension_list(config, &num_exts);
414 char *need_add[] = {"vgm", "vgz", "flac", "wav"};
415 uint32_t num_need_add = sizeof(need_add)/sizeof(*need_add);
416 for (uint32_t i = 0; i < num_exts && num_need_add; i++)
417 {
418 for (uint32_t j = 0; j < num_need_add; j++)
419 {
420 if (!strcmp(exts[i], need_add[j])) {
421 num_need_add--;
422 need_add[j] = need_add[num_need_add];
423 break;
424 }
425 }
426 }
427 if (num_need_add) {
428 const char **parts = calloc(2 * (num_exts + num_need_add) - 1, sizeof(char*));
429 uint32_t dest = 0;
430 for (uint32_t i = 0; i < num_exts; i++)
431 {
432 parts[dest++] = exts[i];
433 parts[dest++] = " ";
434 }
435 for (uint32_t i = 0; i < num_need_add - 1; i++)
436 {
437 parts[dest++] = need_add[i];
438 parts[dest++] = " ";
439 }
440 parts[dest++] = need_add[num_need_add - 1];
441 config = tern_insert_path(config, "ui\0extensions\0", (tern_val){.ptrval = alloc_concat_m(dest, parts)}, TVAL_PTR);
442 free(parts);
443 }
444 free(exts[0]);//All extensions in this list share an allocation, first one is a pointer to the buffer
445 free(exts);
446 }
411 } 447 }
412 char buffer[16]; 448 char buffer[16];
413 sprintf(buffer, "%d", CONFIG_VERSION); 449 sprintf(buffer, "%d", CONFIG_VERSION);
414 return tern_insert_ptr(config, "version", strdup(buffer)); 450 return tern_insert_ptr(config, "version", strdup(buffer));
415 } 451 }
481 delete_custom_config_at("blastem.cfg"); 517 delete_custom_config_at("blastem.cfg");
482 } 518 }
483 519
484 char **get_extension_list(tern_node *config, uint32_t *num_exts_out) 520 char **get_extension_list(tern_node *config, uint32_t *num_exts_out)
485 { 521 {
486 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); 522 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);
487 uint32_t num_exts = 0, ext_storage = 5; 523 uint32_t num_exts = 0, ext_storage = 5;
488 char **ext_list = malloc(sizeof(char *) * ext_storage); 524 char **ext_list = malloc(sizeof(char *) * ext_storage);
489 char *cur_filter = ext_filter; 525 char *cur_filter = ext_filter;
490 while (*cur_filter) 526 while (*cur_filter)
491 { 527 {