github dddevid/Musly v1.0.3

latest releases: v1.0.8, v1.0.6, v1.0.5...
3 months ago

Changelog

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

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

[Unreleased]

Added

Internet Radio Support (closes #12)

  • Added full support for internet radio stations from Subsonic/Navidrome servers
  • New RadioScreen with list of all configured radio stations
  • Radio stations display with play/pause controls and "LIVE" indicator
  • Mini player shows radio station name with "LIVE" badge when streaming
  • Now Playing screen has dedicated radio player UI with streaming indicator
  • Added RadioStation model and API methods (getInternetRadioStations, createInternetRadioStation, updateInternetRadioStation, deleteInternetRadioStation)

Auto DJ - Automatic Queue Continuation (closes #10)

  • New AutoDjService for intelligent automatic queue continuation
  • 5 Auto DJ modes:
    • Off: Playback stops when queue ends
    • Shuffle Library: Add random songs from library
    • Similar Songs: Add songs similar to what's playing (via getSimilarSongs API)
    • Same Genre: Add songs from the same genre
    • Same Artist: Add more songs by the same artist (via getArtistTopSongs API)
    • Smart Mix: Intelligent mix based on tempo, genre, and listening habits
  • Configurable number of songs to add (1-20)
  • Settings UI in Settings screen under "AUTO DJ" section

ReplayGain Volume Normalization (closes #9)

  • New ReplayGainService for audio volume normalization
  • 3 modes: Off, Track (normalize each track), Album (preserve album dynamics)
  • Configurable preamp gain (-15 to +15 dB)
  • Prevent clipping option
  • Fallback gain for tracks without ReplayGain metadata
  • Settings UI under "VOLUME NORMALIZATION (REPLAYGAIN)" section

Player UI Customization (closes #14)

  • New PlayerUiSettingsService for player interface preferences
  • Option to hide volume slider from Now Playing screen
  • Settings UI under "PLAYER INTERFACE" section

Navigation Improvements (closes #1)

  • Persistent bottom nav bar and miniplayer: Navigation now preserves mini player and bottom navigation across all screens using nested navigator
  • Clickable "Playing From" album/artist names (closes #13)
    • Clicking album name in Now Playing header navigates to AlbumScreen
    • Clicking artist name navigates to ArtistScreen
    • Visual underline indicates clickable elements
  • Multiple artists support: When artist contains "/" separator (common in Subsonic), shows selection dialog to choose which artist to navigate to
  • New NavigationHelper utility for nested navigation with persistent bottom bar
  • Navigation now preserves mini player and bottom navigation when pushing screens

Swipe to Dismiss Player (closes #15)

  • Swipe down gesture on Now Playing screen to minimize player
  • Smooth morph animation: screen scales down, corners round, controls fade
  • Background visible during swipe (opaque route)
  • Velocity-based dismissal threshold

Improved Back Button Handling

  • Android back button now properly navigates through app hierarchy
  • First press: pops nested navigator (goes back in detail screens)
  • Second press: returns to Home tab if on another tab
  • Third press: exits the app
  • Uses PopScope with SystemNavigator.pop() for clean exit

Search Enhancements

  • Real-time autocomplete suggestions while typing
  • Debounced search to reduce API calls
  • Autocomplete overlay showing artists, albums, and songs
  • Radio category added to browse categories

All Songs Improvements (closes #11)

  • Added sort options for songs list
  • Play and shuffle play buttons for song collections
  • Improved playback controls in song lists

SSL/TLS Certificate Support (closes #7)

  • Support for self-signed certificates
  • Custom certificate path configuration
  • Proper certificate validation handling via IOHttpClientAdapter

Changed

  • Mini Player: Now shows for both regular songs AND radio stations
  • Now Playing Screen: Converted _PlayerControls from StatelessWidget to StatefulWidget to support dynamic volume slider visibility
  • Lyrics View (closes #5):
    • Improved scroll positioning using GlobalKey for precise line targeting
    • Better height estimation with TextPainter caching
    • Fixed waiting dots position in calculations
    • Changed to use Scrollable.ensureVisible for centered scrolling
    • Fixed text stability issues during playback
  • Settings Screen: Reorganized with new sections for Auto DJ, Player Interface, and ReplayGain
  • Search Screen: Added resizeToAvoidBottomInset: false to prevent mini player jumping with keyboard

Fixed

  • Mini player not appearing when playing radio stations
  • Removed duplicate MiniPlayer widgets from various screens (now handled centrally in MainScreen)
  • Fixed navigation from nested screens breaking mini player visibility
  • Fixed back button immediately exiting app instead of navigating back
  • Fixed pressing rewind in Now Playing screen freezing progress bar (closes #8)
  • Fixed search button in "Your Library" page not working (closes #16)

Technical

  • Added new services:
    • PlayerUiSettingsService - Player UI preferences
    • ReplayGainService - Volume normalization
    • AutoDjService (extended) - Auto DJ modes and queue continuation
  • Added new models:
    • RadioStation - Internet radio station data
  • Added new utilities:
    • NavigationHelper - Nested navigation with persistent bottom bar
  • Added new screens:
    • RadioScreen - Internet radio stations list
    • LibrarySearchDelegate - Library search functionality
  • New Subsonic API methods:
    • getInternetRadioStations()
    • createInternetRadioStation()
    • updateInternetRadioStation()
    • deleteInternetRadioStation()
    • getSimilarSongs() / getSimilarSongs2()
    • getArtistTopSongs() / getTopSongs()
    • getSongsByGenre()
  • Added file_picker dependency for future file selection features
  • Updated pubspec.yaml with new dependencies

Issue References

  • #1 - Persistent bottom nav bar and miniplayer across screens
  • #5 - Lyrics text stability
  • #7 - Support custom TLS/SSL certificates
  • #8 - Pressing rewind in "now playing screen" freezes progress bar
  • #9 - Add ReplayGain volume normalization
  • #10 - Auto-DJ for "Playing Next" automatic queue continuation
  • #11 - All Songs: Add sort options and playback (play button, shuffle play)
  • #12 - Import internet radio stations
  • #13 - Clicking on "Playing From" to go to the album or artist page
  • #14 - Option to hide volume bar from player
  • #15 - Swiping down on player's top edge to minimize the player
  • #16 - Search button in "Your Library" page doesn't work

Don't miss a new Musly release

NewReleases is sending notifications on new releases.