Settings Page
- Set the max bitrate
- Toggle autoplay
- Connection info (same as what's at the bottom of the home page)
- Added Apple TV variant
- Library info
- Number of synced libraries
- Content per library
- Syncing status
- Adjust playback speed
- Users are now sorted alphabetically instead of randomly
- Adjustable Playback Speed
Themes
- Themes have been added to Stingray
- Notes App: A very white theme that uses a white background and grays
- Frosty (Supporter): A more colorful light theme with splashes of color fading in and out with subtle movements
- Beach: A gradient with the sky and the sand
- Retro (Supporter): A synthwave inspired animated background with an animated floor and lots of pinks
- Deep Sea (existing theme)
- Space Vampires (Supporter): A Dracula inspired theme on a clear night with shooting stars
- Void: A very dark theme that uses a black background and grays
- Themes can be chosen for dark mode and light mode independently
Profiles
- New settings for handling profile switching
- Ask on resume: When the app opens from the background, ask which profile to use
- Ask on launch: Like most streaming services, ask when the app is re-launched
- Manual: Current behavior - remember who last used Stingray
- Per-user PIN support
- Users from multiple Jellyfin servers are now supported
- When adding a new user, the active user's connection info autofills
- Adding a duplicate user is now prevented
- Added Quick Connect support by [@max298](https://github.com/max298)
Accessibility
- Translation support has been added
- English
- German by [@TMHBOFH](https://github.com/TMHBOFH)
- Allow hiding thumbnail art
- Allow hiding media background art
- Allow replacing media logos with text variants
- Themes have been added to Stingray
Player
- Autoplay support
- Streaming stats in the player
- Bitrate
- Playback resolution
- Screen resolution
- Frame rate
- Codec
- Player buffer duration
- Media ID
- Media Source ID
- Video Stream IDw
- Audio Stream ID
- Extended maximum playback buffer (tvOS can and does impose its own limits)
- Reworked much of the
AVPlayerandAVPlayerItemhandling- Share the same view model across all sub-views of the player
- Fixed audio continuing to play after tracks have been switched
- Fixed subtitle, audio, and video tracks changing when changing a different track type
- Prevent old
AVPlayers from getting stuck in async threads - Replace player instead of rebuilding it
- Extend the maximum configurable bitrate to 100 megabits per second (maximum still streams at full quality)
- Adjust playback speed
Syncing
- Libraries now intentionally slowdown syncing to improve UI performance
- Improve URL resolution
- Improve JSON decoding verbosity
- Modernize Jellyfin token format [@darkweak](#75)
- Libraries with subfolders now present the full library (strips subfolder structure in favor of a flat structure)
General UI
- Created custom
DoubleButtonandDoubleMenutypes to wrapButtonandMenutypes for consistent styling - Created a custom
ButtonStyleto improve consistency between aButtonandMenuin the Settings page - Added the number of items in a library at the bottom of each library
- Allow account switching when libraries fail to load
- Improved time code formatting
- 00:00:59 → 0:59
- 00:05:22 → 5:22
- 00:23:19 → 23:19
- 01:42:21 → 1:42:21
- Unify the gray color used for secondary body text
- Fixed labels being incorrectly colored in light mode
- Media cards now have an
ultraThinMaterialapplied
General Backend Changes
- The active user is now stored in
UserModel.activeUser - Fixed the wrong user being deleted when deleting a user
- Force explicit access control
- Ban the use of
internalaccess control
- Ban the use of
- Force themes to contain the word "Theme" in their class names
- Implement a proper Logger type using the "Unified Logging System" (osLogger)
- Ban usual printing, and recommend logging
- Group user data into a single UserDefaults storage, unifying it with the Top Shelf
- Settings storage
- Most data is stored with the user, though some is stored globally and in memory. The
SettingsModelunifies this by wrapping related values with computed values - Settings are saved when changed primarily via
willSetobservers
- Most data is stored with the user, though some is stored globally and in memory. The
Repo Updates
- Updated security email
- Updated contributing guidelines
- Added language for pull requests
- Added language for how to submit translations
- Added language for which branch to fork from and merge into
- Updated issue template for Apple TV variant formatting
Supporting Stingray
- Stingray can now be supported for $1.50, unlocking animated themes