Releases: jmshrv/finamp
iOS and way too many changes to list in a title
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
Changes
- 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 dropdown also has the ability to:
- 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.
New storage selector, other minor improvements
This release adds a new storage selector and other minor improvements. This new selector can pick the app's external storage directories, which should get around Android permission issues.
Changes
- New storage selector.
- Add long press on log tile to copy log.
- Added warning for when a custom storage path returns "/" (also changed the text style of that widget).
- The base URL will now be trimmed when logging in, so whitespace at the end shouldn't cause an error.
- Logs should now be properly reversed.
- The logging system now catches Flutter errors. This means that whenever something goes wrong in the UI, the error should show up in the logs. This also includes a stacktrace. Many other errors that were previously not logged should now be logged.
- Added an option to disable audio service low-priority on pause. This option is enabled by default, and allows for the app notification to be swiped away when paused. This also allows Android to kill the service to free resources, which could mean that the audio service is closed when you don't want it to. Disabling this option should keep the audio service running until you manually stop it.
Hotfix for the hotfix
This hotfix fixes all album tab views being grey, which was caused by the fix in the last hotfix.
Grey artist screen fix
This release fixes a bug where viewing an artist's albums will show a grey screen if any of the albums didn't have a release year. Artist's albums are now sorted by the server, like with everything else. I've also added some stuff so that unknown years don't show up as "null".
Custom Download Directories
This release adds a lot of stuff, but the main thing is that you can now choose where to store downloads. Download locations can be configured in the settings screen. You can pick any directory that your phone would usually have access to, including SD cards. On iOS, you can store files in Files. Deleting songs manually (via your file manager) shouldn't break anything, but I wouldn't recommend it anyway.
Changes
- Add custom download directories.
- Use year as subtitle and sort by year when looking at artist's albums.
- Added play/shuffle button to album/playlist screen
- The downloads slider has moved to the top right as a button.
- Add single repeat option to player screen.
- Change some minor things when starting the audio service
- The service will now go into a lower priority state when paused, which should allow Android to kill the service after a long time of inactivity instead of staying on forever. It should also make swiping the notification away work better.
- The audio service is now aware that there is a queue. I don't actually know what this specifically does, but I'd assume it would help with showing the queue on Android Auto.
- The notification channel is now called "Playback".
- The player screen no longer looks weird when nothing is playing.
- The menu drawer is now scrollable, which makes it accessible when split screening.
- Added SafeAreas to elements at the bottom of the screen, such as the now playing bar. This means that those elements won't be behind gesture bars and other stuff like that.
- There is now a stop button on the now playing bar. This stops the whole audio service and is equivalent to swiping the app away in the app drawer.
F-Droid metadata
This release just adds required metadata to release on F-Droid. Nothing has changed in the app.
Transcoding
Improvements
- Transcoding support
- Audio streams can now be transcoded.
- Transcoding can be enabled in the new settings screen (in the drawer).
- Transcoding for downloaded items will come in a later release (if its possible).
- If you're already playing audio and enable/disable transcoding, you'll have to restart the app to load the change (this is related to the known issue related to playing new downloads).
- My implementation may be a bit jank, please report any issues you find. Currently, seeking does not work.
- The copy logs button on the logs screen should actually work now.
- Minor improvements to the logs screen
- Log screen tab bars are now uppercase.
- Log tiles now stay open when out of view, and their icons should stay the right colour.
Hopefully, this release should actually work when upgrading. I tested upgrading to this release from 0.1.0 to this release and everything was fine.
Hotfix for "unknown typeId: 61"
This release fixes the "unknown typeId: 61" people got when upgrading from 0.1.1 to 0.2.0.
Better logging/error messages
Improvements
- The login screen now has a button to access logs.
- Added some info about base url ports on the login screen.
- Reworked logging implementation.
- No longer writes logs to storage, which was useless anyway since logs were cleared on restart.
- The log screen now has separate tabs for the main thread (network/downloads helper) and the audio service.
- Audio service logging should actually work now.
- If the app fails on startup, an error message will be displayed instead of a white screen
- The artists tab now uses album artists instead of artists. If there is demand for a separate tab for just artists, I will add it.
- Added app bar when loading items. This is especially important for iOS since iOS relies on them for going back.
- The downloads overview widget's size is no longer fixed, which should allow for alternate fonts/font sizes to not overflow.
Minor Bug Fix
This release fixes a bug where a property could be deserialised incorrectly. This could cause logging in to fail. If you were able to login fine, there isn't much need to update.