Commit Graph

2663 Commits

Author SHA1 Message Date
Arkadiusz Fal
096df34f64 Redesign tvOS player controls with centered transport cluster
- Move Close to a top-right circular icon; bottom row reorganizes into
  left (Settings/Info/Comments), center transport (Previous/PlayPause/Next),
  and right (Queue) clusters with equal side frames so transport stays
  geometrically centered.
- Introduce a circular icon-only `TVTransportButtonStyle` (primary variant
  for Play/Pause) mirroring the new Close button look.
- Always render Previous/Next so Play/Pause position is fixed; dim and
  disable when unavailable.
- Share `isTransportDisabled` on `PlayerState` and reuse it on iOS and
  tvOS; apply it (plus symbol replace transition) to the tvOS Play/Pause
  button.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
c0184712a9 Add Continue Watching toggle to sidebar settings
Exposes ContinueWatchingView as an opt-in main sidebar item,
hidden by default.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
2761fcbcfb Replace onboarding flow with silent v1 import and iCloud alert
Delete the multi-page onboarding sheet. On first launch the app now
silently imports any v1 instances from UserDefaults (splitting embedded
basic-auth credentials out of the URL and into the Keychain) and then,
if the device is signed in to iCloud, shows a single alert offering to
enable sync. Accepting shows a blocking progress overlay until the
initial upload completes.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
55f27e7f54 Add view options and refresh actions to tvOS media browser 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
bece7b35c7 Add clear history menu to tvOS History view 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
ee0666f5f7 Fix tvOS target configuration in Xcode project
Add tvos platformFilter to YatteeTopShelf.appex embed and target
dependency so it's only built for tvOS, and exclude Info-tvOS.plist
from Copy Bundle Resources via synchronized-folder membership
exceptions.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
c03cd0bd19 Store higher-quality YouTube thumbnail URLs in recent playlists
Rewrites /vi/ID/{default|mq|hq|sd}default.jpg to maxresdefault.jpg when
saving/updating a recent playlist, so the card shows a sharper image
than the low-res search-result thumbnail.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
663e96c859 Polish Search view layout on tvOS
- Disable scroll clipping so focused source/channel/playlist cards show full halo
- Remove rounded clip on source picker row that cut the Menu focus effect
- Replace tappable recents header Button with a plain label on tvOS
- Add vertical spacing between recent search items
- Widen recent channel and playlist cards and reserve space for two-line titles
- Increase horizontal spacing between cards so focus halos don't collide
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
5cbcceba9a Polish AddSourceView layout on tvOS
Add a TVSourceRowLabelStyle for consistent icon/text spacing, switch
the Scan Network button to TVFormRowButtonStyle so it matches the
NavigationLink rows, and drop the duplicate navigationTitle in
AddWebDAV/AddSMB views since the title is already shown in the
TVSidebarDetailContainer sidebar.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
0fe7194d68 Fix tvOS App Store upload rejection for icon assets
Use a tvOS-specific Info.plist to exclude iOS CFBundleAlternateIcons
keys that caused ITMS-90471 rejections, and drop empty image slots
from the tvOS brand asset catalog.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
6acfff6451 Update fastlane readme 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
fb14ed8ae9 Wire YatteeTopShelf into tvOS release lane
Fetch a match profile for the new stream.yattee.app.TopShelf bundle,
switch the extension target to manual signing, and map its profile in
build_app export_options so the tvOS archive signs both the main app
and the Top Shelf extension.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
9f86ff0667 Add tvOS Top Shelf extension
Surfaces Continue Watching, Recent Feed, and Recent Bookmarks in the
Apple TV Home top shelf when Yattee is focused. Tapping a tile opens
the video via the existing yattee://video/{id} deep link.

- New YatteeTopShelf app extension target (tvOS only). LD_ENTRY_POINT is
  overridden to _NSExtensionMain; the tv-app-extension product type
  defaults to _TVExtensionMain which is for the pre-tvOS-13 legacy API
  and crashes modern TVTopShelfContentProvider subclasses at launch.
- Main app writes per-section JSON snapshots (capped at 10 items each)
  to a shared App Group UserDefaults suite after bookmark, watch-history,
  and feed-cache changes, plus an initial write on launch.
- Enabled-sections list is mirrored to the same App Group so the
  extension can respect the user's selection without touching SwiftData.
- Settings → Top Shelf (tvOS only) lets the user toggle sections.
- Deep link playback shows a loading toast while video details are
  fetched, and an error toast if no source is configured.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
90c88728c4 Adapt resume action sheet layout for tvOS
Use a NavigationStack/List layout with a centered thumbnail, stacked
title, and card-styled buttons so the focus ring renders with proper
clearance on tvOS.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
e609e48449 Add bottom padding under tvOS search/action top bars
Separates the inline search field and action button from the video
listing below on History, Bookmarks, Instance browse, and Manage
channels screens.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
6eec42241d Disable scroll clipping for tvOS video listing grids
Allows focus-scaled cards to render past scroll view bounds on History,
Bookmarks, Search, and Instance browse screens.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
a0015086a2 Use menu picker style for tvOS view options sheets 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
2efa0708c8 Refresh expired thumbnail URLs for downloads and video info
Proxied thumbnail URLs from Invidious/Piped/Yattee server expire over
time. Two paths were left holding stale URLs: the Video Info carousel
kept the original list copy even after fresh details arrived, and
downloaded videos rendered from the remote URL snapshot taken at
download time while the local thumbnail on disk was ignored.

Evict stale URLs from the Nuke cache when fresh video details load,
pass the fresh details through to the videoCard thumbnail, and resolve
downloads' thumbnails from the local file when localThumbnailPath is
set.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
abd432fd0e Show video title placeholder while thumbnails load 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
6090454707 Use segmented picker style for tvOS grid columns count 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
42fe76836c Match tvOS media browser file row style with folders 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
39580d713b Make unplayable tvOS media files focusable with unsupported alert 2026-04-18 20:38:02 +02:00
Arkadiusz Fal
4c8a3ee5ba Push video info navigation from media source browser on tvOS
handlePendingNavigation guarded the .mediaSource append with
#if os(iOS) || os(macOS), so navigating to video info from a media
source on tvOS was silently dropped. The NavigationStack binding is
already unconditional, so the append is safe on all platforms.
2026-04-18 20:38:02 +02:00
Arkadiusz Fal
53144293c8 Tune tvOS media browser row layout 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f2a5069cd2 Make tvOS Home section headers non-focusable
Render section headers as plain Text on tvOS so the focus engine
skips them and moves directly between video cards across sections.
iOS and macOS keep the tappable Button with chevron unchanged.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
060cff1449 Align tvOS History and Bookmarks header top padding 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
a66b2191d1 Keep focus on pressed tvOS channel tab button 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
281f5e0f13 Hide tvOS search type/filters until query entered
Match iOS behavior by gating the type switcher and filters menus on an
active query, and drop the .caption font so they render with the same
default button font as View Options.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
025dc73e59 Add channel video search on tvOS
Surface the existing in-channel search feature on tvOS as a final tab
after Playlists. Selecting it reveals a search field and results area
below the tab row, reusing the same API and result views as iOS/macOS.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
b479d63295 Respect video tap action settings in media browser
Playable files in the media source browser now honor tvOSVideoTapAction
on tvOS and thumbnailTapAction/textAreaTapAction on iOS/macOS, matching
other video lists. When openInfo navigates to VideoInfoView, playback
routes through QueueManager.playFromMediaBrowser so stream and caption
resolution keep working for Samba/WebDAV files.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
3126f5bc3e Show storyboard preview during tvOS scrubber arrow-seek
Arrow-seek on the focused scrubber previously moved the handle but
showed no storyboard/chapter context. Reuse the existing SELECT-scrub
overlay for arrow-seek too, with a ~2s lingering fade after the last
press so the preview doesn't vanish the instant the seek commits.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
d903eb6920 Polish PlaylistsListView for tvOS
Hide navigation title on tvOS, move the new-playlist action into an
inline focus section above the list, and make rows focusable via
NavigationLink so focus can move down from the button and default
focus lands on the first playlist.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
546ecf632e Fix tvOS view options sheet rendering in History and other views 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
a660591e8d Add Playlists entry to sidebar main navigation
Adds a toggleable "Playlists" item that opens PlaylistsListView,
mirroring the Channels → ManageChannelsView pattern.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f8ca23308d Show grid columns option in view options on tvOS
Expose the grid columns picker in SubscriptionsView and ManageChannelsView
inline sheets, and track viewWidth in ChannelView's tvOS GeometryReaders so
the shared ViewOptionsSheet can compute a meaningful column range.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
cea8fcfe64 Fix tvOS bookmark details disappearing when reopening video info 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
5ef40e24bf Remove channel card background on tvOS and fix grid focus clipping 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
7a55f8ac3a Polish tvOS Manage Channels view options sheet layout 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f302682a03 Give tvOS toast cards more room between icon and text 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
a3275f4cd7 Fix tvOS sidebar media source showing empty screen 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
afc4125bee Style tvOS playlist delete button with red text on bordered background 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
87965d654d Polish tvOS playlist sheets for focus and narrow layout 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
e583aa3fd7 Rework tvOS PeerTube browse and discovery sheets for sidebar layout
Drop nested NavigationStack, .searchable, and close button from the
PeerTube explore view on tvOS; use an inline search field plus Filters
button so focus separates cleanly and the sidebar title is no longer
overlapped. Keep the header visible across empty/error states so the
query can be cleared. Hide the filters and scan-network sheet toolbars
on tvOS, apply filter changes immediately, and add padding plus
scrollClipDisabled so focused rows aren't clipped.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
6d3bea7678 Rework tvOS sources list with sidebar and full-screen add flow
Give TVSidebarDetailContainer an optional bottom action slot and use it to
show the Add Source button beside the sources list on tvOS. Switch the
Settings > Sources list from a focus-capturing List to the same
ScrollView+LazyVStack layout MediaSourcesView already uses, drop
.buttonStyle(.card) so row icons no longer clip, and bump the row
icon-to-title spacing to 24pt. Replace the sheet-based Add/Edit flow in
MediaSourcesView with navigationDestinations wrapped in the sidebar
container, and decorate each Add Source form (WebDAV, SMB, remote server,
PeerTube browse) with its own sidebar icon and title.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
10a27a8105 Rework tvOS device control view with sidebar and focusable controls 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
43039513c1 Upsize AppIconPreview so tvOS settings icon renders sharp
The shared AppIconPreview asset maxed out at 180px, causing the icon in
the tvOS Settings sidebar (rendered at 200pt) to appear pixelated.
Regenerate all three scales from the 1024px master: 400/600/900px.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
77d982f422 Use glass background for tvOS player settings sheet
Match the info/comments and queue panels by replacing the black dim and
inner rounded card with a full-screen ultraThinMaterial backdrop and a
transparent list background on tvOS.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
71dd956f18 Show left-column icon and title for Home and Sidebar settings on tvOS 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
e2f3107833 Use menu-style pickers in tvOS settings
Introduce PlatformMenuPicker that wraps short-option pickers in
LabeledContent + .pickerStyle(.menu) on tvOS so they render as a
compact dropdown instead of pushing a full-screen option list. On
iOS/macOS it falls through to a plain Picker, leaving rendering
unchanged.

Applied across Playback, Subtitles, Sidebar, Privacy, and Advanced
settings. Long language lists in PlaybackSettingsView are left as
push-style.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
df232ad69a Rework tvOS Subscriptions view as two-column layout
Replace the tvOS Subscriptions header (All Channels link + View Options
button) with a left-column channels sidebar that filters the feed in
place, and move view options into a button at the top of the sidebar.
Drops the channel strip size picker from the tvOS options sheet since
the strip does not apply there, and mirrors the ContinueWatchingView
focus pattern so initial focus and post-filter focus land on the first
video row.
2026-04-18 20:38:01 +02:00