Skip to content

Releases: jmshrv/finamp

0.6.0

10 Apr 02:09
Compare
Choose a tag to compare

After a short wait of 245 days (plus app store processing times), 0.6.0 has been released! This release adds many features and improvements, way too many to summarise in this bit of text at the top. Thank you to the following contributors for submitting changes to this release!

What Took you so Long?

As I said in the first line of this release, it's been a while. I started university last September, which has taken up a lot of my free time. If you look on my GitHub, you can see a sharp drop in activity past September. I kind of underestimated just how little time I had - I initially predicted this release would come out around November, then December, then by the end of the year, and so on. I'm nearly done with this academic year, so hopefully I should be able to do a lot of work on Finamp over the summer. Sorry to anyone who's been affected by bugs that were fixed back in August, and to those who I gave massively inaccurate release timelines.

A Note on Custom Locations

Custom locations have never worked well in Finamp. This is due to Android and iOS expecting URLs instead of direct paths. Flutter doesn't support URL paths, so file I/O gets dodgy when you leave the app's own directories. I've made the warning for custom locations more clear. I'm thinking of ways to improve this situation, but that's a long way off. If you're on Android and want to store songs on the SD card, use the "App Directory" option instead as it is much more reliable.

Changes

Highlights

First of all, I wanted to get download syncing done for this release. Because of a lack of time (and general jankiness around the current download system), I have postponed that idea until a later release.

  • Image downloading! To download images for current downloads, click on the image icon button in the downloads menu. This change required a major refactor of how songs are stored, so let me know if you have issues with downloaded songs being lost/not playing properly.
  • Added favouriting songs via their list tile
  • The current library is now displayed on the music screen app bar (@rom4nik)
  • You can now tap on queue items to skip to them (@tabjy)
  • Added grid view for music screen (switchable in the settings!)
  • Fixed seeking in transcodes
  • Fixed logout not working when Finamp can't talk to the server for some reason (sorry to the many people who've reported this bug after it was fixed in September)
  • Use the song's individual image if it has one - this should be consistent with how Jellyfin Web chooses images
  • Track numbers on album screen and disc number headers (@rom4nik)
  • Sleep timer
  • Select libraries after initial setup (@rom4nik)
  • Getting favourite artists now works
  • Add favourite button on the player screen (@cmsimike)

Full Changelog (excl. highlights)

  • The now playing bar is now hidden when nothing is playing
  • Added list reordering (I forgot I implemented this and it seems to have broken, hence it not being a highlight. Oh well, I'll fix it in 0.6.1)
  • The seek bar has been greatly improved and is much less jank. Also, it scrolls much more smoothly.
  • The album image on the player screen should be better at adapting its size, so it no longer looks broken when on landscape tablets
  • Migrated to audio_service v18, which rearchitected how the audio service works. This means that Finamp will now better fit in with how Android 11 expects players to work (i.e. staying in the notification area).
  • Display all track artists in various places (@rom4nik)
  • The download location popup is no longer shown when there is only one location
  • Added a fancy opening animation for albums, which I'll remove in 0.6.1 since it's a bit jank
  • Added a button in the dropdown to replace the queue with a specific item
  • Make Android splash screen black (@rom4nik)
  • Fix Android navigation bar flickering on splash screen (@rom4nik)
  • Add album name on player screen (@rom4nik)
  • Replace the term "date created" with "date added" since it caused confusion
  • Stop backup providers from backing up Finamp's data (i.e. all of your downloaded songs)
  • Skip music library selection if there's only one available during setup (@rom4nik)
  • Disable logging out in offline mode as it needs to send a network request
  • Use the iOS progress indicator on iOS
  • Android should now see Finamp as a music app
  • Fixed images and song playback when Jellyfin was published with a path (@nboumalham)
  • Use the term "Server URL" instead of "Base URL" because base URL is a bit too technical
  • Use iOS device name instead of model when reporting device to the server
  • Decrease the font size of the download text because apparently people have 10000 downloads now (@asgardius)

Bug Fixes

07 Aug 18:44
fcf4eb7
Compare
Choose a tag to compare
Bug Fixes Pre-release
Pre-release

This release fixes some bugs and brings some minor improvements. It is also the first release to use a SKSL cache, which greatly reduces first run jank on animations. This is especially important for iOS, where "first run" means every time the app is launched.

Changes:

Important changes are bold.

  • Fix audio service logs not showing.
  • Fix logout stall on iOS.
  • Fix logout failing if auth is already failing (can happen if the user's token is invalidated on the server).
  • Add workaround for iOS changing directories (I'm looking into a more long-term solution for this but it should be fine for now).
  • Add back the check that enabled the startup error screen.
  • Offline song search should work now.
  • Improved the way that downloaded indicators work. It still isn't perfect, but downloaded indicators should mostly properly change from downloading to downloaded in real-time.
  • Greatly improve how DLs are counted in Downloads Overview. The old method was very slow and caused severe jank with large collections.
  • The list of downloaded albums is no longer sorted since there isn't really a point and it was bad for performance.
  • Fix downloading from a HTTP server that uses a URL on iOS
  • The server URL and token is now hidden when copying logs.
  • Updated dependencies (fixes issue where the audio service wouldn't stop properly)
  • The player screen no longer overflows when landscape on iPads.
  • Rename "Customisation" settings to "Tabs" since that screen only has tab settings
  • Configure amount of songs played with shuffle all. This is important for shuffling large libraries where thousands of songs could cause instability. The default is 250 and it can be configured in settings. The shuffle all button will also properly shuffle in offline mode too.
  • Changed the way shuffling works. On Android, shuffling would basically skip into half of the chosen playlist. Now, it has the same behaviour as iOS where the first song is always the first. I'm looking into properly fixing this so that shuffling an item returns a properly random queue.
  • The Finamp folder is now hidden on iOS
  • Fixed random grey screen when removing queue items.
  • Fixed audio service crash when whole queue is dismissed.
  • Properly tell Jellyfin about progress updates. This should fix last.fm scrobble issues.
  • Build with SKSL cache.
  • Added proper notification icon on Android.
  • Removed useless microphone permission prompt on iOS (it was needed for the audio player when I was making the app but it's not needed anymore).

iOS and way too many changes to list in a title

11 Jul 14:55
Compare
Choose a tag to compare

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 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

09 May 00:15
Compare
Choose a tag to compare

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

01 May 01:32
Compare
Choose a tag to compare
Hotfix for the hotfix Pre-release
Pre-release

This hotfix fixes all album tab views being grey, which was caused by the fix in the last hotfix.

Grey artist screen fix

01 May 01:18
Compare
Choose a tag to compare
Pre-release

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

29 Apr 22:15
Compare
Choose a tag to compare
Pre-release

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

11 Apr 18:01
Compare
Choose a tag to compare
F-Droid metadata Pre-release
Pre-release

This release just adds required metadata to release on F-Droid. Nothing has changed in the app.

Transcoding

11 Apr 00:31
Compare
Choose a tag to compare
Transcoding Pre-release
Pre-release

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"

10 Apr 23:44
Compare
Choose a tag to compare
Pre-release

This release fixes the "unknown typeId: 61" people got when upgrading from 0.1.1 to 0.2.0.