97 lines
5.7 KiB
Markdown
97 lines
5.7 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to gostations will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [2.1.1] - 2026-06-07
|
|
|
|
### Added
|
|
- Per-favorite volume persistence: the last volume set while playing a station that is in your favorites list is remembered and restored the next time you play that specific favorite. Non-favorited stations continue to use the global last volume (from `radiostations.ini` or the default).
|
|
- Volumes for favorites are stored inside `favorites.json` (no separate file), using the existing atomic save/load pattern.
|
|
|
|
### Changed
|
|
- Playback entry now prioritizes: per-favorite saved volume (if the station is favorited) > live session volume (for stickiness across `s`/`x` within a run) > global last volume.
|
|
- Volume changes while playing a favorite also update the per-favorite volume (saved immediately, like global).
|
|
- Explicit saves of per-favorite volume on `s`/`x` stop and on quit (in addition to per-change saves).
|
|
|
|
See the `todo/queued/per-station-volume.md` for implementation details and the narrowed scope (favorited stations only).
|
|
|
|
## [2.1.0] - 2026-06-06
|
|
|
|
### Added
|
|
- Flashing visual feedback on control buttons for better UX:
|
|
- Volume symbols (🔉 / 🔊) flash on ↑/↓
|
|
- Skip symbols (◀◀ / ►►) flash on left/right (or h/l)
|
|
- Stop symbol (⬛) flashes on s/x just before returning to the list
|
|
- Subtle thin bordered "panel" around the button row (using the same style/color as the inner Now Playing border)
|
|
|
|
### Changed
|
|
- Hint row (full-width bottom bar + faint help text inside the player card) cleaned up for no-wrap and minimalism:
|
|
- Replaced "left/right" text with ANSI arrows (←/→)
|
|
- Extremely terse abbreviations ("vol", "spc/p", etc.)
|
|
- Centered (instead of left-justified)
|
|
- Control symbols refreshed for consistent visual weight (geometric pointer style matching the play ► symbol; less bold/bright than previous technical arrows)
|
|
- Playback card and button panel are now content-sized (width of buttons + minor padding) + centered in the terminal, instead of expanding to full width
|
|
- Global last-used player volume is now persisted:
|
|
- Saved on every volume keypress and observed change
|
|
- Also saved explicitly on clean stop (s/x) and quit
|
|
- Restored on next playback entry (first station of run uses ini value; subsequent stations carry the live session value)
|
|
- Injected via `--volume=...` when launching mpv (respects existing options)
|
|
- Many iterative layout, centering, border, and text polish items throughout the playback view and hint row
|
|
|
|
### Fixed
|
|
- Volume now carries over correctly when using s/x to return to the list and selecting another station (live session value is preferred over re-reading the ini)
|
|
- Various small robustness improvements around volume initialization and persistence
|
|
|
|
See the git history for the full set of TUI polish changes since v2.0.1.
|
|
|
|
## [2.0.1] - 2026-06-06
|
|
|
|
### Fixed
|
|
- CI "Test" and "Build" flows: added `go mod tidy` (and Makefile `deps` targets) before `make test-short` / `make build` / cross to ensure complete `go.sum` for all modules (configparser, wmenu, charmbracelet/* etc.). This resolves repeated "missing go.sum entry" failures in minimal Gitea runners.
|
|
- `TestPrecheck_Unit` now skips gracefully (with clear message) when the configured player (default: mpv) is not installed. Prevents `os.Exit(1)` from failing the root package under `go test -short` in CI.
|
|
- Release workflow: added `shell: bash` to steps using bashisms; `go mod tidy` before cross builds; robust error handling in "Create Release & Upload Assets" (`set -euo pipefail`, `curl --fail`, explicit RELEASE_ID check, debug prints of API responses, "target" and "draft": false). Install scripts and asset packaging improved for portability.
|
|
- Makefile: removed duplicate SHELL lines, added per-platform `go mod download` inside `cross` for CI resilience, `release-notes` target.
|
|
- Pinned Go to 1.24.2 in workflows; modernized old `build.yml` (now proper test+build with checkout/setup-go/cache); cleaned `ci-build.sh`.
|
|
- Re-iterated v2.0.0 tag during debugging; process now stable for proper asset drops on Gitea releases page.
|
|
|
|
See git history for details of the CI/release hardening.
|
|
|
|
## [2.0.0] - 2026-06-05
|
|
|
|
v2.0 ships the new TUI and a pile of rewired plumbing.
|
|
|
|
### Added
|
|
- Add mpv IPC player with playback controls and winamp-style UI
|
|
- Add favorites management (CLI + TUI) and in-filter server search
|
|
- Add custom substring/AND filter for station list
|
|
- Add auto-filter on typing
|
|
- Add vertical volume bar to playback view
|
|
- Add find/play subcommands and JSON favorites support
|
|
- Add unit and integration tests for core functionality
|
|
- Full modern TUI (Bubble Tea + bubbles/list + lipgloss) as the **default** experience
|
|
- Two-stage UI: station selection list → dedicated playback view
|
|
- Playback view inspired by classic Winamp (metadata viewer + controls)
|
|
- `--legacy` flag to force the old wmenu UI (preserved for now)
|
|
|
|
### Changed
|
|
- Reorganize into internal packages
|
|
- Switch to CombinedOutput for command execution
|
|
- Default UI is now the new TUI (no more wmenu unless --legacy)
|
|
- Player abstraction extended for controls and metadata
|
|
- Build/release process modernized (Makefile, cross-compilation, Gitea release workflow + installers) to match other projects
|
|
|
|
### Fixed
|
|
- Fix critical panics and error handling during reorganization
|
|
- Fix config lookups for Windows
|
|
- Fix inverted short guards, format strings and typos
|
|
- Various legacy subExecute / player execution issues from the old architecture
|
|
|
|
See the git history for the full list of changes leading to 2.0.
|
|
|
|
## [0.2] - Previous
|
|
|
|
Legacy wmenu-based UI + initial internal refactoring.
|