Commit Graph

64 Commits

Author SHA1 Message Date
Ritesh Shukla
b8437898f5 PR try on (#665)
* feat:- PR changes

* feat:- PR changes

* feat:- OTA

* feat:- OTA

* fix: tests
2025-11-11 22:00:49 +05:30
Violet Caulfield
9d10b61a27 add async storage to jest mocks 2025-11-09 15:29:01 -06:00
Violet Caulfield
e7394ed9a4 Smol UX Fixes (#655)
* hotfix for context sheet items being too close to the system navigation bar

remove nitro image

fix tap gesture overriding pan gesture in the SwipeableRow
2025-11-09 10:09:25 -06:00
Violet Caulfield
783a5144a0 Slimify JellifyTrack type (#644)
* Slimify JellifyTrack type

Reduces the overall size of a JellifyTrack object in memory with the goal of lowing the overhead on serialization both to native and to zustand

* simplify addToQueue

fix issue where using the swipeable row would cause a crash
2025-11-05 18:50:47 -06:00
skalthoff
657e07d835 song quick action menu (#589)
* Add swipe-to-queue functionality and related tests for track management

* Refactor imports to use runOnJS from react-native-worklets for consistency across components

* Implement SwipeableRow component for track management with swipe actions

* Add haptic feedback and improve swipe action handling in SwipeableRow component

* Enhance SwipeableRow component with quick action support for right swipe and refactor left swipe actions in ItemRow and Track components

* Update publish-beta.yml

* Add SwipeToSkip component for track navigation gestures in PlayerScreen

* Implement swipe gesture handling in SongInfo and PlayerScreen for track navigation

* Add swipe action settings and enhance SwipeableRow functionality

- Introduced left and right swipe action settings in the swipe settings store.
- Updated SwipeableRow to support quick action menus for left and right swipes.
- Enhanced ItemRow and Track components to utilize new swipe settings.
- Added GesturesTab for configuring swipe actions in settings.
- Improved PreferencesTab to allow users to select swipe actions.

* Enhance SwipeableRow and Track components with improved action handling and UI updates

* Refactor SwipeableRow integration and enhance swipe action configuration

* Refactor Track component to include prependElement prop for drag icon display in editing mode

* fix build

git blame violet

* Implement swipeable row management with close handlers and integrate into various components

* goddammit violet

* Add tests for SwipeableRow and swipeable row registry behavior

* fix maestro settings tab tests

---------

Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2025-11-05 12:39:21 -06:00
Violet Caulfield
18d8d0bb59 Maintenance/migrate jellify context to zustand (#640)
Remove `JellifyContext` provider in favor of a persisted Zustand store

This should address issues where the user would open the app and be randomly signed out and have to sign back in
2025-11-04 06:39:32 -06:00
Violet Caulfield
344aebf2c4 Add Jellify Logo to Jellyfin Dashboard (#610)
* add postFullCapabilities function that will set the Jellify logo in the Dashboard

* update jellyfin typescript sdk
2025-10-28 22:00:37 -05:00
Ritesh Shukla
1b497fea71 feat: reload App (#575)
* feat: reload App

* feat: reload App
2025-10-24 21:53:32 +05:30
skalthoff
cb068da8bf enhance player queue management with Zustand store integration. (#574)
What is the change

    Implement persistent player queue state with a dedicated Zustand store (MMKV-backed): queue, currentTrack, currentIndex, shuffled, unShuffledQueue, and queueRef.
    Restore the queue on app start: new initialization reads persisted state and rebuilds the TrackPlayer queue and active index.
    Unify queue mutations to keep React Native Track Player and the persisted store in sync:
        Loading a new queue sets queueRef, honors shuffle, computes start index, and writes to both RNTP and store.
        "Play Next" and "Add to Queue" update RNTP, the live queue, and unShuffledQueue consistently.
        Active track/index changes now propagate to the store and query cache.
    Tighten/refine player query/invalidations so UI reflects the latest RNTP state.
    Minor housekeeping in config/scripts to support the above (ESLint flat config, metro/jest/script updates).

What does this address

    Fixes queue not restoring after relaunch or crash; playback position and the current track persist correctly.
    Preserves shuffle state and the original unshuffled ordering for reliable shuffle toggle behavior.
    Ensures "Play Next"/"Add to Queue" behave consistently with what the user sees, avoiding duplication or desyncs.
    Reduces UI state drift by syncing RNTP events to both React Query and persistent store.


Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
2025-10-24 05:41:22 -05:00
Ritesh Shukla
4d560be350 Nitro OTA Package (#560)
Adds internal over-the-air update support

Powered by `react-native-nitro-modules`, this OTA functionality is faster than the previous implementation, and won't slow down the UI when updates are being applied since updates occur off the main thread
2025-10-21 14:28:53 -05:00
Violet Caulfield
d6aa1d5534 Nitro Images + Blurhashes (#503)
Migrate from `react-native-fast-image` to `react-native-nitro-image`

Images will now display a blurry placeholder while loading, and then animate into the full image when loaded

Introduces a redesign to the artist page that is easier to navigate, especially when there are many albums belonging to a given artist

---------

Co-authored-by: riteshshukla04 <riteshshukla2381@gmail.com>
2025-09-15 08:00:54 -05:00
Violet Caulfield
2961ca39bb Introduction of Transcoding Support (#490)
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
2025-08-28 13:04:38 -05:00
Violet Caulfield
ec07b47b6f Player Rewrite (#484)
Rewrite player backend to be more efficient on CPU usage and memory usage
2025-08-25 14:32:34 -05:00
Violet Caulfield
8a191b91ab context sheet prefetching
unit tests

update rn screens
2025-08-20 15:02:52 -05:00
Violet Caulfield
db9301f583 fix jest 2025-08-14 07:05:02 -05:00
Violet Caulfield
aefcef4aed navigation stack refactor 2025-08-14 06:29:01 -05:00
Violet Caulfield
12ccf1ba65 Merge branch 'ritesh/rn081' of github.com:Jellify-Music/App into feature/context-menus 2025-08-12 19:49:37 -05:00
Violet Caulfield
b363228e07 player context selector
upgrade RNTP
2025-08-12 19:48:16 -05:00
riteshshukla04
dc470c408d Fixing Types 2025-08-13 02:37:08 +05:30
riteshshukla04
cca72a23ed Fixing Types 2025-08-13 02:30:05 +05:30
Violet Caulfield
1f3f7b78e3 rn 81 - audio normalization stuff 2025-08-12 15:29:22 -05:00
Violet Caulfield
a9d103b3b3 Fix TextTickers, MP3 Playback Fixes, Fix Blurred Background in Player (Android), Audio Normalization (#471)
Deps updates, fixes text tickers not ticking

Fix blurred background on android

fix library selector being disabled when multiple libraries do exist

Fix issue where mp3 containers ('mpeg') would crash the app

* update readme, fix maestro
2025-08-09 12:32:09 -05:00
Violet Caulfield
b15ec8b095 Queue Provider Optimizations, Alphabetical Selector Optimizations, Artist Pagination Improvements (#467)
* make now playing change faster when loading a new queue

* queue provider optimizations

* Improvements to the alphabetical selector handling in the artists page.

* Improvements to artists pagination - fetching more artists at a given time
2025-08-03 18:57:57 -05:00
Violet Caulfield
0e6f1d2bae Bugfix/moving track in queue doesnt work (#458)
Fixing an issue where moving tracks in the queue didn't work or would truncate the queue
2025-07-24 18:43:38 -05:00
Violet Caulfield
fd50111344 Fix Add to Queue Issues (#457)
* fix issue where items added to queue weren't always queued

* On Repeat and Recently Played Sections in CarPlay now load tracks into the queue and start playback
2025-07-24 09:23:16 -05:00
Violet Caulfield
98bf82284f Artist Tab Updates, Haptic Feedback Toggle, QueueProvider Test Coverage (#455) 2025-07-23 16:44:16 -05:00
Violet Caulfield
67e7ff17dc Fix issue where playback track wasn't updated (#453) 2025-07-23 00:27:23 -05:00
Violet Caulfield
b958cfe37b clean up jest folder between setup, contextual, and functional files (#451)
Clean up Jest and Maestro Folders

Reduction of the number of calls being made by components

Fix issue where a different track would display than the one that is currently playing

Update OTA dependency to fix an issue on iOS
2025-07-22 09:17:42 -05:00
Violet Caulfield
2e426ab3e9 Maestro Tests for Search
* maestro search instrumentation

* select search tab in maestro

* adding sentry back in, updating search maestro

* fix tests

* fix maestro flow
2025-07-09 22:25:44 +05:30
Violet Caulfield
3a7fe51e8f 0.13.0 (#428)
* Gapless playback (#372)

* Add gapless playback prefetch logic for next track

* Enhance player context to support multiple track downloads and prevent redundant prefetching

* Add download quality settings and integrate into track mapping and network contexts (#386)

* Add Shuffle

* Add Library Selection screen and navigation to account tab

* player redesign featuring blurred background artwork

* add repeat modes to player
2025-07-07 16:47:55 -05:00
Ritesh Shukla
a77bd48eee React native 0.80 (#418)
* Fix Height&Width not changing

* Remove RN 79.2 patch

update locks

* comment out sentry module for now

* Fix Jest Unit Tests for RN 80

* Run linting

* update fastfile for android

---------

Co-authored-by: Violet Caulfield <violet@cosmonautical.cloud>
2025-06-13 13:57:53 -05:00
Ritesh Shukla
20937ff359 Implement OTA Updates (#364)
Implements OTA updates, fetched via GitHub from our `App-Bundles` repository

All Typescript changes can be delivered this way

All native changes will need to go through the traditional `publish-beta` workflow, which is now run manually
2025-05-15 11:04:50 -05:00
Violet Caulfield
b455208588 Update React Native to 0.79.2, Bump Dependencies, Updates to Settings Tab, Add opt in Logging and telemetry (#338)
Welcome to Jellify 0.12.2!

This update comes with a much anticipated developer feature - and that is opt-in logging and telemetry. This is purely an opt-in feature, and can be toggled at anytime either when logging in for the first time, or in the settings tab. Under no circumstances will this ever be required to use Jellify, and all data that is collected is anonymized

The Settings tab has had a facelift, stealing design queues from the library page. This is where adjustable settings will make their home in updates to come, as well as how beta testing larger features will occur with “Labs”

This update also fixes issues with playback reporting, where the Jellyfin server wasn’t marking songs as played. This was not intended and has been fixed for those using the Last.FM plugin for scrobbling

There is also a slew of upgrades to underlying dependencies to make sure we are up to date on that front 

Thanks for reading! ~Violet
2025-05-10 03:01:06 -05:00
Violet Caulfield
8a69960a97 Add Revamped Library, bugfixes (#333)
Adds a revamped library page - where items aren't limited to just a user's favorites.

Fixes scrubber lag in player screen

Reorganizes component folder into separate components - providers - screens for better visibility and separation of concerns

Addresses some styling issues with text and font legibility
2025-05-09 08:06:35 -05:00
Violet Caulfield
c421c20d35 API Client Refactor, Add Frequents to CarPlay, Allow Playback on Startup (#327)
Refactors the client.ts file and moves it's functionality into the JellifyContext for use in other componentry. Lots of touching in the api folder to refactor this. I also found an issue when adding items to a playlist, so I bumped the axios package - which fixed the issue.

Adds "Most Played" and "On Repeat" sections to CarPlay. Most Played will allow users to view their most played artists, while On Repeat will give users access to their top tracks, of which they can select and start playback

Fixes an issue where on startup, if the user was logged in and had a persisted queue, it wouldn't playback. Users should be able to directly start up the queue upon relaunching the app if they are authenticated
2025-05-02 18:34:57 -05:00
Violet Caulfield
e78b9d2114 Re-enable New Architecture on Android, Remove Blurhash Deps, Improve Album Layout on Larger Viewports (#318)
Re-enables new architecture on Android by switching to a different fork of React Native Track Player

Removes dependency on react-native-blurhash - we aren't using it as our image component can handle this for us

Improves album layout on artist screen by adjusting flex of album details and album artwork
2025-05-01 14:53:54 -05:00
Violet Caulfield
ae7aef5df3 Instant Mix Buildout, Fix Android Playback Controls, Update Toast Styling (#316)
Adds an Instant Mix Button and Screen - users can view an instant mix from the album page by tapping on the Compass icon (which is styled for Dark and Light mode, respectfully)

Fixes Android playback controls not showing up - this is a regression introduced by React Native's New Architecture and is being rolled back. A future update will fix this and get Android builds back on the New Architecture

Adds Tamagui styling to toasts so that they are more homogenous with the rest of the UI
2025-05-01 10:46:03 -05:00
Ritesh Shukla
100acd7641 Remove Expo + Code Cleanup +. Test Cases Fix (#312) 2025-05-01 03:22:45 -05:00
Violet Caulfield
34382d45a9 UI Overflow Fixes, Move Source to src Folder (#311)
Fix issue where player elements would be falling off of the screen

Move source files into `src` folder for project organization
2025-04-30 10:40:31 -05:00
Violet Caulfield
2160fbc854 Fix Playback Reporting, Add QueueProvider Test Coverage (#300)
Addresses regression where playback was not reported
2025-04-28 19:45:47 -05:00
Violet Caulfield
767fa3cbcf Unit Testing Additions, Fix Favorites Library (#298)
Additions to testing files - including ensuring QueueProvider functionality

Fix issue where artists in the favorites wouldn't show up
2025-04-28 07:04:31 -05:00
Violet Caulfield
cb1058bb3c Queue Provider Clean Up (#295)
The Big Queuing Refactor 

Please report any issues with playback or queuing tracks!
2025-04-27 10:33:40 -05:00
Violet Caulfield
3cffc623e4 Fix Android? Queue and Player Control Improvements (#293)
I hope this fixes android - restored a dependency that wasnt present in previous versions (.5, .6, .7)

Tightening up player refactor, namely around indexes and skipping tracks
2025-04-27 01:13:14 -05:00
Violet Caulfield
a08e66546c Offline Mode MVP (#272)
* OfflineMode

* Template addition and Fixes

* More Changes

* More Changes

* smol updates to provider

run yarn format

* update internet connection watcher colors and verbiage

remove react native file access dependency

* Offline changes

* UI tweaks for offline indicator

* get jest to pass

---------

Co-authored-by: Ritesh Shukla <ritesh.shukla2@129net231.unica.it>
Co-authored-by: Ritesh Shukla <ritesh.shukla2@M-LD4JMWLW26.local>
Co-authored-by: Ritesh Shukla <75062358+riteshshukla04@users.noreply.github.com>
2025-04-22 12:07:55 -05:00
Violet Caulfield
1db7379dfc add uuid to carplay templates, run prettier 2025-04-13 13:05:33 -05:00
Ritesh Shukla
cf904fad92 Fix tests 2025-04-13 22:31:01 +05:30
Violet Caulfield
96dc9b3800 mock client instance class 2025-04-13 08:51:07 -05:00
Violet Caulfield
5ca00df6f7 [skip actions]
run prettier
2025-04-12 10:16:10 -05:00
Violet Caulfield
3a0502c5e5 update reanimated, RNTP mocks 2025-04-09 09:03:12 -05:00
Violet Caulfield
d79875c175 format react-native-blurhash mocking 2025-04-09 07:54:02 -05:00