Commit Graph

365 Commits

Author SHA1 Message Date
skalthoff
db5906d397 use buildYearsParam utility in shuffle, clean up dependency arrays
- 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
2026-02-18 18:33:21 -08:00
skalthoff
f1be9c00f7 Improve A-Z navigation performance (#980)
* 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
2026-02-18 18:19:20 -08:00
Violet Caulfield
f0935e2063 Merge branch 'main' into improve-cold-start-performance 2026-02-05 12:52:02 -06:00
Stephen Arg
04e5eda574 Added sorting, additional filters, and made some adjustments to how rows present during specific sorting options (#981)
Co-authored-by: StephenArg <stephen@vody.com>
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2026-02-05 12:51:13 -06:00
skalthoff
fa97e8cfce Revert storage persister change to async storage
Keep the query client persister using AsyncStorage to maintain
the existing memory optimization. The sync storage change can
be evaluated separately.
2026-02-05 01:10:36 -08:00
skalthoff
92ee2770d8 Merge branch 'main' into improve-cold-start-performance 2026-02-04 11:09:04 -08:00
skalthoff
1cd06034bc add skeleton loading UI for home sections
- create HomeSectionSkeleton component with animated shimmer
- show skeletons while home data is loading
2026-02-03 19:58:57 -08:00
skalthoff
cc0befeb52 defer non-critical startup operations
- delay StorageProvider queries until 2s after initial render
- defer player queue restoration with InteractionManager
- add enabled option to download query hooks
2026-02-03 19:58:47 -08:00
skalthoff
c3be61c8e6 switch react query persister to sync MMKV
- replace AsyncStorage persister with sync MMKV persister for instant cache restoration
- add refetchOnMount: false to recents queries to use cached data on startup
2026-02-03 19:58:12 -08:00
Stephen Arg
927f6aa973 Added sorting option to library for artists, albums, tracks (#977)
Co-authored-by: StephenArg <stephen@vody.com>
2026-02-03 16:35:08 -06:00
Violet Caulfield
6ed93d9063 fix dark mode background in player 2026-02-02 08:30:14 -06:00
Stephen Arg
bd63fc51de Add color presets with light/dark/OLED per preset (#956)
* 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>
2026-02-01 12:15:49 -06:00
Ritesh Shukla
1c0069e1df feat: migrate to superconfig (#966)
* feat: migrate to superconfig

* feat: mock-test
2026-02-01 08:49:36 -06:00
Violet Caulfield
7271dc0b54 remove usecallback (#965) 2026-02-01 01:29:21 +05:30
Stephen Arg
e8cf80d9f9 Fixed other add to playlist icon (#964) 2026-01-30 15:43:01 -06:00
Stephen Arg
89b8da5098 Adjusted queue scroll so current song is the top row and changed icon for add to playlists (#963)
Co-authored-by: StephenArg <stephen@vody.com>
Co-authored-by: Ritesh Shukla <riteshshukla2381@gmail.com>
2026-01-30 21:29:08 +01:00
Stephen Arg
5fb4eea5f8 Added Genre filtering to the Tracks library view with a multi-select genre picker. (#944)
* 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>
2026-01-30 07:40:04 -06:00
Violet Caulfield
aa09ffd5a3 Fix Image 404s (#961)
Fixing an issue where images for "Most Played" wouldn't be fetched properly

Make the queue screen scroll to the currently playing track when it opens
2026-01-30 07:17:54 -06:00
Stephen Arg
56995f41bb Slightly lowered the quality and size of row images (#960)
Co-authored-by: StephenArg <stephen@vody.com>
2026-01-29 07:15:32 -06:00
Stephen Arg
e5b32f21ed Added explicit tags to song details rows and player and also slightly adjusted the scrubber implementation (#959) 2026-01-28 17:01:57 -06:00
Stephen Arg
4358ba7df3 Add 'Unplayed' Filter and Fix 'Shuffle All' Functionality (#943)
* 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>
2026-01-27 16:56:51 -06:00
skalthoff
3752f40d47 Fix/tamagui switch refactor down stream (#955)
* Refactor haptic feedback handling in SwitchWithLabel component
2026-01-26 23:21:39 -06:00
skalthoff
4850187a7e Refactor haptic feedback handling in SwitchWithLabel component (#954) 2026-01-26 22:06:15 -06:00
Stephen Arg
5fda20a621 Library Filters: Per-Tab Filter System with Modal UI (#942) 2026-01-23 15:34:55 -06:00
Violet Caulfield
075c21c73f verbiage and capitalization 2026-01-21 18:45:02 -06:00
Violet Caulfield
c0f7c97bb3 on skip the track should start playing 2026-01-21 18:38:39 -06:00
Violet Caulfield
68a8dd316e Home Screen Refresh Time Reduction, Add Random Albums to Discover Screen (#932)
* reduce home screen refresh time

eliminate unnecessary network calls

* adds a suggested albums row to the discover screen
2026-01-21 15:04:29 -06:00
Stephen Arg
dc26c3a909 Addressed issue where tracks don't randomize (#931)
* Added changes to randomize tracks instead of just the ones with the same first letters

* Removed eslint config changes
2026-01-21 22:01:56 +05:30
Violet Caulfield
2effdd4c02 fix issue where skipping to the next track would start playback 2026-01-19 20:13:42 -06:00
Violet Caulfield
ef1039c29c fix issue where skipping previous would always start the track 2026-01-19 20:07:58 -06:00
Violet Caulfield
955f534b36 UI Suggestions, Scrubber Rewrite (#910)
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
2026-01-19 19:19:45 -06:00
Violet Caulfield
a677ffc602 Display spinner if playlist is being added to (#909) 2026-01-11 04:03:22 -06:00
Violet Caulfield
18136cd8d8 stop buffering if a skip has been requested (#894)
* 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
2026-01-07 15:13:38 -06:00
skalthoff
05cf340e8f feat: Add new Maestro tests for album, playlist, artist, and favorites, and enhance existing tests with additional screenshots and refined playback flows. (#887)
* 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>
2026-01-05 04:46:38 -06:00
Violet Caulfield
a8dde09a5e Remove throttle time in query client (#893) 2026-01-02 15:24:03 -06:00
Ritesh Shukla
72b7183854 Persist player progress to mmkv and restore on app opening (#890)
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2026-01-02 10:21:50 -06:00
Violet Caulfield
7e897aab75 Bugfix/support albums in carplay (#888)
* 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
2026-01-02 10:21:01 -06:00
Violet Caulfield
d06e6f36fc Feature/flatten recently played tracks into albums (#878)
* 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
2025-12-30 16:27:09 -06:00
Ritesh Shukla
8ee9d6253d fix: rerender (#886)
fix unnecessary rerenders caused by hooks
2025-12-30 09:25:21 -06:00
skalthoff
114c1ddef1 fix: Reset player state and hide miniplayer when queue becomes empty after track removal or refresh. (#880)
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2025-12-29 15:38:42 -06:00
skalthoff
6f5549c654 fix: update component keys to use song ID for accurate re-rendering or player and miniplayer. (#881)
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2025-12-29 15:38:08 -06:00
skalthoff
949d6b44f7 feat: add SortName to playlist item fields (#879) 2025-12-29 13:06:10 -08:00
Violet Caulfield
e9b516911e remove memoization on swipeable row, track padding with artwork 2025-12-29 09:49:11 -06:00
Violet Caulfield
f19b6ebfb4 move to a faster image component and reduce image flicker 2025-12-29 07:43:04 -06:00
Violet Caulfield
a84986ae6e RN Upgrade, Tidying Up Configs (#875)
* react native upgrade

tidying up configs and moving to the config folder

* remove unneeded patch file and dns dependencies
2025-12-28 18:12:19 -06:00
Violet Caulfield
27b3107610 hide artist name on albums when on artist page 2025-12-26 11:00:55 -06:00
Violet Caulfield
c01a750ed0 show year and runtime for albums on artist page 2025-12-26 10:51:32 -06:00
Violet Caulfield
b76468c29e fix crash when artist is not set for an album 2025-12-26 09:00:34 -06:00
Violet Caulfield
8536ca67bf Add some TS Docs around axios configuration
update README
2025-12-24 07:22:58 -06:00
Violet Caulfield
170d483da7 fix to playlist mutation calls 2025-12-23 17:18:25 -06:00