diff --git a/internal/api/handlers.go b/internal/api/handlers.go index 73d9a5f..1691e41 100644 --- a/internal/api/handlers.go +++ b/internal/api/handlers.go @@ -128,8 +128,18 @@ func (h *Handler) ensureDevicesLoaded() { if h.registry == nil || h.discovery == nil { return } - if len(h.registry.GetDevices()) > 0 { - return + devices := h.registry.GetDevices() + if len(devices) > 0 { + hasOnline := false + for _, d := range devices { + if d.Online { + hasOnline = true + break + } + } + if hasOnline { + return + } } _, _ = h.discovery.SearchDefault() if len(h.registry.GetDevices()) == 0 { diff --git a/internal/web/ui.go b/internal/web/ui.go index 8320588..a20beb6 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -700,11 +700,21 @@ func (u *UI) ensureDevicesLoaded() { if u.registry == nil || u.discovery == nil { return } - if len(u.registry.GetDevices()) > 0 { - return + devices := u.registry.GetDevices() + if len(devices) > 0 { + // Check if any device is online; if not, try discovery to refresh + hasOnline := false + for _, d := range devices { + if d.Online { + hasOnline = true + break + } + } + if hasOnline { + return + } } _, _ = u.discovery.SearchDefault() - // Retry once if discovery returned nothing (UDP broadcast can be lossy on some networks) if len(u.registry.GetDevices()) == 0 { _, _ = u.discovery.SearchDefault() }