commits
fix: preserve original station ID when creating Station from StationLinkDetails
feat: add interactive TUI mode with favorites system
- Implement full-featured terminal UI with menu navigation, search, and station browsing
- Add persistent favorites storage using JSON configuration files
- Create audio controller with playback state management and metadata polling
- Support volume control, station metadata display, and now-playing updates
- Enable direct station playback and resume last played station functionality
- Add keyboard shortcuts for common actions (play, stop, favorites, volume)
- Integrate with existing providers (tunein, radiobrowser) for station discovery
- Update decoder to handle optional frame transmission for audio worker thread
- Modify main CLI to launch interactive mode when no subcommand is specified
fix metadata not updated
enable LTO in release build
OS media controls
Allow user to decide how often events are polled. This helps reduce
resource consumption while still providing smooth playback and user
decides which one they prefer.
It is possible that the player thread returns before this thread has a
chance to, this would mean that the sender is dropped and thus the
`recv()` would return an `Err`. Since this is the only time an `Err`
would be produced, it is safe to return from this function instead of
hoping it might be able to receive a frame again and thus continuing
within the function.
If thread is not put to sleep, it would spin continuously and thus
consume a lot of resources. This prevents that.
Allow user to decide if OS media controls should be enabled.
Setup the [`OsMediaControls`], process the ones reported by the OS.
Support for player controls (play, pause, volume control)
Prior to this, once paused, would get stuck at receiving the frame
since the receiver sleeps when nothing is available, thus no events
are polled. By receiving only when playing, this eliminates the issue.
NOTE: cannot use `try_recv()` since it would lead to flickering when
this thread is running faster than the audio producing thread.
This prevents the problems of floating point, usually the person just
wants to adjust the percentage, doesn't care about the actual ratio.
This allows using `KeyCode::Char(' ')` to play and pause.
This adds play, pause & playpause functionality. The media keys
haven't been tested but in theory should work.
This is so that media controls work when implemented.
- Implement full-featured terminal UI with menu navigation, search, and station browsing
- Add persistent favorites storage using JSON configuration files
- Create audio controller with playback state management and metadata polling
- Support volume control, station metadata display, and now-playing updates
- Enable direct station playback and resume last played station functionality
- Add keyboard shortcuts for common actions (play, stop, favorites, volume)
- Integrate with existing providers (tunein, radiobrowser) for station discovery
- Update decoder to handle optional frame transmission for audio worker thread
- Modify main CLI to launch interactive mode when no subcommand is specified
It is possible that the player thread returns before this thread has a
chance to, this would mean that the sender is dropped and thus the
`recv()` would return an `Err`. Since this is the only time an `Err`
would be produced, it is safe to return from this function instead of
hoping it might be able to receive a frame again and thus continuing
within the function.
Prior to this, once paused, would get stuck at receiving the frame
since the receiver sleeps when nothing is available, thus no events
are polled. By receiving only when playing, this eliminates the issue.
NOTE: cannot use `try_recv()` since it would lead to flickering when
this thread is running faster than the audio producing thread.