From 14898bc19ef8ef3c1f5f4b53a9d98d42d0ef1cd5 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Thu, 23 Jan 2025 22:20:14 -0500 Subject: [PATCH] [bugfix] FS#13456 - Loaded FM preset list doesn't restore after restart the fmr file wasn't being detected on multivolume targets the global preset list couldn't be cleared once set empty global preset file wasn't detected properly either Change-Id: I9c4b40ed0b6f3dbb0d38eb668fc74a512ea34062 --- apps/filetree.c | 19 +------------------ apps/radio/presets.c | 31 +++++++++++++++++++++---------- apps/radio/radio.h | 2 +- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/apps/filetree.c b/apps/filetree.c index 3496aedd6c..4136998c2a 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -635,25 +635,8 @@ int ft_enter(struct tree_context* c) #if CONFIG_TUNER /* fmr preset file */ case FILE_ATTR_FMR: - splash(0, ID2P(LANG_WAIT)); - - /* Preset inside the default folder. */ - if(!strncasecmp(FMPRESET_PATH, buf, strlen(FMPRESET_PATH))) - { - set_file(buf, global_settings.fmr_file, MAX_FILENAME); - radio_load_presets(global_settings.fmr_file); - } - /* - * Preset outside default folder, we can choose such only - * if we are out of the radio screen, so the check for the - * radio status isn't neccessary - */ - else - { - radio_load_presets(buf); - } + radio_load_presets(buf); rc = GO_TO_FM; - break; case FILE_ATTR_FMS: ft_apply_skin_file(buf, global_settings.fms_file, MAX_FILENAME); diff --git a/apps/radio/presets.c b/apps/radio/presets.c index b518e75bf5..c7a5bae372 100644 --- a/apps/radio/presets.c +++ b/apps/radio/presets.c @@ -196,7 +196,7 @@ void radio_save_presets(void) } close(fd); - if(!strncasecmp(FMPRESET_PATH, filepreset, strlen(FMPRESET_PATH))) + if (strcasestr(filepreset, FMPRESET_PATH)) set_file(filepreset, global_settings.fmr_file, MAX_FILENAME); presets_changed = false; } @@ -206,7 +206,7 @@ void radio_save_presets(void) } } -void radio_load_presets(char *filename) +void radio_load_presets(const char *filename) { int fd; int rc; @@ -220,25 +220,35 @@ void radio_load_presets(char *filename) num_presets = 0; /* No Preset in configuration. */ - if(filename[0] == '\0') + if(filename[0] == '\0' || filename[0] == '-') { filepreset[0] = '\0'; return; } - /* Temporary preset, loaded until player shuts down. */ - else if(filename[0] == '/') - strmemccpy(filepreset, filename, sizeof(filepreset)); - /* Preset from default directory. */ - else + + splash(0, ID2P(LANG_WAIT)); + + if(filename[0] != '/') /* Preset within radio screen */ + { snprintf(filepreset, sizeof(filepreset), "%s/%s.fmr", - FMPRESET_PATH, filename); + FMPRESET_PATH, filename);; + } + else + { + strmemccpy(filepreset, filename, sizeof(filepreset)); + } + + /* Preset inside the default folder? */ + if (strcasestr(filepreset, FMPRESET_PATH)) + set_file(filepreset, global_settings.fmr_file, MAX_FILENAME); + /* else Temporary preset, loaded until player shuts down. */ fd = open_utf8(filepreset, O_RDONLY); if(fd >= 0) { while(!done && num_presets < MAX_PRESETS) { - rc = read_line(fd, buf, 128); + rc = read_line(fd, buf, sizeof(buf)); if(rc > 0) { if(settings_parseline(buf, &freq, &name)) @@ -437,6 +447,7 @@ int preset_list_clear(void) radio_set_mode(RADIO_SCAN_MODE); curr_preset = -1; presets_changed = false; /* Don't ask to save when clearing the list. */ + global_settings.fmr_file[0] = '-'; return true; } diff --git a/apps/radio/radio.h b/apps/radio/radio.h index 2084d263e7..6de69af0e2 100644 --- a/apps/radio/radio.h +++ b/apps/radio/radio.h @@ -34,7 +34,7 @@ enum radio_scan_mode { }; #if CONFIG_TUNER -void radio_load_presets(char *filename); +void radio_load_presets(const char *filename); void radio_save_presets(void); void radio_init(void) INIT_ATTR; void radio_screen(void);