Files
pmomusic/pmoparadise/CHANGELOG.md
2025-10-12 21:34:59 +02:00

2.4 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.1.0 - 2024-10-12

Added

  • Initial release of pmoparadise
  • Core HTTP client for Radio Paradise API
  • Block metadata fetching with get_block() and now_playing()
  • Five quality levels: MP3 128, AAC 64/128/320, FLAC lossless
  • Block streaming with stream_block() and stream_block_from_metadata()
  • Prefetching support with prefetch_next()
  • Builder pattern for client configuration
  • Strong typing for EventId, DurationMs, and Bitrate
  • Comprehensive error handling with thiserror
  • Optional per-track extraction (feature: per-track)
    • FLAC decoding with claxon
    • WAV export with hound
    • PCM sample reading
    • Helper method track_position_seconds() for player-based seeking
  • Optional logging support (feature: logging)
  • Complete documentation with examples
  • Unit tests for data models
  • Integration tests with wiremock
  • Three example programs:
    • now_playing - Display current block and songs
    • stream_block - Stream a block to stdout
    • extract_track - Extract individual tracks (requires per-track feature)
  • CI/CD with GitHub Actions
  • MIT/Apache-2.0 dual licensing

Documentation

  • Comprehensive README with usage examples
  • Detailed module-level documentation
  • Rustdoc for all public APIs
  • Implementation notes and design decisions
  • Clear warnings about per-track limitations
  • Best practices for continuous playback

Architecture

  • Async/await with tokio runtime
  • Feature gates for optional functionality
  • Builder pattern for ergonomic configuration
  • Type-safe API with minimal runtime overhead
  • Stream-based block downloading
  • Integration-ready for PMOMusic ecosystem

[Unreleased]

Planned Features

  • Support for additional Radio Paradise channels (mellow, rock, world)
  • Historical block access by date/time
  • Optional block caching layer
  • WebSocket support for live updates (if API adds it)
  • Performance optimizations for per-track extraction

Known Limitations

  • Per-track extraction is resource-intensive (by design)
  • No built-in block caching (users implement as needed)
  • No authentication support (API is public)
  • FLAC seeking requires full decode (claxon limitation)