Skip to content

Commit 4c23bfb

Browse files
committed
refresh view moved refresh rate to Data Provider TAB
1 parent 4e14928 commit 4c23bfb

1 file changed

Lines changed: 51 additions & 49 deletions

File tree

internal/ui/settings.go

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,60 @@ func (u *UIManager) ShowSettings(cfg *config.Config, onSave func(*config.Config)
202202
noteLabel := widget.NewLabel(u.t("settings.provider.note"))
203203
noteLabel.Wrapping = fyne.TextWrapWord
204204

205+
// ── Refresh interval ─────────────────────────────────────────────────
206+
intervalSlider := widget.NewSlider(10, 120)
207+
intervalSlider.Step = 1
208+
intervalSlider.Value = float64(cfg.RefreshInterval)
209+
intervalLabel := widget.NewLabel(u.tFmt("settings.interval.format", cfg.RefreshInterval))
210+
intervalSlider.OnChanged = func(v float64) {
211+
intervalLabel.SetText(u.tFmt("settings.interval.format", int(v)))
212+
}
213+
214+
// applyProviderSliderConstraints updates the slider range and, when
215+
// enforceFloor is true, also clamps the value to the provider minimum.
216+
// Pass enforceFloor=false on initial load so the saved config value is
217+
// preserved; pass enforceFloor=true when the user switches providers.
218+
applyProviderSliderConstraints := func(providerValue string, enforceFloor bool) {
219+
switch providerValue {
220+
case "openweathermap":
221+
intervalSlider.Min = 120
222+
intervalSlider.Max = 120
223+
intervalSlider.SetValue(120)
224+
case "easyweatherwidget":
225+
intervalSlider.Min = 10
226+
intervalSlider.Max = 120
227+
if enforceFloor && intervalSlider.Value < 30 {
228+
intervalSlider.SetValue(30)
229+
}
230+
}
231+
intervalLabel.SetText(u.tFmt("settings.interval.format", int(intervalSlider.Value)))
232+
}
233+
234+
// Set initial constraints from current config — do NOT enforce the
235+
// floor so the value saved in config is shown as-is.
236+
if cfg.APIConfig != nil && cfg.APIConfig.Provider != "" {
237+
applyProviderSliderConstraints(cfg.APIConfig.Provider, false)
238+
} else {
239+
applyProviderSliderConstraints("openweathermap", false)
240+
}
241+
242+
// Track the initial provider so we can detect changes.
243+
initialProvider := "openweathermap"
244+
if cfg.APIConfig != nil && cfg.APIConfig.Provider != "" {
245+
initialProvider = cfg.APIConfig.Provider
246+
}
247+
248+
// Provider change handler is set below, after refreshCityList is defined,
249+
// because switching providers clears the city list.
250+
providerSelect.OnChanged = func(selected string) {
251+
applyProviderSliderConstraints(providerDisplayToValue[selected], true)
252+
}
253+
205254
apiSection := container.NewVBox(
206255
widget.NewForm(
207256
widget.NewFormItem(u.t("settings.provider.label"), container.NewBorder(nil, nil, nil, getApiBtn, providerSelect)),
208257
widget.NewFormItem(u.t("settings.provider.apiKeyLabel"), apiKeyEntry),
258+
widget.NewFormItem(u.t("settings.interval.title"), container.NewHBox(intervalSlider, intervalLabel)),
209259
),
210260
noteLabel,
211261
activationCard,
@@ -300,51 +350,6 @@ func (u *UIManager) ShowSettings(cfg *config.Config, onSave func(*config.Config)
300350
unitRadio.SetSelected(unitCelsiusLabel)
301351
}
302352

303-
// ── Refresh interval ─────────────────────────────────────────────────
304-
intervalSlider := widget.NewSlider(10, 120)
305-
intervalSlider.Step = 1
306-
intervalSlider.Value = float64(cfg.RefreshInterval)
307-
intervalLabel := widget.NewLabel(u.tFmt("settings.interval.format", cfg.RefreshInterval))
308-
intervalSlider.OnChanged = func(v float64) {
309-
intervalLabel.SetText(u.tFmt("settings.interval.format", int(v)))
310-
}
311-
312-
// Apply initial slider constraints based on current provider.
313-
applyProviderSliderConstraints := func(providerValue string) {
314-
switch providerValue {
315-
case "openweathermap":
316-
intervalSlider.Min = 120
317-
intervalSlider.Max = 120
318-
intervalSlider.SetValue(120)
319-
case "easyweatherwidget":
320-
intervalSlider.Min = 10
321-
intervalSlider.Max = 120
322-
if intervalSlider.Value < 30 {
323-
intervalSlider.SetValue(30)
324-
}
325-
}
326-
intervalLabel.SetText(u.tFmt("settings.interval.format", int(intervalSlider.Value)))
327-
}
328-
329-
// Set initial constraints from current config.
330-
if cfg.APIConfig != nil && cfg.APIConfig.Provider != "" {
331-
applyProviderSliderConstraints(cfg.APIConfig.Provider)
332-
} else {
333-
applyProviderSliderConstraints("openweathermap")
334-
}
335-
336-
// Track the initial provider so we can detect changes.
337-
initialProvider := "openweathermap"
338-
if cfg.APIConfig != nil && cfg.APIConfig.Provider != "" {
339-
initialProvider = cfg.APIConfig.Provider
340-
}
341-
342-
// Provider change handler is set below, after refreshCityList is defined,
343-
// because switching providers clears the city list.
344-
providerSelect.OnChanged = func(selected string) {
345-
applyProviderSliderConstraints(providerDisplayToValue[selected])
346-
}
347-
348353
// ── RIGHT PANEL ───────────────────────────────────────────────────────
349354
// City list in a scroll area (top), add-form fixed below.
350355

@@ -396,7 +401,7 @@ func (u *UIManager) ShowSettings(cfg *config.Config, onSave func(*config.Config)
396401
// to also clear cities when the provider switches.
397402
providerSelect.OnChanged = func(selected string) {
398403
newProvider := providerDisplayToValue[selected]
399-
applyProviderSliderConstraints(newProvider)
404+
applyProviderSliderConstraints(newProvider, true)
400405

401406
if newProvider == "openweathermap" {
402407
getApiBtn.SetText(u.t("settings.provider.getFreeApi"))
@@ -719,9 +724,6 @@ func (u *UIManager) ShowSettings(cfg *config.Config, onSave func(*config.Config)
719724
sectionBlock(u.t("settings.temperature.title"), u.t("settings.temperature.subtitle"),
720725
unitRadio,
721726
),
722-
sectionBlock(u.t("settings.interval.title"), u.t("settings.interval.subtitle"),
723-
container.NewHBox(intervalSlider, intervalLabel),
724-
),
725727
sectionBlock(u.t("settings.startup.title"), u.t("settings.startup.subtitle"),
726728
autoStartCheck,
727729
),

0 commit comments

Comments
 (0)