gogcli/internal/googleapi/sheets.go
salmonumbrella d2be673d10
feat: add retry logic, concurrent fetching, and extended commands
Resilience:
- RetryTransport with circuit breaker for 429/5xx resilience
- Exponential backoff with jitter, respects Retry-After headers
- Circuit breaker auto-resets after 30s of successful requests

Performance:
- Concurrent gmail thread fetching (fixes N+1 query pattern)
- Bounded concurrency with semaphore (max 10 parallel)

New calendar commands:
- colors: list available event/calendar colors
- conflicts: check availability across calendars
- search: find events by text query
- time: show current time in multiple timezones

New gmail commands:
- autoforward: get/enable/disable auto-forwarding
- delegates: list/add/remove mail delegation
- filters: list/create/delete inbox filters
- forwarding: manage forwarding addresses
- sendas: manage send-as aliases
- vacation: get/enable/disable vacation responder
- batch: bulk operations (mark-read, archive, label, delete)
- watch: Pub/Sub push with webhook forwarding

New services:
- Sheets: read/write/append spreadsheet data
- Tasks: manage tasklists and tasks

Developer experience:
- Shell completion (bash, zsh, fish, powershell)
- version command with build info
- --debug flag for verbose logging
- lefthook for pre-commit hooks

Documentation:
- Expanded README with examples
- Gmail watch/Pub/Sub guide (docs/watch.md)
- Architecture spec (docs/spec.md)
- Release process (docs/RELEASING.md)
2025-12-24 17:51:21 -08:00

29 lines
631 B
Go

package googleapi
import (
"context"
"log/slog"
"google.golang.org/api/sheets/v4"
"github.com/steipete/gogcli/internal/googleauth"
)
func NewSheets(ctx context.Context, email string) (*sheets.Service, error) {
slog.Debug("creating sheets service", "email", email)
opts, err := optionsForAccount(ctx, googleauth.ServiceSheets, email)
if err != nil {
return nil, err
}
svc, err := sheets.NewService(ctx, opts...)
if err != nil {
slog.Error("failed to create sheets service", "email", email, "error", err)
return nil, err
}
slog.Debug("sheets service created successfully", "email", email)
return svc, nil
}