Commit Graph

178 Commits

Author SHA1 Message Date
Arkadiusz Fal
3588bbd7e7 Improve iPad UI behavior and settings layout
- Fix status bar visibility on iPad to respect window fullscreen state
- Adjust settings view minimum heights for better content display
2025-11-15 20:12:30 +01:00
Arkadiusz Fal
5758417293 Fix SwiftLint and SwiftFormat violations
- Run SwiftFormat to fix indentation, spacing, and formatting issues
- Replace CGFloat with Double and NSRect with CGRect per style guide
- Remove redundant .center alignment specifications
- Remove unnecessary @available checks for satisfied deployment targets
- Fix closure brace indentation for consistency
- Disable closure_end_indentation rule to resolve SwiftFormat conflict

All linting checks now pass with zero errors and warnings.
2025-11-15 19:42:37 +01:00
Arkadiusz Fal
d5f9a24efa Fix player controls clipping in resizable iPad windows
When playing video fullscreen in a resizable window on iPad, the player
height was being forced to UIScreen.main.bounds.size.height, which is
the full screen size. In resizable windows, this caused the player
container to extend beyond the visible window bounds, clipping controls
at the bottom.

Now on iPad, the player uses natural geometry provided by its container
which respects actual window bounds, while iPhone continues using
screen-based calculation for proper fullscreen behavior.
2025-11-14 23:26:20 +01:00
Arkadiusz Fal
8f97c40257 Refactor player controls and improve custom controls visibility
Restructured PlayerControls view hierarchy by extracting controls content into a separate computed property for better code organization. Added shouldShowCustomControls property to VideoPlayerView to properly determine when custom controls should be shown vs system controls. Updated hover logic to only show/hide custom controls when appropriate.
2025-11-14 18:58:28 +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
9ca5d292ec Merge pull request #820 from yattee/video-details-gestures
add drag gestures to video details
2024-11-08 15:03:07 +01:00
Toni Förster
b4bcd0c0a0 add drag gestures to video details 2024-09-15 20:56:04 +02:00
Toni Förster
72dcbe4515 allow user to disable fullscreen swipe gesture
furthermore, some rewording

Signed-off-by: Toni Förster <toni.foerster@gmail.com>
2024-09-12 16:57:48 +02:00
Toni Förster
322a550666 simplified fullscreen and orientation handling
- iPad: rotate to device orientation on startup
- fixed controls in portrait fullscreen
- iOS: don’t call setNeedsDrawing multiple times
- On iOS we call set needs drawing only once.
- Added cooldown time to MPV.Client setNeedsDrawing to avoid multiple successive calls
- make fullscreen animation smoother
- dragGesture now calls toggleFullScreenAction
- fix tvOS and macOS build

Signed-off-by: Toni Förster <toni.foerster@gmail.com>
2024-09-05 18:17:14 +02:00
Toni Förster
119c663436 Gestures: swipe up toggles fullscreen 2024-09-03 21:20:56 +02:00
Arkadiusz Fal
e7928d1016 Merge branch 'main' into chore-linter-warnings 2024-08-24 12:12:12 +02:00
Toni Förster
35534bcbb1 Improved thumbnail handling
- ThumbnailsModel optionally returns the quality
- Have constants for 4:3 and 16:9 aspect ratio
- Add high quality options for thumbnails
- Rename Highest quality to Best quality
- make 4:3 thumbnails fill the VideoCell
- use .maxes instead of .maxresdefault (the latter sometimes returns white images)

Signed-off-by: Toni Förster <toni.foerster@gmail.com>
2024-08-19 16:35:29 +02:00
Toni Förster
94577332a1 chore: address linter warnings
Signed-off-by: Toni Förster <toni.foerster@gmail.com>
2024-08-18 14:46:51 +02:00
Arkadiusz Fal
7741e531f4 Swiftformat fixes 2024-05-16 19:01:02 +02:00
Arkadiusz Fal
d67e375f16 Revert "small delay before vertical scrubbing is possible" 2024-05-16 18:59:54 +02:00
Toni Förster
3da081b40c small delay before vertical scrubbing is possible
This avoids accidentally scrubbing. The screen now needs to be touched at least 250 ms before time scrubbing is possible.

should fix #393
2024-05-01 19:11:42 +02:00
Toni Förster
fc7a7b085f fixed styling 2023-11-26 10:33:58 +01:00
Toni Förster
df47ffb013 change default minWidth with hidden sidebar 2023-11-21 17:49:29 +01:00
Toni Förster
8900f96ce7 honour the aspect ratio when resizing
The `defaultMinimumHeightLeft? has been adjusted to make the radio of the video view 16:9 in its initial state. Also on macOS when resizing the window, the aspect ratio of the view now correlates with the video.
2023-11-21 13:47:51 +01:00
Arkadiusz Fal
94915b0496 Revert "Drop iOS 14 and macOS 11 support"
This reverts commit dcef7f47ff.
2023-10-15 13:35:23 +02:00
Arkadiusz Fal
12a8582e89 Fix style issues, remove unused code 2023-09-23 17:14:21 +02:00
Arkadiusz Fal
dfda1181e2 Fix swiftformat issues 2023-09-23 17:14:21 +02:00
Arkadiusz Fal
dcef7f47ff Drop iOS 14 and macOS 11 support 2023-07-24 19:45:30 +02:00
Arkadiusz Fal
e827b97cd5 Fix lint issues 2023-07-24 19:45:30 +02:00
Arkadiusz Fal
3d35a60c7a Performance improvements 2023-06-09 17:46:31 +02:00
Arkadiusz Fal
4d5390ce2d Fixed video player background 2023-06-07 23:37:28 +02:00
Arkadiusz Fal
ae144ea82f Minor player fix 2023-05-25 18:36:03 +02:00
Arkadiusz Fal
4c5ef920b4 Fix drag gesture 2023-05-21 19:13:42 +02:00
Arkadiusz Fal
a55683e6bf Fix orientation 2023-05-21 19:13:42 +02:00
Arkadiusz Fal
2b7ccc4b03 Orientation fixes 2023-05-21 19:13:42 +02:00
Arkadiusz Fal
1cc66fdc10 Fix various issues 2023-05-21 19:13:42 +02:00
Arkadiusz Fal
5383cf0e90 AVPlayer system controls on iOS 2023-05-21 19:13:42 +02:00
Arkadiusz Fal
f67b1d4feb Improve orientation and safe area handling
Fix #369
Fix #382
2023-05-21 19:13:42 +02:00
Arkadiusz Fal
6617ad5fc6 Fix player width on macOS 2023-05-19 09:54:35 +02:00
Arkadiusz Fal
a5bfabed0c Fix clipped controls
Fix #431
2023-04-23 14:10:44 +02:00
Arkadiusz Fal
5c0cf7452c Remove unused code 2023-04-22 23:39:43 +02:00
Arkadiusz Fal
6596a440a5 New chapters layout 2023-04-22 23:39:43 +02:00
Arkadiusz Fal
b19918e219 Disable offset animation on hiding player 2023-04-22 23:39:43 +02:00
Arkadiusz Fal
9936d9dd9e Fix details reload 2023-04-22 23:39:42 +02:00
Arkadiusz Fal
28f346dee2 Remove Watch Next 2023-04-22 23:10:27 +02:00
Arkadiusz Fal
67690bc435 Video details changes and channel sheet 2023-04-22 23:10:27 +02:00
Arkadiusz Fal
5db74a3997 Code style fixes 2023-04-22 23:10:27 +02:00
Arkadiusz Fal
809bcd183a New playback settings sheet 2023-02-05 14:24:16 +01:00
Arkadiusz Fal
c432aa3b9a Minor fixes 2023-02-05 14:24:15 +01:00
Arkadiusz Fal
32e98b6410 Fix player 2023-02-05 14:24:15 +01:00
Arkadiusz Fal
8631389b8f Seek settings 2023-02-05 14:24:15 +01:00
Arkadiusz Fal
8ab42322fc Refactor context menu 2023-02-05 14:24:14 +01:00
Arkadiusz Fal
39fc23c5dc Watch Next behavior and settings 2023-02-05 14:24:14 +01:00
Arkadiusz Fal
ba1ec7c559 Player layout changes 2023-02-05 14:24:14 +01:00
Arkadiusz Fal
328119f0e0 Player view layout changes 2023-02-05 14:24:14 +01:00