Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
When the auto-launched browser doesn't reach the user (containers,
headless envs, missing xdg-open), the auth flow used to silently
hang for 5 minutes and then time out. Surface the OAuth URL in the
provider loading view so the user can paste it into a browser
manually. Also log the URL via applog.Info so it's preserved for
support reports.
Closes#220
Three small cleanups from review:
1. Move CredsPath / DeleteCreds into an untagged creds.go so the
Windows stub no longer needs its own copy. Drops the credsPath
wrapper and the duplicate path-build/remove logic.
2. Change DeleteCreds to (bool, error) so the reset subcommand can
distinguish "removed" from "did not exist" without a separate
os.Stat round-trip — deleteCreds already swallowed ErrNotExist,
so the pre-check was redundant.
3. Trim two over-narration comments. The fallbackMaxAttempts intent
is now a single inline note; the invalid_grant block comment is
reduced to one line about why we delete on this signal.
When the OAuth2 refresh token returned by Spotify expires or is revoked,
silentTokenRefresh fails with an oauth2.RetrieveError carrying ErrorCode
"invalid_grant". Until now this only logged a warning and continued with
the spclient fallback token, so every future launch hit the same dead
state and produced misleading rate-limit warnings.
Classify the refresh error via isInvalidGrant, and on a true
invalid_grant delete spotify_credentials.json and surface ErrNeedsAuth.
The next provider open will prompt a fresh OAuth flow that recreates
the credentials file.
Also expose CredsPath / DeleteCreds from the package (with mirror stubs
in stub_windows.go) so a future CLI subcommand can offer the same
recovery without users needing to know the file path.
Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
* Decouple providers behind capability interfaces
* Add docs to provider vel
* Simplify, refactor and remove dead code
* Completely decouple from the ui
* Simplify
* Dead code cleanup
Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
* feat: add Windows build support (Spotify behind build tags)
- Add //go:build !windows to provider.go, session.go, streamer.go
- Add stub_windows.go with no-op Spotify implementation
- Add windows/amd64 to release CI matrix (CGO_ENABLED=0)
Tested: builds and runs on Windows 11 amd64 (cliamp test --version OK)
Linux/macOS CI unchanged (still CGO_ENABLED=1 with native libs)
* fix: address review feedback on Windows stub
- Move //go:build constraint before package doc comment (Go requirement)
- NewStreamer now returns errSpotifyUnavailable instead of nil, nil
to prevent nil dereference in callers
- Update New() doc comment to accurately describe nil return behavior