[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
This commit is contained in:
William Wilgus 2025-01-23 22:20:14 -05:00
parent 277c66d9d2
commit 14898bc19e
3 changed files with 23 additions and 29 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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);