summaryrefslogtreecommitdiff
path: root/internal/handlers/settings.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/settings.go')
-rw-r--r--internal/handlers/settings.go21
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 ""
+}