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