0.5.0 CONTAINS BREAKING CHANGES THAT WILL CAUSE UPGRADES FROM OLD VERSIONS TO FAIL TO START. WIPE YOUR FINAMP DATA TO FIX THIS
Finamp 0.5.0 is the first release to be available on iOS! A Play Store release is coming very soon, I thought I'd release now so that iOS users can get the app sooner.
iOS link: https://apps.apple.com/us/app/finamp/id1574922594
- Added a songs and genres tab
- The songs tab also has a "shuffle all" button to shuffle all of the songs in your library
- Added app icon (Thanks, @GildartsClive!)
- When selecting a song that isn't the first (such as the middle song in an album), the whole album will be added to the queue, meaning that you can skip back to previous songs.
- Removing songs from the queue should be a bit more stable
- The player no longer fails to start when you leave an album screen before the player has started
- You can now add songs to the queue by either swiping on a song list tile or using the dropdown menu (long press on a song list tile)
- The dropdown also has the ability to:
- Go to the song's album (for example, if you're looking at a song in a playlist)
- Add an item to a playlist (more on this later)
- The currently playing song will now be highlighted in an album view
- The now playing bar will show the artist instead of the album as its subtitle
- Playlist management has been added. This includes:
- Adding songs to existing playlists
- Creating new playlists
- Renaming playlists
- (Removing and deleting items will come in a future release)
- Progress updates should no longer fail and create warning log messages
- Reworked the way that the download/transcode status check is done when adding items
- This check is now done on the main thread. This means that you don't have to stop the player to play new downloads properly
- Added playback status (streaming/downloaded and direct play/transcode) on the player screen
- The duration text is now under the progress slider
- Music tabs now have pull-to-refresh
- Added an app bar to the album screen when an error occurs, so that iOS users can actually go back to the music screen
- Music screen tabs can be hidden in the settings (thanks, @arunk140!)
- The old drawer header has been replaced with the Finamp logo (also @arunk140)
- Added "show favourites" button
- This is currently broken on the artists tab, I'm looking into it
- You can also add/remove favourites on the dropdown menu
- This is also broken with artists
- Disabled autocorrect on base URL input
- Music screen tab content is now paginated (instead of pulling the whole category down at once, do 100 at a time and fetch more as you scroll)
- Added the ability to download all of an artist's albums at once (download button in artist view)
- In the future, I will add a button to download the whole library
- Green accents have been replaced with the accent colour
- Added sort by options on the music screen
- Added support for multiple libraries
- Instead of selecting one library on login, you now select all of the libraries you want to see
- I've decided to show all libraries here, even those that aren't music libraries. Finamp will still only show music items, so selecting a TV library will be pretty useless. I did this for audiobook libraries, which may or may not work if you select them
- User storage has been reworked for greater simplicity (and also to add multiple library support)
- Added a logout button in the settings
Why Breaking Changes?
The first big reason why upgrades won't work is null safety. Dart/Flutter recently released null safety, which makes development way easier. The only issue is that old apps need to be migrated, which basically consists of noting which variables can be null and which ones can't. Finamp has thousands of lines of code that are basically just Jellyfin models (see lib/models/JellyfinModels.dart if you're interested). While going through these models, I also updated them with the newest release of Jellyfin, since many of those models were created with Emby documentation (Jellyfin didn't have any documentation then). These changes make the database system I use freak out and fail to start when given the old data.
The other reason is the new user storage system. In previous releases, I just dumped everything Jellyfin provided at login into the database. This included a lot of stuff that Finamp doesn't use, so I decided to only store what Finamp actually needs. Like the null safety changes, this causes the database system to panic.
I probably could have worked out ways of doing these changes without breaking everything, but that would have taken loads of time and would have required lots of bloat to convert old data to the new format. Since many users will be using the app for the first time due to iOS, I decided to just do it the way I did. It also allowed me to remove old compatibility code that was created over time.