- Replace duplicated year-range building logic in shuffle.ts with
the existing buildYearsParam utility
- Remove stable function import (triggerHaptic) from useCallback
dependency arrays in GenreSelection
* add letter filter parameters to API fetch functions
Add NameStartsWithOrGreater and NameLessThan parameters to:
- fetchArtists
- fetchAlbums
- fetchTracks
These parameters enable direct letter-based filtering without
fetching all preceding items.
* add flattenWithLetterHeaders utility function
Export helper function for merging bidirectional query data
with letter section headers.
* add letter-anchored hooks for bidirectional navigation
Implement useLetterAnchoredArtists, useLetterAnchoredAlbums,
and useLetterAnchoredTracks hooks that use dual infinite queries:
- Forward query with NameStartsWithOrGreater for items from anchor
- Backward query with NameLessThan for items before anchor
This enables instant letter jumping without paginating through
all preceding items.
* add library cache validation hook
Implement useLibraryCacheValidation hook that validates cached
data on app focus using lightweight Limit=0 count requests.
Invalidates relevant queries when library counts change.
* add letter-anchored list components
Create LetterAnchoredArtists, LetterAnchoredAlbums, and
LetterAnchoredTracks components that use the new bidirectional
hooks and support instant A-Z navigation with smooth scrolling
in both directions.
* update library tabs to use letter-anchored components
Switch ArtistsTab, AlbumsTab, and TracksTab to use the new
letter-anchored components for instant A-Z navigation.
* remove unnecessary memoization
React Compiler handles memoization automatically, so useMemo
and useCallback are not needed in the letter-anchored hooks.
* improve AZ scroller letter distribution across screen sizes
* consolidate LetterFilter type, remove unused import, fix cache validation sharing
- Move duplicated LetterFilter interface to shared src/api/types/letter-filter.ts
- Remove unused flattenWithLetterHeaders import from artist/index.ts
- Use module-level state in useLibraryCacheValidation so multiple
component instances share the same throttle/mutex
- delay StorageProvider queries until 2s after initial render
- defer player queue restoration with InteractionManager
- add enabled option to download query hooks
- replace AsyncStorage persister with sync MMKV persister for instant cache restoration
- add refetchOnMount: false to recents queries to use cached data on startup
* These changes include adding an Unplayed filter and also fixing shuffle all to shuffle based on the filtered selection
* Added genre filter and selection page
* Forgot to hit save on this file
* Fixed bug affecting genre filtering
* Shuffle all query now includes the genres
* Fixed trigger to triggerHaptic
* Fixed trigger to triggerHaptic
* Added optional color themes
* Slight adjustment to some dark color presets
---------
Co-authored-by: StephenArg <stephen@vody.com>
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
* These changes include adding an Unplayed filter and also fixing shuffle all to shuffle based on the filtered selection
* Added genre filter and selection page
* Forgot to hit save on this file
* Fixed bug affecting genre filtering
* Shuffle all query now includes the genres
* Fixed trigger to triggerHaptic
* Fixed trigger to triggerHaptic
---------
Co-authored-by: StephenArg <stephen@vody.com>
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
* These changes include adding an Unplayed filter and also fixing shuffle all to shuffle based on the filtered selection
* Fixed trigger to triggerHaptic
---------
Co-authored-by: StephenArg <stephen@vody.com>
Removes item separators between items
Reduce some unnecessary hook usage
Introduces a completely rewritten player scrubber - with better gesture handling for Android, smoother animations, and generally more responsive control. Adds some animations for when the track skips or the user skips to the beginning
* stop buffering if a skip has been requested
* clean up eventing in player provider
fixes#833
* please refresh homescreen more often
* clean up context provider a bit
* smol optimizations
deduplicate player logic for previous and skip
* update CONTRIBUTING documentation
* add react-freeze to prevent unfocused screens from rerendering
* freeze similar until the albums have loaded
* remove unneeded hooks in a variety of played
* display a spinner when loading albums by an artist
* make add to playlist a bit faster and lazier
* move player hooks from provider folder since they aren't dependent on a context provider
* add ability to refresh an artist's page
* add ability to refresh albums too
* make adding a track to a playlist faster
* set query client data when a track is added to a playlist
* do the same trick for removing and reordering tracks from a playlist
* hide miniplayer if the big player is focused for reduced overhead
* fix some styling in the miniplayer
* feat: Add new Maestro tests for album, playlist, artist, and favorites, and enhance existing tests with additional screenshots and refined playback flows.
* feat: Enhance Maestro CI/CD with improved caching, updated Maestro version, and refined emulator configurations for better performance and artifact collection.
* feat: Run Maestro Android tests using a single orchestrated flow file and collect project screenshots.
* fix: Add extended wait conditions to login test to improve stability and prevent flakiness.
* feat: Add test IDs to login, authentication, and library selection screens and update Maestro tests to use them.
* test: make sign out confirmation assertion optional
* feat: Improve login flow robustness by delegating app launch to the login test, increasing wait times, and adding more optional dialog dismissals.
* feat: Add APK caching to Maestro test workflow and conditionally run build steps.
* feat: make sign-out and cancellation steps in test more robust with optional taps and back key presses, and update login page assertion.
* test: remove optional flag from `pressKey: back` action in settings test.
---------
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
Co-authored-by: Ritesh Shukla <riteshshukla2381@gmail.com>
* lots of carplay stuff
* dehookify, carplayify
* player rerender and hook optimization
* make query fetching a lot lazier
* flex miniplayer better
* persistence settings, player screen optimizations
* rollback tamagui upgrade
* fix tests
* fixing add to playlist sheet when there are a lot of playlists
* make the add to playlist mutation less dependent on hooks
* carplay enhancements
* add autoscroll to queue screen
* fix queue autoscroll
* fix unnecessary rerenders
* organize utils folder better
make artist name joining consistent
* fix entire list rerendering on reorder in queue
* Flatten Multiple Recently Played Tracks into Albums
Flattens multiple recent tracks from the same album into an album navigation card
This one is for you Quen <3
When 3 songs or more from an album are in the recently played section, their album will be rendered instead
* fix navigation in the "play it again" list
* fix playing back stuff
* fix playback indexes for recently played
* fixes to the recently played flashlist
* calm it down on animations lol
* make the item context fire less often
* dememoize and stylize
* make this warm context fire less
* animation changes
* smol animation fixes
* adjusting query staletimes
* make the suggestions query fire once a day
* fix jest
* remove useCallback hooks
* fix key usage here
* I don't think these are necessary since we have a separate query for handling user data
* just to compare
* de memoize some more stuff
* fix this button finally
* put this nitro adapter back in
* git blame pikachu
* bruh
* fix up, clean up
* dehookify
* dehookify more
* add track press
* remove some more imports
* styling consitency
* search page improvements
* smol fixes