With Jellyfin and Apple's platforms getting a performance and bug fix update, Stingray shall follow suit!
- Features
- Settings
- A new toggle to allow the search tab to search through TV episode titles
- If Stingray fails to login, provide options to retry and update the user's login
- UI
- Apply the media title shadow directly to the media title
- Collect all people from episodes and display them for the season
- Not sure what Jellyfin was collecting prior to this, but this is more correct
- Don't display people segment if people are unavailable
- Access to Stingray's logs
- Change roundness of buttons in the settings menu based on the Apple TV model
- Filter libraries and search by genre and maturity
- Sort libraries and search by title, sort title, duration, release date, and random
- Refresh individual libraries
- Slightly darken the background of the Notes App theme to improve the legibility of buttons
- Add a missing "No image available" placeholder for people with no images
- Add marquee-style text for people's names and roles
- Add a proper loading indicator to the TV show play button
- If a PIN is configured, display the PIN entry screen on a cold boot even in "Manual" profile switching
- Improved error logging for video players
- If the limited bitrate is greater than the media stream's bitrate, do not show as limited in the player
- Require PIN for logging out
- Reset settings button
- Settings
- Cleanups
- Repo Organization
- Rename "Other-Assets" to "Other Assets"
- Have ErrorView be a component
- Move all views into a Views folder
- Separate the TV and Movie detail views
- Abstract metadata and overview in the
DetailMediaViewto their own views - Move
DetailMediaViewinto a dedicated Media Detail folder
- Abstract metadata and overview in the
- Separate the TV and Movie players
- Move the player files into a dedicated "player" folder
- Move
AVPlayerViewControllerRepresentable.Coordinatorto a separate file - Abstract player transport bar items to a dedicated class
- Separate out SwiftUI Player tabs into their own structs
- Remove unused
Equatableconformance fromMediaCard - Remove the
StreamingServiceProtocolandStreamingServiceBasicProtocol - Document all the things
- Massively improve documentation around the
slidingLevenshteinDistancefunction
- Massively improve documentation around the
- Update all Swift files to use Xcode 27's reworked auto-indent formatting
- Remove unused
Equatableconformance fromMediaSource - Remove practically unused
completedandunloadedstatuses for individual libraries - Remove the redundant
waitingstatus for streaming service libraries status - Remove the poorly used library media type
- Add season sync status with
TVSeasonsAvailable Useris now a class, helping ensure data stays synced across the app- The active user is now stored in the
LoginStatusstate machine, replacingUserModel.activeUserin most cases - Reworked PIN mechanism to work asynchronously and force the use of the new
PINModelfor more reliable PIN usage - Remove cloud DB migration
- Repo Organization
- Bug Fixes
- Specify do not sleep while playing video
- Allow moving from media metadata to play button
- Opening the player description should no longer crash
- Fix infinite loading when user signs in the same user multiple times
- Fix search results not live updating
- Fix
MediaType's reported object name in errors - Improve error handling for loading show episodes
- Allow
AsyncBlurImageto re-attempt downloads - Add error handling for failing to sync library version
- Hitting cancel on the PIN entry screen no longer navigates to the switch user page
- Add per-AppleTV-generation streaming compatibility
- Improve tracking for watched content
- Synchronize iCloud storage with models
- Fixes a bug where signing in on a new Apple TV doesn't load data correctly for the first time
- Performance
- Only calculate blur hash once and globally cache it
- Improves speed to opening detail media views
- Massively improves scrolling performance in busy detail media views
- Improves library loading performance
- Improve People grouping performance
- Store relevant (en/de)coders and formatters as static variables
- Only calculate blur hashes in
AsyncBlurImage- Media Card now uses
AsyncBlurImage
- Media Card now uses
- Only calculate profile images once per load (kinda)
- Only calculate Apple TV model once and cache it
- Improve media syncing performance by about 2.2x (tested before Jellyfin v12)
- Rework media syncing algorithm
- Start syncing sooner
- Prevent double loading libraries
- Rewrote TV season syncing to use a similar implementation to library syncing
- Improved thread control
- Allow seasons to continue downloading during and after all shows load
- Reduce hitching during video playback by moving playback updates off the UI thread
- Add priority Jellyfin syncing
- If a show is not fully synched when opened, request that show's special features and episodes separately from all the others
- Only calculate blur hash once and globally cache it
- Improvements
- API
- Swapped from
/Users/{userID}/Viewsto/UserViewswith the userID as a parameter
- Swapped from
- API