Commit Graph

2336 Commits

Author SHA1 Message Date
Arkadiusz Fal
bec29668a0 Fix glassEffect API availability for macOS and tvOS
- Make glassEffect iOS-only as it's not available on other platforms
- Use ultraThinMaterial fallback for macOS and tvOS
- Fixes build error in GitHub Actions with Xcode 16.4
2025-11-10 12:47:11 +01:00
Arkadiusz Fal
86b74d53ca Bump build number to 205 2025-11-10 12:40:20 +01:00
Arkadiusz Fal
797ba61ddd Skip framework conversion script in CI/GitHub Actions
Added checks to skip the framework conversion script when running in
CI environments (GitHub Actions). The script now exits early if either
CI or GITHUB_ACTIONS environment variables are set.

This ensures:
- Script only runs for local development builds
- GitHub Actions builds use frameworks as-is from MPVKit
- iOS/tvOS builds on macOS 15 with Xcode 16.4 work without conversion

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 12:39:13 +01:00
Arkadiusz Fal
2959f0b387 Lower macOS build runner to macOS 15 with Xcode 16.4
Changed mac_notarized job to use:
- runs-on: macos-15 (was macos-latest)
- xcode-version: 16.4 (was 26.0.1)

This configuration was previously working for Yattee builds.
iOS and tvOS builds remain on macos-latest with Xcode 26.0.1.

Reference: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-arm64-Readme.md

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 12:36:15 +01:00
Arkadiusz Fal
bf40f527ea Add macOS framework conversion for Developer ID distribution
This commit implements a workaround for MPVKit shipping frameworks as
shallow bundles, which are incompatible with macOS Developer ID
distribution requirements.

Changes:

1. Raised macOS deployment target to 14.0
   - Matches MPVKit's minimum requirement
   - Previous: 11.0
   - New: 14.0

2. Added Run Script phase to convert frameworks
   - Converts MPVKit frameworks from shallow to versioned bundles
   - Required for macOS Developer ID code signing
   - Runs after framework embedding
   - Converts all 28 MPVKit frameworks during build

3. Modified fastlane build process
   - Build and archive without export
   - Create PKG directly from archive
   - Avoids extended attribute issues from export process

4. Pinned MPVKit to specific commit
   - Commit: e7e914a70e943f0d4f050c9ede793af8f6e74ad7
   - Ensures consistent framework structure

Known Issues:
- Some frameworks (Libplacebo, Libluajit) have signature issues after
  conversion that still prevent successful notarization
- This is a workaround; the root issue should be fixed in MPVKit by
  providing macOS-compatible versioned bundle frameworks

See minimal reproduction project at:
/tmp/MPVKit-Notarization-Issue/MPVKitNotarizationTest/

Related: MPVKit should provide macOS-specific XCFrameworks with
versioned bundles for proper Developer ID distribution support.

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 12:32:32 +01:00
Arkadiusz Fal
469e9a4eb9 Enable notarization error logging
Add print_log: true to notarize action to display detailed error
messages when notarization fails in GitHub Actions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 19:01:25 +01:00
Arkadiusz Fal
ce7ba207ea Fix API availability issues for macOS 11.0 and tvOS 15.0
This commit resolves multiple build errors caused by using APIs that
require newer OS versions than the deployment targets (macOS 11.0 and
tvOS 15.0).

macOS fixes:
- Add missing init(frame:) initializer to PlayerLayerView
- Add availability checks for textSelection modifier (macOS 12.0+)
- Add availability checks for AttributedString (macOS 12.0+)
- Add availability checks for listStyle.inset(alternatesRowBackgrounds:) (macOS 12.0+)
- Add availability checks for focusScope modifier (macOS 12.0+)
- Correct listRowSeparator availability from macOS 12.0 to 13.0

tvOS fixes:
- Use older onChange(of:) signature compatible with tvOS 15.0
- Add availability check for Menu with primaryAction (tvOS 17.0+)

All changes include appropriate fallbacks for older OS versions to
maintain backward compatibility.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:53:06 +01:00
Arkadiusz Fal
b0aaf0080b Fix Xcode version to 26.0.1 in release workflow
Use Xcode 26.0.1 (the default stable version on macOS 26 runners) instead
of latest-stable to avoid selecting Xcode 26.1 RC which has missing SDK
components. This fixes the "iOS 26.1 is not installed" error during builds.

Reference: https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:38:23 +01:00
Arkadiusz Fal
3c63aa51be Update Ruby version to 3.1 in GitHub Actions workflows
Bundler 2.6.3 requires Ruby >= 3.1.0, but workflows were using Ruby 3.0.7,
causing build failures. Updated both release and bump-build workflows to use
Ruby 3.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:31:25 +01:00
Arkadiusz Fal
946d4c4f16 Update changelog for build 204 2025-11-09 18:25:32 +01:00
Arkadiusz Fal
161282af0b Bump build number to 204 2025-11-09 18:20:50 +01:00
Arkadiusz Fal
37c6f6abbe Add localization support for Finnish, Indonesian, Korean, Dutch, and Swedish
Adds five new languages to the Xcode project knownRegions that have at least 50% translation coverage from Weblate:
- Finnish (fi): 100%
- Indonesian (id): 100%
- Korean (ko): 100%
- Dutch (nl): 81.9%
- Swedish (sv): 77.4%

Languages with less than 50% coverage (ars, kab, sk) were not added.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:19:40 +01:00
Arkadiusz Fal
6129d724c5 Update dependencies 2025-11-09 18:14:35 +01:00
Arkadiusz Fal
be4e1adb9b Fix all SwiftLint violations across codebase
Resolves 130+ violations including deployment target checks, code style issues, and formatting inconsistencies. Adds SwiftLint disable comments for compiler-required availability checks while maintaining deployment target compliance.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
4840c9a05f Use fullScreenCover for Settings and Accounts on tvOS
- Replace sheet presentation with fullScreenCover for Settings and Accounts views on tvOS
- Add proper background color to Settings and Accounts screens on tvOS
- Clean up trailing whitespace in HomeView

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
e0ca48fd44 Improve tvOS settings UI styling and navigation
- Add TVOSPlainToggleStyle for cleaner toggle appearance on tvOS
- Remove focus overlays from settings navigation links and buttons
- Apply plain button and list styles across all settings screens
- Implement custom system controls picker for tvOS to avoid focus overlay
- Update SettingsPickerModifier with platform-specific styling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
495dcec874 Add macOS build script and update Swift package dependencies
Add custom build phase script to fix macOS framework bundle structure and
clean module caches:
- Converts shallow bundles (iOS-style) to versioned bundles (macOS-style)
- Cleans Swift module caches for macOS builds to prevent cache issues
- Creates proper symlink structure for macOS frameworks (Versions/Current)
- Handles Info.plist, Headers, Modules, and Resources directories

Update Swift Package Manager dependencies:
- SDWebImage: 5.21.0 → 5.21.3
- SDWebImageWebPCoder: 0.14.6 → 0.15.0
- swift-log: 1.6.3 → 1.6.4
- Package.resolved format: version 2 → version 3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
8123770614 Improve fullscreen orientation handling for iOS player
Refactor orientation logic when entering fullscreen to better handle
button-initiated vs gesture-initiated transitions:

- Consolidate orientation determination into a single expression that
  considers whether fullscreen was initiated by button or gesture
- When initiated by button, always use rotateToLandscapeOnEnterFullScreen
  preference
- When initiated by gesture, respect current device orientation if already
  in landscape, otherwise use preference
- Apply .landscape lock only for button-initiated transitions, .all for
  gesture-initiated (when not orientation locked)

This provides more intuitive behavior where button taps rotate to preferred
orientation, while gestures respect current device orientation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
cb2d9729ea Add top padding to playback speed controls
Improve spacing in PlaybackSettings view by adding top padding to the
playback speed section for better visual separation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
f4d4daccd0 Optimize SwiftUI performance throughout the app
This commit addresses multiple SwiftUI performance bottlenecks identified
through code analysis, focusing on view rendering efficiency, list
performance, and memory usage optimization.

Key improvements:

- HomeView: Optimize async task management using structured concurrency
  with async let to handle multiple Defaults updates in a single task

- VideoCell: Remove GeometryReader from VideoCellThumbnail to eliminate
  layout thrashing; change @ObservedObject to computed property for shared
  ThumbnailsModel

- ThumbnailView: Cache URL extension computation in init() instead of
  recalculating on every body evaluation

- FavoriteItemView: Replace filter().prefix() with early-exit loop and
  capacity reservation for significant performance gain on large lists

- ContentItemView: Optimize FetchRequest creation with direct predicate
  construction only for video items, empty predicate for others

- VideoPlayerView: Fix playerSize didSet trigger by moving
  updateSidebarQueue() calls to explicit onChange/onAppear handlers

- FeedView: Replace .unique() with Set-based deduplication for O(n)
  performance and reduced allocations

- VerticalCells: Remove expensive sorting on every redraw; items should
  be pre-sorted from source

These optimizations follow SwiftUI best practices by minimizing expensive
computations in view bodies, caching computed values, using efficient data
structures, and avoiding unnecessary redraws and layout passes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:35 +01:00
Arkadiusz Fal
2d73c57426 Add Liquid Glass effect to player controls bar
Refactor controls bar background styling with platform-specific effects:
- Add Liquid Glass effect for iOS 26+ using new glassEffect API
- Fallback to ultraThinMaterial for iOS 15-25
- Fallback to blurred black overlay for iOS 14 and earlier
- Extract background logic into reusable applyControlsBackground modifier
- Adjust controls bar vertical offset for better alignment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
757b4cb671 Add compact list row styling for iOS channels view
Apply compact row styling to channel list items on iOS to reduce vertical spacing and improve visual density. Uses listRowSpacing(0) on iOS 15+ and custom insets for consistent padding across all iOS versions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
73d9581449 Improve search field layout and responsiveness
SearchTextField improvements:
- Add flexible width constraints (minWidth: 250, maxWidth: .infinity) for macOS
- Restructure iOS layout to use HStack instead of ZStack for better alignment
- Add invisible spacer to maintain consistent width when clear button is hidden
- Adjust padding for more balanced appearance
- Remove fixed width from fieldBorder to support flexible sizing

SearchView improvements:
- Wrap in GeometryReader to calculate available width dynamically
- Add searchFieldWidth() helper to compute optimal search field width
- Account for navigation buttons and internal padding
- Apply dynamic width to both FocusableSearchTextField and SearchTextField

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
62d5a86146 Add debug logging for stream URLs in PlayerBackend
Add logging for video and audio asset URLs during stream filtering to help debug stream selection issues.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
86e843305f Improve MPV backend audio track handling
Add proper validation and fallback logic for audio track selection in MPV backend:
- Validate audio track index is within bounds before switching
- Handle streams without separate audio tracks (single asset streams)
- Reset selectedAudioTrackIndex if out of bounds
- Add fallback path for streams without audioTracks array

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
5b18c3c114 Add multi-track audio support for Piped backend
Extract and provide all available audio tracks (ORIGINAL, DUBBED, etc.) from Piped API instead of only using the first ORIGINAL track. This allows users to select between different audio languages and track types.

Changes:
- Extract all M4A audio tracks grouped by type and language
- Keep highest bitrate stream for each unique track combination
- Sort tracks with ORIGINAL first, then others alphabetically
- Pass audio tracks array to Stream for player selection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
735fc0cb6c Fix published date handling in Piped API
Clear the published string when a proper publishedAt date is extracted from uploadDate to prevent duplicate or inconsistent date display. Only fallback to string-based published date when no structured date is available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
874b976da9 Fix Invidious companion API endpoint path
Update companion API endpoint URLs to use /companion/latest_version instead of /latest_version to match the correct API path structure.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:14:34 +01:00
Arkadiusz Fal
de43cc8322 Merge pull request #882 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2025-11-09 18:14:19 +01:00
Willy Anjaya
080af7467e Translated using Weblate (Indonesian)
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/id/
2025-11-07 13:35:10 +01:00
Jaroslav Kardoš
2d852b38a5 Translated using Weblate (Slovak)
Currently translated at 33.6% (189 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/sk/
2025-11-07 13:35:09 +01:00
Willy Anjaya
f03189e973 Translated using Weblate (Indonesian)
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/id/
2025-11-07 13:35:08 +01:00
Willy Anjaya
e4e80b021b Added translation using Weblate (Indonesian) 2025-11-07 13:35:08 +01:00
Sander
e10a7cfc41 Translated using Weblate (Dutch)
Currently translated at 80.7% (454 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/nl/
2025-11-07 13:35:07 +01:00
Norcitko
9e0bf59774 Added translation using Weblate (Slovak) 2025-11-07 13:35:06 +01:00
ButterflyOfFire
1a36f1f338 Translated using Weblate (Kabyle)
Currently translated at 17.0% (96 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/kab/
2025-11-07 13:35:06 +01:00
Zipo
a93e0182ca Translated using Weblate (Korean)
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/ko/
2025-11-07 13:35:05 +01:00
NicoATC
89fba29710 Translated using Weblate (German)
Currently translated at 98.7% (555 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/de/
2025-11-07 13:35:04 +01:00
Josef Müller
d567b1f03e Translated using Weblate (German)
Currently translated at 98.7% (555 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/de/
2025-11-07 13:35:04 +01:00
ButterflyOfFire
7293969604 Translated using Weblate (Kabyle)
Currently translated at 17.0% (96 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/kab/
2025-11-07 13:35:03 +01:00
Ghost of Sparta
b981d34d28 Translated using Weblate (Hungarian)
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/hu/
2025-11-07 13:35:02 +01:00
Arkadiusz Fal
b2d2ac143b Merge pull request #895 from yattee/actions/bump-build-to-203
Bump build number to 203
2025-11-07 13:34:55 +01:00
github-actions[bot]
e77d5a0a7c Bump build number to 203 2025-11-07 12:33:59 +00:00
Arkadiusz Fal
8655312eeb Merge pull request #894 from treeshateorcs/patch-1
Fix link to SwiftUI documentation in README
2025-11-07 13:32:12 +01:00
tho
3268110913 Fix link to SwiftUI documentation in README
previous link was 404d
2025-11-04 12:37:19 +05:00
Arkadiusz Fal
3449b30117 Merge pull request #891 from yattee/actions/bump-build-to-202
Bump build number to 202
1.5.2-202
2025-09-09 09:38:50 +02:00
github-actions[bot]
d76c82eb65 Bump build number to 202 2025-09-09 07:37:06 +00:00
Arkadiusz Fal
6935866183 Bump tvOS version 1.5.2-201 2025-06-17 16:37:53 +02:00
Arkadiusz Fal
0b253a1c5c Revert "Update dependencies"
Fix build issue with new signet version

This reverts commit 04377cbc1a.
2025-06-17 16:27:39 +02:00
Arkadiusz Fal
8e4b9ea440 Fix bundler cache version 2025-06-17 16:26:24 +02:00