will use and store data retrieved from the server first, else will rely on a fetch
this addresses battery life issues, as these queries were firing network requests far more frequently and for each item, causing unnecessary network usage and overhead
update tanstack query to the latest while we're in there
Refactors haptic feedback usage to use a hook that will determine based on the user input if a haptic feedback event should be triggered. This fixes the issue where users would get haptic feedback even if the toggle for reducing it was enabled
Refactors login flow to use external hooks to clean up components and split display vs functional logic
Fixes DNS lookups in login flow. Now when a hostname connection fails, Jellify will properly perform a DNS lookup to determine the proper IP address of the Jellyfin server
This should address issues with users connecting over Tailscale or relying on a custom DNS entry configured locally
* update react navigation
Get alphabetical selector working for albums. Now an A-Z will appear to the right of the albums list and users can use that to get to a certain letter of albums in the list
Under the hood - also updates the dependencies for React Native and Tanstack Query
Make gesture in the alphabetical selector better, especially when tapping on a letter. When users tap on a letter now, they will be brought to that section of the artists list
Fix issue where Artists in the Library would show "0 Albums". This will now instead display the artist's genres instead
Moves the network status state to a Zustand Store for better reusability and to reduce the complexity of the network context
No new user facing changes
*Mostly* backend work in the settings tab
Migrate settings context over to MMKV backed Zustand store. Update hooks as needed
Update info tab styling - making the patreon patrons list it's own section. A perfect time to remind everyone you can sponsor Jellify on GitHub or Patreon :)
Joining the patreon as a paid member will get your name displayed in the info area of the settings tab
Implements proper server negotation for performing transcoding
Depending on the user's platform (i.e. iOS, Android) and the desired quality specified in the settings, Jellify will playback a transcoded audio file from Jellyfin
This is helpful when the source audio file is not compatible with the user's device (i.e. playing back an ALAC encoded .M4A on Android) or if the user want to stream at a lower quality to save bandwidth
This also drives downloads in different qualities, meaning the download quality selector in the Settings is now working properly. When a track is downloaded, it will download at the quality selected by the user, and in a format compatible with the device
There is also a toggle in the "Player" Settings for displaying a badge in the player that shows the quality and container of the audio being played
Adds Google Cast Speaker Support!
A new button is now present in the bottom left of the player screen. Pressing this button will prompt the user to pick a Cast enabled speaker. Once a speaker is selected, the player controls in Jellify will control the playback of the Cast speaker.
Fix an issue where the queue didn't restore on opening the app
Add download button to the item menu - this works for tracks and albums
Fix issue where playback would start automatically on android
* player style fixes
* fix content sheet for android
* context sheet prefetching in item card, item row, and track components
context sheet header styling
fix issue where nowplaying was incorrect after the queue was initialized from storage
Wrap Item Context Provider around item components:
- ItemCard
- ItemRow
- Track
This is to prepopulate our query cache with data used in the Context Sheet