1
0
Fork 0
forked from len0rd/rockbox

[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

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