diff options
Diffstat (limited to 'internal/handlers/settings.go')
| -rw-r--r-- | internal/handlers/settings.go | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/internal/handlers/settings.go b/internal/handlers/settings.go index d6d78c0..fd63518 100644 --- a/internal/handlers/settings.go +++ b/internal/handlers/settings.go @@ -23,6 +23,10 @@ func (h *Handler) HandleSettingsPage(w http.ResponseWriter, r *http.Request) { } googleTasksToken, _ := h.store.GetOAuthToken(api.GoogleTasksOAuthSource) + // A stored row is not the same as a working grant: an invalid_grant refresh + // failure leaves the row in place while every fetch fails. Treat a recorded + // error as "needs reconnecting" rather than showing a reassuring "Connected". + googleTasksStatus, _ := h.store.GetOAuthTokenStatus(api.GoogleTasksOAuthSource) icsFeeds, _ := h.store.GetICSFeeds() data := struct { @@ -44,9 +48,12 @@ func (h *Handler) HandleSettingsPage(w http.ResponseWriter, r *http.Request) { CSRFToken: auth.GetCSRFTokenFromContext(r.Context()), WebAuthnEnabled: h.WebAuthnEnabled, GoogleTasksOAuthReady: h.googleTasksOAuthConfig != nil, - GoogleTasksConnected: googleTasksToken != nil, + GoogleTasksConnected: googleTasksToken != nil && googleTasksStatus.LastError == "", Feeds: toICSFeedViews(icsFeeds), - GoogleTasksError: r.URL.Query().Get("google_tasks_error"), + GoogleTasksError: firstNonEmpty( + r.URL.Query().Get("google_tasks_error"), + googleTasksStatus.LastError, + ), } if err := h.renderer.Render(w, "settings.html", data); err != nil { @@ -160,3 +167,13 @@ func (h *Handler) HandleToggleSourceConfig(w http.ResponseWriter, r *http.Reques w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]bool{"enabled": enabled}) } + +// firstNonEmpty returns the first non-empty string, or "". +func firstNonEmpty(values ...string) string { + for _, v := range values { + if v != "" { + return v + } + } + return "" +} |
