Repository navigation
Releases
0.12.3
commit log
patch a bug in valdi to fix a possible crash.
features
- cli: require stream key for connection to audio port
- cli: stream each track in its own format to keep output bit perfect
- cli: flush held audio on every speaker at pause, seek, skip and clock switch so presses land at once
- cli: make stream latency configurable and count late chunks on members
- cli: drive multiple speakers via the first one on the players tab
- cli: support other speakers joining daemon on audio source port for control of multiple
- cli: stream audio from server daemon to other speakers
- cli: stamp times on stream chunks for sync playback co-ordination
fixes
- app: re-read the source's stream key on join and show follower details on players tab
- build: patch valdi crash when the JS GC releases a Kotlin function
- build: add package overrides for vulnerabilities
- build: inline pending intent flagged by mobsf scan
- app: don't send pause command at the end of the queue
other
- cli: remove unused clock
- cli: remove scheduled starts left over from before sync leader model changes
- cli: add test for gapless when changing rates
- deps: bump jaxxstorm/action-install-gh-release from 3.0.0 to 4.0.0 in the github-actions group (#50)
- build: move valdi version back to main now my changes are all merged
- deps-dev: bump the bun-dependencies group with 10 updates (#47)
- deps: bump the github-actions group with 5 updates (#48)
- deps-dev: bump the bun-dependencies group across 1 directory with 11 updates (#45)
- deps: bump the github-actions group with 3 updates (#46)
0.12.2
fix thumbnail images missing on downloads in a few views
commit log
features
- cli: add ability to co-ordinate playback start with a specified clock delay
- cli: add clock endpoint to co-ordinate syncronisation
- cli: ensure gapless playback from daemon
- app: native callback events to js to keep sending remote player events when phone is locked
- app: long poll remote players to show state on players tab
- app: route actual audio and actions to remote player
- app: this device toggle on player handles silencing audio without stopping playback
- cli: add initial clock sync scaffolding
fixes
- app: a few components missing the thumnail image
- e2e: test stability fixes
other
0.12.1
a few fixes for image handling in offline mode
scrobbling fixes
the new players UI is feature flagged off for now, more on that soon
commit log
features
- app: wire credentials through to controller after in app pairing
- app: wire up players tab to actual player store
- app: wire up add player flow to actual cli
- app: add player transport in app
- cli: show proper network address during pair command to make pair process easier
- app: support removing players
- app: drag to re-order players
- app: add player modal
- app: enable toggling players on and off
- app: add initial mocked players tab UI
- app: add initial players store with mocked data to build out UI
- app: add feature flagged players tab
fixes
- app: prevent 404s from draining scrobble queue and handle scrobble notification better
- app: avoid scrobble retries that keep firing in offline mode
- app: ensure only valid 401s trigger re-auth flow
- app: ensure downloads are properly gated by offline mode and pause inflight on toggle
- app: ensure offline mode doesn't try and fetch images at all
- build: pin android rules to version that won't 503 in CI all the time
- app: enable encryption on player tokens stored in app
- app: only send player commands on wifi and do a hello to validate ids before auth
- app: trigger player re-auth on opening players tab
- cli: support restart from stopped timestamp on relaunch
- app: set same header syntax in native as well
other
- build: bump test deps with vulnerabilities
- deps: bump the github-actions group with 4 updates (#40)
- docs: update screenshots in README
- docs: update screenshots generation scipts to update README
- app: extract out some more of the reorder logic
- app: extract drag re-order logic out into re-usable component
- deps: bump the github-actions group with 5 updates (#39)
- app: UI tweaks and fixes for players tab
0.12.0
add to up next, proper session expiration handling & more
add to up next
Sometimes you want to take a detour and interrupt the album or playlist you are listening to with a few additions.
You can do that with play next and add to queue, but what about when you want to play something after the thing you just lined up next, but before the rest of the items queued up?
add to up next does exactly that. It's a special queue at the top of your queue that lets you keep lining things up before the main queue. Each item you add to up next gets inserted at the end of the up next queue, meaning the album or playlist you were listening to will resume again, right where you left off before the detour.
session expiration modal
Session expiration is now gracefully handled in the app (before it just silently failed requests).
It the server returns a response saying your token is no longer valid, you will get a modal prompting you to sign in again.
You can remain offline and keep the full offline functionality working, and if you try to toggle back to online mode later you be shown the modal again.
request cancellation
I've been making some contributions in Valdi (the framework used to build the app), one of those was needed to work on some functionality for the upcoming CLI, so I've moved the version the app is built against from the beta release to my branch with those changes (which has now been merged, so I'll re-point it at the Valdi main branch soon)
As a bonus I now have access to some of the request cancellation fixes (Snapchat/Valdi#117 & Snapchat/Valdi#142), so the handling here has been updated to ensure cancellation and timeouts are being handled gracefully in app.
auth header consistency handling (for Jellyfin v12)
Jellyfin v12 is out 🎉
It deprecates some previously used auth headers, so I've taken the opportunity to review and update the auth header handling as per https://gist.github.com/nielsvanvelzen/ea047d9028f676185832e51ffaf12a6f and make sure we're using the MediaBrowser header with token consistently so everything should remain functional on Jellyfin 12.
more CLI stuff
The CLI is making good progress. I've been testing out the full functional version locally, and will be making a start on the app integration side of things required to actually release. More on that when it's ready.
commit log
features
- cli: wire up jellyfin transport in CLI for proper playback
- cli: add auth to gstreamer sources
- app: add to up next for better queue insertion
- app: thread new auth header config through native
- app: split out device id and device name in settings
- jellyfin: use new single location header helper in live transport and auth service
- jellyfin: add single location to create auth header
- cli: hook up media server flow
- cli: add /media-server route handler
- sync: add /media-server endpoint to server
- app: trigger session expired flow from native requests as well
- app: unauthorized errors from server prompt re-auth modal
- cli: wire up selected audio device to playback
- cli: add command to list audio device outputs
- cli: actual audio playback triggered by the server
- cli: hook up zig audio player into cli app
- cli: wire up initial audio player
- cli: add initial gstreamer load skeleton
fixes
- cli: restarted daemon keeps its track queue
- cli: make header using consistent and add some more test setup
- core: proper request cancellation and timeout handling now fixes are merged in valdi
- app: ensure tap in queue is attributed to actually tapped track not a duplicate
- app: fresh auth flow broken by 401 handler
- app: hook up connectivity toggle to re-auth modal when session expired
- build: fix android build following moving of valdi pin
- ensure default device ids that get generated are unique
- build: fix issues following moving of valdi pin
- build: install gstreamer deps in CI
- cli: better daemon log output and test stability fix
other
- app: move quick connect pannel into own component so it can be used in reauth modal
- deps: bump the github-actions group with 4 updates (#38)
- build: point at my valdi fork to start working with cli httprequestmanager
- cli: add http file to test player controls directly via server
- app: move NativeAudioPlaybackEventSync into player module so it can be used in CLI as well
0.11.5
open the card context menu from any detail view header so you can easily access all of the options without needing to go back to the grid view.
all of the other changes are for the CLI (which is not release yet, but getting there).
commit log
features
- app: show card context menu from long press of detail header artwork
- cli: wire up /state endpoint bridge
- cli: wire up /state endpoint
- cli: update /state in openapi spec
- cli: wire up /command to playback store
- cli: wire up controllers file locations to actual http server
- cli: add /command endpoint with properly wired up credentials
- sync: update openapi spec for /comamnd endpoint
- sync: add initial sync player client
- cli: add initial sync module with types generated from openapi spec
- cli: wire up pairing via the server
- cli: make host address configurable as well
fixes
- build: on this day mocks no longer resolving
- cli: rename route to /command
- cli: all routes should return proper problem+json
- build: CI needs new module for projectsync cache
other
- app: move playlist creation/addition into flows for easier re-use
- build: add missing sync tests to ts config and use root config to simplify compile
- cli: add transport and use client in e2e test
- build: update deps with vulnerabilities
- cli: add e2e cli test for pairing
- deps: bump orhun/git-cliff-action in the github-actions group (#37)
- build: split openapi things out into their own workflow job
- cli: use generated types in existing pairing code
- cli: add initial openapi spec for the headless server
- cli: test hardening and some edgecase fixing
0.11.4
on this day cache is now configurable, so if you go away for 2 weeks and don't have access to your server your home screen will still look like it's working as usual.
a lot of other changes, all related to something coming soon...
...but if you read the commit log you'll probably get the gist.
commit log
features
- cli: add problem+json responses to http server
- cli: add api version header checks
- cli: server body can now cross the valdi bridge
- cli: wire zig server bridge into cli run so server can call out to Valdi
- cli: add zig logger so we can log the output from the http server without js thread
- cli: wire up /hello route in http server and cli run command
- cli: wire up http server in run command
- cli: add zig http server
- cli: add zig rate limiter logic for upcoming http server
- cli: add zig crypto random for pairing code
- cli: wire up pair command with pair code generation
- cli: add initial player identity
- cli: wire up additional player config values
- cli: wire up player config store skeleton to cli
- cli: adds skeleton for long running daemon process
- app: add setting to select how far ahead to cache on this day results
fixes
- build: use different cache for cli builds so they don't share same newser glibc version
- build: use consistent base ubuntu images for cli builds to get same glibc versions
- cli: handle 0 status response from bridge
- cli: swap to smp_allocator to avoid -lc to fix glibc compatibility issue
- build: fix build-headless script for macos cli build
- build: zig for cli needs -lc flag for linux builds
- cli: linux-amd64 needs directory creation before writing the file
- build: fix amd cli build
- build: buil headless as part of check:full
- cli: wrap file write in try catch so promise rejects properly
- cli: langauge change should take effect immediately and some config tidy ups
- core: make logger writer configurable so we can use it in CLI as well
- player: handle resume mid progress after the app was terminated
other
- build: add initial README in each module
- build: speed up local e2e parallel build and test
- cli: add cross arch e2e cli tests runnable locally & fix the cross arch issues
- build: move e2e cli job to importable action
- cli: split out pair conde and connections into their own files
- build: rename release flag for clarity
- build: swap matrix for explict builds
- build: run cli e2e tests in CI after build
- cli: add initial e2e CLI test for pair
- cli: add initial e2e CLI test for config
- cli: add initial e2e CLI test for init
- cli: add initial e2e test set up for CLI
- build: move app e2e tests into their own nested directory
- build: add codeowners
- build: add cooldown to depndabot config
- deps-dev: bump the bun-dependencies group with 15 updates (#35)
- deps: bump the github-actions group with 5 updates (#36)
- cli: rename built cli for consistency of invoking
- cli: tweak logo tentacles
- player: split out progress and queue stores to avoid need to write large queue blob regularly
0.11.3
bug fixes and some groundwork for new functionality.
commit log
features
- cli: add config and init commands with ability to set CLI language
- cli: add custom argparser to prevent error output logs and tidy up approach
- cli: add localised strings set up to CLI
- headless: add command skeleton for CLI
- build: add initial headless CLI build skeleton
fixes
- app: defer cached-track waveform decode behind the playback cushion
- app: lazy init waveform generation queue to prevent overload at startup when downloading long playlist
- ui: support refecthing stale images better
- player: handle changes to play next so queue updates correctly
- app: update dev section on language changes
- cli: run header tweaks
- build: remove bun from headless build and pin image to sha
- build: fix palette preview following lyrics changes to player
other
- build: extract dev version setting to own script so it works for CLI as well
- cli: better help text
- app: move language options into core
- app: move copy out of core
- cli: add placeholder examples of command help text
- cli: tidy up the commands
0.11.2
commit log
fixes
- ui: support closing player from lyrics pannel as well
- app: lyrics cache handling improvements
- ui: online mode should route logo requests through cache like offline mode to avoid flashes on modals
- build: add some bazel flags that should speed up the fetching for the analysis step
- build: speed up icon generation for quicker CI
other
- build: add bazel flag to retry remote cache failures
- build: REVERT "swap out github cache to test if it's all coming from buildbuddy now"
- build: swap out github cache to test if it's all coming from buildbuddy now
- build: simplify icon generation in CI now it's quick enough it doesn't need backgrounding
- build: rename workflow
- build: run app builds on push workflow to keep cache warm
- ui: update language text to caps for consistency
0.11.1
more modals & cache fixes
Add playback control modals to the sections on the home tab so you can shuffle your recently added or create a playlist from your on this day list.
Adds shuffle to the card context modal so you don't need to open the item detail view to shuffle (all other actions were available on the modal, that one was missed).
Refactor some image cache implementation bits to fix some artist logo display bugs.
commit log
features
- app: add home context menu modal
- app: add shuffle to card context menu
fixes
- app: hook up playlist flows to home context menu
- ui: home section headers should use same styling as other tabs
- ui: await palette generation from playback triggered via card context menu
- ui: artist logo should always resolve
- ui: refresh detail view on transport mode toggle
other
- ui: move modals into own ui dir
- app: remove dead image cache code no longer in use
- app: post image cache fix tidy up
- app: make image cache readable from just the id to simplify logo handling
0.11.0
🎤 add support for lyrics
Got lrc files on your server? Now atolla can display them!
Swipe the album art left on the player to view the lyrics for the track, or long tress a track to open the track context menu and select lyrics from there.
If your files have timing data, the player view will highlight the active line so you can follow along.
Want to download the lyrics files to keep them working with all of your offline tracks? Enable toggle Settings > Downloads > include lyrics.
This release also includes a number of repo restructuring changes to split parts out into their own modules, required for some exciting upcoming functionality. But you'll have to stay tuned for more on that...
Implements #34
commit log
features
- ui: highlight active lyric lines on now playing playback
- ui: add lyrics to now playing surface
- app: make lyrics available via the track context menu
- app: hook up lyrics service and store to settings cache clear
- app: add LyricsService and LyricsStore
- app: add initial transport plumbing for lyrics
fixes
- build: handle tz difference causing bun 1.4.0 test failure
- e2e: harden flaky lyrics tests
- ui: padding and spacing tweaks
- ui: show toast on no lyrics tap, fix padding and more legible icon
- player: android fix restart crash trying to create session for previously played track on app restart
- ci: swap key alias to a variable so it doesn't get redacted in CI breaking atestation urls
- ci: remove noise created by mobsfscan that don't actually apply
other
- e2e: add tests for lyrics views
- build: add more lyrics lines to test scroll
- build: add lyrics to mock server for testing
- app: move player logic into it's own atolla_player module
- app: extract jellyfin specific errors from general auth errors
- app: split out initial atolla_jellyfin directory
- app: split out initial atolla_core directory
- app: rename ap directories in prep for exciting new module splits