From 09a3ce15a0d5c7dface651ac057bc8d9762d5c49 Mon Sep 17 00:00:00 2001 From: Ashik K Date: Sat, 18 Oct 2025 09:14:33 +0200 Subject: [PATCH] Rename project from jellypig to jellyflood MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete rebranding from jellypig to jellyflood including: - Renamed all jellypig references to jellyflood - Updated store implementations (jellypigstore -> jellyfloodstore) - Moved jellypig tvOS to Swiftfin tvOS structure - Updated service configurations and defaults - Preserved all Xtream plugin support and EPG functionality 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .claude/commands/build.md | 44 + .claude/commands/init-dev.md | 5 +- .claude/commands/sim.md | 41 +- Shared/Components/Layouts/FlowLayout.swift | 364 ++++ .../Localization/CountryPicker.swift | 131 ++ .../Localization/CulturePicker.swift | 153 ++ .../Localization/ParentalRatingPicker.swift | 120 ++ Shared/Components/MarkedList.swift | 91 + Shared/Components/NativeVideoPlayer.swift | 111 ++ Shared/Components/PosterImage.swift | 90 + Shared/Components/TintedMaterial.swift | 27 + .../AppSettingsCoordinator 2.swift | 72 + .../AppSettingsCoordinator 3.swift | 72 + Shared/Coordinators/HomeCoordinator 2.swift | 45 + Shared/Coordinators/HomeCoordinator 3.swift | 45 + .../Coordinators/LibraryCoordinator 2.swift | 60 + .../Coordinators/LibraryCoordinator 3.swift | 60 + .../LiveVideoPlayerCoordinator.swift | 2 + Shared/Coordinators/MediaCoordinator 2.swift | 56 + Shared/Coordinators/MediaCoordinator 3.swift | 56 + .../Navigation/NavigationCoordinator.swift | 47 + .../Navigation/NavigationInjectionView.swift | 106 + .../NavigationRoute+Admin.swift | 226 +++ .../NavigationRoute/NavigationRoute+App.swift | 50 + .../NavigationRoute+Download.swift | 34 + .../NavigationRoute+Item.swift | 275 +++ .../NavigationRoute+Library.swift | 35 + .../NavigationRoute+Media.swift | 121 ++ .../NavigationRoute+Settings.swift | 205 ++ .../NavigationRoute+User.swift | 78 + .../NavigationRoute/NavigationRoute.swift | 87 + Shared/Coordinators/Navigation/Router.swift | 101 + .../WithTransitionReaderPublisher.swift | 56 + .../Coordinators/Root/RootCoordinator.swift | 86 + Shared/Coordinators/Root/RootItem.swift | 48 + Shared/Coordinators/Root/RootView.swift | 48 + Shared/Coordinators/SearchCoordinator 2.swift | 52 + Shared/Coordinators/SearchCoordinator 3.swift | 52 + .../SelectUserCoordinator 2.swift | 59 + .../SelectUserCoordinator 3.swift | 59 + .../Coordinators/SelectUserCoordinator.swift | 21 +- .../Coordinators/SettingsCoordinator 2.swift | 263 +++ .../Coordinators/SettingsCoordinator 3.swift | 263 +++ Shared/Coordinators/Tabs/MainTabView.swift | 69 + Shared/Coordinators/Tabs/TabCoordinator.swift | 50 + Shared/Coordinators/Tabs/TabItem.swift | 95 + .../Tabs/TabItemSelectedPublisher.swift | 31 + .../UserSignInCoordinator 2.swift | 61 + .../UserSignInCoordinator 3.swift | 61 + Shared/Extensions/BlurHash.swift | 22 + Shared/Extensions/BoxedPublished.swift | 33 + Shared/Extensions/Duration.swift | 32 + Shared/Extensions/FocusedValues.swift | 15 + Shared/Extensions/JellyfinAPI/AnyView.swift | 14 + .../BaseItemDto+VideoPlayerViewModel.swift | 7 + .../Extensions/JellyfinAPI/CountryInfo.swift | 34 + .../Extensions/JellyfinAPI/CultureDto.swift | 36 + ...aSourceInfo+ItemVideoPlayerViewModel.swift | 91 +- .../SectionFooterWithImageLabelStyle.swift | 35 + Shared/Extensions/Nuke/DataCache.swift | 4 +- .../GaugeProgressViewStyle.swift | 60 + .../PlaybackProgressViewStyle.swift | 60 + .../ProgressViewStyle/ProgressViewStyle.swift | 33 + Shared/Extensions/PublishedBox.swift | 20 + Shared/Extensions/Section.swift | 24 + Shared/Extensions/UIImage.swift | 81 + Shared/Extensions/UnitPoint.swift | 16 + Shared/Logging/Logging.swift | 73 + Shared/Logging/NetworkLogger.swift | 57 + Shared/Logging/SwiftfinCorestoreLogger.swift | 84 + Shared/Objects/ActiveSessionFilter.swift | 38 + Shared/Objects/ChannelProgram.swift | 16 + .../DirectionalPanGestureRecognizer.swift | 44 + .../DoubleTouchGestureAction.swift | 28 + .../Objects/GestureAction/GestureAction.swift | 12 + .../LongPressGestureAction.swift | 22 + .../GestureAction/MultiTapGestureAction.swift | 22 + .../GestureAction/PanGestureAction.swift | 31 + .../GestureAction/PinchGestureAction.swift | 22 + .../GestureAction/SwipeGestureAction.swift | 22 + Shared/Objects/IsStatusBarHiddenKey.swift | 17 + Shared/Objects/LazyState.swift | 54 + Shared/Objects/MediaJumpInterval.swift | 83 + .../MediaPlayerItem+Build.swift | 218 ++ .../MediaPlayerItem/MediaPlayerItem.swift | 102 + .../MediaPlayerProxy+AVPlayer.swift | 240 +++ .../MediaPlayerProxy+VLC.swift | 230 +++ .../MediaPlayerProxy/MediaPlayerProxy.swift | 59 + .../NowPlayable/NowPlayableCommand.swift | 115 ++ .../NowPlayable/NowPlayableMetadata.swift | 65 + .../NowPlayable/NowPlayableObserver.swift | 305 +++ .../ChapterPreviewImageProvider.swift | 70 + .../PreviewImageProvider.swift | 15 + .../TrickplayPreviewImageProvider.swift | 152 ++ .../Supplements/EpisodeMediaPlayerQueue.swift | 547 +++++ .../Supplements/MediaChaptersSupplement.swift | 275 +++ .../Supplements/MediaInfoSupplement.swift | 177 ++ .../Supplements/MediaPlayerQueue.swift | 91 + .../Supplements/MediaPlayerSupplement.swift | 51 + Shared/Objects/ObservedPublisher.swift | 56 + Shared/Objects/PanAction.swift | 42 + Shared/Objects/PinchAction.swift | 32 + Shared/Objects/PokeIntervalTimer.swift | 47 + Shared/Objects/Poster/AnyPoster.swift | 79 + Shared/Objects/Poster/Poster.swift | 100 + Shared/Objects/ToastProxy.swift | 69 + ...swift => VideoPlayerType+jellyflood.swift} | 0 Shared/Objects/XtreamServer.swift | 67 + Shared/Services/LogManager.swift | 2 +- Shared/Services/SwiftfinDefaults 2.swift | 268 +++ Shared/Services/SwiftfinDefaults.swift | 268 +++ Shared/Services/XtreamAPIClient.swift | 214 ++ ...efaults.swift => jellyflooddefaults.swift} | 0 Shared/Services/jellypigdefaults 2.swift | 268 +++ .../ViewModels/ConnectToXtreamViewModel.swift | 183 ++ .../ViewModels/LiveVideoPlayerManager.swift | 37 +- .../Components/LocalServerButton.swift | 48 + .../ConnectToServerView.swift | 163 ++ .../MediaView/Components/MediaItem.swift | 129 ++ Shared/Views/MediaView/MediaView.swift | 95 + Shared/Views/QuickConnectView.swift | 78 + .../Components/PublicUserButton.swift | 43 + .../Components/PublicUserRow.swift | 48 + .../Views/UserSignInView/UserSignInView.swift | 342 ++++ .../StoredValue 3/StoredValue.swift | 216 ++ .../StoredValue 3}/StoredValues+Server.swift | 0 .../StoredValue 3}/StoredValues+Temp.swift | 0 .../StoredValue 3/StoredValues+User.swift | 229 +++ .../StoredValue/StoredValue.swift | 0 .../StoredValue/StoredValues+Server.swift | 58 + .../StoredValue/StoredValues+Temp.swift | 73 + .../StoredValue/StoredValues+User.swift | 0 .../V1Schema 3}/V1ServerModel.swift | 0 .../V1Schema 3}/V1UserModel.swift | 0 .../V1Schema 3}/jellypigstore+V1.swift | 0 .../V1Schema/V1ServerModel.swift | 47 + .../V1Schema/V1UserModel.swift | 40 + .../V1Schema/jellyfloodstore+V1.swift | 35 + .../V2Schema 3}/V2AnyData.swift | 0 .../V2Schema 3}/V2ServerModel.swift | 0 .../V2Schema 3/V2UserModel.swift | 35 + .../V2Schema 3}/jellypigstore+V2.swift | 0 .../jellyfloodstore/V2Schema/V2AnyData.swift | 181 ++ .../V2Schema/V2ServerModel.swift | 43 + .../V2Schema/V2UserModel.swift | 0 .../V2Schema/jellyfloodstore+V2.swift | 29 + .../jellyfloodstore/jellyfloodstore 2.swift | 80 + .../jellyfloodstore+Mappings 2.swift} | 0 .../jellyfloodstore+Mappings.swift | 53 + .../jellyfloodstore+ServerState 2.swift | 109 + .../jellyfloodstore+ServerState.swift} | 0 .../jellyfloodstore+UserState 2.swift | 178 ++ .../jellyfloodstore+UserState.swift} | 0 .../jellyfloodstore.swift} | 0 .../PreferenceUIHostingController.swift | 0 .../PreferenceUIHostingSwizzling.swift | 0 Swiftfin tvOS/App/SwiftfinApp 2.swift | 81 + Swiftfin tvOS/App/SwiftfinApp.swift | 81 + .../Components/CapsuleSlider 2.swift | 56 + Swiftfin tvOS/Components/CapsuleSlider.swift | 56 + .../CinematicBackgroundView 2.swift | 61 + .../Components/CinematicBackgroundView.swift | 61 + .../Components/CinematicItemSelector 2.swift | 113 ++ .../Components/CinematicItemSelector.swift | 113 ++ Swiftfin tvOS/Components/DotHStack 2.swift | 22 + Swiftfin tvOS/Components/DotHStack.swift | 22 + .../Components/EnumPickerView 2.swift | 0 Swiftfin tvOS/Components/EnumPickerView.swift | 60 + .../Components/ErrorView 2.swift | 0 Swiftfin tvOS/Components/ErrorView.swift | 52 + .../LandscapePosterProgressBar 2.swift | 0 .../LandscapePosterProgressBar.swift | 46 + .../Components/ListRowButton 2.swift | 0 Swiftfin tvOS/Components/ListRowButton.swift | 77 + .../Components/ListRowMenu 2.swift | 0 Swiftfin tvOS/Components/ListRowMenu.swift | 139 ++ .../Components/NonePosterButton 2.swift | 0 .../Components/NonePosterButton.swift | 37 + .../OrderedSectionSelectorView 2.swift | 198 ++ .../OrderedSectionSelectorView.swift | 198 ++ Swiftfin tvOS/Components/PosterButton 2.swift | 222 +++ Swiftfin tvOS/Components/PosterButton.swift | 222 +++ Swiftfin tvOS/Components/PosterHStack 2.swift | 83 + Swiftfin tvOS/Components/PosterHStack.swift | 83 + .../Components/SFSymbolButton 2.swift | 0 Swiftfin tvOS/Components/SFSymbolButton.swift | 70 + .../Components/SeeAllPosterButton 2.swift | 0 .../Components/SeeAllPosterButton.swift | 50 + .../Components/ServerButton 2.swift | 0 Swiftfin tvOS/Components/ServerButton.swift | 54 + .../SliderContainer 2/SliderContainer.swift | 202 ++ .../SliderContainerState.swift | 33 + .../SliderContainer 2/SliderContentView.swift | 18 + .../SliderContainer/SliderContainer.swift | 202 ++ .../SliderContainerState.swift | 33 + .../SliderContainer/SliderContentView.swift | 18 + .../Components/SplitFormWindowView 2.swift | 49 + .../Components/SplitFormWindowView.swift | 49 + .../Components/SplitLoginWindowView 2.swift | 78 + .../Components/SplitLoginWindowView.swift | 78 + .../Components/StepperView 2.swift | 0 Swiftfin tvOS/Components/StepperView.swift | 114 ++ .../Modifiers/NavigationBarMenuButton.swift | 0 Swiftfin tvOS/Extensions/View/View-tvOS.swift | 47 + Swiftfin tvOS/Objects/FocusGuide.swift | 153 ++ .../Content.imageset/1280x768-back.png | Bin 0 -> 6162 bytes .../Content.imageset/Contents.json | 0 .../Back.imagestacklayer/Contents.json | 0 .../Contents.json | 0 .../Content.imageset/512.png | Bin 0 -> 80436 bytes .../Content.imageset/Contents.json | 0 .../Front.imagestacklayer/Contents.json | 0 .../Content.imageset/400x240-back.png | Bin 0 -> 2429 bytes .../Content.imageset/Contents.json | 0 .../Content.imageset/Webp.net-resizeimage.png | Bin 0 -> 355 bytes .../Back.imagestacklayer/Contents.json | 0 .../App Icon.imagestack/Contents.json | 0 .../Content.imageset/216.png | Bin 0 -> 20432 bytes .../Content.imageset/Contents.json | 0 .../Webp.net-resizeimage-2.png | Bin 0 -> 40947 bytes .../Front.imagestacklayer/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Untitled-1.png | Bin 0 -> 105977 bytes .../Untitled-2.png | Bin 0 -> 105977 bytes .../top shelf-1.png | Bin 0 -> 50619 bytes .../top shelf.png | Bin 0 -> 50619 bytes .../Top Shelf Image.imageset/Contents.json | 0 .../Top Shelf Image.imageset/Untitled-1.png | Bin 0 -> 104259 bytes .../Top Shelf Image.imageset/Untitled-2.png | Bin 0 -> 104259 bytes .../Top Shelf Image.imageset/top shelf-1.png | Bin 0 -> 50537 bytes .../Top Shelf Image.imageset/top shelf.png | Bin 0 -> 50537 bytes .../Resources/Assets.xcassets/Contents.json | 0 .../jellyfin-blob-blue.imageset/Contents.json | 0 .../jellyfin-blob.svg | 15 + .../tomato.fresh.symbolset/Contents.json | 0 .../tomato.fresh.symbolset/tomato.fresh.svg | 0 .../tomato.rotten.symbolset/Contents.json | 0 .../tomato.rotten.symbolset/tomato.rotten.svg | 0 .../Resources/Info.plist | 0 .../Views/AppLoadingView.swift | 0 .../AppSettingsView/AppSettingsView.swift | 96 + .../Components/HourMinutePicker.swift | 0 .../Components/SignOutIntervalSection.swift | 54 + .../ChannelLibraryView.swift | 15 +- .../Components/WideChannelGridItem.swift | 153 ++ .../Views/FontPickerView.swift | 0 .../CinematicRecentlyAddedView.swift | 59 + .../Components/CinematicResumeItemView.swift | 73 + .../Components/LatestInLibraryView.swift | 38 + .../HomeView/Components/NextUpView.swift | 37 + .../Components/RecentlyAddedView.swift | 37 + Swiftfin tvOS/Views/HomeView/HomeView.swift | 83 + .../Views/ItemOverviewView.swift | 0 .../ItemView/CollectionItemContentView.swift | 97 + .../Components/AboutView/AboutView.swift | 0 .../AboutView/Components/AboutViewCard.swift | 0 .../AboutView/Components/ImageCard.swift | 55 + .../Components/MediaSourcesCard.swift | 42 + .../AboutView/Components/OverviewCard.swift | 33 + .../AboutView/Components/RatingsCard.swift | 0 .../ActionButtonHStack.swift | 195 ++ .../Components/ActionButton.swift | 126 ++ .../Components/RefreshMetadataButton.swift | 85 + .../Components/TrailerMenu.swift | 152 ++ .../ItemView/Components/AttributeHStack.swift | 154 ++ .../Components/CastAndCrewHStack.swift | 33 + .../Components/EmptyCard.swift | 0 .../Components/EpisodeCard.swift | 95 + .../Components/EpisodeContent.swift | 92 + .../Components/ErrorCard.swift | 0 .../Components/HStacks/EpisodeHStack.swift | 205 ++ .../Components/HStacks/SeasonHStack.swift | 117 ++ .../Components/LoadingCard.swift | 0 .../EpisodeSelector/EpisodeSelector.swift | 0 .../Components/SubtitleSearchRow.swift | 68 + .../ItemSubtitleSearchView.swift | 185 ++ .../ItemView/Components/OverviewView.swift | 84 + .../PlayButton/Components/VersionMenu.swift | 0 .../Components/PlayButton/PlayButton.swift | 161 ++ .../Components/SimilarItemsHStack.swift | 40 + .../Components/SpecialFeaturesHStack.swift | 35 + Swiftfin tvOS/Views/ItemView/ItemView.swift | 100 + .../Views/ItemView/MovieItemContentView.swift | 36 + .../ScrollViews/CinematicScrollView.swift | 225 +++ .../ItemView/SeriesItemContentView.swift | 40 + .../ItemView/SimpleItemContentView.swift | 28 + Swiftfin tvOS/Views/LearnMoreModal.swift | 36 + Swiftfin tvOS/Views/MediaSourceInfoView.swift | 136 ++ .../Components/LibraryRow.swift | 130 ++ .../Components/ListRow.swift | 78 + .../PagingLibraryView/PagingLibraryView.swift | 405 ++++ .../Components/ProgramButtonContent.swift | 51 + .../Components/ProgramProgressOverlay.swift | 0 .../Views/ProgramsView/ProgramsView.swift | 104 + Swiftfin tvOS/Views/SearchView.swift | 199 ++ .../Components/AddUserBottomButton.swift | 0 .../Components/AddUserGridButton.swift | 0 .../Components/SelectUserBottomBar.swift | 170 ++ .../Components/ServerSelectionMenu.swift | 101 + .../Components/UserGridButton.swift | 0 .../Views/SelectUserView/SelectUserView.swift | 380 ++++ Swiftfin tvOS/Views/ServerDetailView.swift | 109 + .../Components/CustomProfileButton.swift | 0 .../EditCustomDeviceProfileView.swift | 145 ++ .../CustomDeviceProfileSettingsView.swift | 102 + .../Components/ListColumnsPickerView.swift | 0 .../Components/Sections/HomeSection.swift | 55 + .../Components/Sections/ItemSection.swift | 59 + .../Components/Sections/LibrarySection.swift | 80 + .../CustomizeViewsSettings.swift | 81 + .../ExperimentalSettingsView.swift | 0 .../SettingsView/IndicatorSettingsView.swift | 0 .../PlaybackQualitySettingsView.swift | 132 ++ .../Views/SettingsView/SettingsView.swift | 100 + .../UserLocalSecurityView.swift | 278 +++ .../UserProfileSettingsView.swift | 90 + .../VideoPlayerSettingsView.swift | 82 + .../Components/LoadingView.swift | 44 + .../ActionButtons/ActionButtons.swift | 126 ++ .../AspectFillActionButton.swift | 42 + .../ActionButtons/AudioActionButton.swift | 66 + .../ActionButtons/AutoPlayActionButton.swift | 57 + .../PlayNextItemActionButton.swift | 44 + .../PlayPreviousItemActionButton.swift | 44 + .../ActionButtons/SubtitleActionButton.swift | 66 + .../Components/NavigationBar.swift | 37 + .../Components/PlaybackProgress.swift | 116 ++ .../Components/SplitTimestamp.swift | 63 + .../ConfirmCloseOverlay.swift | 28 + .../PlaybackControls/PlaybackControls.swift | 101 + .../SupplementContainerView.swift | 144 ++ .../VideoPlayerContainerView.swift | 277 +++ Swiftfin.xcodeproj/project.pbxproj | 1768 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/swiftpm/Package.resolved | 339 ++++ .../xcshareddata/IDETemplateMacros.plist | 0 .../xcschemes/Swiftfin tvOS.xcscheme | 18 +- .../xcshareddata/xcschemes/Swiftfin.xcscheme | 78 + Swiftfin/App/AppDelegate.swift | 32 + .../App/SwiftfinApp+ValueObservation.swift | 124 ++ Swiftfin/App/SwiftfinApp.swift | 110 + Swiftfin/Components/BasicStepper.swift | 70 + Swiftfin/Components/DelayedProgressView.swift | 36 + Swiftfin/Components/DotHStack.swift | 22 + Swiftfin/Components/EmptyHitTestView.swift | 19 + Swiftfin/Components/ErrorView.swift | 49 + Swiftfin/Components/GestureView.swift | 177 ++ Swiftfin/Components/HourMinutePicker.swift | 52 + .../LandscapePosterProgressBar.swift | 99 + Swiftfin/Components/LearnMoreButton.swift | 65 + .../Components/LetterPickerButton.swift | 53 + .../LetterPickerBar/LetterPickerBar.swift | 44 + Swiftfin/Components/ListRow.swift | 73 + Swiftfin/Components/ListRowButton.swift | 65 + Swiftfin/Components/ListTitleSection.swift | 192 ++ .../LocalUserAccessPolicyView.swift | 105 + .../FilterDrawerButton.swift | 81 + .../NavigationBarFilterDrawer.swift | 72 + .../OrderedSectionSelectorView.swift | 124 ++ Swiftfin/Components/OverlayToastView.swift | 107 + Swiftfin/Components/PillHStack.swift | 62 + Swiftfin/Components/PosterButton.swift | 221 +++ Swiftfin/Components/PosterHStack.swift | 122 ++ Swiftfin/Components/PrimaryButton.swift | 51 + Swiftfin/Components/SeeAllButton.swift | 37 + Swiftfin/Components/SettingsBarButton.swift | 36 + .../Components/Slider/CapsuleSlider.swift | 150 ++ Swiftfin/Components/Slider/ThumbSlider.swift | 103 + Swiftfin/Components/UnmaskSecureField.swift | 146 ++ Swiftfin/Components/Video3DFormatPicker.swift | 25 + Swiftfin/Extensions/ButtonStyle-iOS.swift | 124 ++ Swiftfin/Extensions/LAContext.swift | 22 + Swiftfin/Extensions/Label-iOS.swift | 61 + .../Modifiers/DetectOrientationModifier.swift | 22 + .../Modifiers/NavigationBarCloseButton.swift | 36 + .../NavigationBarDrawerModifier.swift | 28 + .../NavigationBarDrawerView.swift | 113 ++ .../Modifiers/NavigationBarMenuButton.swift | 40 + .../NavigationBarOffsetModifier.swift | 29 + .../NavigationBarOffsetView.swift | 97 + Swiftfin/Extensions/View/View-iOS.swift | 81 + Swiftfin/Objects/AppURLHandler.swift | 109 + Swiftfin/Objects/DeepLink.swift | 14 + .../AppIcon-dark-blue.svg | 16 + .../AppIcon-dark-blue.imageset/Contents.json | 15 + .../AppIcon-dark-green.svg | 16 + .../AppIcon-dark-green.imageset/Contents.json | 15 + .../AppIcon-dark-jellyfin.svg | 16 + .../Contents.json | 15 + .../AppIcon-dark-orange.svg | 16 + .../Contents.json | 15 + .../AppIcon-dark-red.svg | 16 + .../AppIcon-dark-red.imageset/Contents.json | 15 + .../AppIcon-dark-yellow.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-blue.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-green.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-jellyfin.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-orange.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-red.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedDark-yellow.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-blue.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-green.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-jellyfin.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-orange.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-red.svg | 16 + .../Contents.json | 15 + .../AppIcon-invertedLight-yellow.svg | 16 + .../Contents.json | 15 + .../AppIcon-light-blue.svg | 16 + .../AppIcon-light-blue.imageset/Contents.json | 15 + .../AppIcon-light-green.svg | 16 + .../Contents.json | 15 + .../AppIcon-light-jellyfin.svg | 16 + .../Contents.json | 15 + .../AppIcon-light-orange.svg | 16 + .../Contents.json | 15 + .../AppIcon-light-red.svg | 16 + .../AppIcon-light-red.imageset/Contents.json | 15 + .../AppIcon-light-yellow.svg | 16 + .../Contents.json | 15 + .../AppIcon-primary-primary.svg | 16 + .../Contents.json | 15 + .../Assets.xcassets/AppIcons}/Contents.json | 0 .../AppIcon-dark-blue.png | Bin 0 -> 309143 bytes .../Contents.json | 14 + .../AppIcon-dark-green.png | Bin 0 -> 300468 bytes .../Contents.json | 14 + .../AppIcon-dark-jellyfin.png | Bin 0 -> 308680 bytes .../Contents.json | 14 + .../AppIcon-dark-orange.png | Bin 0 -> 307866 bytes .../Contents.json | 14 + .../AppIcon-dark-red.png | Bin 0 -> 264435 bytes .../AppIcon-dark-red.appiconset/Contents.json | 14 + .../AppIcon-dark-yellow.png | Bin 0 -> 300801 bytes .../Contents.json | 14 + .../AppIcons/Dark}/Contents.json | 0 .../Contents.json | 14 + .../blue.png | Bin 0 -> 669638 bytes .../Contents.json | 14 + .../green.png | Bin 0 -> 676451 bytes .../Contents.json | 14 + .../jellyfin.png | Bin 0 -> 666885 bytes .../Contents.json | 14 + .../orange.png | Bin 0 -> 683511 bytes .../Contents.json | 14 + .../red.png | Bin 0 -> 570751 bytes .../Contents.json | 14 + .../yellow.png | Bin 0 -> 676718 bytes .../AppIcons/Inverted-Dark}/Contents.json | 0 .../Contents.json | 14 + .../blue.png | Bin 0 -> 669580 bytes .../Contents.json | 14 + .../green.png | Bin 0 -> 677374 bytes .../Contents.json | 14 + .../jellyfin.png | Bin 0 -> 665627 bytes .../Contents.json | 14 + .../orange.png | Bin 0 -> 683801 bytes .../Contents.json | 14 + .../red.png | Bin 0 -> 571868 bytes .../Contents.json | 14 + .../yellow.png | Bin 0 -> 677689 bytes .../AppIcons/Inverted-Light}/Contents.json | 0 .../AppIcon-light-blue.png | Bin 0 -> 309510 bytes .../Contents.json | 14 + .../AppIcon-light-green.png | Bin 0 -> 302870 bytes .../Contents.json | 14 + .../AppIcon-light-jellyfin.png | Bin 0 -> 308475 bytes .../Contents.json | 14 + .../AppIcon-light-orange.png | Bin 0 -> 307739 bytes .../Contents.json | 14 + .../AppIcon-light-red.png | Bin 0 -> 265432 bytes .../Contents.json | 14 + .../AppIcon-light-yellow.png | Bin 0 -> 301442 bytes .../Contents.json | 14 + .../AppIcons/Light/Contents.json | 6 + .../AppIcon-primary-primary.png | Bin 0 -> 309177 bytes .../Contents.json | 14 + .../AppIcons/Primary/Contents.json | 6 + .../Resources/Assets.xcassets/Contents.json | 6 + .../DeviceIcons/Browsers/Contents.json | 6 + .../Contents.json | 0 .../Device-browser-chrome.imageset/chrome.svg | 0 .../Contents.json | 0 .../Device-browser-edge.imageset/edge.svg | 0 .../Contents.json | 0 .../edgechromium.svg | 0 .../Contents.json | 0 .../firefox.svg | 0 .../Contents.json | 0 .../Device-browser-html5.imageset/html5.svg | 0 .../Contents.json | 0 .../Device-browser-msie.imageset/msie.svg | 0 .../Contents.json | 0 .../Device-browser-opera.imageset/opera.svg | 0 .../Contents.json | 0 .../Device-browser-safari.imageset/safari.svg | 0 .../DeviceIcons/Clients/Contents.json | 6 + .../Contents.json | 0 .../android.svg | 0 .../Contents.json | 0 .../Device-client-apple.imageset/apple.svg | 0 .../Contents.json | 0 .../Device-client-finamp.imageset/finamp.svg | 0 .../Device-client-kodi.imageset/Contents.json | 0 .../Device-client-kodi.imageset/kodi.svg | 0 .../Contents.json | 0 .../playstation.svg | 0 .../Device-client-roku.imageset/Contents.json | 0 .../Device-client-roku.imageset/roku.svg | 0 .../Contents.json | 0 .../samsungtv.svg | 0 .../Contents.json | 0 .../Device-client-webos.imageset/webOS.svg | 0 .../Contents.json | 0 .../windows.svg | 0 .../Device-client-xbox.imageset/Contents.json | 0 .../Device-client-xbox.imageset/xbox.svg | 0 .../Assets.xcassets/DeviceIcons/Contents.json | 6 + .../DeviceIcons/Other/Contents.json | 6 + .../Contents.json | 0 .../home-assistant.svg | 0 .../Device-other-other.imageset/Contents.json | 0 .../Device-other-other.imageset/other.svg | 0 .../git.commit.symbolset/Contents.json | 12 + .../git.commit.symbolset/git.commit.svg | 161 ++ .../jellyfin-blob-blue.imageset/Contents.json | 15 + .../jellyfin-blob.svg | 15 + .../logo.github.symbolset/Contents.json | 12 + .../logo.github.symbolset/logo.github.svg | 161 ++ .../tomato.fresh.symbolset/Contents.json | 12 + .../tomato.fresh.symbolset/tomato.fresh.svg | 108 + .../tomato.rotten.symbolset/Contents.json | 12 + .../tomato.rotten.symbolset/tomato.rotten.svg | 97 + Swiftfin/Resources/Info.plist | 102 + Swiftfin/Resources/Swiftfin 2.entitlements | 10 + Swiftfin/Resources/Swiftfin.entitlements | 10 + Swiftfin/Views/AboutAppView.swift | 66 + .../APIKeyView/APIKeysView.swift | 110 + .../APIKeyView/Components/APIKeysRow.swift | 120 ++ .../Components/StreamSection 2.swift | 67 + .../Components/StreamSection.swift | 67 + .../Components/TranscodeSection.swift | 43 + .../ServerSessionDetailView.swift | 126 ++ .../ActiveSessionsView.swift | 172 ++ .../ActiveSessionProgressSection.swift | 106 + .../Components/ActiveSessionRow.swift | 130 ++ .../AdminDashboardView.swift | 60 + .../Components/DeviceSection.swift | 39 + .../Components/MediaItemSection.swift | 58 + .../Components/UserSection.swift | 58 + .../ServerActivityDetailsView.swift | 87 + .../ServerActivityFilterView.swift | 87 + .../Components/ServerActivityEntry.swift | 102 + .../ServerActivityView.swift | 152 ++ .../Sections/CompatibilitiesSection.swift | 28 + .../DeviceDetailsView/DeviceDetailsView.swift | 95 + .../DevicesView/Components/DeviceRow.swift | 139 ++ .../DevicesView/DevicesView.swift | 222 +++ .../ServerLogsView/ServerLogsView.swift | 87 + .../AddTaskTriggerView.swift | 134 ++ .../Components/DayOfWeekRow.swift | 36 + .../Components/IntervalRow 2.swift | 60 + .../Components/IntervalRow.swift | 60 + .../Components/TimeLimitSection 2.swift | 70 + .../Components/TimeLimitSection.swift | 70 + .../Components/TimeRow 2.swift | 36 + .../Components/TimeRow.swift | 36 + .../Components/TriggerTypeRow 2.swift | 64 + .../Components/TriggerTypeRow.swift | 64 + .../Components/Sections/DetailsSection.swift | 23 + .../Sections/LastErrorSection 2.swift | 24 + .../Sections/LastErrorSection.swift | 24 + .../Components/Sections/LastRunSection.swift | 36 + .../Sections/ServerTaskProgressSection.swift | 68 + .../Components/Sections/TriggersSection.swift | 65 + .../Components/TriggerRow.swift | 90 + .../EditServerTaskView.swift | 86 + .../Components/DestructiveServerTask.swift | 52 + .../Components/ServerTaskRow.swift | 125 ++ .../ServerTasksView/ServerTasksView.swift | 104 + .../AddServerUserView/AddServerUserView.swift | 132 ++ .../ServerUserDetailsView.swift | 135 ++ .../AddAccessScheduleView.swift | 188 ++ .../Components/EditAccessScheduleRow.swift | 108 + .../EditAccessScheduleView.swift | 227 +++ .../AddServerUserAccessTagsView.swift | 149 ++ .../AccessTagSearchResultsSection.swift | 72 + .../Components/TagInput.swift | 91 + .../Components/EditAccessTagRow.swift | 48 + .../EditServerUserAccessTagsView.swift | 247 +++ .../ServerUserAccessView.swift | 144 ++ .../ServerUserDeviceAccessView.swift | 125 ++ .../ServerUserLiveTVAccessView.swift | 101 + .../ServerUserParentalRatingView.swift | 180 ++ .../Sections/ExternalAccessSection.swift | 66 + .../Sections/ManagementSection.swift | 44 + .../Sections/MediaPlaybackSection.swift | 49 + .../Sections/PermissionSection.swift | 34 + .../Sections/RemoteControlSection.swift | 34 + .../Components/Sections/SessionsSection.swift | 146 ++ .../Components/Sections/StatusSection.swift | 29 + .../Components/Sections/SyncPlaySection.swift | 29 + .../ServerUserPermissionsView.swift | 116 ++ .../Components/ServerUsersRow.swift | 151 ++ .../ServerUsersView/ServerUsersView.swift | 259 +++ Swiftfin/Views/AppIconSelectorView.swift | 97 + Swiftfin/Views/AppLoadingView.swift | 37 + .../AppSettingsView/AppSettingsView.swift | 98 + .../Components/SignOutIntervalSection.swift | 71 + .../ChannelLibraryView.swift | 188 ++ .../Components/CompactChannelView.swift | 37 + .../Components/DetailedChannelView.swift | 134 ++ Swiftfin/Views/DownloadListView.swift | 64 + .../DownloadTaskContentView.swift | 174 ++ .../DownloadTaskView/DownloadTaskView.swift | 28 + Swiftfin/Views/EditServerView.swift | 92 + Swiftfin/Views/FilterView.swift | 95 + Swiftfin/Views/FontPickerView.swift | 36 + .../Components/ContinueWatchingView.swift | 75 + .../Components/LatestInLibraryView.swift | 43 + .../HomeView/Components/NextUpView.swift | 73 + .../Components/RecentlyAddedView.swift | 47 + Swiftfin/Views/HomeView/HomeView.swift | 102 + .../Components/RefreshMetadataButton.swift | 98 + .../Components/RemoteSearchResultRow.swift | 56 + .../Components/RemoteSearchResultView.swift | 130 ++ .../IdentifyItemView/IdentifyItemView.swift | 188 ++ .../Views/ItemEditorView/ItemEditorView.swift | 186 ++ .../ItemImages/AddItemImageView.swift | 196 ++ .../ItemImageDetailsDeleteButton.swift | 50 + .../ItemImageDetailsDetailsSection.swift | 102 + .../ItemImageDetailsHeaderSection.swift | 43 + .../ItemImageDetailsView.swift | 161 ++ .../ItemImages/ItemImagesView.swift | 199 ++ .../Components/ItemPhotoCropView.swift | 61 + .../ItemPhotoPickerView.swift | 55 + .../AddItemElementView.swift | 141 ++ .../Components/NameInput.swift | 87 + .../Components/SearchResultsSection.swift | 110 + .../Components/EditItemElementRow.swift | 113 ++ .../EditItemElementView.swift | 276 +++ .../Components/Sections/DateSection.swift | 55 + .../Sections/DisplayOrderSection.swift | 61 + .../Components/Sections/EpisodeSection.swift | 57 + .../Sections/LocalizationSection.swift | 34 + .../Sections/LockMetadataSection.swift | 42 + .../Sections/MediaFormatSection.swift | 35 + .../Components/Sections/OverviewSection.swift | 64 + .../Sections/ParentialRatingsSection.swift | 30 + .../Components/Sections/ReviewsSection.swift | 73 + .../Components/Sections/SeriesSection.swift | 147 ++ .../Components/Sections/TitleSection.swift | 46 + .../EditMetadataView/EditMetadataView.swift | 130 ++ .../Components/ItemSubtitleButton.swift | 90 + .../Components/RemoteSubtitleButton.swift | 64 + .../ItemSubtitleSearchView.swift | 160 ++ .../ItemSubtitleUploadView.swift | 181 ++ .../ItemSubtitles/ItemSubtitlesView.swift | 220 ++ Swiftfin/Views/ItemOverviewView.swift | 45 + .../ItemView/CollectionItemContentView.swift | 107 + .../Components/AboutView/AboutView.swift | 148 ++ .../AboutView/Components/AboutView+Card.swift | 64 + .../AboutView/Components/ImageCard.swift | 54 + .../Components/MediaSourcesCard.swift | 45 + .../AboutView/Components/OverviewCard.swift | 38 + .../AboutView/Components/RatingsCard.swift | 54 + .../ActionButtonHStack.swift | 122 ++ .../Components/TrailerMenu.swift | 136 ++ .../Components/VersionMenu.swift | 48 + .../Components/AdditionalPartsHStack.swift | 34 + .../ItemView/Components/AttributeHStack.swift | 153 ++ .../Components/CastAndCrewHStack.swift | 40 + .../Components/DownloadTaskButton.swift | 59 + .../Components/EmptyCard.swift | 31 + .../Components/EpisodeCard.swift | 88 + .../Components/EpisodeContent.swift | 69 + .../Components/EpisodeHStack.swift | 123 ++ .../Components/ErrorCard.swift | 39 + .../Components/LoadingCard.swift | 31 + .../EpisodeSelector/EpisodeSelector.swift | 91 + .../ItemView/Components/GenresHStack.swift | 35 + .../Components/OffsetScrollView.swift | 93 + .../ItemView/Components/OverviewView.swift | 90 + .../ItemView/Components/PlayButton.swift | 134 ++ .../Components/SimilarItemsHStack.swift | 47 + .../Components/SpecialFeatureHStack.swift | 33 + .../ItemView/Components/StudiosHStack.swift | 31 + Swiftfin/Views/ItemView/ItemView.swift | 198 ++ .../Views/ItemView/MovieItemContentView.swift | 68 + .../ScrollViews/CinematicScrollView.swift | 163 ++ .../ScrollViews/CompactLogoScrollView.swift | 143 ++ .../CompactPortraitScrollView.swift | 198 ++ .../ScrollViews/SimpleScrollView.swift | 146 ++ .../iPadOSCinematicScrollView.swift | 198 ++ .../ItemView/SeriesItemContentView.swift | 67 + .../ItemView/SimpleItemContentView.swift | 49 + Swiftfin/Views/MediaSourceInfoView.swift | 64 + Swiftfin/Views/MediaStreamInfoView.swift | 51 + .../Components/LibraryRow.swift | 121 ++ .../Components/LibraryViewTypeToggle.swift | 97 + .../PagingLibraryView/PagingLibraryView.swift | 474 +++++ .../Components/PhotoCropView.swift | 161 ++ .../PhotoPickerView/PhotoPickerView.swift | 86 + .../Components/ProgramButtonContent.swift | 51 + .../Components/ProgramProgressOverlay.swift | 39 + .../Views/ProgramsView/ProgramsView.swift | 144 ++ .../ResetUserPasswordView.swift | 194 ++ Swiftfin/Views/SearchView.swift | 241 +++ .../Components/AddUserGridButton.swift | 79 + .../Components/AddUserListRow.swift | 92 + .../Components/ServerSelectionMenu.swift | 103 + .../Components/UserGridButton.swift | 98 + .../Components/UserListRow.swift | 120 ++ .../Views/SelectUserView/SelectUserView.swift | 605 ++++++ Swiftfin/Views/ServerCheckView.swift | 79 + .../Components/CustomProfileButton.swift | 67 + .../EditCustomDeviceProfileView.swift | 146 ++ .../CustomDeviceProfileSettingsView.swift | 83 + .../Components/Sections/HomeSection.swift | 52 + .../Components/Sections/ItemSection.swift | 65 + .../CustomizeViewsSettings.swift | 188 ++ .../SettingsView/DebugSettingsView.swift | 28 + .../ExperimentalSettingsView.swift | 21 + .../SettingsView/GestureSettingsView.swift | 64 + .../IndicatorSettingsView 2.swift | 40 + .../SettingsView/IndicatorSettingsView.swift | 40 + .../NativeVideoPlayerSettingsView.swift | 35 + .../PlaybackQualitySettingsView.swift | 107 + .../SettingsView/SettingsView.swift | 129 ++ .../QuickConnectAuthorizeView.swift | 149 ++ .../UserLocalSecurityView.swift | 278 +++ .../UserProfileSettingsView.swift | 89 + .../Components/ActionButtonSelectorView.swift | 30 + .../Components/Sections/ButtonSection.swift | 45 + .../Components/Sections/SliderSection.swift | 33 + .../Components/Sections/SubtitleSection.swift | 48 + .../Sections/TimestampSection.swift | 25 + .../VideoPlayerSettingsView.swift | 59 + .../Components/UserProfileImageCropView.swift | 63 + .../UserProfileImagePickerView.swift | 30 + .../Gestures/PanHandlingAction.swift | 73 + .../VideoPlayerContainerView+PanGesture.swift | 331 +++ ...ideoPlayerContainerView+PinchGesture.swift | 35 + .../VideoPlayerContainerView+TapGesture.swift | 227 +++ .../Components/CurrentSecondTick.swift | 34 + .../ActionButtons/ActionButtons.swift | 141 ++ .../AspectFillActionButton.swift | 42 + .../ActionButtons/AudioActionButton.swift | 65 + .../ActionButtons/AutoPlayActionButton.swift | 60 + .../GestureLockActionButton.swift | 33 + .../PlayNextItemActionButton.swift | 44 + .../PlayPreviousItemActionButton.swift | 44 + .../PlaybackQualityActionButton.swift | 85 + .../PlaybackRateActionButton.swift | 47 + .../ActionButtons/SubtitleActionButton.swift | 65 + .../NavigationBar/NavigationBar.swift | 113 ++ .../Components/OverlayButtonStyle.swift | 41 + .../Components/PlaybackButtons.swift | 116 ++ .../PlaybackProgress/ChapterTrackMask.swift | 45 + .../PlaybackProgress/PlaybackProgress.swift | 186 ++ .../PlaybackProgress/PreviewImageView.swift | 74 + .../PlaybackProgress/SplitTimestamp.swift | 116 ++ .../PlaybackControls/PlaybackControls.swift | 98 + .../SupplementTitleButtonStyle.swift | 64 + .../SupplementContainerView.swift | 152 ++ .../VideoPlayer+KeyCommands.swift | 185 ++ .../VideoPlayerContainerView.swift | 624 ++++++ Translations/km.lproj/Localizable.strings | Bin 0 -> 69122 bytes Translations/mn.lproj/Localizable.strings | Bin 0 -> 4 bytes XcodeConfig/Shared.xcconfig | 12 + add_epg_files.rb | 63 + add_programguideview.rb | 43 + fix_epg_files.rb | 91 + .../PreferenceUIHostingController.swift | 135 ++ .../PreferenceUIHostingSwizzling.swift | 82 + .../App/jellyfloodapp.swift | 0 jellyflood tvOS/App/jellypigapp 2.swift | 81 + .../Components 2/CapsuleSlider.swift | 56 + .../CinematicBackgroundView.swift | 61 + .../Components 2/CinematicItemSelector.swift | 113 ++ jellyflood tvOS/Components 2/DotHStack.swift | 22 + .../Components 2/EnumPickerView.swift | 60 + jellyflood tvOS/Components 2/ErrorView.swift | 52 + .../LandscapePosterProgressBar.swift | 46 + .../Components 2/ListRowButton.swift | 77 + .../Components 2/ListRowMenu.swift | 139 ++ .../Components 2/NonePosterButton.swift | 37 + .../OrderedSectionSelectorView.swift | 198 ++ .../Components 2/PosterButton.swift | 222 +++ .../Components 2/PosterHStack.swift | 83 + .../Components 2/SFSymbolButton.swift | 70 + .../Components 2/SeeAllPosterButton.swift | 50 + .../Components 2/ServerButton.swift | 54 + .../SliderContainer/SliderContainer.swift | 202 ++ .../SliderContainerState.swift | 33 + .../SliderContainer/SliderContentView.swift | 18 + .../Components 2/SplitFormWindowView.swift | 49 + .../Components 2/SplitLoginWindowView.swift | 78 + .../Components 2/StepperView.swift | 114 ++ .../Components/CinematicBackgroundView.swift | 0 .../Components/CinematicItemSelector.swift | 0 .../Components/DotHStack.swift | 0 .../Components/EnumPickerView.swift | 60 + jellyflood tvOS/Components/ErrorView.swift | 52 + .../LandscapePosterProgressBar.swift | 46 + .../Components/ListRowButton.swift | 77 + jellyflood tvOS/Components/ListRowMenu.swift | 139 ++ .../Components/NonePosterButton.swift | 37 + .../OrderedSectionSelectorView.swift | 0 .../Components/PosterButton.swift | 0 .../Components/PosterHStack.swift | 0 .../Components/SFSymbolButton.swift | 70 + .../Components/SeeAllPosterButton.swift | 50 + jellyflood tvOS/Components/ServerButton.swift | 54 + .../Components/SplitFormWindowView.swift | 0 .../Components/SplitLoginWindowView.swift | 18 +- jellyflood tvOS/Components/StepperView.swift | 114 ++ .../Modifiers/NavigationBarMenuButton.swift | 34 + .../Extensions/View/View-tvOS 2.swift | 0 .../Extensions/View/View-tvOS.swift | 25 + .../ImageButtonStyle 2.swift | 0 jellyflood tvOS/ImageButtonStyle.swift | 21 + jellyflood tvOS/Objects 2/FocusGuide.swift | 153 ++ .../Objects/FocusGuide.swift | 0 .../Content.imageset/1280x768-back.png | Bin .../Content.imageset/Contents.json | 12 + .../Back.imagestacklayer/Contents.json | 6 + .../App Icon - App Store.imagestack/Back.png | Bin 0 -> 182980 bytes .../Contents.json | 16 + .../Content.imageset/512.png | Bin .../Content.imageset/Contents.json | 12 + .../Front.imagestacklayer/Contents.json | 6 + .../App Icon - App Store.imagestack/Front.png | Bin 0 -> 102817 bytes .../Middle.png | Bin 0 -> 154939 bytes .../Content.imageset/400x240-back.png | Bin .../Content.imageset/Contents.json | 18 + .../Content.imageset/Webp.net-resizeimage.png | Bin .../Back.imagestacklayer/Contents.json | 6 + .../App Icon.imagestack/Back.png | Bin 0 -> 19960 bytes .../App Icon.imagestack/Contents.json | 16 + .../Content.imageset/216.png | Bin .../Content.imageset/Contents.json | 18 + .../Webp.net-resizeimage-2.png | Bin .../Front.imagestacklayer/Contents.json | 6 + .../App Icon.imagestack/Front.png | Bin 0 -> 23668 bytes .../App Icon.imagestack/Middle.png | Bin 0 -> 21510 bytes .../Contents.json | 32 + .../Contents.json | 28 + .../TopShelf.png | Bin 0 -> 257149 bytes .../Untitled-1.png | Bin .../Untitled-2.png | Bin .../top shelf-1.png | Bin .../top shelf.png | Bin .../Top Shelf Image.imageset/Contents.json | 28 + .../Top Shelf Image.imageset/TopShelf.png | Bin 0 -> 261087 bytes .../Top Shelf Image.imageset/Untitled-1.png | Bin .../Top Shelf Image.imageset/Untitled-2.png | Bin .../Top Shelf Image.imageset/top shelf-1.png | Bin .../Top Shelf Image.imageset/top shelf.png | Bin .../Resources/Assets.xcassets/Contents.json | 6 + .../DeviceIcons/Browsers/Contents.json | 6 + .../Contents.json | 15 + .../Device-browser-chrome.imageset/chrome.svg | 1 + .../Contents.json | 15 + .../Device-browser-edge.imageset/edge.svg | 1 + .../Contents.json | 15 + .../edgechromium.svg | 1 + .../Contents.json | 15 + .../firefox.svg | 1 + .../Contents.json | 15 + .../Device-browser-html5.imageset/html5.svg | 1 + .../Contents.json | 15 + .../Device-browser-msie.imageset/msie.svg | 1 + .../Contents.json | 15 + .../Device-browser-opera.imageset/opera.svg | 1 + .../Contents.json | 15 + .../Device-browser-safari.imageset/safari.svg | 1 + .../DeviceIcons/Clients/Contents.json | 6 + .../Contents.json | 15 + .../android.svg | 4 + .../Contents.json | 15 + .../Device-client-apple.imageset/apple.svg | 1 + .../Contents.json | 15 + .../Device-client-finamp.imageset/finamp.svg | 7 + .../Device-client-kodi.imageset/Contents.json | 15 + .../Device-client-kodi.imageset/kodi.svg | 11 + .../Contents.json | 15 + .../playstation.svg | 1 + .../Device-client-roku.imageset/Contents.json | 15 + .../Device-client-roku.imageset/roku.svg | 7 + .../Contents.json | 15 + .../samsungtv.svg | 1 + .../Contents.json | 15 + .../Device-client-webos.imageset/webOS.svg | 28 + .../Contents.json | 15 + .../windows.svg | 1 + .../Device-client-xbox.imageset/Contents.json | 15 + .../Device-client-xbox.imageset/xbox.svg | 1 + .../Assets.xcassets/DeviceIcons/Contents.json | 6 + .../DeviceIcons/Other/Contents.json | 6 + .../Contents.json | 15 + .../home-assistant.svg | 1 + .../Device-other-other.imageset/Contents.json | 15 + .../Device-other-other.imageset/other.svg | 1 + .../jellyfin-blob-blue.imageset/Contents.json | 15 + .../jellyfin-blob.svg | 0 .../tomato.fresh.symbolset/Contents.json | 12 + .../tomato.fresh.symbolset/tomato.fresh.svg | 108 + .../tomato.rotten.symbolset/Contents.json | 12 + .../tomato.rotten.symbolset/tomato.rotten.svg | 97 + jellyflood tvOS/Resources/Info.plist | 42 + jellyflood tvOS/Views 2/AppLoadingView.swift | 39 + .../AppSettingsView/AppSettingsView.swift | 96 + .../Components/HourMinutePicker.swift | 102 + .../Components/SignOutIntervalSection.swift | 54 + jellyflood tvOS/Views 2/FontPickerView.swift | 53 + .../Views 2/ItemOverviewView.swift | 49 + jellyflood tvOS/Views 2/LearnMoreModal.swift | 36 + .../Views 2/MediaSourceInfoView.swift | 136 ++ .../MediaView/Components/MediaItem.swift | 0 .../Views 2/MediaView/MediaView.swift | 77 + .../Components/ProgramButtonContent.swift | 51 + .../Components/ProgramProgressOverlay.swift | 37 + .../Views 2/ProgramsView/ProgramsView.swift | 104 + .../Views 2/QuickConnectView.swift | 78 + jellyflood tvOS/Views 2/SearchView.swift | 199 ++ .../Views 2/ServerDetailView.swift | 109 + .../VideoPlayer/Components/LoadingView.swift | 44 + .../VideoPlayer/LiveNativeVideoPlayer.swift | 0 .../Components/LiveBottomBarView.swift | 0 .../LiveOverlays/LiveLoadingOverlay.swift | 0 .../LiveOverlays/LiveMainOverlay.swift | 0 .../LiveOverlays/LiveOverlay.swift | 0 .../VideoPlayer/LiveVideoPlayer.swift | 0 .../VideoPlayer/NativeVideoPlayer.swift | 0 .../VideoPlayer/Overlays/ChapterOverlay.swift | 0 .../ActionButtons/ActionButtons.swift | 15 + .../ActionButtons/AutoPlayActionButton.swift | 0 .../ActionButtons/ChaptersActionButton.swift | 0 .../PlayNextItemActionButton.swift | 0 .../PlayPreviousItemActionButton.swift | 0 .../ActionButtons/SubtitleButton.swift | 0 .../Components/BarActionButtons.swift | 0 .../Overlays/Components/BottomBarView.swift | 0 .../Components/tvOSSLider/SliderView.swift | 0 .../Components/tvOSSLider/tvOSSlider.swift | 0 .../Overlays/ConfirmCloseOverlay.swift | 28 + .../VideoPlayer/Overlays/MainOverlay.swift | 0 .../VideoPlayer/Overlays/Overlay.swift | 0 .../Overlays/SmallMenuOverlay.swift | 0 .../Views 2}/VideoPlayer/VideoPlayer.swift | 0 jellyflood tvOS/Views/AppLoadingView.swift | 39 + .../AppSettingsView/AppSettingsView.swift | 0 .../Components/HourMinutePicker.swift | 102 + .../Components/SignOutIntervalSection.swift | 0 .../ChannelLibraryView.swift | 111 ++ .../Components/WideChannelGridItem.swift | 0 .../Components/LocalServerButton.swift | 0 .../ConnectToServerView.swift | 0 .../ConnectToXtreamView.swift | 209 ++ .../DualServerConnectView.swift | 79 + jellyflood tvOS/Views/FontPickerView.swift | 53 + .../CinematicRecentlyAddedView.swift | 0 .../Components/CinematicResumeItemView.swift | 0 .../Components/LatestInLibraryView.swift | 0 .../HomeView/Components/NextUpView.swift | 0 .../Components/RecentlyAddedView.swift | 0 .../Views/HomeView/HomeView.swift | 0 jellyflood tvOS/Views/ItemOverviewView.swift | 49 + .../CinematicCollectionItemView.swift | 0 .../ItemView/CinematicEpisodeItemView.swift | 0 .../ItemView/CinematicItemAboutView.swift | 0 .../ItemView/CinematicItemViewTopRow.swift | 0 .../ItemView/CinematicSeasonItemView.swift | 0 .../CollectionItemContentView.swift | 0 .../CollectionItemView.swift | 0 .../Components/AboutView/AboutView.swift | 49 + .../AboutView/Components/AboutViewCard.swift | 67 + .../AboutView/Components/ImageCard.swift | 0 .../Components/MediaSourcesCard.swift | 0 .../AboutView/Components/OverviewCard.swift | 0 .../AboutView/Components/RatingsCard.swift | 55 + .../ItemView/Components/ActionButton.swift | 0 .../ActionButtonHStack.swift | 0 .../Components/RefreshMetadataButton.swift | 0 .../Components/TrailerMenu.swift | 0 .../ItemView/Components/AttributeHStack.swift | 0 .../Components/CastAndCrewHStack.swift | 0 .../Components/EmptyCard.swift | 49 + .../Components/EpisodeCard.swift | 0 .../Components/EpisodeContent.swift | 0 .../Components/ErrorCard.swift | 51 + .../Components/HStacks/EpisodeHStack.swift | 0 .../Components/HStacks/SeasonHStack.swift | 0 .../Components/LoadingCard.swift | 49 + .../EpisodeSelector/EpisodeSelector.swift | 67 + .../PlayButton/Components/VersionMenu.swift | 52 + .../Components/PlayButton/PlayButton.swift | 0 .../Components/SimilarItemsHStack.swift | 0 .../Components/SpecialFeaturesHStack.swift | 0 .../EpisodeItemContentView.swift | 0 .../EpisodeItemView/EpisodeItemView.swift | 0 .../Views/ItemView/ItemView.swift | 0 .../MovieItemView/MovieItemContentView.swift | 0 .../MovieItemView/MovieItemView.swift | 0 .../ScrollViews/CinematicScrollView.swift | 0 .../SeriesItemContentView.swift | 0 .../SeriesItemView/SeriesItemView.swift | 0 .../Views/LearnMoreModal.swift | 0 .../Views/MediaSourceInfoView.swift | 0 .../MediaView/Components/MediaItem.swift | 122 ++ .../Views/MediaView/MediaView.swift | 0 .../Components/LibraryRow.swift | 0 .../Components/ListRow.swift | 0 .../PagingLibraryView/PagingLibraryView.swift | 0 .../Views/ProgramGuideView.swift | 0 .../Components/EPGChannelRow.swift | 0 .../Components/EPGCurrentTimeIndicator.swift | 0 .../Components/EPGProgramCell.swift | 0 .../Components/EPGTimelineHeader.swift | 0 .../Components/ProgramButtonContent.swift | 0 .../Components/ProgramProgressOverlay.swift | 37 + .../Views/ProgramsView/ProgramsView.swift | 0 .../Views/QuickConnectView.swift | 0 .../Views/SearchView.swift | 0 .../Components/AddUserBottomButton.swift | 67 + .../Components/AddUserGridButton.swift | 70 + .../Components/SelectUserBottomBar.swift | 0 .../Components/ServerSelectionMenu.swift | 2 +- .../Components/UserGridButton.swift | 104 + .../Views/SelectUserView/SelectUserView.swift | 0 .../Views/ServerDetailView.swift | 0 .../Components/CustomProfileButton.swift | 65 + .../EditCustomDeviceProfileView.swift | 0 .../CustomDeviceProfileSettingsView.swift | 0 .../Components/ListColumnsPickerView.swift | 25 + .../Components/Sections/HomeSection.swift | 0 .../Components/Sections/ItemSection.swift | 0 .../Components/Sections/LibrarySection.swift | 0 .../CustomizeViewsSettings.swift | 0 .../ExperimentalSettingsView.swift | 28 + .../SettingsView/IndicatorSettingsView.swift | 48 + .../PlaybackQualitySettingsView.swift | 0 .../Views/SettingsView/SettingsView.swift | 0 .../UserLocalSecurityView.swift | 0 .../UserProfileSettingsView.swift | 0 .../VideoPlayerSettingsView.swift | 0 .../Components/PublicUserButton.swift | 0 .../Views/UserSignInView/UserSignInView.swift | 0 .../VideoPlayer/Components/LoadingView.swift | 0 .../VideoPlayer/LiveNativeVideoPlayer.swift | 228 +++ .../Components/LiveBottomBarView.swift | 114 ++ .../LiveOverlays/LiveLoadingOverlay.swift | 92 + .../LiveOverlays/LiveMainOverlay.swift | 53 + .../LiveOverlays/LiveOverlay.swift | 101 + .../Views/VideoPlayer/LiveVideoPlayer.swift | 117 ++ .../Views/VideoPlayer/NativeVideoPlayer.swift | 176 ++ .../VideoPlayer/Overlays/ChapterOverlay.swift | 109 + .../ActionButtons/ActionButtons.swift | 0 .../ActionButtons/AutoPlayActionButton.swift | 33 + .../ActionButtons/ChaptersActionButton.swift | 33 + .../PlayNextItemActionButton.swift | 29 + .../PlayPreviousItemActionButton.swift | 29 + .../ActionButtons/SubtitleButton.swift | 29 + .../Components/BarActionButtons.swift | 78 + .../Overlays/Components/BottomBarView.swift | 110 + .../Components/tvOSSLider/SliderView.swift | 55 + .../Components/tvOSSLider/tvOSSlider.swift | 442 +++++ .../Overlays/ConfirmCloseOverlay.swift | 0 .../VideoPlayer/Overlays/MainOverlay.swift | 53 + .../Views/VideoPlayer/Overlays/Overlay.swift | 135 ++ .../Overlays/SmallMenuOverlay.swift | 210 ++ .../Views/VideoPlayer/VideoPlayer.swift | 130 ++ .../project.pbxproj | 166 +- .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 0 .../xcshareddata/IDETemplateMacros.plist | 14 + .../xcschemes/jellyflood tvOS.xcscheme | 78 + remove_epg_files.rb | 41 + swiftgen.yml | 2 +- 1094 files changed, 63476 insertions(+), 142 deletions(-) create mode 100644 .claude/commands/build.md create mode 100644 Shared/Components/Layouts/FlowLayout.swift create mode 100644 Shared/Components/Localization/CountryPicker.swift create mode 100644 Shared/Components/Localization/CulturePicker.swift create mode 100644 Shared/Components/Localization/ParentalRatingPicker.swift create mode 100644 Shared/Components/MarkedList.swift create mode 100644 Shared/Components/NativeVideoPlayer.swift create mode 100644 Shared/Components/PosterImage.swift create mode 100644 Shared/Components/TintedMaterial.swift create mode 100644 Shared/Coordinators/AppSettingsCoordinator 2.swift create mode 100644 Shared/Coordinators/AppSettingsCoordinator 3.swift create mode 100644 Shared/Coordinators/HomeCoordinator 2.swift create mode 100644 Shared/Coordinators/HomeCoordinator 3.swift create mode 100644 Shared/Coordinators/LibraryCoordinator 2.swift create mode 100644 Shared/Coordinators/LibraryCoordinator 3.swift create mode 100644 Shared/Coordinators/MediaCoordinator 2.swift create mode 100644 Shared/Coordinators/MediaCoordinator 3.swift create mode 100644 Shared/Coordinators/Navigation/NavigationCoordinator.swift create mode 100644 Shared/Coordinators/Navigation/NavigationInjectionView.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Admin.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+App.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Download.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Item.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Library.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Media.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Settings.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+User.swift create mode 100644 Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute.swift create mode 100644 Shared/Coordinators/Navigation/Router.swift create mode 100644 Shared/Coordinators/Navigation/WithTransitionReaderPublisher.swift create mode 100644 Shared/Coordinators/Root/RootCoordinator.swift create mode 100644 Shared/Coordinators/Root/RootItem.swift create mode 100644 Shared/Coordinators/Root/RootView.swift create mode 100644 Shared/Coordinators/SearchCoordinator 2.swift create mode 100644 Shared/Coordinators/SearchCoordinator 3.swift create mode 100644 Shared/Coordinators/SelectUserCoordinator 2.swift create mode 100644 Shared/Coordinators/SelectUserCoordinator 3.swift create mode 100644 Shared/Coordinators/SettingsCoordinator 2.swift create mode 100644 Shared/Coordinators/SettingsCoordinator 3.swift create mode 100644 Shared/Coordinators/Tabs/MainTabView.swift create mode 100644 Shared/Coordinators/Tabs/TabCoordinator.swift create mode 100644 Shared/Coordinators/Tabs/TabItem.swift create mode 100644 Shared/Coordinators/Tabs/TabItemSelectedPublisher.swift create mode 100644 Shared/Coordinators/UserSignInCoordinator 2.swift create mode 100644 Shared/Coordinators/UserSignInCoordinator 3.swift create mode 100644 Shared/Extensions/BlurHash.swift create mode 100644 Shared/Extensions/BoxedPublished.swift create mode 100644 Shared/Extensions/Duration.swift create mode 100644 Shared/Extensions/FocusedValues.swift create mode 100644 Shared/Extensions/JellyfinAPI/AnyView.swift create mode 100644 Shared/Extensions/JellyfinAPI/CountryInfo.swift create mode 100644 Shared/Extensions/JellyfinAPI/CultureDto.swift create mode 100644 Shared/Extensions/LabelStyle/SectionFooterWithImageLabelStyle.swift create mode 100644 Shared/Extensions/ProgressViewStyle/GaugeProgressViewStyle.swift create mode 100644 Shared/Extensions/ProgressViewStyle/PlaybackProgressViewStyle.swift create mode 100644 Shared/Extensions/ProgressViewStyle/ProgressViewStyle.swift create mode 100644 Shared/Extensions/PublishedBox.swift create mode 100644 Shared/Extensions/Section.swift create mode 100644 Shared/Extensions/UIImage.swift create mode 100644 Shared/Extensions/UnitPoint.swift create mode 100644 Shared/Logging/Logging.swift create mode 100644 Shared/Logging/NetworkLogger.swift create mode 100644 Shared/Logging/SwiftfinCorestoreLogger.swift create mode 100644 Shared/Objects/ActiveSessionFilter.swift create mode 100644 Shared/Objects/DirectionalPanGestureRecognizer.swift create mode 100644 Shared/Objects/GestureAction/DoubleTouchGestureAction.swift create mode 100644 Shared/Objects/GestureAction/GestureAction.swift create mode 100644 Shared/Objects/GestureAction/LongPressGestureAction.swift create mode 100644 Shared/Objects/GestureAction/MultiTapGestureAction.swift create mode 100644 Shared/Objects/GestureAction/PanGestureAction.swift create mode 100644 Shared/Objects/GestureAction/PinchGestureAction.swift create mode 100644 Shared/Objects/GestureAction/SwipeGestureAction.swift create mode 100644 Shared/Objects/IsStatusBarHiddenKey.swift create mode 100644 Shared/Objects/LazyState.swift create mode 100644 Shared/Objects/MediaJumpInterval.swift create mode 100644 Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem+Build.swift create mode 100644 Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem.swift create mode 100644 Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+AVPlayer.swift create mode 100644 Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+VLC.swift create mode 100644 Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy.swift create mode 100644 Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableCommand.swift create mode 100644 Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableMetadata.swift create mode 100644 Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableObserver.swift create mode 100644 Shared/Objects/MediaPlayerManager/PreviewImageProvider/ChapterPreviewImageProvider.swift create mode 100644 Shared/Objects/MediaPlayerManager/PreviewImageProvider/PreviewImageProvider.swift create mode 100644 Shared/Objects/MediaPlayerManager/PreviewImageProvider/TrickplayPreviewImageProvider.swift create mode 100644 Shared/Objects/MediaPlayerManager/Supplements/EpisodeMediaPlayerQueue.swift create mode 100644 Shared/Objects/MediaPlayerManager/Supplements/MediaChaptersSupplement.swift create mode 100644 Shared/Objects/MediaPlayerManager/Supplements/MediaInfoSupplement.swift create mode 100644 Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerQueue.swift create mode 100644 Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerSupplement.swift create mode 100644 Shared/Objects/ObservedPublisher.swift create mode 100644 Shared/Objects/PanAction.swift create mode 100644 Shared/Objects/PinchAction.swift create mode 100644 Shared/Objects/PokeIntervalTimer.swift create mode 100644 Shared/Objects/Poster/AnyPoster.swift create mode 100644 Shared/Objects/Poster/Poster.swift create mode 100644 Shared/Objects/ToastProxy.swift rename Shared/Objects/VideoPlayerType/{VideoPlayerType+jellypig.swift => VideoPlayerType+jellyflood.swift} (100%) create mode 100644 Shared/Objects/XtreamServer.swift create mode 100644 Shared/Services/SwiftfinDefaults 2.swift create mode 100644 Shared/Services/SwiftfinDefaults.swift create mode 100644 Shared/Services/XtreamAPIClient.swift rename Shared/Services/{jellypigdefaults.swift => jellyflooddefaults.swift} (100%) create mode 100644 Shared/Services/jellypigdefaults 2.swift create mode 100644 Shared/ViewModels/ConnectToXtreamViewModel.swift create mode 100644 Shared/Views/ConnecToServerView/Components/LocalServerButton.swift create mode 100644 Shared/Views/ConnecToServerView/ConnectToServerView.swift create mode 100644 Shared/Views/MediaView/Components/MediaItem.swift create mode 100644 Shared/Views/MediaView/MediaView.swift create mode 100644 Shared/Views/QuickConnectView.swift create mode 100644 Shared/Views/UserSignInView/Components/PublicUserButton.swift create mode 100644 Shared/Views/UserSignInView/Components/PublicUserRow.swift create mode 100644 Shared/Views/UserSignInView/UserSignInView.swift create mode 100644 Shared/jellyfloodstore/StoredValue 3/StoredValue.swift rename Shared/{jellypigstore/StoredValue => jellyfloodstore/StoredValue 3}/StoredValues+Server.swift (100%) rename Shared/{jellypigstore/StoredValue => jellyfloodstore/StoredValue 3}/StoredValues+Temp.swift (100%) create mode 100644 Shared/jellyfloodstore/StoredValue 3/StoredValues+User.swift rename Shared/{jellypigstore => jellyfloodstore}/StoredValue/StoredValue.swift (100%) create mode 100644 Shared/jellyfloodstore/StoredValue/StoredValues+Server.swift create mode 100644 Shared/jellyfloodstore/StoredValue/StoredValues+Temp.swift rename Shared/{jellypigstore => jellyfloodstore}/StoredValue/StoredValues+User.swift (100%) rename Shared/{jellypigstore/V1Schema => jellyfloodstore/V1Schema 3}/V1ServerModel.swift (100%) rename Shared/{jellypigstore/V1Schema => jellyfloodstore/V1Schema 3}/V1UserModel.swift (100%) rename Shared/{jellypigstore/V1Schema => jellyfloodstore/V1Schema 3}/jellypigstore+V1.swift (100%) create mode 100644 Shared/jellyfloodstore/V1Schema/V1ServerModel.swift create mode 100644 Shared/jellyfloodstore/V1Schema/V1UserModel.swift create mode 100644 Shared/jellyfloodstore/V1Schema/jellyfloodstore+V1.swift rename Shared/{jellypigstore/V2Schema => jellyfloodstore/V2Schema 3}/V2AnyData.swift (100%) rename Shared/{jellypigstore/V2Schema => jellyfloodstore/V2Schema 3}/V2ServerModel.swift (100%) create mode 100644 Shared/jellyfloodstore/V2Schema 3/V2UserModel.swift rename Shared/{jellypigstore/V2Schema => jellyfloodstore/V2Schema 3}/jellypigstore+V2.swift (100%) create mode 100644 Shared/jellyfloodstore/V2Schema/V2AnyData.swift create mode 100644 Shared/jellyfloodstore/V2Schema/V2ServerModel.swift rename Shared/{jellypigstore => jellyfloodstore}/V2Schema/V2UserModel.swift (100%) create mode 100644 Shared/jellyfloodstore/V2Schema/jellyfloodstore+V2.swift create mode 100644 Shared/jellyfloodstore/jellyfloodstore 2.swift rename Shared/{jellypigstore/jellypigstore+Mappings.swift => jellyfloodstore/jellyfloodstore+Mappings 2.swift} (100%) create mode 100644 Shared/jellyfloodstore/jellyfloodstore+Mappings.swift create mode 100644 Shared/jellyfloodstore/jellyfloodstore+ServerState 2.swift rename Shared/{jellypigstore/jellypigstore+ServerState.swift => jellyfloodstore/jellyfloodstore+ServerState.swift} (100%) create mode 100644 Shared/jellyfloodstore/jellyfloodstore+UserState 2.swift rename Shared/{jellypigstore/jellypigstore+UserState.swift => jellyfloodstore/jellyfloodstore+UserState.swift} (100%) rename Shared/{jellypigstore/jellypigstore.swift => jellyfloodstore/jellyfloodstore.swift} (100%) rename {jellypig tvOS/App/PreferenceUIHosting => Swiftfin tvOS/App/PreferenceUIHosting 2}/PreferenceUIHostingController.swift (100%) rename {jellypig tvOS/App/PreferenceUIHosting => Swiftfin tvOS/App/PreferenceUIHosting 2}/PreferenceUIHostingSwizzling.swift (100%) create mode 100644 Swiftfin tvOS/App/SwiftfinApp 2.swift create mode 100644 Swiftfin tvOS/App/SwiftfinApp.swift create mode 100644 Swiftfin tvOS/Components/CapsuleSlider 2.swift create mode 100644 Swiftfin tvOS/Components/CapsuleSlider.swift create mode 100644 Swiftfin tvOS/Components/CinematicBackgroundView 2.swift create mode 100644 Swiftfin tvOS/Components/CinematicBackgroundView.swift create mode 100644 Swiftfin tvOS/Components/CinematicItemSelector 2.swift create mode 100644 Swiftfin tvOS/Components/CinematicItemSelector.swift create mode 100644 Swiftfin tvOS/Components/DotHStack 2.swift create mode 100644 Swiftfin tvOS/Components/DotHStack.swift rename jellypig tvOS/Components/EnumPickerView.swift => Swiftfin tvOS/Components/EnumPickerView 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/EnumPickerView.swift rename jellypig tvOS/Components/ErrorView.swift => Swiftfin tvOS/Components/ErrorView 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/ErrorView.swift rename jellypig tvOS/Components/LandscapePosterProgressBar.swift => Swiftfin tvOS/Components/LandscapePosterProgressBar 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/LandscapePosterProgressBar.swift rename jellypig tvOS/Components/ListRowButton.swift => Swiftfin tvOS/Components/ListRowButton 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/ListRowButton.swift rename jellypig tvOS/Components/ListRowMenu.swift => Swiftfin tvOS/Components/ListRowMenu 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/ListRowMenu.swift rename jellypig tvOS/Components/NonePosterButton.swift => Swiftfin tvOS/Components/NonePosterButton 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/NonePosterButton.swift create mode 100644 Swiftfin tvOS/Components/OrderedSectionSelectorView 2.swift create mode 100644 Swiftfin tvOS/Components/OrderedSectionSelectorView.swift create mode 100644 Swiftfin tvOS/Components/PosterButton 2.swift create mode 100644 Swiftfin tvOS/Components/PosterButton.swift create mode 100644 Swiftfin tvOS/Components/PosterHStack 2.swift create mode 100644 Swiftfin tvOS/Components/PosterHStack.swift rename jellypig tvOS/Components/SFSymbolButton.swift => Swiftfin tvOS/Components/SFSymbolButton 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/SFSymbolButton.swift rename jellypig tvOS/Components/SeeAllPosterButton.swift => Swiftfin tvOS/Components/SeeAllPosterButton 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/SeeAllPosterButton.swift rename jellypig tvOS/Components/ServerButton.swift => Swiftfin tvOS/Components/ServerButton 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/ServerButton.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer 2/SliderContainer.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer 2/SliderContainerState.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer 2/SliderContentView.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer/SliderContainer.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer/SliderContainerState.swift create mode 100644 Swiftfin tvOS/Components/SliderContainer/SliderContentView.swift create mode 100644 Swiftfin tvOS/Components/SplitFormWindowView 2.swift create mode 100644 Swiftfin tvOS/Components/SplitFormWindowView.swift create mode 100644 Swiftfin tvOS/Components/SplitLoginWindowView 2.swift create mode 100644 Swiftfin tvOS/Components/SplitLoginWindowView.swift rename jellypig tvOS/Components/StepperView.swift => Swiftfin tvOS/Components/StepperView 2.swift (100%) create mode 100644 Swiftfin tvOS/Components/StepperView.swift rename {jellypig tvOS => Swiftfin tvOS}/Extensions/View/Modifiers/NavigationBarMenuButton.swift (100%) create mode 100644 Swiftfin tvOS/Extensions/View/View-tvOS.swift create mode 100644 Swiftfin tvOS/Objects/FocusGuide.swift create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/1280x768-back.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/512.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/400x240-back.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Webp.net-resizeimage.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/216.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Webp.net-resizeimage-2.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Untitled-1.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Untitled-2.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/top shelf-1.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/top shelf.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Untitled-1.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Untitled-2.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/top shelf-1.png create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/top shelf.png rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/Contents.json (100%) create mode 100644 Swiftfin tvOS/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/jellyfin-blob.svg rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg (100%) rename {jellypig tvOS => Swiftfin tvOS}/Resources/Info.plist (100%) rename {jellypig tvOS => Swiftfin tvOS}/Views/AppLoadingView.swift (100%) create mode 100644 Swiftfin tvOS/Views/AppSettingsView/AppSettingsView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/AppSettingsView/Components/HourMinutePicker.swift (100%) create mode 100644 Swiftfin tvOS/Views/AppSettingsView/Components/SignOutIntervalSection.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ChannelLibraryView/ChannelLibraryView.swift (83%) create mode 100644 Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/FontPickerView.swift (100%) create mode 100644 Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift create mode 100644 Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift create mode 100644 Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift create mode 100644 Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift create mode 100644 Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift create mode 100644 Swiftfin tvOS/Views/HomeView/HomeView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemOverviewView.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/CollectionItemContentView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/AboutView/AboutView.swift (100%) rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/ImageCard.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/AboutView/Components/RatingsCard.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/ActionButton.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/RefreshMetadataButton.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/EpisodeHStack.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/SeasonHStack.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift (100%) rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/Components/SubtitleSearchRow.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/ItemSubtitleSearchView.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/OverviewView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift (100%) create mode 100644 Swiftfin tvOS/Views/ItemView/Components/PlayButton/PlayButton.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift create mode 100644 Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift create mode 100644 Swiftfin tvOS/Views/ItemView/ItemView.swift create mode 100644 Swiftfin tvOS/Views/ItemView/MovieItemContentView.swift create mode 100644 Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift create mode 100644 Swiftfin tvOS/Views/ItemView/SeriesItemContentView.swift create mode 100644 Swiftfin tvOS/Views/ItemView/SimpleItemContentView.swift create mode 100644 Swiftfin tvOS/Views/LearnMoreModal.swift create mode 100644 Swiftfin tvOS/Views/MediaSourceInfoView.swift create mode 100644 Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift create mode 100644 Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift create mode 100644 Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift create mode 100644 Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/ProgramsView/Components/ProgramProgressOverlay.swift (100%) create mode 100644 Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift create mode 100644 Swiftfin tvOS/Views/SearchView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/SelectUserView/Components/AddUserBottomButton.swift (100%) rename {jellypig tvOS => Swiftfin tvOS}/Views/SelectUserView/Components/AddUserGridButton.swift (100%) create mode 100644 Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift create mode 100644 Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/SelectUserView/Components/UserGridButton.swift (100%) create mode 100644 Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift create mode 100644 Swiftfin tvOS/Views/ServerDetailView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift (100%) create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift (100%) create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/LibrarySection.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift rename {jellypig tvOS => Swiftfin tvOS}/Views/SettingsView/ExperimentalSettingsView.swift (100%) rename {jellypig tvOS => Swiftfin tvOS}/Views/SettingsView/IndicatorSettingsView.swift (100%) create mode 100644 Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/SettingsView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/Components/LoadingView.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/ActionButtons.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AspectFillActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AudioActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AutoPlayActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayNextItemActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayPreviousItemActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/SubtitleActionButton.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/NavigationBar.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/PlaybackProgress.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/SplitTimestamp.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/ConfirmCloseOverlay.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/PlaybackControls.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/SupplementContainerView.swift create mode 100644 Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/VideoPlayerContainerView.swift create mode 100644 Swiftfin.xcodeproj/project.pbxproj create mode 100644 Swiftfin.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename {jellypig.xcodeproj => Swiftfin.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) create mode 100644 Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename {jellypig.xcodeproj => Swiftfin.xcodeproj}/xcshareddata/IDETemplateMacros.plist (100%) rename jellypig.xcodeproj/xcshareddata/xcschemes/jellypig tvOS.xcscheme => Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin tvOS.xcscheme (83%) create mode 100644 Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin.xcscheme create mode 100644 Swiftfin/App/AppDelegate.swift create mode 100644 Swiftfin/App/SwiftfinApp+ValueObservation.swift create mode 100644 Swiftfin/App/SwiftfinApp.swift create mode 100644 Swiftfin/Components/BasicStepper.swift create mode 100644 Swiftfin/Components/DelayedProgressView.swift create mode 100644 Swiftfin/Components/DotHStack.swift create mode 100644 Swiftfin/Components/EmptyHitTestView.swift create mode 100644 Swiftfin/Components/ErrorView.swift create mode 100644 Swiftfin/Components/GestureView.swift create mode 100644 Swiftfin/Components/HourMinutePicker.swift create mode 100644 Swiftfin/Components/LandscapePosterProgressBar.swift create mode 100644 Swiftfin/Components/LearnMoreButton.swift create mode 100644 Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift create mode 100644 Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift create mode 100644 Swiftfin/Components/ListRow.swift create mode 100644 Swiftfin/Components/ListRowButton.swift create mode 100644 Swiftfin/Components/ListTitleSection.swift create mode 100644 Swiftfin/Components/LocalUserAccessPolicyView.swift create mode 100644 Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift create mode 100644 Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift create mode 100644 Swiftfin/Components/OrderedSectionSelectorView.swift create mode 100644 Swiftfin/Components/OverlayToastView.swift create mode 100644 Swiftfin/Components/PillHStack.swift create mode 100644 Swiftfin/Components/PosterButton.swift create mode 100644 Swiftfin/Components/PosterHStack.swift create mode 100644 Swiftfin/Components/PrimaryButton.swift create mode 100644 Swiftfin/Components/SeeAllButton.swift create mode 100644 Swiftfin/Components/SettingsBarButton.swift create mode 100644 Swiftfin/Components/Slider/CapsuleSlider.swift create mode 100644 Swiftfin/Components/Slider/ThumbSlider.swift create mode 100644 Swiftfin/Components/UnmaskSecureField.swift create mode 100644 Swiftfin/Components/Video3DFormatPicker.swift create mode 100644 Swiftfin/Extensions/ButtonStyle-iOS.swift create mode 100644 Swiftfin/Extensions/LAContext.swift create mode 100644 Swiftfin/Extensions/Label-iOS.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift create mode 100644 Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift create mode 100644 Swiftfin/Extensions/View/View-iOS.swift create mode 100644 Swiftfin/Objects/AppURLHandler.swift create mode 100644 Swiftfin/Objects/DeepLink.swift create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/AppIcon-dark-blue.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/AppIcon-dark-green.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/AppIcon-dark-jellyfin.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/AppIcon-dark-orange.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/AppIcon-dark-red.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/AppIcon-dark-yellow.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/AppIcon-invertedDark-blue.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/AppIcon-invertedDark-green.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/AppIcon-invertedDark-jellyfin.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/AppIcon-invertedDark-orange.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/AppIcon-invertedDark-red.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/AppIcon-invertedDark-yellow.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/AppIcon-invertedLight-blue.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/AppIcon-invertedLight-green.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/AppIcon-invertedLight-jellyfin.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/AppIcon-invertedLight-orange.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/AppIcon-invertedLight-red.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/AppIcon-invertedLight-yellow.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/AppIcon-light-blue.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/AppIcon-light-green.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/AppIcon-light-jellyfin.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/AppIcon-light-orange.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/AppIcon-light-red.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/AppIcon-light-yellow.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/AppIcon-primary-primary.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/Contents.json rename {jellypig tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers => Swiftfin/Resources/Assets.xcassets/AppIcons}/Contents.json (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/AppIcon-dark-blue.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/AppIcon-dark-green.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/AppIcon-dark-jellyfin.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-orange.appiconset/AppIcon-dark-orange.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-orange.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-red.appiconset/AppIcon-dark-red.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-red.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-yellow.appiconset/AppIcon-dark-yellow.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-yellow.appiconset/Contents.json rename {jellypig tvOS/Resources/Assets.xcassets/DeviceIcons/Clients => Swiftfin/Resources/Assets.xcassets/AppIcons/Dark}/Contents.json (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-blue.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-blue.appiconset/blue.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-green.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-green.appiconset/green.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-jellyfin.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-jellyfin.appiconset/jellyfin.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-orange.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-orange.appiconset/orange.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-red.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-red.appiconset/red.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-yellow.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark/AppIcon-invertedDark-yellow.appiconset/yellow.png rename {jellypig tvOS/Resources/Assets.xcassets/DeviceIcons => Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Dark}/Contents.json (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-blue.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-blue.appiconset/blue.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-green.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-green.appiconset/green.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-jellyfin.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-jellyfin.appiconset/jellyfin.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-orange.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-orange.appiconset/orange.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-red.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-red.appiconset/red.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-yellow.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light/AppIcon-invertedLight-yellow.appiconset/yellow.png rename {jellypig tvOS/Resources/Assets.xcassets/DeviceIcons/Other => Swiftfin/Resources/Assets.xcassets/AppIcons/Inverted-Light}/Contents.json (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-blue.appiconset/AppIcon-light-blue.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-blue.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-green.appiconset/AppIcon-light-green.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-green.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-jellyfin.appiconset/AppIcon-light-jellyfin.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-jellyfin.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-orange.appiconset/AppIcon-light-orange.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-orange.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-red.appiconset/AppIcon-light-red.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-red.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-yellow.appiconset/AppIcon-light-yellow.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/AppIcon-light-yellow.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Light/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Primary/AppIcon-primary-primary.appiconset/AppIcon-primary-primary.png create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Primary/AppIcon-primary-primary.appiconset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/AppIcons/Primary/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/DeviceIcons/Browsers/Contents.json rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-chrome.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-chrome.imageset/chrome.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edge.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edge.imageset/edge.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edgechromium.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edgechromium.imageset/edgechromium.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-firefox.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-firefox.imageset/firefox.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-html5.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-html5.imageset/html5.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-msie.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-msie.imageset/msie.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-opera.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-opera.imageset/opera.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-safari.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-safari.imageset/safari.svg (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/DeviceIcons/Clients/Contents.json rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-android.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-android.imageset/android.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-apple.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-apple.imageset/apple.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-finamp.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-finamp.imageset/finamp.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-kodi.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-kodi.imageset/kodi.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-playstation.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-playstation.imageset/playstation.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-roku.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-roku.imageset/roku.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-samsungtv.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-samsungtv.imageset/samsungtv.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-webos.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-webos.imageset/webOS.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-windows.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-windows.imageset/windows.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-xbox.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-xbox.imageset/xbox.svg (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/DeviceIcons/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/DeviceIcons/Other/Contents.json rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-homeassistant.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-homeassistant.imageset/home-assistant.svg (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-other.imageset/Contents.json (100%) rename {jellypig tvOS => Swiftfin}/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-other.imageset/other.svg (100%) create mode 100644 Swiftfin/Resources/Assets.xcassets/git.commit.symbolset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/git.commit.symbolset/git.commit.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/jellyfin-blob.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/logo.github.symbolset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/logo.github.symbolset/logo.github.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg create mode 100644 Swiftfin/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json create mode 100644 Swiftfin/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg create mode 100644 Swiftfin/Resources/Info.plist create mode 100644 Swiftfin/Resources/Swiftfin 2.entitlements create mode 100644 Swiftfin/Resources/Swiftfin.entitlements create mode 100644 Swiftfin/Views/AboutAppView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/APIKeyView/APIKeysView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/APIKeyView/Components/APIKeysRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionDetailView/Components/StreamSection 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionDetailView/Components/StreamSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionDetailView/Components/TranscodeSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionDetailView/ServerSessionDetailView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionsView/ActiveSessionsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionsView/Components/ActiveSessionProgressSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ActiveSessions/ActiveSessionsView/Components/ActiveSessionRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/Components/DeviceSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/Components/MediaItemSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/Components/UserSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerActivity/ServerActivityDetailsView/ServerActivityDetailsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerActivity/ServerActivityFilterView/ServerActivityFilterView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerActivity/ServerActivityView/Components/ServerActivityEntry.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerActivity/ServerActivityView/ServerActivityView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerDevices/DeviceDetailsView/Components/Sections/CompatibilitiesSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerDevices/DeviceDetailsView/DeviceDetailsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerDevices/DevicesView/Components/DeviceRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerDevices/DevicesView/DevicesView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerLogsView/ServerLogsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/DayOfWeekRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/DetailsSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection 2.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastRunSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/ServerTaskProgressSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/TriggersSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/TriggerRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/EditServerTaskView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/DestructiveServerTask.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/ServerTaskRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/ServerTasksView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/AddServerUserView/AddServerUserView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserDetailsView/ServerUserDetailsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessSchedule/EditAccessScheduleView/Components/EditAccessScheduleRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessSchedule/EditAccessScheduleView/EditAccessScheduleView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessTags/AddServerUserAccessTagsView/AddServerUserAccessTagsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessTags/AddServerUserAccessTagsView/Components/AccessTagSearchResultsSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessTags/AddServerUserAccessTagsView/Components/TagInput.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessTags/EditServerUserAccessTagsView/Components/EditAccessTagRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessTags/EditServerUserAccessTagsView/EditServerUserAccessTagsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserAccessView/ServerUserAccessView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserDeviceAccessView/ServerUserDeviceAccessView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserLiveTVAccessView/ServerUserLiveTVAccessView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserParentalRatingView/ServerUserParentalRatingView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/ExternalAccessSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/ManagementSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/MediaPlaybackSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/PermissionSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/RemoteControlSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/SessionsSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/StatusSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/Components/Sections/SyncPlaySection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUserSettings/ServerUserPermissionsView/ServerUserPermissionsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUsersView/Components/ServerUsersRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUsers/ServerUsersView/ServerUsersView.swift create mode 100644 Swiftfin/Views/AppIconSelectorView.swift create mode 100644 Swiftfin/Views/AppLoadingView.swift create mode 100644 Swiftfin/Views/AppSettingsView/AppSettingsView.swift create mode 100644 Swiftfin/Views/AppSettingsView/Components/SignOutIntervalSection.swift create mode 100644 Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift create mode 100644 Swiftfin/Views/ChannelLibraryView/Components/CompactChannelView.swift create mode 100644 Swiftfin/Views/ChannelLibraryView/Components/DetailedChannelView.swift create mode 100644 Swiftfin/Views/DownloadListView.swift create mode 100644 Swiftfin/Views/DownloadTaskView/DownloadTaskContentView.swift create mode 100644 Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift create mode 100644 Swiftfin/Views/EditServerView.swift create mode 100644 Swiftfin/Views/FilterView.swift create mode 100644 Swiftfin/Views/FontPickerView.swift create mode 100644 Swiftfin/Views/HomeView/Components/ContinueWatchingView.swift create mode 100644 Swiftfin/Views/HomeView/Components/LatestInLibraryView.swift create mode 100644 Swiftfin/Views/HomeView/Components/NextUpView.swift create mode 100644 Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift create mode 100644 Swiftfin/Views/HomeView/HomeView.swift create mode 100644 Swiftfin/Views/ItemEditorView/Components/RefreshMetadataButton.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemEditorView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/AddItemImageView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemImageDetailsView/Components/ItemImageDetailsDeleteButton.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemImageDetailsView/Components/ItemImageDetailsDetailsSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemImageDetailsView/Components/ItemImageDetailsHeaderSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemImageDetailsView/ItemImageDetailsView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemImagesView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemPhotoPickerView/Components/ItemPhotoCropView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemImages/ItemPhotoPickerView/ItemPhotoPickerView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/AddItemElementView/AddItemElementView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/AddItemElementView/Components/NameInput.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/AddItemElementView/Components/SearchResultsSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditItemElementView/Components/EditItemElementRow.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditItemElementView/EditItemElementView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/DateSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/DisplayOrderSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/EpisodeSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/LocalizationSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/LockMetadataSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/MediaFormatSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/OverviewSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/ParentialRatingsSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/ReviewsSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/SeriesSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/Components/Sections/TitleSection.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemMetadata/EditMetadataView/EditMetadataView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemSubtitles/Components/ItemSubtitleButton.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemSubtitles/ItemSubtitleSearchView/Components/RemoteSubtitleButton.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemSubtitles/ItemSubtitleSearchView/ItemSubtitleSearchView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemSubtitles/ItemSubtitleUploadView/ItemSubtitleUploadView.swift create mode 100644 Swiftfin/Views/ItemEditorView/ItemSubtitles/ItemSubtitlesView.swift create mode 100644 Swiftfin/Views/ItemOverviewView.swift create mode 100644 Swiftfin/Views/ItemView/CollectionItemContentView.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/Components/AboutView+Card.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/Components/ImageCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/Components/OverviewCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/AboutView/Components/RatingsCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift create mode 100644 Swiftfin/Views/ItemView/Components/ActionButtonHStack/Components/VersionMenu.swift create mode 100644 Swiftfin/Views/ItemView/Components/AdditionalPartsHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/AttributeHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift create mode 100644 Swiftfin/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift create mode 100644 Swiftfin/Views/ItemView/Components/GenresHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/OffsetScrollView.swift create mode 100644 Swiftfin/Views/ItemView/Components/OverviewView.swift create mode 100644 Swiftfin/Views/ItemView/Components/PlayButton.swift create mode 100644 Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/SpecialFeatureHStack.swift create mode 100644 Swiftfin/Views/ItemView/Components/StudiosHStack.swift create mode 100644 Swiftfin/Views/ItemView/ItemView.swift create mode 100644 Swiftfin/Views/ItemView/MovieItemContentView.swift create mode 100644 Swiftfin/Views/ItemView/ScrollViews/CinematicScrollView.swift create mode 100644 Swiftfin/Views/ItemView/ScrollViews/CompactLogoScrollView.swift create mode 100644 Swiftfin/Views/ItemView/ScrollViews/CompactPortraitScrollView.swift create mode 100644 Swiftfin/Views/ItemView/ScrollViews/SimpleScrollView.swift create mode 100644 Swiftfin/Views/ItemView/ScrollViews/iPadOSCinematicScrollView.swift create mode 100644 Swiftfin/Views/ItemView/SeriesItemContentView.swift create mode 100644 Swiftfin/Views/ItemView/SimpleItemContentView.swift create mode 100644 Swiftfin/Views/MediaSourceInfoView.swift create mode 100644 Swiftfin/Views/MediaStreamInfoView.swift create mode 100644 Swiftfin/Views/PagingLibraryView/Components/LibraryRow.swift create mode 100644 Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift create mode 100644 Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift create mode 100644 Swiftfin/Views/PhotoPickerView/Components/PhotoCropView.swift create mode 100644 Swiftfin/Views/PhotoPickerView/PhotoPickerView.swift create mode 100644 Swiftfin/Views/ProgramsView/Components/ProgramButtonContent.swift create mode 100644 Swiftfin/Views/ProgramsView/Components/ProgramProgressOverlay.swift create mode 100644 Swiftfin/Views/ProgramsView/ProgramsView.swift create mode 100644 Swiftfin/Views/ResetUserPasswordView/ResetUserPasswordView.swift create mode 100644 Swiftfin/Views/SearchView.swift create mode 100644 Swiftfin/Views/SelectUserView/Components/AddUserGridButton.swift create mode 100644 Swiftfin/Views/SelectUserView/Components/AddUserListRow.swift create mode 100644 Swiftfin/Views/SelectUserView/Components/ServerSelectionMenu.swift create mode 100644 Swiftfin/Views/SelectUserView/Components/UserGridButton.swift create mode 100644 Swiftfin/Views/SelectUserView/Components/UserListRow.swift create mode 100644 Swiftfin/Views/SelectUserView/SelectUserView.swift create mode 100644 Swiftfin/Views/ServerCheckView.swift create mode 100644 Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift create mode 100644 Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift create mode 100644 Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift create mode 100644 Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift create mode 100644 Swiftfin/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift create mode 100644 Swiftfin/Views/SettingsView/DebugSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/GestureSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/IndicatorSettingsView 2.swift create mode 100644 Swiftfin/Views/SettingsView/IndicatorSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/NativeVideoPlayerSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/PlaybackQualitySettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/UserProfileSettingsView/QuickConnectAuthorizeView.swift create mode 100644 Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift create mode 100644 Swiftfin/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/ActionButtonSelectorView.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/ButtonSection.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SliderSection.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SubtitleSection.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TimestampSection.swift create mode 100644 Swiftfin/Views/SettingsView/VideoPlayerSettingsView/VideoPlayerSettingsView.swift create mode 100644 Swiftfin/Views/UserProfileImagePicker/Components/UserProfileImageCropView.swift create mode 100644 Swiftfin/Views/UserProfileImagePicker/UserProfileImagePickerView.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/Gestures/PanHandlingAction.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/Gestures/VideoPlayerContainerView+PanGesture.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/Gestures/VideoPlayerContainerView+PinchGesture.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/Gestures/VideoPlayerContainerView+TapGesture.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/CurrentSecondTick.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/ActionButtons.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/AspectFillActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/AudioActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/AutoPlayActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/GestureLockActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/PlayNextItemActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/PlayPreviousItemActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/PlaybackQualityActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/PlaybackRateActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/ActionButtons/SubtitleActionButton.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/NavigationBar/NavigationBar.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/OverlayButtonStyle.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/PlaybackButtons.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/PlaybackProgress/ChapterTrackMask.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/PlaybackProgress/PlaybackProgress.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/PlaybackProgress/PreviewImageView.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/Components/PlaybackProgress/SplitTimestamp.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/PlaybackControls/PlaybackControls.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/SupplementContainerView/Components/SupplementTitleButtonStyle.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/SupplementContainerView/SupplementContainerView.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/VideoPlayer+KeyCommands.swift create mode 100644 Swiftfin/Views/VideoPlayerContainerView/VideoPlayerContainerView.swift create mode 100644 Translations/km.lproj/Localizable.strings create mode 100644 Translations/mn.lproj/Localizable.strings create mode 100644 XcodeConfig/Shared.xcconfig create mode 100644 add_epg_files.rb create mode 100644 add_programguideview.rb create mode 100644 fix_epg_files.rb create mode 100644 jellyflood tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift create mode 100644 jellyflood tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift rename jellypig tvOS/App/jellypigapp.swift => jellyflood tvOS/App/jellyfloodapp.swift (100%) create mode 100644 jellyflood tvOS/App/jellypigapp 2.swift create mode 100644 jellyflood tvOS/Components 2/CapsuleSlider.swift create mode 100644 jellyflood tvOS/Components 2/CinematicBackgroundView.swift create mode 100644 jellyflood tvOS/Components 2/CinematicItemSelector.swift create mode 100644 jellyflood tvOS/Components 2/DotHStack.swift create mode 100644 jellyflood tvOS/Components 2/EnumPickerView.swift create mode 100644 jellyflood tvOS/Components 2/ErrorView.swift create mode 100644 jellyflood tvOS/Components 2/LandscapePosterProgressBar.swift create mode 100644 jellyflood tvOS/Components 2/ListRowButton.swift create mode 100644 jellyflood tvOS/Components 2/ListRowMenu.swift create mode 100644 jellyflood tvOS/Components 2/NonePosterButton.swift create mode 100644 jellyflood tvOS/Components 2/OrderedSectionSelectorView.swift create mode 100644 jellyflood tvOS/Components 2/PosterButton.swift create mode 100644 jellyflood tvOS/Components 2/PosterHStack.swift create mode 100644 jellyflood tvOS/Components 2/SFSymbolButton.swift create mode 100644 jellyflood tvOS/Components 2/SeeAllPosterButton.swift create mode 100644 jellyflood tvOS/Components 2/ServerButton.swift create mode 100644 jellyflood tvOS/Components 2/SliderContainer/SliderContainer.swift create mode 100644 jellyflood tvOS/Components 2/SliderContainer/SliderContainerState.swift create mode 100644 jellyflood tvOS/Components 2/SliderContainer/SliderContentView.swift create mode 100644 jellyflood tvOS/Components 2/SplitFormWindowView.swift create mode 100644 jellyflood tvOS/Components 2/SplitLoginWindowView.swift create mode 100644 jellyflood tvOS/Components 2/StepperView.swift rename {jellypig tvOS => jellyflood tvOS}/Components/CinematicBackgroundView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Components/CinematicItemSelector.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Components/DotHStack.swift (100%) create mode 100644 jellyflood tvOS/Components/EnumPickerView.swift create mode 100644 jellyflood tvOS/Components/ErrorView.swift create mode 100644 jellyflood tvOS/Components/LandscapePosterProgressBar.swift create mode 100644 jellyflood tvOS/Components/ListRowButton.swift create mode 100644 jellyflood tvOS/Components/ListRowMenu.swift create mode 100644 jellyflood tvOS/Components/NonePosterButton.swift rename {jellypig tvOS => jellyflood tvOS}/Components/OrderedSectionSelectorView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Components/PosterButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Components/PosterHStack.swift (100%) create mode 100644 jellyflood tvOS/Components/SFSymbolButton.swift create mode 100644 jellyflood tvOS/Components/SeeAllPosterButton.swift create mode 100644 jellyflood tvOS/Components/ServerButton.swift rename {jellypig tvOS => jellyflood tvOS}/Components/SplitFormWindowView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Components/SplitLoginWindowView.swift (83%) create mode 100644 jellyflood tvOS/Components/StepperView.swift create mode 100644 jellyflood tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift rename jellypig tvOS/Extensions/View/View-tvOS.swift => jellyflood tvOS/Extensions/View/View-tvOS 2.swift (100%) create mode 100644 jellyflood tvOS/Extensions/View/View-tvOS.swift rename jellypig tvOS/ImageButtonStyle.swift => jellyflood tvOS/ImageButtonStyle 2.swift (100%) create mode 100644 jellyflood tvOS/ImageButtonStyle.swift create mode 100644 jellyflood tvOS/Objects 2/FocusGuide.swift rename {jellypig tvOS => jellyflood tvOS}/Objects/FocusGuide.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/1280x768-back.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.png create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/512.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.png create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.png rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/400x240-back.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Webp.net-resizeimage.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.png create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/216.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Webp.net-resizeimage-2.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.png create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.png create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/TopShelf.png rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Untitled-1.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Untitled-2.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/top shelf-1.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/top shelf.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/TopShelf.png rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Untitled-1.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Untitled-2.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/top shelf-1.png (100%) rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/top shelf.png (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-chrome.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-chrome.imageset/chrome.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edge.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edge.imageset/edge.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edgechromium.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-edgechromium.imageset/edgechromium.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-firefox.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-firefox.imageset/firefox.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-html5.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-html5.imageset/html5.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-msie.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-msie.imageset/msie.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-opera.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-opera.imageset/opera.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-safari.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Device-browser-safari.imageset/safari.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-android.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-android.imageset/android.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-apple.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-apple.imageset/apple.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-finamp.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-finamp.imageset/finamp.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-kodi.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-kodi.imageset/kodi.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-playstation.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-playstation.imageset/playstation.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-roku.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-roku.imageset/roku.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-samsungtv.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-samsungtv.imageset/samsungtv.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-webos.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-webos.imageset/webOS.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-windows.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-windows.imageset/windows.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-xbox.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Clients/Device-client-xbox.imageset/xbox.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Other/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-homeassistant.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-homeassistant.imageset/home-assistant.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-other.imageset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/DeviceIcons/Other/Device-other-other.imageset/other.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/Contents.json rename {jellypig tvOS => jellyflood tvOS}/Resources/Assets.xcassets/jellyfin-blob-blue.imageset/jellyfin-blob.svg (100%) create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json create mode 100644 jellyflood tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg create mode 100644 jellyflood tvOS/Resources/Info.plist create mode 100644 jellyflood tvOS/Views 2/AppLoadingView.swift create mode 100644 jellyflood tvOS/Views 2/AppSettingsView/AppSettingsView.swift create mode 100644 jellyflood tvOS/Views 2/AppSettingsView/Components/HourMinutePicker.swift create mode 100644 jellyflood tvOS/Views 2/AppSettingsView/Components/SignOutIntervalSection.swift create mode 100644 jellyflood tvOS/Views 2/FontPickerView.swift create mode 100644 jellyflood tvOS/Views 2/ItemOverviewView.swift create mode 100644 jellyflood tvOS/Views 2/LearnMoreModal.swift create mode 100644 jellyflood tvOS/Views 2/MediaSourceInfoView.swift rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/MediaView/Components/MediaItem.swift (100%) create mode 100644 jellyflood tvOS/Views 2/MediaView/MediaView.swift create mode 100644 jellyflood tvOS/Views 2/ProgramsView/Components/ProgramButtonContent.swift create mode 100644 jellyflood tvOS/Views 2/ProgramsView/Components/ProgramProgressOverlay.swift create mode 100644 jellyflood tvOS/Views 2/ProgramsView/ProgramsView.swift create mode 100644 jellyflood tvOS/Views 2/QuickConnectView.swift create mode 100644 jellyflood tvOS/Views 2/SearchView.swift create mode 100644 jellyflood tvOS/Views 2/ServerDetailView.swift create mode 100644 jellyflood tvOS/Views 2/VideoPlayer/Components/LoadingView.swift rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveNativeVideoPlayer.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveOverlays/LiveMainOverlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveOverlays/LiveOverlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/LiveVideoPlayer.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/NativeVideoPlayer.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/ChapterOverlay.swift (100%) create mode 100644 jellyflood tvOS/Views 2/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/BarActionButtons.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/BottomBarView.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift (100%) create mode 100644 jellyflood tvOS/Views 2/VideoPlayer/Overlays/ConfirmCloseOverlay.swift rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/MainOverlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/Overlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/Overlays/SmallMenuOverlay.swift (100%) rename {jellypig tvOS/Views => jellyflood tvOS/Views 2}/VideoPlayer/VideoPlayer.swift (100%) create mode 100644 jellyflood tvOS/Views/AppLoadingView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/AppSettingsView/AppSettingsView.swift (100%) create mode 100644 jellyflood tvOS/Views/AppSettingsView/Components/HourMinutePicker.swift rename {jellypig tvOS => jellyflood tvOS}/Views/AppSettingsView/Components/SignOutIntervalSection.swift (100%) create mode 100644 jellyflood tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ChannelLibraryView/Components/WideChannelGridItem.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ConnectToServerView/Components/LocalServerButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ConnectToServerView/ConnectToServerView.swift (100%) create mode 100644 jellyflood tvOS/Views/ConnectToServerView/ConnectToXtreamView.swift create mode 100644 jellyflood tvOS/Views/ConnectToServerView/DualServerConnectView.swift create mode 100644 jellyflood tvOS/Views/FontPickerView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/Components/CinematicRecentlyAddedView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/Components/CinematicResumeItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/Components/LatestInLibraryView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/Components/NextUpView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/Components/RecentlyAddedView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/HomeView/HomeView.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemOverviewView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CinematicCollectionItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CinematicEpisodeItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CinematicItemAboutView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CinematicItemViewTopRow.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CinematicSeasonItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CollectionItemView/CollectionItemContentView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/CollectionItemView/CollectionItemView.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemView/Components/AboutView/AboutView.swift create mode 100644 jellyflood tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/AboutView/Components/ImageCard.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/AboutView/Components/OverviewCard.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/ActionButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/ActionButtonHStack/Components/RefreshMetadataButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/AttributeHStack.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/CastAndCrewHStack.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/EpisodeSelector/Components/HStacks/EpisodeHStack.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/EpisodeSelector/Components/HStacks/SeasonHStack.swift (100%) create mode 100644 jellyflood tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift create mode 100644 jellyflood tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift create mode 100644 jellyflood tvOS/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/PlayButton/PlayButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/SimilarItemsHStack.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/Components/SpecialFeaturesHStack.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/EpisodeItemView/EpisodeItemContentView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/EpisodeItemView/EpisodeItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/ItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/MovieItemView/MovieItemContentView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/MovieItemView/MovieItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/ScrollViews/CinematicScrollView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/SeriesItemView/SeriesItemContentView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ItemView/SeriesItemView/SeriesItemView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/LearnMoreModal.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/MediaSourceInfoView.swift (100%) create mode 100644 jellyflood tvOS/Views/MediaView/Components/MediaItem.swift rename {jellypig tvOS => jellyflood tvOS}/Views/MediaView/MediaView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/PagingLibraryView/Components/LibraryRow.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/PagingLibraryView/Components/ListRow.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/PagingLibraryView/PagingLibraryView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramGuideView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramGuideView/Components/EPGChannelRow.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramGuideView/Components/EPGCurrentTimeIndicator.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramGuideView/Components/EPGProgramCell.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramGuideView/Components/EPGTimelineHeader.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramsView/Components/ProgramButtonContent.swift (100%) create mode 100644 jellyflood tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift rename {jellypig tvOS => jellyflood tvOS}/Views/ProgramsView/ProgramsView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/QuickConnectView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SearchView.swift (100%) create mode 100644 jellyflood tvOS/Views/SelectUserView/Components/AddUserBottomButton.swift create mode 100644 jellyflood tvOS/Views/SelectUserView/Components/AddUserGridButton.swift rename {jellypig tvOS => jellyflood tvOS}/Views/SelectUserView/Components/SelectUserBottomBar.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SelectUserView/Components/ServerSelectionMenu.swift (97%) create mode 100644 jellyflood tvOS/Views/SelectUserView/Components/UserGridButton.swift rename {jellypig tvOS => jellyflood tvOS}/Views/SelectUserView/SelectUserView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/ServerDetailView.swift (100%) create mode 100644 jellyflood tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift (100%) create mode 100644 jellyflood tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomizeViewsSettings/Components/Sections/LibrarySection.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift (100%) create mode 100644 jellyflood tvOS/Views/SettingsView/ExperimentalSettingsView.swift create mode 100644 jellyflood tvOS/Views/SettingsView/IndicatorSettingsView.swift rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/PlaybackQualitySettingsView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/SettingsView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/SettingsView/VideoPlayerSettingsView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/UserSignInView/Components/PublicUserButton.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/UserSignInView/UserSignInView.swift (100%) rename {jellypig tvOS => jellyflood tvOS}/Views/VideoPlayer/Components/LoadingView.swift (100%) create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/LiveVideoPlayer.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/NativeVideoPlayer.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/ChapterOverlay.swift rename {jellypig tvOS => jellyflood tvOS}/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift (100%) create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/BottomBarView.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift rename {jellypig tvOS => jellyflood tvOS}/Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift (100%) create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/Overlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/Overlays/SmallMenuOverlay.swift create mode 100644 jellyflood tvOS/Views/VideoPlayer/VideoPlayer.swift rename {jellypig.xcodeproj => jellyflood.xcodeproj}/project.pbxproj (97%) create mode 100644 jellyflood.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 jellyflood.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename {jellypig.xcodeproj => jellyflood.xcodeproj}/project.xcworkspace/xcshareddata/swiftpm/Package.resolved (100%) create mode 100644 jellyflood.xcodeproj/xcshareddata/IDETemplateMacros.plist create mode 100644 jellyflood.xcodeproj/xcshareddata/xcschemes/jellyflood tvOS.xcscheme create mode 100644 remove_epg_files.rb diff --git a/.claude/commands/build.md b/.claude/commands/build.md new file mode 100644 index 00000000..89c42f1b --- /dev/null +++ b/.claude/commands/build.md @@ -0,0 +1,44 @@ +--- +description: Build jellypig tvOS (debug or release) +--- + +Build jellypig tvOS for the simulator. Takes an optional configuration argument: +- `debug` (default) - Fast build with debugging symbols +- `release` - Optimized build for distribution + +Usage: +- `/build` - Build in Debug configuration (default) +- `/build debug` - Build in Debug configuration (explicit) +- `/build release` - Build in Release configuration + +Steps to execute: +1. Parse the configuration argument (default to "debug" if not provided or invalid) +2. Validate the configuration is either "debug" or "release" (case-insensitive) +3. Run xcodebuild with the specified configuration: + ```bash + cd /Users/ashikkizhakkepallathu/Documents/claude/jellypig/jellypig + + # For debug: + xcodebuild -project jellypig.xcodeproj \ + -scheme "jellypig tvOS" \ + -sdk appletvsimulator \ + -configuration Debug \ + -derivedDataPath ./DerivedData \ + clean build \ + CODE_SIGNING_ALLOWED=NO + + # For release: + xcodebuild -project jellypig.xcodeproj \ + -scheme "jellypig tvOS" \ + -sdk appletvsimulator \ + -configuration Release \ + -derivedDataPath ./DerivedData \ + clean build \ + CODE_SIGNING_ALLOWED=NO + ``` +4. Report build status (success or failure) +5. Display the output path of the built app + +Expected output location: +- Debug: `./DerivedData/Build/Products/Debug-appletvsimulator/jellypig tvOS.app` +- Release: `./DerivedData/Build/Products/Release-appletvsimulator/jellypig tvOS.app` diff --git a/.claude/commands/init-dev.md b/.claude/commands/init-dev.md index 6fe79fc1..f6651f1c 100644 --- a/.claude/commands/init-dev.md +++ b/.claude/commands/init-dev.md @@ -8,9 +8,10 @@ Steps: 1. Read /Users/ashikkizhakkepallathu/Documents/claude/jellypig/chats-summary.txt 2. Display a concise summary including: - Project name and description - - Available custom slash commands (/sim, etc.) + - Available custom slash commands (/build, /sim, etc.) - Recent features implemented - - Key configuration details + - Key configuration details (Bundle ID, Simulator UUID, etc.) + - Build method: **Command-line builds work** via xcodebuild (no Xcode GUI required) - Common tasks you can help with Make the output brief and actionable - focus on what's immediately useful for the developer. diff --git a/.claude/commands/sim.md b/.claude/commands/sim.md index 7be1c180..06d52a62 100644 --- a/.claude/commands/sim.md +++ b/.claude/commands/sim.md @@ -1,14 +1,41 @@ --- -description: Build jellypig tvOS and launch in Apple TV simulator +description: Build and launch jellypig tvOS in simulator --- Build the latest version of jellypig tvOS in Debug configuration, install it on the Apple TV simulator, and launch it. Steps: -1. Boot the Apple TV simulator (16A71179-729D-4F1B-8698-8371F137025B) -2. Open Simulator.app -3. Build the project for tvOS Simulator -4. Install the built app on the simulator -5. Launch the app with bundle identifier org.ashik.jellypig +1. First, build the project using the same approach as `/build debug`: + ```bash + cd /Users/ashikkizhakkepallathu/Documents/claude/jellypig/jellypig + xcodebuild -project jellypig.xcodeproj \ + -scheme "jellypig tvOS" \ + -sdk appletvsimulator \ + -configuration Debug \ + -derivedDataPath ./DerivedData \ + clean build \ + CODE_SIGNING_ALLOWED=NO + ``` -Use xcodebuild to build, xcrun simctl to manage the simulator, and report success when the app is running. +2. Boot the Apple TV simulator: + ```bash + xcrun simctl boot 16A71179-729D-4F1B-8698-8371F137025B 2>/dev/null || true + ``` + +3. Open Simulator.app: + ```bash + open -a Simulator + ``` + +4. Install the built app on the simulator: + ```bash + xcrun simctl install 16A71179-729D-4F1B-8698-8371F137025B \ + "./DerivedData/Build/Products/Debug-appletvsimulator/jellypig tvOS.app" + ``` + +5. Launch the app: + ```bash + xcrun simctl launch 16A71179-729D-4F1B-8698-8371F137025B org.ashik.jellypig + ``` + +Report build and launch status. If any step fails, provide clear error message. diff --git a/Shared/Components/Layouts/FlowLayout.swift b/Shared/Components/Layouts/FlowLayout.swift new file mode 100644 index 00000000..f048b0ad --- /dev/null +++ b/Shared/Components/Layouts/FlowLayout.swift @@ -0,0 +1,364 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +/// A custom layout that arranges views in a flow pattern, automatically wrapping items to new rows +struct FlowLayout: Layout { + + // MARK: - Fill Direction + + enum Direction { + case up + case down + } + + // MARK: - Cache Structure + + struct CacheData { + let subviewSizes: [CGSize] + let rows: [[Int]] + let totalSize: CGSize + let lastWidth: CGFloat? + } + + // MARK: - Properties + + /// The alignment of content within each row (leading, center, or trailing) + private let alignment: HorizontalAlignment + /// Controls whether items fill from the top row down or bottom row up when wrapping + private let direction: Direction + /// The horizontal spacing between items within the same row + private let spacing: CGFloat + /// The vertical spacing between the top and bottom rows when content wraps + private let lineSpacing: CGFloat + /// The minimum number of items that must be in the smaller row when wrapping occurs + private let minRowLength: Int + + init( + alignment: HorizontalAlignment = .center, + direction: Direction = .up, + spacing: CGFloat = 8, + lineSpacing: CGFloat = 8, + minRowLength: Int = 2 + ) { + self.alignment = alignment + self.direction = direction + self.spacing = spacing + self.lineSpacing = lineSpacing + self.minRowLength = minRowLength + } + + // MARK: - Make Cache + + func makeCache(subviews: Subviews) -> CacheData { + CacheData( + subviewSizes: [], + rows: [], + totalSize: .zero, + lastWidth: nil + ) + } + + // MARK: - Update Cache + + func updateCache(_ cache: inout CacheData, subviews: Subviews) { + cache = CacheData( + subviewSizes: [], + rows: [], + totalSize: .zero, + lastWidth: nil + ) + } + + // MARK: - Calculate Layout + + private func calculateLayout( + subviews: Subviews, + width: CGFloat + ) -> (sizes: [CGSize], rows: [[Int]], totalSize: CGSize) { + let sizes = subviews.map { subview in + let size = subview.sizeThatFits(.unspecified) + return CGSize(width: ceil(size.width), height: ceil(size.height)) + } + + let rows = computeRows(sizes: sizes, maxWidth: width) + let totalSize = computeTotalSize(rows: rows, sizes: sizes) + + return (sizes, rows, totalSize) + } + + // MARK: - Size That Fits + + /// Calculates the minimum size needed to display all subviews according to the flow layout rules + func sizeThatFits( + proposal: ProposedViewSize, + subviews: Subviews, + cache: inout CacheData + ) -> CGSize { + let availableWidth = proposal.width ?? .infinity + let effectiveWidth = availableWidth.isFinite ? availableWidth : 1000 + + if cache.lastWidth != effectiveWidth || cache.subviewSizes.isEmpty { + let (sizes, rows, totalSize) = calculateLayout( + subviews: subviews, + width: effectiveWidth + ) + + cache = CacheData( + subviewSizes: sizes, + rows: rows, + totalSize: totalSize, + lastWidth: effectiveWidth + ) + } + + // Return the calculated height but respect the proposed width + return CGSize( + width: min(cache.totalSize.width, proposal.width ?? cache.totalSize.width), + height: cache.totalSize.height + ) + } + + // MARK: - Place Subviews + + /// Positions each subview within the given bounds according to the flow layout rules + func placeSubviews( + in bounds: CGRect, + proposal: ProposedViewSize, + subviews: Subviews, + cache: inout CacheData + ) { + let availableWidth = bounds.width + + if cache.lastWidth != availableWidth || cache.subviewSizes.isEmpty { + let (sizes, rows, totalSize) = calculateLayout( + subviews: subviews, + width: availableWidth + ) + + cache = CacheData( + subviewSizes: sizes, + rows: rows, + totalSize: totalSize, + lastWidth: availableWidth + ) + } + + let sizes = cache.subviewSizes + let rows = cache.rows + + var yOffset: CGFloat = bounds.minY + + for row in rows { + let rowHeight = row.map { sizes[$0].height }.max() ?? 0 + let rowWidth = computeRowWidth(indices: row, sizes: sizes) + let xOffset = computeXOffset(rowWidth: rowWidth, bounds: bounds) + + var x = xOffset + for index in row { + let size = sizes[index] + let y = yOffset + (rowHeight - size.height) / 2 + + subviews[index].place( + at: CGPoint(x: x, y: y), + anchor: .topLeading, + proposal: ProposedViewSize(size) + ) + + x += size.width + spacing + } + + yOffset += rowHeight + lineSpacing + } + } + + // MARK: - Compute Rows + + /// Determines how to distribute items across rows based on the available width + private func computeRows( + sizes: [CGSize], + maxWidth: CGFloat + ) -> [[Int]] { + guard sizes.count > 1 else { + return sizes.isEmpty ? [] : [[0]] + } + + // First create rows by fitting items naturally + let rows = createInitialRows(sizes: sizes, maxWidth: maxWidth) + + // Then optimize distribution based on flow direction + return optimizeRowDistribution(rows: rows, sizes: sizes, maxWidth: maxWidth) + } + + /// Create initial rows by fitting items sequentially + private func createInitialRows( + sizes: [CGSize], + maxWidth: CGFloat + ) -> [[Int]] { + var rows: [[Int]] = [] + var currentRow: [Int] = [] + var currentWidth: CGFloat = 0 + + for (index, size) in sizes.enumerated() { + if currentRow.isEmpty { + currentRow.append(index) + currentWidth = size.width + } else { + let widthWithItem = currentWidth + spacing + size.width + + if widthWithItem <= maxWidth { + currentRow.append(index) + currentWidth = widthWithItem + } else { + rows.append(currentRow) + currentRow = [index] + currentWidth = size.width + } + } + } + + if !currentRow.isEmpty { + rows.append(currentRow) + } + + return rows + } + + /// Optimize row distribution based on flow direction + private func optimizeRowDistribution( + rows: [[Int]], + sizes: [CGSize], + maxWidth: CGFloat + ) -> [[Int]] { + guard rows.count > 1 else { return rows } + + var optimizedRows = rows + + switch direction { + case .up: + // Move items from earlier rows to later rows to create upward flow + optimizedRows = balanceRowsForUpwardFlow(rows: optimizedRows, sizes: sizes, maxWidth: maxWidth) + case .down: + // Move items from later rows to earlier rows to create downward flow + optimizedRows = balanceRowsForDownwardFlow(rows: optimizedRows, sizes: sizes, maxWidth: maxWidth) + } + + return optimizedRows + } + + /// Balance rows for upward flow - fill bottom rows more than top rows + private func balanceRowsForUpwardFlow( + rows: [[Int]], + sizes: [CGSize], + maxWidth: CGFloat + ) -> [[Int]] { + var optimizedRows = rows + + for i in 0 ..< optimizedRows.count - 1 { + while optimizedRows[i].count > minRowLength { + let lastItem = optimizedRows[i].last! + + var testRow = optimizedRows[i + 1] + testRow.append(lastItem) + let newWidth = computeRowWidth(indices: testRow, sizes: sizes) + + if newWidth <= maxWidth { + optimizedRows[i].removeLast() + optimizedRows[i + 1].append(lastItem) + } else { + break + } + } + } + + return optimizedRows + } + + /// Balance rows for downward flow - fill top rows more than bottom rows + private func balanceRowsForDownwardFlow( + rows: [[Int]], + sizes: [CGSize], + maxWidth: CGFloat + ) -> [[Int]] { + var optimizedRows = rows + + for i in (0 ..< optimizedRows.count - 1).reversed() { + while optimizedRows[i + 1].count > minRowLength { + let firstItem = optimizedRows[i + 1].first! + + var testRow = optimizedRows[i] + testRow.append(firstItem) + let newWidth = computeRowWidth(indices: testRow, sizes: sizes) + + if newWidth <= maxWidth { + optimizedRows[i + 1].removeFirst() + optimizedRows[i].append(firstItem) + } else { + break + } + } + } + + return optimizedRows + } + + // MARK: - Compute Row Width + + /// Calculates the total width needed for a row of items including spacing + private func computeRowWidth( + indices: [Int], + sizes: [CGSize] + ) -> CGFloat { + guard indices.isNotEmpty else { return 0 } + + let itemsWidth = indices.reduce(0) { $0 + sizes[$1].width } + let spacingWidth = spacing * CGFloat(indices.count - 1) + + return itemsWidth + spacingWidth + } + + // MARK: - Compute X Offset + + /// Calculates the starting X position for a row based on the alignment setting + private func computeXOffset( + rowWidth: CGFloat, + bounds: CGRect + ) -> CGFloat { + switch alignment { + case .trailing: + return bounds.maxX - rowWidth + case .center: + return bounds.minX + (bounds.width - rowWidth) / 2 + default: + return bounds.minX + } + } + + // MARK: - Compute Total Size + + /// Calculates the total size needed to display all rows with proper spacing + private func computeTotalSize( + rows: [[Int]], + sizes: [CGSize] + ) -> CGSize { + guard rows.isNotEmpty else { return .zero } + + let rowHeights = rows.map { row in + row.map { sizes[$0].height }.max() ?? 0 + } + + let totalHeight = rowHeights.reduce(0, +) + lineSpacing * CGFloat(rows.count - 1) + + let maxWidth = rows.map { row in + computeRowWidth(indices: row, sizes: sizes) + }.max() ?? 0 + + return CGSize(width: maxWidth, height: totalHeight) + } +} diff --git a/Shared/Components/Localization/CountryPicker.swift b/Shared/Components/Localization/CountryPicker.swift new file mode 100644 index 00000000..dae45a5d --- /dev/null +++ b/Shared/Components/Localization/CountryPicker.swift @@ -0,0 +1,131 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct CountryPicker: View { + + // MARK: - State Objects + + @StateObject + private var viewModel: CountriesViewModel + + // MARK: - Input Properties + + private var selectionBinding: Binding + private let title: String + + @State + private var selection: CountryInfo? + + // MARK: - Body + + var body: some View { + Group { + #if os(tvOS) + ListRowMenu(title, subtitle: $selection.wrappedValue?.displayTitle) { + Picker(title, selection: $selection) { + Text(CountryInfo.none.displayTitle) + .tag(CountryInfo.none as CountryInfo?) + + ForEach(viewModel.value, id: \.self) { country in + Text(country.displayTitle) + .tag(country as CountryInfo?) + } + } + } + // TODO: iOS 17+ move this to the Group + .onChange(of: viewModel.value) { + updateSelection() + } + .onChange(of: selection) { _, newValue in + selectionBinding.wrappedValue = newValue + } + .menuStyle(.borderlessButton) + .listRowInsets(.zero) + #else + Picker(title, selection: $selection) { + + Text(CountryInfo.none.displayTitle) + .tag(CountryInfo.none as CountryInfo?) + + ForEach(viewModel.value, id: \.self) { country in + Text(country.displayTitle) + .tag(country as CountryInfo?) + } + } + // TODO: iOS 17+ delete this and use the tvOS onChange at the Group level + .onChange(of: viewModel.value) { _ in + updateSelection() + } + .onChange(of: selection) { newValue in + selectionBinding.wrappedValue = newValue + } + #endif + } + .onFirstAppear { + viewModel.refresh() + } + } + + private func updateSelection() { + let newValue = viewModel.value.first { value in + if let selectedTwo = selection?.twoLetterISORegionName, + let candidateTwo = value.twoLetterISORegionName, + selectedTwo == candidateTwo + { + return true + } + if let selectedThree = selection?.threeLetterISORegionName, + let candidateThree = value.threeLetterISORegionName, + selectedThree == candidateThree + { + return true + } + return false + } + + selection = newValue ?? CountryInfo.none + } +} + +extension CountryPicker { + + init(_ title: String, twoLetterISORegion: Binding) { + self.title = title + self._selection = State( + initialValue: twoLetterISORegion.wrappedValue.flatMap { code in + CountryInfo( + name: code, + twoLetterISORegionName: code + ) + } ?? CountryInfo.none + ) + self.selectionBinding = Binding( + get: { + guard let code = twoLetterISORegion.wrappedValue else { + return CountryInfo.none + } + return CountryInfo( + name: code, + twoLetterISORegionName: code + ) + }, + set: { newCountry in + twoLetterISORegion.wrappedValue = newCountry?.twoLetterISORegionName + } + ) + + self._viewModel = StateObject( + wrappedValue: CountriesViewModel( + initialValue: [.none] + ) + ) + } +} diff --git a/Shared/Components/Localization/CulturePicker.swift b/Shared/Components/Localization/CulturePicker.swift new file mode 100644 index 00000000..6950466d --- /dev/null +++ b/Shared/Components/Localization/CulturePicker.swift @@ -0,0 +1,153 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct CulturePicker: View { + + // MARK: - State Objects + + @StateObject + private var viewModel: CulturesViewModel + + // MARK: - Input Properties + + private var selectionBinding: Binding + private let title: String + + @State + private var selection: CultureDto? + + // MARK: - Body + + var body: some View { + Group { + #if os(tvOS) + ListRowMenu(title, subtitle: $selection.wrappedValue?.displayTitle) { + Picker(title, selection: $selection) { + Text(CultureDto.none.displayTitle) + .tag(CultureDto.none as CultureDto?) + + ForEach(viewModel.value, id: \.self) { value in + Text(value.displayTitle) + .tag(value as CultureDto?) + } + } + } + // TODO: iOS 17+ move this to the Group + .onChange(of: viewModel.value) { + updateSelection() + } + .onChange(of: selection) { _, newValue in + selectionBinding.wrappedValue = newValue + } + .menuStyle(.borderlessButton) + .listRowInsets(.zero) + #else + Picker(title, selection: $selection) { + + Text(CultureDto.none.displayTitle) + .tag(CultureDto.none as CultureDto?) + + ForEach(viewModel.value, id: \.self) { value in + Text(value.displayTitle) + .tag(value as CultureDto?) + } + } + // TODO: iOS 17+ delete this and use the tvOS onChange at the Group level + .onChange(of: viewModel.value) { _ in + updateSelection() + } + .onChange(of: selection) { newValue in + selectionBinding.wrappedValue = newValue + } + #endif + } + .onFirstAppear { + viewModel.refresh() + } + } + + private func updateSelection() { + let newValue = viewModel.value.first { value in + if let selectedTwo = selection?.twoLetterISOLanguageName, + let candidateTwo = value.twoLetterISOLanguageName, + selectedTwo == candidateTwo + { + return true + } + if let selectedThree = selection?.threeLetterISOLanguageName, + let candidateThree = value.threeLetterISOLanguageName, + selectedThree == candidateThree + { + return true + } + return false + } + + selection = newValue ?? CultureDto.none + } +} + +extension CulturePicker { + + init(_ title: String, twoLetterISOLanguageName: Binding) { + self.title = title + self._selection = State( + initialValue: twoLetterISOLanguageName.wrappedValue.flatMap { + CultureDto(twoLetterISOLanguageName: $0) + } ?? CultureDto.none + ) + + self.selectionBinding = Binding( + get: { + guard let code = twoLetterISOLanguageName.wrappedValue else { + return CultureDto.none + } + return CultureDto(twoLetterISOLanguageName: code) + }, + set: { newCountry in + twoLetterISOLanguageName.wrappedValue = newCountry?.twoLetterISOLanguageName + } + ) + + self._viewModel = StateObject( + wrappedValue: CulturesViewModel( + initialValue: [.none] + ) + ) + } + + init(_ title: String, threeLetterISOLanguageName: Binding) { + self.title = title + self._selection = State( + initialValue: threeLetterISOLanguageName.wrappedValue.flatMap { + CultureDto(threeLetterISOLanguageName: $0) + } ?? CultureDto.none + ) + + self.selectionBinding = Binding( + get: { + guard let code = threeLetterISOLanguageName.wrappedValue else { + return CultureDto.none + } + return CultureDto(threeLetterISOLanguageName: code) + }, + set: { newCountry in + threeLetterISOLanguageName.wrappedValue = newCountry?.threeLetterISOLanguageName + } + ) + + self._viewModel = StateObject( + wrappedValue: CulturesViewModel( + initialValue: [.none] + ) + ) + } +} diff --git a/Shared/Components/Localization/ParentalRatingPicker.swift b/Shared/Components/Localization/ParentalRatingPicker.swift new file mode 100644 index 00000000..77a29d82 --- /dev/null +++ b/Shared/Components/Localization/ParentalRatingPicker.swift @@ -0,0 +1,120 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct ParentalRatingPicker: View { + + // MARK: - State Objects + + @StateObject + private var viewModel: ParentalRatingsViewModel + + // MARK: - Input Properties + + private var selectionBinding: Binding + private let title: String + + @State + private var selection: ParentalRating? + + // MARK: - Body + + var body: some View { + Group { + #if os(tvOS) + ListRowMenu(title, subtitle: $selection.wrappedValue?.displayTitle) { + Picker(title, selection: $selection) { + Text(ParentalRating.none.displayTitle) + .tag(ParentalRating.none as ParentalRating?) + + ForEach(viewModel.value, id: \.self) { value in + Text(value.displayTitle) + .tag(value as ParentalRating?) + } + } + } + .onChange(of: viewModel.value) { + updateSelection() + } + .onChange(of: selection) { _, newValue in + selectionBinding.wrappedValue = newValue + } + .menuStyle(.borderlessButton) + .listRowInsets(.zero) + #else + Picker(title, selection: $selection) { + + Text(ParentalRating.none.displayTitle) + .tag(ParentalRating.none as ParentalRating?) + + ForEach(viewModel.value, id: \.self) { value in + Text(value.displayTitle) + .tag(value as ParentalRating?) + } + } + .onChange(of: viewModel.value) { _ in + updateSelection() + } + .onChange(of: selection) { newValue in + selectionBinding.wrappedValue = newValue + } + #endif + } + .onFirstAppear { + viewModel.refresh() + } + } + + // MARK: - Update Selection + + private func updateSelection() { + let newValue = viewModel.value.first { value in + if let selectedName = selection?.name, + let candidateName = value.name, + selectedName == candidateName + { + return true + } + return false + } + + selection = newValue ?? ParentalRating.none + } +} + +extension ParentalRatingPicker { + + init(_ title: String, name: Binding) { + self.title = title + self._selection = State( + initialValue: name.wrappedValue.flatMap { + ParentalRating(name: $0) + } ?? ParentalRating.none + ) + + self.selectionBinding = Binding( + get: { + guard let ratingName = name.wrappedValue else { + return ParentalRating.none + } + return ParentalRating(name: ratingName) + }, + set: { newRating in + name.wrappedValue = newRating?.name + } + ) + + self._viewModel = StateObject( + wrappedValue: ParentalRatingsViewModel( + initialValue: [.none] + ) + ) + } +} diff --git a/Shared/Components/MarkedList.swift b/Shared/Components/MarkedList.swift new file mode 100644 index 00000000..f93a3423 --- /dev/null +++ b/Shared/Components/MarkedList.swift @@ -0,0 +1,91 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +/// A `VStack` that displays subviews with a marker on the top leading edge. +/// +/// In a marker view, ensure that views that are only used for layout are +/// tagged with `hidden` to avoid them being read by accessibility features. +struct MarkedList: View { + + private let content: Content + private let marker: (Int) -> Marker + private let spacing: CGFloat + + init( + spacing: CGFloat, + @ViewBuilder marker: @escaping (Int) -> Marker, + @ViewBuilder content: @escaping () -> Content + ) { + self.marker = marker + self.content = content() + self.spacing = spacing + } + + var body: some View { + _VariadicView.Tree( + MarkedListLayout( + spacing: spacing, + marker: marker + ) + ) { + content + } + } +} + +extension MarkedList { + + struct MarkedListLayout: _VariadicView_UnaryViewRoot { + + let spacing: CGFloat + let marker: (Int) -> Marker + + @ViewBuilder + func body(children: _VariadicView.Children) -> some View { + VStack(alignment: .leading, spacing: spacing) { + ForEach(Array(zip(children.indices, children)), id: \.0) { child in + MarkedListEntry( + marker: marker(child.0), + content: child.1 + ) + } + } + } + } + + struct MarkedListEntry: View { + + @State + private var markerSize: CGSize = .zero + @State + private var childSize: CGSize = .zero + + let marker: Marker + let content: EntryContent + + private var _bullet: some View { + marker + .trackingSize($markerSize) + } + + // TODO: this can cause clipping issues with text since + // with .offset, find fix + var body: some View { + ZStack { + content + .trackingSize($childSize) + .overlay(alignment: .topLeading) { + _bullet + .offset(x: -markerSize.width) + } + } + } + } +} diff --git a/Shared/Components/NativeVideoPlayer.swift b/Shared/Components/NativeVideoPlayer.swift new file mode 100644 index 00000000..b483afe0 --- /dev/null +++ b/Shared/Components/NativeVideoPlayer.swift @@ -0,0 +1,111 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import AVKit +import Factory +import JellyfinAPI +import Logging +import SwiftUI + +// TODO: remove + +struct NativeVideoPlayer: View { + + @Environment(\.presentationCoordinator) + private var presentationCoordinator + + @InjectedObject(\.mediaPlayerManager) + private var manager: MediaPlayerManager + + @LazyState + private var proxy: AVMediaPlayerProxy + + @Router + private var router + + init() { + self._proxy = .init(wrappedValue: AVMediaPlayerProxy()) + } + + var body: some View { + ZStack { + + Color.black + + switch manager.state { + case .playback: + NativeVideoPlayerView(proxy: proxy) + default: + ProgressView() + } + } + .onAppear { + manager.proxy = proxy + manager.start() + } + .preference(key: IsStatusBarHiddenKey.self, value: true) + .backport + .onChange(of: presentationCoordinator.isPresented) { _, isPresented in + Container.shared.mediaPlayerManager.reset() + guard !isPresented else { return } + manager.stop() + } + .alert( + L10n.error, + isPresented: .constant(manager.error != nil) + ) { + Button(L10n.close, role: .cancel) { + Container.shared.mediaPlayerManager.reset() + router.dismiss() + } + } message: { + // TODO: localize + Text("Unable to load this item.") + } + } +} + +extension NativeVideoPlayer { + + private struct NativeVideoPlayerView: UIViewControllerRepresentable { + + let proxy: AVMediaPlayerProxy + + func makeUIViewController(context: Context) -> UINativeVideoPlayerViewController { + UINativeVideoPlayerViewController(proxy: proxy) + } + + func updateUIViewController(_ uiViewController: UINativeVideoPlayerViewController, context: Context) {} + } + + private class UINativeVideoPlayerViewController: AVPlayerViewController { + + private let proxy: AVMediaPlayerProxy + + init(proxy: AVMediaPlayerProxy) { + self.proxy = proxy + + super.init(nibName: nil, bundle: nil) + + player = proxy.player + + player?.allowsExternalPlayback = true + player?.appliesMediaSelectionCriteriaAutomatically = false + allowsPictureInPicturePlayback = true + + #if !os(tvOS) + updatesNowPlayingInfoCenter = false + #endif + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + } +} diff --git a/Shared/Components/PosterImage.swift b/Shared/Components/PosterImage.swift new file mode 100644 index 00000000..0bde58e4 --- /dev/null +++ b/Shared/Components/PosterImage.swift @@ -0,0 +1,90 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import BlurHashKit +import SwiftUI + +/// Retrieving images by exact pixel dimensions is a bit +/// intense for normal usage and eases cache usage and modifications. +private let landscapeMaxWidth: CGFloat = 300 +private let portraitMaxWidth: CGFloat = 200 + +struct PosterImage: View { + + private let contentMode: ContentMode + private let imageMaxWidth: CGFloat + private let item: Item + private let type: PosterDisplayType + + init( + item: Item, + type: PosterDisplayType, + contentMode: ContentMode = .fill, + maxWidth: CGFloat? = nil + ) { + self.contentMode = contentMode + self.imageMaxWidth = maxWidth ?? (type == .landscape ? landscapeMaxWidth : portraitMaxWidth) + self.item = item + self.type = type + } + + private var imageSources: [ImageSource] { + switch type { + case .landscape: + item.landscapeImageSources(maxWidth: imageMaxWidth, quality: 90) + case .portrait: + item.portraitImageSources(maxWidth: imageMaxWidth, quality: 90) + case .square: + item.squareImageSources(maxWidth: imageMaxWidth, quality: 90) + } + } + + var body: some View { + ZStack { + Rectangle() + .fill(.complexSecondary) + + AlternateLayoutView { + Color.clear + } content: { + ImageView(imageSources) + .image(item.transform) + .placeholder { imageSource in + if let blurHash = imageSource.blurHash { + BlurHashView(blurHash: blurHash) + } else if item.showTitle { + SystemImageContentView( + systemName: item.systemImage + ) + } else { + SystemImageContentView( + title: item.displayTitle, + systemName: item.systemImage + ) + } + } + .failure { + if item.showTitle { + SystemImageContentView( + systemName: item.systemImage + ) + } else { + SystemImageContentView( + title: item.displayTitle, + systemName: item.systemImage + ) + } + } + } + } + .posterStyle( + type, + contentMode: contentMode + ) + } +} diff --git a/Shared/Components/TintedMaterial.swift b/Shared/Components/TintedMaterial.swift new file mode 100644 index 00000000..7075c800 --- /dev/null +++ b/Shared/Components/TintedMaterial.swift @@ -0,0 +1,27 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct TintedMaterial: UIViewRepresentable { + + let tint: Color + + func makeUIView(context: Context) -> UIVisualEffectView { + UIVisualEffectView(effect: UIBlurEffect(style: .extraLight)) + } + + func updateUIView(_ uiView: UIVisualEffectView, context: Context) { + set(tint: tint, for: uiView) + } + + private func set(tint: Color, for view: UIVisualEffectView) { + let overlayView = view.subviews.first { type(of: $0) == NSClassFromString("_UIVisualEffectSubview") } + overlayView?.backgroundColor = UIColor(tint.opacity(0.75)) + } +} diff --git a/Shared/Coordinators/AppSettingsCoordinator 2.swift b/Shared/Coordinators/AppSettingsCoordinator 2.swift new file mode 100644 index 00000000..63237232 --- /dev/null +++ b/Shared/Coordinators/AppSettingsCoordinator 2.swift @@ -0,0 +1,72 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import PulseUI +import Stinsen +import SwiftUI + +final class AppSettingsCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \AppSettingsCoordinator.start) + + @Root + var start = makeStart + + #if os(iOS) + @Route(.push) + var about = makeAbout + @Route(.push) + var appIconSelector = makeAppIconSelector + @Route(.push) + var log = makeLog + #endif + + #if os(tvOS) + @Route(.push) + var log = makeLog + + @Route(.fullScreen) + var hourPicker = makeHourPicker + #endif + + init() {} + + #if os(iOS) + @ViewBuilder + func makeAbout(viewModel: SettingsViewModel) -> some View { + AboutAppView(viewModel: viewModel) + } + + @ViewBuilder + func makeAppIconSelector(viewModel: SettingsViewModel) -> some View { + AppIconSelectorView(viewModel: viewModel) + } + #endif + + @ViewBuilder + func makeLog() -> some View { + ConsoleView() + } + + @ViewBuilder + func makeStart() -> some View { + AppSettingsView() + } + + #if os(tvOS) + @ViewBuilder + func makeHourPicker() -> some View { + ZStack { + BlurView() + .ignoresSafeArea() + + HourMinutePicker() + } + } + #endif +} diff --git a/Shared/Coordinators/AppSettingsCoordinator 3.swift b/Shared/Coordinators/AppSettingsCoordinator 3.swift new file mode 100644 index 00000000..63237232 --- /dev/null +++ b/Shared/Coordinators/AppSettingsCoordinator 3.swift @@ -0,0 +1,72 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import PulseUI +import Stinsen +import SwiftUI + +final class AppSettingsCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \AppSettingsCoordinator.start) + + @Root + var start = makeStart + + #if os(iOS) + @Route(.push) + var about = makeAbout + @Route(.push) + var appIconSelector = makeAppIconSelector + @Route(.push) + var log = makeLog + #endif + + #if os(tvOS) + @Route(.push) + var log = makeLog + + @Route(.fullScreen) + var hourPicker = makeHourPicker + #endif + + init() {} + + #if os(iOS) + @ViewBuilder + func makeAbout(viewModel: SettingsViewModel) -> some View { + AboutAppView(viewModel: viewModel) + } + + @ViewBuilder + func makeAppIconSelector(viewModel: SettingsViewModel) -> some View { + AppIconSelectorView(viewModel: viewModel) + } + #endif + + @ViewBuilder + func makeLog() -> some View { + ConsoleView() + } + + @ViewBuilder + func makeStart() -> some View { + AppSettingsView() + } + + #if os(tvOS) + @ViewBuilder + func makeHourPicker() -> some View { + ZStack { + BlurView() + .ignoresSafeArea() + + HourMinutePicker() + } + } + #endif +} diff --git a/Shared/Coordinators/HomeCoordinator 2.swift b/Shared/Coordinators/HomeCoordinator 2.swift new file mode 100644 index 00000000..9e0ee888 --- /dev/null +++ b/Shared/Coordinators/HomeCoordinator 2.swift @@ -0,0 +1,45 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class HomeCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \HomeCoordinator.start) + + @Root + var start = makeStart + + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #endif + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + @ViewBuilder + func makeStart() -> some View { + HomeView() + } +} diff --git a/Shared/Coordinators/HomeCoordinator 3.swift b/Shared/Coordinators/HomeCoordinator 3.swift new file mode 100644 index 00000000..9e0ee888 --- /dev/null +++ b/Shared/Coordinators/HomeCoordinator 3.swift @@ -0,0 +1,45 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class HomeCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \HomeCoordinator.start) + + @Root + var start = makeStart + + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #endif + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + @ViewBuilder + func makeStart() -> some View { + HomeView() + } +} diff --git a/Shared/Coordinators/LibraryCoordinator 2.swift b/Shared/Coordinators/LibraryCoordinator 2.swift new file mode 100644 index 00000000..f13fbe9f --- /dev/null +++ b/Shared/Coordinators/LibraryCoordinator 2.swift @@ -0,0 +1,60 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class LibraryCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \LibraryCoordinator.start) + + @Root + var start = makeStart + + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + @Route(.modal) + var filter = makeFilter + #endif + + private let viewModel: PagingLibraryViewModel + + init(viewModel: PagingLibraryViewModel) { + self.viewModel = viewModel + } + + @ViewBuilder + func makeStart() -> some View { + PagingLibraryView(viewModel: viewModel) + } + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + #if !os(tvOS) + func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator { + NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) + } + #endif +} diff --git a/Shared/Coordinators/LibraryCoordinator 3.swift b/Shared/Coordinators/LibraryCoordinator 3.swift new file mode 100644 index 00000000..f13fbe9f --- /dev/null +++ b/Shared/Coordinators/LibraryCoordinator 3.swift @@ -0,0 +1,60 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class LibraryCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \LibraryCoordinator.start) + + @Root + var start = makeStart + + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + @Route(.modal) + var filter = makeFilter + #endif + + private let viewModel: PagingLibraryViewModel + + init(viewModel: PagingLibraryViewModel) { + self.viewModel = viewModel + } + + @ViewBuilder + func makeStart() -> some View { + PagingLibraryView(viewModel: viewModel) + } + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + #if !os(tvOS) + func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator { + NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) + } + #endif +} diff --git a/Shared/Coordinators/LiveVideoPlayerCoordinator.swift b/Shared/Coordinators/LiveVideoPlayerCoordinator.swift index cda151b2..af75ecb3 100644 --- a/Shared/Coordinators/LiveVideoPlayerCoordinator.swift +++ b/Shared/Coordinators/LiveVideoPlayerCoordinator.swift @@ -69,6 +69,8 @@ final class LiveVideoPlayerCoordinator: NavigationCoordinatable { #else PreferencesView { + // Use VLC for Live TV to handle raw MPEG-TS streams from Dispatcharr + // (Native AVPlayer can't play raw MPEG-TS, only HLS) if Defaults[.VideoPlayer.videoPlayerType] == .swiftfin { LiveVideoPlayer(manager: self.videoPlayerManager) } else { diff --git a/Shared/Coordinators/MediaCoordinator 2.swift b/Shared/Coordinators/MediaCoordinator 2.swift new file mode 100644 index 00000000..8322daee --- /dev/null +++ b/Shared/Coordinators/MediaCoordinator 2.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class MediaCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \MediaCoordinator.start) + + @Root + var start = makeStart + #if os(tvOS) + @Route(.fullScreen) + var library = makeLibrary + @Route(.fullScreen) + var liveTV = makeLiveTV + #else + @Route(.push) + var library = makeLibrary + @Route(.push) + var liveTV = makeLiveTV + @Route(.push) + var downloads = makeDownloads + #endif + + #if os(tvOS) + func makeLibrary(viewModel: PagingLibraryViewModel) -> NavigationViewCoordinator> { + NavigationViewCoordinator(LibraryCoordinator(viewModel: viewModel)) + } + #else + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + func makeDownloads() -> DownloadListCoordinator { + DownloadListCoordinator() + } + #endif + + func makeLiveTV() -> LiveTVCoordinator { + LiveTVCoordinator() + } + + @ViewBuilder + func makeStart() -> some View { + MediaView() + } +} diff --git a/Shared/Coordinators/MediaCoordinator 3.swift b/Shared/Coordinators/MediaCoordinator 3.swift new file mode 100644 index 00000000..8322daee --- /dev/null +++ b/Shared/Coordinators/MediaCoordinator 3.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class MediaCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \MediaCoordinator.start) + + @Root + var start = makeStart + #if os(tvOS) + @Route(.fullScreen) + var library = makeLibrary + @Route(.fullScreen) + var liveTV = makeLiveTV + #else + @Route(.push) + var library = makeLibrary + @Route(.push) + var liveTV = makeLiveTV + @Route(.push) + var downloads = makeDownloads + #endif + + #if os(tvOS) + func makeLibrary(viewModel: PagingLibraryViewModel) -> NavigationViewCoordinator> { + NavigationViewCoordinator(LibraryCoordinator(viewModel: viewModel)) + } + #else + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + func makeDownloads() -> DownloadListCoordinator { + DownloadListCoordinator() + } + #endif + + func makeLiveTV() -> LiveTVCoordinator { + LiveTVCoordinator() + } + + @ViewBuilder + func makeStart() -> some View { + MediaView() + } +} diff --git a/Shared/Coordinators/Navigation/NavigationCoordinator.swift b/Shared/Coordinators/Navigation/NavigationCoordinator.swift new file mode 100644 index 00000000..cbc8250b --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationCoordinator.swift @@ -0,0 +1,47 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +@MainActor +final class NavigationCoordinator: ObservableObject { + + @Published + var path: [NavigationRoute] = [] + + @Published + var presentedSheet: NavigationRoute? + @Published + var presentedFullScreen: NavigationRoute? + + func push( + _ route: NavigationRoute + ) { + let style = route.transitionStyle + + #if os(tvOS) + switch style { + case .push, .sheet: + presentedSheet = route + case .fullscreen: + presentedFullScreen = route + } + #else + switch style { + case .push: + path.append(route) + case .sheet: + presentedSheet = route + case .fullscreen: + withAnimation { + presentedFullScreen = route + } + } + #endif + } +} diff --git a/Shared/Coordinators/Navigation/NavigationInjectionView.swift b/Shared/Coordinators/Navigation/NavigationInjectionView.swift new file mode 100644 index 00000000..0f5b1566 --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationInjectionView.swift @@ -0,0 +1,106 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import PreferencesView +import SwiftUI +import Transmission + +// TODO: have full screen zoom presentation zoom from/to center +// - probably need to make mock view with matching ids +// TODO: have presentation dismissal be through preference keys +// - issue with all of the VC/view wrapping + +extension EnvironmentValues { + + @Entry + var presentationControllerShouldDismiss: Binding = .constant(true) +} + +struct NavigationInjectionView: View { + + @StateObject + private var coordinator: NavigationCoordinator + @EnvironmentObject + private var rootCoordinator: RootCoordinator + + @State + private var isPresentationInteractive: Bool = true + + private let content: AnyView + + init( + coordinator: @autoclosure @escaping () -> NavigationCoordinator, + @ViewBuilder content: @escaping () -> some View + ) { + _coordinator = StateObject(wrappedValue: coordinator()) + self.content = AnyView(content()) + } + + var body: some View { + NavigationStack(path: $coordinator.path) { + content + .navigationDestination(for: NavigationRoute.self) { route in + route.destination + } + } + .environment( + \.router, + .init( + navigationCoordinator: coordinator, + rootCoordinator: rootCoordinator + ) + ) + .sheet( + item: $coordinator.presentedSheet + ) { + coordinator.presentedSheet = nil + } content: { route in + let newCoordinator = NavigationCoordinator() + + NavigationInjectionView(coordinator: newCoordinator) { + route.destination + } + } + #if os(tvOS) + .fullScreenCover( + item: $coordinator.presentedFullScreen + ) { route in + let newCoordinator = NavigationCoordinator() + + NavigationInjectionView(coordinator: newCoordinator) { + route.destination + } + } + #else + .presentation( + $coordinator.presentedFullScreen, + transition: .zoomIfAvailable( + options: .init( + dimmingVisualEffect: .systemThickMaterialDark, + options: .init( + isInteractive: isPresentationInteractive + ) + ), + otherwise: .slide(.init(edge: .bottom), options: .init(isInteractive: isPresentationInteractive)) + ) + ) { routeBinding, _ in + let vc = UIPreferencesHostingController { + NavigationInjectionView(coordinator: .init()) { + routeBinding.wrappedValue.destination + .environment(\.presentationControllerShouldDismiss, $isPresentationInteractive) + } + } + + // TODO: presentation options for customizing background color, dimming effect, etc. + vc.view.backgroundColor = .black + + return vc + } + #endif + } +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Admin.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Admin.swift new file mode 100644 index 00000000..d2c5dd5c --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Admin.swift @@ -0,0 +1,226 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +#if os(iOS) +extension NavigationRoute { + + // MARK: - Active Sessions + + static func activeDeviceDetails(box: BindingBox) -> NavigationRoute { + NavigationRoute(id: "activeDeviceDetails") { + ActiveSessionDetailView(box: box) + } + } + + static let activeSessions = NavigationRoute( + id: "activeSessions" + ) { + ActiveSessionsView() + } + + // MARK: - User Activity + + static let activity = NavigationRoute( + id: "activity" + ) { + ServerActivityView() + } + + static func activityDetails(viewModel: ServerActivityDetailViewModel) -> NavigationRoute { + NavigationRoute(id: "activityDetails") { + ServerActivityDetailsView(viewModel: viewModel) + } + } + + static func activityFilters(viewModel: ServerActivityViewModel) -> NavigationRoute { + NavigationRoute( + id: "activityFilters", + style: .sheet + ) { + ServerActivityFilterView(viewModel: viewModel) + } + } + + // MARK: - Server Tasks + + static func addServerTaskTrigger(observer: ServerTaskObserver) -> NavigationRoute { + NavigationRoute( + id: "addServerTaskTrigger", + style: .sheet + ) { + AddTaskTriggerView(observer: observer) + } + } + + // MARK: - Users + + static func addServerUser() -> NavigationRoute { + NavigationRoute( + id: "addServerUser", + style: .sheet + ) { + AddServerUserView() + } + } + + // MARK: - API Keys + + static let apiKeys = NavigationRoute( + id: "apiKeys" + ) { + APIKeysView() + } + + // MARK: - Devices + + static func deviceDetails(device: DeviceInfoDto, viewModel: DevicesViewModel) -> NavigationRoute { + NavigationRoute(id: "deviceDetails") { + DeviceDetailsView(device: device, viewModel: viewModel) + } + } + + static let devices = NavigationRoute( + id: "devices" + ) { + DevicesView() + } + + // MARK: - Server Tasks + + static func editServerTask(observer: ServerTaskObserver) -> NavigationRoute { + NavigationRoute(id: "editServerTask") { + EditServerTaskView(observer: observer) + } + } + + // MARK: - Users + + static func quickConnectAuthorize(user: UserDto) -> NavigationRoute { + NavigationRoute(id: "quickConnectAuthorize") { + QuickConnectAuthorizeView(user: user) + } + } + + static func resetUserPasswordAdmin(userID: String) -> NavigationRoute { + NavigationRoute( + id: "resetUserPasswordAdmin", + style: .sheet + ) { + ResetUserPasswordView(userID: userID, requiresCurrentPassword: false) + } + } + + // MARK: - Server Logs + + static let serverLogs = NavigationRoute( + id: "serverLogs" + ) { + ServerLogsView() + } + + // MARK: - Server Tasks + + static let tasks = NavigationRoute( + id: "tasks" + ) { + ServerTasksView() + } + + // MARK: - Users + + static func userAddAccessSchedule(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userAddAccessSchedule", + style: .sheet + ) { + AddAccessScheduleView(viewModel: viewModel) + } + } + + static func userAddAccessTag(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userAddAccessTag", + style: .sheet + ) { + AddServerUserAccessTagsView(viewModel: viewModel) + } + } + + static func userDetails(user: UserDto) -> NavigationRoute { + NavigationRoute(id: "userDetails") { + ServerUserDetailsView(user: user) + } + } + + static func userDeviceAccess(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userDeviceAccess", + style: .sheet + ) { + ServerUserDeviceAccessView(viewModel: viewModel) + } + } + + static func userEditAccessSchedules(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute(id: "userEditAccessSchedules") { + EditAccessScheduleView(viewModel: viewModel) + } + } + + static func userEditAccessTags(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute(id: "userEditAccessTags") { + EditServerUserAccessTagsView(viewModel: viewModel) + } + } + + static func userLiveTVAccess(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userLiveTVAccess", + style: .sheet + ) { + ServerUserLiveTVAccessView(viewModel: viewModel) + } + } + + static func userMediaAccess(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userMediaAccess", + style: .sheet + ) { + ServerUserMediaAccessView(viewModel: viewModel) + } + } + + static func userParentalRatings(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userParentalRatings", + style: .sheet + ) { + ServerUserParentalRatingView(viewModel: viewModel) + } + } + + static func userPermissions(viewModel: ServerUserAdminViewModel) -> NavigationRoute { + NavigationRoute( + id: "userPermissions", + style: .sheet + ) { + ServerUserPermissionsView(viewModel: viewModel) + } + } + + static let users = NavigationRoute( + id: "users" + ) { + ServerUsersView() + } +} +#endif diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+App.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+App.swift new file mode 100644 index 00000000..39b7a858 --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+App.swift @@ -0,0 +1,50 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension NavigationRoute { + + #if os(iOS) + static let aboutApp = NavigationRoute( + id: "about-app" + ) { + AboutAppView() + } + + static func appIconSelector(viewModel: SettingsViewModel) -> NavigationRoute { + NavigationRoute( + id: "app-icon-selector" + ) { + AppIconSelectorView(viewModel: viewModel) + } + } + #endif + + static let appSettings = NavigationRoute( + id: "app-settings", + style: .sheet + ) { + AppSettingsView() + } + + #if os(tvOS) + static let hourPicker = NavigationRoute( + id: "hour-picker", + style: .fullscreen + ) { + ZStack { + BlurView() + .ignoresSafeArea() + + HourMinutePicker() + } + } + #endif +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Download.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Download.swift new file mode 100644 index 00000000..fa996ea7 --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Download.swift @@ -0,0 +1,34 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension NavigationRoute { + + static let downloadList = NavigationRoute( + id: "downloadList" + ) { + #if os(iOS) + DownloadListView(viewModel: .init()) + #else + EmptyView() + #endif + } + + #if os(iOS) + static func downloadTask(downloadTask: DownloadTask) -> NavigationRoute { + NavigationRoute( + id: "downloadTask", + style: .sheet + ) { + DownloadTaskView(downloadTask: downloadTask) + } + } + #endif +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Item.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Item.swift new file mode 100644 index 00000000..88a8963c --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Item.swift @@ -0,0 +1,275 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension NavigationRoute { + + // MARK: - Item Editing + + #if os(iOS) + static func addGenre(viewModel: GenreEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "addGenre", + style: .sheet + ) { + AddItemElementView(viewModel: viewModel, type: .genres) + } + } + + static func addItemImage(viewModel: ItemImagesViewModel, imageType: ImageType) -> NavigationRoute { + NavigationRoute( + id: "addItemImage", + style: .push(.automatic) + ) { + AddItemImageView( + viewModel: viewModel, + imageType: imageType + ) + } + } + + static func addPeople(viewModel: PeopleEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "addPeople", + style: .sheet + ) { + AddItemElementView(viewModel: viewModel, type: .people) + } + } + + static func addStudio(viewModel: StudioEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "addStudio", + style: .sheet + ) { + AddItemElementView(viewModel: viewModel, type: .studios) + } + } + + static func addTag(viewModel: TagEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "addTag", + style: .sheet + ) { + AddItemElementView(viewModel: viewModel, type: .tags) + } + } + #endif + + static func castAndCrew(people: [BaseItemPerson], itemID: String?) -> NavigationRoute { + let id: String? = itemID == nil ? nil : "castAndCrew-\(itemID!)" + let viewModel = PagingLibraryViewModel( + title: L10n.castAndCrew, + id: id, + people + ) + + return NavigationRoute(id: "castAndCrew") { + PagingLibraryView(viewModel: viewModel) + } + } + + #if os(iOS) + static func cropItemImage(viewModel: ItemImagesViewModel, image: UIImage, type: ImageType) -> NavigationRoute { + NavigationRoute( + id: "crop-Image" + ) { + ItemPhotoCropView( + viewModel: viewModel, + image: image, + type: type + ) + } + } + + static func editGenres(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "editGenres") { + EditItemElementView( + viewModel: GenreEditorViewModel(item: item), + type: .genres, + route: { router, viewModel in + router.route(to: .addGenre(viewModel: viewModel as! GenreEditorViewModel)) + } + ) + } + } + + static func editSubtitles(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "editSubtitles") { + ItemSubtitlesView(item: item) + } + } + + static func uploadSubtitle(viewModel: SubtitleEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "uploadSubtitle", + style: .sheet + ) { + ItemSubtitleUploadView(viewModel: viewModel) + } + } + + static func editMetadata(item: BaseItemDto) -> NavigationRoute { + NavigationRoute( + id: "editMetadata", + style: .sheet + ) { + EditMetadataView(viewModel: ItemEditorViewModel(item: item)) + } + } + + static func editPeople(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "editPeople") { + EditItemElementView( + viewModel: PeopleEditorViewModel(item: item), + type: .people, + route: { router, viewModel in + router.route(to: .addPeople(viewModel: viewModel as! PeopleEditorViewModel)) + } + ) + } + } + + static func editStudios(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "editStudios") { + EditItemElementView( + viewModel: StudioEditorViewModel(item: item), + type: .studios, + route: { router, viewModel in + router.route(to: .addStudio(viewModel: viewModel as! StudioEditorViewModel)) + } + ) + } + } + + static func editTags(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "editTags") { + EditItemElementView( + viewModel: TagEditorViewModel(item: item), + type: .tags, + route: { router, viewModel in + router.route(to: .addTag(viewModel: viewModel as! TagEditorViewModel)) + } + ) + } + } + + static func identifyItem(item: BaseItemDto) -> NavigationRoute { + NavigationRoute(id: "identifyItem") { + IdentifyItemView(item: item) + } + } + + static func identifyItemResults( + viewModel: IdentifyItemViewModel, + result: RemoteSearchResult + ) -> NavigationRoute { + NavigationRoute( + id: "identifyItemResults", + style: .sheet + ) { + IdentifyItemView.RemoteSearchResultView( + viewModel: viewModel, + result: result + ) + } + } + #endif + + static func searchSubtitle(viewModel: SubtitleEditorViewModel) -> NavigationRoute { + NavigationRoute( + id: "searchSubtitle", + style: .sheet + ) { + ItemSubtitleSearchView(viewModel: viewModel) + } + } + + static func item(item: BaseItemDto) -> NavigationRoute { + NavigationRoute( + id: "item-\(item.id ?? "Unknown")", + withNamespace: { .push(.zoom(sourceID: "item", namespace: $0)) } + ) { + ItemView(item: item) + } + } + + #if os(iOS) + static func itemEditor(viewModel: ItemViewModel) -> NavigationRoute { + NavigationRoute( + id: "itemEditor", + style: .sheet + ) { + ItemEditorView(viewModel: viewModel) + } + } + + static func itemImageDetails(viewModel: ItemImagesViewModel, imageInfo: ImageInfo) -> NavigationRoute { + NavigationRoute( + id: "itemImageDetails", + style: .sheet + ) { + ItemImageDetailsView( + viewModel: viewModel, + imageInfo: imageInfo + ) + .isEditing(true) + } + } + + static func itemImages(viewModel: ItemImagesViewModel) -> NavigationRoute { + NavigationRoute( + id: "itemImages", + style: .sheet + ) { + ItemImagesView(viewModel: viewModel) + } + } + + static func itemImageSelector(viewModel: ItemImagesViewModel, imageType: ImageType) -> NavigationRoute { + NavigationRoute( + id: "itemImageSelector", + style: .sheet + ) { + ItemImagePicker( + viewModel: viewModel, + type: imageType + ) + } + } + + #endif + + static func itemOverview(item: BaseItemDto) -> NavigationRoute { + NavigationRoute( + id: "itemOverview", + style: .sheet + ) { + ItemOverviewView(item: item) + } + } + + #if os(iOS) + + static func itemSearchImageDetails(viewModel: ItemImagesViewModel, remoteImageInfo: RemoteImageInfo) -> NavigationRoute { + NavigationRoute( + id: "itemSearchImageDetails", + style: .sheet + ) { + ItemImageDetailsView( + viewModel: viewModel, + remoteImageInfo: remoteImageInfo + ) + .isEditing(false) + } + } + + #endif +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Library.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Library.swift new file mode 100644 index 00000000..4dc3142c --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Library.swift @@ -0,0 +1,35 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension NavigationRoute { + + #if os(iOS) + static func filter(type: ItemFilterType, viewModel: FilterViewModel) -> NavigationRoute { + NavigationRoute( + id: "filter", + style: .sheet + ) { + FilterView(viewModel: viewModel, type: type) + } + } + #endif + + static func library( + viewModel: PagingLibraryViewModel + ) -> NavigationRoute { + NavigationRoute( + id: "library-(\(viewModel.parent?.id ?? "Unparented"))", + withNamespace: { .push(.zoom(sourceID: "item", namespace: $0)) } + ) { + PagingLibraryView(viewModel: viewModel) + } + } +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Media.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Media.swift new file mode 100644 index 00000000..7f95f77a --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Media.swift @@ -0,0 +1,121 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import JellyfinAPI +import PreferencesView +import SwiftUI +import Transmission + +extension NavigationRoute { + + static let channels = NavigationRoute( + id: "channels" + ) { + ChannelLibraryView() + } + + static let liveTV = NavigationRoute( + id: "liveTV" + ) { + ProgramsView() + } + + static func mediaSourceInfo(source: MediaSourceInfo) -> NavigationRoute { + NavigationRoute( + id: "mediaSourceInfo", + style: .sheet + ) { + MediaSourceInfoView(source: source) + } + } + + #if os(iOS) + static func mediaStreamInfo(mediaStream: MediaStream) -> NavigationRoute { + NavigationRoute(id: "mediaStreamInfo") { + MediaStreamInfoView(mediaStream: mediaStream) + } + } + #endif + + @MainActor + static func videoPlayer( + item: BaseItemDto, + mediaSource: MediaSourceInfo? = nil, + queue: (any MediaPlayerQueue)? = nil + ) -> NavigationRoute { + let provider = MediaPlayerItemProvider(item: item) { item in + try await MediaPlayerItem.build(for: item, mediaSource: mediaSource) + } + return Self.videoPlayer(provider: provider, queue: queue) + } + + @MainActor + static func videoPlayer( + provider: MediaPlayerItemProvider, + queue: (any MediaPlayerQueue)? = nil + ) -> NavigationRoute { + let manager = MediaPlayerManager( + item: provider.item, + queue: queue, + mediaPlayerItemProvider: provider.function + ) + + return Self.videoPlayer(manager: manager) + } + + @MainActor + static func videoPlayer(manager: MediaPlayerManager) -> NavigationRoute { + + Container.shared.mediaPlayerManager.register { + manager + } + + Container.shared.mediaPlayerManagerPublisher() + .send(manager) + + return NavigationRoute( + id: "videoPlayer", + style: .fullscreen + ) { + VideoPlayerViewShim(manager: manager) + } + } +} + +// TODO: shim until native vs swiftfin player is replace with vlc vs av layers +// - when removed, ensure same behavior with safe area +// - may just need to make a VC wrapper to capture them + +struct VideoPlayerViewShim: View { + + @State + private var safeAreaInsets: EdgeInsets = .init() + + let manager: MediaPlayerManager + + var body: some View { + Group { + if Defaults[.VideoPlayer.videoPlayerType] == .swiftfin { + VideoPlayer() + } else { + NativeVideoPlayer() + } + } + .colorScheme(.dark) // use over `preferredColorScheme(.dark)` to not have destination change + .environment(\.safeAreaInsets, safeAreaInsets) + .supportedOrientations(.allButUpsideDown) + .ignoresSafeArea() + .persistentSystemOverlays(.hidden) + .toolbar(.hidden, for: .navigationBar) + .onSizeChanged { _, safeArea in + self.safeAreaInsets = safeArea.max(EdgeInsets.edgePadding) + } + } +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Settings.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Settings.swift new file mode 100644 index 00000000..c1178b53 --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+Settings.swift @@ -0,0 +1,205 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import PulseUI +import SwiftUI + +extension NavigationRoute { + + #if os(iOS) + static func actionButtonSelector(selectedButtonsBinding: Binding<[VideoPlayerActionButton]>) -> NavigationRoute { + NavigationRoute(id: "actionButtonSelector") { + ActionButtonSelectorView(selection: selectedButtonsBinding) + } + } + + static let adminDashboard = NavigationRoute( + id: "adminDashboard" + ) { + AdminDashboardView() + } + #endif + + static let createCustomDeviceProfile = NavigationRoute( + id: "createCustomDeviceProfile", + style: .sheet + ) { + CustomDeviceProfileSettingsView.EditCustomDeviceProfileView(profile: nil) + .navigationTitle(L10n.customProfile) + } + + static let customDeviceProfileSettings = NavigationRoute( + id: "customDeviceProfileSettings" + ) { + CustomDeviceProfileSettingsView() + } + + static let customizeViewsSettings = NavigationRoute( + id: "customizeViewsSettings" + ) { + CustomizeViewsSettings() + } + + #if DEBUG && !os(tvOS) + static let debugSettings = NavigationRoute( + id: "debugSettings" + ) { + DebugSettingsView() + } + #endif + + static func editCustomDeviceProfile(profile: Binding) -> NavigationRoute { + NavigationRoute( + id: "editCustomDeviceProfile", + style: .sheet + ) { + CustomDeviceProfileSettingsView.EditCustomDeviceProfileView(profile: profile) + .navigationTitle(L10n.customProfile) + } + } + + static func editCustomDeviceProfileAudio(selection: Binding<[AudioCodec]>) -> NavigationRoute { + NavigationRoute(id: "editCustomDeviceProfileAudio") { + OrderedSectionSelectorView(selection: selection, sources: AudioCodec.allCases) + .navigationTitle(L10n.audio) + } + } + + static func editCustomDeviceProfileContainer(selection: Binding<[MediaContainer]>) -> NavigationRoute { + NavigationRoute(id: "editCustomDeviceProfileContainer") { + OrderedSectionSelectorView(selection: selection, sources: MediaContainer.allCases) + .navigationTitle(L10n.containers) + } + } + + static func editCustomDeviceProfileVideo(selection: Binding<[VideoCodec]>) -> NavigationRoute { + NavigationRoute(id: "editCustomDeviceProfileVideo") { + OrderedSectionSelectorView(selection: selection, sources: VideoCodec.allCases) + .navigationTitle(L10n.video) + } + } + + static func editServer(server: ServerState, isEditing: Bool = false) -> NavigationRoute { + NavigationRoute(id: "editServer") { + EditServerView(server: server) + .isEditing(isEditing) + } + } + + static let experimentalSettings = NavigationRoute( + id: "experimentalSettings" + ) { + ExperimentalSettingsView() + } + + static func fontPicker(selection: Binding) -> NavigationRoute { + NavigationRoute(id: "fontPicker") { + FontPickerView(selection: selection) + } + } + + #if os(iOS) + static let gestureSettings = NavigationRoute( + id: "gestureSettings" + ) { + GestureSettingsView() + } + #endif + + static let indicatorSettings = NavigationRoute( + id: "indicatorSettings" + ) { + IndicatorSettingsView() + } + + static func itemFilterDrawerSelector(selection: Binding<[ItemFilterType]>) -> NavigationRoute { + NavigationRoute(id: "itemFilterDrawerSelector") { + OrderedSectionSelectorView(selection: selection, sources: ItemFilterType.allCases) + .navigationTitle(L10n.filters) + } + } + + static func itemOverviewView(item: BaseItemDto) -> NavigationRoute { + NavigationRoute( + id: "itemOverviewView", + style: .sheet + ) { + ItemOverviewView(item: item) + } + } + + static func itemViewAttributes(selection: Binding<[ItemViewAttribute]>) -> NavigationRoute { + NavigationRoute(id: "itemViewAttributes") { + OrderedSectionSelectorView(selection: selection, sources: ItemViewAttribute.allCases) + .navigationTitle(L10n.mediaAttributes.localizedCapitalized) + } + } + + static let localSecurity = NavigationRoute( + id: "localSecurity" + ) { + UserLocalSecurityView() + } + + static let log = NavigationRoute( + id: "log" + ) { + ConsoleView() + } + + #if os(iOS) + static let nativePlayerSettings = NavigationRoute( + id: "nativePlayerSettings" + ) { + NativeVideoPlayerSettingsView() + } + #endif + + static let playbackQualitySettings = NavigationRoute( + id: "playbackQualitySettings" + ) { + PlaybackQualitySettingsView() + } + + #if os(iOS) + static func resetUserPassword(userID: String) -> NavigationRoute { + NavigationRoute( + id: "resetUserPassword", + style: .sheet + ) { + ResetUserPasswordView(userID: userID, requiresCurrentPassword: true) + } + } + #endif + + static func serverConnection(server: ServerState) -> NavigationRoute { + NavigationRoute(id: "serverConnection") { + EditServerView(server: server) + } + } + + static let settings = NavigationRoute( + id: "settings", + style: .sheet + ) { + SettingsView() + } + + static func userProfile(viewModel: SettingsViewModel) -> NavigationRoute { + NavigationRoute(id: "userProfile") { + UserProfileSettingsView(viewModel: viewModel) + } + } + + static let videoPlayerSettings = NavigationRoute( + id: "videoPlayerSettings" + ) { + VideoPlayerSettingsView() + } +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+User.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+User.swift new file mode 100644 index 00000000..9b177779 --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute+User.swift @@ -0,0 +1,78 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension NavigationRoute { + + static let connectToServer = NavigationRoute( + id: "connectToServer", + style: .sheet + ) { + ConnectToServerView() + } + + static func quickConnect(quickConnect: QuickConnect) -> NavigationRoute { + NavigationRoute( + id: "quickConnectView", + style: .sheet + ) { + QuickConnectView(quickConnect: quickConnect) + } + } + + #if os(iOS) + static func userProfileImage(viewModel: UserProfileImageViewModel) -> NavigationRoute { + NavigationRoute( + id: "userProfileImage", + style: .sheet + ) { + UserProfileImagePickerView(viewModel: viewModel) + } + } + + static func userProfileImageCrop(viewModel: UserProfileImageViewModel, image: UIImage) -> NavigationRoute { + NavigationRoute( + id: "cropImage", + style: .sheet + ) { + UserProfileImageCropView( + viewModel: viewModel, + image: image + ) + } + } + + // TODO: rename to `localUserAccessPolicy` + static func userSecurity(pinHint: Binding, accessPolicy: Binding) -> NavigationRoute { + NavigationRoute( + id: "userSecurity", + style: .sheet + ) { + LocalUserAccessPolicyView( + pinHint: pinHint, + accessPolicy: accessPolicy + ) + } + } + #endif + + static func userSignIn(server: ServerState) -> NavigationRoute { + NavigationRoute( + id: "userSignIn", + style: .sheet + ) { + WithUserAuthentication { + WithQuickConnect { + UserSignInView(server: server) + } + } + } + } +} diff --git a/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute.swift b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute.swift new file mode 100644 index 00000000..511cdf4e --- /dev/null +++ b/Shared/Coordinators/Navigation/NavigationRoute/NavigationRoute.swift @@ -0,0 +1,87 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import SwiftUI + +struct NavigationRoute: Identifiable, Hashable { + + enum TransitionStyle: Hashable { + + // TODO: sheet and fullscreen with `NavigationTransition` + case push(NavigationTransition) + case sheet + case fullscreen + } + + enum TransitionType { + + case automatic(TransitionStyle) + case withNamespace((Namespace.ID) -> TransitionStyle) + } + + let id: String + + private let content: AnyView + var transitionType: TransitionType + var namespace: Namespace.ID? + + var transitionStyle: TransitionStyle { + switch transitionType { + case let .automatic(style): + return style + case let .withNamespace(builder): + if let namespace { + return builder(namespace) + } else { + return .push(.automatic) + } + } + } + + init( + id: String, + style: TransitionStyle = .push(.automatic), + @ViewBuilder content: () -> some View + ) { + self.id = id + self.transitionType = .automatic(style) + self.namespace = nil + self.content = AnyView(content()) + } + + init( + id: String, + withNamespace: @escaping (Namespace.ID) -> TransitionStyle, + @ViewBuilder content: () -> some View + ) { + self.id = id + self.transitionType = .withNamespace(withNamespace) + self.namespace = nil + self.content = AnyView(content()) + } + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + + static func == (lhs: Self, rhs: Self) -> Bool { + lhs.id == rhs.id + } + + @ViewBuilder + var destination: some View { + if case let .push(style) = transitionStyle { + content + .backport + .navigationTransition(style) + } else { + content + } + } +} diff --git a/Shared/Coordinators/Navigation/Router.swift b/Shared/Coordinators/Navigation/Router.swift new file mode 100644 index 00000000..3642ab13 --- /dev/null +++ b/Shared/Coordinators/Navigation/Router.swift @@ -0,0 +1,101 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension NavigationCoordinator { + + @MainActor + struct Router { + + let navigationCoordinator: NavigationCoordinator? + let rootCoordinator: RootCoordinator? + + func route( + to route: NavigationRoute, + transition: NavigationRoute.TransitionType? = nil, + in namespace: Namespace.ID? = nil + ) { + var route = route + route.namespace = namespace + route.transitionType = transition ?? route.transitionType + navigationCoordinator?.push(route) + } + + func root( + _ root: RootItem + ) { + rootCoordinator?.root(root) + } + } +} + +@propertyWrapper +struct Router: DynamicProperty { + + @MainActor + struct Wrapper { + let router: NavigationCoordinator.Router + let dismiss: DismissAction + + func route( + to route: NavigationRoute, + in namespace: Namespace.ID? = nil + ) { + router.route( + to: route, + transition: nil, + in: namespace + ) + } + + func route( + to route: NavigationRoute, + style: NavigationRoute.TransitionStyle, + in namespace: Namespace.ID? = nil + ) { + router.route( + to: route, + transition: .automatic(style), + in: namespace + ) + } + + func route( + to route: NavigationRoute, + withNamespace: @escaping (Namespace.ID) -> NavigationRoute.TransitionStyle, + in namespace: Namespace.ID? = nil + ) { + router.route( + to: route, + transition: .withNamespace(withNamespace), + in: namespace + ) + } + } + + // `.dismiss` causes changes on disappear + @Environment(\.self) + private var environment + + var wrappedValue: Wrapper { + .init( + router: environment.router, + dismiss: environment.dismiss + ) + } +} + +extension EnvironmentValues { + + @Entry + var router: NavigationCoordinator.Router = .init( + navigationCoordinator: nil, + rootCoordinator: nil + ) +} diff --git a/Shared/Coordinators/Navigation/WithTransitionReaderPublisher.swift b/Shared/Coordinators/Navigation/WithTransitionReaderPublisher.swift new file mode 100644 index 00000000..6fef4d83 --- /dev/null +++ b/Shared/Coordinators/Navigation/WithTransitionReaderPublisher.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +#if os(iOS) +import SwiftUI +import Transmission + +// TODO: sometimes causes hangs? + +struct WithTransitionReaderPublisher: View { + + @StateObject + private var publishedBox: PublishedBox> = .init(initialValue: .init()) + + let content: Content + + init(@ViewBuilder content: @escaping () -> Content) { + self.content = content() + } + + var body: some View { + content + .environment(\.transitionReader, publishedBox.value) + .background { + TransitionReader { proxy in + Color.clear + .onChange(of: proxy) { newValue in + publishedBox.value.send(newValue) + } + } + } + } +} + +@propertyWrapper +struct TransitionReaderObserver: DynamicProperty { + + @Environment(\.transitionReader) + private var publisher + + var wrappedValue: LegacyEventPublisher { + publisher + } +} + +extension EnvironmentValues { + + @Entry + var transitionReader: LegacyEventPublisher = .init() +} +#endif diff --git a/Shared/Coordinators/Root/RootCoordinator.swift b/Shared/Coordinators/Root/RootCoordinator.swift new file mode 100644 index 00000000..b7ba6eb5 --- /dev/null +++ b/Shared/Coordinators/Root/RootCoordinator.swift @@ -0,0 +1,86 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Logging +import SwiftUI + +@MainActor +final class RootCoordinator: ObservableObject { + + @Published + var root: RootItem = .appLoading + + private let logger = Logger.swiftfin() + + init() { + Task { + do { + try await SwiftfinStore.setupDataStack() + + if Container.shared.currentUserSession() != nil, !Defaults[.signOutOnClose] { + #if os(tvOS) + await MainActor.run { + root(.mainTab) + } + #else + await MainActor.run { + root(.serverCheck) + } + #endif + } else { + await MainActor.run { + root(.selectUser) + } + } + + } catch { + await MainActor.run { + Notifications[.didFailMigration].post() + } + } + } + + // Notification setup for state + Notifications[.didSignIn].subscribe(self, selector: #selector(didSignIn)) + Notifications[.didSignOut].subscribe(self, selector: #selector(didSignOut)) + Notifications[.didChangeCurrentServerURL].subscribe(self, selector: #selector(didChangeCurrentServerURL(_:))) + } + + func root(_ newRoot: RootItem) { + root = newRoot + } + + @objc + private func didSignIn() { + logger.info("Signed in") + + #if os(tvOS) + root(.mainTab) + #else + root(.serverCheck) + #endif + } + + @objc + private func didSignOut() { + logger.info("Signed out") + + root(.selectUser) + } + + @objc + func didChangeCurrentServerURL(_ notification: Notification) { + + guard Container.shared.currentUserSession() != nil else { return } + + Container.shared.currentUserSession.reset() + Notifications[.didSignIn].post() + } +} diff --git a/Shared/Coordinators/Root/RootItem.swift b/Shared/Coordinators/Root/RootItem.swift new file mode 100644 index 00000000..11939a38 --- /dev/null +++ b/Shared/Coordinators/Root/RootItem.swift @@ -0,0 +1,48 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +@MainActor +struct RootItem: Identifiable { + + var id: String + let content: AnyView + + init( + id: String, + @ViewBuilder content: () -> some View + ) { + self.id = id + self.content = AnyView(content()) + } + + static let appLoading = RootItem(id: "appLoading") { + NavigationInjectionView(coordinator: .init()) { + AppLoadingView() + } + } + + static let mainTab = RootItem(id: "mainTab") { + MainTabView() + } + + static let selectUser = RootItem(id: "selectUser") { + NavigationInjectionView(coordinator: .init()) { + SelectUserView() + } + } + + #if os(iOS) + static let serverCheck = RootItem(id: "serverCheck") { + NavigationInjectionView(coordinator: .init()) { + ServerCheckView() + } + } + #endif +} diff --git a/Shared/Coordinators/Root/RootView.swift b/Shared/Coordinators/Root/RootView.swift new file mode 100644 index 00000000..b1434b06 --- /dev/null +++ b/Shared/Coordinators/Root/RootView.swift @@ -0,0 +1,48 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI +import Transmission + +// Status bar presentation needs to happen at this level +struct RootView: View { + + @State + private var isStatusBarHidden: Bool = false + + @StateObject + private var rootCoordinator: RootCoordinator = .init() + + var body: some View { + ZStack { + if rootCoordinator.root.id == RootItem.appLoading.id { + RootItem.appLoading.content + } + + if rootCoordinator.root.id == RootItem.mainTab.id { + RootItem.mainTab.content + } + + if rootCoordinator.root.id == RootItem.selectUser.id { + RootItem.selectUser.content + } + + #if os(iOS) + if rootCoordinator.root.id == RootItem.serverCheck.id { + RootItem.serverCheck.content + } + #endif + } + .animation(.linear(duration: 0.1), value: rootCoordinator.root.id) + .environmentObject(rootCoordinator) + .prefersStatusBarHidden(isStatusBarHidden) + .onPreferenceChange(IsStatusBarHiddenKey.self) { newValue in + isStatusBarHidden = newValue + } + } +} diff --git a/Shared/Coordinators/SearchCoordinator 2.swift b/Shared/Coordinators/SearchCoordinator 2.swift new file mode 100644 index 00000000..3746781f --- /dev/null +++ b/Shared/Coordinators/SearchCoordinator 2.swift @@ -0,0 +1,52 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class SearchCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \SearchCoordinator.start) + + @Root + var start = makeStart + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + @Route(.modal) + var filter = makeFilter + #endif + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + #if !os(tvOS) + func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator { + NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) + } + #endif + + @ViewBuilder + func makeStart() -> some View { + SearchView() + } +} diff --git a/Shared/Coordinators/SearchCoordinator 3.swift b/Shared/Coordinators/SearchCoordinator 3.swift new file mode 100644 index 00000000..3746781f --- /dev/null +++ b/Shared/Coordinators/SearchCoordinator 3.swift @@ -0,0 +1,52 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class SearchCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \SearchCoordinator.start) + + @Root + var start = makeStart + #if os(tvOS) + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + #else + @Route(.push) + var item = makeItem + @Route(.push) + var library = makeLibrary + @Route(.modal) + var filter = makeFilter + #endif + + func makeItem(item: BaseItemDto) -> ItemCoordinator { + ItemCoordinator(item: item) + } + + func makeLibrary(viewModel: PagingLibraryViewModel) -> LibraryCoordinator { + LibraryCoordinator(viewModel: viewModel) + } + + #if !os(tvOS) + func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator { + NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) + } + #endif + + @ViewBuilder + func makeStart() -> some View { + SearchView() + } +} diff --git a/Shared/Coordinators/SelectUserCoordinator 2.swift b/Shared/Coordinators/SelectUserCoordinator 2.swift new file mode 100644 index 00000000..cf3ab555 --- /dev/null +++ b/Shared/Coordinators/SelectUserCoordinator 2.swift @@ -0,0 +1,59 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Stinsen +import SwiftUI + +final class SelectUserCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \SelectUserCoordinator.start) + + @Root + var start = makeStart + + @Route(.push) + var advancedSettings = makeAdvancedSettings + @Route(.push) + var connectToServer = makeConnectToServer + @Route(.push) + var editServer = makeEditServer + @Route(.push) + var userSignIn = makeUserSignIn + + func makeAdvancedSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator(AppSettingsCoordinator()) + } + + func makeConnectToServer() -> NavigationViewCoordinator { + NavigationViewCoordinator { + ConnectToServerView() + } + } + + func makeEditServer(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator { + EditServerView(server: server) + .environment(\.isEditing, true) + #if os(iOS) + .navigationBarCloseButton { + self.popLast() + } + #endif + } + } + + func makeUserSignIn(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator(UserSignInCoordinator(server: server)) + } + + @ViewBuilder + func makeStart() -> some View { + SelectUserView() + } +} diff --git a/Shared/Coordinators/SelectUserCoordinator 3.swift b/Shared/Coordinators/SelectUserCoordinator 3.swift new file mode 100644 index 00000000..cf3ab555 --- /dev/null +++ b/Shared/Coordinators/SelectUserCoordinator 3.swift @@ -0,0 +1,59 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Stinsen +import SwiftUI + +final class SelectUserCoordinator: NavigationCoordinatable { + + let stack = NavigationStack(initial: \SelectUserCoordinator.start) + + @Root + var start = makeStart + + @Route(.push) + var advancedSettings = makeAdvancedSettings + @Route(.push) + var connectToServer = makeConnectToServer + @Route(.push) + var editServer = makeEditServer + @Route(.push) + var userSignIn = makeUserSignIn + + func makeAdvancedSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator(AppSettingsCoordinator()) + } + + func makeConnectToServer() -> NavigationViewCoordinator { + NavigationViewCoordinator { + ConnectToServerView() + } + } + + func makeEditServer(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator { + EditServerView(server: server) + .environment(\.isEditing, true) + #if os(iOS) + .navigationBarCloseButton { + self.popLast() + } + #endif + } + } + + func makeUserSignIn(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator(UserSignInCoordinator(server: server)) + } + + @ViewBuilder + func makeStart() -> some View { + SelectUserView() + } +} diff --git a/Shared/Coordinators/SelectUserCoordinator.swift b/Shared/Coordinators/SelectUserCoordinator.swift index cf3ab555..79ce7a5a 100644 --- a/Shared/Coordinators/SelectUserCoordinator.swift +++ b/Shared/Coordinators/SelectUserCoordinator.swift @@ -22,6 +22,10 @@ final class SelectUserCoordinator: NavigationCoordinatable { @Route(.push) var connectToServer = makeConnectToServer @Route(.push) + var connectToXtream = makeConnectToXtream + @Route(.push) + var dualServerConnect = makeDualServerConnect + @Route(.push) var editServer = makeEditServer @Route(.push) var userSignIn = makeUserSignIn @@ -30,10 +34,19 @@ final class SelectUserCoordinator: NavigationCoordinatable { NavigationViewCoordinator(AppSettingsCoordinator()) } - func makeConnectToServer() -> NavigationViewCoordinator { - NavigationViewCoordinator { - ConnectToServerView() - } + @ViewBuilder + func makeConnectToServer() -> some View { + ConnectToServerView() + } + + @ViewBuilder + func makeConnectToXtream() -> some View { + ConnectToXtreamView() + } + + @ViewBuilder + func makeDualServerConnect() -> some View { + DualServerConnectView() } func makeEditServer(server: ServerState) -> NavigationViewCoordinator { diff --git a/Shared/Coordinators/SettingsCoordinator 2.swift b/Shared/Coordinators/SettingsCoordinator 2.swift new file mode 100644 index 00000000..acd67e48 --- /dev/null +++ b/Shared/Coordinators/SettingsCoordinator 2.swift @@ -0,0 +1,263 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import PulseUI +import Stinsen +import SwiftUI + +final class SettingsCoordinator: NavigationCoordinatable { + let stack = NavigationStack(initial: \SettingsCoordinator.start) + + @Root + var start = makeStart + + #if os(iOS) + @Route(.push) + var log = makeLog + @Route(.push) + var nativePlayerSettings = makeNativePlayerSettings + @Route(.push) + var playbackQualitySettings = makePlaybackQualitySettings + @Route(.push) + var quickConnect = makeQuickConnectAuthorize + @Route(.push) + var resetUserPassword = makeResetUserPassword + @Route(.push) + var localSecurity = makeLocalSecurity + @Route(.push) + var photoPicker = makePhotoPicker + @Route(.push) + var userProfile = makeUserProfileSettings + + @Route(.push) + var customizeViewsSettings = makeCustomizeViewsSettings + @Route(.push) + var experimentalSettings = makeExperimentalSettings + @Route(.push) + var itemFilterDrawerSelector = makeItemFilterDrawerSelector + @Route(.push) + var indicatorSettings = makeIndicatorSettings + @Route(.push) + var itemViewAttributes = makeItemViewAttributes + @Route(.push) + var serverConnection = makeServerConnection + @Route(.push) + var videoPlayerSettings = makeVideoPlayerSettings + @Route(.push) + var customDeviceProfileSettings = makeCustomDeviceProfileSettings + @Route(.push) + var itemOverviewView = makeItemOverviewView + + @Route(.push) + var editCustomDeviceProfile = makeEditCustomDeviceProfile + @Route(.push) + var createCustomDeviceProfile = makeCreateCustomDeviceProfile + + @Route(.push) + var adminDashboard = makeAdminDashboard + + #if DEBUG + @Route(.push) + var debugSettings = makeDebugSettings + #endif + #endif + + #if os(tvOS) + @Route(.push) + var customizeViewsSettings = makeCustomizeViewsSettings + @Route(.push) + var experimentalSettings = makeExperimentalSettings + @Route(.push) + var log = makeLog + @Route(.push) + var serverDetail = makeServerDetail + @Route(.push) + var videoPlayerSettings = makeVideoPlayerSettings + @Route(.push) + var playbackQualitySettings = makePlaybackQualitySettings + @Route(.push) + var userProfile = makeUserProfileSettings + #endif + + #if os(iOS) + @ViewBuilder + func makeNativePlayerSettings() -> some View { + NativeVideoPlayerSettingsView() + } + + @ViewBuilder + func makePlaybackQualitySettings() -> some View { + PlaybackQualitySettingsView() + } + + @ViewBuilder + func makeCustomDeviceProfileSettings() -> some View { + CustomDeviceProfileSettingsView() + } + + func makeEditCustomDeviceProfile(profile: Binding) + -> NavigationViewCoordinator + { + NavigationViewCoordinator(EditCustomDeviceProfileCoordinator(profile: profile)) + } + + func makeCreateCustomDeviceProfile() -> NavigationViewCoordinator { + NavigationViewCoordinator(EditCustomDeviceProfileCoordinator()) + } + + @ViewBuilder + func makeQuickConnectAuthorize(user: UserDto) -> some View { + QuickConnectAuthorizeView(user: user) + } + + func makeResetUserPassword(userID: String) -> NavigationViewCoordinator { + NavigationViewCoordinator { + ResetUserPasswordView(userID: userID, requiresCurrentPassword: true) + } + } + + @ViewBuilder + func makeLocalSecurity() -> some View { + UserLocalSecurityView() + } + + func makePhotoPicker(viewModel: UserProfileImageViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator(UserProfileImageCoordinator(viewModel: viewModel)) + } + + @ViewBuilder + func makeUserProfileSettings(viewModel: SettingsViewModel) -> some View { + UserProfileSettingsView(viewModel: viewModel) + } + + @ViewBuilder + func makeCustomizeViewsSettings() -> some View { + CustomizeViewsSettings() + } + + @ViewBuilder + func makeExperimentalSettings() -> some View { + ExperimentalSettingsView() + } + + @ViewBuilder + func makeIndicatorSettings() -> some View { + IndicatorSettingsView() + } + + @ViewBuilder + func makeItemViewAttributes(selection: Binding<[ItemViewAttribute]>) -> some View { + OrderedSectionSelectorView(selection: selection, sources: ItemViewAttribute.allCases) + .navigationTitle(L10n.mediaAttributes.localizedCapitalized) + } + + @ViewBuilder + func makeServerConnection(server: ServerState) -> some View { + EditServerView(server: server) + } + + func makeItemOverviewView(item: BaseItemDto) -> NavigationViewCoordinator { + NavigationViewCoordinator { + ItemOverviewView(item: item) + } + } + + func makeItemFilterDrawerSelector(selection: Binding<[ItemFilterType]>) -> some View { + OrderedSectionSelectorView(selection: selection, sources: ItemFilterType.allCases) + .navigationTitle(L10n.filters) + } + + func makeVideoPlayerSettings() -> VideoPlayerSettingsCoordinator { + VideoPlayerSettingsCoordinator() + } + + @ViewBuilder + func makeAdminDashboard() -> some View { + AdminDashboardCoordinator().view() + } + + #if DEBUG + @ViewBuilder + func makeDebugSettings() -> some View { + DebugSettingsView() + } + #endif + #endif + + #if os(tvOS) + + // MARK: - User Profile View + + func makeUserProfileSettings(viewModel: SettingsViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator( + UserProfileSettingsCoordinator(viewModel: viewModel) + ) + } + + // MARK: - Customize Settings View + + func makeCustomizeViewsSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + CustomizeSettingsCoordinator() + ) + } + + // MARK: - Experimental Settings View + + func makeExperimentalSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + BasicNavigationViewCoordinator { + ExperimentalSettingsView() + } + ) + } + + // MARK: - Poster Indicator Settings View + + func makeIndicatorSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator { + IndicatorSettingsView() + } + } + + // MARK: - Server Settings View + + func makeServerDetail(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator { + EditServerView(server: server) + } + } + + // MARK: - Video Player Settings View + + func makeVideoPlayerSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + VideoPlayerSettingsCoordinator() + ) + } + + // MARK: - Playback Settings View + + func makePlaybackQualitySettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + PlaybackQualitySettingsCoordinator() + ) + } + #endif + + @ViewBuilder + func makeLog() -> some View { + ConsoleView() + } + + @ViewBuilder + func makeStart() -> some View { + SettingsView() + } +} diff --git a/Shared/Coordinators/SettingsCoordinator 3.swift b/Shared/Coordinators/SettingsCoordinator 3.swift new file mode 100644 index 00000000..acd67e48 --- /dev/null +++ b/Shared/Coordinators/SettingsCoordinator 3.swift @@ -0,0 +1,263 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import PulseUI +import Stinsen +import SwiftUI + +final class SettingsCoordinator: NavigationCoordinatable { + let stack = NavigationStack(initial: \SettingsCoordinator.start) + + @Root + var start = makeStart + + #if os(iOS) + @Route(.push) + var log = makeLog + @Route(.push) + var nativePlayerSettings = makeNativePlayerSettings + @Route(.push) + var playbackQualitySettings = makePlaybackQualitySettings + @Route(.push) + var quickConnect = makeQuickConnectAuthorize + @Route(.push) + var resetUserPassword = makeResetUserPassword + @Route(.push) + var localSecurity = makeLocalSecurity + @Route(.push) + var photoPicker = makePhotoPicker + @Route(.push) + var userProfile = makeUserProfileSettings + + @Route(.push) + var customizeViewsSettings = makeCustomizeViewsSettings + @Route(.push) + var experimentalSettings = makeExperimentalSettings + @Route(.push) + var itemFilterDrawerSelector = makeItemFilterDrawerSelector + @Route(.push) + var indicatorSettings = makeIndicatorSettings + @Route(.push) + var itemViewAttributes = makeItemViewAttributes + @Route(.push) + var serverConnection = makeServerConnection + @Route(.push) + var videoPlayerSettings = makeVideoPlayerSettings + @Route(.push) + var customDeviceProfileSettings = makeCustomDeviceProfileSettings + @Route(.push) + var itemOverviewView = makeItemOverviewView + + @Route(.push) + var editCustomDeviceProfile = makeEditCustomDeviceProfile + @Route(.push) + var createCustomDeviceProfile = makeCreateCustomDeviceProfile + + @Route(.push) + var adminDashboard = makeAdminDashboard + + #if DEBUG + @Route(.push) + var debugSettings = makeDebugSettings + #endif + #endif + + #if os(tvOS) + @Route(.push) + var customizeViewsSettings = makeCustomizeViewsSettings + @Route(.push) + var experimentalSettings = makeExperimentalSettings + @Route(.push) + var log = makeLog + @Route(.push) + var serverDetail = makeServerDetail + @Route(.push) + var videoPlayerSettings = makeVideoPlayerSettings + @Route(.push) + var playbackQualitySettings = makePlaybackQualitySettings + @Route(.push) + var userProfile = makeUserProfileSettings + #endif + + #if os(iOS) + @ViewBuilder + func makeNativePlayerSettings() -> some View { + NativeVideoPlayerSettingsView() + } + + @ViewBuilder + func makePlaybackQualitySettings() -> some View { + PlaybackQualitySettingsView() + } + + @ViewBuilder + func makeCustomDeviceProfileSettings() -> some View { + CustomDeviceProfileSettingsView() + } + + func makeEditCustomDeviceProfile(profile: Binding) + -> NavigationViewCoordinator + { + NavigationViewCoordinator(EditCustomDeviceProfileCoordinator(profile: profile)) + } + + func makeCreateCustomDeviceProfile() -> NavigationViewCoordinator { + NavigationViewCoordinator(EditCustomDeviceProfileCoordinator()) + } + + @ViewBuilder + func makeQuickConnectAuthorize(user: UserDto) -> some View { + QuickConnectAuthorizeView(user: user) + } + + func makeResetUserPassword(userID: String) -> NavigationViewCoordinator { + NavigationViewCoordinator { + ResetUserPasswordView(userID: userID, requiresCurrentPassword: true) + } + } + + @ViewBuilder + func makeLocalSecurity() -> some View { + UserLocalSecurityView() + } + + func makePhotoPicker(viewModel: UserProfileImageViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator(UserProfileImageCoordinator(viewModel: viewModel)) + } + + @ViewBuilder + func makeUserProfileSettings(viewModel: SettingsViewModel) -> some View { + UserProfileSettingsView(viewModel: viewModel) + } + + @ViewBuilder + func makeCustomizeViewsSettings() -> some View { + CustomizeViewsSettings() + } + + @ViewBuilder + func makeExperimentalSettings() -> some View { + ExperimentalSettingsView() + } + + @ViewBuilder + func makeIndicatorSettings() -> some View { + IndicatorSettingsView() + } + + @ViewBuilder + func makeItemViewAttributes(selection: Binding<[ItemViewAttribute]>) -> some View { + OrderedSectionSelectorView(selection: selection, sources: ItemViewAttribute.allCases) + .navigationTitle(L10n.mediaAttributes.localizedCapitalized) + } + + @ViewBuilder + func makeServerConnection(server: ServerState) -> some View { + EditServerView(server: server) + } + + func makeItemOverviewView(item: BaseItemDto) -> NavigationViewCoordinator { + NavigationViewCoordinator { + ItemOverviewView(item: item) + } + } + + func makeItemFilterDrawerSelector(selection: Binding<[ItemFilterType]>) -> some View { + OrderedSectionSelectorView(selection: selection, sources: ItemFilterType.allCases) + .navigationTitle(L10n.filters) + } + + func makeVideoPlayerSettings() -> VideoPlayerSettingsCoordinator { + VideoPlayerSettingsCoordinator() + } + + @ViewBuilder + func makeAdminDashboard() -> some View { + AdminDashboardCoordinator().view() + } + + #if DEBUG + @ViewBuilder + func makeDebugSettings() -> some View { + DebugSettingsView() + } + #endif + #endif + + #if os(tvOS) + + // MARK: - User Profile View + + func makeUserProfileSettings(viewModel: SettingsViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator( + UserProfileSettingsCoordinator(viewModel: viewModel) + ) + } + + // MARK: - Customize Settings View + + func makeCustomizeViewsSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + CustomizeSettingsCoordinator() + ) + } + + // MARK: - Experimental Settings View + + func makeExperimentalSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + BasicNavigationViewCoordinator { + ExperimentalSettingsView() + } + ) + } + + // MARK: - Poster Indicator Settings View + + func makeIndicatorSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator { + IndicatorSettingsView() + } + } + + // MARK: - Server Settings View + + func makeServerDetail(server: ServerState) -> NavigationViewCoordinator { + NavigationViewCoordinator { + EditServerView(server: server) + } + } + + // MARK: - Video Player Settings View + + func makeVideoPlayerSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + VideoPlayerSettingsCoordinator() + ) + } + + // MARK: - Playback Settings View + + func makePlaybackQualitySettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + PlaybackQualitySettingsCoordinator() + ) + } + #endif + + @ViewBuilder + func makeLog() -> some View { + ConsoleView() + } + + @ViewBuilder + func makeStart() -> some View { + SettingsView() + } +} diff --git a/Shared/Coordinators/Tabs/MainTabView.swift b/Shared/Coordinators/Tabs/MainTabView.swift new file mode 100644 index 00000000..78b46250 --- /dev/null +++ b/Shared/Coordinators/Tabs/MainTabView.swift @@ -0,0 +1,69 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import SwiftUI + +// TODO: move popup to router +// - or, make tab view environment object + +// TODO: fix weird tvOS icon rendering +struct MainTabView: View { + + #if os(iOS) + @StateObject + private var tabCoordinator = TabCoordinator { + TabItem.home + TabItem.search + TabItem.media + } + #else + @StateObject + private var tabCoordinator = TabCoordinator { + TabItem.home + TabItem.library( + title: L10n.tvShows, + systemName: "tv", + filters: .init(itemTypes: [.series]) + ) + TabItem.library( + title: L10n.movies, + systemName: "film", + filters: .init(itemTypes: [.movie]) + ) + TabItem.search + TabItem.media + TabItem.settings + } + #endif + + @ViewBuilder + var body: some View { + TabView(selection: $tabCoordinator.selectedTabID) { + ForEach(tabCoordinator.tabs, id: \.item.id) { tab in + NavigationInjectionView( + coordinator: tab.coordinator + ) { + tab.item.content + } + .environmentObject(tabCoordinator) + .environment(\.tabItemSelected, tab.publisher) + .tabItem { + Label( + tab.item.title, + systemImage: tab.item.systemImage + ) + .labelStyle(tab.item.labelStyle) + .symbolRenderingMode(.monochrome) + .eraseToAnyView() + } + .tag(tab.item.id) + } + } + } +} diff --git a/Shared/Coordinators/Tabs/TabCoordinator.swift b/Shared/Coordinators/Tabs/TabCoordinator.swift new file mode 100644 index 00000000..ef2038ae --- /dev/null +++ b/Shared/Coordinators/Tabs/TabCoordinator.swift @@ -0,0 +1,50 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +@MainActor +final class TabCoordinator: ObservableObject { + + struct SelectedEvent { + let isRoot: Bool + let isRepeat: Bool + } + + typealias TabData = ( + item: TabItem, + coordinator: NavigationCoordinator, + publisher: TabItemSelectedPublisher + ) + + @Published + var selectedTabID: String! = nil { + didSet { + guard let tab = tabs.first(property: \.item.id, equalTo: selectedTabID) else { return } + + tab.publisher.send( + .init( + isRoot: tab.coordinator.path.isEmpty, + isRepeat: oldValue == selectedTabID + ) + ) + } + } + + @Published + var tabs: [TabData] = [] + + init(@ArrayBuilder tabs: () -> [TabItem]) { + let tabs = tabs() + self.tabs = tabs.map { tab in + let coordinator = NavigationCoordinator() + let event = TabItemSelectedPublisher() + return (tab, coordinator, event) + } + } +} diff --git a/Shared/Coordinators/Tabs/TabItem.swift b/Shared/Coordinators/Tabs/TabItem.swift new file mode 100644 index 00000000..9ed9e38e --- /dev/null +++ b/Shared/Coordinators/Tabs/TabItem.swift @@ -0,0 +1,95 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: selected icon +struct TabItem: Identifiable, Hashable { + + let content: AnyView + let id: String + let title: String + let systemImage: String + let labelStyle: any LabelStyle + + init( + id: String, + title: String, + systemImage: String, + labelStyle: some LabelStyle = .titleAndIcon, + @ViewBuilder content: () -> some View + ) { + self.content = AnyView(content()) + self.id = id + self.title = title + self.systemImage = systemImage + self.labelStyle = labelStyle + } + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + + static func == (lhs: Self, rhs: Self) -> Bool { + lhs.id == rhs.id + } +} + +extension TabItem { + + static let home = TabItem( + id: "home", + title: L10n.home, + systemImage: "house" + ) { + HomeView() + } + + static func library( + title: String, + systemName: String, + filters: ItemFilterCollection + ) -> TabItem { + TabItem( + id: "library-\(UUID().uuidString)", + title: title, + systemImage: systemName + ) { + let viewModel = ItemLibraryViewModel( + filters: filters + ) + + PagingLibraryView(viewModel: viewModel) + } + } + + static let media = TabItem( + id: "media", + title: L10n.media, + systemImage: "rectangle.stack.fill" + ) { + MediaView() + } + + static let search = TabItem( + id: "search", + title: L10n.search, + systemImage: "magnifyingglass" + ) { + SearchView() + } + + static let settings = TabItem( + id: "settings", + title: L10n.settings, + systemImage: "gearshape", + labelStyle: .iconOnly + ) { + SettingsView() + } +} diff --git a/Shared/Coordinators/Tabs/TabItemSelectedPublisher.swift b/Shared/Coordinators/Tabs/TabItemSelectedPublisher.swift new file mode 100644 index 00000000..c28bf5db --- /dev/null +++ b/Shared/Coordinators/Tabs/TabItemSelectedPublisher.swift @@ -0,0 +1,31 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension TabCoordinator { + + typealias TabItemSelectedPublisher = LegacyEventPublisher +} + +@propertyWrapper +struct TabItemSelected: DynamicProperty { + + @Environment(\.tabItemSelected) + private var publisher + + var wrappedValue: TabCoordinator.TabItemSelectedPublisher { + publisher + } +} + +extension EnvironmentValues { + + @Entry + var tabItemSelected: TabCoordinator.TabItemSelectedPublisher = .init() +} diff --git a/Shared/Coordinators/UserSignInCoordinator 2.swift b/Shared/Coordinators/UserSignInCoordinator 2.swift new file mode 100644 index 00000000..a5b978cb --- /dev/null +++ b/Shared/Coordinators/UserSignInCoordinator 2.swift @@ -0,0 +1,61 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class UserSignInCoordinator: NavigationCoordinatable { + + struct SecurityParameters { + let pinHint: Binding + let accessPolicy: Binding + } + + let stack = NavigationStack(initial: \UserSignInCoordinator.start) + + @Root + var start = makeStart + + @Route(.push) + var quickConnect = makeQuickConnect + + #if os(iOS) + @Route(.push) + var security = makeSecurity + #endif + + private let server: ServerState + + init(server: ServerState) { + self.server = server + } + + func makeQuickConnect(quickConnect: QuickConnect) -> NavigationViewCoordinator { + NavigationViewCoordinator { + QuickConnectView(quickConnect: quickConnect) + } + } + + #if os(iOS) + func makeSecurity(parameters: SecurityParameters) -> NavigationViewCoordinator { + NavigationViewCoordinator { + UserSignInView.SecurityView( + pinHint: parameters.pinHint, + accessPolicy: parameters.accessPolicy + ) + } + } + #endif + + @ViewBuilder + func makeStart() -> some View { + UserSignInView(server: server) + } +} diff --git a/Shared/Coordinators/UserSignInCoordinator 3.swift b/Shared/Coordinators/UserSignInCoordinator 3.swift new file mode 100644 index 00000000..a5b978cb --- /dev/null +++ b/Shared/Coordinators/UserSignInCoordinator 3.swift @@ -0,0 +1,61 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Stinsen +import SwiftUI + +final class UserSignInCoordinator: NavigationCoordinatable { + + struct SecurityParameters { + let pinHint: Binding + let accessPolicy: Binding + } + + let stack = NavigationStack(initial: \UserSignInCoordinator.start) + + @Root + var start = makeStart + + @Route(.push) + var quickConnect = makeQuickConnect + + #if os(iOS) + @Route(.push) + var security = makeSecurity + #endif + + private let server: ServerState + + init(server: ServerState) { + self.server = server + } + + func makeQuickConnect(quickConnect: QuickConnect) -> NavigationViewCoordinator { + NavigationViewCoordinator { + QuickConnectView(quickConnect: quickConnect) + } + } + + #if os(iOS) + func makeSecurity(parameters: SecurityParameters) -> NavigationViewCoordinator { + NavigationViewCoordinator { + UserSignInView.SecurityView( + pinHint: parameters.pinHint, + accessPolicy: parameters.accessPolicy + ) + } + } + #endif + + @ViewBuilder + func makeStart() -> some View { + UserSignInView(server: server) + } +} diff --git a/Shared/Extensions/BlurHash.swift b/Shared/Extensions/BlurHash.swift new file mode 100644 index 00000000..7848f087 --- /dev/null +++ b/Shared/Extensions/BlurHash.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import BlurHashKit +import SwiftUI + +extension BlurHash { + + var averageLinearColor: Color { + let color = averageLinearRGB + return Color( + red: Double(color.0), + green: Double(color.1), + blue: Double(color.2) + ) + } +} diff --git a/Shared/Extensions/BoxedPublished.swift b/Shared/Extensions/BoxedPublished.swift new file mode 100644 index 00000000..b10c26b7 --- /dev/null +++ b/Shared/Extensions/BoxedPublished.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +@propertyWrapper +struct BoxedPublished: DynamicProperty { + + @StateObject + var storage: PublishedBox + + init(wrappedValue: Value) { + self._storage = StateObject(wrappedValue: PublishedBox(initialValue: wrappedValue)) + } + + var wrappedValue: Value { + get { storage.value } + nonmutating set { storage.value = newValue } + } + + var projectedValue: Published.Publisher { + storage.$value + } + + var box: PublishedBox { + storage + } +} diff --git a/Shared/Extensions/Duration.swift b/Shared/Extensions/Duration.swift new file mode 100644 index 00000000..d2db0cb0 --- /dev/null +++ b/Shared/Extensions/Duration.swift @@ -0,0 +1,32 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +@inlinable +func abs(_ d: Duration) -> Duration { + d < .zero ? (.zero - d) : d +} + +extension Duration { + + /// Represent Jellyfin ticks as a Duration + static func ticks(_ ticks: Int) -> Duration { + Duration.microseconds(Int64(ticks) / 10) + } + + var microseconds: Int64 { + (components.attoseconds / 1_000_000_000_000) + components.seconds * 1_000_000 + } + + var seconds: Double { + Double(components.seconds) + Double(components.attoseconds) * 1e-18 + } + + var ticks: Int { + Int(microseconds * 10) + } +} diff --git a/Shared/Extensions/FocusedValues.swift b/Shared/Extensions/FocusedValues.swift new file mode 100644 index 00000000..92d42d12 --- /dev/null +++ b/Shared/Extensions/FocusedValues.swift @@ -0,0 +1,15 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension FocusedValues { + + @Entry + var focusedPoster: AnyPoster? +} diff --git a/Shared/Extensions/JellyfinAPI/AnyView.swift b/Shared/Extensions/JellyfinAPI/AnyView.swift new file mode 100644 index 00000000..5ec421e4 --- /dev/null +++ b/Shared/Extensions/JellyfinAPI/AnyView.swift @@ -0,0 +1,14 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension AnyView: PlatformView { + var iOSView: some View { self } + var tvOSView: some View { self } +} diff --git a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift index b6a53241..e31585b6 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift @@ -105,6 +105,13 @@ extension BaseItemDto { } logger.debug("liveVideoPlayerViewModel matchingMediaSource being returned") + logger.debug(" TranscodingURL: \(matchingMediaSource.transcodingURL ?? "nil")") + logger.debug(" Path: \(matchingMediaSource.path ?? "nil")") + logger.debug(" Container: \(matchingMediaSource.container ?? "nil")") + logger.debug(" SupportsDirectPlay: \(matchingMediaSource.isSupportsDirectPlay ?? false)") + logger.debug(" PlaySessionID: \(response.value.playSessionID ?? "nil")") + logger.debug(" LiveStreamID: \(matchingMediaSource.liveStreamID ?? "nil")") + logger.debug(" OpenToken: \(matchingMediaSource.openToken ?? "nil")") return try matchingMediaSource.liveVideoPlayerViewModel( with: self, playSessionID: response.value.playSessionID! diff --git a/Shared/Extensions/JellyfinAPI/CountryInfo.swift b/Shared/Extensions/JellyfinAPI/CountryInfo.swift new file mode 100644 index 00000000..d8f71a8d --- /dev/null +++ b/Shared/Extensions/JellyfinAPI/CountryInfo.swift @@ -0,0 +1,34 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI + +extension CountryInfo: Displayable { + + var displayTitle: String { + if let twoLetterISORegionName, let name = Locale.current.localizedString(forRegionCode: twoLetterISORegionName) { + return name + } + + if let threeLetterISORegionName, let name = Locale.current.localizedString(forRegionCode: threeLetterISORegionName) { + return name + } + + return displayName ?? L10n.unknown + } +} + +extension CountryInfo { + + static var none: CountryInfo { + CountryInfo( + displayName: L10n.none + ) + } +} diff --git a/Shared/Extensions/JellyfinAPI/CultureDto.swift b/Shared/Extensions/JellyfinAPI/CultureDto.swift new file mode 100644 index 00000000..a804b2cb --- /dev/null +++ b/Shared/Extensions/JellyfinAPI/CultureDto.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI + +extension CultureDto: Displayable { + + var displayTitle: String { + if let twoLetterISOLanguageName, + let name = Locale.current.localizedString(forLanguageCode: twoLetterISOLanguageName) + { + return name + } + + if let threeLetterISOLanguageNames, let displayName = threeLetterISOLanguageNames + .compactMap({ Locale.current.localizedString(forLanguageCode: $0) }) + .first + { + return displayName + } + + return displayName ?? L10n.unknown + } + + static var none: CultureDto { + CultureDto( + displayName: L10n.none + ) + } +} diff --git a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift index 948da58a..f6de75d7 100644 --- a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift +++ b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift @@ -72,34 +72,91 @@ extension MediaSourceInfo { let playbackURL: URL let playMethod: PlayMethod - if let transcodingURL { - guard let fullTranscodeURL = URL(string: transcodingURL, relativeTo: userSession.server.currentURL) - else { throw JellyfinAPIError("Unable to construct transcoded url") } + print("🎬 liveVideoPlayerViewModel: Starting for item \(item.displayTitle)") + print("🎬 Server URL: \(userSession.server.currentURL)") + print("🎬 TranscodingURL: \(transcodingURL ?? "nil")") + print("🎬 Path: \(self.path ?? "nil")") + print("🎬 SupportsDirectPlay: \(self.isSupportsDirectPlay ?? false)") + print("🎬 MediaSourceInfo ID: \(self.id ?? "nil")") + print("🎬 MediaSourceInfo Name: \(self.name ?? "nil")") + print("🎬 Container: \(self.container ?? "nil")") + print("🎬 PlaySessionID: \(playSessionID)") + print("🎬 LiveStreamID: \(self.liveStreamID ?? "nil")") + print("🎬 OpenToken: \(self.openToken ?? "nil")") + + // For Live TV: Try direct Dispatcharr proxy URL FIRST (Jellyfin's endpoints are broken) + if let path = self.path, let pathURL = URL(string: path), pathURL.scheme != nil { + // Use direct Dispatcharr proxy stream (MPEG-TS over HTTP) + playbackURL = pathURL + playMethod = .directPlay + print("🎬 Using direct Dispatcharr proxy path: \(playbackURL)") + print("🎬 Absolute URL: \(playbackURL.absoluteString)") + } else if let transcodingURL { + // Fallback to Jellyfin transcoding URL (doesn't work for Dispatcharr channels) + let liveTranscodingURL = transcodingURL.replacingOccurrences(of: "/master.m3u8", with: "/live.m3u8") + + guard var fullTranscodeURL = userSession.client.fullURL(with: liveTranscodingURL) + else { throw JellyfinAPIError("Unable to make transcode URL") } + + // Add LiveStreamId parameter using URLComponents for proper encoding + if let openToken = self.openToken, var components = URLComponents(url: fullTranscodeURL, resolvingAgainstBaseURL: false) { + var queryItems = components.queryItems ?? [] + queryItems.append(URLQueryItem(name: "LiveStreamId", value: openToken)) + components.queryItems = queryItems + + if let urlWithLiveStreamId = components.url { + fullTranscodeURL = urlWithLiveStreamId + print("🎬 Added LiveStreamId parameter: \(openToken)") + } + } + playbackURL = fullTranscodeURL playMethod = .transcode - } else if self.isSupportsDirectPlay ?? false, let path = self.path, let playbackUrl = URL(string: path) { + print("🎬 Using live transcoding URL (converted from master): \(playbackURL)") + print("🎬 Absolute URL: \(playbackURL.absoluteString)") + } else if false, let path = self.path, let pathURL = URL(string: path), pathURL.scheme != nil { + // Direct path disabled - fails with AVPlayer connection error + playbackURL = pathURL + playMethod = .directPlay + print("🎬 Using direct path URL (absolute): \(playbackURL)") + print("🎬 Absolute URL: \(playbackURL.absoluteString)") + } else if false, self.isSupportsDirectPlay ?? false, let path = self.path, let playbackUrl = URL(string: path) { + // Relative direct play disabled playbackURL = playbackUrl playMethod = .directPlay + print("🎬 Using direct play URL (relative): \(playbackURL)") + print("🎬 Absolute URL: \(playbackURL.absoluteString)") } else { - let videoStreamParameters = Paths.GetVideoStreamParameters( - isStatic: true, - tag: item.etag, - playSessionID: playSessionID, - mediaSourceID: id - ) + // Use Jellyfin's live.m3u8 endpoint for Live TV (same as web browser) + // Construct URL: /videos/{id}/live.m3u8?DeviceId=...&MediaSourceId=...&PlaySessionId=...&api_key=... + let deviceId = userSession.client.configuration.deviceID ?? "unknown" + let apiKey = userSession.client.accessToken ?? "" - let videoStreamRequest = Paths.getVideoStream( - itemID: item.id!, - parameters: videoStreamParameters - ) + var urlComponents = URLComponents() + urlComponents.scheme = userSession.server.currentURL.scheme + urlComponents.host = userSession.server.currentURL.host + urlComponents.port = userSession.server.currentURL.port + urlComponents.path = "/videos/\(item.id!)/live.m3u8" + urlComponents.queryItems = [ + URLQueryItem(name: "DeviceId", value: deviceId), + URLQueryItem(name: "MediaSourceId", value: id), + URLQueryItem(name: "PlaySessionId", value: playSessionID), + URLQueryItem(name: "api_key", value: apiKey), + ] - guard let fullURL = userSession.client.fullURL(with: videoStreamRequest) else { - throw JellyfinAPIError("Unable to construct transcoded url") + guard let liveURL = urlComponents.url else { + print("🎬 ERROR: Unable to construct live.m3u8 URL") + throw JellyfinAPIError("Unable to construct live.m3u8 URL") } - playbackURL = fullURL + playbackURL = liveURL playMethod = .directPlay + print("🎬 Using live.m3u8 URL: \(playbackURL)") + print("🎬 Absolute URL: \(playbackURL.absoluteString)") } + print("🎬 Final playback URL absolute string: \(playbackURL.absoluteString)") + print("🎬 Play method: \(playMethod)") + let videoStreams = mediaStreams?.filter { $0.type == .video } ?? [] let audioStreams = mediaStreams?.filter { $0.type == .audio } ?? [] let subtitleStreams = mediaStreams?.filter { $0.type == .subtitle } ?? [] diff --git a/Shared/Extensions/LabelStyle/SectionFooterWithImageLabelStyle.swift b/Shared/Extensions/LabelStyle/SectionFooterWithImageLabelStyle.swift new file mode 100644 index 00000000..d75f3eaf --- /dev/null +++ b/Shared/Extensions/LabelStyle/SectionFooterWithImageLabelStyle.swift @@ -0,0 +1,35 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: rename as not only used in section footers + +extension LabelStyle where Self == SectionFooterWithImageLabelStyle { + + static func sectionFooterWithImage( + imageStyle: ImageStyle + ) -> SectionFooterWithImageLabelStyle { + SectionFooterWithImageLabelStyle(imageStyle: imageStyle) + } +} + +struct SectionFooterWithImageLabelStyle: LabelStyle { + + let imageStyle: ImageStyle + + func makeBody(configuration: Configuration) -> some View { + HStack { + configuration.icon + .foregroundStyle(imageStyle) + .fontWeight(.bold) + + configuration.title + } + } +} diff --git a/Shared/Extensions/Nuke/DataCache.swift b/Shared/Extensions/Nuke/DataCache.swift index e6d91940..c753a5d4 100644 --- a/Shared/Extensions/Nuke/DataCache.swift +++ b/Shared/Extensions/Nuke/DataCache.swift @@ -23,7 +23,7 @@ extension DataCache.Swiftfin { static let posters: DataCache? = { - let dataCache = try? DataCache(name: "org.ashik.jellypig/Posters") { name in + let dataCache = try? DataCache(name: "se.ashik.jellyflood/Posters") { name in guard let url = name.url else { return nil } return ImagePipeline.cacheKey(for: url) } @@ -40,7 +40,7 @@ extension DataCache.Swiftfin { return nil } - let path = root.appendingPathComponent("Caches/org.ashik.jellypig.local", isDirectory: true) + let path = root.appendingPathComponent("Caches/se.ashik.jellyflood.local", isDirectory: true) let dataCache = try? DataCache(path: path) { name in diff --git a/Shared/Extensions/ProgressViewStyle/GaugeProgressViewStyle.swift b/Shared/Extensions/ProgressViewStyle/GaugeProgressViewStyle.swift new file mode 100644 index 00000000..0b18f906 --- /dev/null +++ b/Shared/Extensions/ProgressViewStyle/GaugeProgressViewStyle.swift @@ -0,0 +1,60 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct GaugeProgressViewStyle: ProgressViewStyle { + + @Default(.accentColor) + private var accentColor + + @State + private var contentSize: CGSize = .zero + + private let lineWidthRatio: CGFloat + private let systemImage: String? + + init(systemImage: String? = nil) { + self.lineWidthRatio = systemImage == nil ? 0.2 : 0.125 + self.systemImage = systemImage + } + + func makeBody(configuration: Configuration) -> some View { + ZStack { + + if let systemImage { + Image(systemName: systemImage) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: contentSize.width / 2.5, maxHeight: contentSize.height / 2.5) + .foregroundStyle(.secondary) + .padding(6) + } + + Circle() + .stroke( + Color.gray.opacity(0.2), + lineWidth: contentSize.width * lineWidthRatio + ) + + Circle() + .trim(from: 0, to: configuration.fractionCompleted ?? 0) + .stroke( + accentColor, + style: StrokeStyle( + lineWidth: contentSize.width * lineWidthRatio, + lineCap: .round + ) + ) + .rotationEffect(.degrees(-90)) + } + .animation(.linear(duration: 0.1), value: configuration.fractionCompleted) + .trackingSize($contentSize) + } +} diff --git a/Shared/Extensions/ProgressViewStyle/PlaybackProgressViewStyle.swift b/Shared/Extensions/ProgressViewStyle/PlaybackProgressViewStyle.swift new file mode 100644 index 00000000..25d654e6 --- /dev/null +++ b/Shared/Extensions/ProgressViewStyle/PlaybackProgressViewStyle.swift @@ -0,0 +1,60 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct PlaybackProgressViewStyle: ProgressViewStyle { + + enum CornerStyle { + case round + case square + } + + @State + private var contentSize: CGSize = .zero + + var secondaryProgress: Double? + var cornerStyle: CornerStyle + + @ViewBuilder + private func buildCapsule(for progress: Double) -> some View { + Rectangle() + .cornerRadius( + cornerStyle == .round ? contentSize.height / 2 : 0, + corners: [.topLeft, .bottomLeft] + ) + .frame(width: contentSize.width * clamp(progress, min: 0, max: 1) + contentSize.height) + .offset(x: -contentSize.height) + } + + func makeBody(configuration: Configuration) -> some View { + Capsule() + .foregroundStyle(.secondary) + .opacity(0.2) + .overlay(alignment: .leading) { + ZStack(alignment: .leading) { + + if let secondaryProgress, + secondaryProgress > 0 + { + buildCapsule(for: secondaryProgress) + .foregroundStyle(.tertiary) + } + + if let fractionCompleted = configuration.fractionCompleted { + buildCapsule(for: fractionCompleted) + .foregroundStyle(.primary) + } + } + } + .trackingSize($contentSize) + .mask { + Capsule() + } + } +} diff --git a/Shared/Extensions/ProgressViewStyle/ProgressViewStyle.swift b/Shared/Extensions/ProgressViewStyle/ProgressViewStyle.swift new file mode 100644 index 00000000..2a1117a0 --- /dev/null +++ b/Shared/Extensions/ProgressViewStyle/ProgressViewStyle.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ProgressViewStyle where Self == GaugeProgressViewStyle { + + static var gauge: GaugeProgressViewStyle { + GaugeProgressViewStyle() + } + + static func gauge(systemImage: String) -> GaugeProgressViewStyle { + GaugeProgressViewStyle(systemImage: systemImage) + } +} + +extension ProgressViewStyle where Self == PlaybackProgressViewStyle { + + static var playback: Self { .init(secondaryProgress: nil, cornerStyle: .round) } + + func secondaryProgress(_ progress: Double?) -> Self { + copy(self, modifying: \.secondaryProgress, to: progress) + } + + var square: Self { + copy(self, modifying: \.cornerStyle, to: .square) + } +} diff --git a/Shared/Extensions/PublishedBox.swift b/Shared/Extensions/PublishedBox.swift new file mode 100644 index 00000000..670d774a --- /dev/null +++ b/Shared/Extensions/PublishedBox.swift @@ -0,0 +1,20 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine + +/// A box for a `Published` value +class PublishedBox: ObservableObject { + + @Published + var value: Value + + init(initialValue: Value) { + self.value = initialValue + } +} diff --git a/Shared/Extensions/Section.swift b/Shared/Extensions/Section.swift new file mode 100644 index 00000000..82dd3c6e --- /dev/null +++ b/Shared/Extensions/Section.swift @@ -0,0 +1,24 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension Section where Parent == Text, Footer == Text, Content: View { + + init( + _ header: String, + footer: String, + @ViewBuilder content: @escaping () -> Content + ) { + self.init(content: content) { + Text(header) + } footer: { + Text(footer) + } + } +} diff --git a/Shared/Extensions/UIImage.swift b/Shared/Extensions/UIImage.swift new file mode 100644 index 00000000..c2efa56f --- /dev/null +++ b/Shared/Extensions/UIImage.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import UIKit + +extension UIImage { + + func getTileImage( + columns: Int, + rows: Int, + index: Int + ) -> UIImage? { + let x = index % columns + let y = index / columns + + // Check if the tile index is within the valid range +// guard x >= 0, y >= 0, x < columns, y < rows else { +// return nil +// } + + // Use integer arithmetic for tile dimensions and positions + let imageWidth = Int(size.width) + let imageHeight = Int(size.height) + let tileWidth = imageWidth / columns + let tileHeight = imageHeight / rows + + // Calculate the rectangle using integer values + let rect = CGRect( + x: x * tileWidth, + y: y * tileHeight, + width: tileWidth, + height: tileHeight + ) + + // This check is now redundant because of the earlier guard statement + // guard rect.maxX <= imageWidth && rect.maxY <= imageHeight else { + // return nil + // } + + if let cgImage = cgImage?.cropping(to: rect) { + return UIImage(cgImage: cgImage) + } + + return nil + +// guard index >= 0 else { +// return nil +// } +// +// let imageWidth = size.width +// let imageHeight = size.height +// +// let tileWidth = imageWidth / CGFloat(columns) +// let tileHeight = imageHeight / CGFloat(rows) +// +// let x = (index % columns) +// let y = (index / columns) +// +// let rect = CGRect( +// x: CGFloat(x) * tileWidth, +// y: CGFloat(y) * tileHeight, +// width: tileWidth, +// height: tileHeight +// ) +// +// guard rect.maxX <= imageWidth && rect.maxY <= imageHeight else { +// return nil +// } +// +// if let cgImage = cgImage?.cropping(to: rect) { +// return UIImage(cgImage: cgImage) +// } +// +// return nil + } +} diff --git a/Shared/Extensions/UnitPoint.swift b/Shared/Extensions/UnitPoint.swift new file mode 100644 index 00000000..63166906 --- /dev/null +++ b/Shared/Extensions/UnitPoint.swift @@ -0,0 +1,16 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension UnitPoint { + + var inverted: UnitPoint { + UnitPoint(x: 1 - x, y: 1 - y) + } +} diff --git a/Shared/Logging/Logging.swift b/Shared/Logging/Logging.swift new file mode 100644 index 00000000..0c7ecfb9 --- /dev/null +++ b/Shared/Logging/Logging.swift @@ -0,0 +1,73 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import Logging + +extension Logger { + + static func swiftfin() -> Logger { + Logger(label: "org.jellyfin.swiftfin") + } +} + +struct SwiftfinConsoleHandler: LogHandler { + + var logLevel: Logger.Level = .trace + var metadata: Logger.Metadata = [:] + + subscript(metadataKey key: String) -> Logger.Metadata.Value? { + get { + metadata[key] + } + set(newValue) { + metadata[key] = newValue + } + } + + func log( + level: Logger.Level, + message: Logger.Message, + metadata: Logger.Metadata?, + source: String, + file: String, + function: String, + line: UInt + ) { + let line = "[\(level.emoji) \(level.rawValue.capitalized)] \(file.shortFileName)#\(line):\(function) \(message)" + let meta = (metadata ?? [:]).merging(self.metadata) { _, new in new } + let metadataString = meta.map { "\t- \($0): \($1)" }.joined(separator: "\n") + + print(line) + + if metadataString.isNotEmpty { + print(metadataString) + } + } +} + +extension Logger.Level { + var emoji: String { + switch self { + case .trace: + return "🟣" + case .debug: + return "🔵" + case .info: + return "🟢" + case .notice: + return "🟠" + case .warning: + return "🟡" + case .error: + return "🔴" + case .critical: + return "💥" + } + } +} diff --git a/Shared/Logging/NetworkLogger.swift b/Shared/Logging/NetworkLogger.swift new file mode 100644 index 00000000..555f3d0e --- /dev/null +++ b/Shared/Logging/NetworkLogger.swift @@ -0,0 +1,57 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import Pulse + +private let redactedMessage = "" + +extension NetworkLogger { + + static func swiftfin() -> NetworkLogger { + var configuration = NetworkLogger.Configuration() + + configuration.willHandleEvent = { event -> LoggerStore.Event? in + if case var LoggerStore.Event.networkTaskCompleted(task) = event { + guard let url = task.originalRequest.url, + let requestBody = task.requestBody + else { + return event + } + + let pathComponents = url.pathComponents + + if pathComponents.last == "AuthenticateByName", + var body = try? JSONDecoder().decode(AuthenticateUserByName.self, from: requestBody) + { + body.pw = redactedMessage + task.requestBody = try? JSONEncoder().encode(body) + + return LoggerStore.Event.networkTaskCompleted(task) + } + + if pathComponents.last == "Password", + var body = try? JSONDecoder().decode(UpdateUserPassword.self, from: requestBody) + { + body.currentPassword = redactedMessage + body.currentPw = redactedMessage + body.newPw = redactedMessage + body.isResetPassword = nil + task.requestBody = try? JSONEncoder().encode(body) + + return LoggerStore.Event.networkTaskCompleted(task) + } + } + + return event + } + + return NetworkLogger(configuration: configuration) + } +} diff --git a/Shared/Logging/SwiftfinCorestoreLogger.swift b/Shared/Logging/SwiftfinCorestoreLogger.swift new file mode 100644 index 00000000..ca3fb275 --- /dev/null +++ b/Shared/Logging/SwiftfinCorestoreLogger.swift @@ -0,0 +1,84 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Logging + +struct SwiftfinCorestoreLogger: CoreStoreLogger { + + private let logger = Logger.swiftfin() + + func log( + error: CoreStoreError, + message: String, + fileName: StaticString, + lineNumber: Int, + functionName: StaticString + ) { + logger.error( + "\(message)", + metadata: nil, + source: "Corestore", + file: fileName.description, + function: functionName.description, + line: UInt(lineNumber) + ) + } + + func log( + level: LogLevel, + message: String, + fileName: StaticString, + lineNumber: Int, + functionName: StaticString + ) { + logger.log( + level: level.asSwiftLog, + "\(message)", + metadata: nil, + source: "Corestore", + file: fileName.description, + function: functionName.description, + line: UInt(lineNumber) + ) + } + + func assert( + _ condition: @autoclosure () -> Bool, + message: @autoclosure () -> String, + fileName: StaticString, + lineNumber: Int, + functionName: StaticString + ) { + guard !condition() else { return } + logger.critical( + "\(message())", + metadata: nil, + source: "Corestore", + file: fileName.description, + function: functionName.description, + line: UInt(lineNumber) + ) + } +} + +extension CoreStore.LogLevel { + + var asSwiftLog: Logger.Level { + switch self { + case .trace: + return .trace + case .notice: + return .debug + case .warning: + return .warning + case .fatal: + return .critical + } + } +} diff --git a/Shared/Objects/ActiveSessionFilter.swift b/Shared/Objects/ActiveSessionFilter.swift new file mode 100644 index 00000000..32668cbe --- /dev/null +++ b/Shared/Objects/ActiveSessionFilter.swift @@ -0,0 +1,38 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +enum ActiveSessionFilter: String, CaseIterable, SystemImageable, Displayable, Storable { + + case all + case active + case inactive + + var displayTitle: String { + switch self { + case .all: + return L10n.all + case .active: + return L10n.active + case .inactive: + return L10n.inactive + } + } + + var systemImage: String { + switch self { + case .all: + return "line.3.horizontal" + case .active: + return "play" + case .inactive: + return "play.slash" + } + } +} diff --git a/Shared/Objects/ChannelProgram.swift b/Shared/Objects/ChannelProgram.swift index d5fd2e77..297fafd6 100644 --- a/Shared/Objects/ChannelProgram.swift +++ b/Shared/Objects/ChannelProgram.swift @@ -53,4 +53,20 @@ extension ChannelProgram: Poster { var systemImage: String { channel.systemImage } + + func portraitImageSources(maxWidth: CGFloat? = nil, quality: Int? = nil) -> [ImageSource] { + channel.portraitImageSources(maxWidth: maxWidth) + } + + func landscapeImageSources(maxWidth: CGFloat? = nil, quality: Int? = nil) -> [ImageSource] { + channel.landscapeImageSources(maxWidth: maxWidth) + } + + func cinematicImageSources(maxWidth: CGFloat? = nil, quality: Int? = nil) -> [ImageSource] { + channel.cinematicImageSources(maxWidth: maxWidth) + } + + func squareImageSources(maxWidth: CGFloat? = nil, quality: Int? = nil) -> [ImageSource] { + channel.squareImageSources(maxWidth: maxWidth) + } } diff --git a/Shared/Objects/DirectionalPanGestureRecognizer.swift b/Shared/Objects/DirectionalPanGestureRecognizer.swift new file mode 100644 index 00000000..39fe09f9 --- /dev/null +++ b/Shared/Objects/DirectionalPanGestureRecognizer.swift @@ -0,0 +1,44 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import UIKit + +class DirectionalPanGestureRecognizer: UIPanGestureRecognizer { + + var direction: Direction + + init(direction: Direction, target: AnyObject, action: Selector) { + self.direction = direction + super.init(target: target, action: action) + } + + override func touchesMoved(_ touches: Set, with event: UIEvent) { + super.touchesMoved(touches, with: event) + + if state == .began { + let velocity = velocity(in: view) + + let isUp = velocity.y < 0 + let isHorizontal = velocity.y.magnitude < velocity.x.magnitude + let isVertical = velocity.x.magnitude < velocity.y.magnitude + + switch direction { + case .all: () + case .allButDown where isUp || isHorizontal: () + case .horizontal where isHorizontal: () + case .vertical where isVertical: () + case .up where isVertical && velocity.y < 0: () + case .down where isVertical && velocity.y > 0: () + case .left where isHorizontal && velocity.x < 0: () + case .right where isHorizontal && velocity.x > 0: () + default: + state = .cancelled + } + } + } +} diff --git a/Shared/Objects/GestureAction/DoubleTouchGestureAction.swift b/Shared/Objects/GestureAction/DoubleTouchGestureAction.swift new file mode 100644 index 00000000..b048da9a --- /dev/null +++ b/Shared/Objects/GestureAction/DoubleTouchGestureAction.swift @@ -0,0 +1,28 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum DoubleTouchGestureAction: String, GestureAction { + + case none + case aspectFill + case gestureLock + case pausePlay + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .aspectFill: + return L10n.aspectFill + case .gestureLock: + return L10n.gestureLock + case .pausePlay: + return L10n.playAndPause + } + } +} diff --git a/Shared/Objects/GestureAction/GestureAction.swift b/Shared/Objects/GestureAction/GestureAction.swift new file mode 100644 index 00000000..839433df --- /dev/null +++ b/Shared/Objects/GestureAction/GestureAction.swift @@ -0,0 +1,12 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +// `none` is used since values aren't supported in Defaults +// https://github.com/sindresorhus/Defaults/issues/54 + +protocol GestureAction: CaseIterable, Displayable, Storable {} diff --git a/Shared/Objects/GestureAction/LongPressGestureAction.swift b/Shared/Objects/GestureAction/LongPressGestureAction.swift new file mode 100644 index 00000000..73ee2806 --- /dev/null +++ b/Shared/Objects/GestureAction/LongPressGestureAction.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum LongPressGestureAction: String, GestureAction { + + case none + case gestureLock + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .gestureLock: + return L10n.gestureLock + } + } +} diff --git a/Shared/Objects/GestureAction/MultiTapGestureAction.swift b/Shared/Objects/GestureAction/MultiTapGestureAction.swift new file mode 100644 index 00000000..e6d0fdb8 --- /dev/null +++ b/Shared/Objects/GestureAction/MultiTapGestureAction.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum MultiTapGestureAction: String, GestureAction { + + case none + case jump + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .jump: + return L10n.jump + } + } +} diff --git a/Shared/Objects/GestureAction/PanGestureAction.swift b/Shared/Objects/GestureAction/PanGestureAction.swift new file mode 100644 index 00000000..15842d20 --- /dev/null +++ b/Shared/Objects/GestureAction/PanGestureAction.swift @@ -0,0 +1,31 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum PanGestureAction: String, GestureAction { + + case none + case brightness + case scrub + case slowScrub + case volume + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .brightness: + return L10n.brightness + case .scrub: + return L10n.scrub + case .slowScrub: + return L10n.slowScrub + case .volume: + return L10n.volume + } + } +} diff --git a/Shared/Objects/GestureAction/PinchGestureAction.swift b/Shared/Objects/GestureAction/PinchGestureAction.swift new file mode 100644 index 00000000..6b66e8b1 --- /dev/null +++ b/Shared/Objects/GestureAction/PinchGestureAction.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum PinchGestureAction: String, GestureAction { + + case none + case aspectFill + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .aspectFill: + return L10n.aspectFill + } + } +} diff --git a/Shared/Objects/GestureAction/SwipeGestureAction.swift b/Shared/Objects/GestureAction/SwipeGestureAction.swift new file mode 100644 index 00000000..4aedb8e0 --- /dev/null +++ b/Shared/Objects/GestureAction/SwipeGestureAction.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +enum SwipeGestureAction: String, GestureAction { + + case none + case jump + + var displayTitle: String { + switch self { + case .none: + return L10n.none + case .jump: + return L10n.jump + } + } +} diff --git a/Shared/Objects/IsStatusBarHiddenKey.swift b/Shared/Objects/IsStatusBarHiddenKey.swift new file mode 100644 index 00000000..0b064cd4 --- /dev/null +++ b/Shared/Objects/IsStatusBarHiddenKey.swift @@ -0,0 +1,17 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct IsStatusBarHiddenKey: PreferenceKey { + static var defaultValue: Bool = false + + static func reduce(value: inout Bool, nextValue: () -> Bool) { + value = nextValue() || value + } +} diff --git a/Shared/Objects/LazyState.swift b/Shared/Objects/LazyState.swift new file mode 100644 index 00000000..c02cf80c --- /dev/null +++ b/Shared/Objects/LazyState.swift @@ -0,0 +1,54 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +@MainActor +@propertyWrapper +struct LazyState: @preconcurrency DynamicProperty { + + final class Box { + + private var value: Value! + private let thunk: () -> Value + var didThunk = false + + var wrappedValue: Value { + value + } + + func setup() { + value = thunk() + didThunk = true + } + + init(wrappedValue thunk: @autoclosure @escaping () -> Value) { + self.thunk = thunk + } + } + + @State + private var holder: Box + + var wrappedValue: Value { + holder.wrappedValue + } + + var projectedValue: Binding { + Binding(get: { wrappedValue }, set: { _ in }) + } + + func update() { + guard !holder.didThunk else { return } + holder.setup() + } + + init(wrappedValue thunk: @autoclosure @escaping () -> Value) { + _holder = State(wrappedValue: Box(wrappedValue: thunk())) + } +} diff --git a/Shared/Objects/MediaJumpInterval.swift b/Shared/Objects/MediaJumpInterval.swift new file mode 100644 index 00000000..f7554349 --- /dev/null +++ b/Shared/Objects/MediaJumpInterval.swift @@ -0,0 +1,83 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation + +// TODO: conform to `SystemImageable` +// - forward to systemImage, backward to secondarySystemImage +enum MediaJumpInterval: Storable, RawRepresentable { + + typealias RawValue = Duration + + case five + case ten + case fifteen + case thirty + case custom(interval: Duration) + + init?(rawValue: Duration) { + switch rawValue { + case .seconds(5): + self = .five + case .seconds(10): + self = .ten + case .seconds(15): + self = .fifteen + case .seconds(30): + self = .thirty + default: + self = .custom(interval: rawValue) + } + } + + var rawValue: Duration { + switch self { + case .five: + .seconds(5) + case .ten: + .seconds(10) + case .fifteen: + .seconds(15) + case .thirty: + .seconds(30) + case let .custom(interval): + interval + } + } + + var forwardSystemImage: String { + switch self { + case .thirty: + "goforward.30" + case .fifteen: + "goforward.15" + case .ten: + "goforward.10" + case .five: + "goforward.5" + case .custom: + "goforward" + } + } + + var backwardSystemImage: String { + switch self { + case .thirty: + "gobackward.30" + case .fifteen: + "gobackward.15" + case .ten: + "gobackward.10" + case .five: + "gobackward.5" + case .custom: + "gobackward" + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem+Build.swift b/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem+Build.swift new file mode 100644 index 00000000..6748b7dc --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem+Build.swift @@ -0,0 +1,218 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import JellyfinAPI +import Logging + +// TODO: build report of determined values for playback information +// - transcode, video stream, path + +extension MediaPlayerItem { + + /// The main `MediaPlayerItem` builder for normal online usage. + static func build( + for initialItem: BaseItemDto, + mediaSource _initialMediaSource: MediaSourceInfo? = nil, + videoPlayerType: VideoPlayerType = Defaults[.VideoPlayer.videoPlayerType], + requestedBitrate: PlaybackBitrate = Defaults[.VideoPlayer.Playback.appMaximumBitrate], + compatibilityMode: PlaybackCompatibility = Defaults[.VideoPlayer.Playback.compatibilityMode], + modifyItem: ((inout BaseItemDto) -> Void)? = nil + ) async throws -> MediaPlayerItem { + + let logger = Logger.swiftfin() + + guard let itemID = initialItem.id else { + logger.critical("No item ID!") + throw JellyfinAPIError(L10n.unknownError) + } + + guard let userSession = Container.shared.currentUserSession() else { + logger.critical("No user session!") + throw JellyfinAPIError(L10n.unknownError) + } + + var item = try await initialItem.getFullItem(userSession: userSession) + + if let modifyItem { + modifyItem(&item) + } + + guard let initialMediaSource = { + if let _initialMediaSource { + return _initialMediaSource + } + + if let first = item.mediaSources?.first { + logger.trace("Using first media source for item \(itemID)") + return first + } + + return nil + }() else { + logger.error("No media sources for item \(itemID)!") + throw JellyfinAPIError(L10n.unknownError) + } + + let maxBitrate = try await requestedBitrate.getMaxBitrate() + + let deviceProfile = DeviceProfile.build( + for: videoPlayerType, + compatibilityMode: compatibilityMode, + maxBitrate: maxBitrate + ) + + var playbackInfo = PlaybackInfoDto() + playbackInfo.isAutoOpenLiveStream = true + playbackInfo.deviceProfile = deviceProfile + playbackInfo.liveStreamID = initialMediaSource.liveStreamID + playbackInfo.maxStreamingBitrate = maxBitrate + playbackInfo.userID = userSession.user.id + + let request = Paths.getPostedPlaybackInfo( + itemID: itemID, + playbackInfo + ) + + let response = try await userSession.client.send(request) + + let mediaSource: MediaSourceInfo? = { + + guard let mediaSources = response.value.mediaSources else { return nil } + + if let matchingTag = mediaSources.first(where: { $0.eTag == initialMediaSource.eTag }) { + return matchingTag + } + + for source in mediaSources { + if let openToken = source.openToken, + let id = source.id, + openToken.contains(id) + { + return source + } + } + + logger.warning("Unable to find matching media source, defaulting to first media source") + + return mediaSources.first + }() + + guard let mediaSource else { + throw JellyfinAPIError("Unable to find media source for item") + } + + guard let playSessionID = response.value.playSessionID else { + throw JellyfinAPIError("No associated play session ID") + } + + let playbackURL = try Self.streamURL( + item: item, + mediaSource: mediaSource, + playSessionID: playSessionID, + userSession: userSession, + logger: logger + ) + + let previewImageProvider: (any PreviewImageProvider)? = { + let previewImageScrubbingSetting = StoredValues[.User.previewImageScrubbing] + lazy var chapterPreviewImageProvider: ChapterPreviewImageProvider? = { + if let chapters = item.fullChapterInfo, chapters.isNotEmpty { + return ChapterPreviewImageProvider(chapters: chapters) + } + return nil + }() + + if case let PreviewImageScrubbingOption.trickplay(fallbackToChapters: fallbackToChapters) = previewImageScrubbingSetting { + if let mediaSourceID = mediaSource.id, + let trickplayInfo = item.trickplay?[mediaSourceID]?.first + { + return TrickplayPreviewImageProvider( + info: trickplayInfo.value, + itemID: itemID, + mediaSourceID: mediaSourceID, + runtime: item.runtime ?? .zero + ) + } + + if fallbackToChapters { + return chapterPreviewImageProvider + } + } else if previewImageScrubbingSetting == .chapters { + return chapterPreviewImageProvider + } + + return nil + }() + + return .init( + baseItem: item, + mediaSource: mediaSource, + playSessionID: playSessionID, + url: playbackURL, + requestedBitrate: requestedBitrate, + previewImageProvider: previewImageProvider, + thumbnailProvider: item.getNowPlayingImage + ) + } + + // TODO: audio type stream + // TODO: build live tv stream from Paths.getLiveHlsStream? + private static func streamURL( + item: BaseItemDto, + mediaSource: MediaSourceInfo, + playSessionID: String, + userSession: UserSession, + logger: Logger + ) throws -> URL { + + guard let itemID = item.id else { + throw JellyfinAPIError("No item ID while building online media player item!") + } + + if let transcodingURL = mediaSource.transcodingURL { + logger.trace("Using transcoding URL for item \(itemID)") + + guard let fullTranscodeURL = userSession.client.fullURL(with: transcodingURL) + else { throw JellyfinAPIError("Unable to make transcode URL") } + return fullTranscodeURL + } + + if item.mediaType == .video, !item.isLiveStream { + + logger.trace("Making video stream URL for item \(itemID)") + + let videoStreamParameters = Paths.GetVideoStreamParameters( + isStatic: true, + tag: item.etag, + playSessionID: playSessionID, + mediaSourceID: itemID + ) + + let videoStreamRequest = Paths.getVideoStream( + itemID: itemID, + parameters: videoStreamParameters + ) + + guard let videoStreamURL = userSession.client.fullURL(with: videoStreamRequest) + else { throw JellyfinAPIError("Unable to make video stream URL") } + + return videoStreamURL + } + + logger.trace("Using media source path for item \(itemID)") + + guard let path = mediaSource.path, let streamURL = URL( + string: path + ) else { throw JellyfinAPIError("Unable to make stream URL") } + + return streamURL + } +} diff --git a/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem.swift b/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem.swift new file mode 100644 index 00000000..faec27f8 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/MediaPlayerItem/MediaPlayerItem.swift @@ -0,0 +1,102 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +// TODO: get preview image for current manager seconds? +// - would make scrubbing image possibly ready before scrubbing +// TODO: fix leaks +// - made from publishers of observers not being cancelled + +@MainActor +class MediaPlayerItem: ViewModel, MediaPlayerObserver { + + typealias ThumbnailProvider = () async -> UIImage? + + @Published + var selectedAudioStreamIndex: Int? = nil { + didSet { + if let proxy = manager?.proxy as? any VideoMediaPlayerProxy { + proxy.setAudioStream(.init(index: selectedAudioStreamIndex)) + } + } + } + + @Published + var selectedSubtitleStreamIndex: Int? = nil { + didSet { + if let proxy = manager?.proxy as? any VideoMediaPlayerProxy { + proxy.setSubtitleStream(.init(index: selectedSubtitleStreamIndex)) + } + } + } + + weak var manager: MediaPlayerManager? { + didSet { + for var o in observers { + o.manager = manager + } + } + } + + var observers: [any MediaPlayerObserver] = [] + + let baseItem: BaseItemDto + let mediaSource: MediaSourceInfo + let playSessionID: String + let previewImageProvider: (any PreviewImageProvider)? + let thumbnailProvider: ThumbnailProvider? + let url: URL + + let audioStreams: [MediaStream] + let subtitleStreams: [MediaStream] + let videoStreams: [MediaStream] + + let requestedBitrate: PlaybackBitrate + + // MARK: init + + init( + baseItem: BaseItemDto, + mediaSource: MediaSourceInfo, + playSessionID: String, + url: URL, + requestedBitrate: PlaybackBitrate = .max, + previewImageProvider: (any PreviewImageProvider)? = nil, + thumbnailProvider: ThumbnailProvider? = nil + ) { + self.baseItem = baseItem + self.mediaSource = mediaSource + self.playSessionID = playSessionID + self.requestedBitrate = requestedBitrate + self.previewImageProvider = previewImageProvider + self.thumbnailProvider = thumbnailProvider + self.url = url + + let adjustedMediaStreams = mediaSource.mediaStreams?.adjustedTrackIndexes( + for: mediaSource.transcodingURL == nil ? .directPlay : .transcode, + selectedAudioStreamIndex: mediaSource.defaultAudioStreamIndex ?? 0 + ) + + let audioStreams = adjustedMediaStreams?.filter { $0.type == .audio } ?? [] + let subtitleStreams = adjustedMediaStreams?.filter { $0.type == .subtitle } ?? [] + let videoStreams = adjustedMediaStreams?.filter { $0.type == .video } ?? [] + + self.audioStreams = audioStreams + self.subtitleStreams = subtitleStreams + self.videoStreams = videoStreams + + super.init() + + selectedAudioStreamIndex = mediaSource.defaultAudioStreamIndex ?? -1 + selectedSubtitleStreamIndex = mediaSource.defaultSubtitleStreamIndex ?? -1 + + observers.append(MediaProgressObserver(item: self)) + } +} diff --git a/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+AVPlayer.swift b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+AVPlayer.swift new file mode 100644 index 00000000..4f893acf --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+AVPlayer.swift @@ -0,0 +1,240 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import AVFoundation +import Combine +import Defaults +import Foundation +import JellyfinAPI +import SwiftUI + +// TODO: After NativeVideoPlayer is removed, can move bindings and +// observers to AVPlayerView, like the VLC delegate +// - wouldn't need to have MediaPlayerProxy: MediaPlayerObserver +// TODO: report playback information, see VLCUI.PlaybackInformation (dropped frames, etc.) +// TODO: report buffering state +// TODO: have set seconds with completion handler + +@MainActor +class AVMediaPlayerProxy: VideoMediaPlayerProxy { + + let isBuffering: PublishedBox = .init(initialValue: false) + var isScrubbing: Binding = .constant(false) + var scrubbedSeconds: Binding = .constant(.zero) + var videoSize: PublishedBox = .init(initialValue: .zero) + + let avPlayerLayer: AVPlayerLayer + let player: AVPlayer + +// private var rateObserver: NSKeyValueObservation! + private var statusObserver: NSKeyValueObservation! + private var timeControlStatusObserver: NSKeyValueObservation! + private var timeObserver: Any! + private var managerItemObserver: AnyCancellable? + private var managerStateObserver: AnyCancellable? + + weak var manager: MediaPlayerManager? { + didSet { + if let manager { + managerItemObserver = manager.$playbackItem + .sink { playbackItem in + if let playbackItem { + self.playNew(item: playbackItem) + } + } + + managerStateObserver = manager.$state + .sink { state in + switch state { + case .stopped: + self.playbackStopped() + default: break + } + } + } else { + managerItemObserver?.cancel() + managerStateObserver?.cancel() + } + } + } + + init() { + self.player = AVPlayer() + self.avPlayerLayer = AVPlayerLayer(player: player) + + timeObserver = player.addPeriodicTimeObserver( + forInterval: CMTime(seconds: 1, preferredTimescale: 1000), + queue: .main + ) { newTime in + let newSeconds = Duration.seconds(newTime.seconds) + + if !self.isScrubbing.wrappedValue { + self.scrubbedSeconds.wrappedValue = newSeconds + } + + self.manager?.seconds = newSeconds + } + } + + func play() { + player.play() + } + + func pause() { + player.pause() + } + + func stop() { + player.pause() + } + + func jumpForward(_ seconds: Duration) { + let currentTime = player.currentTime() + let newTime = currentTime + CMTime(seconds: seconds.seconds, preferredTimescale: 1) + player.seek(to: newTime, toleranceBefore: .zero, toleranceAfter: .zero) + } + + func jumpBackward(_ seconds: Duration) { + let currentTime = player.currentTime() + let newTime = max(.zero, currentTime - CMTime(seconds: seconds.seconds, preferredTimescale: 1)) + player.seek(to: newTime, toleranceBefore: .zero, toleranceAfter: .zero) + } + + func setSeconds(_ seconds: Duration) { + let time = CMTime(seconds: seconds.seconds, preferredTimescale: 1) + player.seek(to: time, toleranceBefore: .zero, toleranceAfter: .zero) + } + + // TODO: complete + func setRate(_ rate: Float) {} + func setAudioStream(_ stream: MediaStream) {} + func setSubtitleStream(_ stream: MediaStream) {} + + func setAspectFill(_ aspectFill: Bool) { + avPlayerLayer.videoGravity = aspectFill ? .resizeAspectFill : .resizeAspect + } + + var videoPlayerBody: some View { + AVPlayerView() + .environmentObject(self) + } +} + +extension AVMediaPlayerProxy { + + private func playbackStopped() { + player.pause() + guard let timeObserver else { return } + player.removeTimeObserver(timeObserver) +// rateObserver.invalidate() + statusObserver.invalidate() + timeControlStatusObserver.invalidate() + } + + private func playNew(item: MediaPlayerItem) { + let baseItem = item.baseItem + + let newAVPlayerItem = AVPlayerItem(url: item.url) + newAVPlayerItem.externalMetadata = item.baseItem.avMetadata + + player.replaceCurrentItem(with: newAVPlayerItem) + + // TODO: protect against paused +// rateObserver = player.observe(\.rate, options: [.new, .initial]) { _, value in +// DispatchQueue.main.async { +// self.manager?.set(rate: value.newValue ?? 1.0) +// } +// } + + timeControlStatusObserver = player.observe(\.timeControlStatus, options: [.new, .initial]) { player, _ in + let timeControlStatus = player.timeControlStatus + + DispatchQueue.main.async { + switch timeControlStatus { + case .paused: + self.manager?.setPlaybackRequestStatus(status: .paused) + case .waitingToPlayAtSpecifiedRate: () + // TODO: buffering + case .playing: + self.manager?.setPlaybackRequestStatus(status: .playing) + @unknown default: () + } + } + } + + // TODO: proper handling of none/unknown states + statusObserver = player.observe(\.currentItem?.status, options: [.new, .initial]) { _, value in + guard let newValue = value.newValue else { return } + switch newValue { + case .failed: + if let error = self.player.error { + DispatchQueue.main.async { + self.manager?.error(JellyfinAPIError("AVPlayer error: \(error.localizedDescription)")) + } + } + case .none, .readyToPlay, .unknown: + let startSeconds = max(.zero, (baseItem.startSeconds ?? .zero) - Duration.seconds(Defaults[.VideoPlayer.resumeOffset])) + + self.player.seek( + to: CMTimeMake( + value: startSeconds.components.seconds, + timescale: 1 + ), + toleranceBefore: .zero, + toleranceAfter: .zero, + completionHandler: { _ in + self.play() + } + ) + @unknown default: () + } + } + } +} + +// MARK: - AVPlayerView + +extension AVMediaPlayerProxy { + + struct AVPlayerView: UIViewRepresentable { + + @EnvironmentObject + private var proxy: AVMediaPlayerProxy + @EnvironmentObject + private var scrubbedSeconds: PublishedBox + + func makeUIView(context: Context) -> UIView { +// proxy.isScrubbing = context.environment.isScrubbing +// proxy.scrubbedSeconds = $scrubbedSeconds.value + UIAVPlayerView(proxy: proxy) + } + + func updateUIView(_ uiView: UIView, context: Context) {} + } + + private class UIAVPlayerView: UIView { + + let proxy: AVMediaPlayerProxy + + init(proxy: AVMediaPlayerProxy) { + self.proxy = proxy + super.init(frame: .zero) + layer.addSublayer(proxy.avPlayerLayer) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + proxy.avPlayerLayer.frame = bounds + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+VLC.swift b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+VLC.swift new file mode 100644 index 00000000..6e4d9d8b --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy+VLC.swift @@ -0,0 +1,230 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation +import JellyfinAPI +import SwiftUI +import VLCUI + +class VLCMediaPlayerProxy: VideoMediaPlayerProxy, + MediaPlayerOffsetConfigurable, + MediaPlayerSubtitleConfigurable +{ + + let isBuffering: PublishedBox = .init(initialValue: false) + let videoSize: PublishedBox = .init(initialValue: .zero) + let vlcUIProxy: VLCVideoPlayer.Proxy = .init() + + weak var manager: MediaPlayerManager? { + didSet { + for var o in observers { + o.manager = manager + } + } + } + + var observers: [any MediaPlayerObserver] = [ + NowPlayableObserver(), + ] + + func play() { + vlcUIProxy.play() + } + + func pause() { + vlcUIProxy.pause() + } + + func stop() { + vlcUIProxy.stop() + } + + func jumpForward(_ seconds: Duration) { + vlcUIProxy.jumpForward(seconds) + } + + func jumpBackward(_ seconds: Duration) { + vlcUIProxy.jumpBackward(seconds) + } + + func setRate(_ rate: Float) { + vlcUIProxy.setRate(.absolute(rate)) + } + + func setSeconds(_ seconds: Duration) { + vlcUIProxy.setSeconds(seconds) + } + + func setAudioStream(_ stream: MediaStream) { + vlcUIProxy.setAudioTrack(.absolute(stream.index ?? -1)) + } + + func setSubtitleStream(_ stream: MediaStream) { + vlcUIProxy.setSubtitleTrack(.absolute(stream.index ?? -1)) + } + + func setAspectFill(_ aspectFill: Bool) { + vlcUIProxy.aspectFill(aspectFill ? 1 : 0) + } + + func setAudioOffset(_ seconds: Duration) { + vlcUIProxy.setAudioDelay(seconds) + } + + func setSubtitleOffset(_ seconds: Duration) { + vlcUIProxy.setSubtitleDelay(seconds) + } + + func setSubtitleColor(_ color: Color) { + vlcUIProxy.setSubtitleColor(.absolute(color.uiColor)) + } + + func setSubtitleFontName(_ fontName: String) { + vlcUIProxy.setSubtitleFont(fontName) + } + + func setSubtitleFontSize(_ fontSize: Int) { + vlcUIProxy.setSubtitleSize(.absolute(fontSize)) + } + + @ViewBuilder + var videoPlayerBody: some View { + VLCPlayerView() + .environmentObject(vlcUIProxy) + } +} + +extension VLCMediaPlayerProxy { + + struct VLCPlayerView: View { + + @Default(.VideoPlayer.Subtitle.subtitleColor) + private var subtitleColor + @Default(.VideoPlayer.Subtitle.subtitleFontName) + private var subtitleFontName + @Default(.VideoPlayer.Subtitle.subtitleSize) + private var subtitleSize + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var proxy: VLCVideoPlayer.Proxy + + private var isScrubbing: Bool { + containerState.isScrubbing + } + + private func vlcConfiguration(for item: MediaPlayerItem) -> VLCVideoPlayer.Configuration { + let baseItem = item.baseItem + let mediaSource = item.mediaSource + + var configuration = VLCVideoPlayer.Configuration(url: item.url) + configuration.autoPlay = true + + let startSeconds = max(.zero, (baseItem.startSeconds ?? .zero) - Duration.seconds(Defaults[.VideoPlayer.resumeOffset])) + + if !baseItem.isLiveStream { + configuration.startSeconds = startSeconds + configuration.audioIndex = .absolute(mediaSource.defaultAudioStreamIndex ?? -1) + configuration.subtitleIndex = .absolute(mediaSource.defaultSubtitleStreamIndex ?? -1) + } + + configuration.subtitleSize = .absolute(25 - Defaults[.VideoPlayer.Subtitle.subtitleSize]) + configuration.subtitleColor = .absolute(Defaults[.VideoPlayer.Subtitle.subtitleColor].uiColor) + + if let font = UIFont(name: Defaults[.VideoPlayer.Subtitle.subtitleFontName], size: 1) { + configuration.subtitleFont = .absolute(font) + } + + configuration.playbackChildren = item.subtitleStreams + .filter { $0.deliveryMethod == .external } + .compactMap(\.asVLCPlaybackChild) + + return configuration + } + + var body: some View { + if let playbackItem = manager.playbackItem, manager.state != .stopped { + VLCVideoPlayer(configuration: vlcConfiguration(for: playbackItem)) + .proxy(proxy) + .onSecondsUpdated { newSeconds, info in + if !isScrubbing { + containerState.scrubbedSeconds.value = newSeconds + } + + manager.seconds = newSeconds + + if let proxy = manager.proxy as? any VideoMediaPlayerProxy { + proxy.videoSize.value = info.videoSize + } + } + .onStateUpdated { state, info in + manager.logger.trace("VLC state updated: \(state)") + + switch state { + case .buffering, + .esAdded, + .opening: + // TODO: figure out when to properly set to false + manager.proxy?.isBuffering.value = true + case .ended: + // Live streams will send stopped/ended events + guard !playbackItem.baseItem.isLiveStream else { return } + manager.proxy?.isBuffering.value = false + manager.ended() + case .stopped: () + // Stopped is ignored as the `MediaPlayerManager` + // should instead call this to be stopped, rather + // than react to the event. + case .error: + manager.proxy?.isBuffering.value = false + manager.error(JellyfinAPIError("VLC player is unable to perform playback")) + case .playing: + manager.proxy?.isBuffering.value = false + manager.setPlaybackRequestStatus(status: .playing) + case .paused: + manager.setPlaybackRequestStatus(status: .paused) + } + + if let proxy = manager.proxy as? any VideoMediaPlayerProxy { + proxy.videoSize.value = info.videoSize + } + } + .onReceive(manager.$playbackItem) { playbackItem in + guard let playbackItem else { return } + proxy.playNewMedia(vlcConfiguration(for: playbackItem)) + } + .backport + .onChange(of: manager.rate) { _, newValue in + proxy.setRate(.absolute(newValue)) + } + .backport + .onChange(of: subtitleColor) { _, newValue in + if let proxy = proxy as? MediaPlayerSubtitleConfigurable { + proxy.setSubtitleColor(newValue) + } + } + .backport + .onChange(of: subtitleFontName) { _, newValue in + if let proxy = proxy as? MediaPlayerSubtitleConfigurable { + proxy.setSubtitleFontName(newValue) + } + } + .backport + .onChange(of: subtitleSize) { _, newValue in + if let proxy = proxy as? MediaPlayerSubtitleConfigurable { + proxy.setSubtitleFontSize(25 - newValue) + } + } + } + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy.swift b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy.swift new file mode 100644 index 00000000..6bafeafc --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/MediaPlayerProxy/MediaPlayerProxy.swift @@ -0,0 +1,59 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import SwiftUI + +// TODO: feature implementations +// - PiP +// TODO: Chromecast proxy + +/// The proxy for top-down communication to an +/// underlying media player +protocol MediaPlayerProxy: ObservableObject, MediaPlayerObserver { + + var isBuffering: PublishedBox { get } + + func play() + func pause() + func stop() + + func jumpForward(_ seconds: Duration) + func jumpBackward(_ seconds: Duration) + func setRate(_ rate: Float) + func setSeconds(_ seconds: Duration) +} + +@MainActor +protocol VideoMediaPlayerProxy: MediaPlayerProxy { + + associatedtype VideoPlayerBody: View + + var videoSize: PublishedBox { get } + + // TODO: remove when container view handles aspect fill + func setAspectFill(_ aspectFill: Bool) + func setAudioStream(_ stream: MediaStream) + func setSubtitleStream(_ stream: MediaStream) + + @ViewBuilder + @MainActor + var videoPlayerBody: Self.VideoPlayerBody { get } +} + +protocol MediaPlayerOffsetConfigurable { + func setAudioOffset(_ seconds: Duration) + func setSubtitleOffset(_ seconds: Duration) +} + +protocol MediaPlayerSubtitleConfigurable { + func setSubtitleColor(_ color: Color) + func setSubtitleFontName(_ fontName: String) + func setSubtitleFontSize(_ fontSize: Int) +} diff --git a/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableCommand.swift b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableCommand.swift new file mode 100644 index 00000000..be199a2f --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableCommand.swift @@ -0,0 +1,115 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import MediaPlayer + +enum NowPlayableCommand: CaseIterable { + + // Play/Pause + case pause + case play + case stop + case togglePausePlay + + // Track + case nextTrack + case previousTrack + case changeRepeatMode + case changeShuffleMode + + // Seeking/Rate + case changePlaybackRate + case seekBackward + case seekForward + case skipBackward + case skipForward + case changePlaybackPosition + + // Like/Dislike + case rating + case like + case dislike + + // Bookmark + case bookmark + + // Languages + case enableLanguageOption + case disableLanguageOption + + var remoteCommand: MPRemoteCommand { + let remoteCommandCenter = MPRemoteCommandCenter.shared() + + switch self { + case .pause: + return remoteCommandCenter.pauseCommand + case .play: + return remoteCommandCenter.playCommand + case .stop: + return remoteCommandCenter.stopCommand + case .togglePausePlay: + return remoteCommandCenter.togglePlayPauseCommand + case .nextTrack: + return remoteCommandCenter.nextTrackCommand + case .previousTrack: + return remoteCommandCenter.previousTrackCommand + case .changeRepeatMode: + return remoteCommandCenter.changeRepeatModeCommand + case .changeShuffleMode: + return remoteCommandCenter.changeShuffleModeCommand + case .changePlaybackRate: + return remoteCommandCenter.changePlaybackRateCommand + case .seekBackward: + return remoteCommandCenter.seekBackwardCommand + case .seekForward: + return remoteCommandCenter.seekForwardCommand + case .skipBackward: + return remoteCommandCenter.skipBackwardCommand + case .skipForward: + return remoteCommandCenter.skipForwardCommand + case .changePlaybackPosition: + return remoteCommandCenter.changePlaybackPositionCommand + case .rating: + return remoteCommandCenter.ratingCommand + case .like: + return remoteCommandCenter.likeCommand + case .dislike: + return remoteCommandCenter.dislikeCommand + case .bookmark: + return remoteCommandCenter.bookmarkCommand + case .enableLanguageOption: + return remoteCommandCenter.enableLanguageOptionCommand + case .disableLanguageOption: + return remoteCommandCenter.disableLanguageOptionCommand + } + } + + func removeHandler() { + remoteCommand.removeTarget(nil) + } + + func addHandler(_ handler: @escaping (NowPlayableCommand, MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus) { + + remoteCommand.removeTarget(nil) + + switch self { + case .skipBackward: + MPRemoteCommandCenter.shared().skipBackwardCommand.preferredIntervals = [15.0] + case .skipForward: + MPRemoteCommandCenter.shared().skipForwardCommand.preferredIntervals = [15.0] + default: () + } + + remoteCommand.addTarget { handler(self, $0) } + } + + func isEnabled(_ isEnabled: Bool) { + remoteCommand.isEnabled = isEnabled + } +} diff --git a/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableMetadata.swift b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableMetadata.swift new file mode 100644 index 00000000..13ffa9d7 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableMetadata.swift @@ -0,0 +1,65 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import MediaPlayer + +struct NowPlayableStaticMetadata { + + let mediaType: MPNowPlayingInfoMediaType + let isLiveStream: Bool + + let title: String + let artist: String? + let artwork: MPMediaItemArtwork? + + let albumArtist: String? + let albumTitle: String? + + init( + mediaType: MPNowPlayingInfoMediaType, + isLiveStream: Bool = false, + title: String, + artist: String? = nil, + artwork: MPMediaItemArtwork? = nil, + albumArtist: String? = nil, + albumTitle: String? = nil + ) { + self.mediaType = mediaType + self.isLiveStream = isLiveStream + self.title = title + self.artist = artist + self.artwork = artwork + self.albumArtist = albumArtist + self.albumTitle = albumTitle + } +} + +struct NowPlayableDynamicMetadata { + + let rate: Float + let position: Duration + let duration: Duration + + let currentLanguageOptions: [MPNowPlayingInfoLanguageOption] + let availableLanguageOptionGroups: [MPNowPlayingInfoLanguageOptionGroup] + + init( + rate: Float = 1, + position: Duration, + duration: Duration, + currentLanguageOptions: [MPNowPlayingInfoLanguageOption] = [], + availableLanguageOptionGroups: [MPNowPlayingInfoLanguageOptionGroup] = [] + ) { + self.rate = rate + self.position = position + self.duration = duration + self.currentLanguageOptions = currentLanguageOptions + self.availableLanguageOptionGroups = availableLanguageOptionGroups + } +} diff --git a/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableObserver.swift b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableObserver.swift new file mode 100644 index 00000000..05e24e5e --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/NowPlayable/NowPlayableObserver.swift @@ -0,0 +1,305 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation +import Logging +import MediaPlayer +import Nuke + +// TODO: ensure proper state handling +// - manager states +// - playback request states +// TODO: have MediaPlayerItem report supported commands + +@MainActor +class NowPlayableObserver: ViewModel, MediaPlayerObserver { + + private var defaultRegisteredCommands: [NowPlayableCommand] { + [ + .play, + .pause, + .togglePausePlay, + .skipBackward, + .skipForward, + .changePlaybackPosition, + // TODO: only register next/previous if there is a queue +// .nextTrack, +// .previousTrack, + ] + } + + private var itemImageCancellable: AnyCancellable? + private var playbackRequestStateBeforeInterruption: MediaPlayerManager.PlaybackRequestStatus = .playing + + weak var manager: MediaPlayerManager? { + willSet { + guard let newValue else { return } + setup(with: newValue) + } + } + + private func setup(with manager: MediaPlayerManager) { + do { + try startSession() + } catch { + logger.critical("Unable to activate audio session: \(error.localizedDescription)") + } + + cancellables = [] + + manager.actions + .sink { [weak self] newValue in self?.actionDidChange(newValue) } + .store(in: &cancellables) + + manager.$playbackItem + .sink { [weak self] newValue in self?.playbackItemDidChange(newValue) } + .store(in: &cancellables) + + manager.$playbackRequestStatus + .sink { [weak self] newValue in self?.playbackRequestStatusDidChange(newValue) } + .store(in: &cancellables) + + manager.secondsBox.$value + .sink { [weak self] newValue in self?.secondsDidChange(newValue) } + .store(in: &cancellables) + + Notifications[.avAudioSessionInterruption] + .publisher + .sink { i in + Task { @MainActor in + self.handleInterruption(type: i.0, options: i.1) + } + } + .store(in: &cancellables) + + Task { @MainActor in + configureRemoteCommands( + defaultRegisteredCommands, + commandHandler: handleCommand + ) + } + } + + private func playbackRequestStatusDidChange(_ newStatus: MediaPlayerManager.PlaybackRequestStatus) { + handleNowPlayablePlaybackChange( + playing: newStatus == .playing, + metadata: .init( + position: manager?.seconds ?? .zero, + duration: manager?.item.runtime ?? .zero + ) + ) + } + + private func secondsDidChange(_ newSeconds: Duration) { + handleNowPlayablePlaybackChange( + playing: true, + metadata: .init( + position: newSeconds, + duration: manager?.item.runtime ?? .zero + ) + ) + } + + private func actionDidChange(_ newAction: MediaPlayerManager._Action) { + switch newAction { + case .stop, .error: + handleStopAction() + default: () + } + } + + // TODO: remove and respond to manager action publisher instead + // TODO: register different commands based on item capabilities + private func playbackItemDidChange(_ newItem: MediaPlayerItem?) { + itemImageCancellable?.cancel() + itemImageCancellable = nil + guard let newItem else { return } + + setNowPlayingMetadata(newItem.baseItem.nowPlayableStaticMetadata()) + + itemImageCancellable = Task { + let currentBaseItem = newItem.baseItem + guard let image = await newItem.thumbnailProvider?() else { return } + guard manager?.item.id == currentBaseItem.id else { return } + + await MainActor.run { + setNowPlayingMetadata( + currentBaseItem.nowPlayableStaticMetadata(image) + ) + } + } + .asAnyCancellable() + + handleNowPlayablePlaybackChange( + playing: true, + metadata: .init( + position: manager?.seconds ?? .zero, + duration: manager?.item.runtime ?? .zero + ) + ) + } + + private func handleStopAction() { + cancellables = [] + + for command in defaultRegisteredCommands { + command.removeHandler() + } + + Task(priority: .userInitiated) { + // TODO: figure out way to not need delay + // Delay to wait for io to stop + try? await Task.sleep(for: .seconds(0.3)) + + do { + try stopSession() + } catch { + logger.critical("Unable to stop audio session: \(error.localizedDescription)") + } + } + } + + // TODO: complete by referencing apple code + // - restart + @MainActor + private func handleInterruption( + type: AVAudioSession.InterruptionType, + options: AVAudioSession.InterruptionOptions + ) { + switch type { + case .began: + playbackRequestStateBeforeInterruption = manager?.playbackRequestStatus ?? .playing + manager?.setPlaybackRequestStatus(status: .paused) + case .ended: + do { + try startSession() + + if playbackRequestStateBeforeInterruption == .playing { + if options.contains(.shouldResume) { + manager?.setPlaybackRequestStatus(status: .playing) + } else { + manager?.setPlaybackRequestStatus(status: .paused) + } + } + } catch { + logger.critical("Unable to reactivate audio session after interruption: \(error.localizedDescription)") + manager?.stop() + } + @unknown default: () + } + } + + @MainActor + private func handleCommand( + command: NowPlayableCommand, + event: MPRemoteCommandEvent + ) -> MPRemoteCommandHandlerStatus { + switch command { + case .pause: + manager?.setPlaybackRequestStatus(status: .paused) + case .play: + manager?.setPlaybackRequestStatus(status: .playing) + case .togglePausePlay: + manager?.togglePlayPause() + case .skipBackward: + guard let event = event as? MPSkipIntervalCommandEvent else { return .commandFailed } + manager?.proxy?.jumpBackward(.seconds(event.interval)) + case .skipForward: + guard let event = event as? MPSkipIntervalCommandEvent else { return .commandFailed } + manager?.proxy?.jumpForward(.seconds(event.interval)) + case .changePlaybackPosition: + guard let event = event as? MPChangePlaybackPositionCommandEvent else { return .commandFailed } + manager?.proxy?.setSeconds(Duration.seconds(event.positionTime)) + case .nextTrack: + guard let nextItem = manager?.queue?.nextItem else { return .commandFailed } + manager?.playNewItem(provider: nextItem) + case .previousTrack: + guard let previousItem = manager?.queue?.previousItem else { return .commandFailed } + manager?.playNewItem(provider: previousItem) + default: () + } + + return .success + } + + private func handleNowPlayablePlaybackChange( + playing: Bool, + metadata: NowPlayableDynamicMetadata + ) { + setNowPlayingPlaybackInfo(metadata) + MPNowPlayingInfoCenter.default().playbackState = playing ? .playing : .paused + } + + private func configureRemoteCommands( + _ commands: [NowPlayableCommand], + commandHandler: @escaping (NowPlayableCommand, MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus + ) { + guard commands.isNotEmpty else { return } + + for command in commands { + command.addHandler(commandHandler) + command.isEnabled(true) + } + } + + private func setNowPlayingMetadata(_ metadata: NowPlayableStaticMetadata) { + + let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default() + var nowPlayingInfo: [String: Any] = [:] + + nowPlayingInfo[MPNowPlayingInfoPropertyMediaType] = metadata.mediaType.rawValue + nowPlayingInfo[MPNowPlayingInfoPropertyIsLiveStream] = metadata.isLiveStream + nowPlayingInfo[MPMediaItemPropertyTitle] = metadata.title + nowPlayingInfo[MPMediaItemPropertyArtist] = metadata.artist + nowPlayingInfo[MPMediaItemPropertyArtwork] = metadata.artwork + nowPlayingInfo[MPMediaItemPropertyAlbumArtist] = metadata.albumArtist + nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = metadata.albumTitle + + nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo + } + + private func setNowPlayingPlaybackInfo(_ metadata: NowPlayableDynamicMetadata) { + + let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default() + var nowPlayingInfo: [String: Any] = nowPlayingInfoCenter.nowPlayingInfo ?? [:] + + nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = Float(metadata.duration.seconds) + nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = Float(metadata.position.seconds) + nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = metadata.rate + nowPlayingInfo[MPNowPlayingInfoPropertyDefaultPlaybackRate] = 1.0 + nowPlayingInfo[MPNowPlayingInfoPropertyCurrentLanguageOptions] = metadata.currentLanguageOptions + nowPlayingInfo[MPNowPlayingInfoPropertyAvailableLanguageOptions] = metadata.availableLanguageOptionGroups + + nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo + } + + private func startSession() throws { + + let audioSession = AVAudioSession.sharedInstance() + + do { + try audioSession.setCategory(.playback, mode: .default) + try audioSession.setActive(true) + logger.trace("Started AVAudioSession") + } catch { + logger.critical("Unable to activate AVAudioSession instance: \(error.localizedDescription)") + throw error + } + } + + private func stopSession() throws { + do { + try AVAudioSession.sharedInstance().setActive(false) + logger.trace("Stopped AVAudioSession") + } catch { + logger.critical("Unable to deactivate AVAudioSession instance: \(error.localizedDescription)") + throw error + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/PreviewImageProvider/ChapterPreviewImageProvider.swift b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/ChapterPreviewImageProvider.swift new file mode 100644 index 00000000..f36e5823 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/ChapterPreviewImageProvider.swift @@ -0,0 +1,70 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import Get +import JellyfinAPI +import UIKit + +// TODO: preload chapter images +// - somehow tell player if there are no images +// and don't present popup overlay +// TODO: just use Nuke image pipeline + +class ChapterPreviewImageProvider: PreviewImageProvider { + + let chapters: [ChapterInfo.FullInfo] + + @MainActor + private var images: [Int: UIImage] = [:] + @MainActor + private var imageTasks: [Int: Task] = [:] + + init(chapters: [ChapterInfo.FullInfo]) { + self.chapters = chapters + } + + func imageIndex(for seconds: Duration) -> Int? { + guard let currentChapterIndex = chapters + .firstIndex(where: { + guard let startSeconds = $0.chapterInfo.startSeconds else { return false } + return startSeconds > seconds + } + ) else { return nil } + + return max(0, currentChapterIndex - 1) + } + + @MainActor + func image(for seconds: Duration) async -> UIImage? { + guard let chapterIndex = imageIndex(for: seconds) else { return nil } + + if let image = images[chapterIndex] { + return image + } + + if let task = imageTasks[chapterIndex] { + return await task.value + } + + let newTask = Task { + let client = Container.shared.currentUserSession()!.client + + guard let chapterInfo = chapters[safe: chapterIndex], let imageUrl = chapterInfo.imageSource.url else { return nil } + let request: Request = .init(url: imageUrl) + + guard let response = try? await client.send(request) else { return nil } + guard let image = UIImage(data: response.value) else { return nil } + + return image + } + + imageTasks[chapterIndex] = newTask + return await newTask.value + } +} diff --git a/Shared/Objects/MediaPlayerManager/PreviewImageProvider/PreviewImageProvider.swift b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/PreviewImageProvider.swift new file mode 100644 index 00000000..9778628b --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/PreviewImageProvider.swift @@ -0,0 +1,15 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import UIKit + +protocol PreviewImageProvider: ObservableObject { + func image(for seconds: Duration) async -> UIImage? + func imageIndex(for seconds: Duration) -> Int? +} diff --git a/Shared/Objects/MediaPlayerManager/PreviewImageProvider/TrickplayPreviewImageProvider.swift b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/TrickplayPreviewImageProvider.swift new file mode 100644 index 00000000..46bed83b --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/PreviewImageProvider/TrickplayPreviewImageProvider.swift @@ -0,0 +1,152 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import JellyfinAPI +import UIKit + +// TODO: preload adjacent images +// TODO: don't just select first trickplayinfo + +class TrickplayPreviewImageProvider: PreviewImageProvider { + + private struct TrickplayImage { + + let image: UIImage + let secondsRange: ClosedRange + + let columns: Int + let rows: Int + let tileInterval: Duration + + func tile(for seconds: Duration) -> UIImage? { + guard secondsRange.contains(seconds) else { + return nil + } + + let index = Int(((seconds - secondsRange.lowerBound) / tileInterval).rounded(.down)) + let tileImage = image.getTileImage(columns: columns, rows: rows, index: index) + return tileImage + } + } + + private let info: TrickplayInfo + private let itemID: String + private let mediaSourceID: String + private let runtime: Duration + + @MainActor + private var imageTasks: [Int: Task] = [:] + + init( + info: TrickplayInfo, + itemID: String, + mediaSourceID: String, + runtime: Duration + ) { + self.info = info + self.itemID = itemID + self.mediaSourceID = mediaSourceID + self.runtime = runtime + } + + func imageIndex(for seconds: Duration) -> Int? { + let intervalIndex = Int(seconds / Duration.milliseconds(info.interval ?? 1000)) + return intervalIndex + } + + @MainActor + func image(for seconds: Duration) async -> UIImage? { + let rows = info.tileHeight ?? 0 + let columns = info.tileWidth ?? 0 + let area = rows * columns + let intervalIndex = Int(seconds / Duration.milliseconds(info.interval ?? 1000)) + let imageIndex = intervalIndex / area + + if let task = imageTasks[imageIndex] { + guard let image = await task.value else { return nil } + return image.tile(for: seconds) + } + + let interval = info.interval ?? 0 + let tileImageDuration = Duration.milliseconds( + Double(interval * rows * columns) + ) + let tileInterval = Duration.milliseconds(interval) + + let currentImageTask = task( + imageIndex: imageIndex, + tileImageDuration: tileImageDuration, + columns: columns, + rows: rows, + tileInterval: tileInterval + ) + + if imageIndex > 1, !imageTasks.keys.contains(imageIndex - 1) { + let previousIndexTask = task( + imageIndex: imageIndex - 1, + tileImageDuration: tileImageDuration, + columns: columns, + rows: rows, + tileInterval: tileInterval + ) + imageTasks[imageIndex - 1] = previousIndexTask + } + + if seconds < (runtime - tileImageDuration), !imageTasks.keys.contains(imageIndex + 1) { + let nextIndexTask = task( + imageIndex: imageIndex + 1, + tileImageDuration: tileImageDuration, + columns: columns, + rows: rows, + tileInterval: tileInterval + ) + imageTasks[imageIndex + 1] = nextIndexTask + } + + imageTasks[imageIndex] = currentImageTask + + guard let image = await currentImageTask.value else { return nil } + return image.tile(for: seconds) + } + + private func task( + imageIndex: Int, + tileImageDuration: Duration, + columns: Int, + rows: Int, + tileInterval: Duration + ) -> Task { + Task { [weak self] () -> TrickplayImage? in + guard let tileWidth = self?.info.width else { return nil } + guard let itemID = self?.itemID else { return nil } + + let client = Container.shared.currentUserSession()!.client + let request = Paths.getTrickplayTileImage( + itemID: itemID, + width: tileWidth, + index: imageIndex + ) + guard let response = try? await client.send(request) else { return nil } + guard let image = UIImage(data: response.value) else { return nil } + + let secondsRangeStart = tileImageDuration * Double(imageIndex) + let secondsRangeEnd = secondsRangeStart + tileImageDuration + + let trickplayImage = TrickplayImage( + image: image, + secondsRange: secondsRangeStart ... secondsRangeEnd, + columns: columns, + rows: rows, + tileInterval: tileInterval + ) + + return trickplayImage + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/Supplements/EpisodeMediaPlayerQueue.swift b/Shared/Objects/MediaPlayerManager/Supplements/EpisodeMediaPlayerQueue.swift new file mode 100644 index 00000000..277e329d --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/Supplements/EpisodeMediaPlayerQueue.swift @@ -0,0 +1,547 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import CollectionVGrid +import Combine +import Defaults +import Foundation +import IdentifiedCollections +import JellyfinAPI +import SwiftUI + +// TODO: loading, error states +// TODO: watched/status indicators +// TODO: sometimes safe area for CollectionHStack doesn't trigger + +@MainActor +class EpisodeMediaPlayerQueue: ViewModel, MediaPlayerQueue { + + weak var manager: MediaPlayerManager? { + didSet { + cancellables = [] + guard let manager else { return } + manager.$playbackItem + .sink { [weak self] newItem in + self?.didReceive(newItem: newItem) + } + .store(in: &cancellables) + } + } + + let displayTitle: String = L10n.episodes + let id: String = "EpisodeMediaPlayerQueue" + + @Published + var nextItem: MediaPlayerItemProvider? = nil + @Published + var previousItem: MediaPlayerItemProvider? = nil + + @Published + var hasNextItem: Bool = false + @Published + var hasPreviousItem: Bool = false + + lazy var hasNextItemPublisher: Published.Publisher = $hasNextItem + lazy var hasPreviousItemPublisher: Published.Publisher = $hasPreviousItem + lazy var nextItemPublisher: Published.Publisher = $nextItem + lazy var previousItemPublisher: Published.Publisher = $previousItem + + private var currentAdjacentEpisodesTask: AnyCancellable? + private let seriesViewModel: SeriesItemViewModel + + init(episode: BaseItemDto) { + self.seriesViewModel = SeriesItemViewModel(episode: episode) + super.init() + + seriesViewModel.send(.refresh) + } + + var videoPlayerBody: some PlatformView { + EpisodeOverlay(viewModel: seriesViewModel) + } + + private func didReceive(newItem: MediaPlayerItem?) { + self.currentAdjacentEpisodesTask = Task { + await MainActor.run { + self.nextItem = nil + self.previousItem = nil + self.hasNextItem = false + self.hasPreviousItem = false + } + + try await self.getAdjacentEpisodes(for: newItem?.baseItem) + } + .asAnyCancellable() + } + + private func getAdjacentEpisodes(for item: BaseItemDto?) async throws { + guard let item else { return } + guard let seriesID = item.seriesID, item.type == .episode else { return } + + let parameters = Paths.GetEpisodesParameters( + userID: userSession.user.id, + fields: .MinimumFields, + adjacentTo: item.id!, + limit: 3 + ) + let request = Paths.getEpisodes(seriesID: seriesID, parameters: parameters) + let response = try await userSession.client.send(request) + + // 4 possible states: + // 1 - only current episode + // 2 - two episodes with next episode + // 3 - two episodes with previous episode + // 4 - three episodes with current in middle + + // 1 + guard let items = response.value.items, items.count > 1 else { return } + + var previousItem: BaseItemDto? + var nextItem: BaseItemDto? + + if items.count == 2 { + if items[0].id == item.id { + // 2 + nextItem = items[1] + + } else { + // 3 + previousItem = items[0] + } + } else { + nextItem = items[2] + previousItem = items[0] + } + + var nextProvider: MediaPlayerItemProvider? + var previousProvider: MediaPlayerItemProvider? + + if let nextItem { + nextProvider = MediaPlayerItemProvider(item: nextItem) { item in + try await MediaPlayerItem.build(for: item) { + $0.userData?.playbackPositionTicks = .zero + } + } + } + + if let previousItem { + previousProvider = MediaPlayerItemProvider(item: previousItem) { item in + try await MediaPlayerItem.build(for: item) { + $0.userData?.playbackPositionTicks = .zero + } + } + } + + guard !Task.isCancelled else { return } + + await MainActor.run { + self.nextItem = nextProvider + self.previousItem = previousProvider + self.hasNextItem = nextProvider != nil + self.hasPreviousItem = previousProvider != nil + } + } +} + +extension EpisodeMediaPlayerQueue { + + private struct EpisodeOverlay: PlatformView { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + + @ObservedObject + var viewModel: SeriesItemViewModel + + @State + private var selection: SeasonItemViewModel.ID? + + private var selectionViewModel: SeasonItemViewModel? { + guard let selection else { return nil } + return viewModel.seasons[id: selection] + } + + private func select(episode: BaseItemDto) { + let provider = MediaPlayerItemProvider(item: episode) { item in + let mediaSource = item.mediaSources?.first + + return try await MediaPlayerItem.build( + for: item, + mediaSource: mediaSource! + ) + } + + manager.playNewItem(provider: provider) + } + + var tvOSView: some View { EmptyView() } + + var iOSView: some View { + CompactOrRegularView( + isCompact: containerState.isCompact + ) { + CompactSeasonStackObserver( + selection: $selection, + action: select + ) + } regularView: { + RegularSeasonStackObserver( + selection: $selection, + action: select + ) + } + .environmentObject(viewModel) + .onAppear { + if let seasonID = manager.item.seasonID, let season = viewModel.seasons[id: seasonID] { + if season.elements.isEmpty { + season.send(.refresh) + } + selection = season.id + } else { + selection = viewModel.seasons.first?.id + } + } + } + } + + private struct CompactSeasonStackObserver: View { + + @EnvironmentObject + private var seriesViewModel: SeriesItemViewModel + + private let selection: Binding + private let action: (BaseItemDto) -> Void + + private var selectionViewModel: SeasonItemViewModel? { + guard let id = selection.wrappedValue else { return nil } + return seriesViewModel.seasons[id: id] + } + + init( + selection: Binding, + action: @escaping (BaseItemDto) -> Void + ) { + self.selection = selection + self.action = action + } + + private struct _Body: View { + + @ObservedObject + var selectionViewModel: SeasonItemViewModel + + let action: (BaseItemDto) -> Void + + var body: some View { + CollectionVGrid( + uniqueElements: selectionViewModel.elements, + layout: .columns( + 1, + insets: .init(top: 0, leading: 0, bottom: EdgeInsets.edgePadding, trailing: 0) + ) + ) { item in + EpisodeRow(episode: item) { + action(item) + } + .edgePadding(.horizontal) + } + } + } + + var body: some View { + if let selectionViewModel { + _Body( + selectionViewModel: selectionViewModel, + action: action + ) + } + } + } + + private struct RegularSeasonStackObserver: View { + + @Environment(\.safeAreaInsets) + private var safeAreaInsets: EdgeInsets + + @EnvironmentObject + private var seriesViewModel: SeriesItemViewModel + + private let selection: Binding + private let action: (BaseItemDto) -> Void + + private var selectionViewModel: SeasonItemViewModel? { + guard let id = selection.wrappedValue else { return nil } + return seriesViewModel.seasons[id: id] + } + + init( + selection: Binding, + action: @escaping (BaseItemDto) -> Void + ) { + self.selection = selection + self.action = action + } + + private struct _Body: View { + + @Environment(\.safeAreaInsets) + private var safeAreaInsets: EdgeInsets + + @ObservedObject + var selectionViewModel: SeasonItemViewModel + + let action: (BaseItemDto) -> Void + + var body: some View { + CollectionHStack( + uniqueElements: selectionViewModel.elements, + id: \.unwrappedIDHashOrZero + ) { item in + EpisodeButton(episode: item) { + action(item) + } + .frame(height: 150) + } + .insets(horizontal: max(safeAreaInsets.leading, safeAreaInsets.trailing) + EdgeInsets.edgePadding) + } + } + + var body: some View { + if let selectionViewModel { + _Body( + selectionViewModel: selectionViewModel, + action: action + ) + .frame(height: 150) + } + } + + // TODO: make experimental setting to enable + private struct _ButtonStack: View { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var seriesViewModel: SeriesItemViewModel + + let selection: Binding + let selectionViewModel: SeasonItemViewModel + + init( + selection: Binding, + selectionViewModel: SeasonItemViewModel + ) { + self.selection = selection + self.selectionViewModel = selectionViewModel + } + + var body: some View { + VStack { + Menu { + ForEach(seriesViewModel.seasons, id: \.season.id) { season in + Button { + selection.wrappedValue = season.id + if season.elements.isEmpty { + season.send(.refresh) + } + } label: { + if season.id == selection.wrappedValue { + Label(season.season.displayTitle, systemImage: "checkmark") + } else { + Text(season.season.displayTitle) + } + } + } + } label: { + ZStack { + RoundedRectangle(cornerRadius: 7) + .foregroundStyle(.white) + + Label(selectionViewModel.season.displayTitle, systemImage: "chevron.down") + .fontWeight(.semibold) + .foregroundStyle(.black) + } + } + .frame(maxHeight: .infinity) + + Button { + guard let nextItem = manager.queue?.nextItem else { return } + manager.playNewItem(provider: nextItem) + manager.setPlaybackRequestStatus(status: .playing) + containerState.select(supplement: nil) + } label: { + ZStack { + RoundedRectangle(cornerRadius: 7) + .foregroundStyle(.white) + + Label("Next", systemImage: "forward.end.fill") + .fontWeight(.semibold) + .foregroundStyle(.black) + } + } + .frame(maxHeight: .infinity) + + Button { + guard let previousItem = manager.queue?.previousItem else { return } + manager.playNewItem(provider: previousItem) + manager.setPlaybackRequestStatus(status: .playing) + containerState.select(supplement: nil) + } label: { + ZStack { + RoundedRectangle(cornerRadius: 7) + .foregroundStyle(.white) + + Label("Previous", systemImage: "backward.end.fill") + .fontWeight(.semibold) + .foregroundStyle(.black) + } + } + .frame(maxHeight: .infinity) + } + .frame(width: 150) + .edgePadding(.horizontal) +// .padding(.trailing, safeAreaInsets.trailing) + } + } + } + + private struct EpisodePreview: View { + + @Default(.accentColor) + private var accentColor + + @Environment(\.isSelected) + private var isSelected: Bool + + let episode: BaseItemDto + + var body: some View { + ZStack { + Rectangle() + .fill(.complexSecondary) + + ImageView(episode.imageSource(.primary, maxWidth: 200)) + .failure { + SystemImageContentView(systemName: episode.systemImage) + } + } + .overlay { + if isSelected { + ContainerRelativeShape() + .stroke( + accentColor, + lineWidth: 8 + ) + .clipped() + } + } + .posterStyle(.landscape) + } + } + + private struct EpisodeDescription: View { + + let episode: BaseItemDto + + var body: some View { + DotHStack { + if let seasonEpisodeLabel = episode.seasonEpisodeLabel { + Text(seasonEpisodeLabel) + } + + if let runtime = episode.runTimeLabel { + Text(runtime) + } + } + .font(.caption) + .foregroundStyle(.secondary) + } + } + + private struct EpisodeRow: View { + + @Default(.accentColor) + private var accentColor + + @EnvironmentObject + private var manager: MediaPlayerManager + + let episode: BaseItemDto + let action: () -> Void + + private var isCurrentEpisode: Bool { + manager.item.id == episode.id + } + + var body: some View { + ListRow(insets: .init(horizontal: EdgeInsets.edgePadding)) { + EpisodePreview(episode: episode) + .frame(width: 110) + .padding(.vertical, 8) + } content: { + VStack(alignment: .leading, spacing: 5) { + Text(episode.displayTitle) + .font(.subheadline) + .fontWeight(.semibold) + .foregroundStyle(.primary) + .lineLimit(2) + .multilineTextAlignment(.leading) + + EpisodeDescription(episode: episode) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + .onSelect(perform: action) + .isSelected(isCurrentEpisode) + } + } + + private struct EpisodeButton: View { + + @Default(.accentColor) + private var accentColor + + @EnvironmentObject + private var manager: MediaPlayerManager + + let episode: BaseItemDto + let action: () -> Void + + private var isCurrentEpisode: Bool { + manager.item.id == episode.id + } + + var body: some View { + Button(action: action) { + VStack(alignment: .leading, spacing: 5) { + EpisodePreview(episode: episode) + + VStack(alignment: .leading, spacing: 5) { + Text(episode.displayTitle) + .font(.subheadline) + .fontWeight(.semibold) + .lineLimit(1) + .foregroundStyle(.primary) + .frame(height: 15) + + EpisodeDescription(episode: episode) + .frame(height: 20, alignment: .top) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .foregroundStyle(.primary, .secondary) + .isSelected(isCurrentEpisode) + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/Supplements/MediaChaptersSupplement.swift b/Shared/Objects/MediaPlayerManager/Supplements/MediaChaptersSupplement.swift new file mode 100644 index 00000000..d720f983 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/Supplements/MediaChaptersSupplement.swift @@ -0,0 +1,275 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import CollectionVGrid +import Defaults +import JellyfinAPI +import SwiftUI + +// TODO: current button +// TODO: scroll to current chapter on appear +// TODO: fix swapping between chapters on selection +// - little flicker at seconds boundary +// TODO: sometimes safe area for CollectionHStack doesn't trigger +// TODO: fix chapter image aspect fit +// - still be in a 1.77 box + +class MediaChaptersSupplement: ObservableObject, MediaPlayerSupplement { + + let chapters: [ChapterInfo.FullInfo] + let displayTitle: String = L10n.chapters + let id: String + + init(chapters: [ChapterInfo.FullInfo]) { + self.chapters = chapters + self.id = "Chapters-\(chapters.hashValue)" + } + + func isCurrentChapter(seconds: Duration, chapter: ChapterInfo.FullInfo) -> Bool { + guard let currentChapterIndex = chapters + .firstIndex(where: { + guard let startSeconds = $0.chapterInfo.startSeconds else { return false } + return startSeconds > seconds + } + ) else { return false } + + guard let currentChapter = chapters[safe: max(0, currentChapterIndex - 1)] else { return false } + return currentChapter.id == chapter.id + } + + var videoPlayerBody: some PlatformView { + ChapterOverlay(supplement: self) + } +} + +extension MediaChaptersSupplement { + + private struct ChapterOverlay: PlatformView { + + @Environment(\.safeAreaInsets) + private var safeAreaInsets: EdgeInsets + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + + @ObservedObject + private var supplement: MediaChaptersSupplement + + @StateObject + private var collectionHStackProxy: CollectionHStackProxy = .init() + + init(supplement: MediaChaptersSupplement) { + self.supplement = supplement + } + + private var chapters: [ChapterInfo.FullInfo] { + supplement.chapters + } + + private var currentChapter: ChapterInfo.FullInfo? { + chapters.first( + where: { + guard let startSeconds = $0.chapterInfo.startSeconds else { return false } + return startSeconds <= manager.seconds + } + ) + } + + var iOSView: some View { + CompactOrRegularView( + isCompact: containerState.isCompact + ) { + iOSCompactView + } regularView: { + iOSRegularView + } + } + + @ViewBuilder + private var iOSCompactView: some View { + // TODO: scroll to current chapter + CollectionVGrid( + uniqueElements: chapters, + layout: .columns( + 1, + insets: .init(top: 0, leading: 0, bottom: EdgeInsets.edgePadding, trailing: 0) + ) + ) { chapter, _ in + ChapterRow(chapter: chapter) { + guard let startSeconds = chapter.chapterInfo.startSeconds else { return } + manager.proxy?.setSeconds(startSeconds) + manager.setPlaybackRequestStatus(status: .playing) + } + .edgePadding(.horizontal) + .environmentObject(supplement) + } + } + + @ViewBuilder + private var iOSRegularView: some View { + // TODO: change to continuousLeadingEdge after + // layout inset fix in CollectionHStack + CollectionHStack( + uniqueElements: chapters + ) { chapter in + ChapterButton(chapter: chapter) { + guard let startSeconds = chapter.chapterInfo.startSeconds else { return } + manager.proxy?.setSeconds(startSeconds) + manager.setPlaybackRequestStatus(status: .playing) + } + .frame(height: 150) + .environmentObject(supplement) + } + .insets(horizontal: max(safeAreaInsets.leading, safeAreaInsets.trailing) + EdgeInsets.edgePadding) + .proxy(collectionHStackProxy) + .frame(height: 150) + .onAppear { + guard let currentChapter else { return } + collectionHStackProxy.scrollTo(id: currentChapter.id) + } + } + + var tvOSView: some View { EmptyView() } + } + + struct ChapterPreview: View { + + @Default(.accentColor) + private var accentColor + + @Environment(\.isSelected) + private var isSelected + + let chapter: ChapterInfo.FullInfo + + var body: some View { + PosterImage( + item: chapter, + type: .landscape, + contentMode: .fill + ) + .overlay { + if isSelected { + ContainerRelativeShape() + .stroke( + accentColor, + lineWidth: 8 + ) + .clipped() + } + } + .posterStyle(.landscape) + } + } + + struct ChapterContent: View { + + let chapter: ChapterInfo.FullInfo + + var body: some View { + VStack(alignment: .leading, spacing: 5) { + Text(chapter.chapterInfo.displayTitle) + .lineLimit(1) + .foregroundStyle(.white) + .frame(height: 15) + + Text(chapter.chapterInfo.startSeconds ?? .zero, format: .runtime) + .frame(height: 20) + .foregroundStyle(Color(UIColor.systemBlue)) + .padding(.horizontal, 4) + .background { + Color(.darkGray) + .opacity(0.2) + .cornerRadius(4) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .font(.subheadline) + .fontWeight(.semibold) + } + } + + struct ChapterRow: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var supplement: MediaChaptersSupplement + + @State + private var activeSeconds: Duration = .zero + + let chapter: ChapterInfo.FullInfo + let action: () -> Void + + private var isCurrentChapter: Bool { + supplement.isCurrentChapter( + seconds: activeSeconds, + chapter: chapter + ) + } + + var body: some View { + ListRow(insets: .init(horizontal: EdgeInsets.edgePadding)) { + ChapterPreview( + chapter: chapter + ) + .frame(width: 110) + .padding(.vertical, 8) + } content: { + ChapterContent(chapter: chapter) + } + .onSelect(perform: action) + .assign(manager.secondsBox.$value, to: $activeSeconds) + .isSelected(isCurrentChapter) + } + } + + struct ChapterButton: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var supplement: MediaChaptersSupplement + + @State + private var activeSeconds: Duration = .zero + + let chapter: ChapterInfo.FullInfo + let action: () -> Void + + private var isCurrentChapter: Bool { + supplement.isCurrentChapter( + seconds: activeSeconds, + chapter: chapter + ) + } + + var body: some View { + Button(action: action) { + VStack(alignment: .leading, spacing: 5) { + ChapterPreview( + chapter: chapter + ) + + ChapterContent( + chapter: chapter + ) + } + .font(.subheadline) + .fontWeight(.semibold) + } + .foregroundStyle(.primary, .secondary) + .assign(manager.secondsBox.$value, to: $activeSeconds) + .isSelected(isCurrentChapter) + } + } +} diff --git a/Shared/Objects/MediaPlayerManager/Supplements/MediaInfoSupplement.swift b/Shared/Objects/MediaPlayerManager/Supplements/MediaInfoSupplement.swift new file mode 100644 index 00000000..2eea836f --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/Supplements/MediaInfoSupplement.swift @@ -0,0 +1,177 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +// TODO: scroll if description too long + +struct MediaInfoSupplement: MediaPlayerSupplement { + + let displayTitle: String = "Info" + let item: BaseItemDto + + var id: String { + "MediaInfo-\(item.id ?? "any")" + } + + var videoPlayerBody: some PlatformView { + InfoOverlay(item: item) + } +} + +extension MediaInfoSupplement { + + private struct InfoOverlay: PlatformView { + + @Environment(\.safeAreaInsets) + private var safeAreaInsets: EdgeInsets + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + + let item: BaseItemDto + + @ViewBuilder + private var accessoryView: some View { + DotHStack { + if item.type == .episode, let seasonEpisodeLocator = item.seasonEpisodeLabel { + Text(seasonEpisodeLocator) + } else if let premiereYear = item.premiereDateYear { + Text(premiereYear) + } + + if let runtime = item.runTimeLabel { + Text(runtime) + } + + if let officialRating = item.officialRating { + Text(officialRating) + } + } + } + + @ViewBuilder + private var fromBeginningButton: some View { + Button("From Beginning", systemImage: "play.fill") { + manager.proxy?.setSeconds(.zero) + manager.setPlaybackRequestStatus(status: .playing) + containerState.select(supplement: nil) + } + #if os(iOS) + .buttonStyle(.material) + #endif + .frame(width: 200, height: 50) + .font(.subheadline) + .fontWeight(.semibold) + } + + // TODO: may need to be a layout for correct overview frame + // with scrolling if too long + var iOSView: some View { + CompactOrRegularView( + isCompact: containerState.isCompact + ) { + iOSCompactView + } regularView: { + iOSRegularView + } + .padding(.leading, safeAreaInsets.leading) + .padding(.trailing, safeAreaInsets.trailing) + .edgePadding(.horizontal) + .edgePadding(.bottom) + } + + @ViewBuilder + private var iOSCompactView: some View { + VStack(alignment: .leading) { + Group { + Text(item.displayTitle) + .fontWeight(.semibold) + .lineLimit(2) + .multilineTextAlignment(.leading) + + if let overview = item.overview { + Text(overview) + .font(.subheadline) + .fontWeight(.regular) + } + + accessoryView + .font(.caption) + .foregroundStyle(.secondary) + } + .allowsHitTesting(false) + + if !item.isLiveStream { + Button { + manager.proxy?.setSeconds(.zero) + manager.setPlaybackRequestStatus(status: .playing) + containerState.select(supplement: nil) + } label: { + ZStack { + RoundedRectangle(cornerRadius: 7) + .foregroundStyle(.white) + + Label("From Beginning", systemImage: "play.fill") + .fontWeight(.semibold) + .foregroundStyle(.black) + } + } + .frame(maxWidth: .infinity) + .frame(height: 40) + } + } + .frame(maxWidth: .infinity, alignment: .topLeading) + } + + @ViewBuilder + private var iOSRegularView: some View { + HStack(alignment: .bottom, spacing: EdgeInsets.edgePadding) { + // TODO: determine what to do with non-portrait (channel, home video) images + // - use aspect ratio? + PosterImage( + item: item, + type: item.preferredPosterDisplayType, + contentMode: .fit + ) + .environment(\.isOverComplexContent, true) + + VStack(alignment: .leading, spacing: 5) { + Text(item.displayTitle) + .font(.callout) + .fontWeight(.semibold) + .lineLimit(2) + .multilineTextAlignment(.leading) + + if let overview = item.overview { + Text(overview) + .font(.subheadline) + .fontWeight(.regular) + .lineLimit(3) + } + + accessoryView + .font(.caption) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, alignment: .leading) + + if !item.isLiveStream { + VStack { + fromBeginningButton + } + } + } + } + + var tvOSView: some View { EmptyView() } + } +} diff --git a/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerQueue.swift b/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerQueue.swift new file mode 100644 index 00000000..823d96c2 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerQueue.swift @@ -0,0 +1,91 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine + +@MainActor +protocol MediaPlayerQueue: ObservableObject, MediaPlayerObserver, MediaPlayerSupplement { + + var hasNextItem: Bool { get } + var hasPreviousItem: Bool { get } + + var nextItem: MediaPlayerItemProvider? { get } + var previousItem: MediaPlayerItemProvider? { get } + + var hasNextItemPublisher: Published.Publisher { get set } + var hasPreviousItemPublisher: Published.Publisher { get set } + var nextItemPublisher: Published.Publisher { get set } + var previousItemPublisher: Published.Publisher { get set } +} + +extension MediaPlayerQueue { + + var hasNextItem: Bool { + nextItem != nil + } + + var hasPreviousItem: Bool { + previousItem != nil + } +} + +class AnyMediaPlayerQueue: MediaPlayerQueue { + + @Published + var hasNextItem: Bool + @Published + var hasPreviousItem: Bool + + @Published + var nextItem: MediaPlayerItemProvider? + @Published + var previousItem: MediaPlayerItemProvider? + + lazy var hasNextItemPublisher: Published.Publisher = $hasNextItem + lazy var hasPreviousItemPublisher: Published.Publisher = $hasPreviousItem + lazy var nextItemPublisher: Published.Publisher = $nextItem + lazy var previousItemPublisher: Published.Publisher = $previousItem + + private var wrapped: any MediaPlayerQueue + + var displayTitle: String { + wrapped.displayTitle + } + + var id: String { + wrapped.id + } + + weak var manager: MediaPlayerManager? { + get { wrapped.manager } + set { wrapped.manager = newValue } + } + + private var cancellables: [AnyCancellable] = [] + + init(_ wrapped: some MediaPlayerQueue) { + self.wrapped = wrapped + self.hasNextItem = wrapped.hasNextItem + self.hasPreviousItem = wrapped.hasPreviousItem + + wrapped.hasNextItemPublisher + .assign(to: &$hasNextItem) + wrapped.hasPreviousItemPublisher + .assign(to: &$hasPreviousItem) + wrapped.nextItemPublisher + .assign(to: &$nextItem) + wrapped.previousItemPublisher + .assign(to: &$previousItem) + } + + var videoPlayerBody: some PlatformView { + wrapped + .videoPlayerBody + .eraseToAnyView() + } +} diff --git a/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerSupplement.swift b/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerSupplement.swift new file mode 100644 index 00000000..90213412 --- /dev/null +++ b/Shared/Objects/MediaPlayerManager/Supplements/MediaPlayerSupplement.swift @@ -0,0 +1,51 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import SwiftUI + +// TODO: fullscreen supplement styles + +@MainActor +protocol MediaPlayerSupplement: Displayable, Identifiable { + + associatedtype VideoPlayerBody: PlatformView + + var id: String { get } + + @MainActor + @ViewBuilder + var videoPlayerBody: Self.VideoPlayerBody { get } +} + +struct AnyMediaPlayerSupplement: MediaPlayerSupplement, Equatable { + + let supplement: any MediaPlayerSupplement + + var displayTitle: String { + supplement.displayTitle + } + + var id: String { + supplement.id + } + + var videoPlayerBody: some PlatformView { + supplement.videoPlayerBody + .eraseToAnyView() + } + + init(_ supplement: any MediaPlayerSupplement) { + self.supplement = supplement + } + + static func == (lhs: AnyMediaPlayerSupplement, rhs: AnyMediaPlayerSupplement) -> Bool { + lhs.id == rhs.id + } +} diff --git a/Shared/Objects/ObservedPublisher.swift b/Shared/Objects/ObservedPublisher.swift new file mode 100644 index 00000000..4d33f1b1 --- /dev/null +++ b/Shared/Objects/ObservedPublisher.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation + +/// Observable object property wrapper that allows observing +/// another `Publisher`. +@propertyWrapper +final class ObservedPublisher: ObservableObject { + + @Published + private(set) var wrappedValue: Value + + var projectedValue: AnyPublisher { + $wrappedValue + .eraseToAnyPublisher() + } + + private var cancellables = Set() + + init( + wrappedValue: Value, + observing publisher: P + ) where P.Output == Value, P.Failure == Never { + self.wrappedValue = wrappedValue + + publisher + .receive(on: DispatchQueue.main) + .sink { [weak self] newValue in + self?.wrappedValue = newValue + } + .store(in: &cancellables) + } + + static subscript( + _enclosingInstance instance: T, + wrapped wrappedKeyPath: KeyPath, + storage storageKeyPath: KeyPath> + ) -> Value where T.ObjectWillChangePublisher == ObservableObjectPublisher { + let wrapper = instance[keyPath: storageKeyPath] + + wrapper.objectWillChange + .sink { [weak instance] _ in + instance?.objectWillChange.send() + } + .store(in: &wrapper.cancellables) + + return wrapper.wrappedValue + } +} diff --git a/Shared/Objects/PanAction.swift b/Shared/Objects/PanAction.swift new file mode 100644 index 00000000..26ecb5a5 --- /dev/null +++ b/Shared/Objects/PanAction.swift @@ -0,0 +1,42 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension EnvironmentValues { + + @Entry + var panAction: PanAction? = nil +} + +struct PanAction { + + let action: ( + _ translation: CGPoint, + _ velocity: CGPoint, + _ location: CGPoint, + _ unitPoint: UnitPoint, + _ state: UIGestureRecognizer.State + ) -> Void + + func callAsFunction( + translation: CGPoint, + velocity: CGPoint, + location: CGPoint, + unitPoint: UnitPoint, + state: UIGestureRecognizer.State + ) { + action( + translation, + velocity, + location, + unitPoint, + state + ) + } +} diff --git a/Shared/Objects/PinchAction.swift b/Shared/Objects/PinchAction.swift new file mode 100644 index 00000000..ea5c3c9a --- /dev/null +++ b/Shared/Objects/PinchAction.swift @@ -0,0 +1,32 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension EnvironmentValues { + + @Entry + var pinchAction: PinchAction? = nil +} + +struct PinchAction { + + let action: ( + _ scale: CGFloat, + _ velocity: CGFloat, + _ state: UIGestureRecognizer.State + ) -> Void + + func callAsFunction( + scale: CGFloat, + velocity: CGFloat, + state: UIGestureRecognizer.State + ) { + action(scale, velocity, state) + } +} diff --git a/Shared/Objects/PokeIntervalTimer.swift b/Shared/Objects/PokeIntervalTimer.swift new file mode 100644 index 00000000..cdcfeffe --- /dev/null +++ b/Shared/Objects/PokeIntervalTimer.swift @@ -0,0 +1,47 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation + +class PokeIntervalTimer: ObservableObject, Publisher { + + typealias Output = Void + typealias Failure = Never + + private let defaultInterval: TimeInterval + private var delaySubject: PassthroughSubject = .init() + private var delayedWorkItem: DispatchWorkItem? + + init(defaultInterval: TimeInterval = 5) { + self.defaultInterval = defaultInterval + } + + func receive(subscriber: S) where S: Subscriber, S.Failure == Never, S.Input == Void { + delaySubject.receive(subscriber: subscriber) + } + + func poke(interval: TimeInterval? = nil) { + + let interval = interval ?? defaultInterval + + delayedWorkItem?.cancel() + + let newPollItem = DispatchWorkItem { + self.delaySubject.send(()) + } + + delayedWorkItem = newPollItem + + DispatchQueue.main.asyncAfter(deadline: .now() + interval, execute: newPollItem) + } + + func stop() { + delayedWorkItem?.cancel() + } +} diff --git a/Shared/Objects/Poster/AnyPoster.swift b/Shared/Objects/Poster/AnyPoster.swift new file mode 100644 index 00000000..d3140011 --- /dev/null +++ b/Shared/Objects/Poster/AnyPoster.swift @@ -0,0 +1,79 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import SwiftUI + +struct AnyPoster: Poster { + + let _poster: any Poster + + init(_ poster: any Poster) { + self._poster = poster + } + + var preferredPosterDisplayType: PosterDisplayType { + _poster.preferredPosterDisplayType + } + + var displayTitle: String { + _poster.displayTitle + } + + var unwrappedIDHashOrZero: Int { + _poster.unwrappedIDHashOrZero + } + + var subtitle: String? { + _poster.subtitle + } + + var systemImage: String { + _poster.systemImage + } + + var id: Int { + AnyHashable(_poster).hashValue + } + + func hash(into hasher: inout Hasher) { + hasher.combine(_poster.unwrappedIDHashOrZero) + hasher.combine(_poster.displayTitle) + hasher.combine(_poster.subtitle) + hasher.combine(_poster.systemImage) + } + + var showTitle: Bool { + _poster.showTitle + } + + func portraitImageSources(maxWidth: CGFloat?, quality: Int?) -> [ImageSource] { + _poster.portraitImageSources(maxWidth: maxWidth, quality: quality) + } + + func landscapeImageSources(maxWidth: CGFloat?, quality: Int?) -> [ImageSource] { + _poster.landscapeImageSources(maxWidth: maxWidth, quality: quality) + } + + func cinematicImageSources(maxWidth: CGFloat?, quality: Int?) -> [ImageSource] { + _poster.cinematicImageSources(maxWidth: maxWidth, quality: quality) + } + + func squareImageSources(maxWidth: CGFloat?, quality: Int?) -> [ImageSource] { + _poster.squareImageSources(maxWidth: maxWidth, quality: quality) + } + + func transform(image: Image) -> some View { + _poster.transform(image: image) + .eraseToAnyView() + } + + static func == (lhs: AnyPoster, rhs: AnyPoster) -> Bool { + lhs.id == rhs.id + } +} diff --git a/Shared/Objects/Poster/Poster.swift b/Shared/Objects/Poster/Poster.swift new file mode 100644 index 00000000..c8a1bc10 --- /dev/null +++ b/Shared/Objects/Poster/Poster.swift @@ -0,0 +1,100 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import SwiftUI + +// TODO: create environment for image sources +// - for when to have episode use series +// - pass in folder context +// - thumb +// - could remove cinematic, just use landscape + +/// A type that is displayed as a poster +protocol Poster: Displayable, Hashable, LibraryIdentifiable, SystemImageable { + + associatedtype ImageBody: View + + var preferredPosterDisplayType: PosterDisplayType { get } + + /// Optional subtitle when used as a poster + var subtitle: String? { get } + + /// Show the title + var showTitle: Bool { get } + + func portraitImageSources( + maxWidth: CGFloat?, + quality: Int? + ) -> [ImageSource] + + func landscapeImageSources( + maxWidth: CGFloat?, + quality: Int? + ) -> [ImageSource] + + func cinematicImageSources( + maxWidth: CGFloat?, + quality: Int? + ) -> [ImageSource] + + func squareImageSources( + maxWidth: CGFloat?, + quality: Int? + ) -> [ImageSource] + + func thumbImageSources() -> [ImageSource] + + @MainActor + @ViewBuilder + func transform(image: Image) -> ImageBody +} + +extension Poster { + + var subtitle: String? { + nil + } + + var showTitle: Bool { + true + } + + func portraitImageSources( + maxWidth: CGFloat? = nil, + quality: Int? = nil + ) -> [ImageSource] { + [] + } + + func landscapeImageSources( + maxWidth: CGFloat? = nil, + quality: Int? = nil + ) -> [ImageSource] { + [] + } + + func cinematicImageSources( + maxWidth: CGFloat?, + quality: Int? = nil + ) -> [ImageSource] { + [] + } + + func squareImageSources( + maxWidth: CGFloat?, + quality: Int? = nil + ) -> [ImageSource] { + [] + } + + // TODO: change to observe preferred poster display type + func thumbImageSources() -> [ImageSource] { + [] + } +} diff --git a/Shared/Objects/ToastProxy.swift b/Shared/Objects/ToastProxy.swift new file mode 100644 index 00000000..6725ec2d --- /dev/null +++ b/Shared/Objects/ToastProxy.swift @@ -0,0 +1,69 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import SwiftUI + +@propertyWrapper +struct Toaster: DynamicProperty { + + @EnvironmentObject + private var toastProxy: ToastProxy + + var wrappedValue: ToastProxy { + toastProxy + } +} + +@MainActor +class ToastProxy: ObservableObject { + + @Published + var isPresenting: Bool = false + @Published + private(set) var systemName: String? = nil + @Published + private(set) var title: Text = Text("") +// @Published +// private(set) var messageID: String = "" + + private let pokeTimer = PokeIntervalTimer(defaultInterval: 2) + private var pokeCancellable: AnyCancellable? + + init() { + pokeCancellable = pokeTimer + .sink { + withAnimation { + self.isPresenting = false + } + } + } + + func present(_ title: String, systemName: String? = nil) { + present(Text(title), systemName: systemName) + } + + func present(_ title: Text, systemName: String? = nil) { + self.title = title + self.systemName = systemName + + poke(equalsPrevious: title == self.title) + } + + private func poke(equalsPrevious: Bool) { +// if equalsPrevious { +// messageID = UUID().uuidString +// } + + withAnimation(.spring) { + isPresenting = true + } + + pokeTimer.poke() + } +} diff --git a/Shared/Objects/VideoPlayerType/VideoPlayerType+jellypig.swift b/Shared/Objects/VideoPlayerType/VideoPlayerType+jellyflood.swift similarity index 100% rename from Shared/Objects/VideoPlayerType/VideoPlayerType+jellypig.swift rename to Shared/Objects/VideoPlayerType/VideoPlayerType+jellyflood.swift diff --git a/Shared/Objects/XtreamServer.swift b/Shared/Objects/XtreamServer.swift new file mode 100644 index 00000000..f0665207 --- /dev/null +++ b/Shared/Objects/XtreamServer.swift @@ -0,0 +1,67 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation + +/// Represents an Xtream Codes server configuration +struct XtreamServer: Codable, Hashable, Identifiable { + + var id: String + var name: String + var url: URL + var username: String + var password: String + + init( + id: String = UUID().uuidString, + name: String, + url: URL, + username: String, + password: String + ) { + self.id = id + self.name = name + self.url = url + self.username = username + self.password = password + } + + /// Base API URL for this server + var apiURL: URL { + url.appendingPathComponent("player_api.php") + } + + /// Construct authenticated API URL with username and password + func authenticatedURL(parameters: [URLQueryItem] = []) -> URL? { + var components = URLComponents(url: apiURL, resolvingAgainstBaseURL: false) + + var queryItems = [ + URLQueryItem(name: "username", value: username), + URLQueryItem(name: "password", value: password), + ] + + queryItems.append(contentsOf: parameters) + components?.queryItems = queryItems + + return components?.url + } +} + +// MARK: - Defaults Bridge + +extension XtreamServer: Defaults.Serializable {} + +extension Defaults.Keys { + + /// Current active Xtream server + static let currentXtreamServerID = Key("currentXtreamServerID", default: nil) + + /// All saved Xtream servers + static let xtreamServers = Key<[XtreamServer]>("xtreamServers", default: []) +} diff --git a/Shared/Services/LogManager.swift b/Shared/Services/LogManager.swift index 0e8f7159..0c14635d 100644 --- a/Shared/Services/LogManager.swift +++ b/Shared/Services/LogManager.swift @@ -14,7 +14,7 @@ import Pulse // TODO: cleanup extension Container { - var logService: Factory { self { Logger(label: "org.ashik.jellypig") }.singleton } + var logService: Factory { self { Logger(label: "se.ashik.jellyflood") }.singleton } var pulseNetworkLogger: Factory { self { diff --git a/Shared/Services/SwiftfinDefaults 2.swift b/Shared/Services/SwiftfinDefaults 2.swift new file mode 100644 index 00000000..e0c5ec67 --- /dev/null +++ b/Shared/Services/SwiftfinDefaults 2.swift @@ -0,0 +1,268 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import SwiftUI +import UIKit + +// TODO: organize +// TODO: all user settings could be moved to `StoredValues`? + +// Note: Only use Defaults for basic single-value settings. +// For larger data types and collections, use `StoredValue` instead. + +// MARK: Suites + +extension UserDefaults { + + // MARK: App + + /// Settings that should apply to the app + static let appSuite = UserDefaults(suiteName: "swiftfinApp")! + + // MARK: Usser + + // TODO: the Factory resolver cannot be used because it would cause freezes, but + // the Defaults value should always be in sync with the latest user and what + // views properly expect. However, this feels like a hack and should be changed? + static var currentUserSuite: UserDefaults { + switch Defaults[.lastSignedInUserID] { + case .signedOut: + return userSuite(id: "default") + case let .signedIn(userID): + return userSuite(id: userID) + } + } + + static func userSuite(id: String) -> UserDefaults { + UserDefaults(suiteName: id)! + } +} + +private extension Defaults.Keys { + + static func AppKey(_ name: String) -> Key { + Key(name, suite: .appSuite) + } + + static func AppKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static func UserKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .currentUserSuite) + } +} + +// MARK: App + +extension Defaults.Keys { + + /// The _real_ accent color key to be used. + /// + /// This is set externally whenever the app or user accent colors change, + /// depending on the current app state. + static var accentColor: Key = AppKey("accentColor", default: .jellyfinPurple) + + /// The _real_ appearance key to be used. + /// + /// This is set externally whenever the app or user appearances change, + /// depending on the current app state. + static let appearance: Key = AppKey("appearance", default: .system) + + /// The appearance default for non-user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static let appAppearance: Key = AppKey("appAppearance", default: .system) + + static let backgroundSignOutInterval: Key = AppKey("backgroundSignOutInterval", default: 3600) + static let backgroundTimeStamp: Key = AppKey("backgroundTimeStamp", default: Date.now) + static let lastSignedInUserID: Key = AppKey("lastSignedInUserID", default: .signedOut) + + static let selectUserDisplayType: Key = AppKey("selectUserDisplayType", default: .grid) + static let selectUserServerSelection: Key = AppKey("selectUserServerSelection", default: .all) + static let selectUserAllServersSplashscreen: Key = AppKey("selectUserAllServersSplashscreen", default: .all) + static let selectUserUseSplashscreen: Key = AppKey("selectUserUseSplashscreen", default: true) + + static let signOutOnBackground: Key = AppKey("signOutOnBackground", default: true) + static let signOutOnClose: Key = AppKey("signOutOnClose", default: false) +} + +// MARK: User + +extension Defaults.Keys { + + /// The accent color default for user contexts. + /// Only use for `set`, use `accentColor` for `get`. + static var userAccentColor: Key { UserKey("userAccentColor", default: .jellyfinPurple) } + + /// The appearance default for user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static var userAppearance: Key { UserKey("userAppearance", default: .system) } + + enum Customization { + + static let itemViewType: Key = UserKey("itemViewType", default: .compactLogo) + + static let showPosterLabels: Key = UserKey("showPosterLabels", default: true) + static let nextUpPosterType: Key = UserKey("nextUpPosterType", default: .portrait) + static let recentlyAddedPosterType: Key = UserKey("recentlyAddedPosterType", default: .portrait) + static let latestInLibraryPosterType: Key = UserKey("latestInLibraryPosterType", default: .portrait) + static let shouldShowMissingSeasons: Key = UserKey("shouldShowMissingSeasons", default: true) + static let shouldShowMissingEpisodes: Key = UserKey("shouldShowMissingEpisodes", default: true) + static let similarPosterType: Key = UserKey("similarPosterType", default: .portrait) + + // TODO: have search poster type by types of items if applicable + static let searchPosterType: Key = UserKey("searchPosterType", default: .portrait) + + enum CinematicItemViewType { + + static let usePrimaryImage: Key = UserKey("cinematicItemViewTypeUsePrimaryImage", default: false) + } + + enum Episodes { + + static let useSeriesLandscapeBackdrop: Key = UserKey("useSeriesBackdrop", default: true) + } + + enum Indicators { + + static let showFavorited: Key = UserKey("showFavoritedIndicator", default: true) + static let showProgress: Key = UserKey("showProgressIndicator", default: true) + static let showUnplayed: Key = UserKey("showUnplayedIndicator", default: true) + static let showPlayed: Key = UserKey("showPlayedIndicator", default: true) + } + + enum Library { + + static let cinematicBackground: Key = UserKey("libraryCinematicBackground", default: true) + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "libraryEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + static let letterPickerEnabled: Key = UserKey("letterPickerEnabled", default: false) + static let letterPickerOrientation: Key = .init( + "letterPickerOrientation", default: .trailing + ) + static let displayType: Key = UserKey("libraryViewType", default: .grid) + static let posterType: Key = UserKey("libraryPosterType", default: .portrait) + static let listColumnCount: Key = UserKey("listColumnCount", default: 1) + static let randomImage: Key = UserKey("libraryRandomImage", default: true) + static let showFavorites: Key = UserKey("libraryShowFavorites", default: true) + + static let rememberLayout: Key = UserKey("libraryRememberLayout", default: false) + static let rememberSort: Key = UserKey("libraryRememberSort", default: false) + } + + enum Home { + static let showRecentlyAdded: Key = UserKey("showRecentlyAdded", default: true) + static let resumeNextUp: Key = UserKey("homeResumeNextUp", default: false) + static let maxNextUp: Key = UserKey( + "homeMaxNextUp", + default: 366 * 86400 + ) + } + + enum Search { + + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "searchEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + } + } + + enum VideoPlayer { + + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .max) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let autoPlayEnabled: Key = UserKey("autoPlayEnabled", default: true) + static let barActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "barActionButtons", + default: VideoPlayerActionButton.defaultBarActionButtons + ) + static let jumpBackwardInterval: Key = UserKey("jumpBackwardLength", default: .fifteen) + static let jumpForwardInterval: Key = UserKey("jumpForwardLength", default: .fifteen) + static let menuActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "menuActionButtons", + default: VideoPlayerActionButton.defaultMenuActionButtons + ) + static let resumeOffset: Key = UserKey("resumeOffset", default: 0) + static let videoPlayerType: Key = UserKey("videoPlayerType", default: .swiftfin) + + enum Gesture { + + static let horizontalPanAction: Key = UserKey("videoPlayerHorizontalPanGesture", default: .none) + static let horizontalSwipeAction: Key = UserKey("videoPlayerhorizontalSwipeAction", default: .none) + static let longPressAction: Key = UserKey("videoPlayerLongPressGesture", default: .gestureLock) + static let multiTapGesture: Key = UserKey("videoPlayerMultiTapGesture", default: .none) + static let doubleTouchGesture: Key = UserKey("videoPlayerDoubleTouchGesture", default: .none) + static let pinchGesture: Key = UserKey("videoPlayerSwipeGesture", default: .aspectFill) + static let verticalPanLeftAction: Key = UserKey("videoPlayerverticalPanLeftAction", default: .none) + static let verticalPanRightAction: Key = UserKey("videoPlayerverticalPanRightAction", default: .none) + } + + enum Overlay { + + static let chapterSlider: Key = UserKey("chapterSlider", default: true) + + // Timestamp + static let trailingTimestampType: Key = UserKey("trailingTimestamp", default: .timeLeft) + } + + enum Playback { + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .auto) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let compatibilityMode: Key = UserKey("compatibilityMode", default: .auto) + static let customDeviceProfileAction: Key = UserKey("customDeviceProfileAction", default: .add) + static let rates: Key<[Float]> = UserKey("videoPlayerPlaybackRates", default: [0.5, 1.0, 1.25, 1.5, 2.0]) + } + + // TODO: transition into a SubtitleConfiguration instead of multiple types + enum Subtitle { + + static let subtitleColor: Key = UserKey("subtitleColor", default: .white) + static let subtitleFontName: Key = UserKey("subtitleFontName", default: UIFont.systemFont(ofSize: 14).fontName) + static let subtitleSize: Key = UserKey("subtitleSize", default: 9) + } + + enum Transition { + static let pauseOnBackground: Key = UserKey("playInBackground", default: true) + } + } + + // Experimental settings + enum Experimental { + + static let downloads: Key = UserKey("experimentalDownloads", default: false) + } + + // tvos specific + static let downActionShowsMenu: Key = UserKey("downActionShowsMenu", default: true) + static let confirmClose: Key = UserKey("confirmClose", default: false) +} + +// MARK: Debug + +#if DEBUG + +extension UserDefaults { + + static let debugSuite = UserDefaults(suiteName: "swiftfinstore-debug-defaults")! +} + +extension Defaults.Keys { + + static func DebugKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static let sendProgressReports: Key = DebugKey("sendProgressReports", default: true) +} +#endif diff --git a/Shared/Services/SwiftfinDefaults.swift b/Shared/Services/SwiftfinDefaults.swift new file mode 100644 index 00000000..e0c5ec67 --- /dev/null +++ b/Shared/Services/SwiftfinDefaults.swift @@ -0,0 +1,268 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import SwiftUI +import UIKit + +// TODO: organize +// TODO: all user settings could be moved to `StoredValues`? + +// Note: Only use Defaults for basic single-value settings. +// For larger data types and collections, use `StoredValue` instead. + +// MARK: Suites + +extension UserDefaults { + + // MARK: App + + /// Settings that should apply to the app + static let appSuite = UserDefaults(suiteName: "swiftfinApp")! + + // MARK: Usser + + // TODO: the Factory resolver cannot be used because it would cause freezes, but + // the Defaults value should always be in sync with the latest user and what + // views properly expect. However, this feels like a hack and should be changed? + static var currentUserSuite: UserDefaults { + switch Defaults[.lastSignedInUserID] { + case .signedOut: + return userSuite(id: "default") + case let .signedIn(userID): + return userSuite(id: userID) + } + } + + static func userSuite(id: String) -> UserDefaults { + UserDefaults(suiteName: id)! + } +} + +private extension Defaults.Keys { + + static func AppKey(_ name: String) -> Key { + Key(name, suite: .appSuite) + } + + static func AppKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static func UserKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .currentUserSuite) + } +} + +// MARK: App + +extension Defaults.Keys { + + /// The _real_ accent color key to be used. + /// + /// This is set externally whenever the app or user accent colors change, + /// depending on the current app state. + static var accentColor: Key = AppKey("accentColor", default: .jellyfinPurple) + + /// The _real_ appearance key to be used. + /// + /// This is set externally whenever the app or user appearances change, + /// depending on the current app state. + static let appearance: Key = AppKey("appearance", default: .system) + + /// The appearance default for non-user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static let appAppearance: Key = AppKey("appAppearance", default: .system) + + static let backgroundSignOutInterval: Key = AppKey("backgroundSignOutInterval", default: 3600) + static let backgroundTimeStamp: Key = AppKey("backgroundTimeStamp", default: Date.now) + static let lastSignedInUserID: Key = AppKey("lastSignedInUserID", default: .signedOut) + + static let selectUserDisplayType: Key = AppKey("selectUserDisplayType", default: .grid) + static let selectUserServerSelection: Key = AppKey("selectUserServerSelection", default: .all) + static let selectUserAllServersSplashscreen: Key = AppKey("selectUserAllServersSplashscreen", default: .all) + static let selectUserUseSplashscreen: Key = AppKey("selectUserUseSplashscreen", default: true) + + static let signOutOnBackground: Key = AppKey("signOutOnBackground", default: true) + static let signOutOnClose: Key = AppKey("signOutOnClose", default: false) +} + +// MARK: User + +extension Defaults.Keys { + + /// The accent color default for user contexts. + /// Only use for `set`, use `accentColor` for `get`. + static var userAccentColor: Key { UserKey("userAccentColor", default: .jellyfinPurple) } + + /// The appearance default for user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static var userAppearance: Key { UserKey("userAppearance", default: .system) } + + enum Customization { + + static let itemViewType: Key = UserKey("itemViewType", default: .compactLogo) + + static let showPosterLabels: Key = UserKey("showPosterLabels", default: true) + static let nextUpPosterType: Key = UserKey("nextUpPosterType", default: .portrait) + static let recentlyAddedPosterType: Key = UserKey("recentlyAddedPosterType", default: .portrait) + static let latestInLibraryPosterType: Key = UserKey("latestInLibraryPosterType", default: .portrait) + static let shouldShowMissingSeasons: Key = UserKey("shouldShowMissingSeasons", default: true) + static let shouldShowMissingEpisodes: Key = UserKey("shouldShowMissingEpisodes", default: true) + static let similarPosterType: Key = UserKey("similarPosterType", default: .portrait) + + // TODO: have search poster type by types of items if applicable + static let searchPosterType: Key = UserKey("searchPosterType", default: .portrait) + + enum CinematicItemViewType { + + static let usePrimaryImage: Key = UserKey("cinematicItemViewTypeUsePrimaryImage", default: false) + } + + enum Episodes { + + static let useSeriesLandscapeBackdrop: Key = UserKey("useSeriesBackdrop", default: true) + } + + enum Indicators { + + static let showFavorited: Key = UserKey("showFavoritedIndicator", default: true) + static let showProgress: Key = UserKey("showProgressIndicator", default: true) + static let showUnplayed: Key = UserKey("showUnplayedIndicator", default: true) + static let showPlayed: Key = UserKey("showPlayedIndicator", default: true) + } + + enum Library { + + static let cinematicBackground: Key = UserKey("libraryCinematicBackground", default: true) + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "libraryEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + static let letterPickerEnabled: Key = UserKey("letterPickerEnabled", default: false) + static let letterPickerOrientation: Key = .init( + "letterPickerOrientation", default: .trailing + ) + static let displayType: Key = UserKey("libraryViewType", default: .grid) + static let posterType: Key = UserKey("libraryPosterType", default: .portrait) + static let listColumnCount: Key = UserKey("listColumnCount", default: 1) + static let randomImage: Key = UserKey("libraryRandomImage", default: true) + static let showFavorites: Key = UserKey("libraryShowFavorites", default: true) + + static let rememberLayout: Key = UserKey("libraryRememberLayout", default: false) + static let rememberSort: Key = UserKey("libraryRememberSort", default: false) + } + + enum Home { + static let showRecentlyAdded: Key = UserKey("showRecentlyAdded", default: true) + static let resumeNextUp: Key = UserKey("homeResumeNextUp", default: false) + static let maxNextUp: Key = UserKey( + "homeMaxNextUp", + default: 366 * 86400 + ) + } + + enum Search { + + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "searchEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + } + } + + enum VideoPlayer { + + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .max) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let autoPlayEnabled: Key = UserKey("autoPlayEnabled", default: true) + static let barActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "barActionButtons", + default: VideoPlayerActionButton.defaultBarActionButtons + ) + static let jumpBackwardInterval: Key = UserKey("jumpBackwardLength", default: .fifteen) + static let jumpForwardInterval: Key = UserKey("jumpForwardLength", default: .fifteen) + static let menuActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "menuActionButtons", + default: VideoPlayerActionButton.defaultMenuActionButtons + ) + static let resumeOffset: Key = UserKey("resumeOffset", default: 0) + static let videoPlayerType: Key = UserKey("videoPlayerType", default: .swiftfin) + + enum Gesture { + + static let horizontalPanAction: Key = UserKey("videoPlayerHorizontalPanGesture", default: .none) + static let horizontalSwipeAction: Key = UserKey("videoPlayerhorizontalSwipeAction", default: .none) + static let longPressAction: Key = UserKey("videoPlayerLongPressGesture", default: .gestureLock) + static let multiTapGesture: Key = UserKey("videoPlayerMultiTapGesture", default: .none) + static let doubleTouchGesture: Key = UserKey("videoPlayerDoubleTouchGesture", default: .none) + static let pinchGesture: Key = UserKey("videoPlayerSwipeGesture", default: .aspectFill) + static let verticalPanLeftAction: Key = UserKey("videoPlayerverticalPanLeftAction", default: .none) + static let verticalPanRightAction: Key = UserKey("videoPlayerverticalPanRightAction", default: .none) + } + + enum Overlay { + + static let chapterSlider: Key = UserKey("chapterSlider", default: true) + + // Timestamp + static let trailingTimestampType: Key = UserKey("trailingTimestamp", default: .timeLeft) + } + + enum Playback { + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .auto) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let compatibilityMode: Key = UserKey("compatibilityMode", default: .auto) + static let customDeviceProfileAction: Key = UserKey("customDeviceProfileAction", default: .add) + static let rates: Key<[Float]> = UserKey("videoPlayerPlaybackRates", default: [0.5, 1.0, 1.25, 1.5, 2.0]) + } + + // TODO: transition into a SubtitleConfiguration instead of multiple types + enum Subtitle { + + static let subtitleColor: Key = UserKey("subtitleColor", default: .white) + static let subtitleFontName: Key = UserKey("subtitleFontName", default: UIFont.systemFont(ofSize: 14).fontName) + static let subtitleSize: Key = UserKey("subtitleSize", default: 9) + } + + enum Transition { + static let pauseOnBackground: Key = UserKey("playInBackground", default: true) + } + } + + // Experimental settings + enum Experimental { + + static let downloads: Key = UserKey("experimentalDownloads", default: false) + } + + // tvos specific + static let downActionShowsMenu: Key = UserKey("downActionShowsMenu", default: true) + static let confirmClose: Key = UserKey("confirmClose", default: false) +} + +// MARK: Debug + +#if DEBUG + +extension UserDefaults { + + static let debugSuite = UserDefaults(suiteName: "swiftfinstore-debug-defaults")! +} + +extension Defaults.Keys { + + static func DebugKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static let sendProgressReports: Key = DebugKey("sendProgressReports", default: true) +} +#endif diff --git a/Shared/Services/XtreamAPIClient.swift b/Shared/Services/XtreamAPIClient.swift new file mode 100644 index 00000000..419c29ff --- /dev/null +++ b/Shared/Services/XtreamAPIClient.swift @@ -0,0 +1,214 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Xtream Codes API Client for Live TV and VOD streams +class XtreamAPIClient { + + private let server: XtreamServer + + init(server: XtreamServer) { + self.server = server + } + + // MARK: - Authentication + + /// Server info response from Xtream API + struct ServerInfo: Codable { + let userInfo: UserInfo? + let serverInfo: ServerDetails? + + struct UserInfo: Codable { + let username: String? + let password: String? + let message: String? + let auth: Int? + let status: String? + let exp_date: String? + let isTrial: String? + let activeCons: String? + let createdAt: String? + let maxConnections: String? + + enum CodingKeys: String, CodingKey { + case username + case password + case message + case auth + case status + case exp_date + case isTrial = "is_trial" + case activeCons = "active_cons" + case createdAt = "created_at" + case maxConnections = "max_connections" + } + } + + struct ServerDetails: Codable { + let url: String? + let port: String? + let httpsPort: String? + let serverProtocol: String? + let rtmpPort: String? + let timezone: String? + let timestampNow: Int? + let timeNow: String? + + enum CodingKeys: String, CodingKey { + case url + case port + case timezone + case httpsPort = "https_port" + case serverProtocol = "server_protocol" + case rtmpPort = "rtmp_port" + case timestampNow = "timestamp_now" + case timeNow = "time_now" + } + } + + enum CodingKeys: String, CodingKey { + case userInfo = "user_info" + case serverInfo = "server_info" + } + } + + /// Test connection to Xtream server and authenticate + func testConnection() async throws -> ServerInfo { + guard let url = server.authenticatedURL(parameters: []) else { + throw XtreamAPIError.invalidURL + } + + var request = URLRequest(url: url) + request.httpMethod = "GET" + request.timeoutInterval = 10 + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw XtreamAPIError.invalidResponse + } + + guard httpResponse.statusCode == 200 else { + throw XtreamAPIError.httpError(statusCode: httpResponse.statusCode) + } + + let serverInfo = try JSONDecoder().decode(ServerInfo.self, from: data) + + // Check if authentication was successful + if let auth = serverInfo.userInfo?.auth, auth == 0 { + throw XtreamAPIError.authenticationFailed(message: serverInfo.userInfo?.message ?? "Authentication failed") + } + + return serverInfo + } + + // MARK: - Live Channels + + struct LiveCategory: Codable, Identifiable { + let categoryId: String + let categoryName: String + let parentId: Int? + + var id: String { categoryId } + + enum CodingKeys: String, CodingKey { + case categoryId = "category_id" + case categoryName = "category_name" + case parentId = "parent_id" + } + } + + struct LiveChannel: Codable, Identifiable { + let num: Int? + let name: String? + let streamType: String? + let streamId: Int? + let streamIcon: String? + let epgChannelId: String? + let added: String? + let categoryId: String? + let customSid: String? + let tvArchive: Int? + let directSource: String? + let tvArchiveDuration: Int? + + var id: Int { streamId ?? 0 } + + enum CodingKeys: String, CodingKey { + case num + case name + case added + case streamType = "stream_type" + case streamId = "stream_id" + case streamIcon = "stream_icon" + case epgChannelId = "epg_channel_id" + case categoryId = "category_id" + case customSid = "custom_sid" + case tvArchive = "tv_archive" + case directSource = "direct_source" + case tvArchiveDuration = "tv_archive_duration" + } + } + + /// Get live TV categories + func getLiveCategories() async throws -> [LiveCategory] { + guard let url = server.authenticatedURL(parameters: [ + URLQueryItem(name: "action", value: "get_live_categories"), + ]) else { + throw XtreamAPIError.invalidURL + } + + let (data, _) = try await URLSession.shared.data(from: url) + return try JSONDecoder().decode([LiveCategory].self, from: data) + } + + /// Get live TV channels + func getLiveChannels(categoryId: String? = nil) async throws -> [LiveChannel] { + var parameters = [URLQueryItem(name: "action", value: "get_live_streams")] + + if let categoryId { + parameters.append(URLQueryItem(name: "category_id", value: categoryId)) + } + + guard let url = server.authenticatedURL(parameters: parameters) else { + throw XtreamAPIError.invalidURL + } + + let (data, _) = try await URLSession.shared.data(from: url) + return try JSONDecoder().decode([LiveChannel].self, from: data) + } + + /// Get live stream URL for a channel + func getLiveStreamURL(streamId: Int) -> URL? { + let urlString = "\(server.url.absoluteString)/live/\(server.username)/\(server.password)/\(streamId).ts" + return URL(string: urlString) + } +} + +// MARK: - Errors + +enum XtreamAPIError: LocalizedError { + case invalidURL + case invalidResponse + case httpError(statusCode: Int) + case authenticationFailed(message: String) + + var errorDescription: String? { + switch self { + case .invalidURL: + return "Invalid Xtream server URL" + case .invalidResponse: + return "Invalid response from Xtream server" + case let .httpError(statusCode): + return "HTTP error: \(statusCode)" + case let .authenticationFailed(message): + return "Authentication failed: \(message)" + } + } +} diff --git a/Shared/Services/jellypigdefaults.swift b/Shared/Services/jellyflooddefaults.swift similarity index 100% rename from Shared/Services/jellypigdefaults.swift rename to Shared/Services/jellyflooddefaults.swift diff --git a/Shared/Services/jellypigdefaults 2.swift b/Shared/Services/jellypigdefaults 2.swift new file mode 100644 index 00000000..e0c5ec67 --- /dev/null +++ b/Shared/Services/jellypigdefaults 2.swift @@ -0,0 +1,268 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import SwiftUI +import UIKit + +// TODO: organize +// TODO: all user settings could be moved to `StoredValues`? + +// Note: Only use Defaults for basic single-value settings. +// For larger data types and collections, use `StoredValue` instead. + +// MARK: Suites + +extension UserDefaults { + + // MARK: App + + /// Settings that should apply to the app + static let appSuite = UserDefaults(suiteName: "swiftfinApp")! + + // MARK: Usser + + // TODO: the Factory resolver cannot be used because it would cause freezes, but + // the Defaults value should always be in sync with the latest user and what + // views properly expect. However, this feels like a hack and should be changed? + static var currentUserSuite: UserDefaults { + switch Defaults[.lastSignedInUserID] { + case .signedOut: + return userSuite(id: "default") + case let .signedIn(userID): + return userSuite(id: userID) + } + } + + static func userSuite(id: String) -> UserDefaults { + UserDefaults(suiteName: id)! + } +} + +private extension Defaults.Keys { + + static func AppKey(_ name: String) -> Key { + Key(name, suite: .appSuite) + } + + static func AppKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static func UserKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .currentUserSuite) + } +} + +// MARK: App + +extension Defaults.Keys { + + /// The _real_ accent color key to be used. + /// + /// This is set externally whenever the app or user accent colors change, + /// depending on the current app state. + static var accentColor: Key = AppKey("accentColor", default: .jellyfinPurple) + + /// The _real_ appearance key to be used. + /// + /// This is set externally whenever the app or user appearances change, + /// depending on the current app state. + static let appearance: Key = AppKey("appearance", default: .system) + + /// The appearance default for non-user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static let appAppearance: Key = AppKey("appAppearance", default: .system) + + static let backgroundSignOutInterval: Key = AppKey("backgroundSignOutInterval", default: 3600) + static let backgroundTimeStamp: Key = AppKey("backgroundTimeStamp", default: Date.now) + static let lastSignedInUserID: Key = AppKey("lastSignedInUserID", default: .signedOut) + + static let selectUserDisplayType: Key = AppKey("selectUserDisplayType", default: .grid) + static let selectUserServerSelection: Key = AppKey("selectUserServerSelection", default: .all) + static let selectUserAllServersSplashscreen: Key = AppKey("selectUserAllServersSplashscreen", default: .all) + static let selectUserUseSplashscreen: Key = AppKey("selectUserUseSplashscreen", default: true) + + static let signOutOnBackground: Key = AppKey("signOutOnBackground", default: true) + static let signOutOnClose: Key = AppKey("signOutOnClose", default: false) +} + +// MARK: User + +extension Defaults.Keys { + + /// The accent color default for user contexts. + /// Only use for `set`, use `accentColor` for `get`. + static var userAccentColor: Key { UserKey("userAccentColor", default: .jellyfinPurple) } + + /// The appearance default for user contexts. + /// /// Only use for `set`, use `appearance` for `get`. + static var userAppearance: Key { UserKey("userAppearance", default: .system) } + + enum Customization { + + static let itemViewType: Key = UserKey("itemViewType", default: .compactLogo) + + static let showPosterLabels: Key = UserKey("showPosterLabels", default: true) + static let nextUpPosterType: Key = UserKey("nextUpPosterType", default: .portrait) + static let recentlyAddedPosterType: Key = UserKey("recentlyAddedPosterType", default: .portrait) + static let latestInLibraryPosterType: Key = UserKey("latestInLibraryPosterType", default: .portrait) + static let shouldShowMissingSeasons: Key = UserKey("shouldShowMissingSeasons", default: true) + static let shouldShowMissingEpisodes: Key = UserKey("shouldShowMissingEpisodes", default: true) + static let similarPosterType: Key = UserKey("similarPosterType", default: .portrait) + + // TODO: have search poster type by types of items if applicable + static let searchPosterType: Key = UserKey("searchPosterType", default: .portrait) + + enum CinematicItemViewType { + + static let usePrimaryImage: Key = UserKey("cinematicItemViewTypeUsePrimaryImage", default: false) + } + + enum Episodes { + + static let useSeriesLandscapeBackdrop: Key = UserKey("useSeriesBackdrop", default: true) + } + + enum Indicators { + + static let showFavorited: Key = UserKey("showFavoritedIndicator", default: true) + static let showProgress: Key = UserKey("showProgressIndicator", default: true) + static let showUnplayed: Key = UserKey("showUnplayedIndicator", default: true) + static let showPlayed: Key = UserKey("showPlayedIndicator", default: true) + } + + enum Library { + + static let cinematicBackground: Key = UserKey("libraryCinematicBackground", default: true) + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "libraryEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + static let letterPickerEnabled: Key = UserKey("letterPickerEnabled", default: false) + static let letterPickerOrientation: Key = .init( + "letterPickerOrientation", default: .trailing + ) + static let displayType: Key = UserKey("libraryViewType", default: .grid) + static let posterType: Key = UserKey("libraryPosterType", default: .portrait) + static let listColumnCount: Key = UserKey("listColumnCount", default: 1) + static let randomImage: Key = UserKey("libraryRandomImage", default: true) + static let showFavorites: Key = UserKey("libraryShowFavorites", default: true) + + static let rememberLayout: Key = UserKey("libraryRememberLayout", default: false) + static let rememberSort: Key = UserKey("libraryRememberSort", default: false) + } + + enum Home { + static let showRecentlyAdded: Key = UserKey("showRecentlyAdded", default: true) + static let resumeNextUp: Key = UserKey("homeResumeNextUp", default: false) + static let maxNextUp: Key = UserKey( + "homeMaxNextUp", + default: 366 * 86400 + ) + } + + enum Search { + + static let enabledDrawerFilters: Key<[ItemFilterType]> = UserKey( + "searchEnabledDrawerFilters", + default: ItemFilterType.allCases + ) + } + } + + enum VideoPlayer { + + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .max) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let autoPlayEnabled: Key = UserKey("autoPlayEnabled", default: true) + static let barActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "barActionButtons", + default: VideoPlayerActionButton.defaultBarActionButtons + ) + static let jumpBackwardInterval: Key = UserKey("jumpBackwardLength", default: .fifteen) + static let jumpForwardInterval: Key = UserKey("jumpForwardLength", default: .fifteen) + static let menuActionButtons: Key<[VideoPlayerActionButton]> = UserKey( + "menuActionButtons", + default: VideoPlayerActionButton.defaultMenuActionButtons + ) + static let resumeOffset: Key = UserKey("resumeOffset", default: 0) + static let videoPlayerType: Key = UserKey("videoPlayerType", default: .swiftfin) + + enum Gesture { + + static let horizontalPanAction: Key = UserKey("videoPlayerHorizontalPanGesture", default: .none) + static let horizontalSwipeAction: Key = UserKey("videoPlayerhorizontalSwipeAction", default: .none) + static let longPressAction: Key = UserKey("videoPlayerLongPressGesture", default: .gestureLock) + static let multiTapGesture: Key = UserKey("videoPlayerMultiTapGesture", default: .none) + static let doubleTouchGesture: Key = UserKey("videoPlayerDoubleTouchGesture", default: .none) + static let pinchGesture: Key = UserKey("videoPlayerSwipeGesture", default: .aspectFill) + static let verticalPanLeftAction: Key = UserKey("videoPlayerverticalPanLeftAction", default: .none) + static let verticalPanRightAction: Key = UserKey("videoPlayerverticalPanRightAction", default: .none) + } + + enum Overlay { + + static let chapterSlider: Key = UserKey("chapterSlider", default: true) + + // Timestamp + static let trailingTimestampType: Key = UserKey("trailingTimestamp", default: .timeLeft) + } + + enum Playback { + static let appMaximumBitrate: Key = UserKey("appMaximumBitrate", default: .auto) + static let appMaximumBitrateTest: Key = UserKey("appMaximumBitrateTest", default: .regular) + static let compatibilityMode: Key = UserKey("compatibilityMode", default: .auto) + static let customDeviceProfileAction: Key = UserKey("customDeviceProfileAction", default: .add) + static let rates: Key<[Float]> = UserKey("videoPlayerPlaybackRates", default: [0.5, 1.0, 1.25, 1.5, 2.0]) + } + + // TODO: transition into a SubtitleConfiguration instead of multiple types + enum Subtitle { + + static let subtitleColor: Key = UserKey("subtitleColor", default: .white) + static let subtitleFontName: Key = UserKey("subtitleFontName", default: UIFont.systemFont(ofSize: 14).fontName) + static let subtitleSize: Key = UserKey("subtitleSize", default: 9) + } + + enum Transition { + static let pauseOnBackground: Key = UserKey("playInBackground", default: true) + } + } + + // Experimental settings + enum Experimental { + + static let downloads: Key = UserKey("experimentalDownloads", default: false) + } + + // tvos specific + static let downActionShowsMenu: Key = UserKey("downActionShowsMenu", default: true) + static let confirmClose: Key = UserKey("confirmClose", default: false) +} + +// MARK: Debug + +#if DEBUG + +extension UserDefaults { + + static let debugSuite = UserDefaults(suiteName: "swiftfinstore-debug-defaults")! +} + +extension Defaults.Keys { + + static func DebugKey(_ name: String, default: Value) -> Key { + Key(name, default: `default`, suite: .appSuite) + } + + static let sendProgressReports: Key = DebugKey("sendProgressReports", default: true) +} +#endif diff --git a/Shared/ViewModels/ConnectToXtreamViewModel.swift b/Shared/ViewModels/ConnectToXtreamViewModel.swift new file mode 100644 index 00000000..cefb0ccb --- /dev/null +++ b/Shared/ViewModels/ConnectToXtreamViewModel.swift @@ -0,0 +1,183 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import Foundation + +final class ConnectToXtreamViewModel: ViewModel, Eventful, Stateful { + + // MARK: Event + + enum Event { + case connected(XtreamServer) + case error(XtreamAPIError) + } + + // MARK: Action + + enum Action: Equatable { + case cancel + case connect(name: String, url: String, username: String, password: String) + case testConnection(name: String, url: String, username: String, password: String) + } + + // MARK: State + + enum State: Hashable { + case connecting + case initial + case testing + } + + @Published + var state: State = .initial + + var events: AnyPublisher { + eventSubject + .receive(on: RunLoop.main) + .eraseToAnyPublisher() + } + + private var connectTask: AnyCancellable? + private var eventSubject: PassthroughSubject = .init() + + func respond(to action: Action) -> State { + switch action { + case .cancel: + connectTask?.cancel() + return .initial + + case let .connect(name, urlString, username, password): + connectTask?.cancel() + + connectTask = Task { + do { + let server = try await connectToXtream( + name: name, + url: urlString, + username: username, + password: password + ) + + await MainActor.run { + self.eventSubject.send(.connected(server)) + self.state = .initial + } + } catch is CancellationError { + // cancel doesn't matter + } catch let error as XtreamAPIError { + await MainActor.run { + self.eventSubject.send(.error(error)) + self.state = .initial + } + } catch { + await MainActor.run { + self.eventSubject.send(.error(.invalidResponse)) + self.state = .initial + } + } + } + .asAnyCancellable() + + return .connecting + + case let .testConnection(name, urlString, username, password): + connectTask?.cancel() + + connectTask = Task { + do { + _ = try await connectToXtream( + name: name, + url: urlString, + username: username, + password: password + ) + + await MainActor.run { + self.state = .initial + } + } catch is CancellationError { + // cancel doesn't matter + } catch let error as XtreamAPIError { + await MainActor.run { + self.eventSubject.send(.error(error)) + self.state = .initial + } + } catch { + await MainActor.run { + self.eventSubject.send(.error(.invalidResponse)) + self.state = .initial + } + } + } + .asAnyCancellable() + + return .testing + } + } + + private func connectToXtream( + name: String, + url urlString: String, + username: String, + password: String + ) async throws -> XtreamServer { + + let formattedURL = urlString.trimmingCharacters(in: .whitespacesAndNewlines) + .trimmingCharacters(in: .objectReplacement) + .trimmingCharacters(in: ["/"]) + .prepending("http://", if: !urlString.contains("://")) + + guard let url = URL(string: formattedURL) else { + throw XtreamAPIError.invalidURL + } + + let server = XtreamServer( + name: name.isEmpty ? "Xtream Server" : name, + url: url, + username: username, + password: password + ) + + // Test connection + let client = XtreamAPIClient(server: server) + _ = try await client.testConnection() + + return server + } + + func saveServer(_ server: XtreamServer) { + var servers = Defaults[.xtreamServers] + + // Check if server with same ID exists and update, otherwise append + if let index = servers.firstIndex(where: { $0.id == server.id }) { + servers[index] = server + } else { + servers.append(server) + } + + Defaults[.xtreamServers] = servers + + // Set as current server if it's the first one + if Defaults[.currentXtreamServerID] == nil { + Defaults[.currentXtreamServerID] = server.id + } + } + + func deleteServer(_ server: XtreamServer) { + var servers = Defaults[.xtreamServers] + servers.removeAll { $0.id == server.id } + Defaults[.xtreamServers] = servers + + // Clear current server if deleted + if Defaults[.currentXtreamServerID] == server.id { + Defaults[.currentXtreamServerID] = servers.first?.id + } + } +} diff --git a/Shared/ViewModels/LiveVideoPlayerManager.swift b/Shared/ViewModels/LiveVideoPlayerManager.swift index 74ec3dc0..663b1aba 100644 --- a/Shared/ViewModels/LiveVideoPlayerManager.swift +++ b/Shared/ViewModels/LiveVideoPlayerManager.swift @@ -23,10 +23,17 @@ final class LiveVideoPlayerManager: VideoPlayerManager { super.init() Task { - let viewModel = try await item.liveVideoPlayerViewModel(with: mediaSource, logger: logger) + do { + logger.info("LiveVideoPlayerManager: Starting playback setup for channel: \(item.displayTitle)") + let viewModel = try await item.liveVideoPlayerViewModel(with: mediaSource, logger: logger) - await MainActor.run { - self.currentViewModel = viewModel + await MainActor.run { + logger.info("LiveVideoPlayerManager: Successfully created view model, setting currentViewModel") + self.currentViewModel = viewModel + } + } catch { + logger.error("LiveVideoPlayerManager: Failed to create video player view model - \(error.localizedDescription)") + // TODO: Need to display error to user - VideoPlayerManager doesn't have error property } } } @@ -35,15 +42,25 @@ final class LiveVideoPlayerManager: VideoPlayerManager { super.init() Task { - guard let channel = try? await self.getChannel(for: program), let mediaSource = channel.mediaSources?.first else { - assertionFailure("No channel for program?") - return - } + do { + logger.info("LiveVideoPlayerManager: Getting channel for program: \(program.displayTitle)") + guard let channel = try await self.getChannel(for: program), let mediaSource = channel.mediaSources?.first else { + let errorMsg = "No channel or media source for program" + logger.error("LiveVideoPlayerManager: \(errorMsg)") + // TODO: Need to display error to user - VideoPlayerManager doesn't have error property + return + } - let viewModel = try await program.liveVideoPlayerViewModel(with: mediaSource, logger: logger) + logger.info("LiveVideoPlayerManager: Found channel, creating view model") + let viewModel = try await program.liveVideoPlayerViewModel(with: mediaSource, logger: logger) - await MainActor.run { - self.currentViewModel = viewModel + await MainActor.run { + logger.info("LiveVideoPlayerManager: Successfully created view model") + self.currentViewModel = viewModel + } + } catch { + logger.error("LiveVideoPlayerManager: Failed to set up playback - \(error.localizedDescription)") + // TODO: Need to display error to user - VideoPlayerManager doesn't have error property } } } diff --git a/Shared/Views/ConnecToServerView/Components/LocalServerButton.swift b/Shared/Views/ConnecToServerView/Components/LocalServerButton.swift new file mode 100644 index 00000000..a23d45c7 --- /dev/null +++ b/Shared/Views/ConnecToServerView/Components/LocalServerButton.swift @@ -0,0 +1,48 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import SwiftUI + +extension ConnectToServerView { + + struct LocalServerButton: View { + + let server: ServerState + let action: () -> Void + + var body: some View { + Button(action: action) { + HStack { + VStack(alignment: .leading) { + Text(server.name) + .font(.headline) + .fontWeight(.semibold) + + Text(server.currentURL.absoluteString) + .font(.subheadline) + .foregroundStyle(.secondary) + } + + Spacer() + + Image(systemName: "chevron.right") + .font(.body) + .fontWeight(.regular) + .foregroundStyle(.secondary) + } + #if os(tvOS) + .padding() + #endif + } + .foregroundStyle(.primary, .secondary) + .buttonStyle(.card) + } + } +} diff --git a/Shared/Views/ConnecToServerView/ConnectToServerView.swift b/Shared/Views/ConnecToServerView/ConnectToServerView.swift new file mode 100644 index 00000000..f50750da --- /dev/null +++ b/Shared/Views/ConnecToServerView/ConnectToServerView.swift @@ -0,0 +1,163 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import SwiftUI + +struct ConnectToServerView: View { + + @Default(.accentColor) + private var accentColor + + @FocusState + private var isURLFocused: Bool + + @Router + private var router + + @StateObject + private var viewModel = ConnectToServerViewModel() + + @State + private var duplicateServer: ServerState? = nil + @State + private var isPresentingDuplicateServer: Bool = false + @State + private var url: String = "" + + private let timer = Timer.publish(every: 12, on: .main, in: .common).autoconnect() + + private func onEvent(_ event: ConnectToServerViewModel._Event) { + switch event { + case let .connected(server): + UIDevice.feedback(.success) + Notifications[.didConnectToServer].post(server) + router.dismiss() + case let .duplicateServer(server): + UIDevice.feedback(.warning) + duplicateServer = server + isPresentingDuplicateServer = true + } + } + + @ViewBuilder + private var connectSection: some View { + Section(L10n.connectToServer) { + TextField(L10n.serverURL, text: $url) + .disableAutocorrection(true) + .textInputAutocapitalization(.never) + .keyboardType(.URL) + .focused($isURLFocused) + } + + if viewModel.state == .connecting { + ListRowButton(L10n.cancel) { + viewModel.cancel() + } + .foregroundStyle(.red, .red.opacity(0.2)) + } else { + ListRowButton(L10n.connect) { + isURLFocused = false + viewModel.connect(url: url) + } + .disabled(url.isEmpty) + .foregroundStyle( + accentColor.overlayColor, + accentColor + ) + .opacity(url.isEmpty ? 0.5 : 1) + } + } + + // MARK: - Local Servers Section + + @ViewBuilder + private var localServersSection: some View { + Section(L10n.localServers) { + if viewModel.localServers.isEmpty { + L10n.noLocalServersFound.text + .font(.callout) + .foregroundColor(.secondary) + .frame(maxWidth: .infinity) + } else { + ForEach(viewModel.localServers) { server in + LocalServerButton(server: server) { + url = server.currentURL.absoluteString + viewModel.connect(url: server.currentURL.absoluteString) + } + } + } + } + } + + @ViewBuilder + private var contentView: some View { + #if os(iOS) + List { + connectSection + + localServersSection + } + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton(disabled: viewModel.state == .connecting) { + router.dismiss() + } + #else + SplitLoginWindowView( + isLoading: viewModel.state == .connecting + ) { + connectSection + } trailingContentView: { + localServersSection + } + #endif + } + + // MARK: - Body + + var body: some View { + contentView + .navigationTitle(L10n.connect) + .interactiveDismissDisabled(viewModel.state == .connecting) + .onFirstAppear { + isURLFocused = true + viewModel.searchForServers() + } + .onReceive(timer) { _ in + guard viewModel.state != .connecting else { return } + viewModel.searchForServers() + } + .onReceive(viewModel.events, perform: onEvent) + .onReceive(viewModel.$error) { error in + guard error != nil else { return } + UIDevice.feedback(.error) + isURLFocused = true + } + .topBarTrailing { + if viewModel.state == .connecting { + ProgressView() + } + } + .alert( + L10n.server.text, + isPresented: $isPresentingDuplicateServer, + presenting: duplicateServer + ) { server in + Button(L10n.dismiss, role: .destructive) + + Button(L10n.addURL) { + viewModel.addNewURL(serverState: server) + router.dismiss() + } + } message: { server in + L10n.serverAlreadyExistsPrompt(server.name).text + } + .errorMessage($viewModel.error) + } +} diff --git a/Shared/Views/MediaView/Components/MediaItem.swift b/Shared/Views/MediaView/Components/MediaItem.swift new file mode 100644 index 00000000..3ca2d8eb --- /dev/null +++ b/Shared/Views/MediaView/Components/MediaItem.swift @@ -0,0 +1,129 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +// Note: the design reason to not have a local label always on top +// is to have the same failure/empty color for all views + +extension MediaView { + + // TODO: custom view for folders and tv (allow customization?) + // - differentiate between what media types are Swiftfin only + // which would allow some cleanup + // - allow server or random view per library? + // TODO: if local label on image, also needs to be in blurhash placeholder + struct MediaItem: View { + + @Default(.Customization.Library.randomImage) + private var useRandomImage + + @ObservedObject + private var viewModel: MediaViewModel + + @Namespace + private var namespace + + @State + private var imageSources: [ImageSource] = [] + + private let action: (Namespace.ID) -> Void + private let mediaType: MediaViewModel.MediaType + + init( + viewModel: MediaViewModel, + type: MediaViewModel.MediaType, + action: @escaping (Namespace.ID) -> Void + ) { + self.viewModel = viewModel + self.action = action + self.mediaType = type + } + + private var useTitleLabel: Bool { + useRandomImage || + mediaType == .downloads || + mediaType == .favorites + } + + private func setImageSources() { + Task { @MainActor in + if useRandomImage { + self.imageSources = try await viewModel.randomItemImageSources(for: mediaType) + return + } + + if case let MediaViewModel.MediaType.collectionFolder(item) = mediaType { + self.imageSources = [item.imageSource(.primary, maxWidth: 500)] + } else if case let MediaViewModel.MediaType.liveTV(item) = mediaType { + self.imageSources = [item.imageSource(.primary, maxWidth: 500)] + } + } + } + + @ViewBuilder + private var titleLabel: some View { + Text(mediaType.displayTitle) + .font(.title2) + .fontWeight(.semibold) + .lineLimit(1) + .multilineTextAlignment(.center) + .frame(alignment: .center) + } + + private func titleLabelOverlay(with content: some View) -> some View { + ZStack { + content + + Color.black + .opacity(0.5) + + titleLabel + .foregroundStyle(.white) + } + } + + var body: some View { + Button { + action(namespace) + } label: { + ImageView(imageSources) + .image { image in + if useTitleLabel { + titleLabelOverlay(with: image) + } else { + image + } + } + .placeholder { imageSource in + titleLabelOverlay(with: DefaultPlaceholderView(blurHash: imageSource.blurHash)) + } + .failure { + Color.secondarySystemFill + .opacity(0.75) + .overlay { + titleLabel + .foregroundColor(.primary) + } + } + .id(imageSources.hashValue) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .posterStyle(.landscape) + .backport + .matchedTransitionSource(id: "item", in: namespace) + } + .onFirstAppear(perform: setImageSources) + .backport + .onChange(of: useRandomImage) { _, _ in + setImageSources() + } + .buttonStyle(.card) + } + } +} diff --git a/Shared/Views/MediaView/MediaView.swift b/Shared/Views/MediaView/MediaView.swift new file mode 100644 index 00000000..ec06b7e5 --- /dev/null +++ b/Shared/Views/MediaView/MediaView.swift @@ -0,0 +1,95 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionVGrid +import Defaults +import Engine +import JellyfinAPI +import SwiftUI + +struct MediaView: View { + + @Router + private var router + + @StateObject + private var viewModel = MediaViewModel() + + private var layout: CollectionVGridLayout { + if UIDevice.isTV { + .columns(4, insets: .init(50), itemSpacing: 50, lineSpacing: 50) + } else if UIDevice.isPad { + .minWidth(200) + } else { + .columns(2) + } + } + + @ViewBuilder + private var content: some View { + CollectionVGrid( + uniqueElements: viewModel.mediaItems, + layout: layout + ) { mediaType in + MediaItem(viewModel: viewModel, type: mediaType) { namespace in + switch mediaType { + case let .collectionFolder(item): + let viewModel = ItemLibraryViewModel( + parent: item, + filters: .default + ) + router.route(to: .library(viewModel: viewModel), in: namespace) + case .downloads: + router.route(to: .downloadList) + case .favorites: + // TODO: favorites should have its own view instead of a library + let viewModel = ItemLibraryViewModel( + title: L10n.favorites, + id: "favorites", + filters: .favorites + ) + router.route(to: .library(viewModel: viewModel), in: namespace) + case .liveTV: + router.route(to: .liveTV) + } + } + } + } + + @ViewBuilder + private func errorView(with error: some Error) -> some View { + ErrorView(error: error) + .onRetry { + viewModel.refresh() + } + } + + var body: some View { + ZStack { + Color.clear + + switch viewModel.state { + case .initial: + content + case .error: + viewModel.error.map { errorView(with: $0) } + case .refreshing: + ProgressView() + } + } + .animation(.linear(duration: 0.1), value: viewModel.state) + .ignoresSafeArea() + .navigationTitle(L10n.allMedia) + .onFirstAppear { + viewModel.refresh() + } + .if(UIDevice.isTV) { view in + view.toolbar(.hidden, for: .navigationBar) + } + } +} diff --git a/Shared/Views/QuickConnectView.swift b/Shared/Views/QuickConnectView.swift new file mode 100644 index 00000000..09fcc78a --- /dev/null +++ b/Shared/Views/QuickConnectView.swift @@ -0,0 +1,78 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct QuickConnectView: View { + + @Router + private var router + + @ObservedObject + private var viewModel: QuickConnect + + init(quickConnect: QuickConnect) { + self.viewModel = quickConnect + } + + private func pollingView(code: String) -> some View { + VStack(spacing: 20) { + BulletedList(spacing: 16) { + L10n.quickConnectStep1.text + + L10n.quickConnectStep2.text + + L10n.quickConnectStep3.text + } + .frame(maxWidth: .infinity, alignment: .leading) + + Text(code) + .tracking(10) + .font(.largeTitle) + .monospacedDigit() + } + .frame( + maxWidth: .infinity, + maxHeight: .infinity, + alignment: .top + ) + .edgePadding() + } + + var body: some View { + ZStack { + switch viewModel.state { + case .authenticated, .idle, .retrievingCode: + ProgressView() + case let .polling(code): + pollingView(code: code) + case let .error(error): + ErrorView(error: error) + .onRetry { + viewModel.start() + } + } + } + .animation(.linear(duration: 0.2), value: viewModel.state) + .edgePadding() + .navigationTitle(L10n.quickConnect) + #if os(iOS) + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton { + router.dismiss() + } + #endif + .onFirstAppear { + viewModel.start() + } + .onDisappear { + viewModel.stop() + } + } +} diff --git a/Shared/Views/UserSignInView/Components/PublicUserButton.swift b/Shared/Views/UserSignInView/Components/PublicUserButton.swift new file mode 100644 index 00000000..ab49bb3f --- /dev/null +++ b/Shared/Views/UserSignInView/Components/PublicUserButton.swift @@ -0,0 +1,43 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension UserSignInView { + + struct PublicUserButton: View { + + let user: UserDto + let client: JellyfinClient + let action: () -> Void + + var body: some View { + Button(action: action) { + UserProfileImage( + userID: user.id, + source: user.profileImageSource( + client: client, + maxWidth: 240 + ) + ) + .frame(width: 150, height: 150) + .hoverEffect(.highlight) + + Text(user.name ?? .emptyDash) + .fontWeight(.semibold) + .foregroundStyle(.primary) + .lineLimit(1) + } + .backport + .buttonBorderShape(.circle) + .buttonStyle(.borderless) + .foregroundStyle(.primary, .secondary) + } + } +} diff --git a/Shared/Views/UserSignInView/Components/PublicUserRow.swift b/Shared/Views/UserSignInView/Components/PublicUserRow.swift new file mode 100644 index 00000000..e483031a --- /dev/null +++ b/Shared/Views/UserSignInView/Components/PublicUserRow.swift @@ -0,0 +1,48 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension UserSignInView { + + struct PublicUserRow: View { + + let user: UserDto + let client: JellyfinClient + let action: () -> Void + + var body: some View { + Button(action: action) { + HStack { + UserProfileImage( + userID: user.id, + source: user.profileImageSource( + client: client, + maxWidth: 120 + ) + ) + .frame(width: 50, height: 50) + + Text(user.name ?? .emptyDash) + .fontWeight(.semibold) + .foregroundStyle(.primary) + .lineLimit(1) + + Spacer() + + Image(systemName: "chevron.right") + .font(.body) + .fontWeight(.regular) + .foregroundStyle(.secondary) + } + } + .foregroundStyle(.primary, .secondary) + } + } +} diff --git a/Shared/Views/UserSignInView/UserSignInView.swift b/Shared/Views/UserSignInView/UserSignInView.swift new file mode 100644 index 00000000..25f119af --- /dev/null +++ b/Shared/Views/UserSignInView/UserSignInView.swift @@ -0,0 +1,342 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionVGrid +import Defaults +import Factory +import JellyfinAPI +import Logging +import SwiftUI + +struct UserSignInView: View { + + private enum Field: Hashable { + case username + case password + } + + @Environment(\.localUserAuthenticationAction) + private var authenticationAction + @Environment(\.quickConnectAction) + private var quickConnectAction + + @FocusState + private var focusedTextField: Field? + + @Router + private var router + + @State + private var accessPolicy: UserAccessPolicy = .none + @State + private var existingUser: UserSignInViewModel.UserStateDataPair? = nil + @State + private var isPresentingExistingUser: Bool = false + @State + private var password: String = "" + @State + private var pinHint: String = "" + @State + private var username: String = "" + + @StateObject + private var viewModel: UserSignInViewModel + + private let logger = Logger.swiftfin() + + init(server: ServerState) { + self._viewModel = StateObject(wrappedValue: UserSignInViewModel(server: server)) + } + + private func handleEvent(_ event: UserSignInViewModel._Event) { + switch event { + case let .connected(user): + guard let authenticationAction else { + return + } + viewModel.save( + user: user, + authenticationAction: ( + authenticationAction, + accessPolicy, + accessPolicy.createReason( + user: user.state.state + ) + ), + evaluatedPolicyMap: .init(action: processEvaluatedPolicy) + ) + case let .existingUser(existingUser): + self.existingUser = existingUser + self.isPresentingExistingUser = true + case let .saved(user): + UIDevice.feedback(.success) + + router.dismiss() + Defaults[.lastSignedInUserID] = .signedIn(userID: user.id) + Container.shared.currentUserSession.reset() + Notifications[.didSignIn].post() + } + } + + private func runQuickConnect() { + Task { + do { + guard let secret = try await quickConnectAction?(client: viewModel.server.client) else { + logger.critical("QuickConnect called without necessary action!") + throw JellyfinAPIError(L10n.unknownError) + } + await viewModel.signInQuickConnect( + secret: secret + ) + } catch is CancellationError { + // ignore + } catch { + logger.error("QuickConnect failed with error: \(error.localizedDescription)") + await viewModel.error(JellyfinAPIError(L10n.taskFailed)) + } + } + } + + private func processEvaluatedPolicy( + _ evaluatedPolicy: any EvaluatedLocalUserAccessPolicy + ) -> any EvaluatedLocalUserAccessPolicy { + if let pinPolicy = evaluatedPolicy as? PinEvaluatedUserAccessPolicy { + return PinEvaluatedUserAccessPolicy( + pin: pinPolicy.pin, + pinHint: pinHint + ) + } + + return evaluatedPolicy + } + + // MARK: - Sign In Section + + @ViewBuilder + private var signInSection: some View { + Section { + TextField(L10n.username, text: $username) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .focused($focusedTextField, equals: .username) + .onSubmit { + focusedTextField = .password + } + + SecureField( + L10n.password, + text: $password, + maskToggle: .enabled + ) + .onSubmit { + focusedTextField = nil + + viewModel.signIn( + username: username, + password: password + ) + } + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .focused($focusedTextField, equals: .password) + } header: { + Text(L10n.signInToServer(viewModel.server.name)) + } footer: { + switch accessPolicy { + case .requireDeviceAuthentication: + Label(L10n.userDeviceAuthRequiredDescription, systemImage: "exclamationmark.circle.fill") + .labelStyle(.sectionFooterWithImage(imageStyle: .orange)) + case .requirePin: + Label(L10n.userPinRequiredDescription, systemImage: "exclamationmark.circle.fill") + .labelStyle(.sectionFooterWithImage(imageStyle: .orange)) + case .none: + EmptyView() + } + } + + if case .signingIn = viewModel.state { + ListRowButton(L10n.cancel, role: .cancel) { + viewModel.cancel() + } + } else { + ListRowButton(L10n.signIn) { + viewModel.signIn( + username: username, + password: password + ) + } + .disabled(username.isEmpty) + .foregroundStyle( + Color.jellyfinPurple.overlayColor, + Color.jellyfinPurple + ) + .opacity(username.isEmpty ? 0.5 : 1) + } + + if viewModel.isQuickConnectEnabled { + Section { + ListRowButton( + L10n.quickConnect, + action: runQuickConnect + ) + .disabled(viewModel.state == .signingIn) + .foregroundStyle( + Color.jellyfinPurple.overlayColor, + Color.jellyfinPurple + ) + } + } + + if let disclaimer = viewModel.serverDisclaimer { + Section(L10n.disclaimer) { + Text(disclaimer) + .font(.callout) + } + } + } + + // MARK: - Public Users Section + + @ViewBuilder + private var publicUsersSection: some View { + Section(L10n.publicUsers) { + if viewModel.publicUsers.isEmpty { + L10n.noPublicUsers.text + .font(.callout) + .foregroundStyle(.secondary) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) + } else { + #if os(iOS) + ForEach(viewModel.publicUsers) { user in + PublicUserRow( + user: user, + client: viewModel.server.client + ) { + username = user.name ?? "" + password = "" + focusedTextField = .password + } + } + #else + LazyVGrid( + columns: Array(repeating: GridItem(.flexible()), count: 4), + spacing: 30 + ) { + ForEach(viewModel.publicUsers) { user in + PublicUserButton( + user: user, + client: viewModel.server.client + ) { + username = user.name ?? "" + password = "" + focusedTextField = .password + } + .environment(\.isOverComplexContent, true) + } + } + #endif + } + } + .disabled(viewModel.state == .signingIn) + } + + @ViewBuilder + private var contentView: some View { + #if os(iOS) + List { + signInSection + + publicUsersSection + } + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton(disabled: viewModel.state == .signingIn) { + router.dismiss() + } + .topBarTrailing { + if viewModel.state == .signingIn || viewModel.background.is(.gettingPublicData) { + ProgressView() + } + + Button(L10n.security, systemImage: "gearshape.fill") { + router.route( + to: .userSecurity( + pinHint: $pinHint, + accessPolicy: $accessPolicy + ) + ) + } + } + #else + SplitLoginWindowView( + isLoading: viewModel.state == .signingIn, + backgroundImageSource: viewModel.server.splashScreenImageSource + ) { + signInSection + } trailingContentView: { + publicUsersSection + } + #endif + } + + // MARK: - Body + + var body: some View { + contentView + .navigationTitle(L10n.signIn) + .interactiveDismissDisabled(viewModel.state == .signingIn) + .onReceive(viewModel.events, perform: handleEvent) + .onFirstAppear { + focusedTextField = .username + viewModel.getPublicData() + } + .alert( + L10n.duplicateUser, + isPresented: $isPresentingExistingUser, + presenting: existingUser + ) { existingUser in + + let userState = existingUser.state.state + let existingUserAccessPolicy = userState.accessPolicy + + Button(L10n.signIn) { + viewModel.saveExisting( + user: existingUser, + replaceForAccessToken: false, + authenticationAction: ( + authenticationAction!, + existingUserAccessPolicy, + existingUserAccessPolicy.authenticateReason( + user: userState + ) + ), + evaluatedPolicyMap: .init(action: processEvaluatedPolicy) + ) + } + + Button(L10n.replace) { + viewModel.saveExisting( + user: existingUser, + replaceForAccessToken: true, + authenticationAction: ( + authenticationAction!, + existingUserAccessPolicy, + existingUserAccessPolicy.authenticateReason( + user: userState + ) + ), + evaluatedPolicyMap: .init(action: processEvaluatedPolicy) + ) + } + + Button(L10n.dismiss, role: .cancel) + } message: { existingUser in + Text(L10n.duplicateUserSaved(existingUser.state.state.username)) + } + .errorMessage($viewModel.error) + } +} diff --git a/Shared/jellyfloodstore/StoredValue 3/StoredValue.swift b/Shared/jellyfloodstore/StoredValue 3/StoredValue.swift new file mode 100644 index 00000000..5b5128aa --- /dev/null +++ b/Shared/jellyfloodstore/StoredValue 3/StoredValue.swift @@ -0,0 +1,216 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import CoreStore +import Factory +import Foundation +import Logging +import SwiftUI + +// TODO: typealias to `Setting`? +// - introduce `UserSetting` and `ServerSetting` +// that automatically namespace + +/// A property wrapper for a stored `AnyData` object. +@propertyWrapper +struct StoredValue: DynamicProperty { + + @ObservedObject + private var observable: Observable + + let key: StoredValues.Key + + var projectedValue: Binding { + $observable.value + } + + var wrappedValue: Value { + get { + observable.value + } + nonmutating set { + observable.value = newValue + } + } + + init(_ key: StoredValues.Key) { + self.key = key + self.observable = .init(key: key) + } + + mutating func update() { + _observable.update() + } +} + +extension StoredValue { + + final class Observable: ObservableObject { + + let key: StoredValues.Key + let objectWillChange = ObservableObjectPublisher() + + private let logger = Logger.swiftfin() + private var objectPublisher: ObjectPublisher? + private var shouldListenToPublish: Bool = true + + var value: Value { + get { + guard key.name.isNotEmpty, key.ownerID.isNotEmpty else { return key.defaultValue() } + + let fetchedValue: Value? = try? AnyStoredData.fetch( + key.name, + ownerID: key.ownerID, + domain: key.domain + ) + + return fetchedValue ?? key.defaultValue() + } + set { + guard key.name.isNotEmpty, key.ownerID.isNotEmpty else { return } + shouldListenToPublish = false + + objectWillChange.send() + + try? AnyStoredData.store( + value: newValue, + key: key.name, + ownerID: key.ownerID, + domain: key.domain ?? "" + ) + + shouldListenToPublish = true + } + } + + init(key: StoredValues.Key) { + self.key = key + self.objectPublisher = makeObjectPublisher() + } + + private func makeObjectPublisher() -> ObjectPublisher? { + + guard key.name.isNotEmpty, key.ownerID.isNotEmpty else { return nil } + + let domain = key.domain ?? "none" + + let ownerFilter: Where = Where(\.$ownerID == key.ownerID) + let keyFilter: Where = Where(\.$key == key.name) + let domainFilter: Where = Where(\.$domain == domain) + + let clause = From() + .where(ownerFilter && keyFilter && domainFilter) + + if let values = try? SwiftfinStore.dataStack.fetchAll(clause), let first = values.first { + let publisher = first.asPublisher(in: SwiftfinStore.dataStack) + + publisher.addObserver(self) { [weak self] objectPublisher in + guard self?.shouldListenToPublish ?? false else { return } + guard let data = objectPublisher.object?.data else { return } + guard let newValue = try? JSONDecoder().decode(Value.self, from: data) else { fatalError() } + + DispatchQueue.main.async { + self?.value = newValue + } + } + + return publisher + } else { + // Stored value doesn't exist but we want to observe it. + // Create default and get new publisher + + // TODO: this still store unnecessary data if never changed, + // observe if changes were made and delete on deinit + + do { + try AnyStoredData.store( + value: key.defaultValue(), + key: key.name, + ownerID: key.ownerID, + domain: key.domain + ) + } catch { + logger.error("Unable to store and create publisher for: \(key)") + + return nil + } + + return makeObjectPublisher() + } + } + } +} + +enum StoredValues { + + typealias Keys = _AnyKey + + // swiftformat:disable enumnamespaces + class _AnyKey { + typealias Key = StoredValues.Key + } + + /// A key to an `AnyData` object. + /// + /// - Important: if `name` or `ownerID` are empty, the default value + /// will always be retrieved and nothing will be set. + final class Key: _AnyKey { + + let defaultValue: () -> Value + let domain: String? + let name: String + let ownerID: String + + init( + _ name: String, + ownerID: String, + domain: String?, + default defaultValue: @autoclosure @escaping () -> Value + ) { + self.defaultValue = defaultValue + self.domain = domain + self.ownerID = ownerID + self.name = name + } + + /// Always returns the given value and does not + /// set anything to storage. + init(always: @autoclosure @escaping () -> Value) { + defaultValue = always + domain = nil + name = "" + ownerID = "" + } + } + + // TODO: find way that code isn't just copied from `Observable` above + static subscript(key: Key) -> Value { + get { + guard key.name.isNotEmpty, key.ownerID.isNotEmpty else { return key.defaultValue() } + + let fetchedValue: Value? = try? AnyStoredData.fetch( + key.name, + ownerID: key.ownerID, + domain: key.domain + ) + + return fetchedValue ?? key.defaultValue() + } + set { + guard key.name.isNotEmpty, key.ownerID.isNotEmpty else { return } + + try? AnyStoredData.store( + value: newValue, + key: key.name, + ownerID: key.ownerID, + domain: key.domain ?? "" + ) + } + } +} diff --git a/Shared/jellypigstore/StoredValue/StoredValues+Server.swift b/Shared/jellyfloodstore/StoredValue 3/StoredValues+Server.swift similarity index 100% rename from Shared/jellypigstore/StoredValue/StoredValues+Server.swift rename to Shared/jellyfloodstore/StoredValue 3/StoredValues+Server.swift diff --git a/Shared/jellypigstore/StoredValue/StoredValues+Temp.swift b/Shared/jellyfloodstore/StoredValue 3/StoredValues+Temp.swift similarity index 100% rename from Shared/jellypigstore/StoredValue/StoredValues+Temp.swift rename to Shared/jellyfloodstore/StoredValue 3/StoredValues+Temp.swift diff --git a/Shared/jellyfloodstore/StoredValue 3/StoredValues+User.swift b/Shared/jellyfloodstore/StoredValue 3/StoredValues+User.swift new file mode 100644 index 00000000..5492f3a1 --- /dev/null +++ b/Shared/jellyfloodstore/StoredValue 3/StoredValues+User.swift @@ -0,0 +1,229 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import JellyfinAPI + +// TODO: also have matching properties on `UserState` that get/set values +// TODO: cleanup/organize + +// MARK: keys + +extension StoredValues.Keys { + + /// Construct a key where `ownerID` is the id of the user in the + /// current user session, or always returns the default if there + /// isn't a current session user. + static func CurrentUserKey( + _ name: String?, + domain: String, + default defaultValue: Value + ) -> Key { + guard let name, let currentUser = Container.shared.currentUserSession()?.user else { + return Key(always: defaultValue) + } + + return Key( + name, + ownerID: currentUser.id, + domain: domain, + default: defaultValue + ) + } + + static func UserKey( + _ name: String?, + ownerID: String, + domain: String, + default defaultValue: Value + ) -> Key { + guard let name else { + return Key(always: defaultValue) + } + + return Key( + name, + ownerID: ownerID, + domain: domain, + default: defaultValue + ) + } + + static func UserKey(always: Value) -> Key { + Key(always: always) + } +} + +// MARK: values + +extension StoredValues.Keys { + + enum User { + + // Doesn't use `CurrentUserKey` because data may be + // retrieved and stored without a user session + static func accessPolicy(id: String) -> Key { + UserKey( + "accessPolicy", + ownerID: id, + domain: "accessPolicy", + default: .none + ) + } + + // Doesn't use `CurrentUserKey` because data may be + // retrieved and stored without a user session + static func data(id: String) -> Key { + UserKey( + "userData", + ownerID: id, + domain: "userData", + default: .init() + ) + } + + static var accessPolicy: Key { + CurrentUserKey( + "currentUserAccessPolicy", + domain: "currentUserAccessPolicy", + default: .none + ) + } + + static func libraryDisplayType(parentID: String?) -> Key { + CurrentUserKey( + parentID, + domain: "setting-libraryDisplayType", + default: Defaults[.Customization.Library.displayType] + ) + } + + static func libraryListColumnCount(parentID: String?) -> Key { + CurrentUserKey( + parentID, + domain: "setting-libraryListColumnCount", + default: Defaults[.Customization.Library.listColumnCount] + ) + } + + static func libraryPosterType(parentID: String?) -> Key { + CurrentUserKey( + parentID, + domain: "setting-libraryPosterType", + default: Defaults[.Customization.Library.posterType] + ) + } + + // TODO: for now, only used for `sortBy` and `sortOrder`. Need to come up with + // rules for how stored filters work with libraries that should init + // with non-default filters (atow ex: favorites) + static func libraryFilters(parentID: String?) -> Key { + CurrentUserKey( + parentID, + domain: "setting-libraryFilters", + default: ItemFilterCollection.default + ) + } + + static func pinHint(id: String) -> Key { + UserKey( + "pinHint", + ownerID: id, + domain: "pinHint", + default: "" + ) + } + + static var customDeviceProfiles: Key<[CustomDeviceProfile]> { + CurrentUserKey( + "customDeviceProfiles", + domain: "customDeviceProfiles", + default: [] + ) + } + + static var enableItemEditing: Key { + CurrentUserKey( + "enableItemEditing", + domain: "enableItemEditing", + default: false + ) + } + + static var enableItemDeletion: Key { + CurrentUserKey( + "enableItemDeletion", + domain: "enableItemDeletion", + default: false + ) + } + + static var enableCollectionManagement: Key { + CurrentUserKey( + "enableCollectionManagement", + domain: "enableCollectionManagement", + default: false + ) + } + + static var enabledTrailers: Key { + CurrentUserKey( + "enabledTrailers", + domain: "enabledTrailers", + default: .all + ) + } + + static var itemViewAttributes: Key<[ItemViewAttribute]> { + CurrentUserKey( + "itemViewAttributes", + domain: "itemViewAttributes", + default: ItemViewAttribute.allCases + ) + } + + static var previewImageScrubbing: Key { + CurrentUserKey( + "previewImageScrubbing", + domain: "previewImageScrubbing", + default: .trickplay(fallbackToChapters: false) + ) + } + } +} + +// TODO: chapters fallback +enum PreviewImageScrubbingOption: CaseIterable, Displayable, Hashable, Storable { + + case trickplay(fallbackToChapters: Bool = true) + case chapters + case disabled + + var displayTitle: String { + switch self { + case .trickplay: "Trickplay" + case .disabled: L10n.disabled + case .chapters: "Chapters" + } + } + + // TODO: enhance full screen determination + // - allow checking against image size? + var supportsFullscreen: Bool { + switch self { + case .trickplay: true + case .disabled, .chapters: false + } + } + + static var allCases: [PreviewImageScrubbingOption] { + [.trickplay(), .chapters, .disabled] + } +} diff --git a/Shared/jellypigstore/StoredValue/StoredValue.swift b/Shared/jellyfloodstore/StoredValue/StoredValue.swift similarity index 100% rename from Shared/jellypigstore/StoredValue/StoredValue.swift rename to Shared/jellyfloodstore/StoredValue/StoredValue.swift diff --git a/Shared/jellyfloodstore/StoredValue/StoredValues+Server.swift b/Shared/jellyfloodstore/StoredValue/StoredValues+Server.swift new file mode 100644 index 00000000..f5d6e09b --- /dev/null +++ b/Shared/jellyfloodstore/StoredValue/StoredValues+Server.swift @@ -0,0 +1,58 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import Foundation +import JellyfinAPI + +// TODO: also have matching properties on `ServerState` that get/set values + +// MARK: keys + +extension StoredValues.Keys { + + static func ServerKey( + _ name: String?, + ownerID: String, + domain: String, + default defaultValue: Value + ) -> Key { + guard let name else { + return Key(always: defaultValue) + } + + return Key( + name, + ownerID: ownerID, + domain: domain, + default: defaultValue + ) + } + + static func ServerKey(always: Value) -> Key { + Key(always: always) + } +} + +// MARK: values + +extension StoredValues.Keys { + + enum Server { + + static func publicInfo(id: String) -> Key { + ServerKey( + "publicInfo", + ownerID: id, + domain: "publicInfo", + default: .init() + ) + } + } +} diff --git a/Shared/jellyfloodstore/StoredValue/StoredValues+Temp.swift b/Shared/jellyfloodstore/StoredValue/StoredValues+Temp.swift new file mode 100644 index 00000000..29c5ed26 --- /dev/null +++ b/Shared/jellyfloodstore/StoredValue/StoredValues+Temp.swift @@ -0,0 +1,73 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI + +// Note: Temporary values to avoid refactoring or +// reduce complexity at local sites. +// +// Values can be cleaned up at any time and are +// meant to have a short lifetime. + +extension StoredValues.Keys { + + static func TempKey( + _ name: String?, + ownerID: String, + domain: String, + default defaultValue: Value + ) -> Key { + guard let name else { + return Key(always: defaultValue) + } + + return Key( + name, + ownerID: ownerID, + domain: domain, + default: defaultValue + ) + } +} + +// MARK: values + +extension StoredValues.Keys { + + enum Temp { + + static let userAccessPolicy: Key = TempKey( + "userSignInPolicy", + ownerID: "temporary", + domain: "userSignInPolicy", + default: .none + ) + + static let userLocalPin: Key = TempKey( + "userLocalPin", + ownerID: "temporary", + domain: "userLocalPin", + default: "" + ) + + static let userLocalPinHint: Key = TempKey( + "userLocalPinHint", + ownerID: "temporary", + domain: "userLocalPinHint", + default: "" + ) + + static let userData: Key = TempKey( + "tempUserData", + ownerID: "temporary", + domain: "tempUserData", + default: .init() + ) + } +} diff --git a/Shared/jellypigstore/StoredValue/StoredValues+User.swift b/Shared/jellyfloodstore/StoredValue/StoredValues+User.swift similarity index 100% rename from Shared/jellypigstore/StoredValue/StoredValues+User.swift rename to Shared/jellyfloodstore/StoredValue/StoredValues+User.swift diff --git a/Shared/jellypigstore/V1Schema/V1ServerModel.swift b/Shared/jellyfloodstore/V1Schema 3/V1ServerModel.swift similarity index 100% rename from Shared/jellypigstore/V1Schema/V1ServerModel.swift rename to Shared/jellyfloodstore/V1Schema 3/V1ServerModel.swift diff --git a/Shared/jellypigstore/V1Schema/V1UserModel.swift b/Shared/jellyfloodstore/V1Schema 3/V1UserModel.swift similarity index 100% rename from Shared/jellypigstore/V1Schema/V1UserModel.swift rename to Shared/jellyfloodstore/V1Schema 3/V1UserModel.swift diff --git a/Shared/jellypigstore/V1Schema/jellypigstore+V1.swift b/Shared/jellyfloodstore/V1Schema 3/jellypigstore+V1.swift similarity index 100% rename from Shared/jellypigstore/V1Schema/jellypigstore+V1.swift rename to Shared/jellyfloodstore/V1Schema 3/jellypigstore+V1.swift diff --git a/Shared/jellyfloodstore/V1Schema/V1ServerModel.swift b/Shared/jellyfloodstore/V1Schema/V1ServerModel.swift new file mode 100644 index 00000000..d89c90d3 --- /dev/null +++ b/Shared/jellyfloodstore/V1Schema/V1ServerModel.swift @@ -0,0 +1,47 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation + +extension SwiftfinStore.V1 { + + final class StoredServer: CoreStoreObject { + + @Field.Coded("urls", coder: FieldCoders.Json.self) + var urls: Set = [] + + @Field.Stored("currentURL") + var currentURL: URL = .init(string: "/")! + + @Field.Stored("name") + var name: String = "" + + @Field.Stored("id") + var id: String = "" + + @Field.Stored("os") + var os: String = "" + + @Field.Stored("version") + var version: String = "" + + @Field.Relationship("users", inverse: \StoredUser.$server) + var users: Set + + var state: ServerState { + .init( + urls: urls, + currentURL: currentURL, + name: name, + id: id, + usersIDs: users.map(\.id) + ) + } + } +} diff --git a/Shared/jellyfloodstore/V1Schema/V1UserModel.swift b/Shared/jellyfloodstore/V1Schema/V1UserModel.swift new file mode 100644 index 00000000..78749714 --- /dev/null +++ b/Shared/jellyfloodstore/V1Schema/V1UserModel.swift @@ -0,0 +1,40 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation + +extension SwiftfinStore.V1 { + + final class StoredUser: CoreStoreObject { + + @Field.Stored("accessToken") + var accessToken: String = "" + + @Field.Stored("username") + var username: String = "" + + @Field.Stored("id") + var id: String = "" + + @Field.Stored("appleTVID") + var appleTVID: String = "" + + @Field.Relationship("server") + var server: StoredServer? + + var state: UserState { + guard let server = server else { fatalError("No server associated with user") } + return .init( + id: id, + serverID: server.id, + username: username + ) + } + } +} diff --git a/Shared/jellyfloodstore/V1Schema/jellyfloodstore+V1.swift b/Shared/jellyfloodstore/V1Schema/jellyfloodstore+V1.swift new file mode 100644 index 00000000..3a878ca4 --- /dev/null +++ b/Shared/jellyfloodstore/V1Schema/jellyfloodstore+V1.swift @@ -0,0 +1,35 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation + +extension SwiftfinStore.V1 { + + static let schema = CoreStoreSchema( + modelVersion: "V1", + entities: [ + Entity("Server"), + Entity("User"), + ], + versionLock: [ + "Server": [ + 0x4E8_8201_635C_2BB5, + 0x7A7_85D8_A65D_177C, + 0x3FE6_7B5B_D402_6EEE, + 0x8893_16D4_188E_B136, + ], + "User": [ + 0x1001_44F1_4D4D_5A31, + 0x828F_7943_7D0B_4C03, + 0x3824_5761_B815_D61A, + 0x3C1D_BF68_E42B_1DA6, + ], + ] + ) +} diff --git a/Shared/jellypigstore/V2Schema/V2AnyData.swift b/Shared/jellyfloodstore/V2Schema 3/V2AnyData.swift similarity index 100% rename from Shared/jellypigstore/V2Schema/V2AnyData.swift rename to Shared/jellyfloodstore/V2Schema 3/V2AnyData.swift diff --git a/Shared/jellypigstore/V2Schema/V2ServerModel.swift b/Shared/jellyfloodstore/V2Schema 3/V2ServerModel.swift similarity index 100% rename from Shared/jellypigstore/V2Schema/V2ServerModel.swift rename to Shared/jellyfloodstore/V2Schema 3/V2ServerModel.swift diff --git a/Shared/jellyfloodstore/V2Schema 3/V2UserModel.swift b/Shared/jellyfloodstore/V2Schema 3/V2UserModel.swift new file mode 100644 index 00000000..45098bb3 --- /dev/null +++ b/Shared/jellyfloodstore/V2Schema 3/V2UserModel.swift @@ -0,0 +1,35 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation +import UIKit + +extension SwiftfinStore.V2 { + + final class StoredUser: CoreStoreObject { + + @Field.Stored("username") + var username: String = "" + + @Field.Stored("id") + var id: String = "" + + @Field.Relationship("server") + var server: StoredServer? + + var state: UserState { + guard let server = server else { fatalError("No server associated with user") } + return .init( + id: id, + serverID: server.id, + username: username + ) + } + } +} diff --git a/Shared/jellypigstore/V2Schema/jellypigstore+V2.swift b/Shared/jellyfloodstore/V2Schema 3/jellypigstore+V2.swift similarity index 100% rename from Shared/jellypigstore/V2Schema/jellypigstore+V2.swift rename to Shared/jellyfloodstore/V2Schema 3/jellypigstore+V2.swift diff --git a/Shared/jellyfloodstore/V2Schema/V2AnyData.swift b/Shared/jellyfloodstore/V2Schema/V2AnyData.swift new file mode 100644 index 00000000..7df349e4 --- /dev/null +++ b/Shared/jellyfloodstore/V2Schema/V2AnyData.swift @@ -0,0 +1,181 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import CoreStore +import Defaults +import Factory +import Foundation +import SwiftUI + +extension SwiftfinStore.V2 { + + /// Used to store arbitrary data with a `name` and `ownerID`. + /// + /// Essentially just a bag-of-bytes model like UserDefaults, but for + /// storing larger objects or arbitrary collection elements. + /// + /// Relationships generally take the form below, where `ownerID` is like + /// an object, `domain`s are property names, and `key`s are values within + /// the `domain`. An instance where `domain == key` is like a single-value + /// property while a `domain` with many `keys` is like a dictionary. + /// + /// ownerID + /// - domain + /// - key(s) + /// - domain + /// - key(s) + /// + /// This can be useful to not require migrations on model objects for new + /// "properties". + final class AnyData: CoreStoreObject { + + @Field.Stored("data") + var data: Data? + + @Field.Stored("domain") + var domain: String = "" + + @Field.Stored("key") + var key: String = "" + + @Field.Stored("ownerID") + var ownerID: String = "" + } +} + +extension AnyStoredData { + + /// Note: if `domain == nil`, will default to "none" to avoid local typing issues. + static func fetch(_ key: String, ownerID: String, domain: String? = nil) throws -> Value? { + + let domain = domain ?? "none" + + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + + let clause = From() + .where(ownerFilter && keyFilter && domainFilter) + + let values = try SwiftfinStore.dataStack + .fetchAll( + clause + ) + .compactMap(\.data) + .compactMap { + try JSONDecoder().decode(Value.self, from: $0) + } + + assert(values.count < 2, "More than one stored object for same name, id, and domain!") + + return values.first + } + + /// Note: if `domain == nil`, will default to "none" to avoid local typing issues. + static func store(value: Value, key: String, ownerID: String, domain: String? = nil) throws { + + let domain = domain ?? "none" + + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + + let clause = From() + .where(ownerFilter && keyFilter && domainFilter) + + try SwiftfinStore.dataStack.perform { transaction in + let existing = try transaction.fetchAll(clause) + + assert(existing.count < 2, "More than one stored object for same name, id, and domain!") + + let encodedData = try JSONEncoder().encode(value) + + if let existingObject = existing.first { + let edit = transaction.edit(existingObject) + edit?.data = encodedData + } else { + let newData = transaction.create(Into()) + + newData.data = encodedData + newData.domain = domain + newData.ownerID = ownerID + newData.key = key + } + } + } + + /// Creates a fetch clause to be used within local transactions + static func fetchClause(ownerID: String) -> FetchChainBuilder { + From() + .where(\.$ownerID == ownerID) + } + + /// Creates a fetch clause to be used within local transactions + /// + /// Note: if `domain == nil`, will default to "none" + static func fetchClause(ownerID: String, domain: String? = nil) throws -> FetchChainBuilder { + let domain = domain ?? "none" + + return From() + .where(\.$ownerID == ownerID && \.$domain == domain) + } + + /// Creates a fetch clause to be used within local transactions + /// + /// Note: if `domain == nil`, will default to "none" + static func fetchClause(key: String, ownerID: String, domain: String? = nil) throws -> FetchChainBuilder { + let domain = domain ?? "none" + + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + + return From() + .where(ownerFilter && keyFilter && domainFilter) + } + + /// Delete all data with the given `ownerID` + /// + /// Note: if performing deletion with another transaction, use `fetchClause` + /// instead to delete within the other transaction + static func deleteAll(ownerID: String) throws { + try SwiftfinStore.dataStack.perform { transaction in + let values = try transaction.fetchAll(fetchClause(ownerID: ownerID)) + + transaction.delete(values) + } + } + + /// Delete all data with the given `ownerID` and `domain` + /// + /// Note: if performing deletion with another transaction, use `fetchClause` + /// instead to delete within the other transaction + /// Note: if `domain == nil`, will default to "none" + static func deleteAll(ownerID: String, domain: String? = nil) throws { + try SwiftfinStore.dataStack.perform { transaction in + let values = try transaction.fetchAll(fetchClause(ownerID: ownerID, domain: domain)) + + transaction.delete(values) + } + } + + /// Delete all data given `key`, `ownerID`, and `domain`. + /// + /// + /// Note: if performing deletion with another transaction, use `fetchClause` + /// instead to delete within the other transaction + /// Note: if `domain == nil`, will default to "none" + static func delete(key: String, ownerID: String, domain: String? = nil) throws { + try SwiftfinStore.dataStack.perform { transaction in + let values = try transaction.fetchAll(fetchClause(key: key, ownerID: ownerID, domain: domain)) + + transaction.delete(values) + } + } +} diff --git a/Shared/jellyfloodstore/V2Schema/V2ServerModel.swift b/Shared/jellyfloodstore/V2Schema/V2ServerModel.swift new file mode 100644 index 00000000..e57ba0d6 --- /dev/null +++ b/Shared/jellyfloodstore/V2Schema/V2ServerModel.swift @@ -0,0 +1,43 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation + +// TODO: complete and make migration + +extension SwiftfinStore.V2 { + + final class StoredServer: CoreStoreObject { + + @Field.Coded("urls", coder: FieldCoders.Json.self) + var urls: Set = [] + + @Field.Stored("currentURL") + var currentURL: URL = .init(string: "/")! + + @Field.Stored("name") + var name: String = "" + + @Field.Stored("id") + var id: String = "" + + @Field.Relationship("users", inverse: \StoredUser.$server) + var users: Set + + var state: ServerState { + .init( + urls: urls, + currentURL: currentURL, + name: name, + id: id, + usersIDs: users.map(\.id) + ) + } + } +} diff --git a/Shared/jellypigstore/V2Schema/V2UserModel.swift b/Shared/jellyfloodstore/V2Schema/V2UserModel.swift similarity index 100% rename from Shared/jellypigstore/V2Schema/V2UserModel.swift rename to Shared/jellyfloodstore/V2Schema/V2UserModel.swift diff --git a/Shared/jellyfloodstore/V2Schema/jellyfloodstore+V2.swift b/Shared/jellyfloodstore/V2Schema/jellyfloodstore+V2.swift new file mode 100644 index 00000000..d6843832 --- /dev/null +++ b/Shared/jellyfloodstore/V2Schema/jellyfloodstore+V2.swift @@ -0,0 +1,29 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Foundation + +// TODO: complete and make migration + +extension SwiftfinStore.V2 { + + static let schema = CoreStoreSchema( + modelVersion: "V2", + entities: [ + Entity("Server"), + Entity("User"), + Entity("AnyData"), + ], + versionLock: [ + "AnyData": [0x749D_39C2_219D_4918, 0x9281_539F_1DFB_63E1, 0x293F_D0B7_B64C_E984, 0x8F2F_91F2_33EA_8EB5], + "Server": [0xC831_8BCA_3734_8B36, 0x78F9_E383_4EC4_0409, 0xC32D_7C44_D347_6825, 0x8593_766E_CEC6_0CFD], + "User": [0xAE4F_5BDB_1E41_8019, 0x7E5D_7722_D051_7C12, 0x3867_AC59_9F91_A895, 0x6CB9_F896_6ED4_4944], + ] + ) +} diff --git a/Shared/jellyfloodstore/jellyfloodstore 2.swift b/Shared/jellyfloodstore/jellyfloodstore 2.swift new file mode 100644 index 00000000..14f973f6 --- /dev/null +++ b/Shared/jellyfloodstore/jellyfloodstore 2.swift @@ -0,0 +1,80 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Factory +import Foundation +import JellyfinAPI +import Logging + +typealias AnyStoredData = SwiftfinStore.V2.AnyData +typealias ServerModel = SwiftfinStore.V2.StoredServer +typealias UserModel = SwiftfinStore.V2.StoredUser + +typealias ServerState = SwiftfinStore.State.Server +typealias UserState = SwiftfinStore.State.User + +// MARK: Namespaces + +extension Container { + var dataStore: Factory { self { SwiftfinStore.dataStack }.singleton } +} + +enum SwiftfinStore { + + /// Namespace for V1 objects + enum V1 {} + + /// Namespace for V2 objects + enum V2 {} + + /// Namespace for state objects + enum State {} + + private static let logger = Logger.swiftfin() +} + +// MARK: dataStack + +// TODO: cleanup + +extension SwiftfinStore { + + static let dataStack: DataStack = { + DataStack( + V1.schema, + V2.schema, + migrationChain: ["V1", "V2"] + ) + }() + + private static let storage: SQLiteStore = { + SQLiteStore( + fileName: "Swiftfin.sqlite", + migrationMappingProviders: [Mappings.userV1_V2] + ) + }() + + static func requiresMigration() throws -> Bool { + try dataStack.requiredMigrationsForStorage(storage).isNotEmpty + } + + static func setupDataStack() async throws { + try await withCheckedThrowingContinuation { continuation in + _ = dataStack.addStorage(storage) { result in + switch result { + case .success: + continuation.resume() + case let .failure(error): + logger.error("Failed creating datastack with: \(error.localizedDescription)") + continuation.resume(throwing: JellyfinAPIError("Failed creating datastack with: \(error.localizedDescription)")) + } + } + } + } +} diff --git a/Shared/jellypigstore/jellypigstore+Mappings.swift b/Shared/jellyfloodstore/jellyfloodstore+Mappings 2.swift similarity index 100% rename from Shared/jellypigstore/jellypigstore+Mappings.swift rename to Shared/jellyfloodstore/jellyfloodstore+Mappings 2.swift diff --git a/Shared/jellyfloodstore/jellyfloodstore+Mappings.swift b/Shared/jellyfloodstore/jellyfloodstore+Mappings.swift new file mode 100644 index 00000000..8f9b01ba --- /dev/null +++ b/Shared/jellyfloodstore/jellyfloodstore+Mappings.swift @@ -0,0 +1,53 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Factory +import Foundation +import KeychainSwift + +extension SwiftfinStore { + enum Mappings {} +} + +extension SwiftfinStore.Mappings { + + // MARK: User V1 to V2 + + // V1 users had access token stored in Core Data. + // Move to the Keychain. + + static let userV1_V2 = { + CustomSchemaMappingProvider( + from: "V1", + to: "V2", + entityMappings: [ + .transformEntity( + sourceEntity: "User", + destinationEntity: "User", + transformer: { sourceObject, createDestinationObject in + + // move access token to Keychain + if let id = sourceObject["id"] as? String, let accessToken = sourceObject["accessToken"] as? String { + Container.shared.keychainService().set(accessToken, forKey: "\(id)-accessToken") + } else { + fatalError("wtf") + } + + let destinationObject = createDestinationObject() + destinationObject.enumerateAttributes { attribute, sourceAttribute in + if let sourceAttribute { + destinationObject[attribute] = sourceObject[attribute] + } + } + } + ), + ] + ) + }() +} diff --git a/Shared/jellyfloodstore/jellyfloodstore+ServerState 2.swift b/Shared/jellyfloodstore/jellyfloodstore+ServerState 2.swift new file mode 100644 index 00000000..3684274a --- /dev/null +++ b/Shared/jellyfloodstore/jellyfloodstore+ServerState 2.swift @@ -0,0 +1,109 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Factory +import Foundation +import JellyfinAPI +import Pulse + +extension SwiftfinStore.State { + + struct Server: Hashable, Identifiable { + + let urls: Set + let currentURL: URL + let name: String + let id: String + let userIDs: [String] + + init( + urls: Set, + currentURL: URL, + name: String, + id: String, + usersIDs: [String] + ) { + self.urls = urls + self.currentURL = currentURL + self.name = name + self.id = id + self.userIDs = usersIDs + } + + /// - Note: Since this is created from a server, it does not + /// have a user access token. + var client: JellyfinClient { + JellyfinClient( + configuration: .swiftfinConfiguration(url: currentURL), + sessionConfiguration: .swiftfin, + sessionDelegate: URLSessionProxyDelegate(logger: NetworkLogger.swiftfin()) + ) + } + } +} + +extension ServerState { + + /// Deletes the model that this state represents and + /// all settings from `StoredValues`. + func delete() throws { + try SwiftfinStore.dataStack.perform { transaction in + guard let storedServer = try transaction.fetchOne(From().where(\.$id == id)) else { + throw JellyfinAPIError("Unable to find server to delete") + } + + let storedDataClause = AnyStoredData.fetchClause(ownerID: id) + let storedData = try transaction.fetchAll(storedDataClause) + + transaction.delete(storedData) + transaction.delete(storedServer) + } + } + + func getPublicSystemInfo() async throws -> PublicSystemInfo { + + let request = Paths.getPublicSystemInfo + let response = try await client.send(request) + + return response.value + } + + var splashScreenImageSource: ImageSource { + let request = Paths.getSplashscreen() + return ImageSource(url: client.fullURL(with: request)) + } + + @MainActor + func updateServerInfo() async throws { + guard let server = try? SwiftfinStore.dataStack.fetchOne( + From().where(Where(\.$id == id)) + ) else { return } + + let publicInfo = try await getPublicSystemInfo() + + try SwiftfinStore.dataStack.perform { transaction in + guard let newServer = transaction.edit(server) else { return } + + newServer.name = publicInfo.serverName ?? newServer.name + newServer.id = publicInfo.id ?? newServer.id + } + + StoredValues[.Server.publicInfo(id: server.id)] = publicInfo + } + + var isVersionCompatible: Bool { + let publicInfo = StoredValues[.Server.publicInfo(id: self.id)] + + if let version = publicInfo.version { + return JellyfinClient.Version(stringLiteral: version).majorMinor >= JellyfinClient.sdkVersion.majorMinor + } else { + return false + } + } +} diff --git a/Shared/jellypigstore/jellypigstore+ServerState.swift b/Shared/jellyfloodstore/jellyfloodstore+ServerState.swift similarity index 100% rename from Shared/jellypigstore/jellypigstore+ServerState.swift rename to Shared/jellyfloodstore/jellyfloodstore+ServerState.swift diff --git a/Shared/jellyfloodstore/jellyfloodstore+UserState 2.swift b/Shared/jellyfloodstore/jellyfloodstore+UserState 2.swift new file mode 100644 index 00000000..374cb7fc --- /dev/null +++ b/Shared/jellyfloodstore/jellyfloodstore+UserState 2.swift @@ -0,0 +1,178 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Factory +import Foundation +import JellyfinAPI +import KeychainSwift +import Pulse +import UIKit + +// Note: it is kind of backwards to have a "state" object with a mix of +// non-mutable and "mutable" values, but it just works. + +extension SwiftfinStore.State { + + struct User: Hashable, Identifiable { + + let id: String + let serverID: String + let username: String + + init( + id: String, + serverID: String, + username: String + ) { + self.id = id + self.serverID = serverID + self.username = username + } + } +} + +extension UserState { + + typealias Key = StoredValues.Key + + var accessToken: String { + get { + guard let accessToken = Container.shared.keychainService().get("\(id)-accessToken") else { + assertionFailure("access token missing in keychain") + return "" + } + + return accessToken + } + nonmutating set { + Container.shared.keychainService().set(newValue, forKey: "\(id)-accessToken") + } + } + + var data: UserDto { + get { + StoredValues[.User.data(id: id)] + } + nonmutating set { + StoredValues[.User.data(id: id)] = newValue + } + } + + var permissions: UserPermissions { + UserPermissions(data.policy) + } + + var pin: String { + get { + guard let pin = Container.shared.keychainService().get("\(id)-pin") else { + assertionFailure("pin missing in keychain") + return "" + } + + return pin + } + nonmutating set { + Container.shared.keychainService().set(newValue, forKey: "\(id)-pin") + } + } + + var pinHint: String { + get { + StoredValues[.User.pinHint(id: id)] + } + nonmutating set { + StoredValues[.User.pinHint(id: id)] = newValue + } + } + + var accessPolicy: UserAccessPolicy { + get { + StoredValues[.User.accessPolicy(id: id)] + } + nonmutating set { + StoredValues[.User.accessPolicy(id: id)] = newValue + } + } +} + +extension UserState { + + /// Deletes the model that this state represents and + /// all settings from `Defaults` `Keychain`, and `StoredValues` + func delete() throws { + try SwiftfinStore.dataStack.perform { transaction in + guard let storedUser = try transaction.fetchOne(From().where(\.$id == id)) else { + throw JellyfinAPIError("Unable to find user to delete") + } + + let storedDataClause = AnyStoredData.fetchClause(ownerID: id) + let storedData = try transaction.fetchAll(storedDataClause) + + transaction.delete(storedUser) + transaction.delete(storedData) + } + + UserDefaults.userSuite(id: id).removeAll() + + let keychain = Container.shared.keychainService() + keychain.delete("\(id)-pin") + } + + /// Deletes user settings from `UserDefaults` and `StoredValues` + /// + /// Note: if performing deletion with another transaction, use + /// `AnyStoredData.fetchClause` instead within that transaction + /// and delete `Defaults` manually + func deleteSettings() throws { + try SwiftfinStore.dataStack.perform { transaction in + let userData = try transaction.fetchAll( + From() + .where(combineByAnd: Where(\.$ownerID == id), Where("%K BEGINSWITH %@", "domain", "setting")) + ) + + transaction.delete(userData) + } + + UserDefaults.userSuite(id: id).removeAll() + } + + /// Must pass the server to create a JellyfinClient + /// with an access token + func getUserData(server: ServerState) async throws -> UserDto { + let client = JellyfinClient( + configuration: .swiftfinConfiguration(url: server.currentURL), + sessionConfiguration: .swiftfin, + sessionDelegate: URLSessionProxyDelegate(logger: NetworkLogger.swiftfin()), + accessToken: accessToken + ) + + let request = Paths.getCurrentUser + let response = try await client.send(request) + + return response.value + } + + // we will always crop to a square, so just use width + func profileImageSource( + client: JellyfinClient, + maxWidth: CGFloat? = nil + ) -> ImageSource { + let scaleWidth = maxWidth == nil ? nil : UIScreen.main.scale(maxWidth!) + + let parameters = Paths.GetUserImageParameters( + userID: id, + maxWidth: scaleWidth + ) + let request = Paths.getUserImage(parameters: parameters) + + let profileImageURL = client.fullURL(with: request) + + return ImageSource(url: profileImageURL) + } +} diff --git a/Shared/jellypigstore/jellypigstore+UserState.swift b/Shared/jellyfloodstore/jellyfloodstore+UserState.swift similarity index 100% rename from Shared/jellypigstore/jellypigstore+UserState.swift rename to Shared/jellyfloodstore/jellyfloodstore+UserState.swift diff --git a/Shared/jellypigstore/jellypigstore.swift b/Shared/jellyfloodstore/jellyfloodstore.swift similarity index 100% rename from Shared/jellypigstore/jellypigstore.swift rename to Shared/jellyfloodstore/jellyfloodstore.swift diff --git a/jellypig tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift b/Swiftfin tvOS/App/PreferenceUIHosting 2/PreferenceUIHostingController.swift similarity index 100% rename from jellypig tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift rename to Swiftfin tvOS/App/PreferenceUIHosting 2/PreferenceUIHostingController.swift diff --git a/jellypig tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift b/Swiftfin tvOS/App/PreferenceUIHosting 2/PreferenceUIHostingSwizzling.swift similarity index 100% rename from jellypig tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift rename to Swiftfin tvOS/App/PreferenceUIHosting 2/PreferenceUIHostingSwizzling.swift diff --git a/Swiftfin tvOS/App/SwiftfinApp 2.swift b/Swiftfin tvOS/App/SwiftfinApp 2.swift new file mode 100644 index 00000000..fca7516d --- /dev/null +++ b/Swiftfin tvOS/App/SwiftfinApp 2.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Defaults +import Factory +import Logging +import Nuke +import Pulse +import PulseLogHandler +import SwiftUI + +@main +struct SwiftfinApp: App { + + init() { + + // Logging + LoggingSystem.bootstrap { label in + + let handlers: [any LogHandler] = [PersistentLogHandler(label: label)] + #if DEBUG + .appending(SwiftfinConsoleHandler()) + #endif + + var multiplexHandler = MultiplexLogHandler(handlers) + multiplexHandler.logLevel = .trace + return multiplexHandler + } + + // CoreStore + + CoreStoreDefaults.dataStack = SwiftfinStore.dataStack + CoreStoreDefaults.logger = SwiftfinCorestoreLogger() + + // Nuke + + ImageCache.shared.costLimit = 1024 * 1024 * 200 // 200 MB + ImageCache.shared.ttl = 300 // 5 min + + ImageDecoderRegistry.shared.register { context in + guard let mimeType = context.urlResponse?.mimeType else { return nil } + return mimeType.contains("svg") ? ImageDecoders.Empty() : nil + } + + ImagePipeline.shared = .Swiftfin.posters + + // UIKit + + UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.label] + + // don't keep last user id + if Defaults[.signOutOnClose] { + Defaults[.lastSignedInUserID] = .signedOut + } + } + + var body: some Scene { + WindowGroup { + RootView() + .onNotification(.applicationDidEnterBackground) { + Defaults[.backgroundTimeStamp] = Date.now + } + .onNotification(.applicationWillEnterForeground) { + // TODO: needs to check if any background playback is happening + let backgroundedInterval = Date.now.timeIntervalSince(Defaults[.backgroundTimeStamp]) + + if Defaults[.signOutOnBackground], backgroundedInterval > Defaults[.backgroundSignOutInterval] { + Defaults[.lastSignedInUserID] = .signedOut + Container.shared.currentUserSession.reset() + Notifications[.didSignOut].post() + } + } + } + } +} diff --git a/Swiftfin tvOS/App/SwiftfinApp.swift b/Swiftfin tvOS/App/SwiftfinApp.swift new file mode 100644 index 00000000..fca7516d --- /dev/null +++ b/Swiftfin tvOS/App/SwiftfinApp.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Defaults +import Factory +import Logging +import Nuke +import Pulse +import PulseLogHandler +import SwiftUI + +@main +struct SwiftfinApp: App { + + init() { + + // Logging + LoggingSystem.bootstrap { label in + + let handlers: [any LogHandler] = [PersistentLogHandler(label: label)] + #if DEBUG + .appending(SwiftfinConsoleHandler()) + #endif + + var multiplexHandler = MultiplexLogHandler(handlers) + multiplexHandler.logLevel = .trace + return multiplexHandler + } + + // CoreStore + + CoreStoreDefaults.dataStack = SwiftfinStore.dataStack + CoreStoreDefaults.logger = SwiftfinCorestoreLogger() + + // Nuke + + ImageCache.shared.costLimit = 1024 * 1024 * 200 // 200 MB + ImageCache.shared.ttl = 300 // 5 min + + ImageDecoderRegistry.shared.register { context in + guard let mimeType = context.urlResponse?.mimeType else { return nil } + return mimeType.contains("svg") ? ImageDecoders.Empty() : nil + } + + ImagePipeline.shared = .Swiftfin.posters + + // UIKit + + UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.label] + + // don't keep last user id + if Defaults[.signOutOnClose] { + Defaults[.lastSignedInUserID] = .signedOut + } + } + + var body: some Scene { + WindowGroup { + RootView() + .onNotification(.applicationDidEnterBackground) { + Defaults[.backgroundTimeStamp] = Date.now + } + .onNotification(.applicationWillEnterForeground) { + // TODO: needs to check if any background playback is happening + let backgroundedInterval = Date.now.timeIntervalSince(Defaults[.backgroundTimeStamp]) + + if Defaults[.signOutOnBackground], backgroundedInterval > Defaults[.backgroundSignOutInterval] { + Defaults[.lastSignedInUserID] = .signedOut + Container.shared.currentUserSession.reset() + Notifications[.didSignOut].post() + } + } + } + } +} diff --git a/Swiftfin tvOS/Components/CapsuleSlider 2.swift b/Swiftfin tvOS/Components/CapsuleSlider 2.swift new file mode 100644 index 00000000..3d811cd7 --- /dev/null +++ b/Swiftfin tvOS/Components/CapsuleSlider 2.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct CapsuleSlider: View { + + @Binding + private var value: Value + + @FocusState + private var isFocused: Bool + + private let total: Value + private var onEditingChanged: (Bool) -> Void + + init(value: Binding, total: Value) { + self._value = value + self.total = total + self.onEditingChanged = { _ in } + } + + var body: some View { + SliderContainer( + value: $value, + total: total, + onEditingChanged: onEditingChanged + ) { + CapsuleSliderContent() + } + } +} + +extension CapsuleSlider { + + func onEditingChanged(_ action: @escaping (Bool) -> Void) -> Self { + copy(modifying: \.onEditingChanged, with: action) + } +} + +private struct CapsuleSliderContent: SliderContentView { + + @EnvironmentObject + var sliderState: SliderContainerState + + var body: some View { + ProgressView(value: sliderState.value, total: sliderState.total) + .progressViewStyle(PlaybackProgressViewStyle(cornerStyle: .round)) + .frame(height: 30) + } +} diff --git a/Swiftfin tvOS/Components/CapsuleSlider.swift b/Swiftfin tvOS/Components/CapsuleSlider.swift new file mode 100644 index 00000000..3d811cd7 --- /dev/null +++ b/Swiftfin tvOS/Components/CapsuleSlider.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct CapsuleSlider: View { + + @Binding + private var value: Value + + @FocusState + private var isFocused: Bool + + private let total: Value + private var onEditingChanged: (Bool) -> Void + + init(value: Binding, total: Value) { + self._value = value + self.total = total + self.onEditingChanged = { _ in } + } + + var body: some View { + SliderContainer( + value: $value, + total: total, + onEditingChanged: onEditingChanged + ) { + CapsuleSliderContent() + } + } +} + +extension CapsuleSlider { + + func onEditingChanged(_ action: @escaping (Bool) -> Void) -> Self { + copy(modifying: \.onEditingChanged, with: action) + } +} + +private struct CapsuleSliderContent: SliderContentView { + + @EnvironmentObject + var sliderState: SliderContainerState + + var body: some View { + ProgressView(value: sliderState.value, total: sliderState.total) + .progressViewStyle(PlaybackProgressViewStyle(cornerStyle: .round)) + .frame(height: 30) + } +} diff --git a/Swiftfin tvOS/Components/CinematicBackgroundView 2.swift b/Swiftfin tvOS/Components/CinematicBackgroundView 2.swift new file mode 100644 index 00000000..83cde560 --- /dev/null +++ b/Swiftfin tvOS/Components/CinematicBackgroundView 2.swift @@ -0,0 +1,61 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import JellyfinAPI +import SwiftUI + +struct CinematicBackgroundView: View { + + @ObservedObject + var viewModel: Proxy + + @StateObject + private var proxy: RotateContentView.Proxy = .init() + + var initialItem: (any Poster)? + + var body: some View { + RotateContentView(proxy: proxy) + .onChange(of: viewModel.currentItem) { _, newItem in + proxy.update { + ImageView(newItem?.cinematicImageSources(maxWidth: nil) ?? []) + .placeholder { _ in + Color.clear + } + .failure { + Color.clear + } + .aspectRatio(contentMode: .fill) + } + } + } + + class Proxy: ObservableObject { + + @Published + var currentItem: AnyPoster? + + private var cancellables = Set() + private var currentItemSubject = CurrentValueSubject(nil) + + init() { + currentItemSubject + .debounce(for: 0.5, scheduler: DispatchQueue.main) + .removeDuplicates() + .sink { newItem in + self.currentItem = newItem + } + .store(in: &cancellables) + } + + func select(item: some Poster) { + currentItemSubject.send(AnyPoster(item)) + } + } +} diff --git a/Swiftfin tvOS/Components/CinematicBackgroundView.swift b/Swiftfin tvOS/Components/CinematicBackgroundView.swift new file mode 100644 index 00000000..83cde560 --- /dev/null +++ b/Swiftfin tvOS/Components/CinematicBackgroundView.swift @@ -0,0 +1,61 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import JellyfinAPI +import SwiftUI + +struct CinematicBackgroundView: View { + + @ObservedObject + var viewModel: Proxy + + @StateObject + private var proxy: RotateContentView.Proxy = .init() + + var initialItem: (any Poster)? + + var body: some View { + RotateContentView(proxy: proxy) + .onChange(of: viewModel.currentItem) { _, newItem in + proxy.update { + ImageView(newItem?.cinematicImageSources(maxWidth: nil) ?? []) + .placeholder { _ in + Color.clear + } + .failure { + Color.clear + } + .aspectRatio(contentMode: .fill) + } + } + } + + class Proxy: ObservableObject { + + @Published + var currentItem: AnyPoster? + + private var cancellables = Set() + private var currentItemSubject = CurrentValueSubject(nil) + + init() { + currentItemSubject + .debounce(for: 0.5, scheduler: DispatchQueue.main) + .removeDuplicates() + .sink { newItem in + self.currentItem = newItem + } + .store(in: &cancellables) + } + + func select(item: some Poster) { + currentItemSubject.send(AnyPoster(item)) + } + } +} diff --git a/Swiftfin tvOS/Components/CinematicItemSelector 2.swift b/Swiftfin tvOS/Components/CinematicItemSelector 2.swift new file mode 100644 index 00000000..742fe433 --- /dev/null +++ b/Swiftfin tvOS/Components/CinematicItemSelector 2.swift @@ -0,0 +1,113 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import JellyfinAPI +import SwiftUI + +// TODO: make new protocol for cinematic view image provider +// TODO: better name + +struct CinematicItemSelector: View { + + @FocusState + private var isSectionFocused + + @FocusedValue(\.focusedPoster) + private var focusedPoster + + @StateObject + private var viewModel: CinematicBackgroundView.Proxy = .init() + + private var topContent: (Item) -> any View + private var itemContent: (Item) -> any View + private var trailingContent: () -> any View + private var onSelect: (Item) -> Void + + let items: [Item] + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + + if let focusedPoster, let focusedItem = focusedPoster._poster as? Item { + topContent(focusedItem) + .eraseToAnyView() + .id(focusedItem.hashValue) + .transition(.opacity) + } + + // TODO: fix intrinsic content sizing without frame + PosterHStack( + type: .landscape, + items: items, + action: onSelect, + label: itemContent + ) + .frame(height: 400) + } + .frame(height: UIScreen.main.bounds.height - 75, alignment: .bottomLeading) + .frame(maxWidth: .infinity) + .background(alignment: .top) { + CinematicBackgroundView( + viewModel: viewModel, + initialItem: items.first + ) + .overlay { + Color.black + .maskLinearGradient { + (location: 0.5, opacity: 0) + (location: 0.6, opacity: 0.4) + (location: 1, opacity: 1) + } + } + .frame(height: UIScreen.main.bounds.height) + .maskLinearGradient { + (location: 0.9, opacity: 1) + (location: 1, opacity: 0) + } + } + .onChange(of: focusedPoster) { + guard let focusedPoster, isSectionFocused else { return } + viewModel.select(item: focusedPoster) + } + .focusSection() + .focused($isSectionFocused) + } +} + +extension CinematicItemSelector { + + init(items: [Item]) { + self.init( + topContent: { _ in EmptyView() }, + itemContent: { _ in EmptyView() }, + trailingContent: { EmptyView() }, + onSelect: { _ in }, + items: items + ) + } +} + +extension CinematicItemSelector { + + func topContent(@ViewBuilder _ content: @escaping (Item) -> any View) -> Self { + copy(modifying: \.topContent, with: content) + } + + func content(@ViewBuilder _ content: @escaping (Item) -> any View) -> Self { + copy(modifying: \.itemContent, with: content) + } + + func trailingContent(@ViewBuilder _ content: @escaping () -> T) -> Self { + copy(modifying: \.trailingContent, with: content) + } + + func onSelect(_ action: @escaping (Item) -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin tvOS/Components/CinematicItemSelector.swift b/Swiftfin tvOS/Components/CinematicItemSelector.swift new file mode 100644 index 00000000..742fe433 --- /dev/null +++ b/Swiftfin tvOS/Components/CinematicItemSelector.swift @@ -0,0 +1,113 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import JellyfinAPI +import SwiftUI + +// TODO: make new protocol for cinematic view image provider +// TODO: better name + +struct CinematicItemSelector: View { + + @FocusState + private var isSectionFocused + + @FocusedValue(\.focusedPoster) + private var focusedPoster + + @StateObject + private var viewModel: CinematicBackgroundView.Proxy = .init() + + private var topContent: (Item) -> any View + private var itemContent: (Item) -> any View + private var trailingContent: () -> any View + private var onSelect: (Item) -> Void + + let items: [Item] + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + + if let focusedPoster, let focusedItem = focusedPoster._poster as? Item { + topContent(focusedItem) + .eraseToAnyView() + .id(focusedItem.hashValue) + .transition(.opacity) + } + + // TODO: fix intrinsic content sizing without frame + PosterHStack( + type: .landscape, + items: items, + action: onSelect, + label: itemContent + ) + .frame(height: 400) + } + .frame(height: UIScreen.main.bounds.height - 75, alignment: .bottomLeading) + .frame(maxWidth: .infinity) + .background(alignment: .top) { + CinematicBackgroundView( + viewModel: viewModel, + initialItem: items.first + ) + .overlay { + Color.black + .maskLinearGradient { + (location: 0.5, opacity: 0) + (location: 0.6, opacity: 0.4) + (location: 1, opacity: 1) + } + } + .frame(height: UIScreen.main.bounds.height) + .maskLinearGradient { + (location: 0.9, opacity: 1) + (location: 1, opacity: 0) + } + } + .onChange(of: focusedPoster) { + guard let focusedPoster, isSectionFocused else { return } + viewModel.select(item: focusedPoster) + } + .focusSection() + .focused($isSectionFocused) + } +} + +extension CinematicItemSelector { + + init(items: [Item]) { + self.init( + topContent: { _ in EmptyView() }, + itemContent: { _ in EmptyView() }, + trailingContent: { EmptyView() }, + onSelect: { _ in }, + items: items + ) + } +} + +extension CinematicItemSelector { + + func topContent(@ViewBuilder _ content: @escaping (Item) -> any View) -> Self { + copy(modifying: \.topContent, with: content) + } + + func content(@ViewBuilder _ content: @escaping (Item) -> any View) -> Self { + copy(modifying: \.itemContent, with: content) + } + + func trailingContent(@ViewBuilder _ content: @escaping () -> T) -> Self { + copy(modifying: \.trailingContent, with: content) + } + + func onSelect(_ action: @escaping (Item) -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin tvOS/Components/DotHStack 2.swift b/Swiftfin tvOS/Components/DotHStack 2.swift new file mode 100644 index 00000000..3954cd35 --- /dev/null +++ b/Swiftfin tvOS/Components/DotHStack 2.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +func DotHStack( + padding: CGFloat = 10, + @ViewBuilder content: @escaping () -> Content +) -> some View { + SeparatorHStack { + Circle() + .frame(width: 5, height: 5) + .padding(.horizontal, 10) + } content: { + content() + } +} diff --git a/Swiftfin tvOS/Components/DotHStack.swift b/Swiftfin tvOS/Components/DotHStack.swift new file mode 100644 index 00000000..3954cd35 --- /dev/null +++ b/Swiftfin tvOS/Components/DotHStack.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +func DotHStack( + padding: CGFloat = 10, + @ViewBuilder content: @escaping () -> Content +) -> some View { + SeparatorHStack { + Circle() + .frame(width: 5, height: 5) + .padding(.horizontal, 10) + } content: { + content() + } +} diff --git a/jellypig tvOS/Components/EnumPickerView.swift b/Swiftfin tvOS/Components/EnumPickerView 2.swift similarity index 100% rename from jellypig tvOS/Components/EnumPickerView.swift rename to Swiftfin tvOS/Components/EnumPickerView 2.swift diff --git a/Swiftfin tvOS/Components/EnumPickerView.swift b/Swiftfin tvOS/Components/EnumPickerView.swift new file mode 100644 index 00000000..87640f8a --- /dev/null +++ b/Swiftfin tvOS/Components/EnumPickerView.swift @@ -0,0 +1,60 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct EnumPickerView: View { + + @Binding + private var selection: EnumType + + private var descriptionView: () -> any View + private var title: String? + + var body: some View { + SplitFormWindowView() + .descriptionView(descriptionView) + .contentView { + Section { + ForEach(EnumType.allCases.asArray, id: \.hashValue) { item in + Button { + selection = item + } label: { + HStack { + Text(item.displayTitle) + + Spacer() + + if selection == item { + Image(systemName: "checkmark.circle.fill") + } + } + } + } + } + } + } +} + +extension EnumPickerView { + + init( + title: String? = nil, + selection: Binding + ) { + self.init( + selection: selection, + descriptionView: { EmptyView() }, + title: title + ) + } + + func descriptionView(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.descriptionView, with: content) + } +} diff --git a/jellypig tvOS/Components/ErrorView.swift b/Swiftfin tvOS/Components/ErrorView 2.swift similarity index 100% rename from jellypig tvOS/Components/ErrorView.swift rename to Swiftfin tvOS/Components/ErrorView 2.swift diff --git a/Swiftfin tvOS/Components/ErrorView.swift b/Swiftfin tvOS/Components/ErrorView.swift new file mode 100644 index 00000000..d3bceda8 --- /dev/null +++ b/Swiftfin tvOS/Components/ErrorView.swift @@ -0,0 +1,52 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +// TODO: should use environment refresh instead? +struct ErrorView: View { + + @Default(.accentColor) + private var accentColor + + private let error: ErrorType + private var onRetry: (() -> Void)? + + var body: some View { + VStack(spacing: 20) { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 150)) + .foregroundColor(Color.red) + + Text(error.localizedDescription) + .frame(minWidth: 250, maxWidth: 750) + .multilineTextAlignment(.center) + + if let onRetry { + ListRowButton(L10n.retry, action: onRetry) + .foregroundStyle(accentColor.overlayColor, accentColor) + .frame(maxWidth: 750) + } + } + } +} + +extension ErrorView { + + init(error: ErrorType) { + self.init( + error: error, + onRetry: nil + ) + } + + func onRetry(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onRetry, with: action) + } +} diff --git a/jellypig tvOS/Components/LandscapePosterProgressBar.swift b/Swiftfin tvOS/Components/LandscapePosterProgressBar 2.swift similarity index 100% rename from jellypig tvOS/Components/LandscapePosterProgressBar.swift rename to Swiftfin tvOS/Components/LandscapePosterProgressBar 2.swift diff --git a/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift b/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift new file mode 100644 index 00000000..c66ca950 --- /dev/null +++ b/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift @@ -0,0 +1,46 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct LandscapePosterProgressBar: View { + + private let title: String? + private let progress: Double + + init(title: String? = nil, progress: Double) { + self.title = title + self.progress = progress + } + + var body: some View { + ZStack(alignment: .bottom) { + LinearGradient( + stops: [ + .init(color: .clear, location: 0.7), + .init(color: .black.opacity(0.7), location: 1), + ], + startPoint: .top, + endPoint: .bottom + ) + + VStack(alignment: .leading, spacing: 3) { + + if let title { + Text(title) + .font(.subheadline) + .foregroundColor(.white) + } + + ProgressBar(progress: progress) + .frame(height: 5) + } + .padding(10) + } + } +} diff --git a/jellypig tvOS/Components/ListRowButton.swift b/Swiftfin tvOS/Components/ListRowButton 2.swift similarity index 100% rename from jellypig tvOS/Components/ListRowButton.swift rename to Swiftfin tvOS/Components/ListRowButton 2.swift diff --git a/Swiftfin tvOS/Components/ListRowButton.swift b/Swiftfin tvOS/Components/ListRowButton.swift new file mode 100644 index 00000000..03aebb92 --- /dev/null +++ b/Swiftfin tvOS/Components/ListRowButton.swift @@ -0,0 +1,77 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: on focus, make the cancel and destructive style +// match style like in an `alert` +struct ListRowButton: View { + + // MARK: - Environment + + @Environment(\.isEnabled) + private var isEnabled + + // MARK: - Focus State + + @FocusState + private var isFocused: Bool + + // MARK: - Button Variables + + let title: String + let role: ButtonRole? + let action: () -> Void + + // MARK: - Initializer + + init(_ title: String, role: ButtonRole? = nil, action: @escaping () -> Void) { + self.title = title + self.role = role + self.action = action + } + + // MARK: - Body + + var body: some View { + Button(action: action) { + ZStack { + RoundedRectangle(cornerRadius: 10) + .fill(secondaryStyle) + .brightness(isFocused ? 0.25 : 0) + + Text(title) + .foregroundStyle(primaryStyle) + .font(.body.weight(.bold)) + } + } + .buttonStyle(.card) + .frame(maxHeight: 75) + .focused($isFocused) + } + + // MARK: - Primary Style + + private var primaryStyle: some ShapeStyle { + if role == .destructive || role == .cancel { + return AnyShapeStyle(Color.red) + } else { + return AnyShapeStyle(HierarchicalShapeStyle.primary) + } + } + + // MARK: - Secondary Style + + private var secondaryStyle: some ShapeStyle { + if role == .destructive || role == .cancel { + return AnyShapeStyle(Color.red.opacity(0.2)) + } else { + return AnyShapeStyle(HierarchicalShapeStyle.secondary) + } + } +} diff --git a/jellypig tvOS/Components/ListRowMenu.swift b/Swiftfin tvOS/Components/ListRowMenu 2.swift similarity index 100% rename from jellypig tvOS/Components/ListRowMenu.swift rename to Swiftfin tvOS/Components/ListRowMenu 2.swift diff --git a/Swiftfin tvOS/Components/ListRowMenu.swift b/Swiftfin tvOS/Components/ListRowMenu.swift new file mode 100644 index 00000000..b6800ce1 --- /dev/null +++ b/Swiftfin tvOS/Components/ListRowMenu.swift @@ -0,0 +1,139 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct ListRowMenu: View { + + // MARK: - Focus State + + @FocusState + private var isFocused: Bool + + // MARK: - Properties + + private let title: Text + private let subtitle: Subtitle? + private let content: () -> Content + + // MARK: - Body + + var body: some View { + Menu(content: content) { + HStack { + title + .foregroundStyle(isFocused ? .black : .white) + .padding(.leading, 4) + + Spacer() + + if let subtitle { + subtitle + .foregroundStyle(isFocused ? .black : .secondary) + .brightness(isFocused ? 0.4 : 0) + } + + Image(systemName: "chevron.up.chevron.down") + .font(.body.weight(.regular)) + .foregroundStyle(isFocused ? .black : .secondary) + .brightness(isFocused ? 0.4 : 0) + } + .padding(.horizontal) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 10) + .fill(isFocused ? Color.white : Color.clear) + ) + .scaleEffect(isFocused ? 1.04 : 1.0) + .animation(.easeInOut(duration: 0.125), value: isFocused) + } + .menuStyle(.borderlessButton) + .listRowInsets(.zero) + .focused($isFocused) + } +} + +// MARK: - Initializers + +// Base initializer +extension ListRowMenu where Subtitle == Text? { + + init(_ title: Text, @ViewBuilder content: @escaping () -> Content) { + self.title = title + self.subtitle = nil + self.content = content + } + + init(_ title: Text, subtitle: Text?, @ViewBuilder content: @escaping () -> Content) { + self.title = title + self.subtitle = subtitle + self.content = content + } + + init(_ title: Text, subtitle: String?, @ViewBuilder content: @escaping () -> Content) { + self.title = title + self.subtitle = subtitle.map { Text($0) } + self.content = content + } + + init(_ title: String, @ViewBuilder content: @escaping () -> Content) { + self.title = Text(title) + self.subtitle = nil + self.content = content + } + + init(_ title: String, subtitle: String?, @ViewBuilder content: @escaping () -> Content) { + self.title = Text(title) + self.subtitle = subtitle.map { Text($0) } + self.content = content + } + + init(_ title: String, subtitle: Text?, @ViewBuilder content: @escaping () -> Content) { + self.title = Text(title) + self.subtitle = subtitle + self.content = content + } +} + +// Custom view subtitles +extension ListRowMenu { + + init(_ title: String, @ViewBuilder subtitle: @escaping () -> Subtitle, @ViewBuilder content: @escaping () -> Content) { + self.title = Text(title) + self.subtitle = subtitle() + self.content = content + } + + init(_ title: Text, @ViewBuilder subtitle: @escaping () -> Subtitle, @ViewBuilder content: @escaping () -> Content) { + self.title = title + self.subtitle = subtitle() + self.content = content + } +} + +// Initialize from a CaseIterable Enum +extension ListRowMenu where Subtitle == Text, Content == AnyView { + + init( + _ title: String, + selection: Binding + ) where ItemType: CaseIterable & Displayable & Hashable, + ItemType.AllCases: RandomAccessCollection + { + self.title = Text(title) + self.subtitle = Text(selection.wrappedValue.displayTitle) + self.content = { + Picker(title, selection: selection) { + ForEach(Array(ItemType.allCases), id: \.self) { option in + Text(option.displayTitle).tag(option) + } + } + .eraseToAnyView() + } + } +} diff --git a/jellypig tvOS/Components/NonePosterButton.swift b/Swiftfin tvOS/Components/NonePosterButton 2.swift similarity index 100% rename from jellypig tvOS/Components/NonePosterButton.swift rename to Swiftfin tvOS/Components/NonePosterButton 2.swift diff --git a/Swiftfin tvOS/Components/NonePosterButton.swift b/Swiftfin tvOS/Components/NonePosterButton.swift new file mode 100644 index 00000000..e533275a --- /dev/null +++ b/Swiftfin tvOS/Components/NonePosterButton.swift @@ -0,0 +1,37 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct NonePosterButton: View { + + let type: PosterDisplayType + + var body: some View { + Button { + ZStack { + ZStack { + Color(UIColor.darkGray) + .opacity(0.5) + + VStack(spacing: 20) { + Image(systemName: "minus.circle") + .font(.title) + .foregroundColor(.secondary) + + L10n.none.text + .font(.title3) + .foregroundColor(.secondary) + } + } + .posterStyle(type) + } + } + .buttonStyle(.card) + } +} diff --git a/Swiftfin tvOS/Components/OrderedSectionSelectorView 2.swift b/Swiftfin tvOS/Components/OrderedSectionSelectorView 2.swift new file mode 100644 index 00000000..b5b23203 --- /dev/null +++ b/Swiftfin tvOS/Components/OrderedSectionSelectorView 2.swift @@ -0,0 +1,198 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import SwiftUI + +struct OrderedSectionSelectorView: View { + + @Environment(\.editMode) + private var editMode + + @State + private var focusedElement: Element? + + @StateObject + private var selection: BindingBox<[Element]> + + private var disabledSelection: [Element] { + sources.filter { !selection.value.contains($0) } + } + + private var label: (Element) -> any View + private let sources: [Element] + private var systemImage: String + + private func move(from source: IndexSet, to destination: Int) { + selection.value.move(fromOffsets: source, toOffset: destination) + editMode?.wrappedValue = .inactive + } + + private func select(element: Element) { + if selection.value.contains(element) { + selection.value.removeAll(where: { $0 == element }) + } else { + selection.value.append(element) + } + } + + var body: some View { + NavigationStack { + SplitFormWindowView() + .descriptionView { + Image(systemName: systemImage) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + List { + EnabledSection( + elements: $selection.value, + label: label, + isEditing: editMode?.wrappedValue.isEditing ?? false, + select: select, + move: move, + header: { + Group { + HStack { + Text(L10n.enabled) + Spacer() + if editMode?.wrappedValue.isEditing ?? false { + Button(L10n.done) { + withAnimation { + editMode?.wrappedValue = .inactive + } + } + } else { + Button(L10n.edit) { + withAnimation { + editMode?.wrappedValue = .active + } + } + } + } + } + } + ) + + DisabledSection( + elements: disabledSelection, + label: label, + isEditing: editMode?.wrappedValue.isEditing ?? false, + select: select + ) + } + .environment(\.editMode, editMode) + } + .animation(.linear(duration: 0.2), value: selection.value) + } + } +} + +private struct EnabledSection: View { + + @Binding + var elements: [Element] + + let label: (Element) -> any View + let isEditing: Bool + let select: (Element) -> Void + let move: (IndexSet, Int) -> Void + let header: () -> any View + + var body: some View { + Section { + if elements.isEmpty { + Text(L10n.none) + .foregroundStyle(.secondary) + } + + ForEach(elements, id: \.self) { element in + Button { + if !isEditing { + select(element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isEditing { + Image(systemName: "minus.circle.fill") + .foregroundColor(.red) + } + } + .foregroundColor(.primary) + } + } + .onMove(perform: move) + } header: { + header() + .eraseToAnyView() + } + } +} + +private struct DisabledSection: View { + + let elements: [Element] + let label: (Element) -> any View + let isEditing: Bool + let select: (Element) -> Void + + var body: some View { + Section(L10n.disabled) { + if elements.isEmpty { + Text(L10n.none) + .foregroundStyle(.secondary) + } + + ForEach(elements, id: \.self) { element in + Button { + if !isEditing { + select(element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isEditing { + Image(systemName: "plus.circle.fill") + .foregroundColor(.green) + } + } + .foregroundColor(.primary) + } + } + } + } +} + +extension OrderedSectionSelectorView { + + init(selection: Binding<[Element]>, sources: [Element]) { + self._selection = StateObject(wrappedValue: BindingBox(source: selection)) + self.sources = sources + self.label = { Text($0.displayTitle).foregroundColor(.primary).eraseToAnyView() } + self.systemImage = "filemenu.and.selection" + } + + func label(@ViewBuilder _ content: @escaping (Element) -> any View) -> Self { + copy(modifying: \.label, with: content) + } + + func systemImage(_ systemName: String) -> Self { + copy(modifying: \.systemImage, with: systemName) + } +} diff --git a/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift b/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift new file mode 100644 index 00000000..b5b23203 --- /dev/null +++ b/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift @@ -0,0 +1,198 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import SwiftUI + +struct OrderedSectionSelectorView: View { + + @Environment(\.editMode) + private var editMode + + @State + private var focusedElement: Element? + + @StateObject + private var selection: BindingBox<[Element]> + + private var disabledSelection: [Element] { + sources.filter { !selection.value.contains($0) } + } + + private var label: (Element) -> any View + private let sources: [Element] + private var systemImage: String + + private func move(from source: IndexSet, to destination: Int) { + selection.value.move(fromOffsets: source, toOffset: destination) + editMode?.wrappedValue = .inactive + } + + private func select(element: Element) { + if selection.value.contains(element) { + selection.value.removeAll(where: { $0 == element }) + } else { + selection.value.append(element) + } + } + + var body: some View { + NavigationStack { + SplitFormWindowView() + .descriptionView { + Image(systemName: systemImage) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + List { + EnabledSection( + elements: $selection.value, + label: label, + isEditing: editMode?.wrappedValue.isEditing ?? false, + select: select, + move: move, + header: { + Group { + HStack { + Text(L10n.enabled) + Spacer() + if editMode?.wrappedValue.isEditing ?? false { + Button(L10n.done) { + withAnimation { + editMode?.wrappedValue = .inactive + } + } + } else { + Button(L10n.edit) { + withAnimation { + editMode?.wrappedValue = .active + } + } + } + } + } + } + ) + + DisabledSection( + elements: disabledSelection, + label: label, + isEditing: editMode?.wrappedValue.isEditing ?? false, + select: select + ) + } + .environment(\.editMode, editMode) + } + .animation(.linear(duration: 0.2), value: selection.value) + } + } +} + +private struct EnabledSection: View { + + @Binding + var elements: [Element] + + let label: (Element) -> any View + let isEditing: Bool + let select: (Element) -> Void + let move: (IndexSet, Int) -> Void + let header: () -> any View + + var body: some View { + Section { + if elements.isEmpty { + Text(L10n.none) + .foregroundStyle(.secondary) + } + + ForEach(elements, id: \.self) { element in + Button { + if !isEditing { + select(element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isEditing { + Image(systemName: "minus.circle.fill") + .foregroundColor(.red) + } + } + .foregroundColor(.primary) + } + } + .onMove(perform: move) + } header: { + header() + .eraseToAnyView() + } + } +} + +private struct DisabledSection: View { + + let elements: [Element] + let label: (Element) -> any View + let isEditing: Bool + let select: (Element) -> Void + + var body: some View { + Section(L10n.disabled) { + if elements.isEmpty { + Text(L10n.none) + .foregroundStyle(.secondary) + } + + ForEach(elements, id: \.self) { element in + Button { + if !isEditing { + select(element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isEditing { + Image(systemName: "plus.circle.fill") + .foregroundColor(.green) + } + } + .foregroundColor(.primary) + } + } + } + } +} + +extension OrderedSectionSelectorView { + + init(selection: Binding<[Element]>, sources: [Element]) { + self._selection = StateObject(wrappedValue: BindingBox(source: selection)) + self.sources = sources + self.label = { Text($0.displayTitle).foregroundColor(.primary).eraseToAnyView() } + self.systemImage = "filemenu.and.selection" + } + + func label(@ViewBuilder _ content: @escaping (Element) -> any View) -> Self { + copy(modifying: \.label, with: content) + } + + func systemImage(_ systemName: String) -> Self { + copy(modifying: \.systemImage, with: systemName) + } +} diff --git a/Swiftfin tvOS/Components/PosterButton 2.swift b/Swiftfin tvOS/Components/PosterButton 2.swift new file mode 100644 index 00000000..604222d1 --- /dev/null +++ b/Swiftfin tvOS/Components/PosterButton 2.swift @@ -0,0 +1,222 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +private let landscapeMaxWidth: CGFloat = 500 +private let portraitMaxWidth: CGFloat = 500 + +struct PosterButton: View { + + @EnvironmentTypeValue(\.posterOverlayRegistry) + private var posterOverlayRegistry + + @State + private var posterSize: CGSize = .zero + + private var horizontalAlignment: HorizontalAlignment + private let item: Item + private let type: PosterDisplayType + private let label: any View + private let action: () -> Void + + @ViewBuilder + private func poster(overlay: some View) -> some View { + PosterImage(item: item, type: type) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .overlay { overlay } + .contentShape(.contextMenuPreview, Rectangle()) + .posterStyle(type) + .posterShadow() + .hoverEffect(.highlight) + } + + var body: some View { + Button(action: action) { + let overlay = posterOverlayRegistry?(item) ?? + PosterButton.DefaultOverlay(item: item) + .eraseToAnyView() + + poster(overlay: overlay) + .trackingSize($posterSize) + + label + .eraseToAnyView() + } + .buttonStyle(.borderless) + .buttonBorderShape(.roundedRectangle) + .focusedValue(\.focusedPoster, AnyPoster(item)) + .accessibilityLabel(item.displayTitle) + .matchedContextMenu(for: item) { + EmptyView() + } + } +} + +extension PosterButton { + + init( + item: Item, + type: PosterDisplayType, + action: @escaping () -> Void, + @ViewBuilder label: @escaping () -> any View + ) { + self.item = item + self.type = type + self.action = action + self.label = label() + self.horizontalAlignment = .leading + } + + func horizontalAlignment(_ alignment: HorizontalAlignment) -> Self { + copy(modifying: \.horizontalAlignment, with: alignment) + } +} + +// TODO: Shared default content with iOS? +// - check if content is generally same + +extension PosterButton { + + // MARK: Default Content + + struct TitleContentView: View { + + let item: Item + + var body: some View { + Text(item.displayTitle) + .font(.footnote.weight(.regular)) + .foregroundColor(.primary) + .accessibilityLabel(item.displayTitle) + } + } + + struct SubtitleContentView: View { + + let item: Item + + var body: some View { + Text(item.subtitle ?? "") + .font(.caption.weight(.medium)) + .foregroundColor(.secondary) + } + } + + struct TitleSubtitleContentView: View { + + let item: Item + + var body: some View { + VStack(alignment: .leading) { + if item.showTitle { + TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } + + SubtitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } + } + } + + // TODO: clean up + + // Content specific for BaseItemDto episode items + struct EpisodeContentSubtitleContent: View { + + let item: Item + + var body: some View { + if let item = item as? BaseItemDto { + // Unsure why this needs 0 spacing + // compared to other default content + VStack(alignment: .leading, spacing: 0) { + if item.showTitle, let seriesName = item.seriesName { + Text(seriesName) + .font(.footnote.weight(.regular)) + .foregroundColor(.primary) + .lineLimit(1, reservesSpace: true) + } + + Subtitle(item: item) + } + } + } + + struct Subtitle: View { + + let item: BaseItemDto + + var body: some View { + + SeparatorHStack { + Circle() + .frame(width: 2, height: 2) + .padding(.horizontal, 3) + } content: { + SeparatorHStack { + Text(item.seasonEpisodeLabel ?? .emptyDash) + + if item.showTitle { + Text(item.displayTitle) + + } else if let seriesName = item.seriesName { + Text(seriesName) + } + } + } + .font(.caption) + .foregroundColor(.secondary) + .lineLimit(1) + } + } + } + + // TODO: Find better way for these indicators, see EpisodeCard + struct DefaultOverlay: View { + + @Default(.Customization.Indicators.showFavorited) + private var showFavorited + @Default(.Customization.Indicators.showProgress) + private var showProgress + @Default(.Customization.Indicators.showUnplayed) + private var showUnplayed + @Default(.Customization.Indicators.showPlayed) + private var showPlayed + + let item: Item + + var body: some View { + ZStack { + if let item = item as? BaseItemDto { + if item.canBePlayed, !item.isLiveStream, item.userData?.isPlayed == true { + WatchedIndicator(size: 45) + .isVisible(showPlayed) + } else { + if (item.userData?.playbackPositionTicks ?? 0) > 0 { + ProgressIndicator(progress: (item.userData?.playedPercentage ?? 0) / 100, height: 10) + .isVisible(showProgress) + } else if item.canBePlayed, !item.isLiveStream { + UnwatchedIndicator(size: 45) + .foregroundColor(.jellyfinPurple) + .isVisible(showUnplayed) + } + } + + if item.userData?.isFavorite == true { + FavoriteIndicator(size: 45) + .isVisible(showFavorited) + } + } + } + } + } +} diff --git a/Swiftfin tvOS/Components/PosterButton.swift b/Swiftfin tvOS/Components/PosterButton.swift new file mode 100644 index 00000000..604222d1 --- /dev/null +++ b/Swiftfin tvOS/Components/PosterButton.swift @@ -0,0 +1,222 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +private let landscapeMaxWidth: CGFloat = 500 +private let portraitMaxWidth: CGFloat = 500 + +struct PosterButton: View { + + @EnvironmentTypeValue(\.posterOverlayRegistry) + private var posterOverlayRegistry + + @State + private var posterSize: CGSize = .zero + + private var horizontalAlignment: HorizontalAlignment + private let item: Item + private let type: PosterDisplayType + private let label: any View + private let action: () -> Void + + @ViewBuilder + private func poster(overlay: some View) -> some View { + PosterImage(item: item, type: type) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .overlay { overlay } + .contentShape(.contextMenuPreview, Rectangle()) + .posterStyle(type) + .posterShadow() + .hoverEffect(.highlight) + } + + var body: some View { + Button(action: action) { + let overlay = posterOverlayRegistry?(item) ?? + PosterButton.DefaultOverlay(item: item) + .eraseToAnyView() + + poster(overlay: overlay) + .trackingSize($posterSize) + + label + .eraseToAnyView() + } + .buttonStyle(.borderless) + .buttonBorderShape(.roundedRectangle) + .focusedValue(\.focusedPoster, AnyPoster(item)) + .accessibilityLabel(item.displayTitle) + .matchedContextMenu(for: item) { + EmptyView() + } + } +} + +extension PosterButton { + + init( + item: Item, + type: PosterDisplayType, + action: @escaping () -> Void, + @ViewBuilder label: @escaping () -> any View + ) { + self.item = item + self.type = type + self.action = action + self.label = label() + self.horizontalAlignment = .leading + } + + func horizontalAlignment(_ alignment: HorizontalAlignment) -> Self { + copy(modifying: \.horizontalAlignment, with: alignment) + } +} + +// TODO: Shared default content with iOS? +// - check if content is generally same + +extension PosterButton { + + // MARK: Default Content + + struct TitleContentView: View { + + let item: Item + + var body: some View { + Text(item.displayTitle) + .font(.footnote.weight(.regular)) + .foregroundColor(.primary) + .accessibilityLabel(item.displayTitle) + } + } + + struct SubtitleContentView: View { + + let item: Item + + var body: some View { + Text(item.subtitle ?? "") + .font(.caption.weight(.medium)) + .foregroundColor(.secondary) + } + } + + struct TitleSubtitleContentView: View { + + let item: Item + + var body: some View { + VStack(alignment: .leading) { + if item.showTitle { + TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } + + SubtitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } + } + } + + // TODO: clean up + + // Content specific for BaseItemDto episode items + struct EpisodeContentSubtitleContent: View { + + let item: Item + + var body: some View { + if let item = item as? BaseItemDto { + // Unsure why this needs 0 spacing + // compared to other default content + VStack(alignment: .leading, spacing: 0) { + if item.showTitle, let seriesName = item.seriesName { + Text(seriesName) + .font(.footnote.weight(.regular)) + .foregroundColor(.primary) + .lineLimit(1, reservesSpace: true) + } + + Subtitle(item: item) + } + } + } + + struct Subtitle: View { + + let item: BaseItemDto + + var body: some View { + + SeparatorHStack { + Circle() + .frame(width: 2, height: 2) + .padding(.horizontal, 3) + } content: { + SeparatorHStack { + Text(item.seasonEpisodeLabel ?? .emptyDash) + + if item.showTitle { + Text(item.displayTitle) + + } else if let seriesName = item.seriesName { + Text(seriesName) + } + } + } + .font(.caption) + .foregroundColor(.secondary) + .lineLimit(1) + } + } + } + + // TODO: Find better way for these indicators, see EpisodeCard + struct DefaultOverlay: View { + + @Default(.Customization.Indicators.showFavorited) + private var showFavorited + @Default(.Customization.Indicators.showProgress) + private var showProgress + @Default(.Customization.Indicators.showUnplayed) + private var showUnplayed + @Default(.Customization.Indicators.showPlayed) + private var showPlayed + + let item: Item + + var body: some View { + ZStack { + if let item = item as? BaseItemDto { + if item.canBePlayed, !item.isLiveStream, item.userData?.isPlayed == true { + WatchedIndicator(size: 45) + .isVisible(showPlayed) + } else { + if (item.userData?.playbackPositionTicks ?? 0) > 0 { + ProgressIndicator(progress: (item.userData?.playedPercentage ?? 0) / 100, height: 10) + .isVisible(showProgress) + } else if item.canBePlayed, !item.isLiveStream { + UnwatchedIndicator(size: 45) + .foregroundColor(.jellyfinPurple) + .isVisible(showUnplayed) + } + } + + if item.userData?.isFavorite == true { + FavoriteIndicator(size: 45) + .isVisible(showFavorited) + } + } + } + } + } +} diff --git a/Swiftfin tvOS/Components/PosterHStack 2.swift b/Swiftfin tvOS/Components/PosterHStack 2.swift new file mode 100644 index 00000000..e6441e20 --- /dev/null +++ b/Swiftfin tvOS/Components/PosterHStack 2.swift @@ -0,0 +1,83 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import SwiftUI + +// TODO: trailing content refactor? + +struct PosterHStack: View where Data.Element == Element, Data.Index == Int { + + private var data: Data + private var title: String? + private var type: PosterDisplayType + private var label: (Element) -> any View + private var trailingContent: () -> any View + private var action: (Element) -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 20) { + + if let title { + HStack { + Text(title) + .font(.title2) + .fontWeight(.semibold) + .accessibility(addTraits: [.isHeader]) + .padding(.leading, 50) + + Spacer() + } + } + + CollectionHStack( + uniqueElements: data, + columns: type == .landscape ? 4 : 7 + ) { item in + PosterButton( + item: item, + type: type + ) { + action(item) + } label: { + label(item).eraseToAnyView() + } + } + .clipsToBounds(false) + .dataPrefix(20) + .insets(horizontal: EdgeInsets.edgePadding, vertical: 20) + .itemSpacing(EdgeInsets.edgePadding - 20) + .scrollBehavior(.continuousLeadingEdge) + } + .focusSection() + } +} + +extension PosterHStack { + + init( + title: String? = nil, + type: PosterDisplayType, + items: Data, + action: @escaping (Element) -> Void, + @ViewBuilder label: @escaping (Element) -> any View = { PosterButton.TitleSubtitleContentView(item: $0) } + ) { + self.init( + data: items, + title: title, + type: type, + label: label, + trailingContent: { EmptyView() }, + action: action + ) + } + + func trailing(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.trailingContent, with: content) + } +} diff --git a/Swiftfin tvOS/Components/PosterHStack.swift b/Swiftfin tvOS/Components/PosterHStack.swift new file mode 100644 index 00000000..e6441e20 --- /dev/null +++ b/Swiftfin tvOS/Components/PosterHStack.swift @@ -0,0 +1,83 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import SwiftUI + +// TODO: trailing content refactor? + +struct PosterHStack: View where Data.Element == Element, Data.Index == Int { + + private var data: Data + private var title: String? + private var type: PosterDisplayType + private var label: (Element) -> any View + private var trailingContent: () -> any View + private var action: (Element) -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 20) { + + if let title { + HStack { + Text(title) + .font(.title2) + .fontWeight(.semibold) + .accessibility(addTraits: [.isHeader]) + .padding(.leading, 50) + + Spacer() + } + } + + CollectionHStack( + uniqueElements: data, + columns: type == .landscape ? 4 : 7 + ) { item in + PosterButton( + item: item, + type: type + ) { + action(item) + } label: { + label(item).eraseToAnyView() + } + } + .clipsToBounds(false) + .dataPrefix(20) + .insets(horizontal: EdgeInsets.edgePadding, vertical: 20) + .itemSpacing(EdgeInsets.edgePadding - 20) + .scrollBehavior(.continuousLeadingEdge) + } + .focusSection() + } +} + +extension PosterHStack { + + init( + title: String? = nil, + type: PosterDisplayType, + items: Data, + action: @escaping (Element) -> Void, + @ViewBuilder label: @escaping (Element) -> any View = { PosterButton.TitleSubtitleContentView(item: $0) } + ) { + self.init( + data: items, + title: title, + type: type, + label: label, + trailingContent: { EmptyView() }, + action: action + ) + } + + func trailing(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.trailingContent, with: content) + } +} diff --git a/jellypig tvOS/Components/SFSymbolButton.swift b/Swiftfin tvOS/Components/SFSymbolButton 2.swift similarity index 100% rename from jellypig tvOS/Components/SFSymbolButton.swift rename to Swiftfin tvOS/Components/SFSymbolButton 2.swift diff --git a/Swiftfin tvOS/Components/SFSymbolButton.swift b/Swiftfin tvOS/Components/SFSymbolButton.swift new file mode 100644 index 00000000..523307a2 --- /dev/null +++ b/Swiftfin tvOS/Components/SFSymbolButton.swift @@ -0,0 +1,70 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI +import UIKit + +struct SFSymbolButton: UIViewRepresentable { + + private var onSelect: () -> Void + private let pointSize: CGFloat + private let systemName: String + private let systemNameFocused: String? + + private func makeButtonConfig(_ button: UIButton) { + let symbolImageConfig = UIImage.SymbolConfiguration(pointSize: pointSize) + let symbolImage = UIImage(systemName: systemName, withConfiguration: symbolImageConfig) + + button.setImage(symbolImage, for: .normal) + + if let systemNameFocused { + let focusedSymbolImage = UIImage(systemName: systemNameFocused, withConfiguration: symbolImageConfig) + + button.setImage(focusedSymbolImage, for: .focused) + } + } + + func makeUIView(context: Context) -> some UIButton { + var configuration = UIButton.Configuration.plain() + configuration.cornerStyle = .capsule + + let buttonAction = UIAction(title: "") { _ in + self.onSelect() + } + + let button = UIButton(configuration: configuration, primaryAction: buttonAction) + + makeButtonConfig(button) + + return button + } + + func updateUIView(_ uiView: UIViewType, context: Context) { + makeButtonConfig(uiView) + } +} + +extension SFSymbolButton { + + init( + systemName: String, + systemNameFocused: String? = nil, + pointSize: CGFloat = 32 + ) { + self.init( + onSelect: {}, + pointSize: pointSize, + systemName: systemName, + systemNameFocused: systemNameFocused + ) + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/jellypig tvOS/Components/SeeAllPosterButton.swift b/Swiftfin tvOS/Components/SeeAllPosterButton 2.swift similarity index 100% rename from jellypig tvOS/Components/SeeAllPosterButton.swift rename to Swiftfin tvOS/Components/SeeAllPosterButton 2.swift diff --git a/Swiftfin tvOS/Components/SeeAllPosterButton.swift b/Swiftfin tvOS/Components/SeeAllPosterButton.swift new file mode 100644 index 00000000..11617446 --- /dev/null +++ b/Swiftfin tvOS/Components/SeeAllPosterButton.swift @@ -0,0 +1,50 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SeeAllPosterButton: View { + + private let type: PosterDisplayType + private var onSelect: () -> Void + + var body: some View { + Button { + onSelect() + } label: { + ZStack { + Color(UIColor.darkGray) + .opacity(0.5) + + VStack(spacing: 20) { + Image(systemName: "chevron.right") + .font(.title) + + L10n.seeAll.text + .font(.title3) + } + } + .posterStyle(type) + } + .buttonStyle(.card) + } +} + +extension SeeAllPosterButton { + + init(type: PosterDisplayType) { + self.init( + type: type, + onSelect: {} + ) + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/jellypig tvOS/Components/ServerButton.swift b/Swiftfin tvOS/Components/ServerButton 2.swift similarity index 100% rename from jellypig tvOS/Components/ServerButton.swift rename to Swiftfin tvOS/Components/ServerButton 2.swift diff --git a/Swiftfin tvOS/Components/ServerButton.swift b/Swiftfin tvOS/Components/ServerButton.swift new file mode 100644 index 00000000..4565e022 --- /dev/null +++ b/Swiftfin tvOS/Components/ServerButton.swift @@ -0,0 +1,54 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct ServerButton: View { + + let server: SwiftfinStore.State.Server + private var onSelect: () -> Void + + var body: some View { + Button { + onSelect() + } label: { + HStack { + Image(systemName: "server.rack") + .font(.system(size: 72)) + .foregroundColor(.primary) + + VStack(alignment: .leading, spacing: 5) { + Text(server.name) + .font(.title2) + .foregroundColor(.primary) + + Text(server.currentURL.absoluteString) + .font(.footnote) + .disabled(true) + .foregroundColor(.secondary) + } + + Spacer() + } + .padding(10) + } + .buttonStyle(.card) + } +} + +extension ServerButton { + + init(server: SwiftfinStore.State.Server) { + self.server = server + self.onSelect = {} + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin tvOS/Components/SliderContainer 2/SliderContainer.swift b/Swiftfin tvOS/Components/SliderContainer 2/SliderContainer.swift new file mode 100644 index 00000000..0d6c29e3 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer 2/SliderContainer.swift @@ -0,0 +1,202 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SliderContainer: UIViewRepresentable { + + private var value: Binding + private let total: Value + private let onEditingChanged: (Bool) -> Void + private let view: AnyView + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void = { _ in }, + @ViewBuilder view: @escaping () -> some SliderContentView + ) { + self.value = value + self.total = total + self.onEditingChanged = onEditingChanged + self.view = AnyView(view()) + } + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void = { _ in }, + view: AnyView + ) { + self.value = value + self.total = total + self.onEditingChanged = onEditingChanged + self.view = view + } + + func makeUIView(context: Context) -> UISliderContainer { + UISliderContainer( + value: value, + total: total, + onEditingChanged: onEditingChanged, + view: view + ) + } + + func updateUIView(_ uiView: UISliderContainer, context: Context) { + DispatchQueue.main.async { + uiView.containerState.value = value.wrappedValue + } + } +} + +final class UISliderContainer: UIControl { + + private let decelerationMaxVelocity: CGFloat = 1000.0 + private let fineTuningVelocityThreshold: CGFloat = 1000.0 + private let panDampingValue: CGFloat = 50 + + private let onEditingChanged: (Bool) -> Void + private let total: Value + private let valueBinding: Binding + + private var panGestureRecognizer: DirectionalPanGestureRecognizer! + private lazy var progressHostingController: UIHostingController = { + let hostingController = UIHostingController(rootView: AnyView(view.environmentObject(containerState))) + hostingController.view.backgroundColor = .clear + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + return hostingController + }() + + private var progressHostingView: UIView { progressHostingController.view } + + let containerState: SliderContainerState + let view: AnyView + private var decelerationTimer: Timer? + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void, + view: AnyView + ) { + self.onEditingChanged = onEditingChanged + self.total = total + self.valueBinding = value + self.containerState = .init( + isEditing: false, + isFocused: false, + value: value.wrappedValue, + total: total + ) + self.view = view + super.init(frame: .zero) + + setupViews() + setupGestureRecognizer() + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + addSubview(progressHostingView) + NSLayoutConstraint.activate([ + progressHostingView.leadingAnchor.constraint(equalTo: leadingAnchor), + progressHostingView.trailingAnchor.constraint(equalTo: trailingAnchor), + progressHostingView.topAnchor.constraint(equalTo: topAnchor), + progressHostingView.bottomAnchor.constraint(equalTo: bottomAnchor), + ]) + } + + private func setupGestureRecognizer() { + panGestureRecognizer = DirectionalPanGestureRecognizer( + direction: .horizontal, + target: self, + action: #selector(didPan) + ) + addGestureRecognizer(panGestureRecognizer) + } + + private var panDeceleratingVelocity: CGFloat = 0 + private var panStartValue: Value = 0 + + @objc + private func didPan(_ gestureRecognizer: UIPanGestureRecognizer) { + let translation = gestureRecognizer.translation(in: self).x + let velocity = gestureRecognizer.velocity(in: self).x + + switch gestureRecognizer.state { + case .began: + onEditingChanged(true) + panStartValue = containerState.value + stopDeceleratingTimer() + case .changed: + let dampedTranslation = translation / panDampingValue + let newValue = panStartValue + Value(dampedTranslation) + let clampedValue = clamp(newValue, min: 0, max: containerState.total) + + sendActions(for: .valueChanged) + + containerState.value = clampedValue + valueBinding.wrappedValue = clampedValue + case .ended, .cancelled: + panStartValue = containerState.value + + if abs(velocity) > fineTuningVelocityThreshold { + let direction: CGFloat = velocity > 0 ? 1 : -1 + panDeceleratingVelocity = (abs(velocity) > decelerationMaxVelocity ? decelerationMaxVelocity * direction : velocity) / + panDampingValue + decelerationTimer = Timer.scheduledTimer( + timeInterval: 0.01, + target: self, + selector: #selector(handleDeceleratingTimer), + userInfo: nil, + repeats: true + ) + } else { + onEditingChanged(false) + stopDeceleratingTimer() + } + default: + break + } + } + + @objc + private func handleDeceleratingTimer(time: Timer) { + let newValue = panStartValue + Value(panDeceleratingVelocity) * 0.01 + let clampedValue = clamp(newValue, min: 0, max: containerState.total) + + sendActions(for: .valueChanged) + panStartValue = clampedValue + + panDeceleratingVelocity *= 0.92 + + if !isFocused || abs(panDeceleratingVelocity) < 1 { + stopDeceleratingTimer() + } + + valueBinding.wrappedValue = clampedValue + containerState.value = clampedValue + onEditingChanged(false) + } + + private func stopDeceleratingTimer() { + decelerationTimer?.invalidate() + decelerationTimer = nil + panDeceleratingVelocity = 0 + sendActions(for: .valueChanged) + } + + override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { + containerState.isFocused = (context.nextFocusedView == self) + } +} diff --git a/Swiftfin tvOS/Components/SliderContainer 2/SliderContainerState.swift b/Swiftfin tvOS/Components/SliderContainer 2/SliderContainerState.swift new file mode 100644 index 00000000..15f1a606 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer 2/SliderContainerState.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine + +class SliderContainerState: ObservableObject { + + @Published + var isEditing: Bool + @Published + var isFocused: Bool + @Published + var value: Value + + let total: Value + + init( + isEditing: Bool, + isFocused: Bool, + value: Value, + total: Value + ) { + self.isEditing = isEditing + self.isFocused = isFocused + self.value = value + self.total = total + } +} diff --git a/Swiftfin tvOS/Components/SliderContainer 2/SliderContentView.swift b/Swiftfin tvOS/Components/SliderContainer 2/SliderContentView.swift new file mode 100644 index 00000000..0833f7d7 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer 2/SliderContentView.swift @@ -0,0 +1,18 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +protocol SliderContentView: View { + + associatedtype Value: BinaryFloatingPoint + + /// The current state of the slider container. + /// Receive this object as an environment object. + var sliderState: SliderContainerState { get } +} diff --git a/Swiftfin tvOS/Components/SliderContainer/SliderContainer.swift b/Swiftfin tvOS/Components/SliderContainer/SliderContainer.swift new file mode 100644 index 00000000..0d6c29e3 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer/SliderContainer.swift @@ -0,0 +1,202 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SliderContainer: UIViewRepresentable { + + private var value: Binding + private let total: Value + private let onEditingChanged: (Bool) -> Void + private let view: AnyView + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void = { _ in }, + @ViewBuilder view: @escaping () -> some SliderContentView + ) { + self.value = value + self.total = total + self.onEditingChanged = onEditingChanged + self.view = AnyView(view()) + } + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void = { _ in }, + view: AnyView + ) { + self.value = value + self.total = total + self.onEditingChanged = onEditingChanged + self.view = view + } + + func makeUIView(context: Context) -> UISliderContainer { + UISliderContainer( + value: value, + total: total, + onEditingChanged: onEditingChanged, + view: view + ) + } + + func updateUIView(_ uiView: UISliderContainer, context: Context) { + DispatchQueue.main.async { + uiView.containerState.value = value.wrappedValue + } + } +} + +final class UISliderContainer: UIControl { + + private let decelerationMaxVelocity: CGFloat = 1000.0 + private let fineTuningVelocityThreshold: CGFloat = 1000.0 + private let panDampingValue: CGFloat = 50 + + private let onEditingChanged: (Bool) -> Void + private let total: Value + private let valueBinding: Binding + + private var panGestureRecognizer: DirectionalPanGestureRecognizer! + private lazy var progressHostingController: UIHostingController = { + let hostingController = UIHostingController(rootView: AnyView(view.environmentObject(containerState))) + hostingController.view.backgroundColor = .clear + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + return hostingController + }() + + private var progressHostingView: UIView { progressHostingController.view } + + let containerState: SliderContainerState + let view: AnyView + private var decelerationTimer: Timer? + + init( + value: Binding, + total: Value, + onEditingChanged: @escaping (Bool) -> Void, + view: AnyView + ) { + self.onEditingChanged = onEditingChanged + self.total = total + self.valueBinding = value + self.containerState = .init( + isEditing: false, + isFocused: false, + value: value.wrappedValue, + total: total + ) + self.view = view + super.init(frame: .zero) + + setupViews() + setupGestureRecognizer() + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + addSubview(progressHostingView) + NSLayoutConstraint.activate([ + progressHostingView.leadingAnchor.constraint(equalTo: leadingAnchor), + progressHostingView.trailingAnchor.constraint(equalTo: trailingAnchor), + progressHostingView.topAnchor.constraint(equalTo: topAnchor), + progressHostingView.bottomAnchor.constraint(equalTo: bottomAnchor), + ]) + } + + private func setupGestureRecognizer() { + panGestureRecognizer = DirectionalPanGestureRecognizer( + direction: .horizontal, + target: self, + action: #selector(didPan) + ) + addGestureRecognizer(panGestureRecognizer) + } + + private var panDeceleratingVelocity: CGFloat = 0 + private var panStartValue: Value = 0 + + @objc + private func didPan(_ gestureRecognizer: UIPanGestureRecognizer) { + let translation = gestureRecognizer.translation(in: self).x + let velocity = gestureRecognizer.velocity(in: self).x + + switch gestureRecognizer.state { + case .began: + onEditingChanged(true) + panStartValue = containerState.value + stopDeceleratingTimer() + case .changed: + let dampedTranslation = translation / panDampingValue + let newValue = panStartValue + Value(dampedTranslation) + let clampedValue = clamp(newValue, min: 0, max: containerState.total) + + sendActions(for: .valueChanged) + + containerState.value = clampedValue + valueBinding.wrappedValue = clampedValue + case .ended, .cancelled: + panStartValue = containerState.value + + if abs(velocity) > fineTuningVelocityThreshold { + let direction: CGFloat = velocity > 0 ? 1 : -1 + panDeceleratingVelocity = (abs(velocity) > decelerationMaxVelocity ? decelerationMaxVelocity * direction : velocity) / + panDampingValue + decelerationTimer = Timer.scheduledTimer( + timeInterval: 0.01, + target: self, + selector: #selector(handleDeceleratingTimer), + userInfo: nil, + repeats: true + ) + } else { + onEditingChanged(false) + stopDeceleratingTimer() + } + default: + break + } + } + + @objc + private func handleDeceleratingTimer(time: Timer) { + let newValue = panStartValue + Value(panDeceleratingVelocity) * 0.01 + let clampedValue = clamp(newValue, min: 0, max: containerState.total) + + sendActions(for: .valueChanged) + panStartValue = clampedValue + + panDeceleratingVelocity *= 0.92 + + if !isFocused || abs(panDeceleratingVelocity) < 1 { + stopDeceleratingTimer() + } + + valueBinding.wrappedValue = clampedValue + containerState.value = clampedValue + onEditingChanged(false) + } + + private func stopDeceleratingTimer() { + decelerationTimer?.invalidate() + decelerationTimer = nil + panDeceleratingVelocity = 0 + sendActions(for: .valueChanged) + } + + override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { + containerState.isFocused = (context.nextFocusedView == self) + } +} diff --git a/Swiftfin tvOS/Components/SliderContainer/SliderContainerState.swift b/Swiftfin tvOS/Components/SliderContainer/SliderContainerState.swift new file mode 100644 index 00000000..15f1a606 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer/SliderContainerState.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine + +class SliderContainerState: ObservableObject { + + @Published + var isEditing: Bool + @Published + var isFocused: Bool + @Published + var value: Value + + let total: Value + + init( + isEditing: Bool, + isFocused: Bool, + value: Value, + total: Value + ) { + self.isEditing = isEditing + self.isFocused = isFocused + self.value = value + self.total = total + } +} diff --git a/Swiftfin tvOS/Components/SliderContainer/SliderContentView.swift b/Swiftfin tvOS/Components/SliderContainer/SliderContentView.swift new file mode 100644 index 00000000..0833f7d7 --- /dev/null +++ b/Swiftfin tvOS/Components/SliderContainer/SliderContentView.swift @@ -0,0 +1,18 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +protocol SliderContentView: View { + + associatedtype Value: BinaryFloatingPoint + + /// The current state of the slider container. + /// Receive this object as an environment object. + var sliderState: SliderContainerState { get } +} diff --git a/Swiftfin tvOS/Components/SplitFormWindowView 2.swift b/Swiftfin tvOS/Components/SplitFormWindowView 2.swift new file mode 100644 index 00000000..e434030d --- /dev/null +++ b/Swiftfin tvOS/Components/SplitFormWindowView 2.swift @@ -0,0 +1,49 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SplitFormWindowView: View { + + private var contentView: () -> any View + private var descriptionView: () -> any View + + var body: some View { + HStack { + + descriptionView() + .eraseToAnyView() + .frame(maxWidth: .infinity) + + Form { + contentView() + .eraseToAnyView() + } + .padding(.top) + .scrollClipDisabled() + } + } +} + +extension SplitFormWindowView { + + init() { + self.init( + contentView: { EmptyView() }, + descriptionView: { Color.clear } + ) + } + + func contentView(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.contentView, with: content) + } + + func descriptionView(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.descriptionView, with: content) + } +} diff --git a/Swiftfin tvOS/Components/SplitFormWindowView.swift b/Swiftfin tvOS/Components/SplitFormWindowView.swift new file mode 100644 index 00000000..e434030d --- /dev/null +++ b/Swiftfin tvOS/Components/SplitFormWindowView.swift @@ -0,0 +1,49 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SplitFormWindowView: View { + + private var contentView: () -> any View + private var descriptionView: () -> any View + + var body: some View { + HStack { + + descriptionView() + .eraseToAnyView() + .frame(maxWidth: .infinity) + + Form { + contentView() + .eraseToAnyView() + } + .padding(.top) + .scrollClipDisabled() + } + } +} + +extension SplitFormWindowView { + + init() { + self.init( + contentView: { EmptyView() }, + descriptionView: { Color.clear } + ) + } + + func contentView(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.contentView, with: content) + } + + func descriptionView(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.descriptionView, with: content) + } +} diff --git a/Swiftfin tvOS/Components/SplitLoginWindowView 2.swift b/Swiftfin tvOS/Components/SplitLoginWindowView 2.swift new file mode 100644 index 00000000..d4b5ca78 --- /dev/null +++ b/Swiftfin tvOS/Components/SplitLoginWindowView 2.swift @@ -0,0 +1,78 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import SwiftUI + +struct SplitLoginWindowView: View { + + // MARK: - Loading State + + private let isLoading: Bool + + // MARK: - Content Variables + + private let leadingContentView: Leading + private let trailingContentView: Trailing + + // MARK: - Background Variable + + private let backgroundImageSource: ImageSource? + + // MARK: - Body + + var body: some View { + HStack(alignment: .top) { + VStack(alignment: .leading, spacing: 22) { + leadingContentView + } + .frame(maxWidth: .infinity) + .edgePadding(.vertical) + + Divider() + .padding(.vertical, 100) + + VStack(alignment: .leading, spacing: 22) { + trailingContentView + } + .frame(maxWidth: .infinity) + .edgePadding(.vertical) + } + .navigationBarBranding(isLoading: isLoading) + .background { + if let backgroundImageSource { + ZStack { + ImageView(backgroundImageSource) + .aspectRatio(contentMode: .fill) + .id(backgroundImageSource) + .transition(.opacity) + .animation(.linear, value: backgroundImageSource) + + Color.black + .opacity(0.9) + } + .ignoresSafeArea() + } + } + } +} + +extension SplitLoginWindowView { + + init( + isLoading: Bool = false, + backgroundImageSource: ImageSource? = nil, + @ViewBuilder leadingContentView: @escaping () -> Leading, + @ViewBuilder trailingContentView: @escaping () -> Trailing + ) { + self.backgroundImageSource = backgroundImageSource + self.isLoading = isLoading + self.leadingContentView = leadingContentView() + self.trailingContentView = trailingContentView() + } +} diff --git a/Swiftfin tvOS/Components/SplitLoginWindowView.swift b/Swiftfin tvOS/Components/SplitLoginWindowView.swift new file mode 100644 index 00000000..d4b5ca78 --- /dev/null +++ b/Swiftfin tvOS/Components/SplitLoginWindowView.swift @@ -0,0 +1,78 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import SwiftUI + +struct SplitLoginWindowView: View { + + // MARK: - Loading State + + private let isLoading: Bool + + // MARK: - Content Variables + + private let leadingContentView: Leading + private let trailingContentView: Trailing + + // MARK: - Background Variable + + private let backgroundImageSource: ImageSource? + + // MARK: - Body + + var body: some View { + HStack(alignment: .top) { + VStack(alignment: .leading, spacing: 22) { + leadingContentView + } + .frame(maxWidth: .infinity) + .edgePadding(.vertical) + + Divider() + .padding(.vertical, 100) + + VStack(alignment: .leading, spacing: 22) { + trailingContentView + } + .frame(maxWidth: .infinity) + .edgePadding(.vertical) + } + .navigationBarBranding(isLoading: isLoading) + .background { + if let backgroundImageSource { + ZStack { + ImageView(backgroundImageSource) + .aspectRatio(contentMode: .fill) + .id(backgroundImageSource) + .transition(.opacity) + .animation(.linear, value: backgroundImageSource) + + Color.black + .opacity(0.9) + } + .ignoresSafeArea() + } + } + } +} + +extension SplitLoginWindowView { + + init( + isLoading: Bool = false, + backgroundImageSource: ImageSource? = nil, + @ViewBuilder leadingContentView: @escaping () -> Leading, + @ViewBuilder trailingContentView: @escaping () -> Trailing + ) { + self.backgroundImageSource = backgroundImageSource + self.isLoading = isLoading + self.leadingContentView = leadingContentView() + self.trailingContentView = trailingContentView() + } +} diff --git a/jellypig tvOS/Components/StepperView.swift b/Swiftfin tvOS/Components/StepperView 2.swift similarity index 100% rename from jellypig tvOS/Components/StepperView.swift rename to Swiftfin tvOS/Components/StepperView 2.swift diff --git a/Swiftfin tvOS/Components/StepperView.swift b/Swiftfin tvOS/Components/StepperView.swift new file mode 100644 index 00000000..3c7492d2 --- /dev/null +++ b/Swiftfin tvOS/Components/StepperView.swift @@ -0,0 +1,114 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct StepperView: View { + + @Binding + private var value: Value + + @State + private var updatedValue: Value + @Environment(\.presentationMode) + private var presentationMode + + private var title: String + private var description: String? + private var range: ClosedRange + private let step: Value.Stride + private var formatter: (Value) -> String + private var onCloseSelected: () -> Void + + var body: some View { + VStack { + VStack { + Spacer() + + Text(title) + .font(.title) + .fontWeight(.semibold) + + if let description { + Text(description) + .padding(.vertical) + } + } + .frame(maxHeight: .infinity) + + formatter(updatedValue).text + .font(.title) + .frame(height: 250) + + VStack { + + HStack { + Button { + if updatedValue > range.lowerBound { + updatedValue = max(updatedValue.advanced(by: -step), range.lowerBound) + value = updatedValue + } + } label: { + Image(systemName: "minus") + .font(.title2.weight(.bold)) + .frame(width: 200, height: 75) + } + .buttonStyle(.card) + + Button { + if updatedValue < range.upperBound { + updatedValue = min(updatedValue.advanced(by: step), range.upperBound) + value = updatedValue + } + } label: { + Image(systemName: "plus") + .font(.title2.weight(.bold)) + .frame(width: 200, height: 75) + } + .buttonStyle(.card) + } + + Button(L10n.close) { + onCloseSelected() + presentationMode.wrappedValue.dismiss() + } + + Spacer() + } + .frame(maxHeight: .infinity) + } + } +} + +extension StepperView { + + init( + title: String, + description: String? = nil, + value: Binding, + range: ClosedRange, + step: Value.Stride + ) { + self._value = value + self._updatedValue = State(initialValue: value.wrappedValue) + self.title = title + self.description = description + self.range = range + self.step = step + self.formatter = { $0.description } + self.onCloseSelected = {} + } + + func valueFormatter(_ formatter: @escaping (Value) -> String) -> Self { + copy(modifying: \.formatter, with: formatter) + } + + func onCloseSelected(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onCloseSelected, with: action) + } +} diff --git a/jellypig tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift b/Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift similarity index 100% rename from jellypig tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift rename to Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift diff --git a/Swiftfin tvOS/Extensions/View/View-tvOS.swift b/Swiftfin tvOS/Extensions/View/View-tvOS.swift new file mode 100644 index 00000000..3b886b33 --- /dev/null +++ b/Swiftfin tvOS/Extensions/View/View-tvOS.swift @@ -0,0 +1,47 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI +import SwiftUIIntrospect + +extension View { + + @ViewBuilder + func navigationBarBranding( + isLoading: Bool = false + ) -> some View { + modifier( + NavigationBarBrandingModifier( + isLoading: isLoading + ) + ) + } + + /// - Important: This does nothing on tvOS. + @ViewBuilder + func statusBarHidden() -> some View { + self + } + + /// - Important: This does nothing on tvOS. + @ViewBuilder + func prefersStatusBarHidden(_ hidden: Bool) -> some View { + self + } +} + +extension EnvironmentValues { + + @Entry + var presentationCoordinator: PresentationCoordinator = .init() +} + +struct PresentationCoordinator { + var isPresented: Bool = false +} diff --git a/Swiftfin tvOS/Objects/FocusGuide.swift b/Swiftfin tvOS/Objects/FocusGuide.swift new file mode 100644 index 00000000..2b449cd5 --- /dev/null +++ b/Swiftfin tvOS/Objects/FocusGuide.swift @@ -0,0 +1,153 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct FocusGuideModifier: ViewModifier { + + @FocusState + var focusDirection: FocusDirection? + @EnvironmentObject + var focusGuide: FocusGuide + + let focusConstructor: FocusConstructor + let onContentFocus: (() -> Void)? + + let debug = false + + func body(content: Content) -> some View { + VStack(spacing: 0) { + + Color(debug ? .red : .clear) + .frame(height: 1) + .if(focusConstructor.topTarget != nil, transform: { boundary in + boundary.focusable() + }) + .focused($focusDirection, equals: .top) + + HStack(spacing: 0) { + Color(debug ? .red : .clear) + .frame(width: 1) + .if(focusConstructor.leftTarget != nil, transform: { boundary in + boundary.focusable() + }) + .focused($focusDirection, equals: .left) + + content + .focused($focusDirection, equals: .content) + + Color(debug ? .red : .clear) + .frame(width: 1) + .if(focusConstructor.rightTarget != nil, transform: { boundary in + boundary.focusable() + }) + .focused($focusDirection, equals: .right) + } + + Color(debug ? .red : .clear) + .frame(height: 1) + .if(focusConstructor.bottomTarget != nil, transform: { boundary in + boundary.focusable() + }) + .focused($focusDirection, equals: .bottom) + } + .onChange(of: focusDirection) { _, focusDirection in + guard let focusDirection = focusDirection else { return } + switch focusDirection { + case .top: + focusGuide.transition(to: focusConstructor.topTarget!) + case .bottom: + focusGuide.transition(to: focusConstructor.bottomTarget!) + case .left: + focusGuide.transition(to: focusConstructor.leftTarget!) + case .right: + focusGuide.transition(to: focusConstructor.rightTarget!) + case .content: () + } + } + .onChange(of: focusGuide.focusedTag) { _, newTag in + if newTag == focusConstructor.tag { + if let onContentFocus { + onContentFocus() + } else { + focusDirection = .content + } + } + } + } +} + +extension View { + func focusGuide( + _ focusGuide: FocusGuide, + tag: String, + onContentFocus: (() -> Void)? = nil, + top: String? = nil, + bottom: String? = nil, + left: String? = nil, + right: String? = nil + ) -> some View { + let focusConstructor = FocusConstructor( + tag: tag, + topTarget: top, + bottomTarget: bottom, + leftTarget: left, + rightTarget: right + ) + return modifier(FocusGuideModifier(focusConstructor: focusConstructor, onContentFocus: onContentFocus)) + .environmentObject(focusGuide) + } +} + +enum FocusDirection: String { + case top + case bottom + case content + case left + case right +} + +struct FocusConstructor { + + let tag: String + let topTarget: String? + let bottomTarget: String? + let leftTarget: String? + let rightTarget: String? + + init( + tag: String, + topTarget: String?, + bottomTarget: String?, + leftTarget: String?, + rightTarget: String? + ) { + self.tag = tag + self.topTarget = topTarget + self.bottomTarget = bottomTarget + self.leftTarget = leftTarget + self.rightTarget = rightTarget + } +} + +// TODO: generic focus values instead of strings +// TODO: keep mapping of all tag connections, +// only add complete connections + +class FocusGuide: ObservableObject { + + @Published + private(set) var focusedTag: String? + + private(set) var lastFocusedTag: String? + + func transition(to tag: String?) { + lastFocusedTag = focusedTag + focusedTag = tag + } +} diff --git a/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/1280x768-back.png b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/1280x768-back.png new file mode 100644 index 0000000000000000000000000000000000000000..5e44064e457e91a9e21ff5f0ae9bc7c49a5733a4 GIT binary patch literal 6162 zcmeHL%ZnUE7_T+Dnk9Qs5P}dWdj%D&e$MoZOg5XDH8WtZ%VyB^5ZLPO>X~MzyV~yF znc2M(A@l-N&!Lx|gU4SV-24U}=d<=l1w!(M_^*t=+Z+Pw@3^~P?tAaK z0Z(Kaa-YfLBm*=;mp8{54Gvj}eb$T9hVMJ2H3QFn5{#CIk-OJ=cQzKhHKcx7X0D=)Mk9G-$UN^U zn&UWvL)Qr)NO7E&bWGA>W6scGMUcl?8S@kiM(XpUvLS(_Qx%eIL7NscGl9XBG0hZB zR)tD)py!UnM_ElQdOtkY^pAe0=( zp=R1B(9Bzzul-919z{wYuf# zx)l*SV3b%<%^|+V9AaClQ}+#K8mvBNdq0n1?$E($Rv}dgjMUVqU!#;5zNM0y9ht

i0na@ig3XQ7-#g9bZqB2401d_7 z^=r7Z-841FG>I;2BJe>BP`4cy;N|1lRJy@Fp4A31p2Vk112HWcQXt}ih0^SE{1h`U zr_hvk)Mr3?MwCop1&_)R&DmBDT(U$QD$f$Xpu@9;UoJ-eSK()-4f-_gG03xuB-Bwv zMw&WCdD3T-wo}<_4u_N|s*79QlQQuS6{hv_iKb+e$Z)cb;o!A_)S|!ucP}{ zAH90%(NCX!@#eRqwV#Jy{`ev+1;0GJcS$S>pQ!hteBZml5HuHcnrsvxMQN0kYx99b;~)k0bA398*vwK1%=%+=|jIyY5E k#Om-|-4px=Hz>cO$KS82pQaD*z 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 A=l}o! literal 0 HcmV?d00001 diff --git a/jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json diff --git a/jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json diff --git a/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/400x240-back.png b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/400x240-back.png new file mode 100644 index 0000000000000000000000000000000000000000..4036a934011476ac48dc7f8d60d316d902f6c93b GIT binary patch literal 2429 zcmeHJJ&)r=81^1I0Vh_X0r6FgybVY@{va?&~gr4vU#e9@xq58`=->N8Kq56&+8ByNh<7EH5;5W_>2K4-d z`b^z@9qrTs5Tv{!s7@zY8PuUV=M7*imvt4*A=OE!?n#5_I66cfQE=pG2BwDLp_Z?i zp3`#eZDbjisT-DVy4W-W*9uG2(5s>%ahpUr04%+^FP(oNs@ zC5L5UK;ZH$t4NKra%;)Z5mXqv9jWz{ivvr_R6!f#QA{piVZm5DNElC*IZV|(4 zwXtmx7dy7y#RLZZhAO&8O3hf zF)=6km3woJ!p ztBBEHD2kLor6egCaXrsQD*9VZM@&Q!2?jB@FRu4Hox?&5lL>5;N7t{Rey`)1zUN^} zGiBj}3~+ZpDIv>e%~iU=KWs*m1kLL+AXHw9P^GdSI8&SDGlAQjF__b=}KNa7EmX1j_;?QSxRl1|gj`&P_8HI#*{C!~v z((CEs7*cWT?LkIHAg@W`|N1-+2N074pwG59fq^l>#uVsg2GtVRh?11Vl2ohYqEsNo zU}RuqsB2)ZYhW2-U}$A%VP$BkYhYq!V9;#-K@delZhlH;S|x4`pRzpGf}G{)>gTe~ HDWM4fxx!4X literal 0 HcmV?d00001 diff --git a/jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json diff --git a/jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json diff --git a/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/216.png b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/216.png new file mode 100644 index 0000000000000000000000000000000000000000..0050345306a43d2fbcc199ac0e03fc4692c7374d GIT binary patch literal 20432 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 literal 0 HcmV?d00001 diff --git a/jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json diff --git a/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Webp.net-resizeimage-2.png b/Swiftfin tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Webp.net-resizeimage-2.png new file mode 100644 index 0000000000000000000000000000000000000000..41d216621fd8656bfd9a1e7578e8405da28e87ab GIT binary patch literal 40947 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

a4s7$d!h30tEncF?!`9(_aUUbY;WgQ-Ws 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

#$^|Ug&<5Q6htYYYj6Fvn;H|iaEX+8|r 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

#$^|Ug&<5Q6htYYYj6Fvn;H|iaEX+8|r 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 IbJzawZ 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 + + Combined Shape + + + + + + + + + + + + \ No newline at end of file diff --git a/jellypig tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/Contents.json diff --git a/jellypig tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg b/Swiftfin tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg rename to Swiftfin tvOS/Resources/Assets.xcassets/tomato.fresh.symbolset/tomato.fresh.svg diff --git a/jellypig tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json b/Swiftfin tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json rename to Swiftfin tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/Contents.json diff --git a/jellypig tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg b/Swiftfin tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg rename to Swiftfin tvOS/Resources/Assets.xcassets/tomato.rotten.symbolset/tomato.rotten.svg diff --git a/jellypig tvOS/Resources/Info.plist b/Swiftfin tvOS/Resources/Info.plist similarity index 100% rename from jellypig tvOS/Resources/Info.plist rename to Swiftfin tvOS/Resources/Info.plist diff --git a/jellypig tvOS/Views/AppLoadingView.swift b/Swiftfin tvOS/Views/AppLoadingView.swift similarity index 100% rename from jellypig tvOS/Views/AppLoadingView.swift rename to Swiftfin tvOS/Views/AppLoadingView.swift diff --git a/Swiftfin tvOS/Views/AppSettingsView/AppSettingsView.swift b/Swiftfin tvOS/Views/AppSettingsView/AppSettingsView.swift new file mode 100644 index 00000000..8eee997d --- /dev/null +++ b/Swiftfin tvOS/Views/AppSettingsView/AppSettingsView.swift @@ -0,0 +1,96 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults + +import SwiftUI + +struct AppSettingsView: View { + + @Default(.selectUserUseSplashscreen) + private var selectUserUseSplashscreen + @Default(.selectUserAllServersSplashscreen) + private var selectUserAllServersSplashscreen + + @Default(.appAppearance) + private var appearance + + @Router + private var router + + @StateObject + private var viewModel = SettingsViewModel() + + @State + private var resetUserSettingsSelected: Bool = false + @State + private var removeAllServersSelected: Bool = false + + private var selectedServer: ServerState? { + viewModel.servers.first { server in + selectUserAllServersSplashscreen == .server(id: server.id) + } + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(.jellyfinBlobBlue) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + LabeledContent( + L10n.version, + value: "\(UIApplication.appVersion ?? .emptyDash) (\(UIApplication.bundleVersion ?? .emptyDash))" + ) + + Section { + + Toggle(L10n.useSplashscreen, isOn: $selectUserUseSplashscreen) + + if selectUserUseSplashscreen { + ListRowMenu(L10n.servers) { + if selectUserAllServersSplashscreen == .all { + Label(L10n.random, systemImage: "dice.fill") + } else if let selectedServer { + Text(selectedServer.name) + } else { + Text(L10n.none) + } + } content: { + Picker(L10n.servers, selection: $selectUserAllServersSplashscreen) { + Label(L10n.random, systemImage: "dice.fill") + .tag(SelectUserServerSelection.all) + + ForEach(viewModel.servers) { server in + Text(server.name) + .tag(SelectUserServerSelection.server(id: server.id)) + } + } + } + } + } header: { + Text(L10n.splashscreen) + } footer: { + if selectUserUseSplashscreen { + Text(L10n.splashscreenFooter) + } + } + + SignOutIntervalSection() + + ChevronButton(L10n.logs) { + router.route(to: .log) + } + } + .navigationTitle(L10n.advanced) + } +} diff --git a/jellypig tvOS/Views/AppSettingsView/Components/HourMinutePicker.swift b/Swiftfin tvOS/Views/AppSettingsView/Components/HourMinutePicker.swift similarity index 100% rename from jellypig tvOS/Views/AppSettingsView/Components/HourMinutePicker.swift rename to Swiftfin tvOS/Views/AppSettingsView/Components/HourMinutePicker.swift diff --git a/Swiftfin tvOS/Views/AppSettingsView/Components/SignOutIntervalSection.swift b/Swiftfin tvOS/Views/AppSettingsView/Components/SignOutIntervalSection.swift new file mode 100644 index 00000000..d420f972 --- /dev/null +++ b/Swiftfin tvOS/Views/AppSettingsView/Components/SignOutIntervalSection.swift @@ -0,0 +1,54 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension AppSettingsView { + + struct SignOutIntervalSection: View { + + @Router + private var router + + @Default(.backgroundSignOutInterval) + private var backgroundSignOutInterval + @Default(.signOutOnBackground) + private var signOutOnBackground + @Default(.signOutOnClose) + private var signOutOnClose + + @State + private var isEditingBackgroundSignOutInterval: Bool = false + + var body: some View { + Section { + Toggle(L10n.signoutClose, isOn: $signOutOnClose) + } footer: { + Text(L10n.signoutCloseFooter) + } + + Section { + Toggle(L10n.signoutBackground, isOn: $signOutOnBackground) + + if signOutOnBackground { + ChevronButton( + L10n.duration, + subtitle: Text(backgroundSignOutInterval, format: .hourMinute) + ) { + router.route(to: .hourPicker) + } + } + } footer: { + Text( + L10n.signoutBackgroundFooter + ) + } + } + } +} diff --git a/jellypig tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift b/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift similarity index 83% rename from jellypig tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift rename to Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift index 09037cf3..1ea1cb2d 100644 --- a/jellypig tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift +++ b/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift @@ -13,8 +13,8 @@ import SwiftUI struct ChannelLibraryView: View { - @EnvironmentObject - private var router: VideoPlayerWrapperCoordinator.Router + @Router + private var router @StateObject private var viewModel = ChannelLibraryViewModel() @@ -28,10 +28,10 @@ struct ChannelLibraryView: View { WideChannelGridItem(channel: channel) .onSelect { guard let mediaSource = channel.channel.mediaSources?.first else { return } - router.route( - to: \.liveVideoPlayer, - LiveVideoPlayerManager(item: channel.channel, mediaSource: mediaSource) - ) +// router.route( +// to: \.liveVideoPlayer, +// LiveVideoPlayerManager(item: channel.channel, mediaSource: mediaSource) +// ) } } .onReachedBottomEdge(offset: .offset(300)) { @@ -41,9 +41,6 @@ struct ChannelLibraryView: View { var body: some View { ZStack { - Color(red: 0.15, green: 0.05, blue: 0.1) - .ignoresSafeArea() - switch viewModel.state { case .content: if viewModel.elements.isEmpty { diff --git a/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift b/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift new file mode 100644 index 00000000..6b2a45c6 --- /dev/null +++ b/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift @@ -0,0 +1,153 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension ChannelLibraryView { + + struct WideChannelGridItem: View { + + @Default(.accentColor) + private var accentColor + + @State + private var now: Date = .now + + let channel: ChannelProgram + + private var onSelect: () -> Void + private let timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect() + + @ViewBuilder + private var channelLogo: some View { + VStack { + ZStack { + Color.clear + + ImageView(channel.portraitImageSources(maxWidth: 110, quality: 90)) + .image { + $0.aspectRatio(contentMode: .fit) + } + .failure { + SystemImageContentView(systemName: channel.systemImage, ratio: 0.66) + } + .placeholder { _ in + EmptyView() + } + } + .aspectRatio(1.0, contentMode: .fit) + + Text(channel.channel.number ?? "") + .font(.body) + .lineLimit(1) + .foregroundStyle(.primary) + } + } + + @ViewBuilder + private func programLabel(for program: BaseItemDto) -> some View { + HStack(alignment: .top, spacing: EdgeInsets.edgePadding / 2) { + AlternateLayoutView(alignment: .leading) { + Text("00:00 AM") + .monospacedDigit() + } content: { + if let startDate = program.startDate { + Text(startDate, style: .time) + .monospacedDigit() + } else { + Text(String.emptyDash) + } + } + + Text(program.displayTitle) + } + .lineLimit(1) + } + + @ViewBuilder + private var programListView: some View { + VStack(alignment: .leading, spacing: 0) { + if let currentProgram = channel.currentProgram { + ProgressBar(progress: currentProgram.programProgress(relativeTo: now) ?? 0) + .frame(height: 8) + .padding(.bottom, 8) + .foregroundStyle(accentColor) + + programLabel(for: currentProgram) + .font(.caption.weight(.bold)) + } + + if let nextProgram = channel.programAfterCurrent(offset: 0) { + programLabel(for: nextProgram) + .font(.caption) + .foregroundStyle(.secondary) + } + + if let futureProgram = channel.programAfterCurrent(offset: 1) { + programLabel(for: futureProgram) + .font(.caption) + .foregroundStyle(.secondary) + } + } + .id(channel.currentProgram) + } + + var body: some View { + Button { + onSelect() + } label: { + HStack(alignment: .center, spacing: EdgeInsets.edgePadding / 2) { + + channelLogo + .frame(width: 110) + + HStack { + VStack(alignment: .leading, spacing: 5) { + Text(channel.displayTitle) + .font(.body) + .fontWeight(.bold) + .lineLimit(1) + .foregroundStyle(.primary) + + if channel.programs.isNotEmpty { + programListView + } + } + + Spacer() + } + .frame(maxWidth: .infinity) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(.horizontal, EdgeInsets.edgePadding / 2) + } + .buttonStyle(.card) + .frame(height: 200) + .onReceive(timer) { newValue in + now = newValue + } + .animation(.linear(duration: 0.2), value: channel.currentProgram) + } + } +} + +extension ChannelLibraryView.WideChannelGridItem { + + init(channel: ChannelProgram) { + self.init( + channel: channel, + onSelect: {} + ) + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/jellypig tvOS/Views/FontPickerView.swift b/Swiftfin tvOS/Views/FontPickerView.swift similarity index 100% rename from jellypig tvOS/Views/FontPickerView.swift rename to Swiftfin tvOS/Views/FontPickerView.swift diff --git a/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift b/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift new file mode 100644 index 00000000..ecf5a96b --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift @@ -0,0 +1,59 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension HomeView { + + struct CinematicRecentlyAddedView: View { + + @Router + private var router + + @ObservedObject + var viewModel: RecentlyAddedLibraryViewModel + + private func itemSelectorImageSource(for item: BaseItemDto) -> ImageSource { + if item.type == .episode { + return item.seriesImageSource( + .logo, + maxWidth: UIScreen.main.bounds.width * 0.4, + maxHeight: 200 + ) + } else { + return item.imageSource( + .logo, + maxWidth: UIScreen.main.bounds.width * 0.4, + maxHeight: 200 + ) + } + } + + var body: some View { + CinematicItemSelector(items: viewModel.elements.elements) + .topContent { item in + ImageView(itemSelectorImageSource(for: item)) + .placeholder { _ in + EmptyView() + } + .failure { + Text(item.displayTitle) + .font(.largeTitle) + .fontWeight(.semibold) + } + .edgePadding(.leading) + .aspectRatio(contentMode: .fit) + .frame(height: 200, alignment: .bottomLeading) + } + .onSelect { item in + router.route(to: .item(item: item)) + } + } + } +} diff --git a/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift b/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift new file mode 100644 index 00000000..65ee2a66 --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift @@ -0,0 +1,73 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension HomeView { + + struct CinematicResumeView: View { + + @Router + private var router + + @ObservedObject + var viewModel: HomeViewModel + + private func itemSelectorImageSource(for item: BaseItemDto) -> ImageSource { + if item.type == .episode { + return item.seriesImageSource( + .logo, + maxWidth: UIScreen.main.bounds.width * 0.4, + maxHeight: 200 + ) + } else { + return item.imageSource( + .logo, + maxWidth: UIScreen.main.bounds.width * 0.4, + maxHeight: 200 + ) + } + } + + var body: some View { + CinematicItemSelector(items: viewModel.resumeItems.elements) + .topContent { item in + ImageView(itemSelectorImageSource(for: item)) + .placeholder { _ in + EmptyView() + } + .failure { + Text(item.displayTitle) + .font(.largeTitle) + .fontWeight(.semibold) + } + .edgePadding(.leading) + .aspectRatio(contentMode: .fit) + .frame(height: 200, alignment: .bottomLeading) + } + .content { item in + // TODO: clean up + if item.type == .episode { + PosterButton.EpisodeContentSubtitleContent.Subtitle(item: item) + } else { + Text(" ") + } + } + .onSelect { item in + router.route(to: .item(item: item)) + } + .posterOverlay(for: BaseItemDto.self) { item in + LandscapePosterProgressBar( + title: item.progressLabel ?? L10n.continue, + progress: (item.userData?.playedPercentage ?? 0) / 100 + ) + } + } + } +} diff --git a/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift b/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift new file mode 100644 index 00000000..c971b778 --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift @@ -0,0 +1,38 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension HomeView { + + struct LatestInLibraryView: View { + + @Default(.Customization.latestInLibraryPosterType) + private var latestInLibraryPosterType + + @Router + private var router + + @ObservedObject + var viewModel: LatestInLibraryViewModel + + var body: some View { + if viewModel.elements.isNotEmpty { + PosterHStack( + title: L10n.latestWithString(viewModel.parent?.displayTitle ?? .emptyDash), + type: latestInLibraryPosterType, + items: viewModel.elements + ) { item in + router.route(to: .item(item: item)) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift b/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift new file mode 100644 index 00000000..f650b607 --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift @@ -0,0 +1,37 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension HomeView { + + struct NextUpView: View { + + @Default(.Customization.nextUpPosterType) + private var nextUpPosterType + + @Router + private var router + + @ObservedObject + var viewModel: NextUpLibraryViewModel + + var body: some View { + if viewModel.elements.isNotEmpty { + PosterHStack( + title: L10n.nextUp, + type: nextUpPosterType, + items: viewModel.elements + ) { item in + router.route(to: .item(item: item)) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift b/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift new file mode 100644 index 00000000..8ec2388b --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift @@ -0,0 +1,37 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension HomeView { + + struct RecentlyAddedView: View { + + @Default(.Customization.recentlyAddedPosterType) + private var recentlyAddedPosterType + + @Router + private var router + + @ObservedObject + var viewModel: RecentlyAddedLibraryViewModel + + var body: some View { + if viewModel.elements.isNotEmpty { + PosterHStack( + title: L10n.recentlyAdded, + type: recentlyAddedPosterType, + items: viewModel.elements + ) { item in + router.route(to: .item(item: item)) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/HomeView/HomeView.swift b/Swiftfin tvOS/Views/HomeView/HomeView.swift new file mode 100644 index 00000000..41b54641 --- /dev/null +++ b/Swiftfin tvOS/Views/HomeView/HomeView.swift @@ -0,0 +1,83 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Foundation +import JellyfinAPI +import SwiftUI + +struct HomeView: View { + + @Router + private var router + + @StateObject + private var viewModel = HomeViewModel() + + @Default(.Customization.Home.showRecentlyAdded) + private var showRecentlyAdded + + @ViewBuilder + private var contentView: some View { + ScrollView { + VStack(alignment: .leading, spacing: 0) { + + if viewModel.resumeItems.isNotEmpty { + CinematicResumeView(viewModel: viewModel) + + NextUpView(viewModel: viewModel.nextUpViewModel) + + if showRecentlyAdded { + RecentlyAddedView(viewModel: viewModel.recentlyAddedViewModel) + } + } else { + if showRecentlyAdded { + CinematicRecentlyAddedView(viewModel: viewModel.recentlyAddedViewModel) + } + + NextUpView(viewModel: viewModel.nextUpViewModel) + .safeAreaPadding(.top, 150) + } + + ForEach(viewModel.libraries) { viewModel in + LatestInLibraryView(viewModel: viewModel) + } + } + } + } + + var body: some View { + ZStack { + // This keeps the ErrorView vertically aligned with the PagingLibraryView + Color.clear + + switch viewModel.state { + case .content: + contentView + case let .error(error): + ErrorView(error: error) + .onRetry { + viewModel.send(.refresh) + } + case .initial, .refreshing: + ProgressView() + } + } + .animation(.linear(duration: 0.1), value: viewModel.state) + .onFirstAppear { + viewModel.send(.refresh) + } + .ignoresSafeArea() + .sinceLastDisappear { interval in + if interval > 60 || viewModel.notificationsReceived.contains(.itemMetadataDidChange) { + viewModel.send(.backgroundRefresh) + viewModel.notificationsReceived.remove(.itemMetadataDidChange) + } + } + } +} diff --git a/jellypig tvOS/Views/ItemOverviewView.swift b/Swiftfin tvOS/Views/ItemOverviewView.swift similarity index 100% rename from jellypig tvOS/Views/ItemOverviewView.swift rename to Swiftfin tvOS/Views/ItemOverviewView.swift diff --git a/Swiftfin tvOS/Views/ItemView/CollectionItemContentView.swift b/Swiftfin tvOS/Views/ItemView/CollectionItemContentView.swift new file mode 100644 index 00000000..a3e951a3 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/CollectionItemContentView.swift @@ -0,0 +1,97 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import JellyfinAPI +import OrderedCollections +import SwiftUI + +extension ItemView { + + struct CollectionItemContentView: View { + + typealias Element = OrderedDictionary.Elements.Element + + @Router + private var router + + @ObservedObject + var viewModel: CollectionItemViewModel + + // MARK: - Episode Poster HStack + + private func episodeHStack(element: Element) -> some View { + VStack(alignment: .leading, spacing: 20) { + + HStack { + Text(L10n.episodes) + .font(.title2) + .fontWeight(.semibold) + .accessibility(addTraits: [.isHeader]) + .padding(.leading, 50) + + Spacer() + } + + CollectionHStack( + uniqueElements: element.value.elements, + id: \.unwrappedIDHashOrZero, + columns: 3.5 + ) { episode in + SeriesEpisodeSelector.EpisodeCard(episode: episode) + .padding(.horizontal, 4) + } + .scrollBehavior(.continuousLeadingEdge) + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + } + .focusSection() + } + + // MARK: - Default Poster HStack + + private func posterHStack(element: Element) -> some View { + PosterHStack( + title: element.key.pluralDisplayTitle, + type: .portrait, + items: element.value.elements + ) { item in + router.route(to: .item(item: item)) + } + .focusSection() + + // TODO: Is this possible? + /* .trailing { + SeeMoreButton() { + router.route(to: .library(viewModel: element.value)) + } + } */ + } + + var body: some View { + VStack(spacing: 0) { + ForEach( + viewModel.sections.elements, + id: \.key + ) { element in + if element.key == .episode { + episodeHStack(element: element) + } else { + posterHStack(element: element) + } + } + + if viewModel.similarItems.isNotEmpty { + ItemView.SimilarItemsHStack(items: viewModel.similarItems) + } + + ItemView.AboutView(viewModel: viewModel) + } + } + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/AboutView/AboutView.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/AboutView/AboutView.swift rename to Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift diff --git a/jellypig tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift rename to Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/ImageCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/ImageCard.swift new file mode 100644 index 00000000..3fa3672f --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/ImageCard.swift @@ -0,0 +1,55 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension ItemView.AboutView { + + struct ImageCard: View { + + // MARK: - Environment & Observed Objects + + @Router + private var router + + @ObservedObject + var viewModel: ItemViewModel + + // MARK: - Body + + var body: some View { + PosterButton( + item: viewModel.item, + type: .portrait, + action: onSelect + ) { + EmptyView() + } + .posterOverlay(for: BaseItemDto.self) { _ in EmptyView() } + .frame(height: 405) + } + + // MARK: - On Select + + // Switch case to allow other funcitonality if we need to expand this beyond episode > series + private func onSelect() { + switch viewModel.item.type { + case .episode: + if let episodeViewModel = viewModel as? EpisodeItemViewModel, + let seriesItem = episodeViewModel.seriesItem + { + router.route(to: .item(item: seriesItem)) + } + default: + break + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift new file mode 100644 index 00000000..1de2bf99 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift @@ -0,0 +1,42 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView.AboutView { + + struct MediaSourcesCard: View { + + @Router + private var router + + let subtitle: String? + let source: MediaSourceInfo + + var body: some View { + Card(title: L10n.media, subtitle: subtitle) + .content { + if let mediaStreams = source.mediaStreams { + VStack(alignment: .leading) { + Text(mediaStreams.compactMap(\.displayTitle).prefix(4).joined(separator: "\n")) + .font(.footnote) + + if mediaStreams.count > 4 { + L10n.seeMore.text + .font(.footnote) + } + } + } + } + .onSelect { + router.route(to: .mediaSourceInfo(source: source)) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift new file mode 100644 index 00000000..89a8d6a6 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView.AboutView { + + struct OverviewCard: View { + + @Router + private var router + + let item: BaseItemDto + + var body: some View { + Card(title: item.displayTitle) + .content { + TruncatedText(item.overview ?? L10n.noOverviewAvailable) + .font(.subheadline) + .lineLimit(4) + } + .onSelect { + router.route(to: .itemOverview(item: item)) + } + } + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift rename to Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift new file mode 100644 index 00000000..40da84e2 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/ActionButtonHStack.swift @@ -0,0 +1,195 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct ActionButtonHStack: View { + + @StoredValue(.User.enableItemDeletion) + private var enableItemDeletion: Bool + @StoredValue(.User.enableItemEditing) + private var enableItemEditing: Bool + @StoredValue(.User.enableCollectionManagement) + private var enableCollectionManagement: Bool + @StoredValue(.User.enabledTrailers) + private var enabledTrailers: TrailerSelection + + // MARK: - Observed, State, & Environment Objects + + @Router + private var router + + @ObservedObject + var viewModel: ItemViewModel + + @StateObject + private var deleteViewModel: DeleteItemViewModel + + // MARK: - Dialog States + + @State + private var showConfirmationDialog = false + @State + private var isPresentingEventAlert = false + + // MARK: - Error State + + @State + private var error: Error? + + // MARK: - Can Delete Item + + private var canDelete: Bool { + viewModel.userSession.user.permissions.items.canDelete(item: viewModel.item) + } + + // MARK: - Can Refresh Item + + private var canRefresh: Bool { + viewModel.userSession.user.permissions.items.canEditMetadata(item: viewModel.item) + } + + // MARK: - Can Manage Subtitles + + private var canManageSubtitles: Bool { + viewModel.userSession.user.permissions.items.canManageSubtitles(item: viewModel.item) + } + + // MARK: - Deletion or Refreshing is Enabled + + private var enableMenu: Bool { + canDelete || canRefresh + } + + // MARK: - Has Trailers + + private var hasTrailers: Bool { + if enabledTrailers.contains(.local), viewModel.localTrailers.isNotEmpty { + return true + } + + if enabledTrailers.contains(.external), viewModel.item.remoteTrailers?.isNotEmpty == true { + return true + } + + return false + } + + // MARK: - Initializer + + init(viewModel: ItemViewModel) { + self.viewModel = viewModel + self._deleteViewModel = StateObject(wrappedValue: .init(item: viewModel.item)) + } + + // MARK: - Body + + var body: some View { + HStack(alignment: .center, spacing: 20) { + + // MARK: Toggle Played + + if viewModel.item.canBePlayed { + let isCheckmarkSelected = viewModel.item.userData?.isPlayed == true + + ActionButton( + L10n.played, + icon: "checkmark.circle", + selectedIcon: "checkmark.circle.fill" + ) { + viewModel.send(.toggleIsPlayed) + } + .foregroundStyle(Color.jellyfinPurple) + .isSelected(isCheckmarkSelected) + .frame(minWidth: 100, maxWidth: .infinity) + } + + // MARK: Toggle Favorite + + let isHeartSelected = viewModel.item.userData?.isFavorite == true + + ActionButton( + L10n.favorited, + icon: "heart.circle", + selectedIcon: "heart.circle.fill" + ) { + viewModel.send(.toggleIsFavorite) + } + .foregroundStyle(.pink) + .isSelected(isHeartSelected) + .frame(minWidth: 100, maxWidth: .infinity) + + // MARK: Watch a Trailer + + if hasTrailers { + TrailerMenu( + localTrailers: viewModel.localTrailers, + externalTrailers: viewModel.item.remoteTrailers ?? [] + ) + } + + // MARK: Advanced Options + + if enableMenu { + ActionButton(L10n.advanced, icon: "ellipsis", isCompact: true) { + if canRefresh || canManageSubtitles { + Section(L10n.manage) { + if canRefresh { + RefreshMetadataButton(item: viewModel.item) + } + + if canManageSubtitles { + Button(L10n.subtitles, systemImage: "textformat") { + router.route( + to: .searchSubtitle( + viewModel: .init(item: viewModel.item) + ) + ) + } + } + } + } + + if canDelete { + Section { + Button(L10n.delete, systemImage: "trash", role: .destructive) { + showConfirmationDialog = true + } + } + } + } + .frame(width: 60) + } + } + .frame(height: 100) + .padding(.top, 1) + .padding(.bottom, 10) + .confirmationDialog( + L10n.deleteItemConfirmationMessage, + isPresented: $showConfirmationDialog, + titleVisibility: .visible + ) { + Button(L10n.confirm, role: .destructive) { + deleteViewModel.send(.delete) + } + Button(L10n.cancel, role: .cancel) {} + } + .onReceive(deleteViewModel.events) { event in + switch event { + case let .error(eventError): + error = eventError + case .deleted: + router.dismiss() + } + } + .errorMessage($error) + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/ActionButton.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/ActionButton.swift new file mode 100644 index 00000000..20d1b032 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/ActionButton.swift @@ -0,0 +1,126 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct ActionButton: View { + + // MARK: - Environment Objects + + @Environment(\.isSelected) + private var isSelected + + // MARK: - Focus State + + @FocusState + private var isFocused: Bool + + private let content: () -> Content + private let icon: String + private let isCompact: Bool + private let selectedIcon: String? + private let title: String + private let onSelect: () -> Void + + private var labelIconName: String { + isSelected ? selectedIcon ?? icon : icon + } + + // MARK: - Body + + var body: some View { + Group { + if Content.self == EmptyView.self { + Button(action: onSelect) { + labelView + } + .buttonStyle(.card) + } else { + Menu(content: content) { + labelView + } + .scaleEffect(isFocused ? 1.2 : 1.0) + .animation( + .spring(response: 0.2, dampingFraction: 1), value: isFocused + ) + .buttonStyle(.plain) + .menuStyle(.borderlessButton) + .focused($isFocused) + } + } + .focused($isFocused) + } + + // MARK: - Label Views + + private var labelView: some View { + ZStack { + let isButton = Content.self == EmptyView.self + + if isButton, isSelected { + RoundedRectangle(cornerRadius: 10) + .fill( + isFocused ? AnyShapeStyle(HierarchicalShapeStyle.primary) : + AnyShapeStyle(HierarchicalShapeStyle.primary.opacity(0.5)) + ) + } else { + RoundedRectangle(cornerRadius: 10) + .fill(isFocused ? .white : .white.opacity(0.5)) + } + + Label(title, systemImage: labelIconName) + .focusEffectDisabled() + .font(.title3) + .fontWeight(.semibold) + .foregroundStyle(.black) + .labelStyle(.iconOnly) + .rotationEffect(isCompact ? .degrees(90) : .degrees(0)) + } + .accessibilityLabel(title) + } + } +} + +// MARK: - Initializers + +extension ItemView.ActionButton { + + // MARK: Button Initializer + + init( + _ title: String, + icon: String, + selectedIcon: String, + onSelect: @escaping () -> Void + ) where Content == EmptyView { + self.title = title + self.icon = icon + self.isCompact = false + self.selectedIcon = selectedIcon + self.onSelect = onSelect + self.content = { EmptyView() } + } + + // MARK: Menu Initializer + + init( + _ title: String, + icon: String, + isCompact: Bool = false, + @ViewBuilder content: @escaping () -> Content + ) { + self.title = title + self.icon = icon + self.isCompact = isCompact + self.selectedIcon = nil + self.onSelect = {} + self.content = content + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/RefreshMetadataButton.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/RefreshMetadataButton.swift new file mode 100644 index 00000000..8653d8e2 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/RefreshMetadataButton.swift @@ -0,0 +1,85 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView { + + struct RefreshMetadataButton: View { + + // MARK: - State Object + + @StateObject + private var viewModel: RefreshMetadataViewModel + + // MARK: - Initializer + + init(item: BaseItemDto) { + _viewModel = StateObject(wrappedValue: RefreshMetadataViewModel(item: item)) + } + + // MARK: - Body + + var body: some View { + Menu { + Section(L10n.metadata) { + Button(L10n.findMissing, systemImage: "magnifyingglass") { + viewModel.refreshMetadata( + metadataRefreshMode: .fullRefresh, + imageRefreshMode: .fullRefresh, + replaceMetadata: false, + replaceImages: false + ) + } + + Button(L10n.replaceMetadata, systemImage: "arrow.clockwise") { + viewModel.refreshMetadata( + metadataRefreshMode: .fullRefresh, + imageRefreshMode: .none, + replaceMetadata: true, + replaceImages: false + ) + } + + Button(L10n.replaceImages, systemImage: "photo") { + viewModel.refreshMetadata( + metadataRefreshMode: .none, + imageRefreshMode: .fullRefresh, + replaceMetadata: false, + replaceImages: true + ) + } + + Button(L10n.replaceAll, systemImage: "staroflife") { + viewModel.refreshMetadata( + metadataRefreshMode: .fullRefresh, + imageRefreshMode: .fullRefresh, + replaceMetadata: true, + replaceImages: true + ) + } + } + } label: { + HStack { + Text(L10n.refreshMetadata) + .foregroundStyle(.primary) + + Spacer() + + Image(systemName: "arrow.clockwise") + .foregroundStyle(.secondary) + .fontWeight(.semibold) + } + } + .foregroundStyle(.primary, .secondary) + .disabled(viewModel.state == .refreshing) + .errorMessage($viewModel.error) + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift new file mode 100644 index 00000000..15d813b2 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtonHStack/Components/TrailerMenu.swift @@ -0,0 +1,152 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import JellyfinAPI +import Logging +import SwiftUI + +extension ItemView { + + struct TrailerMenu: View { + + private let logger = Logger.swiftfin() + + // MARK: - Stored Value + + @StoredValue(.User.enabledTrailers) + private var enabledTrailers: TrailerSelection + + // MARK: - Focus State + + @FocusState + private var isFocused: Bool + + // MARK: - Observed & Envirnoment Objects + + @Router + private var router + + // MARK: - Error State + + @State + private var error: Error? + + // MARK: - Notification State + + @State + private var selectedRemoteURL: MediaURL? + + let localTrailers: [BaseItemDto] + let externalTrailers: [MediaURL] + + private var showLocalTrailers: Bool { + enabledTrailers.contains(.local) && localTrailers.isNotEmpty + } + + private var showExternalTrailers: Bool { + enabledTrailers.contains(.external) && externalTrailers.isNotEmpty + } + + // MARK: - Body + + var body: some View { + Group { + switch localTrailers.count + externalTrailers.count { + case 1: + trailerButton + default: + trailerMenu + } + } + .errorMessage($error) + } + + // MARK: - Single Trailer Button + + private var trailerButton: some View { + ActionButton( + L10n.trailers, + icon: "movieclapper", + selectedIcon: "movieclapper" + ) { + if showLocalTrailers, let firstTrailer = localTrailers.first { + playLocalTrailer(firstTrailer) + } + + if showExternalTrailers, let firstTrailer = externalTrailers.first { + playExternalTrailer(firstTrailer) + } + } + } + + // MARK: - Multiple Trailers Menu Button + + @ViewBuilder + private var trailerMenu: some View { + ActionButton(L10n.trailers, icon: "movieclapper") { + + if showLocalTrailers { + Section(L10n.local) { + ForEach(localTrailers) { trailer in + Button( + trailer.name ?? L10n.trailer, + systemImage: "play.fill" + ) { + playLocalTrailer(trailer) + } + } + } + } + + if showExternalTrailers { + Section(L10n.external) { + ForEach(externalTrailers, id: \.self) { mediaURL in + Button( + mediaURL.name ?? L10n.trailer, + systemImage: "arrow.up.forward" + ) { + playExternalTrailer(mediaURL) + } + } + } + } + } + } + + // MARK: - Play: Local Trailer + + private func playLocalTrailer(_ trailer: BaseItemDto) { + if let selectedMediaSource = trailer.mediaSources?.first { +// router.route( +// to: .videoPlayer(manager: OnlineVideoPlayerManager( +// item: trailer, +// mediaSource: selectedMediaSource +// )) +// ) + } else { + logger.log(level: .error, "No media sources found") + error = JellyfinAPIError(L10n.unknownError) + } + } + + // MARK: - Play: External Trailer + + private func playExternalTrailer(_ trailer: MediaURL) { + if let url = URL(string: trailer.url), UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) { success in + guard !success else { return } + + error = JellyfinAPIError(L10n.unableToOpenTrailer) + } + } else { + error = JellyfinAPIError(L10n.unableToOpenTrailer) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift new file mode 100644 index 00000000..85f65419 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift @@ -0,0 +1,154 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct AttributesHStack: View { + + @ObservedObject + private var viewModel: ItemViewModel + + private let alignment: HorizontalAlignment + private let attributes: [ItemViewAttribute] + private let flowDirection: FlowLayout.Direction + + init( + attributes: [ItemViewAttribute], + viewModel: ItemViewModel, + alignment: HorizontalAlignment = .center, + flowDirection: FlowLayout.Direction = .up + ) { + self.viewModel = viewModel + self.alignment = alignment + self.attributes = attributes + self.flowDirection = flowDirection + } + + var body: some View { + if attributes.isNotEmpty { + FlowLayout( + alignment: alignment, + direction: flowDirection, + spacing: 20 + ) { + ForEach(attributes, id: \.self) { attribute in + switch attribute { + case .ratingCritics: CriticRating() + case .ratingCommunity: CommunityRating() + case .ratingOfficial: OfficialRating() + case .videoQuality: VideoQuality() + case .audioChannels: AudioChannels() + case .subtitles: Subtitles() + } + } + } + .foregroundStyle(Color(UIColor.darkGray)) + .lineLimit(1) + } + } + + @ViewBuilder + private func CriticRating() -> some View { + if let criticRating = viewModel.item.criticRating { + AttributeBadge( + style: .outline, + title: Text("\(criticRating, specifier: "%.0f")") + ) { + if criticRating >= 60 { + Image(.tomatoFresh) + .symbolRenderingMode(.hierarchical) + } else { + Image(.tomatoRotten) + } + } + } + } + + @ViewBuilder + private func CommunityRating() -> some View { + if let communityRating = viewModel.item.communityRating { + AttributeBadge( + style: .outline, + title: Text("\(communityRating, specifier: "%.01f")"), + systemName: "star.fill" + ) + } + } + + @ViewBuilder + private func OfficialRating() -> some View { + if let officialRating = viewModel.item.officialRating { + AttributeBadge( + style: .outline, + title: officialRating + ) + } + } + + @ViewBuilder + private func VideoQuality() -> some View { + if let mediaStreams = viewModel.selectedMediaSource?.mediaStreams { + if mediaStreams.has4KVideo { + AttributeBadge( + style: .fill, + title: "4K" + ) + } else if mediaStreams.hasHDVideo { + AttributeBadge( + style: .fill, + title: "HD" + ) + } + if mediaStreams.hasDolbyVision { + AttributeBadge( + style: .fill, + title: "DV" + ) + } + if mediaStreams.hasHDRVideo { + AttributeBadge( + style: .fill, + title: "HDR" + ) + } + } + } + + @ViewBuilder + private func AudioChannels() -> some View { + if let mediaStreams = viewModel.selectedMediaSource?.mediaStreams { + if mediaStreams.has51AudioChannelLayout { + AttributeBadge( + style: .fill, + title: "5.1" + ) + } + if mediaStreams.has71AudioChannelLayout { + AttributeBadge( + style: .fill, + title: "7.1" + ) + } + } + } + + @ViewBuilder + private func Subtitles() -> some View { + if let mediaStreams = viewModel.selectedMediaSource?.mediaStreams, + mediaStreams.hasSubtitles + { + AttributeBadge( + style: .outline, + title: "CC" + ) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift new file mode 100644 index 00000000..653b6363 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift @@ -0,0 +1,33 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView { + + struct CastAndCrewHStack: View { + + @Router + private var router + + let people: [BaseItemPerson] + + var body: some View { + PosterHStack( + title: L10n.castAndCrew, + type: .portrait, + items: people.filter { person in + person.type?.isSupported ?? false + } + ) { person in + router.route(to: .item(item: .init(person: person))) + } + } + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift rename to Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift new file mode 100644 index 00000000..8cd1100c --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift @@ -0,0 +1,95 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension SeriesEpisodeSelector { + + struct EpisodeCard: View { + + @Router + private var router + + let episode: BaseItemDto + + @FocusState + private var isFocused: Bool + + @ViewBuilder + private var overlayView: some View { + ZStack { + if let progressLabel = episode.progressLabel { + LandscapePosterProgressBar( + title: progressLabel, + progress: (episode.userData?.playedPercentage ?? 0) / 100 + ) + } else if episode.userData?.isPlayed ?? false { + ZStack(alignment: .bottomTrailing) { + Color.clear + + Image(systemName: "checkmark.circle.fill") + .resizable() + .frame(width: 30, height: 30, alignment: .bottomTrailing) + .symbolRenderingMode(.palette) + .foregroundStyle(.white, .black) + .padding() + } + } + + if isFocused { + Image(systemName: "play.fill") + .resizable() + .frame(width: 50, height: 50) + .foregroundStyle(.secondary) + } + } + } + + private var episodeContent: String { + if episode.isUnaired { + episode.airDateLabel ?? L10n.noOverviewAvailable + } else { + episode.overview ?? L10n.noOverviewAvailable + } + } + + var body: some View { + VStack(alignment: .leading) { + Button { + guard let mediaSource = episode.mediaSources?.first else { return } +// router.route(to: .videoPlayer(manager: OnlineVideoPlayerManager(item: episode, mediaSource: mediaSource))) + } label: { + ZStack { + Color.clear + + ImageView(episode.imageSource(.primary, maxWidth: 500)) + .failure { + SystemImageContentView(systemName: episode.systemImage) + } + + overlayView + } + .posterStyle(.landscape) + } + .buttonStyle(.card) + .posterShadow() + .focused($isFocused) + + SeriesEpisodeSelector.EpisodeContent( + subHeader: episode.episodeLocator ?? .emptyDash, + header: episode.displayTitle, + content: episodeContent + ) + .onSelect { + router.route(to: .item(item: episode)) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift new file mode 100644 index 00000000..4f2c434c --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift @@ -0,0 +1,92 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension SeriesEpisodeSelector { + + struct EpisodeContent: View { + + @Default(.accentColor) + private var accentColor + + private var onSelect: () -> Void + + let subHeader: String + let header: String + let content: String + + @ViewBuilder + private var subHeaderView: some View { + Text(subHeader) + .font(.caption) + .foregroundColor(.secondary) + .lineLimit(1) + } + + @ViewBuilder + private var headerView: some View { + Text(header) + .font(.footnote) + .foregroundColor(.primary) + .lineLimit(1) + .multilineTextAlignment(.leading) + .padding(.bottom, 1) + } + + @ViewBuilder + private var contentView: some View { + Text(content) + .font(.caption.weight(.light)) + .foregroundColor(.secondary) + .multilineTextAlignment(.leading) + .lineLimit(3, reservesSpace: true) + .font(.caption.weight(.light)) + } + + var body: some View { + Button { + onSelect() + } label: { + VStack(alignment: .leading, spacing: 8) { + subHeaderView + + headerView + + contentView + .frame(maxWidth: .infinity, alignment: .leading) + + L10n.seeMore.text + .font(.caption.weight(.light)) + .foregroundStyle(accentColor) + } + .padding() + } + .buttonStyle(.card) + } + } +} + +extension SeriesEpisodeSelector.EpisodeContent { + init( + subHeader: String, + header: String, + content: String + ) { + self.subHeader = subHeader + self.header = header + self.content = content + self.onSelect = {} + } + + func onSelect(perform action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift rename to Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/EpisodeHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/EpisodeHStack.swift new file mode 100644 index 00000000..f04f00b7 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/EpisodeHStack.swift @@ -0,0 +1,205 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import Foundation +import JellyfinAPI +import SwiftUI + +extension SeriesEpisodeSelector { + + struct EpisodeHStack: View { + + @EnvironmentObject + private var focusGuide: FocusGuide + + @FocusState + private var focusedEpisodeID: String? + + @ObservedObject + var viewModel: SeasonItemViewModel + + @State + private var didScrollToPlayButtonItem = false + @State + private var lastFocusedEpisodeID: String? + + @StateObject + private var proxy = CollectionHStackProxy() + + let playButtonItem: BaseItemDto? + + // MARK: - Content View + + private func contentView(viewModel: SeasonItemViewModel) -> some View { + CollectionHStack( + uniqueElements: viewModel.elements, + id: \.unwrappedIDHashOrZero, + columns: 3.5 + ) { episode in + SeriesEpisodeSelector.EpisodeCard(episode: episode) + .focused($focusedEpisodeID, equals: episode.id) + .padding(.horizontal, 4) + } + .scrollBehavior(.continuousLeadingEdge) + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + .proxy(proxy) + .onFirstAppear { + guard !didScrollToPlayButtonItem else { return } + didScrollToPlayButtonItem = true + + lastFocusedEpisodeID = playButtonItem?.id + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + guard let playButtonItem else { return } + proxy.scrollTo(id: playButtonItem.unwrappedIDHashOrZero, animated: false) + } + } + } + + // MARK: - Determine Which Episode should be Focused + + private func getContentFocus() { + switch viewModel.state { + case .content: + if viewModel.elements.isEmpty { + /// Focus the EmptyCard if the Season has no elements + focusedEpisodeID = "emptyCard" + } else { + if let lastFocusedEpisodeID, + viewModel.elements.contains(where: { $0.id == lastFocusedEpisodeID }) + { + /// Return focus to the Last Focused Episode if it exists in the current Season + focusedEpisodeID = lastFocusedEpisodeID + } else { + /// Focus the First Episode in the season as a last resort + focusedEpisodeID = viewModel.elements.first?.id + } + } + case .error: + /// Focus the ErrorCard if the Season failed to load + focusedEpisodeID = "errorCard" + case .initial, .refreshing: + /// Focus the LoadingCard if the Season is currently loading + focusedEpisodeID = "loadingCard" + } + } + + // MARK: - Body + + var body: some View { + ZStack { + switch viewModel.state { + case .content: + if viewModel.elements.isEmpty { + EmptyHStack(focusedEpisodeID: $focusedEpisodeID) + } else { + contentView(viewModel: viewModel) + } + case let .error(error): + ErrorHStack(viewModel: viewModel, error: error, focusedEpisodeID: $focusedEpisodeID) + case .initial, .refreshing: + LoadingHStack(focusedEpisodeID: $focusedEpisodeID) + } + } + .padding(.bottom, 45) + .focusSection() + .focusGuide( + focusGuide, + tag: "episodes", + onContentFocus: { + getContentFocus() + }, + top: "belowHeader" + ) + .onChange(of: viewModel.id) { + lastFocusedEpisodeID = viewModel.elements.first?.id + } + .onChange(of: focusedEpisodeID) { _, newValue in + guard let newValue else { return } + lastFocusedEpisodeID = newValue + } + .onChange(of: viewModel.state) { _, newValue in + if newValue == .content { + lastFocusedEpisodeID = viewModel.elements.first?.id + } + } + } + } + + // MARK: - Empty HStack + + struct EmptyHStack: View { + + let focusedEpisodeID: FocusState.Binding + + var body: some View { + CollectionHStack( + count: 1, + columns: 3.5 + ) { _ in + SeriesEpisodeSelector.EmptyCard() + .focused(focusedEpisodeID, equals: "emptyCard") + .padding(.horizontal, 4) + } + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + .scrollDisabled(true) + } + } + + // MARK: - Error HStack + + struct ErrorHStack: View { + + @ObservedObject + var viewModel: SeasonItemViewModel + + let error: JellyfinAPIError + let focusedEpisodeID: FocusState.Binding + + var body: some View { + CollectionHStack( + count: 1, + columns: 3.5 + ) { _ in + SeriesEpisodeSelector.ErrorCard(error: error) + .onSelect { + viewModel.send(.refresh) + } + .focused(focusedEpisodeID, equals: "errorCard") + .padding(.horizontal, 4) + } + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + .scrollDisabled(true) + } + } + + // MARK: - Loading HStack + + struct LoadingHStack: View { + + let focusedEpisodeID: FocusState.Binding + + var body: some View { + CollectionHStack( + count: 1, + columns: 3.5 + ) { _ in + SeriesEpisodeSelector.LoadingCard() + .focused(focusedEpisodeID, equals: "loadingCard") + .padding(.horizontal, 4) + } + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + .scrollDisabled(true) + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/SeasonHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/SeasonHStack.swift new file mode 100644 index 00000000..7b365deb --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/HStacks/SeasonHStack.swift @@ -0,0 +1,117 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension SeriesEpisodeSelector { + + struct SeasonsHStack: View { + + // MARK: - Environment & Observed Objects + + @EnvironmentObject + private var focusGuide: FocusGuide + + @ObservedObject + var viewModel: SeriesItemViewModel + + // MARK: - Selection Binding + + @Binding + var selection: SeasonItemViewModel.ID? + + // MARK: - Focus Variables + + @FocusState + private var focusedSeason: SeasonItemViewModel.ID? + + @State + private var didScrollToPlayButtonSeason = false + + // MARK: - Body + + var body: some View { + ScrollViewReader { proxy in + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: EdgeInsets.edgePadding / 2) { + ForEach(viewModel.seasons) { season in + seasonButton(season: season) + .id(season.id) + } + } + .padding(.horizontal, EdgeInsets.edgePadding) + } + .padding(.bottom, 45) + .focusSection() + .focusGuide( + focusGuide, + tag: "belowHeader", + onContentFocus: { focusedSeason = selection }, + top: "header", + bottom: "episodes" + ) + .mask { + VStack(spacing: 0) { + Color.white + + LinearGradient( + stops: [ + .init(color: .white, location: 0), + .init(color: .clear, location: 1), + ], + startPoint: .top, + endPoint: .bottom + ) + .frame(height: 20) + } + } + .onChange(of: focusedSeason) { _, newValue in + if let newValue = newValue { + selection = newValue + } + } + .onFirstAppear { + guard !didScrollToPlayButtonSeason else { return } + didScrollToPlayButtonSeason = true + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + guard let selection else { return } + + proxy.scrollTo(selection) + } + } + } + .scrollClipDisabled() + } + + // MARK: - Season Button + + @ViewBuilder + private func seasonButton(season: SeasonItemViewModel) -> some View { + Button { + selection = season.id + } label: { + Marquee(season.season.displayTitle, animateWhenFocused: true) + .frame(maxWidth: 300) + .font(.headline) + .fontWeight(.semibold) + .padding(.vertical, 10) + .padding(.horizontal, 20) + .if(selection == season.id) { text in + text + .background(.white) + .foregroundColor(.black) + } + } + .focused($focusedSeason, equals: season.id) + .buttonStyle(.card) + .padding(.horizontal, 4) + .padding(.vertical) + } + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift rename to Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift diff --git a/jellypig tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift rename to Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/Components/SubtitleSearchRow.swift b/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/Components/SubtitleSearchRow.swift new file mode 100644 index 00000000..1202ce77 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/Components/SubtitleSearchRow.swift @@ -0,0 +1,68 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import SwiftUI + +extension ItemSubtitleSearchView { + + struct SubtitleResultRow: View { + + // MARK: - Environment Variables + + @Environment(\.isSelected) + var isSelected + + // MARK: - Subtitle Variable + + let subtitle: RemoteSubtitleInfo + + // MARK: - Subtitle Action + + let onSelect: () -> Void + + // MARK: - Body + + var body: some View { + Button(action: onSelect) { + HStack { + VStack(alignment: .leading, spacing: 4) { + Text(subtitle.name ?? L10n.unknown) + .font(.headline) + .fontWeight(.semibold) + + LabeledContent(L10n.language, value: subtitle.threeLetterISOLanguageName ?? L10n.unknown) + + if let downloadCount = subtitle.downloadCount { + LabeledContent(L10n.downloads, value: downloadCount.description) + } + + if let rating = subtitle.communityRating { + LabeledContent(L10n.communityRating, value: String(format: "%.1f", rating)) + } + + if let author = subtitle.author { + LabeledContent(L10n.author, value: author) + } + + if let format = subtitle.format { + LabeledContent(L10n.format, value: format) + } + } + .foregroundStyle(isSelected ? .primary : .secondary, .secondary) + .font(.caption) + + Spacer() + + ListRowCheckbox() + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/ItemSubtitleSearchView.swift b/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/ItemSubtitleSearchView.swift new file mode 100644 index 00000000..2779a5d3 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/ItemSubtitleSearchView/ItemSubtitleSearchView.swift @@ -0,0 +1,185 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +struct ItemSubtitleSearchView: View { + + // MARK: - Accent Color + + @Default(.accentColor) + private var accentColor + + // MARK: - Router + + @Router + private var router + + // MARK: - ViewModel + + @ObservedObject + private var viewModel: SubtitleEditorViewModel + + // MARK: - Selected Subtitles + + @State + private var selectedSubtitles: Set = [] + + // MARK: - Search Properties + + /// Default to user's language + @State + private var language: String? = Locale.current.language.languageCode?.identifier(.alpha3) + @State + private var isPerfectMatch = false + + // MARK: - Error State + + @State + private var error: Error? + + // MARK: - Initializer + + init(viewModel: SubtitleEditorViewModel) { + self.viewModel = viewModel + } + + // MARK: - Body + + var body: some View { + ZStack { + BlurView() + .ignoresSafeArea() + contentView + } + .navigationTitle(L10n.search) + .onFirstAppear { + viewModel.send(.search(language: language)) + } + .topBarTrailing { + if viewModel.backgroundStates.isNotEmpty { + ProgressView() + } + } + .onReceive(viewModel.events) { event in + switch event { + case .deleted: + return + case .uploaded: + router.dismiss() + case let .error(eventError): + error = eventError + } + } + .errorMessage($error) + } + + // MARK: - Content View + + @ViewBuilder + private var contentView: some View { + switch viewModel.state { + case .initial, .content: + searchView + case let .error(error): + ErrorView(error: error) + } + } + + // MARK: - Search View + + private var searchView: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "textformat") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + searchSection + resultsSection + } + } + + // MARK: - Search Section + + @ViewBuilder + private var searchSection: some View { + Section(L10n.options) { + CulturePicker(L10n.language, threeLetterISOLanguageName: $language) + .onChange(of: language) { + guard let language else { return } + viewModel.send(.search(language: language, isPerfectMatch: isPerfectMatch)) + } + + Toggle(L10n.perfectMatch, isOn: $isPerfectMatch) + .onChange(of: isPerfectMatch) { + guard let language else { return } + viewModel.send(.search(language: language, isPerfectMatch: isPerfectMatch)) + } + } + + Section { + if viewModel.backgroundStates.contains(.updating) { + ListRowButton(L10n.cancel) { + viewModel.send(.cancel) + } + .listRowInsets(.zero) + .foregroundStyle(.red, .red.opacity(0.2)) + } else { + ListRowButton(L10n.save) { + setSubtitles() + } + .foregroundStyle( + accentColor.overlayColor, + accentColor + ) + .listRowInsets(.zero) + .disabled(selectedSubtitles.isEmpty) + .opacity(selectedSubtitles.isEmpty ? 0.5 : 1) + } + } + } + + // MARK: - Results Section + + private var resultsSection: some View { + Section(L10n.search) { + if viewModel.searchResults.isEmpty { + Text(L10n.none) + .foregroundStyle(.secondary) + .frame(maxWidth: .infinity, alignment: .center) + } + ForEach(viewModel.searchResults, id: \.id) { subtitle in + let isSelected = subtitle.id.map { selectedSubtitles.contains($0) } ?? false + + SubtitleResultRow(subtitle: subtitle) { + guard let subtitleID = subtitle.id else { return } + selectedSubtitles.toggle(value: subtitleID) + } + .foregroundStyle(isSelected ? .primary : .secondary, .secondary) + .isSelected(isSelected) + .isEditing(true) + } + } + } + + // MARK: - Set Subtitles + + private func setSubtitles() { + guard selectedSubtitles.isNotEmpty else { + error = JellyfinAPIError(L10n.noItemSelected) + return + } + + viewModel.send(.set(selectedSubtitles)) + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/OverviewView.swift b/Swiftfin tvOS/Views/ItemView/Components/OverviewView.swift new file mode 100644 index 00000000..76299702 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/OverviewView.swift @@ -0,0 +1,84 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +// TODO: have items provide labeled attributes +// TODO: don't layout `VStack` if no data + +extension ItemView { + + struct OverviewView: View { + + let item: BaseItemDto + private var overviewLineLimit: Int? + private var taglineLineLimit: Int? + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + + if let birthday = item.birthday?.formatted(date: .long, time: .omitted) { + LabeledContent( + L10n.born, + value: birthday + ) + } + + if let deathday = item.deathday?.formatted(date: .long, time: .omitted) { + LabeledContent( + L10n.died, + value: deathday + ) + } + + if let birthplace = item.birthplace { + LabeledContent( + L10n.birthplace, + value: birthplace + ) + } + + if let firstTagline = item.taglines?.first { + Text(firstTagline) + .font(.subheadline) + .fontWeight(.bold) + .multilineTextAlignment(.leading) + .lineLimit(taglineLineLimit) + } + + if let itemOverview = item.overview { + Text(itemOverview) + .font(.subheadline) + .lineLimit(overviewLineLimit) + } + } + .font(.footnote) + .labeledContentStyle(.itemAttribute) + } + } +} + +extension ItemView.OverviewView { + + init(item: BaseItemDto) { + self.init( + item: item, + overviewLineLimit: nil, + taglineLineLimit: nil + ) + } + + func overviewLineLimit(_ limit: Int) -> Self { + copy(modifying: \.overviewLineLimit, with: limit) + } + + func taglineLineLimit(_ limit: Int) -> Self { + copy(modifying: \.taglineLineLimit, with: limit) + } +} diff --git a/jellypig tvOS/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift b/Swiftfin tvOS/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift similarity index 100% rename from jellypig tvOS/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift rename to Swiftfin tvOS/Views/ItemView/Components/PlayButton/Components/VersionMenu.swift diff --git a/Swiftfin tvOS/Views/ItemView/Components/PlayButton/PlayButton.swift b/Swiftfin tvOS/Views/ItemView/Components/PlayButton/PlayButton.swift new file mode 100644 index 00000000..e6b92b17 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/PlayButton/PlayButton.swift @@ -0,0 +1,161 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import Logging +import SwiftUI + +extension ItemView { + + struct PlayButton: View { + + @Router + private var router + + @ObservedObject + var viewModel: ItemViewModel + + @FocusState + private var isFocused: Bool + + private let logger = Logger.swiftfin() + + // MARK: - Media Sources + + private var mediaSources: [MediaSourceInfo] { + viewModel.playButtonItem?.mediaSources ?? [] + } + + // MARK: - Multiple Media Sources + + private var multipleVersions: Bool { + mediaSources.count > 1 + } + + // MARK: - Validation + + private var isEnabled: Bool { + viewModel.selectedMediaSource != nil + } + + // MARK: - Title + + private var title: String { + /// Use the Season/Episode label for the Series ItemView + if let seriesViewModel = viewModel as? SeriesItemViewModel, + let seasonEpisodeLabel = seriesViewModel.playButtonItem?.seasonEpisodeLabel + { + return seasonEpisodeLabel + + /// Use a Play/Resume label for single Media Source items that are not Series + } else if let playButtonLabel = viewModel.playButtonItem?.playButtonLabel { + return playButtonLabel + + /// Fallback to a generic `Play` label + } else { + return L10n.play + } + } + + // MARK: - Media Source + + private var source: String? { + guard let sourceLabel = viewModel.selectedMediaSource?.displayTitle, + viewModel.item.mediaSources?.count ?? 0 > 1 + else { + return nil + } + + return sourceLabel + } + + // MARK: - Body + + var body: some View { + HStack(spacing: 20) { + playButton + + if multipleVersions { + VersionMenu(viewModel: viewModel, mediaSources: mediaSources) + .frame(width: 100, height: 100) + } + } + } + + // MARK: - Play Button + + private var playButton: some View { + Button { + play() + } label: { + HStack(spacing: 15) { + Image(systemName: "play.fill") + .font(.title3) + .padding(.trailing, 4) + + VStack(alignment: .leading) { + Text(title) + .fontWeight(.semibold) + + if let source { + Marquee(source, animateWhenFocused: true) + .font(.caption) + .frame(maxWidth: 250) + } + } + } + .foregroundStyle(isEnabled ? .black : Color(UIColor.secondaryLabel)) + .padding(20) + .frame(width: multipleVersions ? 320 : 440, height: 100, alignment: .center) + .background { + if isFocused { + isEnabled ? Color.white : Color.secondarySystemFill + } else { + Color.white + .opacity(0.5) + } + } + .cornerRadius(10) + } + .buttonStyle(.card) + .contextMenu { + if viewModel.playButtonItem?.userData?.playbackPositionTicks != 0 { + Button(L10n.playFromBeginning, systemImage: "gobackward") { + play(fromBeginning: true) + } + } + } + .disabled(!isEnabled) + .focused($isFocused) + } + + // MARK: - Play Content + + private func play(fromBeginning: Bool = false) { + guard var playButtonItem = viewModel.playButtonItem, + let selectedMediaSource = viewModel.selectedMediaSource + else { + logger.error("Play selected with no item or media source") + return + } + + if fromBeginning { + playButtonItem.userData?.playbackPositionTicks = 0 + } + + let manager = MediaPlayerManager( + item: playButtonItem +// queue: EpisodeMediaPlayerQueue(episode: playButtonItem) + ) { item in + try await MediaPlayerItem.build(for: item, mediaSource: selectedMediaSource) + } + + router.route(to: .videoPlayer(manager: manager)) + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift new file mode 100644 index 00000000..05ff1533 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift @@ -0,0 +1,40 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension ItemView { + + struct SimilarItemsHStack: View { + + @Default(.Customization.similarPosterType) + private var similarPosterType + + @Router + private var router + + @StateObject + private var viewModel: PagingLibraryViewModel + + init(items: [BaseItemDto]) { + self._viewModel = StateObject(wrappedValue: PagingLibraryViewModel(items, parent: BaseItemDto(name: L10n.recommended))) + } + + var body: some View { + PosterHStack( + title: L10n.recommended, + type: similarPosterType, + items: viewModel.elements + ) { item in + router.route(to: .item(item: item)) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift new file mode 100644 index 00000000..d00f93ec --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift @@ -0,0 +1,35 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView { + + struct SpecialFeaturesHStack: View { + + @Router + private var router + + let items: [BaseItemDto] + + var body: some View { + PosterHStack( + title: L10n.specialFeatures, + type: .landscape, + items: items + ) { item in + guard let mediaSource = item.mediaSources?.first else { return } +// router.route( +// to: .videoPlayer(manager: OnlineVideoPlayerManager(item: item, mediaSource: mediaSource)) +// ) + } + .posterOverlay(for: BaseItemDto.self) { _ in EmptyView() } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/ItemView.swift b/Swiftfin tvOS/Views/ItemView/ItemView.swift new file mode 100644 index 00000000..eeac5f3a --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/ItemView.swift @@ -0,0 +1,100 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct ItemView: View { + + protocol ScrollContainerView: View { + + associatedtype Content: View + + init(viewModel: ItemViewModel, content: @escaping () -> Content) + } + + @StateObject + private var viewModel: ItemViewModel + + // MARK: typeViewModel + + private static func typeViewModel(for item: BaseItemDto) -> ItemViewModel { + switch item.type { + case .boxSet, .person, .musicArtist: + return CollectionItemViewModel(item: item) + case .episode: + return EpisodeItemViewModel(item: item) + case .movie: + return MovieItemViewModel(item: item) + case .musicVideo, .video: + return ItemViewModel(item: item) + case .series: + return SeriesItemViewModel(item: item) + default: + assertionFailure("Unsupported item") + return ItemViewModel(item: item) + } + } + + init(item: BaseItemDto) { + self._viewModel = StateObject(wrappedValue: Self.typeViewModel(for: item)) + } + + @ViewBuilder + private var scrollContentView: some View { + switch viewModel.item.type { + case .boxSet, .person, .musicArtist: + CollectionItemContentView(viewModel: viewModel as! CollectionItemViewModel) + case .episode, .musicVideo, .video: + SimpleItemContentView(viewModel: viewModel) + case .movie: + MovieItemContentView(viewModel: viewModel as! MovieItemViewModel) + case .series: + SeriesItemContentView(viewModel: viewModel as! SeriesItemViewModel) + default: + Text(L10n.notImplementedYetWithType(viewModel.item.type ?? "--")) + } + } + + // MARK: scrollContainerView + + private func scrollContainerView( + viewModel: ItemViewModel, + content: @escaping () -> Content + ) -> any ScrollContainerView { + CinematicScrollView(viewModel: viewModel, content: content) + } + + @ViewBuilder + private var innerBody: some View { + scrollContainerView(viewModel: viewModel) { + scrollContentView + } + .eraseToAnyView() + } + + var body: some View { + ZStack { + switch viewModel.state { + case .content: + innerBody + case let .error(error): + ErrorView(error: error) + .onRetry { + viewModel.send(.refresh) + } + case .initial, .refreshing: + ProgressView() + } + } + .animation(.linear(duration: 0.1), value: viewModel.state) + .onFirstAppear { + viewModel.send(.refresh) + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/MovieItemContentView.swift b/Swiftfin tvOS/Views/ItemView/MovieItemContentView.swift new file mode 100644 index 00000000..4c10a7ea --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/MovieItemContentView.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct MovieItemContentView: View { + + @ObservedObject + var viewModel: MovieItemViewModel + + var body: some View { + VStack(spacing: 0) { + if let castAndCrew = viewModel.item.people, castAndCrew.isNotEmpty { + ItemView.CastAndCrewHStack(people: castAndCrew) + } + + if viewModel.specialFeatures.isNotEmpty { + ItemView.SpecialFeaturesHStack(items: viewModel.specialFeatures) + } + + if viewModel.similarItems.isNotEmpty { + ItemView.SimilarItemsHStack(items: viewModel.similarItems) + } + + ItemView.AboutView(viewModel: viewModel) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift b/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift new file mode 100644 index 00000000..cbad258e --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift @@ -0,0 +1,225 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ItemView { + + struct CinematicScrollView: ScrollContainerView { + + @ObservedObject + private var viewModel: ItemViewModel + + @StateObject + private var focusGuide = FocusGuide() + + private let content: Content + + init( + viewModel: ItemViewModel, + content: @escaping () -> Content + ) { + self.viewModel = viewModel + self.content = content() + } + + private func withBackgroundImageSource( + @ViewBuilder content: @escaping (ImageSource) -> some View + ) -> some View { + let item: BaseItemDto + + if viewModel.item.type == .person || viewModel.item.type == .musicArtist, + let typeViewModel = viewModel as? CollectionItemViewModel, + let randomItem = typeViewModel.randomItem() + { + item = randomItem + } else { + item = viewModel.item + } + + let imageType: ImageType = { + switch item.type { + case .episode, .musicVideo, .video: + .primary + default: + .backdrop + } + }() + + let imageSource = item.imageSource(imageType, maxWidth: 1920) + + return content(imageSource) + .id(imageSource.url?.hashValue) + .animation(.linear(duration: 0.1), value: imageSource.url?.hashValue) + } + + var body: some View { + GeometryReader { proxy in + ZStack { + withBackgroundImageSource { imageSource in + ImageView(imageSource) + } + + ScrollView(.vertical, showsIndicators: false) { + VStack(spacing: 0) { + CinematicHeaderView(viewModel: viewModel) + .ifLet(viewModel as? SeriesItemViewModel) { view, _ in + view + .focusGuide( + focusGuide, + tag: "header", + bottom: "belowHeader" + ) + } + .frame(height: proxy.size.height - 150) + .padding(.bottom, 50) + + content + } + .background { + BlurView(style: .dark) + .mask { + VStack(spacing: 0) { + LinearGradient(gradient: Gradient(stops: [ + .init(color: .white, location: 0), + .init(color: .white.opacity(0.7), location: 0.4), + .init(color: .white.opacity(0), location: 1), + ]), startPoint: .bottom, endPoint: .top) + .frame(height: proxy.size.height - 150) + + Color.white + } + } + } + .environmentObject(focusGuide) + } + } + } + .ignoresSafeArea() + } + } +} + +extension ItemView { + + struct CinematicHeaderView: View { + + enum CinematicHeaderFocusLayer: Hashable { + case top + case playButton + case actionButtons + } + + @StoredValue(.User.itemViewAttributes) + private var attributes + + @Router + private var router + @ObservedObject + var viewModel: ItemViewModel + @FocusState + private var focusedLayer: CinematicHeaderFocusLayer? + + var body: some View { + VStack(alignment: .leading) { + + Color.clear + .focusable() + .focused($focusedLayer, equals: .top) + + HStack(alignment: .bottom) { + + VStack(alignment: .leading, spacing: 20) { + + ImageView(viewModel.item.imageSource( + .logo, + maxHeight: 250 + )) + .placeholder { _ in + EmptyView() + } + .failure { + Marquee(viewModel.item.displayTitle) + .font(.largeTitle) + .fontWeight(.semibold) + .lineLimit(1) + .foregroundStyle(.white) + } + .aspectRatio(contentMode: .fit) + .padding(.bottom) + + OverviewView(item: viewModel.item) + .taglineLineLimit(1) + .overviewLineLimit(3) + + if viewModel.item.type != .person { + HStack { + + DotHStack { + if let firstGenre = viewModel.item.genres?.first { + Text(firstGenre) + } + + if let premiereYear = viewModel.item.premiereDateYear { + Text(premiereYear) + } + + if let playButtonitem = viewModel.playButtonItem, let runtime = playButtonitem.runTimeLabel { + Text(runtime) + } + } + .font(.caption) + .foregroundColor(Color(UIColor.lightGray)) + + ItemView.AttributesHStack( + attributes: attributes, + viewModel: viewModel + ) + } + } + } + + Spacer() + + VStack { + if viewModel.item.type == .person || viewModel.item.type == .musicArtist { + ImageView(viewModel.item.imageSource(.primary, maxWidth: 440)) + .failure { + SystemImageContentView(systemName: viewModel.item.systemImage) + } + .posterStyle(.portrait, contentMode: .fill) + .frame(width: 440) + .cornerRadius(10) + .accessibilityIgnoresInvertColors() + } else if viewModel.item.presentPlayButton { + ItemView.PlayButton(viewModel: viewModel) + .focused($focusedLayer, equals: .playButton) + } + + ItemView.ActionButtonHStack(viewModel: viewModel) + .focused($focusedLayer, equals: .actionButtons) + .frame(width: 440) + } + .frame(width: 450) + .padding(.leading, 150) + } + } + .padding(.horizontal, 50) + .onChange(of: focusedLayer) { _, layer in + if layer == .top { + if viewModel.item.presentPlayButton { + focusedLayer = .playButton + } else { + focusedLayer = .actionButtons + } + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/SeriesItemContentView.swift b/Swiftfin tvOS/Views/ItemView/SeriesItemContentView.swift new file mode 100644 index 00000000..5f69446e --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/SeriesItemContentView.swift @@ -0,0 +1,40 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct SeriesItemContentView: View { + + @ObservedObject + var viewModel: SeriesItemViewModel + + var body: some View { + VStack(spacing: 0) { + if viewModel.seasons.isNotEmpty { + SeriesEpisodeSelector(viewModel: viewModel) + } + + if let castAndCrew = viewModel.item.people, castAndCrew.isNotEmpty { + ItemView.CastAndCrewHStack(people: castAndCrew) + } + + if viewModel.specialFeatures.isNotEmpty { + ItemView.SpecialFeaturesHStack(items: viewModel.specialFeatures) + } + + if viewModel.similarItems.isNotEmpty { + ItemView.SimilarItemsHStack(items: viewModel.similarItems) + } + + ItemView.AboutView(viewModel: viewModel) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ItemView/SimpleItemContentView.swift b/Swiftfin tvOS/Views/ItemView/SimpleItemContentView.swift new file mode 100644 index 00000000..bf088283 --- /dev/null +++ b/Swiftfin tvOS/Views/ItemView/SimpleItemContentView.swift @@ -0,0 +1,28 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension ItemView { + + struct SimpleItemContentView: View { + + @ObservedObject + var viewModel: ItemViewModel + + var body: some View { + VStack(spacing: 0) { + if let castAndCrew = viewModel.item.people, castAndCrew.isNotEmpty { + ItemView.CastAndCrewHStack(people: castAndCrew) + } + + ItemView.AboutView(viewModel: viewModel) + } + } + } +} diff --git a/Swiftfin tvOS/Views/LearnMoreModal.swift b/Swiftfin tvOS/Views/LearnMoreModal.swift new file mode 100644 index 00000000..287ec47d --- /dev/null +++ b/Swiftfin tvOS/Views/LearnMoreModal.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct LearnMoreModal: View { + + private let content: AnyView + + // MARK: - Initializer + + init(@LabeledContentBuilder content: () -> AnyView) { + self.content = content() + } + + // MARK: - Body + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + content + .labeledContentStyle(LearnMoreLabeledContentStyle()) + .foregroundStyle(Color.primary, Color.secondary) + } + .padding(24) + .background { + RoundedRectangle(cornerRadius: 10) + .fill(Material.regular) + } + .padding() + } +} diff --git a/Swiftfin tvOS/Views/MediaSourceInfoView.swift b/Swiftfin tvOS/Views/MediaSourceInfoView.swift new file mode 100644 index 00000000..8be39959 --- /dev/null +++ b/Swiftfin tvOS/Views/MediaSourceInfoView.swift @@ -0,0 +1,136 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct MediaSourceInfoView: View { + + @FocusState + private var selectedMediaStream: MediaStream? + + @State + private var lastSelectedMediaStream: MediaStream? + + let source: MediaSourceInfo + + @ViewBuilder + private var content: some View { + GeometryReader { proxy in + VStack(alignment: .center) { + + Text(source.displayTitle) + .font(.title) + .frame(maxHeight: proxy.size.height * 0.33) + + HStack { + Form { + if let videoStreams = source.videoStreams, + videoStreams.isNotEmpty + { + Section(L10n.video) { + ForEach(videoStreams, id: \.self) { stream in + Button { + Text(stream.displayTitle ?? .emptyDash) + } + .focused($selectedMediaStream, equals: stream) + } + } + } + + if let audioStreams = source.audioStreams, + audioStreams.isNotEmpty + { + Section(L10n.audio) { + ForEach(audioStreams, id: \.self) { stream in + Button { + Text(stream.displayTitle ?? .emptyDash) + } + .focused($selectedMediaStream, equals: stream) + } + } + } + + if let subtitleStreams = source.subtitleStreams, + subtitleStreams.isNotEmpty + { + Section(L10n.subtitle) { + ForEach(subtitleStreams, id: \.self) { stream in + Button { + Text(stream.displayTitle ?? .emptyDash) + } + .focused($selectedMediaStream, equals: stream) + } + } + } + } + + Form { + if let lastSelectedMediaStream { + Section { + ForEach(lastSelectedMediaStream.metadataProperties, id: \.label) { property in + Button { + LabeledContent( + property.label, + value: property.value + ) + } + } + } + + if lastSelectedMediaStream.colorProperties.isNotEmpty { + Section(L10n.color) { + ForEach(lastSelectedMediaStream.colorProperties, id: \.label) { property in + Button { + LabeledContent( + property.label, + value: property.value + ) + } + } + } + } + + if lastSelectedMediaStream.deliveryProperties.isNotEmpty { + Section(L10n.delivery) { + ForEach(lastSelectedMediaStream.deliveryProperties, id: \.label) { property in + Button { + LabeledContent( + property.label, + value: property.value + ) + } + } + } + } + } else { + Button { + L10n.none.text + } + } + } + } + .padding(.horizontal) + } + .frame(maxWidth: .infinity) + } + .onChange(of: selectedMediaStream) { _, newValue in + guard let newValue else { return } + lastSelectedMediaStream = newValue + } + } + + var body: some View { + ZStack { + BlurView() + + content + } + .ignoresSafeArea() + } +} diff --git a/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift b/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift new file mode 100644 index 00000000..65455864 --- /dev/null +++ b/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift @@ -0,0 +1,130 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +private let landscapeMaxWidth: CGFloat = 110 +private let portraitMaxWidth: CGFloat = 60 + +extension PagingLibraryView { + + struct LibraryRow: View { + + private let item: Element + private var action: () -> Void + private let posterType: PosterDisplayType + + init( + item: Element, + posterType: PosterDisplayType, + action: @escaping () -> Void + ) { + self.item = item + self.action = action + self.posterType = posterType + } + + private func imageSources(from element: Element) -> [ImageSource] { + switch posterType { + case .landscape: + element.landscapeImageSources(maxWidth: landscapeMaxWidth, quality: 90) + case .portrait: + element.portraitImageSources(maxWidth: portraitMaxWidth, quality: 90) + case .square: + element.squareImageSources(maxWidth: portraitMaxWidth, quality: 90) + } + } + + @ViewBuilder + private func itemAccessoryView(item: BaseItemDto) -> some View { + DotHStack { + if item.type == .episode, let seasonEpisodeLocator = item.seasonEpisodeLabel { + Text(seasonEpisodeLocator) + } else if let premiereYear = item.premiereDateYear { + Text(premiereYear) + } + + if let runtime = item.runTimeLabel { + Text(runtime) + } + + if let officialRating = item.officialRating { + Text(officialRating) + } + } + } + + @ViewBuilder + private func personAccessoryView(person: BaseItemPerson) -> some View { + if let subtitle = person.subtitle { + Text(subtitle) + } + } + + @ViewBuilder + private var accessoryView: some View { + switch item { + case let element as BaseItemDto: + itemAccessoryView(item: element) + case let element as BaseItemPerson: + personAccessoryView(person: element) + default: + AssertionFailureView("Used an unexpected type within a `PagingLibaryView`?") + } + } + + @ViewBuilder + private var rowContent: some View { + HStack { + VStack(alignment: .leading, spacing: 5) { + Text(item.displayTitle) + .font(posterType == .landscape ? .subheadline : .callout) + .fontWeight(.semibold) + .foregroundColor(.primary) + .lineLimit(2) + .multilineTextAlignment(.leading) + + accessoryView + .font(.caption) + .foregroundColor(Color(UIColor.lightGray)) + } + Spacer() + } + } + + @ViewBuilder + private var rowLeading: some View { + ZStack { + Color.clear + + ImageView(imageSources(from: item)) + .failure { + SystemImageContentView(systemName: item.systemImage) + } + } + .posterStyle(posterType) + .frame(width: posterType == .landscape ? 110 : 60) + .posterShadow() + .padding(.vertical, 8) + } + + // MARK: body + + var body: some View { + ListRow(insets: .init(horizontal: EdgeInsets.edgePadding)) { + rowLeading + } content: { + rowContent + } + .onSelect(perform: action) + .focusedValue(\.focusedPoster, AnyPoster(item)) + } + } +} diff --git a/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift b/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift new file mode 100644 index 00000000..879c7e22 --- /dev/null +++ b/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift @@ -0,0 +1,78 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: come up with better name along with `ListRowButton` + +// Meant to be used when making a custom list without `List` or `Form` +struct ListRow: View { + + @State + private var contentSize: CGSize = .zero + + private let leading: Leading + private let content: Content + private var action: () -> Void + private var insets: EdgeInsets + private var isSeparatorVisible: Bool + + var body: some View { + ZStack(alignment: .bottomTrailing) { + + Button { + action() + } label: { + HStack(alignment: .center, spacing: EdgeInsets.edgePadding) { + + leading + + content + .frame(maxHeight: .infinity) + .trackingSize($contentSize) + } + .padding(.top, insets.top) + .padding(.bottom, insets.bottom) + .padding(.leading, insets.leading) + .padding(.trailing, insets.trailing) + } + .foregroundStyle(.primary, .secondary) + .buttonStyle(.plain) + + Color.secondarySystemFill + .frame(width: contentSize.width, height: 1) + .padding(.trailing, insets.trailing) + .isVisible(isSeparatorVisible) + } + } +} + +extension ListRow { + + init( + insets: EdgeInsets = .zero, + @ViewBuilder leading: @escaping () -> Leading, + @ViewBuilder content: @escaping () -> Content + ) { + self.init( + leading: leading(), + content: content(), + action: {}, + insets: insets, + isSeparatorVisible: true + ) + } + + func isSeparatorVisible(_ isVisible: Bool) -> Self { + copy(modifying: \.isSeparatorVisible, with: isVisible) + } + + func onSelect(perform action: @escaping () -> Void) -> Self { + copy(modifying: \.action, with: action) + } +} diff --git a/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift b/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift new file mode 100644 index 00000000..fb7f55eb --- /dev/null +++ b/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift @@ -0,0 +1,405 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionVGrid +import Defaults +import JellyfinAPI +import SwiftUI + +// TODO: Figure out proper tab bar handling with the collection offset +// TODO: fix paging for next item focusing the tab + +struct PagingLibraryView: View { + + @Default(.Customization.Library.cinematicBackground) + private var cinematicBackground + @Default(.Customization.Library.enabledDrawerFilters) + private var enabledDrawerFilters + @Default(.Customization.Library.rememberLayout) + private var rememberLayout + + @Default(.Customization.Library.displayType) + private var defaultDisplayType: LibraryDisplayType + @Default(.Customization.Library.listColumnCount) + private var defaultListColumnCount: Int + @Default(.Customization.Library.posterType) + private var defaultPosterType: PosterDisplayType + + @FocusedValue(\.focusedPoster) + private var focusedPoster + + @Router + private var router + + @State + private var presentBackground = false + @State + private var layout: CollectionVGridLayout + @State + private var safeArea: EdgeInsets = .zero + + @StoredValue + private var displayType: LibraryDisplayType + @StoredValue + private var listColumnCount: Int + @StoredValue + private var posterType: PosterDisplayType + + @StateObject + private var collectionVGridProxy: CollectionVGridProxy = .init() + @StateObject + private var viewModel: PagingLibraryViewModel + + @StateObject + private var cinematicBackgroundProxy: CinematicBackgroundView.Proxy = .init() + + init(viewModel: PagingLibraryViewModel) { + + self._displayType = StoredValue(.User.libraryDisplayType(parentID: viewModel.parent?.id)) + self._listColumnCount = StoredValue(.User.libraryListColumnCount(parentID: viewModel.parent?.id)) + self._posterType = StoredValue(.User.libraryPosterType(parentID: viewModel.parent?.id)) + + self._viewModel = StateObject(wrappedValue: viewModel) + + let defaultDisplayType = Defaults[.Customization.Library.displayType] + let defaultListColumnCount = Defaults[.Customization.Library.listColumnCount] + let defaultPosterType = Defaults[.Customization.Library.posterType] + + let displayType = StoredValues[.User.libraryDisplayType(parentID: viewModel.parent?.id)] + let listColumnCount = StoredValues[.User.libraryListColumnCount(parentID: viewModel.parent?.id)] + let posterType = StoredValues[.User.libraryPosterType(parentID: viewModel.parent?.id)] + + let initialDisplayType = Defaults[.Customization.Library.rememberLayout] ? displayType : defaultDisplayType + let initialListColumnCount = Defaults[.Customization.Library.rememberLayout] ? listColumnCount : defaultListColumnCount + let initialPosterType = Defaults[.Customization.Library.rememberLayout] ? posterType : defaultPosterType + + self._layout = State( + initialValue: Self.makeLayout( + posterType: initialPosterType, + viewType: initialDisplayType, + listColumnCount: initialListColumnCount + ) + ) + } + + // MARK: On Select + + private func onSelect(_ element: Element) { + switch element { + case let element as BaseItemDto: + select(item: element) + case let element as BaseItemPerson: + select(item: BaseItemDto(person: element)) + default: + assertionFailure("Used an unexpected type within a `PagingLibaryView`?") + } + } + + private func select(item: BaseItemDto) { + switch item.type { + case .collectionFolder, .folder: + let viewModel = ItemLibraryViewModel(parent: item, filters: .default) + router.route(to: .library(viewModel: viewModel)) + default: + router.route(to: .item(item: item)) + } + } + + // MARK: Select Person + + private func select(person: BaseItemPerson) { + let viewModel = ItemLibraryViewModel(parent: person) + router.route(to: .library(viewModel: viewModel)) + } + + // MARK: Make Layout + + private static func makeLayout( + posterType: PosterDisplayType, + viewType: LibraryDisplayType, + listColumnCount: Int + ) -> CollectionVGridLayout { + switch (posterType, viewType) { + case (.landscape, .grid): + return .columns(5, insets: .init(50), itemSpacing: 50, lineSpacing: 50) + case (.portrait, .grid), (.square, .grid): + return .columns(7, insets: .init(50), itemSpacing: 50, lineSpacing: 50) + case (_, .list): + return .columns(listColumnCount, insets: .init(50), itemSpacing: 50, lineSpacing: 50) + } + } + + // MARK: Set Default Layout + + private func setDefaultLayout() { + layout = Self.makeLayout( + posterType: defaultPosterType, + viewType: defaultDisplayType, + listColumnCount: defaultListColumnCount + ) + } + + // MARK: Set Custom Layout + + private func setCustomLayout() { + layout = Self.makeLayout( + posterType: posterType, + viewType: displayType, + listColumnCount: listColumnCount + ) + } + + // MARK: Set Cinematic Background + + private func setCinematicBackground() { + guard let focusedPoster else { + withAnimation { + presentBackground = false + } + return + } + + cinematicBackgroundProxy.select(item: focusedPoster) + + if !presentBackground { + withAnimation { + presentBackground = true + } + } + } + + // MARK: Landscape Grid Item View + + private func landscapeGridItemView(item: Element) -> some View { + PosterButton( + item: item, + type: .landscape + ) { + onSelect(item) + } label: { + if item.showTitle { + PosterButton.TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } else if viewModel.parent?.libraryType == .folder { + PosterButton.TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + .hidden() + } + } + } + + // MARK: Portrait Grid Item View + + @ViewBuilder + private func portraitGridItemView(item: Element) -> some View { + PosterButton( + item: item, + type: .portrait + ) { + onSelect(item) + } label: { + if item.showTitle { + PosterButton.TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + } else if viewModel.parent?.libraryType == .folder { + PosterButton.TitleContentView(item: item) + .lineLimit(1, reservesSpace: true) + .hidden() + } + } + } + + // MARK: List Item View + + @ViewBuilder + private func listItemView(item: Element, posterType: PosterDisplayType) -> some View { + LibraryRow( + item: item, + posterType: posterType + ) { + onSelect(item) + } + } + + // MARK: Error View + + @ViewBuilder + private func errorView(with error: some Error) -> some View { + ErrorView(error: error) + .onRetry { + viewModel.send(.refresh) + } + } + + // MARK: Grid View + + @ViewBuilder + private var gridView: some View { + CollectionVGrid( + uniqueElements: viewModel.elements, + layout: layout + ) { item in + + let displayType = Defaults[.Customization.Library.rememberLayout] ? _displayType.wrappedValue : _defaultDisplayType + .wrappedValue + let posterType = Defaults[.Customization.Library.rememberLayout] ? _posterType.wrappedValue : _defaultPosterType.wrappedValue + + switch (posterType, displayType) { + case (.landscape, .grid): + landscapeGridItemView(item: item) + case (.portrait, .grid), (.square, .grid): + portraitGridItemView(item: item) + case (_, .list): + listItemView(item: item, posterType: posterType) + } + } + .onReachedBottomEdge(offset: .rows(3)) { + viewModel.send(.getNextPage) + } + .proxy(collectionVGridProxy) + .scrollIndicators(.hidden) + } + + // MARK: Inner Content View + + @ViewBuilder + private var innerContent: some View { + switch viewModel.state { + case .content: + if viewModel.elements.isEmpty { + L10n.noResults.text + } else { + gridView + } + case .initial, .refreshing: + ProgressView() + default: + AssertionFailureView("Expected view for unexpected state") + } + } + + // MARK: Content View + + @ViewBuilder + private var contentView: some View { + + innerContent + // These exist here to alleviate type-checker issues + .onChange(of: posterType) { + setCustomLayout() + } + .onChange(of: displayType) { + setCustomLayout() + } + .onChange(of: listColumnCount) { + setCustomLayout() + } + + // Logic for LetterPicker. Enable when ready + + /* if letterPickerEnabled, let filterViewModel = viewModel.filterViewModel { + ZStack(alignment: letterPickerOrientation.alignment) { + innerContent + .padding(letterPickerOrientation.edge, LetterPickerBar.size + 10) + .frame(maxWidth: .infinity) + + LetterPickerBar(viewModel: filterViewModel) + .padding(.top, safeArea.top) + .padding(.bottom, safeArea.bottom) + .padding(letterPickerOrientation.edge, 10) + } + } else { + innerContent + } + // These exist here to alleviate type-checker issues + .onChange(of: posterType) { + setCustomLayout() + } + .onChange(of: displayType) { + setCustomLayout() + } + .onChange(of: listColumnCount) { + setCustomLayout() + }*/ + } + + // MARK: Body + + var body: some View { + ZStack { + Color.clear + + if cinematicBackground { + CinematicBackgroundView(viewModel: cinematicBackgroundProxy) + .isVisible(presentBackground) + .blurred() + } + + switch viewModel.state { + case .content, .initial, .refreshing: + contentView + case let .error(error): + errorView(with: error) + } + } + .animation(.linear(duration: 0.1), value: viewModel.state) + .ignoresSafeArea() + .navigationTitle(viewModel.parent?.displayTitle ?? "") + .onChange(of: focusedPoster) { + setCinematicBackground() + } + .onChange(of: rememberLayout) { + if rememberLayout { + setCustomLayout() + } else { + setDefaultLayout() + } + } + .onChange(of: defaultPosterType) { + guard !Defaults[.Customization.Library.rememberLayout] else { return } + setDefaultLayout() + } + .onChange(of: defaultDisplayType) { + guard !Defaults[.Customization.Library.rememberLayout] else { return } + setDefaultLayout() + } + .onChange(of: defaultListColumnCount) { + guard !Defaults[.Customization.Library.rememberLayout] else { return } + setDefaultLayout() + } + .onChange(of: viewModel.filterViewModel?.currentFilters) { _, newValue in + guard let newValue, let id = viewModel.parent?.id else { return } + + if Defaults[.Customization.Library.rememberSort] { + let newStoredFilters = StoredValues[.User.libraryFilters(parentID: id)] + .mutating(\.sortBy, with: newValue.sortBy) + .mutating(\.sortOrder, with: newValue.sortOrder) + + StoredValues[.User.libraryFilters(parentID: id)] = newStoredFilters + } + } + .onReceive(viewModel.events) { event in + switch event { + case let .gotRandomItem(item): + switch item { + case let item as BaseItemDto: + select(item: item) + case let item as BaseItemPerson: + select(item: BaseItemDto(person: item)) + default: + assertionFailure("Used an unexpected type within a `PagingLibaryView`?") + } + } + } + .onFirstAppear { + if viewModel.state == .initial { + viewModel.send(.refresh) + } + } + } +} diff --git a/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift new file mode 100644 index 00000000..d6e325d5 --- /dev/null +++ b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift @@ -0,0 +1,51 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension ProgramsView { + + struct ProgramButtonContent: View { + + let program: BaseItemDto + + var body: some View { + VStack(alignment: .leading) { + + Text(program.channelName ?? .emptyDash) + .font(.footnote.weight(.semibold)) + .foregroundColor(.primary) + .lineLimit(1, reservesSpace: true) + + Text(program.displayTitle) + .font(.footnote.weight(.regular)) + .foregroundColor(.primary) + .lineLimit(1, reservesSpace: true) + + HStack(spacing: 2) { + if let startDate = program.startDate { + Text(startDate, style: .time) + } else { + Text(String.emptyDash) + } + + Text("-") + + if let endDate = program.endDate { + Text(endDate, style: .time) + } else { + Text(String.emptyDash) + } + } + .font(.footnote) + .foregroundStyle(.secondary) + } + } + } +} diff --git a/jellypig tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift similarity index 100% rename from jellypig tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift rename to Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift diff --git a/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift b/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift new file mode 100644 index 00000000..b7d8c506 --- /dev/null +++ b/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift @@ -0,0 +1,104 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +// TODO: background refresh for programs with timer? + +// Note: there are some unsafe first element accesses, but `ChannelProgram` data should always have a single program + +struct ProgramsView: View { + + @Router + private var router + + @StateObject + private var programsViewModel = ProgramsViewModel() + + @ViewBuilder + private var contentView: some View { + ScrollView(showsIndicators: false) { + VStack(spacing: 20) { + if programsViewModel.recommended.isNotEmpty { + programsSection(title: L10n.onNow, keyPath: \.recommended) + } + + if programsViewModel.series.isNotEmpty { + programsSection(title: L10n.series, keyPath: \.series) + } + + if programsViewModel.movies.isNotEmpty { + programsSection(title: L10n.movies, keyPath: \.movies) + } + + if programsViewModel.kids.isNotEmpty { + programsSection(title: L10n.kids, keyPath: \.kids) + } + + if programsViewModel.sports.isNotEmpty { + programsSection(title: L10n.sports, keyPath: \.sports) + } + + if programsViewModel.news.isNotEmpty { + programsSection(title: L10n.news, keyPath: \.news) + } + } + } + } + + @ViewBuilder + private func programsSection( + title: String, + keyPath: KeyPath + ) -> some View { + PosterHStack( + title: title, + type: .landscape, + items: programsViewModel[keyPath: keyPath] + ) { _ in +// guard let mediaSource = channelProgram.channel.mediaSources?.first else { return } +// router.route( +// to: \.liveVideoPlayer, +// LiveVideoPlayerManager(item: channelProgram.channel, mediaSource: mediaSource) +// ) + } label: { + ProgramButtonContent(program: $0) + } + .posterOverlay(for: BaseItemDto.self) { + ProgramProgressOverlay(program: $0) + } + } + + var body: some View { + ZStack { + switch programsViewModel.state { + case .content: + if programsViewModel.hasNoResults { + L10n.noResults.text + } else { + contentView + } + case let .error(error): + ErrorView(error: error) + .onRetry { + programsViewModel.send(.refresh) + } + case .initial, .refreshing: + ProgressView() + } + } + .animation(.linear(duration: 0.1), value: programsViewModel.state) + .ignoresSafeArea(edges: [.bottom, .horizontal]) + .onFirstAppear { + if programsViewModel.state == .initial { + programsViewModel.send(.refresh) + } + } + } +} diff --git a/Swiftfin tvOS/Views/SearchView.swift b/Swiftfin tvOS/Views/SearchView.swift new file mode 100644 index 00000000..81a6751c --- /dev/null +++ b/Swiftfin tvOS/Views/SearchView.swift @@ -0,0 +1,199 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +struct SearchView: View { + + @Default(.Customization.searchPosterType) + private var searchPosterType + + @Router + private var router + + @State + private var searchQuery = "" + + @StateObject + private var viewModel = SearchViewModel() + + private func errorView(with error: some Error) -> some View { + ErrorView(error: error) + .onRetry { + viewModel.search(query: searchQuery) + } + } + + @ViewBuilder + private var suggestionsView: some View { + VStack(spacing: 20) { + ForEach(viewModel.suggestions) { item in + Button(item.displayTitle) { + searchQuery = item.displayTitle + } + .buttonStyle(.plain) + .foregroundStyle(.secondary) + } + } + } + + @ViewBuilder + private var resultsView: some View { + ScrollView(showsIndicators: false) { + VStack(spacing: 20) { + if let movies = viewModel.items[.movie], movies.isNotEmpty { + itemsSection( + title: L10n.movies, + type: .movie, + items: movies, + posterType: searchPosterType + ) + } + + if let series = viewModel.items[.series], series.isNotEmpty { + itemsSection( + title: L10n.tvShows, + type: .series, + items: series, + posterType: searchPosterType + ) + } + + if let collections = viewModel.items[.boxSet], collections.isNotEmpty { + itemsSection( + title: L10n.collections, + type: .boxSet, + items: collections, + posterType: searchPosterType + ) + } + + if let episodes = viewModel.items[.episode], episodes.isNotEmpty { + itemsSection( + title: L10n.episodes, + type: .episode, + items: episodes, + posterType: searchPosterType + ) + } + + if let musicVideos = viewModel.items[.musicVideo], musicVideos.isNotEmpty { + itemsSection( + title: L10n.musicVideos, + type: .musicVideo, + items: musicVideos, + posterType: .landscape + ) + } + + if let videos = viewModel.items[.video], videos.isNotEmpty { + itemsSection( + title: L10n.videos, + type: .video, + items: videos, + posterType: .landscape + ) + } + + if let programs = viewModel.items[.program], programs.isNotEmpty { + itemsSection( + title: L10n.programs, + type: .program, + items: programs, + posterType: .landscape + ) + } + + if let channels = viewModel.items[.tvChannel], channels.isNotEmpty { + itemsSection( + title: L10n.channels, + type: .tvChannel, + items: channels, + posterType: .square + ) + } + + if let musicArtists = viewModel.items[.musicArtist], musicArtists.isNotEmpty { + itemsSection( + title: L10n.artists, + type: .musicArtist, + items: musicArtists, + posterType: .portrait + ) + } + + if let people = viewModel.items[.person], people.isNotEmpty { + itemsSection( + title: L10n.people, + type: .person, + items: people, + posterType: .portrait + ) + } + } + .edgePadding(.vertical) + } + } + + private func select(_ item: BaseItemDto) { + switch item.type { + case .program, .tvChannel: + let provider = item.getPlaybackItemProvider(userSession: viewModel.userSession) + router.route(to: .videoPlayer(provider: provider)) + default: + router.route(to: .item(item: item)) + } + } + + @ViewBuilder + private func itemsSection( + title: String, + type: BaseItemKind, + items: [BaseItemDto], + posterType: PosterDisplayType + ) -> some View { + PosterHStack( + title: title, + type: posterType, + items: items, + action: select + ) + } + + var body: some View { + ZStack { + switch viewModel.state { + case .error: + viewModel.error.map { errorView(with: $0) } + case .initial: + if viewModel.hasNoResults { + if searchQuery.isEmpty { + suggestionsView + } else { + Text(L10n.noResults) + } + } else { + resultsView + } + case .searching: + ProgressView() + } + } + .animation(.linear(duration: 0.1), value: viewModel.state) + .ignoresSafeArea(edges: [.bottom, .horizontal]) + .onFirstAppear { + viewModel.getSuggestions() + } + .onChange(of: searchQuery) { _, newValue in + viewModel.search(query: newValue) + } + .searchable(text: $searchQuery, prompt: L10n.search) + } +} diff --git a/jellypig tvOS/Views/SelectUserView/Components/AddUserBottomButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserBottomButton.swift similarity index 100% rename from jellypig tvOS/Views/SelectUserView/Components/AddUserBottomButton.swift rename to Swiftfin tvOS/Views/SelectUserView/Components/AddUserBottomButton.swift diff --git a/jellypig tvOS/Views/SelectUserView/Components/AddUserGridButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserGridButton.swift similarity index 100% rename from jellypig tvOS/Views/SelectUserView/Components/AddUserGridButton.swift rename to Swiftfin tvOS/Views/SelectUserView/Components/AddUserGridButton.swift diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift new file mode 100644 index 00000000..03d21351 --- /dev/null +++ b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift @@ -0,0 +1,170 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import OrderedCollections +import SwiftUI + +extension SelectUserView { + + struct SelectUserBottomBar: View { + + // MARK: - State & Environment Objects + + @Router + private var router + + @Binding + private var isEditing: Bool + + @Binding + private var serverSelection: SelectUserServerSelection + + // MARK: - Variables + + private let areUsersSelected: Bool + private let hasUsers: Bool + private let selectedServer: ServerState? + private let servers: OrderedSet + + private let onDelete: () -> Void + private let toggleAllUsersSelected: () -> Void + + // MARK: - Initializer + + init( + isEditing: Binding, + serverSelection: Binding, + selectedServer: ServerState?, + servers: OrderedSet, + areUsersSelected: Bool, + hasUsers: Bool, + onDelete: @escaping () -> Void, + toggleAllUsersSelected: @escaping () -> Void + ) { + self._isEditing = isEditing + self._serverSelection = serverSelection + self.areUsersSelected = areUsersSelected + self.hasUsers = hasUsers + self.selectedServer = selectedServer + self.servers = servers + self.onDelete = onDelete + self.toggleAllUsersSelected = toggleAllUsersSelected + } + + // MARK: - Advanced Menu + + @ViewBuilder + private var advancedMenu: some View { + Menu { + Button(L10n.editUsers, systemImage: "person.crop.circle") { + isEditing.toggle() + } + + Divider() + + Button(L10n.advanced, systemImage: "gearshape.fill") { + router.route(to: .appSettings) + } + } label: { + Label(L10n.advanced, systemImage: "gearshape.fill") + .font(.body.weight(.semibold)) + .foregroundStyle(Color.primary) + .labelStyle(.iconOnly) + .frame(width: 50, height: 50) + } + + // TODO: Do we want to support a grid view and list view like iOS? +// if !viewModel.servers.isEmpty { +// Picker(selection: $userListDisplayType) { +// ForEach(LibraryDisplayType.allCases, id: \.hashValue) { +// Label($0.displayTitle, systemImage: $0.systemImage) +// .tag($0) +// } +// } label: { +// Text(L10n.layout) +// Text(userListDisplayType.displayTitle) +// Image(systemName: userListDisplayType.systemImage) +// } +// .pickerStyle(.menu) +// } + } + + // MARK: - Delete User Button + + @ViewBuilder + private var deleteUsersButton: some View { + ListRowButton( + L10n.delete, + role: .destructive, + action: onDelete + ) + .frame(width: 400, height: 75) + .disabled(!areUsersSelected) + } + + // MARK: - Content View + + @ViewBuilder + private var contentView: some View { + HStack(alignment: .top, spacing: 20) { + if isEditing { + deleteUsersButton + + Button { + toggleAllUsersSelected() + } label: { + Text(areUsersSelected ? L10n.removeAll : L10n.selectAll) + .foregroundStyle(Color.primary) + .font(.body.weight(.semibold)) + .frame(width: 200, height: 50) + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + + Button { + isEditing = false + } label: { + Text(L10n.cancel) + .foregroundStyle(Color.primary) + .font(.body.weight(.semibold)) + .frame(width: 200, height: 50) + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + } else { + AddUserBottomButton( + selectedServer: selectedServer, + servers: servers + ) { server in + router.route(to: .userSignIn(server: server)) + } + .hidden(!hasUsers) + + ServerSelectionMenu( + selection: $serverSelection, + selectedServer: selectedServer, + servers: servers + ) + + advancedMenu + } + } + } + + // MARK: - Body + + var body: some View { + // `Menu` with custom label has some weird additional + // frame/padding that differs from default label style + AlternateLayoutView(alignment: .top) { + Color.clear + .frame(height: 100) + } content: { + contentView + } + } + } +} diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift new file mode 100644 index 00000000..ca00a838 --- /dev/null +++ b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift @@ -0,0 +1,101 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import OrderedCollections +import SwiftUI + +extension SelectUserView { + + struct ServerSelectionMenu: View { + + // MARK: - Observed & Environment Objects + + @Router + private var router + + // MARK: - Server Selection + + @Binding + private var serverSelection: SelectUserServerSelection + + private let selectedServer: ServerState? + private let servers: OrderedSet + + // MARK: - Initializer + + init( + selection: Binding, + selectedServer: ServerState?, + servers: OrderedSet + ) { + self._serverSelection = selection + self.selectedServer = selectedServer + self.servers = servers + } + + @ViewBuilder + private var label: some View { + HStack(spacing: 16) { + if let selectedServer { + Image(systemName: "server.rack") + + Text(selectedServer.name) + } else { + Image(systemName: "person.2.fill") + + Text(L10n.allServers) + } + + Image(systemName: "chevron.up.chevron.down") + .foregroundStyle(.secondary) + .font(.subheadline.weight(.semibold)) + } + .font(.body.weight(.semibold)) + .foregroundStyle(Color.primary) + .frame(width: 400, height: 50) + } + + // MARK: - Body + + var body: some View { + Menu { + Picker(L10n.servers, selection: _serverSelection) { + ForEach(servers) { server in + Button { + Text(server.name) + Text(server.currentURL.absoluteString) + } + .tag(SelectUserServerSelection.server(id: server.id)) + } + + if servers.count > 1 { + Label(L10n.allServers, systemImage: "person.2.fill") + .tag(SelectUserServerSelection.all) + } + } + Section { + if let selectedServer { + Button(L10n.editServer, systemImage: "server.rack") { + router.route( + to: .editServer(server: selectedServer, isEditing: true), + style: .sheet + ) + } + } + + Button(L10n.addServer, systemImage: "plus") { + router.route(to: .connectToServer) + } + } + } label: { + label + } + .menuOrder(.fixed) + } + } +} diff --git a/jellypig tvOS/Views/SelectUserView/Components/UserGridButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift similarity index 100% rename from jellypig tvOS/Views/SelectUserView/Components/UserGridButton.swift rename to Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift diff --git a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift new file mode 100644 index 00000000..319555d5 --- /dev/null +++ b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift @@ -0,0 +1,380 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import JellyfinAPI +import OrderedCollections +import SwiftUI + +struct SelectUserView: View { + + typealias UserItem = (user: UserState, server: ServerState) + + // MARK: - Defaults + + @Default(.selectUserUseSplashscreen) + private var selectUserUseSplashscreen + @Default(.selectUserAllServersSplashscreen) + private var selectUserAllServersSplashscreen + @Default(.selectUserServerSelection) + private var serverSelection + + // MARK: - State & Environment Objects + + @Router + private var router + + // MARK: - Select User Variables + + @State + private var isEditingUsers: Bool = false + @State + private var pin: String = "" + @State + private var scrollViewOffset: CGFloat = 0 + @State + private var selectedUsers: Set = [] + + // MARK: - Dialog States + + @State + private var isPresentingConfirmDeleteUsers = false + @State + private var isPresentingLocalPin: Bool = false + + @StateObject + private var viewModel = SelectUserViewModel() + + private var selectedServer: ServerState? { + serverSelection.server(from: viewModel.servers.keys) + } + + private var splashScreenImageSources: [ImageSource] { + switch (serverSelection, selectUserAllServersSplashscreen) { + case (.all, .all): + return viewModel + .servers + .keys + .shuffled() + .map(\.splashScreenImageSource) + + // need to evaluate server with id selection first + case let (.server(id), _), let (.all, .server(id)): + guard let server = viewModel + .servers + .keys + .first(where: { $0.id == id }) else { return [] } + + return [server.splashScreenImageSource] + } + } + + private var userItems: [UserItem] { + switch serverSelection { + case .all: + return viewModel.servers + .map { server, users in + users.map { (server: server, user: $0) } + } + .flatMap { $0 } + .sorted(using: \.user.username) + .reversed() + .map { UserItem(user: $0.user, server: $0.server) } + case let .server(id: id): + guard let server = viewModel.servers.keys.first(where: { server in server.id == id }) else { + return [] + } + + return viewModel.servers[server]! + .sorted(using: \.username) + .map { UserItem(user: $0, server: server) } + } + } + + private func addUserSelected(server: ServerState) { + router.route(to: .userSignIn(server: server)) + } + + private func delete(user: UserState) { + selectedUsers.insert(user) + isPresentingConfirmDeleteUsers = true + } + + // MARK: - Select User(s) + + private func select(user: UserState, needsPin: Bool = true) { + selectedUsers.insert(user) + + switch user.accessPolicy { + case .requireDeviceAuthentication: + // Do nothing, no device authentication on tvOS + break + case .requirePin: + if needsPin { + isPresentingLocalPin = true + return + } + case .none: () + } + + viewModel.signIn(user, pin: pin) + } + + // MARK: - Grid Content View + + @ViewBuilder + private var userGrid: some View { + CenteredLazyVGrid( + data: userItems, + id: \.user.id, + columns: 5, + spacing: EdgeInsets.edgePadding + ) { gridItem in + let user = gridItem.user + let server = gridItem.server + + UserGridButton( + user: user, + server: server, + showServer: serverSelection == .all + ) { + if isEditingUsers { + selectedUsers.toggle(value: user) + } else { + select(user: user) + } + } onDelete: { + selectedUsers.insert(user) + isPresentingConfirmDeleteUsers = true + } + .isSelected(selectedUsers.contains(user)) + } + } + + @ViewBuilder + private var addUserButtonGrid: some View { + CenteredLazyVGrid( + data: [0], + id: \.self, + columns: 5 + ) { _ in + AddUserGridButton( + selectedServer: selectedServer, + servers: viewModel.servers.keys + ) { server in + router.route(to: .userSignIn(server: server)) + } + } + } + + // MARK: - User View + + @ViewBuilder + private var contentView: some View { + VStack { + ZStack { + Color.clear + + VStack(spacing: 0) { + + Color.clear + .frame(height: 100) + + Group { + if userItems.isEmpty { + addUserButtonGrid + } else { + userGrid + } + } + .focusSection() + } + .scrollIfLargerThanContainer(padding: 100) + .scrollViewOffset($scrollViewOffset) + } + .isEditing(isEditingUsers) + + SelectUserBottomBar( + isEditing: $isEditingUsers, + serverSelection: $serverSelection, + selectedServer: selectedServer, + servers: viewModel.servers.keys, + areUsersSelected: selectedUsers.isNotEmpty, + hasUsers: userItems.isNotEmpty + ) { + isPresentingConfirmDeleteUsers = true + } toggleAllUsersSelected: { + if selectedUsers.isNotEmpty { + selectedUsers.removeAll() + } else { + selectedUsers.insert(contentsOf: userItems.map(\.user)) + } + } + .focusSection() + } + .animation(.linear(duration: 0.1), value: scrollViewOffset) + .environment(\.isOverComplexContent, true) + .background { + if selectUserUseSplashscreen, splashScreenImageSources.isNotEmpty { + ZStack { + ImageView(splashScreenImageSources) + .pipeline(.Swiftfin.local) + .aspectRatio(contentMode: .fill) + .id(splashScreenImageSources) + .transition(.opacity) + .animation(.linear, value: splashScreenImageSources) + + Color.black + .opacity(0.9) + } + .ignoresSafeArea() + } + } + } + + // MARK: - Connect to Server View + + @ViewBuilder + private var connectToServerView: some View { + VStack(spacing: 50) { + L10n.connectToJellyfinServerStart.text + .font(.body) + .frame(minWidth: 50, maxWidth: 500) + .multilineTextAlignment(.center) + + Button { + router.route(to: .connectToServer) + } label: { + L10n.connect.text + .font(.callout) + .fontWeight(.bold) + .frame(width: 400, height: 75) + .background(Color.jellyfinPurple) + } + .buttonStyle(.card) + } + } + + // MARK: - Functions + + private func didDelete(_ server: ServerState) { + viewModel.getServers() + + if case let SelectUserServerSelection.server(id: id) = serverSelection, server.id == id { + if viewModel.servers.keys.count == 1, let first = viewModel.servers.keys.first { + serverSelection = .server(id: first.id) + } else { + serverSelection = .all + } + } + } + + // MARK: - Body + + var body: some View { + ZStack { + if viewModel.servers.isEmpty { + connectToServerView + } else { + contentView + } + } + .ignoresSafeArea() + .navigationBarBranding() + .onAppear { + viewModel.getServers() + } + .onChange(of: isEditingUsers) { + guard !isEditingUsers else { return } + selectedUsers.removeAll() + } + .onChange(of: isPresentingLocalPin) { + if isPresentingLocalPin { + pin = "" + } else { + selectedUsers.removeAll() + } + } + .onChange(of: viewModel.servers.keys) { + let newValue = viewModel.servers.keys + + if case let SelectUserServerSelection.server(id: id) = serverSelection, + !newValue.contains(where: { $0.id == id }) + { + if newValue.count == 1, let firstServer = newValue.first { + let newSelection = SelectUserServerSelection.server(id: firstServer.id) + serverSelection = newSelection + selectUserAllServersSplashscreen = newSelection + } else { + serverSelection = .all + selectUserAllServersSplashscreen = .all + } + } + } + .onReceive(viewModel.events) { event in + switch event { + case let .signedIn(user): + Defaults[.lastSignedInUserID] = .signedIn(userID: user.id) + Container.shared.currentUserSession.reset() + Notifications[.didSignIn].post() + } + } + .onNotification(.didConnectToServer) { server in + viewModel.getServers() + serverSelection = .server(id: server.id) + } + .onNotification(.didChangeCurrentServerURL) { _ in + viewModel.getServers() + } + .onNotification(.didDeleteServer) { _ in + viewModel.getServers() + } + .confirmationDialog( + Text(L10n.deleteUser), + isPresented: $isPresentingConfirmDeleteUsers + ) { + Button(L10n.delete, role: .destructive) { + viewModel.deleteUsers(selectedUsers) + } + } message: { + if selectedUsers.count == 1, let first = selectedUsers.first { + Text(L10n.deleteUserSingleConfirmation(first.username)) + } else { + Text(L10n.deleteUserMultipleConfirmation(selectedUsers.count)) + } + } + .alert(L10n.signIn, isPresented: $isPresentingLocalPin) { + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // TextField(L10n.pin, text: $pin) + TextField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.signIn) { + guard let user = selectedUsers.first else { + assertionFailure("User not selected") + return + } + select(user: user, needsPin: false) + } + + Button(L10n.cancel, role: .cancel) {} + } message: { + if let user = selectedUsers.first, user.pinHint.isNotEmpty { + Text(user.pinHint) + } else { + let username = selectedUsers.first?.username ?? .emptyDash + + Text(L10n.enterPinForUser(username)) + } + } + .errorMessage($viewModel.error) + } +} diff --git a/Swiftfin tvOS/Views/ServerDetailView.swift b/Swiftfin tvOS/Views/ServerDetailView.swift new file mode 100644 index 00000000..0c487a92 --- /dev/null +++ b/Swiftfin tvOS/Views/ServerDetailView.swift @@ -0,0 +1,109 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct EditServerView: View { + + @Router + private var router + + @Environment(\.isEditing) + private var isEditing + + @State + private var isPresentingConfirmDeletion: Bool = false + + @StateObject + private var viewModel: ServerConnectionViewModel + + init(server: ServerState) { + self._viewModel = StateObject(wrappedValue: ServerConnectionViewModel(server: server)) + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "server.rack") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + Section(L10n.server) { + LabeledContent( + L10n.name, + value: viewModel.server.name + ) + .focusable(false) + + if let serverVerion = StoredValues[.Server.publicInfo(id: viewModel.server.id)].version { + LabeledContent( + L10n.version, + value: serverVerion + ) + .focusable(false) + } + } + + Section { + ListRowMenu(L10n.serverURL, subtitle: viewModel.server.currentURL.absoluteString) { + ForEach(viewModel.server.urls.sorted(using: \.absoluteString), id: \.self) { url in + Button { + guard viewModel.server.currentURL != url else { return } + viewModel.setCurrentURL(to: url) + } label: { + HStack { + Text(url.absoluteString) + .foregroundColor(.primary) + + Spacer() + + if viewModel.server.currentURL == url { + Image(systemName: "checkmark") + .font(.body.weight(.regular)) + .foregroundColor(.secondary) + } + } + } + } + } + } header: { + L10n.url.text + } footer: { + if !viewModel.server.isVersionCompatible { + Label( + L10n.serverVersionWarning(JellyfinClient.sdkVersion.majorMinor.description), + systemImage: "exclamationmark.circle.fill" + ) + } + } + + if isEditing { + Section { + ListRowButton(L10n.delete, role: .destructive) { + isPresentingConfirmDeletion = true + } + .listRowBackground(Color.clear) + .listRowInsets(.zero) + } + } + } + .navigationTitle(L10n.server) + .alert(L10n.deleteServer, isPresented: $isPresentingConfirmDeletion) { + Button(L10n.delete, role: .destructive) { + viewModel.delete() +// router.popLast() + } + } message: { + Text(L10n.confirmDeleteServerAndUsers(viewModel.server.name)) + } + } +} diff --git a/jellypig tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift similarity index 100% rename from jellypig tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift rename to Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift diff --git a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift new file mode 100644 index 00000000..1398f30f --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift @@ -0,0 +1,145 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension CustomDeviceProfileSettingsView { + + struct EditCustomDeviceProfileView: View { + + @StoredValue(.User.customDeviceProfiles) + private var customDeviceProfiles + + @Router + private var router + + @State + private var isPresentingNotSaved = false + + @StateObject + private var profile: BindingBox + + private let createProfile: Bool + + private var isValid: Bool { + profile.value.audio.isNotEmpty && + profile.value.video.isNotEmpty && + profile.value.container.isNotEmpty + } + + init(profile: Binding?) { + createProfile = profile == nil + + if let profile { + self._profile = StateObject(wrappedValue: BindingBox(source: profile)) + } else { + let empty = Binding( + get: { .init(type: .video) }, + set: { _ in } + ) + + self._profile = StateObject( + wrappedValue: BindingBox(source: empty) + ) + } + } + + @ViewBuilder + private func codecSection( + title: String, + content: String, + onSelect: @escaping () -> Void + ) -> some View { + Button(action: onSelect) { + HStack { + VStack(alignment: .leading, spacing: 8) { + Text(title) + .fontWeight(.semibold) + + if content.isEmpty { + Label(L10n.none, systemImage: "exclamationmark.circle.fill") + } else { + Text(content) + .foregroundColor(.secondary) + } + } + .font(.subheadline) + + Spacer() + + Image(systemName: "chevron.right") + .font(.body.weight(.regular)) + .foregroundColor(.secondary) + } + } + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "doc") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + Section { + Toggle(L10n.useAsTranscodingProfile, isOn: $profile.value.useAsTranscodingProfile) + .padding(.vertical) + } header: { + HStack { + Text(L10n.customProfile) + Spacer() + Button(L10n.save) { + if createProfile { + customDeviceProfiles.append(profile.value) + } + router.dismiss() + } + .disabled(!isValid) + } + } + + codecSection( + title: L10n.audio, + content: profile.value.audio.map(\.displayTitle).joined(separator: ", ") + ) { + router.route(to: .editCustomDeviceProfileAudio(selection: $profile.value.audio)) + } + .padding(.vertical) + + codecSection( + title: L10n.video, + content: profile.value.video.map(\.displayTitle).joined(separator: ", ") + ) { + router.route(to: .editCustomDeviceProfileVideo(selection: $profile.value.video)) + } + .padding(.vertical) + + codecSection( + title: L10n.containers, + content: profile.value.container.map(\.displayTitle).joined(separator: ", ") + ) { + router.route(to: .editCustomDeviceProfileContainer(selection: $profile.value.container)) + } + .padding(.vertical) + + if !isValid { + Label(L10n.replaceDeviceProfileWarning, systemImage: "exclamationmark.circle.fill") + } + } + .navigationTitle(L10n.customProfile) + .alert(L10n.profileNotSaved, isPresented: $isPresentingNotSaved) { + Button(L10n.close, role: .destructive) { + router.dismiss() + } + } + .interactiveDismissDisabled(true) + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift new file mode 100644 index 00000000..bd1f658d --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift @@ -0,0 +1,102 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import SwiftUI + +struct CustomDeviceProfileSettingsView: View { + + @Default(.VideoPlayer.Playback.customDeviceProfileAction) + private var customDeviceProfileAction + + @StoredValue(.User.customDeviceProfiles) + private var customProfiles: [CustomDeviceProfile] + + @Router + private var router + + private var isValid: Bool { + customDeviceProfileAction == .add || customProfiles.isNotEmpty + } + + private func removeProfile(at offsets: IndexSet) { + customProfiles.remove(atOffsets: offsets) + } + + private func deleteProfile(_ profile: CustomDeviceProfile) { + if let index = customProfiles.firstIndex(of: profile) { + customProfiles.remove(at: index) + } + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "doc.on.doc") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + Section { + ListRowMenu(L10n.behavior, selection: $customDeviceProfileAction) + } header: { + L10n.behavior.text + } footer: { + VStack(spacing: 8) { + switch customDeviceProfileAction { + case .add: + L10n.customDeviceProfileAdd.text + case .replace: + L10n.customDeviceProfileReplace.text + } + + if !isValid { + Label(L10n.noDeviceProfileWarning, systemImage: "exclamationmark.circle.fill") + } + } + } + + Section { + if customProfiles.isEmpty { + Button(L10n.add) { + router.route(to: .createCustomDeviceProfile) + } + } + + List { + ForEach($customProfiles, id: \.self) { $profile in + CustomProfileButton(profile: profile) { + router.route(to: .editCustomDeviceProfile(profile: $profile)) + } + .contextMenu { + Button(role: .destructive) { + deleteProfile(profile) + } label: { + Label(L10n.delete, systemImage: "trash") + } + } + } + .onDelete(perform: removeProfile) + } + } header: { + HStack { + Text(L10n.profiles) + Spacer() + if customProfiles.isNotEmpty { + Button(L10n.add) { + router.route(to: .createCustomDeviceProfile) + } + } + } + } + } + .navigationTitle(L10n.profiles) + } +} diff --git a/jellypig tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift similarity index 100% rename from jellypig tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift rename to Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift new file mode 100644 index 00000000..b79ace64 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift @@ -0,0 +1,55 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension CustomizeViewsSettings { + + struct HomeSection: View { + + @Default(.Customization.Home.showRecentlyAdded) + private var showRecentlyAdded + @Default(.Customization.Home.maxNextUp) + private var maxNextUp + @Default(.Customization.Home.resumeNextUp) + private var resumeNextUp + + @State + private var isPresentingNextUpDays = false + + var body: some View { + Section(L10n.home) { + + Toggle(L10n.showRecentlyAdded, isOn: $showRecentlyAdded) + + Toggle(L10n.nextUpRewatch, isOn: $resumeNextUp) + + ChevronButton( + L10n.nextUpDays, + subtitle: { + if maxNextUp > 0 { + let duration = Duration.seconds(TimeInterval(maxNextUp)) + return Text(duration, format: .units(allowed: [.days], width: .abbreviated)) + } else { + return Text(L10n.disabled) + } + }(), + description: L10n.nextUpDaysDescription + ) { + TextField( + L10n.days, + value: $maxNextUp, + format: .dayInterval(range: 0 ... 1000) + ) + .keyboardType(.numberPad) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift new file mode 100644 index 00000000..f3d781ac --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift @@ -0,0 +1,59 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import SwiftUI + +extension CustomizeViewsSettings { + + struct ItemSection: View { + + @Injected(\.currentUserSession) + private var userSession + + @Router + private var router + + @StoredValue(.User.itemViewAttributes) + private var itemViewAttributes + @StoredValue(.User.enabledTrailers) + private var enabledTrailers + + @StoredValue(.User.enableItemEditing) + private var enableItemEditing + @StoredValue(.User.enableItemDeletion) + private var enableItemDeletion + @StoredValue(.User.enableCollectionManagement) + private var enableCollectionManagement + + var body: some View { + Section(L10n.items) { + + ChevronButton(L10n.mediaAttributes) { + router.route(to: .itemViewAttributes(selection: $itemViewAttributes)) + } + + ListRowMenu(L10n.enabledTrailers, selection: $enabledTrailers) + + /// Enable Refreshing & Deleting Collections + if userSession?.user.permissions.items.canManageCollections == true { + Toggle(L10n.editCollections, isOn: $enableCollectionManagement) + } + /// Enable Refreshing Items from All Visible LIbraries + if userSession?.user.permissions.items.canEditMetadata == true { + Toggle(L10n.editMedia, isOn: $enableItemEditing) + } + /// Enable Deleting Items from Approved Libraries + if userSession?.user.permissions.items.canDelete == true { + Toggle(L10n.deleteMedia, isOn: $enableItemDeletion) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/LibrarySection.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/LibrarySection.swift new file mode 100644 index 00000000..c6ab7672 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/LibrarySection.swift @@ -0,0 +1,80 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension CustomizeViewsSettings { + + struct LibrarySection: View { + + @Default(.Customization.Library.randomImage) + private var libraryRandomImage + @Default(.Customization.Library.showFavorites) + private var showFavorites + + @Default(.Customization.Library.cinematicBackground) + private var cinematicBackground + @Default(.Customization.Library.displayType) + private var libraryDisplayType + @Default(.Customization.Library.posterType) + private var libraryPosterType + @Default(.Customization.Library.listColumnCount) + private var listColumnCount + + @Default(.Customization.Library.rememberLayout) + private var rememberLibraryLayout + @Default(.Customization.Library.rememberSort) + private var rememberLibrarySort + + @Router + private var router + + @State + private var isPresentingNextUpDays = false + + var body: some View { + Section(L10n.media) { + + Toggle(L10n.randomImage, isOn: $libraryRandomImage) + + Toggle(L10n.showFavorites, isOn: $showFavorites) + } + + Section(L10n.library) { + Toggle(L10n.cinematicBackground, isOn: $cinematicBackground) + + ListRowMenu(L10n.posters, selection: $libraryPosterType) + + ListRowMenu(L10n.library, selection: $libraryDisplayType) + + if libraryDisplayType == .list { + ChevronButton( + L10n.columns, + subtitle: listColumnCount.description + ) { + // TODO: Implement listColumnSettings route in new Router system +// router.route(to: .listColumnSettings(columnCount: $listColumnCount)) + } + } + } + + Section { + Toggle(L10n.rememberLayout, isOn: $rememberLibraryLayout) + } footer: { + Text(L10n.rememberLayoutFooter) + } + + Section { + Toggle(L10n.rememberSorting, isOn: $rememberLibrarySort) + } footer: { + Text(L10n.rememberSortingFooter) + } + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift new file mode 100644 index 00000000..e89558ea --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct CustomizeViewsSettings: View { + + @Default(.Customization.shouldShowMissingSeasons) + private var shouldShowMissingSeasons + @Default(.Customization.shouldShowMissingEpisodes) + private var shouldShowMissingEpisodes + + @Default(.Customization.showPosterLabels) + private var showPosterLabels + @Default(.Customization.nextUpPosterType) + private var nextUpPosterType + @Default(.Customization.recentlyAddedPosterType) + private var recentlyAddedPosterType + @Default(.Customization.latestInLibraryPosterType) + private var latestInLibraryPosterType + @Default(.Customization.similarPosterType) + private var similarPosterType + @Default(.Customization.searchPosterType) + private var searchPosterType + @Default(.Customization.Library.displayType) + private var libraryViewType + + @Router + private var router + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "gearshape") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + Section(L10n.missingItems) { + + Toggle(L10n.showMissingSeasons, isOn: $shouldShowMissingSeasons) + + Toggle(L10n.showMissingEpisodes, isOn: $shouldShowMissingEpisodes) + } + + Section(L10n.posters) { + + ChevronButton(L10n.indicators) { + router.route(to: .indicatorSettings) + } + + Toggle(L10n.showPosterLabels, isOn: $showPosterLabels) + + ListRowMenu(L10n.next, selection: $nextUpPosterType) + + ListRowMenu(L10n.recentlyAdded, selection: $recentlyAddedPosterType) + + ListRowMenu(L10n.latestWithString(L10n.library), selection: $latestInLibraryPosterType) + + ListRowMenu(L10n.recommended, selection: $similarPosterType) + + ListRowMenu(L10n.search, selection: $searchPosterType) + } + + LibrarySection() + + ItemSection() + + HomeSection() + } + .navigationTitle(L10n.customize) + } +} diff --git a/jellypig tvOS/Views/SettingsView/ExperimentalSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift similarity index 100% rename from jellypig tvOS/Views/SettingsView/ExperimentalSettingsView.swift rename to Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift diff --git a/jellypig tvOS/Views/SettingsView/IndicatorSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift similarity index 100% rename from jellypig tvOS/Views/SettingsView/IndicatorSettingsView.swift rename to Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift diff --git a/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift b/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift new file mode 100644 index 00000000..bc8f6c19 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift @@ -0,0 +1,132 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct PlaybackQualitySettingsView: View { + @Default(.VideoPlayer.Playback.appMaximumBitrate) + private var appMaximumBitrate + @Default(.VideoPlayer.Playback.appMaximumBitrateTest) + private var appMaximumBitrateTest + @Default(.VideoPlayer.Playback.compatibilityMode) + private var compatibilityMode + + @Router + private var router + + // MARK: - Focus Management + + @FocusState + private var focusedItem: FocusableItem? + + private enum FocusableItem: Hashable { + case maximumBitrate + case compatibility + } + + // MARK: - Body + + var body: some View { + SplitFormWindowView() + .descriptionView { + descriptionView + } + .contentView { + Section { + ListRowMenu(L10n.maximumBitrate, selection: $appMaximumBitrate) + .focused($focusedItem, equals: .maximumBitrate) + } header: { + L10n.bitrateDefault.text + } footer: { + L10n.bitrateDefaultDescription.text + } + .animation(.none, value: appMaximumBitrate) + + if appMaximumBitrate == .auto { + Section { + ListRowMenu(L10n.testSize, selection: $appMaximumBitrateTest) + } footer: { + L10n.bitrateTestDisclaimer.text + } + } + + Section { + ListRowMenu(L10n.compatibility, selection: $compatibilityMode) + .focused($focusedItem, equals: .compatibility) + + if compatibilityMode == .custom { + ChevronButton(L10n.profiles) { + router.route(to: .customDeviceProfileSettings) + } + } + } header: { + L10n.deviceProfile.text + } footer: { + L10n.deviceProfileDescription.text + } + } + .navigationTitle(L10n.playbackQuality) + } + + // MARK: - Description View Icon + + private var descriptionView: some View { + ZStack { + Image(systemName: "play.rectangle.on.rectangle") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + + focusedDescription + .transition(.opacity.animation(.linear(duration: 0.2))) + } + } + + // MARK: - Description View on Focus + + @ViewBuilder + private var focusedDescription: some View { + switch focusedItem { + case .maximumBitrate: + LearnMoreModal { + LabeledContent( + L10n.auto, + value: L10n.birateAutoDescription + ) + LabeledContent( + L10n.bitrateMax, + value: L10n.bitrateMaxDescription(PlaybackBitrate.max.rawValue.formatted(.bitRate)) + ) + } + + case .compatibility: + LearnMoreModal { + LabeledContent( + L10n.auto, + value: L10n.autoDescription + ) + LabeledContent( + L10n.compatible, + value: L10n.compatibleDescription + ) + LabeledContent( + L10n.direct, + value: L10n.directDescription + ) + LabeledContent( + L10n.custom, + value: L10n.customDescription + ) + } + + case nil: + EmptyView() + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/SettingsView.swift b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift new file mode 100644 index 00000000..e52714c0 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift @@ -0,0 +1,100 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import JellyfinAPI +import SwiftUI + +struct SettingsView: View { + + @Default(.VideoPlayer.videoPlayerType) + private var videoPlayerType + + @Router + private var router + + @StateObject + private var viewModel = SettingsViewModel() + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(.jellyfinBlobBlue) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + Section(L10n.jellyfin) { + + UserProfileRow(user: viewModel.userSession.user.data) { + router.route(to: .userProfile(viewModel: viewModel)) + } + + ChevronButton( + L10n.server, + action: { + router.route(to: .editServer(server: viewModel.userSession.server)) + }, + icon: { EmptyView() }, + subtitle: { + Label { + Text(viewModel.userSession.server.name) + } icon: { + if !viewModel.userSession.server.isVersionCompatible { + Image(systemName: "exclamationmark.circle.fill") + .foregroundStyle(.orange) + } + } + } + ) + } + + Section { + ListRowButton(L10n.switchUser) { + viewModel.signOut() + } + .foregroundStyle(Color.jellyfinPurple.overlayColor, Color.jellyfinPurple) + .listRowInsets(.zero) + } + + Section(L10n.videoPlayer) { + + ListRowMenu(L10n.videoPlayerType, selection: $videoPlayerType) + + ChevronButton(L10n.videoPlayer) { + router.route(to: .videoPlayerSettings) + } + + ChevronButton(L10n.playbackQuality) { + router.route(to: .playbackQualitySettings) + } + } + + Section(L10n.accessibility) { + + ChevronButton(L10n.customize) { + router.route(to: .customizeViewsSettings) + } +// +// ChevronButton(L10n.experimental) +// .onSelect { +// router.route(to: \.experimentalSettings) +// } + } + + Section { + + ChevronButton(L10n.logs) { + router.route(to: .log) + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift new file mode 100644 index 00000000..818e3a39 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift @@ -0,0 +1,278 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import KeychainSwift +import SwiftUI + +// TODO: present toast when authentication successfully changed +// TODO: pop is just a workaround to get change published from usersession. +// find fix and don't pop when successfully changed +// TODO: could cleanup/refactor greatly + +struct UserLocalSecurityView: View { + + // MARK: - Defaults + + @Default(.accentColor) + private var accentColor + + // MARK: - State & Environment Objects + + @Router + private var router + + @StateObject + private var viewModel = UserLocalSecurityViewModel() + + // MARK: - Local Security Variables + + @State + private var listSize: CGSize = .zero + @State + private var onPinCompletion: (() -> Void)? + @State + private var pin: String = "" + @State + private var pinHint: String = "" + @State + private var signInPolicy: UserAccessPolicy = .none + + // MARK: - Dialog States + + @State + private var isPresentingOldPinPrompt: Bool = false + @State + private var isPresentingNewPinPrompt: Bool = false + + // MARK: - Error State + + @State + private var error: Error? = nil + + // MARK: - Focus Management + + @FocusState + private var focusedItem: FocusableItem? + + private enum FocusableItem: Hashable { + case security + } + + // MARK: - Check Old Policy + + private func checkOldPolicy() { + do { + try viewModel.checkForOldPolicy() + } catch { + return + } + + checkNewPolicy() + } + + // MARK: - Check New Policy + + private func checkNewPolicy() { + do { + try viewModel.checkFor(newPolicy: signInPolicy) + } catch { + return + } + + viewModel.set(newPolicy: signInPolicy, newPin: pin, newPinHint: pinHint) + } + + // MARK: - Event Handler + + private func onReceive(_ event: UserLocalSecurityViewModel.Event) { + switch event { + case let .error(eventError): + error = eventError + case .promptForOldPin: + onPinCompletion = { + Task { + try viewModel.check(oldPin: pin) + + checkNewPolicy() + } + } + + pin = "" + isPresentingOldPinPrompt = true + case .promptForNewPin: + onPinCompletion = { + viewModel.set(newPolicy: signInPolicy, newPin: pin, newPinHint: pinHint) + router.dismiss() + } + + pin = "" + isPresentingNewPinPrompt = true + case .promptForOldDeviceAuth, .promptForNewDeviceAuth: + break + } + } + + // MARK: - Body + + var body: some View { + SplitFormWindowView() + .descriptionView { + descriptionView + } + .contentView { + Section { + Toggle( + L10n.pin, + isOn: Binding( + get: { signInPolicy == .requirePin }, + set: { signInPolicy = $0 ? .requirePin : .none } + ) + ) + .focused($focusedItem, equals: .security) + /* Picker(L10n.security, selection: $signInPolicy) { + ForEach(UserAccessPolicy.allCases.filter { $0 != .requireDeviceAuthentication }, id: \.self) { policy in + Text(policy.displayTitle) + } + } */ + } + + if signInPolicy == .requirePin { + Section { + ChevronButton( + L10n.hint, + subtitle: pinHint, + description: L10n.setPinHintDescription + ) { + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // TextField(L10n.hint, text: $pinHint) + TextField(text: $pinHint) {} + } + } header: { + Text(L10n.hint) + } footer: { + Text(L10n.setPinHintDescription) + } + } + } + .animation(.linear, value: signInPolicy) + .navigationTitle(L10n.security) + .onFirstAppear { + pinHint = viewModel.userSession.user.pinHint + signInPolicy = viewModel.userSession.user.accessPolicy + } + .onReceive(viewModel.events) { event in + onReceive(event) + } + .topBarTrailing { + Button { + checkOldPolicy() + } label: { + Group { + if signInPolicy == .requirePin, signInPolicy == viewModel.userSession.user.accessPolicy { + Text(L10n.changePin) + } else { + Text(L10n.save) + } + } + .foregroundStyle(accentColor.overlayColor) + .font(.headline) + .padding(.vertical, 5) + .padding(.horizontal, 10) + .background { + accentColor + } + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + } + .trackingSize($listSize) + .alert( + L10n.enterPin, + isPresented: $isPresentingOldPinPrompt, + presenting: onPinCompletion + ) { completion in + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // SecureField(L10n.pin, text: $pin) + SecureField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.continue) { + completion() + } + + Button(L10n.cancel, role: .cancel) {} + } message: { _ in + Text(L10n.enterPinForUser(viewModel.userSession.user.username)) + } + .alert( + L10n.setPin, + isPresented: $isPresentingNewPinPrompt, + presenting: onPinCompletion + ) { completion in + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // SecureField(L10n.pin, text: $pin) + SecureField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.set) { + completion() + } + + Button(L10n.cancel, role: .cancel) {} + } message: { _ in + Text(L10n.createPinForUser(viewModel.userSession.user.username)) + } + .errorMessage($error) + } + + // MARK: - Description View Icon + + private var descriptionView: some View { + ZStack { + Image(systemName: "lock.fill") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + + focusedDescription + .transition(.opacity.animation(.linear(duration: 0.2))) + } + } + + // MARK: - Description View on Focus + + @ViewBuilder + private var focusedDescription: some View { + switch focusedItem { + case .security: + LearnMoreModal { + LabeledContent( + L10n.security, + value: L10n.additionalSecurityAccessDescription + ) + LabeledContent( + UserAccessPolicy.requirePin.displayTitle, + value: L10n.requirePinDescription + ) + LabeledContent( + UserAccessPolicy.none.displayTitle, + value: L10n.saveUserWithoutAuthDescription + ) + } + + case nil: + EmptyView() + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift new file mode 100644 index 00000000..109b3689 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift @@ -0,0 +1,90 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import JellyfinAPI +import SwiftUI + +struct UserProfileSettingsView: View { + + @Router + private var router + + @ObservedObject + private var viewModel: SettingsViewModel + @StateObject + private var profileImageViewModel: UserProfileImageViewModel + + @State + private var isPresentingConfirmReset: Bool = false + + init(viewModel: SettingsViewModel) { + self.viewModel = viewModel + self._profileImageViewModel = StateObject(wrappedValue: UserProfileImageViewModel(user: viewModel.userSession.user.data)) + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + UserProfileImage( + userID: viewModel.userSession.user.id, + source: viewModel.userSession.user.profileImageSource( + client: viewModel.userSession.client, + maxWidth: 400 + ) + ) + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + // TODO: bring reset password to tvOS +// Section { +// ChevronButton(L10n.password) +// .onSelect { +// router.route(to: \.resetUserPassword, viewModel.userSession.user.id) +// } +// } + + Section { + ChevronButton(L10n.security) { + router.route(to: .localSecurity) + } + } + + // TODO: Do we want this option on tvOS? +// Section { +// // TODO: move under future "Storage" tab +// // when downloads implemented +// Button(L10n.resetSettings) { +// isPresentingConfirmReset = true +// } +// .foregroundStyle(.red) +// } footer: { +// Text(L10n.resetSettingsDescription) +// } + } + .navigationTitle(L10n.user) + .confirmationDialog( + L10n.resetSettings, + isPresented: $isPresentingConfirmReset, + titleVisibility: .visible + ) { + Button(L10n.reset, role: .destructive) { + do { + try viewModel.userSession.user.deleteSettings() + } catch { + viewModel.logger.error("Unable to reset user settings: \(error.localizedDescription)") + } + } + } message: { + Text(L10n.resetSettingsMessage) + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift new file mode 100644 index 00000000..e6476aca --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift @@ -0,0 +1,82 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct VideoPlayerSettingsView: View { + + @Default(.VideoPlayer.Subtitle.subtitleFontName) + private var subtitleFontName + + @Default(.VideoPlayer.jumpBackwardInterval) + private var jumpBackwardLength + @Default(.VideoPlayer.jumpForwardInterval) + private var jumpForwardLength + @Default(.VideoPlayer.resumeOffset) + private var resumeOffset + + @Router + private var router + + @State + private var isPresentingResumeOffsetStepper: Bool = false + + var body: some View { + SplitFormWindowView() + .descriptionView { + Image(systemName: "tv") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + Section { + + ChevronButton( + L10n.offset, + subtitle: resumeOffset.secondLabel + ) { + isPresentingResumeOffsetStepper = true + } + } header: { + L10n.resume.text + } footer: { + L10n.resumeOffsetDescription.text + } + + Section { + + ChevronButton(L10n.subtitleFont, subtitle: subtitleFontName) { + router.route(to: .fontPicker(selection: $subtitleFontName)) + } + } header: { + L10n.subtitles.text + } footer: { + L10n.subtitlesDisclaimer.text + } + } + .navigationTitle(L10n.videoPlayer) + .blurredFullScreenCover(isPresented: $isPresentingResumeOffsetStepper) { + StepperView( + title: L10n.resumeOffsetTitle, + description: L10n.resumeOffsetDescription, + value: $resumeOffset, + range: 0 ... 30, + step: 1 + ) + .valueFormatter { + $0.secondLabel + } + .onCloseSelected { + isPresentingResumeOffsetStepper = false + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/Components/LoadingView.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/Components/LoadingView.swift new file mode 100644 index 00000000..4f5de256 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/Components/LoadingView.swift @@ -0,0 +1,44 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer { + + struct LoadingView: View { + + @Router + private var router + + var body: some View { + ZStack { + Color.black + + VStack(spacing: 10) { + + Text(L10n.retrievingMediaInformation) + .foregroundColor(.white) + + ProgressView() + + Button { + router.dismiss() + } label: { + Text(L10n.cancel) + .foregroundColor(.red) + .padding() + .overlay { + Capsule() + .stroke(Color.red, lineWidth: 1) + } + } + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/ActionButtons.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/ActionButtons.swift new file mode 100644 index 00000000..4e05df6b --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/ActionButtons.swift @@ -0,0 +1,126 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar { + + struct ActionButtons: View { + + @Default(.VideoPlayer.barActionButtons) + private var rawBarActionButtons + @Default(.VideoPlayer.menuActionButtons) + private var rawMenuActionButtons + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + + private func filteredActionButtons(_ rawButtons: [VideoPlayerActionButton]) -> [VideoPlayerActionButton] { + var filteredButtons = rawButtons + + if manager.playbackItem?.audioStreams.isEmpty == true { + filteredButtons.removeAll { $0 == .audio } + } + + if manager.playbackItem?.subtitleStreams.isEmpty == true { + filteredButtons.removeAll { $0 == .subtitles } + } + + if manager.queue == nil { + filteredButtons.removeAll { $0 == .autoPlay } + filteredButtons.removeAll { $0 == .playNextItem } + filteredButtons.removeAll { $0 == .playPreviousItem } + } + + if manager.item.isLiveStream { + filteredButtons.removeAll { $0 == .audio } + filteredButtons.removeAll { $0 == .autoPlay } + filteredButtons.removeAll { $0 == .playbackSpeed } +// filteredButtons.removeAll { $0 == .playbackQuality } + filteredButtons.removeAll { $0 == .subtitles } + } + + return filteredButtons + } + + private var barActionButtons: [VideoPlayerActionButton] { + filteredActionButtons(rawBarActionButtons) + } + + private var menuActionButtons: [VideoPlayerActionButton] { + filteredActionButtons(rawMenuActionButtons) + } + + @ViewBuilder + private func view(for button: VideoPlayerActionButton) -> some View { + switch button { + case .aspectFill: + AspectFill() + case .audio: + Audio() + case .autoPlay: + AutoPlay() + case .gestureLock: + EmptyView() +// GestureLock() + case .playbackSpeed: + EmptyView() +// PlaybackRateMenu() +// case .playbackQuality: +// PlaybackQuality() + case .playNextItem: + PlayNextItem() + case .playPreviousItem: + PlayPreviousItem() + case .subtitles: + Subtitles() + } + } + + @ViewBuilder + private var menuButtons: some View { + Menu( + "Menu", + systemImage: "ellipsis.circle" + ) { + ForEach(menuActionButtons) { actionButton in + view(for: actionButton) + } + } + } + + var body: some View { + HStack(spacing: 10) { + ForEach( + barActionButtons, + content: view(for:) + ) + + if menuActionButtons.isNotEmpty { + Menu( + L10n.menu, + systemImage: "ellipsis.circle" + ) { + ForEach( + menuActionButtons, + content: view(for:) + ) + .environment(\.isInMenu, true) + } + } + } + .menuStyle(.button) + .labelStyle(.iconOnly) + .buttonBorderShape(.circle) + .buttonStyle(.plain) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AspectFillActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AspectFillActionButton.swift new file mode 100644 index 00000000..cd27fd31 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AspectFillActionButton.swift @@ -0,0 +1,42 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct AspectFill: View { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + + private var isAspectFilled: Bool { + get { containerState.isAspectFilled } + nonmutating set { containerState.isAspectFilled = newValue } + } + + private var systemImage: String { + if isAspectFilled { + VideoPlayerActionButton.aspectFill.secondarySystemImage + } else { + VideoPlayerActionButton.aspectFill.systemImage + } + } + + var body: some View { + Button( + L10n.aspectFill, + systemImage: systemImage + ) { + isAspectFilled.toggle() + } +// .videoPlayerActionButtonTransition() +// .id(isAspectFilled) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AudioActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AudioActionButton.swift new file mode 100644 index 00000000..9ec6d591 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AudioActionButton.swift @@ -0,0 +1,66 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct Audio: View { + + @Environment(\.isInMenu) + private var isInMenu + + @EnvironmentObject + private var manager: MediaPlayerManager + + @State + private var selectedAudioStreamIndex: Int? + + private var systemImage: String { + if selectedAudioStreamIndex == nil { + "speaker.wave.2" + } else { + "speaker.wave.2.fill" + } + } + + @ViewBuilder + private func content(playbackItem: MediaPlayerItem) -> some View { + ForEach(playbackItem.audioStreams, id: \.index) { stream in + Button { + playbackItem.selectedAudioStreamIndex = stream.index ?? -1 + } label: { + if selectedAudioStreamIndex == stream.index { + Label(stream.displayTitle ?? L10n.unknown, systemImage: "checkmark") + } else { + Text(stream.displayTitle ?? L10n.unknown) + } + } + } + } + + var body: some View { + if let playbackItem = manager.playbackItem { + Menu( + L10n.audio, + systemImage: systemImage + ) { + if isInMenu { + content(playbackItem: playbackItem) + } else { + Section(L10n.audio) { + content(playbackItem: playbackItem) + } + } + } + .videoPlayerActionButtonTransition() + .assign(playbackItem.$selectedAudioStreamIndex, to: $selectedAudioStreamIndex) + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AutoPlayActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AutoPlayActionButton.swift new file mode 100644 index 00000000..4d03fcc2 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/AutoPlayActionButton.swift @@ -0,0 +1,57 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct AutoPlay: View { + + @Default(.VideoPlayer.autoPlayEnabled) + private var isAutoPlayEnabled + + @Environment(\.isInMenu) + private var isInMenu + + @EnvironmentObject + private var manager: MediaPlayerManager + + private var systemImage: String { + if isAutoPlayEnabled { + "play.circle.fill" + } else { + "stop.circle" + } + } + + var body: some View { + Button { + isAutoPlayEnabled.toggle() + +// if isAutoPlayEnabled { +// toastProxy.present("Auto Play enabled", systemName: "play.circle.fill") +// } else { +// toastProxy.present("Auto Play disabled", systemName: "stop.circle") +// } + } label: { + Label( + L10n.autoPlay, + systemImage: systemImage + ) + + if isInMenu { + Text(isAutoPlayEnabled ? "On" : "Off") + } + } + .videoPlayerActionButtonTransition() + .id(isAutoPlayEnabled) + .disabled(manager.queue == nil) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayNextItemActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayNextItemActionButton.swift new file mode 100644 index 00000000..75414ae1 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayNextItemActionButton.swift @@ -0,0 +1,44 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct PlayNextItem: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + + var body: some View { + if let queue = manager.queue { + _PlayNextItem(queue: queue) + } + } + } + + private struct _PlayNextItem: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + + @ObservedObject + var queue: AnyMediaPlayerQueue + + var body: some View { + Button( + L10n.playNextItem, + systemImage: VideoPlayerActionButton.playNextItem.systemImage + ) { + guard let nextItem = queue.nextItem else { return } + manager.playNewItem(provider: nextItem) + } + .disabled(queue.nextItem == nil) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayPreviousItemActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayPreviousItemActionButton.swift new file mode 100644 index 00000000..df179f88 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/PlayPreviousItemActionButton.swift @@ -0,0 +1,44 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct PlayPreviousItem: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + + var body: some View { + if let queue = manager.queue { + _PlayPreviousItem(queue: queue) + } + } + } + + private struct _PlayPreviousItem: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + + @ObservedObject + var queue: AnyMediaPlayerQueue + + var body: some View { + Button( + L10n.playPreviousItem, + systemImage: VideoPlayerActionButton.playPreviousItem.systemImage + ) { + guard let previousItem = queue.previousItem else { return } + manager.playNewItem(provider: previousItem) + } + .disabled(queue.previousItem == nil) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/SubtitleActionButton.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/SubtitleActionButton.swift new file mode 100644 index 00000000..d75c1a0d --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/ActionButtons/SubtitleActionButton.swift @@ -0,0 +1,66 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls.NavigationBar.ActionButtons { + + struct Subtitles: View { + + @Environment(\.isInMenu) + private var isInMenu + + @EnvironmentObject + private var manager: MediaPlayerManager + + @State + private var selectedSubtitleStreamIndex: Int? + + private var systemImage: String { + if selectedSubtitleStreamIndex == nil { + "captions.bubble" + } else { + "captions.bubble.fill" + } + } + + @ViewBuilder + private func content(playbackItem: MediaPlayerItem) -> some View { + ForEach(playbackItem.subtitleStreams.prepending(.none), id: \.index) { stream in + Button { + playbackItem.selectedSubtitleStreamIndex = stream.index ?? -1 + } label: { + if selectedSubtitleStreamIndex == stream.index { + Label(stream.displayTitle ?? L10n.unknown, systemImage: "checkmark") + } else { + Text(stream.displayTitle ?? L10n.unknown) + } + } + } + } + + var body: some View { + if let playbackItem = manager.playbackItem { + Menu( + L10n.subtitles, + systemImage: systemImage + ) { + if isInMenu { + content(playbackItem: playbackItem) + } else { + Section(L10n.subtitles) { + content(playbackItem: playbackItem) + } + } + } + .videoPlayerActionButtonTransition() + .assign(playbackItem.$selectedSubtitleStreamIndex, to: $selectedSubtitleStreamIndex) + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/NavigationBar.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/NavigationBar.swift new file mode 100644 index 00000000..a5ca3763 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/NavigationBar.swift @@ -0,0 +1,37 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls { + + struct NavigationBar: View { + + @EnvironmentObject + private var manager: MediaPlayerManager + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + if let subtitle = manager.item.subtitle { + Text(subtitle) + .font(.subheadline) + .foregroundStyle(.white) + } + + HStack { + Text(manager.item.displayTitle) + .font(.largeTitle) + .fontWeight(.bold) + .frame(maxWidth: .infinity, alignment: .leading) + + ActionButtons() + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/PlaybackProgress.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/PlaybackProgress.swift new file mode 100644 index 00000000..ca3bb582 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/PlaybackProgress.swift @@ -0,0 +1,116 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +// TODO: bar color default to style +// TODO: remove compact buttons? +// TODO: capsule scale on editing +// TODO: possible issue with runTimeSeconds == 0 +// TODO: live tv + +extension VideoPlayer.PlaybackControls { + + struct PlaybackProgress: View { + + @Default(.VideoPlayer.Overlay.chapterSlider) + private var chapterSlider + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var scrubbedSecondsBox: PublishedBox + + @FocusState + private var isFocused: Bool + + @State + private var sliderSize = CGSize.zero + + private var isScrubbing: Bool { + get { + containerState.isScrubbing + } + nonmutating set { + containerState.isScrubbing = newValue + } + } + + private var previewXOffset: CGFloat { + let p = sliderSize.width * scrubbedProgress + return clamp(p, min: 100, max: sliderSize.width - 100) + } + + private var scrubbedProgress: Double { + guard let runtime = manager.item.runtime, runtime > .zero else { return 0 } + return scrubbedSeconds / runtime + } + + private var scrubbedSeconds: Duration { + scrubbedSecondsBox.value + } + + @ViewBuilder + private var liveIndicator: some View { + Text("Live") + .font(.subheadline) + .fontWeight(.semibold) + .foregroundStyle(.white) + .padding(.horizontal, 16) + .padding(.vertical, 4) + .background { + Capsule() + .fill(Color.gray) + } + } + + @ViewBuilder + private var capsuleSlider: some View { + + let resolution: Double = 100 + + CapsuleSlider( + value: $scrubbedSecondsBox.value.map( + getter: { + guard let runtime = manager.item.runtime, runtime > .zero else { return 0 } + return clamp(($0.seconds / runtime.seconds) * resolution, min: 0, max: resolution) + }, + setter: { (manager.item.runtime ?? .zero) * ($0 / resolution) } + ), + total: resolution + ) + .onEditingChanged { isEditing in + isScrubbing = isEditing + print(isEditing) + } + .frame(height: 50) + } + + var body: some View { + VStack(spacing: 10) { + if manager.item.isLiveStream { + liveIndicator + .frame(maxWidth: .infinity, alignment: .leading) + } else { + capsuleSlider + .trackingSize($sliderSize) + + SplitTimeStamp() + } + } + .focused($isFocused) + .scaleEffect(isFocused ? 1.0 : 0.95) + .animation(.easeInOut(duration: 0.3), value: isFocused) + .foregroundStyle(isFocused ? Color.white : Color.white.opacity(0.8)) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/SplitTimestamp.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/SplitTimestamp.swift new file mode 100644 index 00000000..68b67168 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/Components/SplitTimestamp.swift @@ -0,0 +1,63 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls { + + struct SplitTimeStamp: View { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var manager: MediaPlayerManager + @EnvironmentObject + private var scrubbedSecondsBox: PublishedBox + + @State + private var contentSize: CGSize = .zero + @State + private var leadingTimestampSize: CGSize = .zero + @State + private var trailingTimestampSize: CGSize = .zero + + private var previewXOffset: CGFloat { + let p = contentSize.width * scrubbedProgress - (leadingTimestampSize.width / 2) + return clamp(p, min: 0, max: contentSize.width - (trailingTimestampSize.width + leadingTimestampSize.width)) + } + + private var scrubbedProgress: Double { + guard let runtime = manager.item.runtime, runtime > .zero else { return 0 } + return scrubbedSeconds / runtime + } + + private var scrubbedSeconds: Duration { + scrubbedSecondsBox.value + } + + var body: some View { + ZStack { + if let runtime = manager.item.runtime { + Text(.zero - (runtime - scrubbedSeconds), format: .runtime) + } else { + Text(verbatim: .emptyRuntime) + } + } + .trackingSize($trailingTimestampSize) + .frame(maxWidth: .infinity, alignment: .trailing) + .debugBackground() + .overlay(alignment: .leading) { + Text(scrubbedSeconds, format: .runtime) + .trackingSize($leadingTimestampSize) + .offset(x: previewXOffset) + } + .monospacedDigit() + .trackingSize($contentSize) + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/ConfirmCloseOverlay.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/ConfirmCloseOverlay.swift new file mode 100644 index 00000000..803f58c2 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/ConfirmCloseOverlay.swift @@ -0,0 +1,28 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension VideoPlayer.PlaybackControls { + + struct ConfirmCloseOverlay: View { + + var body: some View { + ZStack { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 96)) + .padding(3) + .background { + Circle() + .fill(Color.black.opacity(0.4)) + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/PlaybackControls.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/PlaybackControls.swift new file mode 100644 index 00000000..3ad80086 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/PlaybackControls.swift @@ -0,0 +1,101 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import PreferencesView +import SwiftUI +import VLCUI + +extension VideoPlayer { + + struct PlaybackControls: View { + + // since this view ignores safe area, it must + // get safe area insets from parent views + @Environment(\.safeAreaInsets) + private var safeAreaInsets + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var focusGuide: FocusGuide + @EnvironmentObject + private var manager: MediaPlayerManager + + @OnPressEvent + private var onPressEvent + + @Router + private var router + + @State + private var contentSize: CGSize = .zero + @State + private var effectiveSafeArea: EdgeInsets = .zero + + private var isPresentingOverlay: Bool { + containerState.isPresentingOverlay + } + + private var isPresentingSupplement: Bool { + containerState.isPresentingSupplement + } + + private var isScrubbing: Bool { + containerState.isScrubbing + } + + @ViewBuilder + private var bottomContent: some View { + if !isPresentingSupplement { + + NavigationBar() + .focusSection() + + PlaybackProgress() + .focusGuide(focusGuide, tag: "playbackProgress") +// .isVisible(isScrubbing || isPresentingOverlay) + } + } + + var body: some View { + VStack { + Spacer() + + bottomContent + .edgePadding() + .background(alignment: .bottom) { + Color.black + .maskLinearGradient { + (location: 0, opacity: 0) + (location: 1, opacity: 0.5) + } + .isVisible(isScrubbing || isPresentingOverlay) + .animation(.linear(duration: 0.25), value: isPresentingOverlay) + } + } + .animation(.linear(duration: 0.1), value: isScrubbing) + .animation(.bouncy(duration: 0.4), value: isPresentingSupplement) + .animation(.bouncy(duration: 0.25), value: isPresentingOverlay) + .onReceive(onPressEvent) { press in + switch press { + case (.playPause, _): + manager.togglePlayPause() + case (.menu, _): + if isPresentingSupplement { + containerState.selectedSupplement = nil + } else { + manager.proxy?.stop() + router.dismiss() + } + default: () + } + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/SupplementContainerView.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/SupplementContainerView.swift new file mode 100644 index 00000000..2302ad08 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/SupplementContainerView.swift @@ -0,0 +1,144 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import IdentifiedCollections +import SwiftUI + +struct SupplementContainerView: View { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + @EnvironmentObject + private var focusGuide: FocusGuide + + @EnvironmentObject + private var manager: MediaPlayerManager + + @FocusState + private var focusedSupplementID: AnyMediaPlayerSupplement.ID? + @FocusState + private var isFocused: Bool + @FocusState + private var isTopBoundaryFocused: Bool + + @State + private var currentSupplements: IdentifiedArrayOf = [] + + @ViewBuilder + private func supplementContainer(for supplement: some MediaPlayerSupplement) -> some View { + AlternateLayoutView(alignment: .topLeading) { + Color.clear + } content: { + supplement.videoPlayerBody + } + } + + var body: some View { + VStack(spacing: EdgeInsets.edgePadding) { + + HStack(spacing: 10) { + if containerState.isGuestSupplement, let supplement = containerState.selectedSupplement { + Button(supplement.displayTitle) { + containerState.select(supplement: nil) + } + .focused($focusedSupplementID, equals: supplement.id) + } else { + ForEach(currentSupplements) { supplement in + Button(supplement.displayTitle) {} + .focused($focusedSupplementID, equals: supplement.id) + } + } + } + .buttonStyle(SupplementTitleButtonStyle()) + .padding(.leading, EdgeInsets.edgePadding) + .frame(maxWidth: .infinity, alignment: .leading) + .frame(height: 75) + .focusGuide(focusGuide, tag: "supplementTitles", top: "playbackControls") + + ZStack { + if let supplement = containerState.selectedSupplement { + supplementContainer(for: supplement) + .eraseToAnyView() + } + } + } + .isVisible(containerState.isPresentingOverlay) + .animation(.linear(duration: 0.2), value: containerState.isPresentingOverlay) + .background(Color.blue.opacity(0.2)) + .focusSection() + .focused($isFocused) + .onReceive(manager.$supplements) { newValue in + let newSupplements = IdentifiedArray( + uniqueElements: newValue.map(AnyMediaPlayerSupplement.init) + ) + currentSupplements = newSupplements + } + .onReceive(containerState.$selectedSupplement) { output in + if focusedSupplementID != output?.id { + focusedSupplementID = output?.id + } + } + .onChange(of: focusedSupplementID) { _, _ in + if focusedSupplementID != containerState.selectedSupplement?.id {} + } + .onChange(of: isTopBoundaryFocused) { _, _ in + containerState.selectedSupplement = nil + } + } +} + +struct SupplementTitleButtonStyle: PrimitiveButtonStyle { + + @FocusState + private var isFocused + + @State + private var isPressed: Bool = false + + func makeBody(configuration: Configuration) -> some View { + configuration.label + .font(.title3) + .fontWeight(.semibold) + .foregroundStyle(isFocused ? .black : .white) + .padding(10) + .padding(.horizontal, 10) + .background { + if isFocused { + Rectangle() + .foregroundStyle(.white) + } + } + .overlay { + if !isFocused { + RoundedRectangle(cornerRadius: 27) + .stroke(Color.white, lineWidth: 4) + } + } + .mask { + RoundedRectangle(cornerRadius: 27) + } +// .onLongPressGesture(minimumDuration: 0.01) {} onPressingChanged: { isPressing in +// isPressed = isPressing +// } + .scaleEffect( + x: isFocused ? 1.1 : 1, + y: isFocused ? 1.1 : 1, + anchor: .init(x: 0.5, y: 0.5) + ) + .animation(.bouncy(duration: 0.4), value: isFocused) + .opacity(isPressed ? 0.6 : 1) + .animation(.linear(duration: 0.05), value: isFocused) + .focusable() + .focused($isFocused) + .onChange(of: isFocused) { _, newValue in + if newValue { + configuration.trigger() + } + } + } +} diff --git a/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/VideoPlayerContainerView.swift b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/VideoPlayerContainerView.swift new file mode 100644 index 00000000..3f9f4d49 --- /dev/null +++ b/Swiftfin tvOS/Views/VideoPlayerContainerState/PlaybackControls/VideoPlayerContainerView.swift @@ -0,0 +1,277 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Engine +import SwiftUI + +extension VideoPlayer { + struct VideoPlayerContainerView: UIViewControllerRepresentable { + + private let containerState: VideoPlayerContainerState + private let manager: MediaPlayerManager + private let player: () -> Player + private let playbackControls: () -> PlaybackControls + + init( + containerState: VideoPlayerContainerState, + manager: MediaPlayerManager, + @ViewBuilder player: @escaping () -> Player, + @ViewBuilder playbackControls: @escaping () -> PlaybackControls + ) { + self.containerState = containerState + self.manager = manager + self.player = player + self.playbackControls = playbackControls + } + + func makeUIViewController(context: Context) -> UIVideoPlayerContainerViewController { + UIVideoPlayerContainerViewController( + containerState: containerState, + manager: manager, + player: player().eraseToAnyView(), + playbackControls: playbackControls().eraseToAnyView() + ) + } + + func updateUIViewController( + _ uiViewController: UIVideoPlayerContainerViewController, + context: Context + ) {} + } + + // MARK: - UIVideoPlayerContainerViewController + + class UIVideoPlayerContainerViewController: UIViewController { + + private struct PlayerContainerView: View { + + @EnvironmentObject + private var containerState: VideoPlayerContainerState + + let player: AnyView + + var body: some View { + player + .overlay(Color.black.opacity(containerState.isPresentingPlaybackControls ? 0.3 : 0.0)) + .animation(.linear(duration: 0.2), value: containerState.isPresentingPlaybackControls) + } + } + + private lazy var playerViewController: HostingController = { + let controller = HostingController( + content: PlayerContainerView(player: player) + .environmentObject(containerState) + .environmentObject(manager) + .eraseToAnyView() + ) + controller.disablesSafeArea = true + controller.automaticallyAllowUIKitAnimationsForNextUpdate = true + controller.view.translatesAutoresizingMaskIntoConstraints = false + return controller + }() + + private lazy var playbackControlsViewController: HostingController = { + let controller = HostingController( + content: playbackControls + .environment(\.onPressEventPublisher, onPressEvent) + .environmentObject(containerState) + .environmentObject(containerState.scrubbedSeconds) + .environmentObject(focusGuide) + .environmentObject(manager) + .eraseToAnyView() + ) + controller.disablesSafeArea = true + controller.automaticallyAllowUIKitAnimationsForNextUpdate = true + controller.view.translatesAutoresizingMaskIntoConstraints = false + return controller + }() + + private lazy var supplementContainerViewController: HostingController = { + let content = SupplementContainerView() + .environmentObject(containerState) + .environmentObject(focusGuide) + .environmentObject(manager) + .eraseToAnyView() + let controller = HostingController(content: content) + controller.disablesSafeArea = true + controller.automaticallyAllowUIKitAnimationsForNextUpdate = true + controller.view.translatesAutoresizingMaskIntoConstraints = false + return controller + }() + + private var playerView: UIView { playerViewController.view } + private var playbackControlsView: UIView { playbackControlsViewController.view } + private var supplementContainerView: UIView { supplementContainerViewController.view } + + private var supplementRegularConstraints: [NSLayoutConstraint] = [] + private var playerRegularConstraints: [NSLayoutConstraint] = [] + private var playbackControlsConstraints: [NSLayoutConstraint] = [] + + private var supplementHeightAnchor: NSLayoutConstraint! + private var supplementBottomAnchor: NSLayoutConstraint! + + private let manager: MediaPlayerManager + private let player: AnyView + private let playbackControls: AnyView + private let containerState: VideoPlayerContainerState + + let focusGuide = FocusGuide() + let onPressEvent = OnPressEvent() + + private var cancellables: Set = [] + + init( + containerState: VideoPlayerContainerState, + manager: MediaPlayerManager, + player: AnyView, + playbackControls: AnyView + ) { + self.containerState = containerState + self.manager = manager + self.player = player + self.playbackControls = playbackControls + + super.init(nibName: nil, bundle: nil) + + containerState.containerView = self + containerState.manager = manager + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - didPresent + + func presentSupplementContainer( + _ didPresent: Bool + ) { + if didPresent { + self.supplementBottomAnchor.constant = -(500 + EdgeInsets.edgePadding * 2) + } else { + self.supplementBottomAnchor.constant = -(100 + EdgeInsets.edgePadding) + } + + containerState.isPresentingPlaybackControls = !didPresent + containerState.supplementOffset = supplementBottomAnchor.constant + + UIView.animate( + withDuration: 0.75, + delay: 0, + usingSpringWithDamping: 0.8, + initialSpringVelocity: 0.4, + options: .allowUserInteraction + ) { + self.view.layoutIfNeeded() + } + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .black + + setupViews() + setupConstraints() + + let gesture = UITapGestureRecognizer(target: self, action: #selector(ignorePress)) + gesture.allowedPressTypes = [NSNumber(value: UIPress.PressType.menu.rawValue)] + view.addGestureRecognizer(gesture) + } + + private func setupViews() { + addChild(playerViewController) + view.addSubview(playerView) + playerViewController.didMove(toParent: self) + playerView.backgroundColor = .black + + addChild(playbackControlsViewController) + view.addSubview(playbackControlsView) + playbackControlsViewController.didMove(toParent: self) + playbackControlsView.backgroundColor = .clear + + addChild(supplementContainerViewController) + view.addSubview(supplementContainerView) + supplementContainerViewController.didMove(toParent: self) + supplementContainerView.backgroundColor = .clear + } + + private func setupConstraints() { + playerRegularConstraints = [ + playerView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + playerView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + playerView.topAnchor.constraint(equalTo: view.topAnchor), + playerView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + ] + + NSLayoutConstraint.activate(playerRegularConstraints) + + supplementBottomAnchor = supplementContainerView.topAnchor.constraint( + equalTo: view.bottomAnchor, + constant: -(100 + EdgeInsets.edgePadding) + ) + containerState.supplementOffset = supplementBottomAnchor.constant + + let constant = (500 + EdgeInsets.edgePadding * 2) + supplementHeightAnchor = supplementContainerView.heightAnchor.constraint(equalToConstant: constant) + + supplementRegularConstraints = [ + supplementContainerView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + supplementContainerView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + supplementBottomAnchor, + supplementHeightAnchor, + ] + + NSLayoutConstraint.activate(supplementRegularConstraints) + + playbackControlsConstraints = [ + playbackControlsView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + playbackControlsView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + playbackControlsView.topAnchor.constraint(equalTo: view.topAnchor), + playbackControlsView.bottomAnchor.constraint(equalTo: supplementContainerView.topAnchor), + ] + + NSLayoutConstraint.activate(playbackControlsConstraints) + } + + @objc + func ignorePress() {} + + override func pressesBegan(_ presses: Set, with event: UIPressesEvent?) { + print(presses) + guard let buttonPress = presses.first else { return } + + onPressEvent.send((type: buttonPress.type, phase: buttonPress.phase)) + } + } +} + +extension VideoPlayer.UIVideoPlayerContainerViewController { + + typealias PressEvent = (type: UIPress.PressType, phase: UIPress.Phase) + typealias OnPressEvent = LegacyEventPublisher +} + +@propertyWrapper +struct OnPressEvent: DynamicProperty { + + @Environment(\.onPressEventPublisher) + private var publisher + + var wrappedValue: VideoPlayer.UIVideoPlayerContainerViewController.OnPressEvent { + publisher + } +} + +extension EnvironmentValues { + + @Entry + var onPressEventPublisher: VideoPlayer.UIVideoPlayerContainerViewController.OnPressEvent = .init() +} diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4ba262a0 --- /dev/null +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -0,0 +1,1768 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 71; + objects = { + +/* Begin PBXBuildFile section */ + 53ABFDDC267972BF00886593 /* TVServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53ABFDDB267972BF00886593 /* TVServices.framework */; }; + 62666DF727E5012C00EC0ECD /* MobileVLCKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53D5E3DC264B47EE00BADDC8 /* MobileVLCKit.xcframework */; }; + 62666DF827E5012C00EC0ECD /* MobileVLCKit.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 53D5E3DC264B47EE00BADDC8 /* MobileVLCKit.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 62666DFA27E5013700EC0ECD /* TVVLCKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 625CB57D2678E81E00530A6E /* TVVLCKit.xcframework */; }; + 62666DFB27E5013700EC0ECD /* TVVLCKit.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 625CB57D2678E81E00530A6E /* TVVLCKit.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 62666DFD27E5014F00EC0ECD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4AE267D40B5000E2F71 /* AudioToolbox.framework */; }; + 62666DFE27E5015700EC0ECD /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4AA267D40AD000E2F71 /* AVFoundation.framework */; }; + 62666DFF27E5016400EC0ECD /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4B0267D40B9000E2F71 /* CFNetwork.framework */; }; + 62666E0127E5016900EC0ECD /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E0027E5016900EC0ECD /* CoreFoundation.framework */; }; + 62666E0227E5016D00EC0ECD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4B6267D40CA000E2F71 /* CoreGraphics.framework */; }; + 62666E0327E5017100EC0ECD /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4B8267D40CE000E2F71 /* CoreMedia.framework */; }; + 62666E0427E5017500EC0ECD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4BA267D40D2000E2F71 /* CoreText.framework */; }; + 62666E0627E5017A00EC0ECD /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E0527E5017A00EC0ECD /* CoreVideo.framework */; }; + 62666E0C27E501A500EC0ECD /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E0B27E501A500EC0ECD /* OpenGLES.framework */; }; + 62666E0D27E501AA00EC0ECD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4C2267D40EC000E2F71 /* QuartzCore.framework */; }; + 62666E0E27E501AF00EC0ECD /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4C4267D40F0000E2F71 /* Security.framework */; }; + 62666E1027E501B400EC0ECD /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E0F27E501B400EC0ECD /* VideoToolbox.framework */; }; + 62666E1127E501B900EC0ECD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4C8267D40F7000E2F71 /* UIKit.framework */; }; + 62666E1327E501C300EC0ECD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1227E501C300EC0ECD /* AudioToolbox.framework */; }; + 62666E1527E501C800EC0ECD /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1427E501C800EC0ECD /* AVFoundation.framework */; }; + 62666E1727E501CC00EC0ECD /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1627E501CC00EC0ECD /* CFNetwork.framework */; }; + 62666E1927E501D000EC0ECD /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1827E501D000EC0ECD /* CoreFoundation.framework */; }; + 62666E1B27E501D400EC0ECD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1A27E501D400EC0ECD /* CoreGraphics.framework */; }; + 62666E1D27E501DB00EC0ECD /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1C27E501DB00EC0ECD /* CoreMedia.framework */; }; + 62666E1F27E501DF00EC0ECD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E1E27E501DF00EC0ECD /* CoreText.framework */; }; + 62666E2127E501E400EC0ECD /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2027E501E400EC0ECD /* CoreVideo.framework */; }; + 62666E2327E501EB00EC0ECD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2227E501EB00EC0ECD /* Foundation.framework */; }; + 62666E2427E501F300EC0ECD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4BC267D40D8000E2F71 /* Foundation.framework */; }; + 62666E2A27E5020A00EC0ECD /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2927E5020A00EC0ECD /* OpenGLES.framework */; }; + 62666E2C27E5021000EC0ECD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2B27E5021000EC0ECD /* QuartzCore.framework */; }; + 62666E2E27E5021400EC0ECD /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2D27E5021400EC0ECD /* Security.framework */; }; + 62666E3027E5021800EC0ECD /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E2F27E5021800EC0ECD /* VideoToolbox.framework */; }; + 62666E3227E5021E00EC0ECD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62666E3127E5021E00EC0ECD /* UIKit.framework */; }; + 62666E3927E502CE00EC0ECD /* SwizzleSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 62666E3827E502CE00EC0ECD /* SwizzleSwift */; }; + 62666E3E27E503FA00EC0ECD /* MediaAccessibility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4BE267D40E4000E2F71 /* MediaAccessibility.framework */; }; + 62666E3F27E5040300EC0ECD /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5362E4C6267D40F4000E2F71 /* SystemConfiguration.framework */; }; + BD88CB422D77E6A0006BB5E3 /* TVOSPicker in Frameworks */ = {isa = PBXBuildFile; productRef = BD88CB412D77E6A0006BB5E3 /* TVOSPicker */; }; + E1002B682793CFBA00E47059 /* Algorithms in Frameworks */ = {isa = PBXBuildFile; productRef = E1002B672793CFBA00E47059 /* Algorithms */; }; + E1002B6B2793E36600E47059 /* Algorithms in Frameworks */ = {isa = PBXBuildFile; productRef = E1002B6A2793E36600E47059 /* Algorithms */; }; + E10706102942F57D00646DAF /* Pulse in Frameworks */ = {isa = PBXBuildFile; productRef = E107060F2942F57D00646DAF /* Pulse */; }; + E10706122942F57D00646DAF /* PulseLogHandler in Frameworks */ = {isa = PBXBuildFile; productRef = E10706112942F57D00646DAF /* PulseLogHandler */; }; + E10706142942F57D00646DAF /* PulseUI in Frameworks */ = {isa = PBXBuildFile; productRef = E10706132942F57D00646DAF /* PulseUI */; }; + E1137D2F2E090C1A0091EB60 /* VLCUI in Frameworks */ = {isa = PBXBuildFile; productRef = E1137D2E2E090C1A0091EB60 /* VLCUI */; }; + E1137D312E090C230091EB60 /* VLCUI in Frameworks */ = {isa = PBXBuildFile; productRef = E1137D302E090C230091EB60 /* VLCUI */; }; + E113A2A72B5A178D009CAAAA /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E113A2A62B5A178D009CAAAA /* CollectionHStack */; }; + E113A2AA2B5A179A009CAAAA /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E113A2A92B5A179A009CAAAA /* CollectionVGrid */; }; + E114DB332B1944FA00B75FB3 /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E114DB322B1944FA00B75FB3 /* CollectionVGrid */; }; + E1153DA42BBA614F00424D36 /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E1153DA32BBA614F00424D36 /* CollectionVGrid */; }; + E1153DAC2BBA6AD200424D36 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E1153DAB2BBA6AD200424D36 /* CollectionHStack */; }; + E1153DD02BBB634F00424D36 /* SVGKit in Frameworks */ = {isa = PBXBuildFile; productRef = E1153DCF2BBB634F00424D36 /* SVGKit */; }; + E1153DD22BBB649C00424D36 /* SVGKit in Frameworks */ = {isa = PBXBuildFile; productRef = E1153DD12BBB649C00424D36 /* SVGKit */; }; + E1155ACB2D0584A90021557A /* IdentifiedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = E1155ACA2D0584A90021557A /* IdentifiedCollections */; }; + E11ADE842E7E73B6008074FC /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E11ADE832E7E73B6008074FC /* StatefulMacros */; }; + E12186DE2718F1C50010884C /* Defaults in Frameworks */ = {isa = PBXBuildFile; productRef = E12186DD2718F1C50010884C /* Defaults */; }; + E12B93072947CD0F00CE0BD9 /* Pulse in Frameworks */ = {isa = PBXBuildFile; productRef = E15210532946DF1B00375CC2 /* Pulse */; }; + E132D3C82BD200C10058A2DF /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E132D3C72BD200C10058A2DF /* CollectionVGrid */; }; + E134DD2C2E7F4DC300AED027 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E134DD2B2E7F4DC300AED027 /* StatefulMacros */; }; + E1388A46293F0ABA009721B1 /* SwizzleSwift in Frameworks */ = {isa = PBXBuildFile; productRef = E1388A45293F0ABA009721B1 /* SwizzleSwift */; }; + E1392FED2BA218A80034110D /* SwiftUIIntrospect in Frameworks */ = {isa = PBXBuildFile; productRef = E1392FEC2BA218A80034110D /* SwiftUIIntrospect */; }; + E13AF3B628A0C598009093AB /* Nuke in Frameworks */ = {isa = PBXBuildFile; productRef = E13AF3B528A0C598009093AB /* Nuke */; }; + E13AF3B828A0C598009093AB /* NukeExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = E13AF3B728A0C598009093AB /* NukeExtensions */; }; + E13AF3BA28A0C598009093AB /* NukeUI in Frameworks */ = {isa = PBXBuildFile; productRef = E13AF3B928A0C598009093AB /* NukeUI */; }; + E13AF3BC28A0C59E009093AB /* BlurHashKit in Frameworks */ = {isa = PBXBuildFile; productRef = E13AF3BB28A0C59E009093AB /* BlurHashKit */; }; + E13CCE4C2E6C08710070965F /* LNPopupUI-Static in Frameworks */ = {isa = PBXBuildFile; productRef = E13CCE4B2E6C08710070965F /* LNPopupUI-Static */; }; + E13DD3C62716499E009D4DAF /* CoreStore in Frameworks */ = {isa = PBXBuildFile; productRef = E13DD3C52716499E009D4DAF /* CoreStore */; }; + E13DD3CD27164CA7009D4DAF /* CoreStore in Frameworks */ = {isa = PBXBuildFile; productRef = E13DD3CC27164CA7009D4DAF /* CoreStore */; }; + E13DD3D327168E65009D4DAF /* Defaults in Frameworks */ = {isa = PBXBuildFile; productRef = E13DD3D227168E65009D4DAF /* Defaults */; }; + E145EB4B2BE16849003BF6F3 /* KeychainSwift in Frameworks */ = {isa = PBXBuildFile; productRef = E145EB4A2BE16849003BF6F3 /* KeychainSwift */; }; + E14EA1652BF70A8E00DE757A /* Mantis in Frameworks */ = {isa = PBXBuildFile; productRef = E14EA1642BF70A8E00DE757A /* Mantis */; }; + E150C0C12BFD62FD00944FFA /* JellyfinAPI in Frameworks */ = {isa = PBXBuildFile; productRef = E150C0C02BFD62FD00944FFA /* JellyfinAPI */; }; + E150C0C32BFD6DA200944FFA /* JellyfinAPI in Frameworks */ = {isa = PBXBuildFile; productRef = E150C0C22BFD6DA200944FFA /* JellyfinAPI */; }; + E15210562946DF1B00375CC2 /* PulseLogHandler in Frameworks */ = {isa = PBXBuildFile; productRef = E15210552946DF1B00375CC2 /* PulseLogHandler */; }; + E15210582946DF1B00375CC2 /* PulseUI in Frameworks */ = {isa = PBXBuildFile; productRef = E15210572946DF1B00375CC2 /* PulseUI */; }; + E1523F822B132C350062821A /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E1523F812B132C350062821A /* CollectionHStack */; }; + E1575E3C293C6B15001665B1 /* Files in Frameworks */ = {isa = PBXBuildFile; productRef = E1575E3B293C6B15001665B1 /* Files */; }; + E1575E58293E7685001665B1 /* Files in Frameworks */ = {isa = PBXBuildFile; productRef = E1575E57293E7685001665B1 /* Files */; }; + E15D4F052B1B0C3C00442DB8 /* PreferencesView in Frameworks */ = {isa = PBXBuildFile; productRef = E15D4F042B1B0C3C00442DB8 /* PreferencesView */; }; + E15EFA842BA167350080E926 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E15EFA832BA167350080E926 /* CollectionHStack */; }; + E15EFA862BA1685F0080E926 /* SwiftUIIntrospect in Frameworks */ = {isa = PBXBuildFile; productRef = E15EFA852BA1685F0080E926 /* SwiftUIIntrospect */; }; + E164308C2E3AA9710028D4E8 /* Transmission in Frameworks */ = {isa = PBXBuildFile; productRef = E164308B2E3AA9710028D4E8 /* Transmission */; }; + E175679A2E0375F300B90F41 /* VLCUI in Frameworks */ = {isa = PBXBuildFile; productRef = E17567992E0375F300B90F41 /* VLCUI */; }; + E176EBDE2D050067009F4CF1 /* IdentifiedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = E176EBDD2D050067009F4CF1 /* IdentifiedCollections */; }; + E176EBE02D0502A6009F4CF1 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E176EBDF2D0502A6009F4CF1 /* CollectionHStack */; }; + E176EBE32D0502C6009F4CF1 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E176EBE22D0502C6009F4CF1 /* CollectionHStack */; }; + E176EBE92D050925009F4CF1 /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E176EBE82D050925009F4CF1 /* CollectionVGrid */; }; + E18443CB2A037773002DDDC8 /* UDPBroadcast in Frameworks */ = {isa = PBXBuildFile; productRef = E18443CA2A037773002DDDC8 /* UDPBroadcast */; }; + E18D6AA62BAA96F000A0D167 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E18D6AA52BAA96F000A0D167 /* CollectionHStack */; }; + E19138CA2E7E7FA20061E464 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E19138C92E7E7FA20061E464 /* StatefulMacros */; }; + E192608328D2D0DB002314B4 /* Factory in Frameworks */ = {isa = PBXBuildFile; productRef = E192608228D2D0DB002314B4 /* Factory */; }; + E192608828D2E5F0002314B4 /* Factory in Frameworks */ = {isa = PBXBuildFile; productRef = E192608728D2E5F0002314B4 /* Factory */; }; + E19D41B22BF2BFA50082B8B2 /* KeychainSwift in Frameworks */ = {isa = PBXBuildFile; productRef = E19D41B12BF2BFA50082B8B2 /* KeychainSwift */; }; + E19DDEC72948EF9900954E10 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = E19DDEC62948EF9900954E10 /* OrderedCollections */; }; + E19E6E0528A0B958005C10C8 /* Nuke in Frameworks */ = {isa = PBXBuildFile; productRef = E19E6E0428A0B958005C10C8 /* Nuke */; }; + E19E6E0728A0B958005C10C8 /* NukeUI in Frameworks */ = {isa = PBXBuildFile; productRef = E19E6E0628A0B958005C10C8 /* NukeUI */; }; + E19E6E0A28A0BEFF005C10C8 /* BlurHashKit in Frameworks */ = {isa = PBXBuildFile; productRef = E19E6E0928A0BEFF005C10C8 /* BlurHashKit */; }; + E19FA1A02E84F0A800F5A60D /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E19FA19F2E84F0A800F5A60D /* StatefulMacros */; }; + E1A09F722D05933D00835265 /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E1A09F712D05933D00835265 /* CollectionVGrid */; }; + E1A09F752D05935100835265 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E1A09F742D05935100835265 /* CollectionHStack */; }; + E1A09F772D05935A00835265 /* CollectionVGrid in Frameworks */ = {isa = PBXBuildFile; productRef = E1A09F762D05935A00835265 /* CollectionVGrid */; }; + E1A09F792D05935A00835265 /* CollectionHStack in Frameworks */ = {isa = PBXBuildFile; productRef = E1A09F782D05935A00835265 /* CollectionHStack */; }; + E1A76F1A2E8369A500A5F2C1 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E1A76F192E8369A500A5F2C1 /* StatefulMacros */; }; + E1A7B1652B9A9F7800152546 /* PreferencesView in Frameworks */ = {isa = PBXBuildFile; productRef = E1A7B1642B9A9F7800152546 /* PreferencesView */; }; + E1B5F7A729577BCE004B26CF /* Pulse in Frameworks */ = {isa = PBXBuildFile; productRef = E1B5F7A629577BCE004B26CF /* Pulse */; }; + E1B5F7A929577BCE004B26CF /* PulseLogHandler in Frameworks */ = {isa = PBXBuildFile; productRef = E1B5F7A829577BCE004B26CF /* PulseLogHandler */; }; + E1B5F7AB29577BCE004B26CF /* PulseUI in Frameworks */ = {isa = PBXBuildFile; productRef = E1B5F7AA29577BCE004B26CF /* PulseUI */; }; + E1B5F7AD29577BDD004B26CF /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = E1B5F7AC29577BDD004B26CF /* OrderedCollections */; }; + E1B9743B2E86F51D008CED48 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E1B9743A2E86F51D008CED48 /* StatefulMacros */; }; + E1B9743E2E86F7F9008CED48 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E1B9743D2E86F7F9008CED48 /* StatefulMacros */; }; + E1B974402E86F802008CED48 /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E1B9743F2E86F802008CED48 /* StatefulMacros */; }; + E1DC9814296DC06200982F06 /* PulseLogHandler in Frameworks */ = {isa = PBXBuildFile; productRef = E1DC9813296DC06200982F06 /* PulseLogHandler */; }; + E1E2D7BF2E3FD936004E2E5F /* Transmission in Frameworks */ = {isa = PBXBuildFile; productRef = E1E2D7BE2E3FD936004E2E5F /* Transmission */; }; + E1FAD1C62A0375BA007F5521 /* UDPBroadcast in Frameworks */ = {isa = PBXBuildFile; productRef = E1FAD1C52A0375BA007F5521 /* UDPBroadcast */; }; + E1FADDF12E84B63600FB310E /* StatefulMacros in Frameworks */ = {isa = PBXBuildFile; productRef = E1FADDF02E84B63600FB310E /* StatefulMacros */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 62666DF927E5012C00EC0ECD /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 62666DF827E5012C00EC0ECD /* MobileVLCKit.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 62666DFC27E5013700EC0ECD /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 62666DFB27E5013700EC0ECD /* TVVLCKit.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 535870602669D21600D05A09 /* Swiftfin tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Swiftfin tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5362E4A7267D4067000E2F71 /* GoogleCast.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleCast.framework; path = "../../Downloads/GoogleCastSDK-ios-4.6.0_dynamic/GoogleCast.framework"; sourceTree = ""; }; + 5362E4AA267D40AD000E2F71 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 5362E4AC267D40B1000E2F71 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 5362E4AE267D40B5000E2F71 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 5362E4B0267D40B9000E2F71 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; + 5362E4B2267D40BE000E2F71 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; + 5362E4B4267D40C5000E2F71 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 5362E4B6267D40CA000E2F71 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 5362E4B8267D40CE000E2F71 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; + 5362E4BA267D40D2000E2F71 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 5362E4BC267D40D8000E2F71 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 5362E4BE267D40E4000E2F71 /* MediaAccessibility.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaAccessibility.framework; path = System/Library/Frameworks/MediaAccessibility.framework; sourceTree = SDKROOT; }; + 5362E4C0267D40E8000E2F71 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; + 5362E4C2267D40EC000E2F71 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 5362E4C4267D40F0000E2F71 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 5362E4C6267D40F4000E2F71 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 5362E4C8267D40F7000E2F71 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 5377CBF1263B596A003A4E83 /* Swiftfin iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Swiftfin iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 53ABFDDB267972BF00886593 /* TVServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TVServices.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.0.sdk/System/Library/Frameworks/TVServices.framework; sourceTree = DEVELOPER_DIR; }; + 53D5E3DC264B47EE00BADDC8 /* MobileVLCKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = MobileVLCKit.xcframework; path = Carthage/Build/MobileVLCKit.xcframework; sourceTree = ""; }; + 625CB57D2678E81E00530A6E /* TVVLCKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TVVLCKit.xcframework; path = Carthage/Build/TVVLCKit.xcframework; sourceTree = ""; }; + 62666E0027E5016900EC0ECD /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 62666E0527E5017A00EC0ECD /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; }; + 62666E0727E5018D00EC0ECD /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; + 62666E0827E5019800EC0ECD /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 62666E0927E5019C00EC0ECD /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; + 62666E0A27E501A100EC0ECD /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; + 62666E0B27E501A500EC0ECD /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + 62666E0F27E501B400EC0ECD /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; + 62666E1227E501C300EC0ECD /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1427E501C800EC0ECD /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1627E501CC00EC0ECD /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1827E501D000EC0ECD /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1A27E501D400EC0ECD /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1C27E501DB00EC0ECD /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CoreMedia.framework; sourceTree = DEVELOPER_DIR; }; + 62666E1E27E501DF00EC0ECD /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2027E501E400EC0ECD /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/CoreVideo.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2227E501EB00EC0ECD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2527E501FA00EC0ECD /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/usr/lib/libbz2.tbd; sourceTree = DEVELOPER_DIR; }; + 62666E2627E501FE00EC0ECD /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/usr/lib/libc++.tbd"; sourceTree = DEVELOPER_DIR; }; + 62666E2727E5020200EC0ECD /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/usr/lib/libiconv.tbd; sourceTree = DEVELOPER_DIR; }; + 62666E2827E5020600EC0ECD /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/usr/lib/libxml2.tbd; sourceTree = DEVELOPER_DIR; }; + 62666E2927E5020A00EC0ECD /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2B27E5021000EC0ECD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2D27E5021400EC0ECD /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 62666E2F27E5021800EC0ECD /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/VideoToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 62666E3127E5021E00EC0ECD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.4.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 62666E3A27E503E400EC0ECD /* GoogleCastSDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GoogleCastSDK.xcframework; path = Frameworks/GoogleCastSDK.xcframework; sourceTree = ""; }; + 628B95212670CABD0091AF3B /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 628B95232670CABD0091AF3B /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + 637FCAF3287B5B2600C0A353 /* UDPBroadcast.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = UDPBroadcast.xcframework; path = Carthage/Build/UDPBroadcast.xcframework; sourceTree = ""; }; + E1B2AB9628808CDF0072B3B9 /* GoogleCast.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GoogleCast.xcframework; path = Carthage/Build/GoogleCast.xcframework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + E14561A22DFCAE51008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Resources/Info.plist, + ); + target = 5377CBF0263B596A003A4E83 /* Swiftfin iOS */; + }; + E14561A32DFCAE51008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Resources/Assets.xcassets, + ); + target = 5358705F2669D21600D05A09 /* Swiftfin tvOS */; + }; + E14565D92DFCAE6E008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Extensions/JellyfinAPI/TaskTriggerType.swift, + Objects/ItemArrayElements.swift, + ViewModels/AdminDashboard/ActiveSessionsViewModel.swift, + ViewModels/AdminDashboard/AddServerUserViewModel.swift, + ViewModels/AdminDashboard/APIKeysViewModel.swift, + ViewModels/AdminDashboard/DevicesViewModel.swift, + ViewModels/AdminDashboard/ServerActivityDetailViewModel.swift, + ViewModels/AdminDashboard/ServerActivityViewModel.swift, + ViewModels/AdminDashboard/ServerTaskObserver.swift, + ViewModels/AdminDashboard/ServerTasksViewModel.swift, + ViewModels/AdminDashboard/ServerUserAdminViewModel.swift, + ViewModels/AdminDashboard/ServerUsersViewModel.swift, + ViewModels/DownloadListViewModel.swift, + ViewModels/ItemAdministration/IdentifyItemViewModel.swift, + ViewModels/ItemAdministration/ItemEditorViewModel/GenreEditorViewModel.swift, + ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift, + ViewModels/ItemAdministration/ItemEditorViewModel/PeopleEditorViewModel.swift, + ViewModels/ItemAdministration/ItemEditorViewModel/StudioEditorViewModel.swift, + ViewModels/ItemAdministration/ItemEditorViewModel/TagEditorViewModel.swift, + ViewModels/ItemAdministration/ItemImagesViewModel.swift, + ViewModels/ItemAdministration/RemoteImageInfoViewModel.swift, + ViewModels/QuickConnectAuthorizeViewModel.swift, + ViewModels/ServerCheckViewModel.swift, + ); + target = 5358705F2669D21600D05A09 /* Swiftfin tvOS */; + }; + E14567272DFCAEFD008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Resources/Info.plist, + ); + target = 5358705F2669D21600D05A09 /* Swiftfin tvOS */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + E14560852DFCAE51008FF700 /* Swiftfin */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E14561A22DFCAE51008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E14561A32DFCAE51008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Swiftfin; sourceTree = ""; }; + E14563272DFCAE6E008FF700 /* Shared */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E14565D92DFCAE6E008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Shared; sourceTree = ""; }; + E14565DD2DFCAE78008FF700 /* Scripts */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Scripts; sourceTree = ""; }; + E145669F2DFCAEFD008FF700 /* Swiftfin tvOS */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E14567272DFCAEFD008FF700 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = "Swiftfin tvOS"; sourceTree = ""; }; + E1456FC82DFCB323008FF700 /* Translations */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Translations; sourceTree = ""; }; + E150B7D12DFF2E7C00DC7CF4 /* XcodeConfig */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = XcodeConfig; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 5358705D2669D21600D05A09 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E1137D312E090C230091EB60 /* VLCUI in Frameworks */, + 62666E1727E501CC00EC0ECD /* CFNetwork.framework in Frameworks */, + 62666DFA27E5013700EC0ECD /* TVVLCKit.xcframework in Frameworks */, + 62666E3227E5021E00EC0ECD /* UIKit.framework in Frameworks */, + 62666E2A27E5020A00EC0ECD /* OpenGLES.framework in Frameworks */, + E1002B6B2793E36600E47059 /* Algorithms in Frameworks */, + 62666E1D27E501DB00EC0ECD /* CoreMedia.framework in Frameworks */, + 62666E3027E5021800EC0ECD /* VideoToolbox.framework in Frameworks */, + BD88CB422D77E6A0006BB5E3 /* TVOSPicker in Frameworks */, + 62666E2327E501EB00EC0ECD /* Foundation.framework in Frameworks */, + 62666E2127E501E400EC0ECD /* CoreVideo.framework in Frameworks */, + E1392FED2BA218A80034110D /* SwiftUIIntrospect in Frameworks */, + E13AF3B828A0C598009093AB /* NukeExtensions in Frameworks */, + E1575E58293E7685001665B1 /* Files in Frameworks */, + E1B5F7A729577BCE004B26CF /* Pulse in Frameworks */, + E1A09F792D05935A00835265 /* CollectionHStack in Frameworks */, + E13AF3BA28A0C598009093AB /* NukeUI in Frameworks */, + E1B5F7AB29577BCE004B26CF /* PulseUI in Frameworks */, + E1B5F7A929577BCE004B26CF /* PulseLogHandler in Frameworks */, + 62666E1B27E501D400EC0ECD /* CoreGraphics.framework in Frameworks */, + E1388A46293F0ABA009721B1 /* SwizzleSwift in Frameworks */, + 62666E2C27E5021000EC0ECD /* QuartzCore.framework in Frameworks */, + E1B974402E86F802008CED48 /* StatefulMacros in Frameworks */, + 62666E1927E501D000EC0ECD /* CoreFoundation.framework in Frameworks */, + E19D41B22BF2BFA50082B8B2 /* KeychainSwift in Frameworks */, + E18443CB2A037773002DDDC8 /* UDPBroadcast in Frameworks */, + E1155ACB2D0584A90021557A /* IdentifiedCollections in Frameworks */, + 62666E2E27E5021400EC0ECD /* Security.framework in Frameworks */, + E1B5F7AD29577BDD004B26CF /* OrderedCollections in Frameworks */, + 53ABFDDC267972BF00886593 /* TVServices.framework in Frameworks */, + 62666E1F27E501DF00EC0ECD /* CoreText.framework in Frameworks */, + E13DD3CD27164CA7009D4DAF /* CoreStore in Frameworks */, + E1A7B1652B9A9F7800152546 /* PreferencesView in Frameworks */, + E1A09F772D05935A00835265 /* CollectionVGrid in Frameworks */, + E1153DD22BBB649C00424D36 /* SVGKit in Frameworks */, + 62666E1527E501C800EC0ECD /* AVFoundation.framework in Frameworks */, + E13AF3BC28A0C59E009093AB /* BlurHashKit in Frameworks */, + E150C0C32BFD6DA200944FFA /* JellyfinAPI in Frameworks */, + 62666E1327E501C300EC0ECD /* AudioToolbox.framework in Frameworks */, + E1E2D7BF2E3FD936004E2E5F /* Transmission in Frameworks */, + E13AF3B628A0C598009093AB /* Nuke in Frameworks */, + E12186DE2718F1C50010884C /* Defaults in Frameworks */, + E192608828D2E5F0002314B4 /* Factory in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5377CBEE263B596A003A4E83 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E12B93072947CD0F00CE0BD9 /* Pulse in Frameworks */, + 62666E3E27E503FA00EC0ECD /* MediaAccessibility.framework in Frameworks */, + 62666DFF27E5016400EC0ECD /* CFNetwork.framework in Frameworks */, + E13DD3D327168E65009D4DAF /* Defaults in Frameworks */, + E1002B682793CFBA00E47059 /* Algorithms in Frameworks */, + E113A2AA2B5A179A009CAAAA /* CollectionVGrid in Frameworks */, + 62666E1127E501B900EC0ECD /* UIKit.framework in Frameworks */, + E15210582946DF1B00375CC2 /* PulseUI in Frameworks */, + E1153DA42BBA614F00424D36 /* CollectionVGrid in Frameworks */, + 62666DF727E5012C00EC0ECD /* MobileVLCKit.xcframework in Frameworks */, + 62666E0327E5017100EC0ECD /* CoreMedia.framework in Frameworks */, + E1B9743B2E86F51D008CED48 /* StatefulMacros in Frameworks */, + E10706122942F57D00646DAF /* PulseLogHandler in Frameworks */, + 62666E0627E5017A00EC0ECD /* CoreVideo.framework in Frameworks */, + E19DDEC72948EF9900954E10 /* OrderedCollections in Frameworks */, + E10706102942F57D00646DAF /* Pulse in Frameworks */, + E176EBE92D050925009F4CF1 /* CollectionVGrid in Frameworks */, + E192608328D2D0DB002314B4 /* Factory in Frameworks */, + E150C0C12BFD62FD00944FFA /* JellyfinAPI in Frameworks */, + E1B9743E2E86F7F9008CED48 /* StatefulMacros in Frameworks */, + E113A2A72B5A178D009CAAAA /* CollectionHStack in Frameworks */, + E19138CA2E7E7FA20061E464 /* StatefulMacros in Frameworks */, + E1523F822B132C350062821A /* CollectionHStack in Frameworks */, + E145EB4B2BE16849003BF6F3 /* KeychainSwift in Frameworks */, + E10706142942F57D00646DAF /* PulseUI in Frameworks */, + E175679A2E0375F300B90F41 /* VLCUI in Frameworks */, + E13CCE4C2E6C08710070965F /* LNPopupUI-Static in Frameworks */, + 62666E0227E5016D00EC0ECD /* CoreGraphics.framework in Frameworks */, + E1575E3C293C6B15001665B1 /* Files in Frameworks */, + E1137D2F2E090C1A0091EB60 /* VLCUI in Frameworks */, + E176EBE02D0502A6009F4CF1 /* CollectionHStack in Frameworks */, + E1FADDF12E84B63600FB310E /* StatefulMacros in Frameworks */, + E14EA1652BF70A8E00DE757A /* Mantis in Frameworks */, + E176EBDE2D050067009F4CF1 /* IdentifiedCollections in Frameworks */, + 62666E1027E501B400EC0ECD /* VideoToolbox.framework in Frameworks */, + 62666E0C27E501A500EC0ECD /* OpenGLES.framework in Frameworks */, + E19E6E0A28A0BEFF005C10C8 /* BlurHashKit in Frameworks */, + E1FAD1C62A0375BA007F5521 /* UDPBroadcast in Frameworks */, + E1153DD02BBB634F00424D36 /* SVGKit in Frameworks */, + E19FA1A02E84F0A800F5A60D /* StatefulMacros in Frameworks */, + E18D6AA62BAA96F000A0D167 /* CollectionHStack in Frameworks */, + 62666E0127E5016900EC0ECD /* CoreFoundation.framework in Frameworks */, + 62666E2427E501F300EC0ECD /* Foundation.framework in Frameworks */, + E132D3C82BD200C10058A2DF /* CollectionVGrid in Frameworks */, + E114DB332B1944FA00B75FB3 /* CollectionVGrid in Frameworks */, + E15210562946DF1B00375CC2 /* PulseLogHandler in Frameworks */, + E11ADE842E7E73B6008074FC /* StatefulMacros in Frameworks */, + 62666E0427E5017500EC0ECD /* CoreText.framework in Frameworks */, + E13DD3C62716499E009D4DAF /* CoreStore in Frameworks */, + E176EBE32D0502C6009F4CF1 /* CollectionHStack in Frameworks */, + 62666E0E27E501AF00EC0ECD /* Security.framework in Frameworks */, + E1DC9814296DC06200982F06 /* PulseLogHandler in Frameworks */, + E15EFA842BA167350080E926 /* CollectionHStack in Frameworks */, + E15EFA862BA1685F0080E926 /* SwiftUIIntrospect in Frameworks */, + 62666DFE27E5015700EC0ECD /* AVFoundation.framework in Frameworks */, + 62666DFD27E5014F00EC0ECD /* AudioToolbox.framework in Frameworks */, + E1A09F722D05933D00835265 /* CollectionVGrid in Frameworks */, + E19E6E0528A0B958005C10C8 /* Nuke in Frameworks */, + E1153DAC2BBA6AD200424D36 /* CollectionHStack in Frameworks */, + 62666E0D27E501AA00EC0ECD /* QuartzCore.framework in Frameworks */, + E15D4F052B1B0C3C00442DB8 /* PreferencesView in Frameworks */, + E19E6E0728A0B958005C10C8 /* NukeUI in Frameworks */, + E134DD2C2E7F4DC300AED027 /* StatefulMacros in Frameworks */, + E1A76F1A2E8369A500A5F2C1 /* StatefulMacros in Frameworks */, + 62666E3F27E5040300EC0ECD /* SystemConfiguration.framework in Frameworks */, + E1A09F752D05935100835265 /* CollectionHStack in Frameworks */, + E164308C2E3AA9710028D4E8 /* Transmission in Frameworks */, + 62666E3927E502CE00EC0ECD /* SwizzleSwift in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5377CBE8263B596A003A4E83 = { + isa = PBXGroup; + children = ( + E14560852DFCAE51008FF700 /* Swiftfin */, + E145669F2DFCAEFD008FF700 /* Swiftfin tvOS */, + E14563272DFCAE6E008FF700 /* Shared */, + E1456FC82DFCB323008FF700 /* Translations */, + 5377CBF2263B596A003A4E83 /* Products */, + 53D5E3DB264B47EE00BADDC8 /* Frameworks */, + E14565DD2DFCAE78008FF700 /* Scripts */, + E150B7D12DFF2E7C00DC7CF4 /* XcodeConfig */, + ); + sourceTree = ""; + }; + 5377CBF2263B596A003A4E83 /* Products */ = { + isa = PBXGroup; + children = ( + 5377CBF1263B596A003A4E83 /* Swiftfin iOS.app */, + 535870602669D21600D05A09 /* Swiftfin tvOS.app */, + ); + name = Products; + sourceTree = ""; + }; + 53D5E3DB264B47EE00BADDC8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E1B2AB9628808CDF0072B3B9 /* GoogleCast.xcframework */, + 637FCAF3287B5B2600C0A353 /* UDPBroadcast.xcframework */, + 62666E3A27E503E400EC0ECD /* GoogleCastSDK.xcframework */, + 62666E3127E5021E00EC0ECD /* UIKit.framework */, + 62666E2F27E5021800EC0ECD /* VideoToolbox.framework */, + 62666E2D27E5021400EC0ECD /* Security.framework */, + 62666E2B27E5021000EC0ECD /* QuartzCore.framework */, + 62666E2927E5020A00EC0ECD /* OpenGLES.framework */, + 62666E2827E5020600EC0ECD /* libxml2.tbd */, + 62666E2727E5020200EC0ECD /* libiconv.tbd */, + 62666E2627E501FE00EC0ECD /* libc++.tbd */, + 62666E2527E501FA00EC0ECD /* libbz2.tbd */, + 62666E2227E501EB00EC0ECD /* Foundation.framework */, + 62666E2027E501E400EC0ECD /* CoreVideo.framework */, + 62666E1E27E501DF00EC0ECD /* CoreText.framework */, + 62666E1C27E501DB00EC0ECD /* CoreMedia.framework */, + 62666E1A27E501D400EC0ECD /* CoreGraphics.framework */, + 62666E1827E501D000EC0ECD /* CoreFoundation.framework */, + 62666E1627E501CC00EC0ECD /* CFNetwork.framework */, + 62666E1427E501C800EC0ECD /* AVFoundation.framework */, + 62666E1227E501C300EC0ECD /* AudioToolbox.framework */, + 62666E0F27E501B400EC0ECD /* VideoToolbox.framework */, + 62666E0B27E501A500EC0ECD /* OpenGLES.framework */, + 62666E0A27E501A100EC0ECD /* libxml2.tbd */, + 62666E0927E5019C00EC0ECD /* libiconv.tbd */, + 62666E0827E5019800EC0ECD /* libc++.tbd */, + 62666E0727E5018D00EC0ECD /* libbz2.tbd */, + 62666E0527E5017A00EC0ECD /* CoreVideo.framework */, + 62666E0027E5016900EC0ECD /* CoreFoundation.framework */, + 5362E4C8267D40F7000E2F71 /* UIKit.framework */, + 5362E4C6267D40F4000E2F71 /* SystemConfiguration.framework */, + 5362E4C4267D40F0000E2F71 /* Security.framework */, + 5362E4C2267D40EC000E2F71 /* QuartzCore.framework */, + 5362E4C0267D40E8000E2F71 /* MediaPlayer.framework */, + 5362E4BE267D40E4000E2F71 /* MediaAccessibility.framework */, + 5362E4BC267D40D8000E2F71 /* Foundation.framework */, + 5362E4BA267D40D2000E2F71 /* CoreText.framework */, + 5362E4B8267D40CE000E2F71 /* CoreMedia.framework */, + 5362E4B6267D40CA000E2F71 /* CoreGraphics.framework */, + 5362E4B4267D40C5000E2F71 /* CoreData.framework */, + 5362E4B2267D40BE000E2F71 /* CoreBluetooth.framework */, + 5362E4B0267D40B9000E2F71 /* CFNetwork.framework */, + 5362E4AE267D40B5000E2F71 /* AudioToolbox.framework */, + 5362E4AC267D40B1000E2F71 /* Accelerate.framework */, + 5362E4AA267D40AD000E2F71 /* AVFoundation.framework */, + 5362E4A7267D4067000E2F71 /* GoogleCast.framework */, + 53ABFDDB267972BF00886593 /* TVServices.framework */, + 625CB57D2678E81E00530A6E /* TVVLCKit.xcframework */, + 53D5E3DC264B47EE00BADDC8 /* MobileVLCKit.xcframework */, + 628B95212670CABD0091AF3B /* WidgetKit.framework */, + 628B95232670CABD0091AF3B /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 5358705F2669D21600D05A09 /* Swiftfin tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 535870712669D21700D05A09 /* Build configuration list for PBXNativeTarget "Swiftfin tvOS" */; + buildPhases = ( + 4EC71FBD2D1620AF00D0B3A8 /* Alphabetize Strings */, + 6286F0A3271C0ABA00C40ED5 /* Run Swiftgen.swift */, + BD83D7852B55EEB600652C24 /* Run SwiftFormat */, + 5358705C2669D21600D05A09 /* Sources */, + 5358705D2669D21600D05A09 /* Frameworks */, + 5358705E2669D21600D05A09 /* Resources */, + 62666DFC27E5013700EC0ECD /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + E14563272DFCAE6E008FF700 /* Shared */, + E145669F2DFCAEFD008FF700 /* Swiftfin tvOS */, + E1456FC82DFCB323008FF700 /* Translations */, + E150B7D12DFF2E7C00DC7CF4 /* XcodeConfig */, + ); + name = "Swiftfin tvOS"; + packageProductDependencies = ( + E13DD3CC27164CA7009D4DAF /* CoreStore */, + E12186DD2718F1C50010884C /* Defaults */, + E1002B6A2793E36600E47059 /* Algorithms */, + E13AF3B528A0C598009093AB /* Nuke */, + E13AF3B728A0C598009093AB /* NukeExtensions */, + E13AF3B928A0C598009093AB /* NukeUI */, + E13AF3BB28A0C59E009093AB /* BlurHashKit */, + E192608728D2E5F0002314B4 /* Factory */, + E1575E57293E7685001665B1 /* Files */, + E1388A45293F0ABA009721B1 /* SwizzleSwift */, + E1B5F7A629577BCE004B26CF /* Pulse */, + E1B5F7A829577BCE004B26CF /* PulseLogHandler */, + E1B5F7AA29577BCE004B26CF /* PulseUI */, + E1B5F7AC29577BDD004B26CF /* OrderedCollections */, + E18443CA2A037773002DDDC8 /* UDPBroadcast */, + E1A7B1642B9A9F7800152546 /* PreferencesView */, + E1392FEC2BA218A80034110D /* SwiftUIIntrospect */, + E1153DD12BBB649C00424D36 /* SVGKit */, + E19D41B12BF2BFA50082B8B2 /* KeychainSwift */, + E150C0C22BFD6DA200944FFA /* JellyfinAPI */, + E1155ACA2D0584A90021557A /* IdentifiedCollections */, + E1A09F762D05935A00835265 /* CollectionVGrid */, + E1A09F782D05935A00835265 /* CollectionHStack */, + BD88CB412D77E6A0006BB5E3 /* TVOSPicker */, + E1137D302E090C230091EB60 /* VLCUI */, + E1E2D7BE2E3FD936004E2E5F /* Transmission */, + E1B9743F2E86F802008CED48 /* StatefulMacros */, + ); + productName = "JellyfinPlayer tvOS"; + productReference = 535870602669D21600D05A09 /* Swiftfin tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 5377CBF0263B596A003A4E83 /* Swiftfin iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5377CC1B263B596B003A4E83 /* Build configuration list for PBXNativeTarget "Swiftfin iOS" */; + buildPhases = ( + 4EC71FBC2D16201C00D0B3A8 /* Alphabetize Strings */, + 6286F09E271C093000C40ED5 /* Run Swiftgen.swift */, + BD0BA2282AD64BB200306A8D /* Run SwiftFormat */, + 5377CBED263B596A003A4E83 /* Sources */, + 5377CBEE263B596A003A4E83 /* Frameworks */, + 5377CBEF263B596A003A4E83 /* Resources */, + 62666DF927E5012C00EC0ECD /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + E14560852DFCAE51008FF700 /* Swiftfin */, + E14563272DFCAE6E008FF700 /* Shared */, + E1456FC82DFCB323008FF700 /* Translations */, + E150B7D12DFF2E7C00DC7CF4 /* XcodeConfig */, + ); + name = "Swiftfin iOS"; + packageProductDependencies = ( + E13DD3C52716499E009D4DAF /* CoreStore */, + E13DD3D227168E65009D4DAF /* Defaults */, + E1002B672793CFBA00E47059 /* Algorithms */, + 62666E3827E502CE00EC0ECD /* SwizzleSwift */, + E19E6E0428A0B958005C10C8 /* Nuke */, + E19E6E0628A0B958005C10C8 /* NukeUI */, + E19E6E0928A0BEFF005C10C8 /* BlurHashKit */, + E192608228D2D0DB002314B4 /* Factory */, + E1575E3B293C6B15001665B1 /* Files */, + E15210532946DF1B00375CC2 /* Pulse */, + E15210552946DF1B00375CC2 /* PulseLogHandler */, + E15210572946DF1B00375CC2 /* PulseUI */, + E19DDEC62948EF9900954E10 /* OrderedCollections */, + E1DC9813296DC06200982F06 /* PulseLogHandler */, + E1FAD1C52A0375BA007F5521 /* UDPBroadcast */, + E1523F812B132C350062821A /* CollectionHStack */, + E114DB322B1944FA00B75FB3 /* CollectionVGrid */, + E15D4F042B1B0C3C00442DB8 /* PreferencesView */, + E113A2A62B5A178D009CAAAA /* CollectionHStack */, + E113A2A92B5A179A009CAAAA /* CollectionVGrid */, + E15EFA832BA167350080E926 /* CollectionHStack */, + E15EFA852BA1685F0080E926 /* SwiftUIIntrospect */, + E18D6AA52BAA96F000A0D167 /* CollectionHStack */, + E1153DA32BBA614F00424D36 /* CollectionVGrid */, + E1153DAB2BBA6AD200424D36 /* CollectionHStack */, + E1153DCF2BBB634F00424D36 /* SVGKit */, + E132D3C72BD200C10058A2DF /* CollectionVGrid */, + E145EB4A2BE16849003BF6F3 /* KeychainSwift */, + E14EA1642BF70A8E00DE757A /* Mantis */, + E150C0C02BFD62FD00944FFA /* JellyfinAPI */, + E176EBDD2D050067009F4CF1 /* IdentifiedCollections */, + E176EBDF2D0502A6009F4CF1 /* CollectionHStack */, + E176EBE22D0502C6009F4CF1 /* CollectionHStack */, + E176EBE82D050925009F4CF1 /* CollectionVGrid */, + E1A09F712D05933D00835265 /* CollectionVGrid */, + E1A09F742D05935100835265 /* CollectionHStack */, + E17567992E0375F300B90F41 /* VLCUI */, + E1137D2E2E090C1A0091EB60 /* VLCUI */, + E164308B2E3AA9710028D4E8 /* Transmission */, + E13CCE4B2E6C08710070965F /* LNPopupUI-Static */, + E11ADE832E7E73B6008074FC /* StatefulMacros */, + E19138C92E7E7FA20061E464 /* StatefulMacros */, + E134DD2B2E7F4DC300AED027 /* StatefulMacros */, + E1A76F192E8369A500A5F2C1 /* StatefulMacros */, + E1FADDF02E84B63600FB310E /* StatefulMacros */, + E19FA19F2E84F0A800F5A60D /* StatefulMacros */, + E1B9743A2E86F51D008CED48 /* StatefulMacros */, + E1B9743D2E86F7F9008CED48 /* StatefulMacros */, + ); + productName = JellyfinPlayer; + productReference = 5377CBF1263B596A003A4E83 /* Swiftfin iOS.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 5377CBE9263B596A003A4E83 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + KnownAssetTags = ( + New, + ); + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1610; + TargetAttributes = { + 5358705F2669D21600D05A09 = { + CreatedOnToolsVersion = 12.5; + }; + 5377CBF0263B596A003A4E83 = { + CreatedOnToolsVersion = 12.5; + }; + }; + }; + buildConfigurationList = 5377CBEC263B596A003A4E83 /* Build configuration list for PBXProject "Swiftfin" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + "zh-Hans", + ko, + fr, + ru, + it, + vi, + sv, + sl, + de, + ta, + es, + el, + he, + sk, + kk, + Base, + ar, + bg, + ca, + cs, + da, + eo, + eu, + fi, + hi, + hr, + hu, + id, + ja, + lb, + lt, + mk, + "nb-NO", + nl, + nn, + pl, + ps, + pt, + "pt-BR", + ro, + sq, + th, + tr, + uk, + "zh-Hant", + mn, + ); + mainGroup = 5377CBE8263B596A003A4E83; + packageReferences = ( + 5335256F265EA0A0006CCA86 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */, + E13DD3C42716499E009D4DAF /* XCRemoteSwiftPackageReference "CoreStore" */, + E13DD3D127168E65009D4DAF /* XCRemoteSwiftPackageReference "Defaults" */, + E1002B662793CFBA00E47059 /* XCRemoteSwiftPackageReference "swift-algorithms" */, + 62666E3727E502CE00EC0ECD /* XCRemoteSwiftPackageReference "SwizzleSwift" */, + E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */, + E19E6E0828A0BEFF005C10C8 /* XCRemoteSwiftPackageReference "BlurHashKit" */, + E192608128D2D0DB002314B4 /* XCRemoteSwiftPackageReference "Factory" */, + E1575E3A293C6B15001665B1 /* XCRemoteSwiftPackageReference "Files" */, + E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */, + E19DDEC52948EF9900954E10 /* XCRemoteSwiftPackageReference "swift-collections" */, + E1DC9812296DC06200982F06 /* XCRemoteSwiftPackageReference "PulseLogHandler" */, + E1FAD1C42A0375BA007F5521 /* XCRemoteSwiftPackageReference "UDPBroadcastConnection" */, + E15D4F032B1B0C3C00442DB8 /* XCLocalSwiftPackageReference "PreferencesView" */, + E1153DCE2BBB634F00424D36 /* XCRemoteSwiftPackageReference "SVGKit" */, + E145EB492BE16849003BF6F3 /* XCRemoteSwiftPackageReference "keychain-swift" */, + E14EA1632BF70A8E00DE757A /* XCRemoteSwiftPackageReference "Mantis" */, + E150C0BF2BFD62FD00944FFA /* XCRemoteSwiftPackageReference "jellyfin-sdk-swift" */, + E176EBDC2D050067009F4CF1 /* XCRemoteSwiftPackageReference "swift-identified-collections" */, + E1A09F702D05933D00835265 /* XCRemoteSwiftPackageReference "CollectionVGrid" */, + E1A09F732D05935100835265 /* XCRemoteSwiftPackageReference "CollectionHStack" */, + BD88CB402D77E6A0006BB5E3 /* XCRemoteSwiftPackageReference "TVOSPicker" */, + E1137D2D2E090C1A0091EB60 /* XCRemoteSwiftPackageReference "VLCUI" */, + E164308A2E3AA9710028D4E8 /* XCRemoteSwiftPackageReference "Transmission" */, + E13CCE482E6C077D0070965F /* XCRemoteSwiftPackageReference "LNPopupUI" */, + E1B9743C2E86F7F9008CED48 /* XCRemoteSwiftPackageReference "StatefulMacro" */, + ); + productRefGroup = 5377CBF2263B596A003A4E83 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5377CBF0263B596A003A4E83 /* Swiftfin iOS */, + 5358705F2669D21600D05A09 /* Swiftfin tvOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 5358705E2669D21600D05A09 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5377CBEF263B596A003A4E83 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 4EC71FBC2D16201C00D0B3A8 /* Alphabetize Strings */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/Translations/en.lproj/Localizable.strings", + ); + name = "Alphabetize Strings"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/alphabetizeStrings.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "xcrun --sdk macosx swift \"${SRCROOT}/Scripts/Translations/AlphabetizeStrings.swift\"\n"; + }; + 4EC71FBD2D1620AF00D0B3A8 /* Alphabetize Strings */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/Translations/en.lproj/Localizable.strings", + ); + name = "Alphabetize Strings"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/alphabetizeStrings.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "xcrun --sdk macosx swift \"${SRCROOT}/Scripts/Translations/AlphabetizeStrings.swift\"\n"; + }; + 6286F09E271C093000C40ED5 /* Run Swiftgen.swift */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Swiftgen.swift"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Add Homebrew to the path to support Apple Silicon Homebrew SwiftGen installations\nexport PATH=/opt/homebrew/bin:$PATH\n\nif which swiftgen >/dev/null; then\n swiftgen\nelse\n echo \"error: SwiftGen not installed, check contributing.md for installation instructions.\"\n return 1\nfi\n"; + }; + 6286F0A3271C0ABA00C40ED5 /* Run Swiftgen.swift */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Swiftgen.swift"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Add Homebrew to the path to support Apple Silicon Homebrew SwiftGen installations\nexport PATH=/opt/homebrew/bin:$PATH \n\nif which swiftgen >/dev/null; then\n swiftgen\nelse\n echo \"error: SwiftGen not installed, check contributing.md for installation instructions.\"\n return 1\nfi\n"; + }; + BD0BA2282AD64BB200306A8D /* Run SwiftFormat */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftFormat"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Add Homebrew to the path to support Apple Silicon Homebrew SwiftFormat installations\nexport PATH=/opt/homebrew/bin:$PATH\n\n# Skip phase if the action is not build (ie. analyze, archive, etc).\nif [ \"$ACTION\" != \"build\" ]; then\n exit 0\nfi\n\nif which swiftformat >/dev/null; then\n swiftformat .\nelse\n echo \"error: SwiftFormat not installed, check contributing.md for installation instructions.\"\nfi\n"; + }; + BD83D7852B55EEB600652C24 /* Run SwiftFormat */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftFormat"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Add Homebrew to the path to support Apple Silicon Homebrew SwiftFormat installations\nexport PATH=/opt/homebrew/bin:$PATH\n\n# Skip phase if the action is not build (ie. analyze, archive, etc).\nif [ \"$ACTION\" != \"build\" ]; then\n exit 0\nfi\n\nif which swiftformat >/dev/null; then\n swiftformat .\nelse\n echo \"error: SwiftFormat not installed, check contributing.md for installation instructions.\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 5358705C2669D21600D05A09 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5377CBED263B596A003A4E83 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 535870722669D21700D05A09 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 70; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = "Swiftfin tvOS/Resources/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = org.jellyfin.swiftfin; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 17.0; + }; + name = Debug; + }; + 535870732669D21700D05A09 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 70; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = "Swiftfin tvOS/Resources/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = org.jellyfin.swiftfin; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 17.0; + }; + name = Release; + }; + 5377CC19263B596B003A4E83 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReferenceAnchor = E150B7D12DFF2E7C00DC7CF4 /* XcodeConfig */; + baseConfigurationReferenceRelativePath = Shared.xcconfig; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXCLUDED_ARCHS = ""; + "EXCLUDED_ARCHS[sdk=*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=200"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 5377CC1A263B596B003A4E83 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXCLUDED_ARCHS = ""; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=200"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5377CC1C263B596B003A4E83 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-primary-primary"; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + CODE_SIGN_ENTITLEMENTS = Swiftfin/Resources/Swiftfin.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 78; + DEVELOPMENT_ASSET_PATHS = ""; + ENABLE_BITCODE = NO; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXCLUDED_ARCHS = ""; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = Swiftfin/Resources/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Swiftfin; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + OTHER_CFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 5377CC1D263B596B003A4E83 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-primary-primary"; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + CODE_SIGN_ENTITLEMENTS = Swiftfin/Resources/Swiftfin.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 78; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_ASSET_PATHS = ""; + ENABLE_BITCODE = NO; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXCLUDED_ARCHS = ""; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = Swiftfin/Resources/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Swiftfin; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + OTHER_CFLAGS = ""; + PRODUCT_BUNDLE_IDENTIFIER = org.jellyfin.swiftfin; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 535870712669D21700D05A09 /* Build configuration list for PBXNativeTarget "Swiftfin tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 535870722669D21700D05A09 /* Debug */, + 535870732669D21700D05A09 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5377CBEC263B596A003A4E83 /* Build configuration list for PBXProject "Swiftfin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5377CC19263B596B003A4E83 /* Debug */, + 5377CC1A263B596B003A4E83 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5377CC1B263B596B003A4E83 /* Build configuration list for PBXNativeTarget "Swiftfin iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5377CC1C263B596B003A4E83 /* Debug */, + 5377CC1D263B596B003A4E83 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + E15D4F032B1B0C3C00442DB8 /* XCLocalSwiftPackageReference "PreferencesView" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = PreferencesView; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 5335256F265EA0A0006CCA86 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/siteline/SwiftUI-Introspect"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + 62666E3727E502CE00EC0ECD /* XCRemoteSwiftPackageReference "SwizzleSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/MarioIannotta/SwizzleSwift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + BD88CB402D77E6A0006BB5E3 /* XCRemoteSwiftPackageReference "TVOSPicker" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ViacomInc/TVOSPicker"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 0.3.0; + }; + }; + E1002B662793CFBA00E47059 /* XCRemoteSwiftPackageReference "swift-algorithms" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-algorithms.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + E107060E2942F57D00646DAF /* XCRemoteSwiftPackageReference "Pulse" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kean/Pulse"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; + E1137D2D2E090C1A0091EB60 /* XCRemoteSwiftPackageReference "VLCUI" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LePips/VLCUI"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.7.2; + }; + }; + E1153DCE2BBB634F00424D36 /* XCRemoteSwiftPackageReference "SVGKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SVGKit/SVGKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + E13CCE482E6C077D0070965F /* XCRemoteSwiftPackageReference "LNPopupUI" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LeoNatan/LNPopupUI/"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 2.0.0; + }; + }; + E13DD3C42716499E009D4DAF /* XCRemoteSwiftPackageReference "CoreStore" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/JohnEstropia/CoreStore.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 9.0.0; + }; + }; + E13DD3D127168E65009D4DAF /* XCRemoteSwiftPackageReference "Defaults" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sindresorhus/Defaults"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 8.0.0; + }; + }; + E145EB492BE16849003BF6F3 /* XCRemoteSwiftPackageReference "keychain-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/evgenyneu/keychain-swift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 24.0.0; + }; + }; + E14EA1632BF70A8E00DE757A /* XCRemoteSwiftPackageReference "Mantis" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/guoyingtao/Mantis"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; + E150C0BF2BFD62FD00944FFA /* XCRemoteSwiftPackageReference "jellyfin-sdk-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/jellyfin/jellyfin-sdk-swift.git"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 0.5.2; + }; + }; + E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kean/Pulse"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; + E1575E3A293C6B15001665B1 /* XCRemoteSwiftPackageReference "Files" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/JohnSundell/Files"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.0; + }; + }; + E164308A2E3AA9710028D4E8 /* XCRemoteSwiftPackageReference "Transmission" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/nathantannar4/Transmission"; + requirement = { + kind = exactVersion; + version = 2.4.5; + }; + }; + E176EBDC2D050067009F4CF1 /* XCRemoteSwiftPackageReference "swift-identified-collections" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/pointfreeco/swift-identified-collections"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.1.0; + }; + }; + E192608128D2D0DB002314B4 /* XCRemoteSwiftPackageReference "Factory" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/hmlongco/Factory"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; + E19DDEC52948EF9900954E10 /* XCRemoteSwiftPackageReference "swift-collections" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-collections.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kean/Nuke"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 12.0.0; + }; + }; + E19E6E0828A0BEFF005C10C8 /* XCRemoteSwiftPackageReference "BlurHashKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LePips/BlurHashKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + E1A09F702D05933D00835265 /* XCRemoteSwiftPackageReference "CollectionVGrid" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LePips/CollectionVGrid"; + requirement = { + branch = main; + kind = branch; + }; + }; + E1A09F732D05935100835265 /* XCRemoteSwiftPackageReference "CollectionHStack" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LePips/CollectionHStack"; + requirement = { + branch = main; + kind = branch; + }; + }; + E1B9743C2E86F7F9008CED48 /* XCRemoteSwiftPackageReference "StatefulMacro" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/LePips/StatefulMacro"; + requirement = { + branch = main; + kind = branch; + }; + }; + E1DC9812296DC06200982F06 /* XCRemoteSwiftPackageReference "PulseLogHandler" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kean/PulseLogHandler"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; + E1FAD1C42A0375BA007F5521 /* XCRemoteSwiftPackageReference "UDPBroadcastConnection" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/gunterhager/UDPBroadcastConnection"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 62666E3827E502CE00EC0ECD /* SwizzleSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 62666E3727E502CE00EC0ECD /* XCRemoteSwiftPackageReference "SwizzleSwift" */; + productName = SwizzleSwift; + }; + BD88CB412D77E6A0006BB5E3 /* TVOSPicker */ = { + isa = XCSwiftPackageProductDependency; + package = BD88CB402D77E6A0006BB5E3 /* XCRemoteSwiftPackageReference "TVOSPicker" */; + productName = TVOSPicker; + }; + E1002B672793CFBA00E47059 /* Algorithms */ = { + isa = XCSwiftPackageProductDependency; + package = E1002B662793CFBA00E47059 /* XCRemoteSwiftPackageReference "swift-algorithms" */; + productName = Algorithms; + }; + E1002B6A2793E36600E47059 /* Algorithms */ = { + isa = XCSwiftPackageProductDependency; + package = E1002B662793CFBA00E47059 /* XCRemoteSwiftPackageReference "swift-algorithms" */; + productName = Algorithms; + }; + E107060F2942F57D00646DAF /* Pulse */ = { + isa = XCSwiftPackageProductDependency; + package = E107060E2942F57D00646DAF /* XCRemoteSwiftPackageReference "Pulse" */; + productName = Pulse; + }; + E10706112942F57D00646DAF /* PulseLogHandler */ = { + isa = XCSwiftPackageProductDependency; + package = E107060E2942F57D00646DAF /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseLogHandler; + }; + E10706132942F57D00646DAF /* PulseUI */ = { + isa = XCSwiftPackageProductDependency; + package = E107060E2942F57D00646DAF /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseUI; + }; + E1137D2E2E090C1A0091EB60 /* VLCUI */ = { + isa = XCSwiftPackageProductDependency; + package = E1137D2D2E090C1A0091EB60 /* XCRemoteSwiftPackageReference "VLCUI" */; + productName = VLCUI; + }; + E1137D302E090C230091EB60 /* VLCUI */ = { + isa = XCSwiftPackageProductDependency; + package = E1137D2D2E090C1A0091EB60 /* XCRemoteSwiftPackageReference "VLCUI" */; + productName = VLCUI; + }; + E113A2A62B5A178D009CAAAA /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E113A2A92B5A179A009CAAAA /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionVGrid; + }; + E114DB322B1944FA00B75FB3 /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionVGrid; + }; + E1153DA32BBA614F00424D36 /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionVGrid; + }; + E1153DAB2BBA6AD200424D36 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E1153DCF2BBB634F00424D36 /* SVGKit */ = { + isa = XCSwiftPackageProductDependency; + package = E1153DCE2BBB634F00424D36 /* XCRemoteSwiftPackageReference "SVGKit" */; + productName = SVGKit; + }; + E1153DD12BBB649C00424D36 /* SVGKit */ = { + isa = XCSwiftPackageProductDependency; + package = E1153DCE2BBB634F00424D36 /* XCRemoteSwiftPackageReference "SVGKit" */; + productName = SVGKit; + }; + E1155ACA2D0584A90021557A /* IdentifiedCollections */ = { + isa = XCSwiftPackageProductDependency; + package = E176EBDC2D050067009F4CF1 /* XCRemoteSwiftPackageReference "swift-identified-collections" */; + productName = IdentifiedCollections; + }; + E11ADE832E7E73B6008074FC /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E12186DD2718F1C50010884C /* Defaults */ = { + isa = XCSwiftPackageProductDependency; + package = E13DD3D127168E65009D4DAF /* XCRemoteSwiftPackageReference "Defaults" */; + productName = Defaults; + }; + E132D3C72BD200C10058A2DF /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionVGrid; + }; + E134DD2B2E7F4DC300AED027 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E1388A45293F0ABA009721B1 /* SwizzleSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 62666E3727E502CE00EC0ECD /* XCRemoteSwiftPackageReference "SwizzleSwift" */; + productName = SwizzleSwift; + }; + E1392FEC2BA218A80034110D /* SwiftUIIntrospect */ = { + isa = XCSwiftPackageProductDependency; + package = 5335256F265EA0A0006CCA86 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */; + productName = SwiftUIIntrospect; + }; + E13AF3B528A0C598009093AB /* Nuke */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */; + productName = Nuke; + }; + E13AF3B728A0C598009093AB /* NukeExtensions */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */; + productName = NukeExtensions; + }; + E13AF3B928A0C598009093AB /* NukeUI */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */; + productName = NukeUI; + }; + E13AF3BB28A0C59E009093AB /* BlurHashKit */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0828A0BEFF005C10C8 /* XCRemoteSwiftPackageReference "BlurHashKit" */; + productName = BlurHashKit; + }; + E13CCE4B2E6C08710070965F /* LNPopupUI-Static */ = { + isa = XCSwiftPackageProductDependency; + package = E13CCE482E6C077D0070965F /* XCRemoteSwiftPackageReference "LNPopupUI" */; + productName = "LNPopupUI-Static"; + }; + E13DD3C52716499E009D4DAF /* CoreStore */ = { + isa = XCSwiftPackageProductDependency; + package = E13DD3C42716499E009D4DAF /* XCRemoteSwiftPackageReference "CoreStore" */; + productName = CoreStore; + }; + E13DD3CC27164CA7009D4DAF /* CoreStore */ = { + isa = XCSwiftPackageProductDependency; + package = E13DD3C42716499E009D4DAF /* XCRemoteSwiftPackageReference "CoreStore" */; + productName = CoreStore; + }; + E13DD3D227168E65009D4DAF /* Defaults */ = { + isa = XCSwiftPackageProductDependency; + package = E13DD3D127168E65009D4DAF /* XCRemoteSwiftPackageReference "Defaults" */; + productName = Defaults; + }; + E145EB4A2BE16849003BF6F3 /* KeychainSwift */ = { + isa = XCSwiftPackageProductDependency; + package = E145EB492BE16849003BF6F3 /* XCRemoteSwiftPackageReference "keychain-swift" */; + productName = KeychainSwift; + }; + E14EA1642BF70A8E00DE757A /* Mantis */ = { + isa = XCSwiftPackageProductDependency; + package = E14EA1632BF70A8E00DE757A /* XCRemoteSwiftPackageReference "Mantis" */; + productName = Mantis; + }; + E150C0C02BFD62FD00944FFA /* JellyfinAPI */ = { + isa = XCSwiftPackageProductDependency; + package = E150C0BF2BFD62FD00944FFA /* XCRemoteSwiftPackageReference "jellyfin-sdk-swift" */; + productName = JellyfinAPI; + }; + E150C0C22BFD6DA200944FFA /* JellyfinAPI */ = { + isa = XCSwiftPackageProductDependency; + package = E150C0BF2BFD62FD00944FFA /* XCRemoteSwiftPackageReference "jellyfin-sdk-swift" */; + productName = JellyfinAPI; + }; + E15210532946DF1B00375CC2 /* Pulse */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = Pulse; + }; + E15210552946DF1B00375CC2 /* PulseLogHandler */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseLogHandler; + }; + E15210572946DF1B00375CC2 /* PulseUI */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseUI; + }; + E1523F812B132C350062821A /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E1575E3B293C6B15001665B1 /* Files */ = { + isa = XCSwiftPackageProductDependency; + package = E1575E3A293C6B15001665B1 /* XCRemoteSwiftPackageReference "Files" */; + productName = Files; + }; + E1575E57293E7685001665B1 /* Files */ = { + isa = XCSwiftPackageProductDependency; + package = E1575E3A293C6B15001665B1 /* XCRemoteSwiftPackageReference "Files" */; + productName = Files; + }; + E15D4F042B1B0C3C00442DB8 /* PreferencesView */ = { + isa = XCSwiftPackageProductDependency; + productName = PreferencesView; + }; + E15EFA832BA167350080E926 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E15EFA852BA1685F0080E926 /* SwiftUIIntrospect */ = { + isa = XCSwiftPackageProductDependency; + package = 5335256F265EA0A0006CCA86 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */; + productName = SwiftUIIntrospect; + }; + E164308B2E3AA9710028D4E8 /* Transmission */ = { + isa = XCSwiftPackageProductDependency; + package = E164308A2E3AA9710028D4E8 /* XCRemoteSwiftPackageReference "Transmission" */; + productName = Transmission; + }; + E17567992E0375F300B90F41 /* VLCUI */ = { + isa = XCSwiftPackageProductDependency; + productName = VLCUI; + }; + E176EBDD2D050067009F4CF1 /* IdentifiedCollections */ = { + isa = XCSwiftPackageProductDependency; + package = E176EBDC2D050067009F4CF1 /* XCRemoteSwiftPackageReference "swift-identified-collections" */; + productName = IdentifiedCollections; + }; + E176EBDF2D0502A6009F4CF1 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + package = E176EBDC2D050067009F4CF1 /* XCRemoteSwiftPackageReference "swift-identified-collections" */; + productName = CollectionHStack; + }; + E176EBE22D0502C6009F4CF1 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E176EBE82D050925009F4CF1 /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionVGrid; + }; + E18443CA2A037773002DDDC8 /* UDPBroadcast */ = { + isa = XCSwiftPackageProductDependency; + package = E1FAD1C42A0375BA007F5521 /* XCRemoteSwiftPackageReference "UDPBroadcastConnection" */; + productName = UDPBroadcast; + }; + E18D6AA52BAA96F000A0D167 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + productName = CollectionHStack; + }; + E19138C92E7E7FA20061E464 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E192608228D2D0DB002314B4 /* Factory */ = { + isa = XCSwiftPackageProductDependency; + package = E192608128D2D0DB002314B4 /* XCRemoteSwiftPackageReference "Factory" */; + productName = Factory; + }; + E192608728D2E5F0002314B4 /* Factory */ = { + isa = XCSwiftPackageProductDependency; + package = E192608128D2D0DB002314B4 /* XCRemoteSwiftPackageReference "Factory" */; + productName = Factory; + }; + E19D41B12BF2BFA50082B8B2 /* KeychainSwift */ = { + isa = XCSwiftPackageProductDependency; + package = E145EB492BE16849003BF6F3 /* XCRemoteSwiftPackageReference "keychain-swift" */; + productName = KeychainSwift; + }; + E19DDEC62948EF9900954E10 /* OrderedCollections */ = { + isa = XCSwiftPackageProductDependency; + package = E19DDEC52948EF9900954E10 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = OrderedCollections; + }; + E19E6E0428A0B958005C10C8 /* Nuke */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */; + productName = Nuke; + }; + E19E6E0628A0B958005C10C8 /* NukeUI */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0328A0B958005C10C8 /* XCRemoteSwiftPackageReference "Nuke" */; + productName = NukeUI; + }; + E19E6E0928A0BEFF005C10C8 /* BlurHashKit */ = { + isa = XCSwiftPackageProductDependency; + package = E19E6E0828A0BEFF005C10C8 /* XCRemoteSwiftPackageReference "BlurHashKit" */; + productName = BlurHashKit; + }; + E19FA19F2E84F0A800F5A60D /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E1A09F712D05933D00835265 /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + package = E1A09F702D05933D00835265 /* XCRemoteSwiftPackageReference "CollectionVGrid" */; + productName = CollectionVGrid; + }; + E1A09F742D05935100835265 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + package = E1A09F732D05935100835265 /* XCRemoteSwiftPackageReference "CollectionHStack" */; + productName = CollectionHStack; + }; + E1A09F762D05935A00835265 /* CollectionVGrid */ = { + isa = XCSwiftPackageProductDependency; + package = E1A09F702D05933D00835265 /* XCRemoteSwiftPackageReference "CollectionVGrid" */; + productName = CollectionVGrid; + }; + E1A09F782D05935A00835265 /* CollectionHStack */ = { + isa = XCSwiftPackageProductDependency; + package = E1A09F732D05935100835265 /* XCRemoteSwiftPackageReference "CollectionHStack" */; + productName = CollectionHStack; + }; + E1A76F192E8369A500A5F2C1 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E1A7B1642B9A9F7800152546 /* PreferencesView */ = { + isa = XCSwiftPackageProductDependency; + package = E15D4F032B1B0C3C00442DB8 /* XCLocalSwiftPackageReference "PreferencesView" */; + productName = PreferencesView; + }; + E1B5F7A629577BCE004B26CF /* Pulse */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = Pulse; + }; + E1B5F7A829577BCE004B26CF /* PulseLogHandler */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseLogHandler; + }; + E1B5F7AA29577BCE004B26CF /* PulseUI */ = { + isa = XCSwiftPackageProductDependency; + package = E15210522946DF1B00375CC2 /* XCRemoteSwiftPackageReference "Pulse" */; + productName = PulseUI; + }; + E1B5F7AC29577BDD004B26CF /* OrderedCollections */ = { + isa = XCSwiftPackageProductDependency; + package = E19DDEC52948EF9900954E10 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = OrderedCollections; + }; + E1B9743A2E86F51D008CED48 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; + E1B9743D2E86F7F9008CED48 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + package = E1B9743C2E86F7F9008CED48 /* XCRemoteSwiftPackageReference "StatefulMacro" */; + productName = StatefulMacros; + }; + E1B9743F2E86F802008CED48 /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + package = E1B9743C2E86F7F9008CED48 /* XCRemoteSwiftPackageReference "StatefulMacro" */; + productName = StatefulMacros; + }; + E1DC9813296DC06200982F06 /* PulseLogHandler */ = { + isa = XCSwiftPackageProductDependency; + package = E1DC9812296DC06200982F06 /* XCRemoteSwiftPackageReference "PulseLogHandler" */; + productName = PulseLogHandler; + }; + E1E2D7BE2E3FD936004E2E5F /* Transmission */ = { + isa = XCSwiftPackageProductDependency; + package = E164308A2E3AA9710028D4E8 /* XCRemoteSwiftPackageReference "Transmission" */; + productName = Transmission; + }; + E1FAD1C52A0375BA007F5521 /* UDPBroadcast */ = { + isa = XCSwiftPackageProductDependency; + package = E1FAD1C42A0375BA007F5521 /* XCRemoteSwiftPackageReference "UDPBroadcastConnection" */; + productName = UDPBroadcast; + }; + E1FADDF02E84B63600FB310E /* StatefulMacros */ = { + isa = XCSwiftPackageProductDependency; + productName = StatefulMacros; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 5377CBE9263B596A003A4E83 /* Project object */; +} diff --git a/Swiftfin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Swiftfin.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/Swiftfin.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/jellypig.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from jellypig.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..6dd16513 --- /dev/null +++ b/Swiftfin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,339 @@ +{ + "originHash" : "38a493503cb22432e1bf1b0b812569bb2bdd51f821207a74b6b78ff16a049011", + "pins" : [ + { + "identity" : "blurhashkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LePips/BlurHashKit", + "state" : { + "revision" : "c0bd7423398de68cbeb3f99bff70f79c38bf36ab", + "version" : "1.2.0" + } + }, + { + "identity" : "cocoalumberjack", + "kind" : "remoteSourceControl", + "location" : "https://github.com/CocoaLumberjack/CocoaLumberjack.git", + "state" : { + "revision" : "a9ed4b6f9bdedce7d77046f43adfb8ce1fd54114", + "version" : "3.9.0" + } + }, + { + "identity" : "collectionhstack", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LePips/CollectionHStack", + "state" : { + "branch" : "main", + "revision" : "ce86c82ae46ba958d6e7f8459d592a77e1e299c5" + } + }, + { + "identity" : "collectionvgrid", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LePips/CollectionVGrid", + "state" : { + "branch" : "main", + "revision" : "09b979a3d25bc21e8da0fe6a2500dfca1c74334f" + } + }, + { + "identity" : "corestore", + "kind" : "remoteSourceControl", + "location" : "https://github.com/JohnEstropia/CoreStore.git", + "state" : { + "revision" : "5a0d27cf343c6e341b0ef3c8d36104770b27a839", + "version" : "9.3.0" + } + }, + { + "identity" : "defaults", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sindresorhus/Defaults", + "state" : { + "revision" : "38925e3cfacf3fb89a81a35b1cd44fd5a5b7e0fa", + "version" : "8.2.0" + } + }, + { + "identity" : "differencekit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ra1028/DifferenceKit", + "state" : { + "revision" : "073b9671ce2b9b5b96398611427a1f929927e428", + "version" : "1.3.0" + } + }, + { + "identity" : "engine", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nathantannar4/Engine", + "state" : { + "revision" : "fe8ecdcfd7b82a431d5cd1400649b2cfc798cc9f", + "version" : "2.2.7" + } + }, + { + "identity" : "factory", + "kind" : "remoteSourceControl", + "location" : "https://github.com/hmlongco/Factory", + "state" : { + "revision" : "ccc898f21992ebc130bc04cc197460a5ae230bcf", + "version" : "2.5.3" + } + }, + { + "identity" : "files", + "kind" : "remoteSourceControl", + "location" : "https://github.com/JohnSundell/Files", + "state" : { + "revision" : "e85f2b4a8dfa0f242889f45236f3867d16e40480", + "version" : "4.3.0" + } + }, + { + "identity" : "get", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kean/Get", + "state" : { + "revision" : "31249885da1052872e0ac91a2943f62567c0d96d", + "version" : "2.2.1" + } + }, + { + "identity" : "jellyfin-sdk-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jellyfin/jellyfin-sdk-swift.git", + "state" : { + "revision" : "3033d73e05d9e03571a67d579583b7d15377d0d3", + "version" : "0.5.3" + } + }, + { + "identity" : "keychain-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/evgenyneu/keychain-swift", + "state" : { + "revision" : "5e1b02b6a9dac2a759a1d5dbc175c86bd192a608", + "version" : "24.0.0" + } + }, + { + "identity" : "lnpopupcontroller", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LeoNatan/LNPopupController.git", + "state" : { + "revision" : "e14712b8077f9d25c2b70d23241e922537673338", + "version" : "3.0.7" + } + }, + { + "identity" : "lnpopupui", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LeoNatan/LNPopupUI/", + "state" : { + "revision" : "aa9c813f2b47d055b648628b738e1b115c5e9fad", + "version" : "2.0.2" + } + }, + { + "identity" : "lnswiftuiutils", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LeoNatan/LNSwiftUIUtils.git", + "state" : { + "revision" : "6681938f1f2c591736a912789ea80451200d1484", + "version" : "1.1.4" + } + }, + { + "identity" : "mantis", + "kind" : "remoteSourceControl", + "location" : "https://github.com/guoyingtao/Mantis", + "state" : { + "revision" : "d471b02c6ab8c1432b612738b0f63eaff980df1c", + "version" : "2.27.0" + } + }, + { + "identity" : "nuke", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kean/Nuke", + "state" : { + "revision" : "0ead44350d2737db384908569c012fe67c421e4d", + "version" : "12.8.0" + } + }, + { + "identity" : "pulse", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kean/Pulse", + "state" : { + "revision" : "6125ce7fb51b114ba71b761d18cfd5557923bd4d", + "version" : "5.1.4" + } + }, + { + "identity" : "pulseloghandler", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kean/PulseLogHandler", + "state" : { + "revision" : "477e9ef76615f0b76b43bb502af432fe6750b704", + "version" : "5.1.0" + } + }, + { + "identity" : "statefulmacro", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LePips/StatefulMacro", + "state" : { + "branch" : "main", + "revision" : "7f56ed3f2297ba86c126e33d40af8b1f908e3a53" + } + }, + { + "identity" : "svgkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SVGKit/SVGKit", + "state" : { + "revision" : "58152b9f7c85eab239160b36ffdfd364aa43d666", + "version" : "3.0.0" + } + }, + { + "identity" : "swift-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-algorithms.git", + "state" : { + "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-case-paths", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-case-paths.git", + "state" : { + "revision" : "6989976265be3f8d2b5802c722f9ba168e227c71", + "version" : "1.7.2" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "8c0c0a8b49e080e54e5e328cc552821ff07cd341", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-identified-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-identified-collections", + "state" : { + "revision" : "322d9ffeeba85c9f7c4984b39422ec7cc3c56597", + "version" : "1.1.1" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "ce592ae52f982c847a4efc0dd881cc9eb32d29f2", + "version" : "1.6.4" + } + }, + { + "identity" : "swift-numerics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-numerics.git", + "state" : { + "revision" : "bbadd4b853a33fd78c4ae977d17bb2af15eb3f2a", + "version" : "1.1.0" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax", + "state" : { + "revision" : "0687f71944021d616d34d922343dcef086855920", + "version" : "600.0.1" + } + }, + { + "identity" : "swiftui-introspect", + "kind" : "remoteSourceControl", + "location" : "https://github.com/siteline/SwiftUI-Introspect", + "state" : { + "revision" : "807f73ce09a9b9723f12385e592b4e0aaebd3336", + "version" : "1.3.0" + } + }, + { + "identity" : "swizzleswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MarioIannotta/SwizzleSwift", + "state" : { + "branch" : "master", + "revision" : "e2d31c646182bf94a496b173c6ee5ad191230e9a" + } + }, + { + "identity" : "transmission", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nathantannar4/Transmission", + "state" : { + "revision" : "2da5049d33111238ad4cb979ebce783af9586cef", + "version" : "2.4.5" + } + }, + { + "identity" : "tvospicker", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ViacomInc/TVOSPicker", + "state" : { + "revision" : "90806460f3b3e7564344647241c157aeb0b27a71", + "version" : "0.3.0" + } + }, + { + "identity" : "udpbroadcastconnection", + "kind" : "remoteSourceControl", + "location" : "https://github.com/gunterhager/UDPBroadcastConnection", + "state" : { + "revision" : "3680f532c00d18a168bb8da7b9f8f82fcd89180d", + "version" : "5.0.5" + } + }, + { + "identity" : "urlqueryencoder", + "kind" : "remoteSourceControl", + "location" : "https://github.com/CreateAPI/URLQueryEncoder", + "state" : { + "revision" : "4ce950479707ea109f229d7230ec074a133b15d7", + "version" : "0.2.1" + } + }, + { + "identity" : "vlcui", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LePips/VLCUI", + "state" : { + "revision" : "9850f460ce5f4154979d17aeae92674c1632ff53", + "version" : "0.7.4" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "b2ed9eabefe56202ee4939dd9fc46b6241c88317", + "version" : "1.6.1" + } + } + ], + "version" : 3 +} diff --git a/jellypig.xcodeproj/xcshareddata/IDETemplateMacros.plist b/Swiftfin.xcodeproj/xcshareddata/IDETemplateMacros.plist similarity index 100% rename from jellypig.xcodeproj/xcshareddata/IDETemplateMacros.plist rename to Swiftfin.xcodeproj/xcshareddata/IDETemplateMacros.plist diff --git a/jellypig.xcodeproj/xcshareddata/xcschemes/jellypig tvOS.xcscheme b/Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin tvOS.xcscheme similarity index 83% rename from jellypig.xcodeproj/xcshareddata/xcschemes/jellypig tvOS.xcscheme rename to Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin tvOS.xcscheme index f32d385f..7449a0c3 100644 --- a/jellypig.xcodeproj/xcshareddata/xcschemes/jellypig tvOS.xcscheme +++ b/Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin tvOS.xcscheme @@ -15,9 +15,9 @@ + BuildableName = "Swiftfin tvOS.app" + BlueprintName = "Swiftfin tvOS" + ReferencedContainer = "container:Swiftfin.xcodeproj"> @@ -45,9 +45,9 @@ + BuildableName = "Swiftfin tvOS.app" + BlueprintName = "Swiftfin tvOS" + ReferencedContainer = "container:Swiftfin.xcodeproj"> @@ -62,9 +62,9 @@ + BuildableName = "Swiftfin tvOS.app" + BlueprintName = "Swiftfin tvOS" + ReferencedContainer = "container:Swiftfin.xcodeproj"> diff --git a/Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin.xcscheme b/Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin.xcscheme new file mode 100644 index 00000000..edaa97ae --- /dev/null +++ b/Swiftfin.xcodeproj/xcshareddata/xcschemes/Swiftfin.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Swiftfin/App/AppDelegate.swift b/Swiftfin/App/AppDelegate.swift new file mode 100644 index 00000000..1977fcf0 --- /dev/null +++ b/Swiftfin/App/AppDelegate.swift @@ -0,0 +1,32 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import PreferencesView +import UIKit + +class AppDelegate: NSObject, UIApplicationDelegate { + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil + ) -> Bool { + true + } + + func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { + if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene, + let topViewController = scene.keyWindow?.rootViewController, + let presentedViewController = topViewController.presentedViewController, + let preferencesHostingController = presentedViewController as? UIPreferencesHostingController + { + return preferencesHostingController.supportedInterfaceOrientations + } + + return UIDevice.isPad ? .allButUpsideDown : .portrait + } +} diff --git a/Swiftfin/App/SwiftfinApp+ValueObservation.swift b/Swiftfin/App/SwiftfinApp+ValueObservation.swift new file mode 100644 index 00000000..a666fc6a --- /dev/null +++ b/Swiftfin/App/SwiftfinApp+ValueObservation.swift @@ -0,0 +1,124 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import Factory +import Foundation +import SwiftUI + +// Following class is necessary to observe values that can either +// be a user *or* an app setting and only one should apply at a time. +// +// Also just to separate out value observation + +// TODO: could clean up? + +extension SwiftfinApp { + + class ValueObservation: ObservableObject { + + private var accentColorCancellable: AnyCancellable? + private var appearanceCancellable: AnyCancellable? + private var lastSignInUserIDCancellable: AnyCancellable? + private var splashScreenCancellable: AnyCancellable? + + init() { + + // MARK: signed in observation + + lastSignInUserIDCancellable = Task { + for await newValue in Defaults.updates(.lastSignedInUserID) { + + Container.shared.mediaPlayerManager.reset() + + if case .signedIn = newValue { + setUserDefaultsObservation() + } else { + setAppDefaultsObservation() + } + } + } + .asAnyCancellable() + } + + // MARK: user observation + + private func setUserDefaultsObservation() { + accentColorCancellable?.cancel() + appearanceCancellable?.cancel() + splashScreenCancellable?.cancel() + + accentColorCancellable = Task { + for await newValue in Defaults.updates(.userAccentColor) { + await MainActor.run { + Defaults[.accentColor] = newValue + UIApplication.shared.setAccentColor(newValue.uiColor) + } + } + } + .asAnyCancellable() + + appearanceCancellable = Task { + for await newValue in Defaults.updates(.userAppearance) { + await MainActor.run { + Defaults[.appearance] = newValue + UIApplication.shared.setAppearance(newValue.style) + } + } + } + .asAnyCancellable() + } + + // MARK: app observation + + private func setAppDefaultsObservation() { + accentColorCancellable?.cancel() + appearanceCancellable?.cancel() + splashScreenCancellable?.cancel() + + accentColorCancellable = Task { + await MainActor.run { + Defaults[.accentColor] = .jellyfinPurple + UIApplication.shared.setAccentColor(Color.jellyfinPurple.uiColor) + } + } + .asAnyCancellable() + + appearanceCancellable = Task { + for await newValue in Defaults.updates(.appAppearance) { + + // other cancellable will set appearance if enabled + // and need to avoid races + guard !Defaults[.selectUserUseSplashscreen] else { continue } + + await MainActor.run { + Defaults[.appearance] = newValue + UIApplication.shared.setAppearance(newValue.style) + } + } + } + .asAnyCancellable() + + splashScreenCancellable = Task { + for await newValue in Defaults.updates(.selectUserUseSplashscreen) { + await MainActor.run { + if newValue { + Defaults[.appearance] = .dark + UIApplication.shared.setAppearance(.dark) + } else { + Defaults[.appearance] = Defaults[.appAppearance] + UIApplication.shared.setAppearance(Defaults[.appAppearance].style) + } + } + } + } + .asAnyCancellable() + } + } +} diff --git a/Swiftfin/App/SwiftfinApp.swift b/Swiftfin/App/SwiftfinApp.swift new file mode 100644 index 00000000..7be62f7e --- /dev/null +++ b/Swiftfin/App/SwiftfinApp.swift @@ -0,0 +1,110 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CoreStore +import Defaults +import Factory +import Logging +import Nuke +import PreferencesView +import PulseLogHandler +import SwiftUI + +@main +struct SwiftfinApp: App { + + @UIApplicationDelegateAdaptor(AppDelegate.self) + var appDelegate + + @StateObject + private var valueObservation = ValueObservation() + + init() { + + // Logging + LoggingSystem.bootstrap { label in + + // TODO: have setting for log level + // - default info, boolean to go down to trace + let handlers: [any LogHandler] = [PersistentLogHandler(label: label)] + #if DEBUG + .appending(SwiftfinConsoleHandler()) + #endif + + var multiplexHandler = MultiplexLogHandler(handlers) + multiplexHandler.logLevel = .trace + return multiplexHandler + } + + // CoreStore + + CoreStoreDefaults.dataStack = SwiftfinStore.dataStack + CoreStoreDefaults.logger = SwiftfinCorestoreLogger() + + // Nuke + + ImageCache.shared.costLimit = 1024 * 1024 * 200 // 200 MB + ImageCache.shared.ttl = 300 // 5 min + + ImageDecoderRegistry.shared.register { context in + guard let mimeType = context.urlResponse?.mimeType else { return nil } + return mimeType.contains("svg") ? ImageDecoders.Empty() : nil + } + + ImagePipeline.shared = .Swiftfin.posters + + // UIKit + + UIScrollView.appearance().keyboardDismissMode = .onDrag + + // Sometimes the tab bar won't appear properly on push, always have material background + UITabBar.appearance().scrollEdgeAppearance = UITabBarAppearance(idiom: .unspecified) + + // Swiftfin + + // don't keep last user id + if Defaults[.signOutOnClose] { + Defaults[.lastSignedInUserID] = .signedOut + } + } + + var body: some Scene { + WindowGroup { + OverlayToastView { + PreferencesView { + RootView() + .supportedOrientations(UIDevice.isPad ? .allButUpsideDown : .portrait) + } + } + .ignoresSafeArea() + .onAppDidEnterBackground { + Defaults[.backgroundTimeStamp] = Date.now + } + .onAppWillEnterForeground { + + // TODO: needs to check if any background playback is happening + // - atow, background video playback isn't officially supported + let backgroundedInterval = Date.now.timeIntervalSince(Defaults[.backgroundTimeStamp]) + + if Defaults[.signOutOnBackground], backgroundedInterval > Defaults[.backgroundSignOutInterval] { + Defaults[.lastSignedInUserID] = .signedOut + Container.shared.currentUserSession.reset() + Notifications[.didSignOut].post() + } + } + } + } +} + +extension UINavigationController { + + // Remove back button text + override open func viewWillLayoutSubviews() { + navigationBar.topItem?.backButtonDisplayMode = .minimal + } +} diff --git a/Swiftfin/Components/BasicStepper.swift b/Swiftfin/Components/BasicStepper.swift new file mode 100644 index 00000000..27ae80d3 --- /dev/null +++ b/Swiftfin/Components/BasicStepper.swift @@ -0,0 +1,70 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct BasicStepper: View where Formatter.FormatInput == Value, +Formatter.FormatOutput == String { + + @Binding + private var value: Value + + private let title: String + private let range: ClosedRange + private let step: Value.Stride + private let formatter: Formatter + + var body: some View { + Stepper(value: $value, in: range, step: step) { + HStack { + Text(title) + + Spacer() + + Text(value, format: formatter) + .foregroundColor(.secondary) + } + } + } +} + +extension BasicStepper { + + init( + _ title: String, + value: Binding, + range: ClosedRange, + step: Value.Stride = 1, + formatter: Formatter + ) { + self.init( + value: value, + title: title, + range: range, + step: step, + formatter: formatter + ) + } +} + +extension BasicStepper where Formatter == VerbatimFormatStyle { + init( + _ title: String, + value: Binding, + range: ClosedRange, + step: Value.Stride = 1 + ) { + self.init( + value: value, + title: title, + range: range, + step: step, + formatter: VerbatimFormatStyle() + ) + } +} diff --git a/Swiftfin/Components/DelayedProgressView.swift b/Swiftfin/Components/DelayedProgressView.swift new file mode 100644 index 00000000..a55e738f --- /dev/null +++ b/Swiftfin/Components/DelayedProgressView.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import SwiftUI + +// TODO: retry button and/or loading text after a few more seconds +struct DelayedProgressView: View { + + @State + private var interval = 0 + + private let timer: Publishers.Autoconnect + + init(interval: Double = 0.5) { + self.timer = Timer.publish(every: interval, on: .main, in: .common).autoconnect() + } + + var body: some View { + VStack { + if interval > 0 { + ProgressView() + } + } + .onReceive(timer) { _ in + withAnimation { + interval += 1 + } + } + } +} diff --git a/Swiftfin/Components/DotHStack.swift b/Swiftfin/Components/DotHStack.swift new file mode 100644 index 00000000..6aed1842 --- /dev/null +++ b/Swiftfin/Components/DotHStack.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +func DotHStack( + padding: CGFloat = 5, + @ViewBuilder content: @escaping () -> some View +) -> some View { + SeparatorHStack { + Circle() + .frame(width: 2, height: 2) + .padding(.horizontal, padding) + } content: { + content() + } +} diff --git a/Swiftfin/Components/EmptyHitTestView.swift b/Swiftfin/Components/EmptyHitTestView.swift new file mode 100644 index 00000000..acc998c2 --- /dev/null +++ b/Swiftfin/Components/EmptyHitTestView.swift @@ -0,0 +1,19 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +/// An empty `UIView` for the general purpose of +/// being a hit target. +struct EmptyHitTestView: UIViewRepresentable { + func makeUIView(context: Context) -> UIView { + UIView() + } + + func updateUIView(_ uiView: UIView, context: Context) {} +} diff --git a/Swiftfin/Components/ErrorView.swift b/Swiftfin/Components/ErrorView.swift new file mode 100644 index 00000000..ba68f514 --- /dev/null +++ b/Swiftfin/Components/ErrorView.swift @@ -0,0 +1,49 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: should use environment refresh instead? +struct ErrorView: View { + + private let error: ErrorType + private var onRetry: (() -> Void)? + + var body: some View { + VStack(spacing: 20) { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 72)) + .foregroundColor(Color.red) + + Text(error.localizedDescription) + .frame(minWidth: 50, maxWidth: 240) + .multilineTextAlignment(.center) + + if let onRetry { + PrimaryButton(title: L10n.retry) + .onSelect(onRetry) + .frame(maxWidth: 300) + .frame(height: 50) + } + } + } +} + +extension ErrorView { + + init(error: ErrorType) { + self.init( + error: error, + onRetry: nil + ) + } + + func onRetry(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onRetry, with: action) + } +} diff --git a/Swiftfin/Components/GestureView.swift b/Swiftfin/Components/GestureView.swift new file mode 100644 index 00000000..205a689f --- /dev/null +++ b/Swiftfin/Components/GestureView.swift @@ -0,0 +1,177 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation +import Logging +import SwiftUI + +// TODO: figure out this directional response stuff +extension EnvironmentValues { + + @Entry + var panGestureDirection: Direction = .all +} + +struct GestureView: UIViewRepresentable { + + func makeUIView(context: Context) -> UIView { + let view = UIView(frame: .zero) + + view.addGestureRecognizer(context.coordinator.longPressGesture) + view.addGestureRecognizer(context.coordinator.panGesture) + view.addGestureRecognizer(context.coordinator.pinchGesture) + view.addGestureRecognizer(context.coordinator.tapGesture) + view.addGestureRecognizer(context.coordinator.doubleTouchGesture) + + view.backgroundColor = .clear + return view + } + + func updateUIView(_ uiView: UIView, context: Context) { + + context.coordinator.longPressAction = context.environment.longPressAction + context.coordinator.panAction = context.environment.panAction + context.coordinator.pinchAction = context.environment.pinchAction + context.coordinator.tapAction = context.environment.tapGestureAction + + context.coordinator.panGesture.direction = context.environment.panGestureDirection + } + + func makeCoordinator() -> Coordinator { + Coordinator() + } + + class Coordinator { + + lazy var doubleTouchGesture: UITapGestureRecognizer! = { + let recognizer = UITapGestureRecognizer( + target: self, + action: #selector(handleTap) + ) + recognizer.numberOfTouchesRequired = 2 + return recognizer + }() + + lazy var longPressGesture: UILongPressGestureRecognizer! = { + let recognizer = UILongPressGestureRecognizer( + target: self, + action: #selector(handleLongPress) + ) + recognizer.minimumPressDuration = 1.2 + return recognizer + }() + + lazy var panGesture: DirectionalPanGestureRecognizer! = { + .init( + direction: .allButDown, + target: self, + action: #selector(handlePan) + ) + }() + + lazy var pinchGesture: UIPinchGestureRecognizer! = { + .init( + target: self, + action: #selector(handlePinch) + ) + }() + + lazy var tapGesture: UITapGestureRecognizer! = { + .init( + target: self, + action: #selector(handleTap) + ) + }() + + var longPressAction: LongPressAction? { + didSet { longPressGesture.isEnabled = longPressAction != nil } + } + + var panAction: PanAction? { + didSet { panGesture.isEnabled = panAction != nil } + } + + var pinchAction: PinchAction? { + didSet { pinchGesture.isEnabled = pinchAction != nil } + } + + var tapAction: TapAction? { + didSet { + doubleTouchGesture.isEnabled = tapAction != nil + tapGesture.isEnabled = tapAction != nil + } + } + + private var didSwipe = false + + @objc + func handleLongPress(_ gesture: UILongPressGestureRecognizer) { + guard let view = gesture.view else { return } + + let location = gesture.location(in: view) + let unitPoint = UnitPoint( + x: location.x / view.bounds.width, + y: location.y / view.bounds.height + ) + + longPressAction?( + location: location, + unitPoint: unitPoint, + state: gesture.state + ) + } + + @objc + func handlePan(_ gesture: UIPanGestureRecognizer) { + guard let view = gesture.view else { return } + + let translation = gesture.translation(in: view) + let velocity = gesture.velocity(in: view) + let location = gesture.location(in: view) + let unitPoint = UnitPoint( + x: location.x / view.bounds.width, + y: location.y / view.bounds.height + ) + + panAction?( + translation: translation, + velocity: velocity, + location: location, + unitPoint: unitPoint, + state: gesture.state + ) + } + + @objc + func handlePinch(_ gesture: UIPinchGestureRecognizer) { + pinchAction?( + scale: gesture.scale, + velocity: gesture.velocity, + state: gesture.state + ) + } + + @objc + func handleTap(_ gesture: UITapGestureRecognizer) { + guard let view = gesture.view else { return } + + let location = gesture.location(in: gesture.view) + let unitPoint = UnitPoint( + x: location.x / view.bounds.width, + y: location.y / view.bounds.height + ) + + tapAction?( + location: location, + unitPoint: unitPoint, + count: gesture.numberOfTouches + ) + } + } +} diff --git a/Swiftfin/Components/HourMinutePicker.swift b/Swiftfin/Components/HourMinutePicker.swift new file mode 100644 index 00000000..1ad1b7b6 --- /dev/null +++ b/Swiftfin/Components/HourMinutePicker.swift @@ -0,0 +1,52 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct HourMinutePicker: UIViewRepresentable { + + let interval: Binding + + func makeUIView(context: Context) -> some UIView { + let picker = UIDatePicker(frame: .zero) + picker.translatesAutoresizingMaskIntoConstraints = false + picker.datePickerMode = .countDownTimer + picker.countDownDuration = interval.wrappedValue + + context.coordinator.add(picker: picker) + context.coordinator.interval = interval + + return picker + } + + func updateUIView(_ uiView: UIViewType, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator() + } + + class Coordinator { + + var interval: Binding! + + func add(picker: UIDatePicker) { + picker.addTarget( + self, + action: #selector( + dateChanged + ), + for: .valueChanged + ) + } + + @objc + func dateChanged(_ picker: UIDatePicker) { + interval.wrappedValue = picker.countDownDuration + } + } +} diff --git a/Swiftfin/Components/LandscapePosterProgressBar.swift b/Swiftfin/Components/LandscapePosterProgressBar.swift new file mode 100644 index 00000000..bf26db93 --- /dev/null +++ b/Swiftfin/Components/LandscapePosterProgressBar.swift @@ -0,0 +1,99 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +// TODO: fix relative padding, or remove? +// TODO: gradient should grow/shrink with content, not relative to container + +struct LandscapePosterProgressBar: View { + + @Default(.accentColor) + private var accentColor + + // Scale padding depending on view width + @State + private var paddingScale: CGFloat = 1.0 + @State + private var width: CGFloat = 0 + + private let content: () -> Content + private let progress: Double + + var body: some View { + ZStack(alignment: .bottom) { + + Color.clear + + LinearGradient( + stops: [ + .init(color: .clear, location: 0), + .init(color: .black.opacity(0.7), location: 1), + ], + startPoint: .top, + endPoint: .bottom + ) + .frame(height: 40) + + VStack(alignment: .leading, spacing: 3 * paddingScale) { + + content() + + ProgressBar(progress: progress) + .foregroundColor(accentColor) + .frame(height: 3) + } + .padding(.horizontal, 5 * paddingScale) + .padding(.bottom, 7 * paddingScale) + } + .onSizeChanged { newSize, _ in + width = newSize.width + } + } +} + +extension LandscapePosterProgressBar where Content == Text { + + init( + title: String, + progress: Double + ) { + self.init( + content: { + Text(title) + .font(.subheadline) + .foregroundColor(.white) + }, + progress: progress + ) + } +} + +extension LandscapePosterProgressBar where Content == EmptyView { + + init(progress: Double) { + self.init( + content: { EmptyView() }, + progress: progress + ) + } +} + +extension LandscapePosterProgressBar { + + init( + progress: Double, + @ViewBuilder content: @escaping () -> Content + ) { + self.init( + content: content, + progress: progress + ) + } +} diff --git a/Swiftfin/Components/LearnMoreButton.swift b/Swiftfin/Components/LearnMoreButton.swift new file mode 100644 index 00000000..e342c214 --- /dev/null +++ b/Swiftfin/Components/LearnMoreButton.swift @@ -0,0 +1,65 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct LearnMoreButton: View { + + @State + private var isPresented: Bool = false + + private let title: String + private let content: AnyView + + // MARK: - Initializer + + init( + _ title: String, + @LabeledContentBuilder content: () -> AnyView + ) { + self.title = title + self.content = content() + } + + // MARK: - Body + + var body: some View { + Button(L10n.learnMore + "\u{2026}") { + isPresented = true + } + .foregroundStyle(Color.accentColor) + .buttonStyle(.plain) + .frame(maxWidth: .infinity, alignment: .leading) + .sheet(isPresented: $isPresented) { + learnMoreView + } + } + + // MARK: - Learn More View + + private var learnMoreView: some View { + NavigationStack { + ScrollView { + SeparatorVStack(alignment: .leading) { + Divider() + .padding(.vertical, 8) + } content: { + content + .labeledContentStyle(LearnMoreLabeledContentStyle()) + .foregroundStyle(Color.primary, Color.secondary) + } + .edgePadding() + } + .navigationTitle(title) + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton { + isPresented = false + } + } + } +} diff --git a/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift b/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift new file mode 100644 index 00000000..7aff431a --- /dev/null +++ b/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift @@ -0,0 +1,53 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension LetterPickerBar { + + struct LetterPickerButton: View { + + @Default(.accentColor) + private var accentColor + + @Environment(\.isSelected) + private var isSelected + + private let letter: ItemLetter + private let size: CGFloat + private let viewModel: FilterViewModel + + init(letter: ItemLetter, size: CGFloat, viewModel: FilterViewModel) { + self.letter = letter + self.size = size + self.viewModel = viewModel + } + + var body: some View { + Button { + if viewModel.currentFilters.letter.contains(letter) { + viewModel.send(.update(.letter, [])) + } else { + viewModel.send(.update(.letter, [ItemLetter(stringLiteral: letter.value).asAnyItemFilter])) + } + } label: { + ZStack { + RoundedRectangle(cornerRadius: 5) + .frame(width: size, height: size) + .foregroundStyle(isSelected ? accentColor : Color.clear) + + Text(letter.value) + .font(.headline) + .foregroundStyle(isSelected ? accentColor.overlayColor : accentColor) + .frame(width: size, height: size, alignment: .center) + } + } + } + } +} diff --git a/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift b/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift new file mode 100644 index 00000000..e833f5c8 --- /dev/null +++ b/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift @@ -0,0 +1,44 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct LetterPickerBar: View { + + @ObservedObject + var viewModel: FilterViewModel + + // MARK: - Body + + @ViewBuilder + var body: some View { + VStack(spacing: 0) { + Spacer() + + ForEach(ItemLetter.allCases, id: \.hashValue) { filterLetter in + LetterPickerButton( + letter: filterLetter, + size: LetterPickerBar.size, + viewModel: viewModel + ) + .isSelected(viewModel.currentFilters.letter.contains(filterLetter)) + } + + Spacer() + } + .scrollIfLargerThanContainer() + .frame(width: LetterPickerBar.size, alignment: .center) + } + + // MARK: - Letter Button Size + + static var size: CGFloat { + UIFont.preferredFont(forTextStyle: .headline).lineHeight + } +} diff --git a/Swiftfin/Components/ListRow.swift b/Swiftfin/Components/ListRow.swift new file mode 100644 index 00000000..78ad6154 --- /dev/null +++ b/Swiftfin/Components/ListRow.swift @@ -0,0 +1,73 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: come up with better name along with `ListRowButton` + +// Meant to be used when making a custom list without `List` or `Form` +struct ListRow: View { + + @State + private var contentSize: CGSize = .zero + + private let leading: Leading + private let content: Content + private var action: () -> Void + private var insets: EdgeInsets + private var isSeparatorVisible: Bool + + var body: some View { + ZStack(alignment: .bottomTrailing) { + + Button(action: action) { + HStack(alignment: .center, spacing: EdgeInsets.edgePadding) { + + leading + + content + .frame(maxHeight: .infinity) + .trackingSize($contentSize) + } + .padding(insets) + } + .foregroundStyle(.primary, .secondary) + .contentShape(.contextMenuPreview, Rectangle()) + + Color.secondarySystemFill + .frame(width: contentSize.width, height: 1) + .padding(.trailing, insets.trailing) + .isVisible(isSeparatorVisible) + } + } +} + +extension ListRow { + + init( + insets: EdgeInsets = .zero, + @ViewBuilder leading: @escaping () -> Leading, + @ViewBuilder content: @escaping () -> Content + ) { + self.init( + leading: leading(), + content: content(), + action: {}, + insets: insets, + isSeparatorVisible: true + ) + } + + func isSeparatorVisible(_ isVisible: Bool) -> Self { + copy(modifying: \.isSeparatorVisible, with: isVisible) + } + + func onSelect(perform action: @escaping () -> Void) -> Self { + copy(modifying: \.action, with: action) + } +} diff --git a/Swiftfin/Components/ListRowButton.swift b/Swiftfin/Components/ListRowButton.swift new file mode 100644 index 00000000..544742ea --- /dev/null +++ b/Swiftfin/Components/ListRowButton.swift @@ -0,0 +1,65 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: come up with better name along with `ListRow` + +// Meant to be used within `List` or `Form` +struct ListRowButton: View { + + private let title: String + private let role: ButtonRole? + private let action: () -> Void + + init(_ title: String, role: ButtonRole? = nil, action: @escaping () -> Void) { + self.title = title + self.role = role + self.action = action + } + + var body: some View { + Button(title, role: role, action: action) + .buttonStyle(ListRowButtonStyle()) + .listRowInsets(.zero) + } +} + +private struct ListRowButtonStyle: ButtonStyle { + + @Environment(\.isEnabled) + private var isEnabled + + private func primaryStyle(configuration: Configuration) -> some ShapeStyle { + if configuration.role == .destructive || configuration.role == .cancel { + return AnyShapeStyle(Color.red) + } else { + return AnyShapeStyle(HierarchicalShapeStyle.primary) + } + } + + private func secondaryStyle(configuration: Configuration) -> some ShapeStyle { + if configuration.role == .destructive || configuration.role == .cancel { + return AnyShapeStyle(Color.red.opacity(0.2)) + } else { + return isEnabled ? AnyShapeStyle(HierarchicalShapeStyle.secondary) : AnyShapeStyle(Color.gray) + } + } + + func makeBody(configuration: Configuration) -> some View { + ZStack { + Rectangle() + .fill(secondaryStyle(configuration: configuration)) + + configuration.label + .foregroundStyle(primaryStyle(configuration: configuration)) + } + .opacity(configuration.isPressed ? 0.75 : 1) + .font(.body.weight(.bold)) + } +} diff --git a/Swiftfin/Components/ListTitleSection.swift b/Swiftfin/Components/ListTitleSection.swift new file mode 100644 index 00000000..8fae6c08 --- /dev/null +++ b/Swiftfin/Components/ListTitleSection.swift @@ -0,0 +1,192 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +// TODO: image +// TODO: rename + +struct ListTitleSection: View { + + private let title: String + private let description: String? + private let onLearnMore: (() -> Void)? + + var body: some View { + Section { + VStack(alignment: .center, spacing: 10) { + + Text(title) + .font(.title3) + .fontWeight(.semibold) + .multilineTextAlignment(.center) + + if let description { + Text(description) + .multilineTextAlignment(.center) + } + + if let onLearnMore { + Button(L10n.learnMore + "\u{2026}", action: onLearnMore) + } + } + .font(.subheadline) + .frame(maxWidth: .infinity) + } + } +} + +extension ListTitleSection { + + init( + _ title: String, + description: String? = nil + ) { + self.init( + title: title, + description: description, + onLearnMore: nil + ) + } + + init( + _ title: String, + description: String? = nil, + onLearnMore: @escaping () -> Void + ) { + self.init( + title: title, + description: description, + onLearnMore: onLearnMore + ) + } +} + +/// A view that mimics an inset grouped section, meant to be +/// used as a header for a `List` with `listStyle(.plain)`. +struct InsetGroupedListHeader: View { + + @Default(.accentColor) + private var accentColor + + private let content: () -> Content + private let title: Text? + private let description: Text? + private let onLearnMore: (() -> Void)? + + @ViewBuilder + private var header: some View { + Button { + onLearnMore?() + } label: { + VStack(alignment: .center, spacing: 10) { + + if let title { + title + .font(.title3) + .fontWeight(.semibold) + } + + if let description { + description + .multilineTextAlignment(.center) + } + + if onLearnMore != nil { + Text(L10n.learnMore + "\u{2026}") + .foregroundStyle(accentColor) + } + } + .font(.subheadline) + .frame(maxWidth: .infinity) + .padding(16) + } + .foregroundStyle(.primary, .secondary) + } + + var body: some View { + ZStack { + RoundedRectangle(cornerRadius: 16) + .fill(Color.secondarySystemBackground) + + SeparatorVStack { + RowDivider() + } content: { + if title != nil || description != nil { + header + } + + content() + .listRowSeparator(.hidden) + .padding(.init(vertical: 5, horizontal: 20)) + .listRowInsets(.init(vertical: 10, horizontal: 20)) + } + } + } +} + +extension InsetGroupedListHeader { + + init( + _ title: String? = nil, + description: String? = nil, + onLearnMore: (() -> Void)? = nil, + @ViewBuilder content: @escaping () -> Content + ) { + self.init( + content: content, + title: title == nil ? nil : Text(title!), + description: description == nil ? nil : Text(description!), + onLearnMore: onLearnMore + ) + } + + init( + title: Text, + description: Text? = nil, + onLearnMore: (() -> Void)? = nil, + @ViewBuilder content: @escaping () -> Content + ) { + self.init( + content: content, + title: title, + description: description, + onLearnMore: onLearnMore + ) + } +} + +extension InsetGroupedListHeader where Content == EmptyView { + + init( + _ title: String, + description: String? = nil, + onLearnMore: (() -> Void)? = nil + ) { + self.init( + content: { EmptyView() }, + title: Text(title), + description: description == nil ? nil : Text(description!), + onLearnMore: onLearnMore + ) + } + + init( + title: Text, + description: Text? = nil, + onLearnMore: (() -> Void)? = nil + ) { + self.init( + content: { EmptyView() }, + title: title, + description: description, + onLearnMore: onLearnMore + ) + } +} diff --git a/Swiftfin/Components/LocalUserAccessPolicyView.swift b/Swiftfin/Components/LocalUserAccessPolicyView.swift new file mode 100644 index 00000000..9786f4e9 --- /dev/null +++ b/Swiftfin/Components/LocalUserAccessPolicyView.swift @@ -0,0 +1,105 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct LocalUserAccessPolicyView: View { + + @Binding + private var pinHint: String + @Binding + private var accessPolicy: UserAccessPolicy + + @Router + private var router + + @State + private var listSize: CGSize = .zero + @State + private var updatePinHint: String + @State + private var updateSignInPolicy: UserAccessPolicy + + init( + pinHint: Binding, + accessPolicy: Binding + ) { + self._pinHint = pinHint + self._accessPolicy = accessPolicy + self._updatePinHint = State(initialValue: pinHint.wrappedValue) + self._updateSignInPolicy = State(initialValue: accessPolicy.wrappedValue) + } + + var body: some View { + List { + Section { + CaseIterablePicker(L10n.security, selection: $updateSignInPolicy) + } footer: { + VStack(alignment: .leading, spacing: 10) { + Text( + L10n.additionalSecurityAccessDescription + ) + + // frame necessary with bug within BulletedList + BulletedList { + + VStack(alignment: .leading, spacing: 5) { + Text(UserAccessPolicy.requireDeviceAuthentication.displayTitle) + .fontWeight(.semibold) + + Text(L10n.requireDeviceAuthDescription) + } + + VStack(alignment: .leading, spacing: 5) { + Text(UserAccessPolicy.requirePin.displayTitle) + .fontWeight(.semibold) + + Text(L10n.requirePinDescription) + } + + VStack(alignment: .leading, spacing: 5) { + Text(UserAccessPolicy.none.displayTitle) + .fontWeight(.semibold) + + Text(L10n.saveUserWithoutAuthDescription) + } + } + .frame(width: max(10, listSize.width - 50)) + } + } + + if accessPolicy == .requirePin { + Section { + TextField(L10n.hint, text: $updatePinHint) + } header: { + Text(L10n.hint) + } footer: { + Text(L10n.setPinHintDescription) + } + } + } + .animation(.linear, value: accessPolicy) + .navigationTitle(L10n.security) + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton { + router.dismiss() + } + .onChange(of: updatePinHint) { newValue in + let truncated = String(newValue.prefix(120)) + updatePinHint = truncated + pinHint = truncated + } + .onChange(of: updatePinHint) { newValue in + pinHint = newValue + } + .onChange(of: updateSignInPolicy) { newValue in + accessPolicy = newValue + } + .trackingSize($listSize) + } +} diff --git a/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift b/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift new file mode 100644 index 00000000..97fcf6c6 --- /dev/null +++ b/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +extension NavigationBarFilterDrawer { + + struct FilterDrawerButton: View { + + @Default(.accentColor) + private var accentColor + + @Environment(\.isSelected) + private var isSelected + + private let systemName: String? + private let title: String + private var onSelect: () -> Void + + var body: some View { + Button { + onSelect() + } label: { + HStack(spacing: 2) { + Group { + if let systemName = systemName { + Image(systemName: systemName) + } else { + Text(title) + } + } + .font(.footnote.weight(.semibold)) + + Image(systemName: "chevron.down") + .font(.caption) + } + .foregroundColor(.primary) + .padding(.horizontal, 10) + .padding(.vertical, 5) + .background { + Capsule() + .foregroundColor(isSelected ? accentColor : Color(UIColor.secondarySystemFill)) + .opacity(0.5) + } + .overlay { + Capsule() + .stroke(isSelected ? accentColor : Color(UIColor.secondarySystemFill), lineWidth: 1) + } + } + } + } +} + +extension NavigationBarFilterDrawer.FilterDrawerButton { + + init(title: String) { + self.init( + systemName: nil, + title: title, + onSelect: {} + ) + } + + init(systemName: String) { + self.init( + systemName: systemName, + title: "", + onSelect: {} + ) + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift b/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift new file mode 100644 index 00000000..ac92971e --- /dev/null +++ b/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift @@ -0,0 +1,72 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +struct NavigationBarFilterDrawer: View { + + struct Parameters { + let type: ItemFilterType + let viewModel: FilterViewModel + } + + @ObservedObject + private var viewModel: FilterViewModel + + private var filterTypes: [ItemFilterType] + private var onSelect: (Parameters) -> Void + + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack { + if viewModel.currentFilters.hasFilters { + Menu { + Button(L10n.reset, role: .destructive) { + viewModel.send(.reset()) + } + } label: { + FilterDrawerButton(systemName: "line.3.horizontal.decrease.circle.fill") + .isSelected(true) + } + } + + ForEach(filterTypes, id: \.self) { type in + FilterDrawerButton( + title: type.displayTitle + ) + .onSelect { + onSelect(.init(type: type, viewModel: viewModel)) + } + .environment( + \.isSelected, + viewModel.isFilterSelected(type: type) + ) + } + } + .padding(.horizontal) + .padding(.vertical, 1) + } + } +} + +extension NavigationBarFilterDrawer { + + init(viewModel: FilterViewModel, types: [ItemFilterType]) { + self.init( + viewModel: viewModel, + filterTypes: types, + onSelect: { _ in } + ) + } + + func onSelect(_ action: @escaping (Parameters) -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin/Components/OrderedSectionSelectorView.swift b/Swiftfin/Components/OrderedSectionSelectorView.swift new file mode 100644 index 00000000..6f0b4577 --- /dev/null +++ b/Swiftfin/Components/OrderedSectionSelectorView.swift @@ -0,0 +1,124 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct OrderedSectionSelectorView: View { + + @Environment(\.editMode) + private var editMode + + @StateObject + private var selection: BindingBox<[Element]> + + private var disabledSelection: [Element] { + sources.subtracting(selection.value) + } + + private var label: (Element) -> any View + private let sources: [Element] + + private func move(from source: IndexSet, to destination: Int) { + selection.value.move(fromOffsets: source, toOffset: destination) + } + + private func select(element: Element) { + + UIDevice.impact(.light) + + if selection.value.contains(element) { + selection.value.removeAll(where: { $0 == element }) + } else { + selection.value.append(element) + } + } + + private var isReordering: Bool { + editMode?.wrappedValue.isEditing ?? false + } + + var body: some View { + List { + Section(L10n.enabled) { + + if selection.value.isEmpty { + L10n.none.text + .foregroundStyle(.secondary) + } + + ForEach(selection.value, id: \.self) { element in + Button { + if !isReordering { + select(element: element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isReordering { + Image(systemName: "minus.circle.fill") + .foregroundColor(.red) + } + } + .foregroundColor(.primary) + } + } + .onMove(perform: move) + } + + Section(L10n.disabled) { + + if disabledSelection.isEmpty { + L10n.none.text + .foregroundStyle(.secondary) + } + + ForEach(disabledSelection, id: \.self) { element in + Button { + if !isReordering { + select(element: element) + } + } label: { + HStack { + label(element) + .eraseToAnyView() + + Spacer() + + if !isReordering { + Image(systemName: "plus.circle.fill") + .foregroundColor(.green) + } + } + .foregroundColor(.primary) + } + } + } + } + .animation(.linear(duration: 0.2), value: selection.value) + .toolbar { + EditButton() + } + } +} + +extension OrderedSectionSelectorView { + + init(selection: Binding<[Element]>, sources: [Element]) { + self._selection = StateObject(wrappedValue: BindingBox(source: selection)) + self.sources = sources + self.label = { Text($0.displayTitle).foregroundColor(.primary) } + } + + func label(@ViewBuilder _ content: @escaping (Element) -> any View) -> Self { + copy(modifying: \.label, with: content) + } +} diff --git a/Swiftfin/Components/OverlayToastView.swift b/Swiftfin/Components/OverlayToastView.swift new file mode 100644 index 00000000..baed7c1e --- /dev/null +++ b/Swiftfin/Components/OverlayToastView.swift @@ -0,0 +1,107 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import SwiftUI +import Transmission + +// TODO: make enhanced toasting system +// - allow actions +// - multiple toasts +// - sizes, stacked +// TODO: symbol effects + +// TODO: fix rapid fire animations +// - have one that's presentation based, one just basic overlay? + +/// A basic toasting container view that will present +/// given toasts on top of the given content. +struct OverlayToastView: View { + + @StateObject + private var toastProxy: ToastProxy + + private let content: Content + + init( + @ViewBuilder content: () -> Content + ) { + self._toastProxy = StateObject(wrappedValue: .init()) + self.content = content() + } + + init( + proxy: ToastProxy, + @ViewBuilder content: () -> Content + ) { + self._toastProxy = StateObject(wrappedValue: proxy) + self.content = content() + } + + var body: some View { + content + .presentation( + transition: .toast( + edge: .top, + isInteractive: true, + preferredPresentationBackgroundColor: .clear + ), + isPresented: $toastProxy.isPresenting + ) { + OverlayToastContent() + .environmentObject(toastProxy) + } + .environmentObject(toastProxy) + } +} + +private struct OverlayToastContent: View { + + @Environment(\.presentationCoordinator) + private var presentationCoordinator + + @EnvironmentObject + private var proxy: ToastProxy + + var body: some View { + Button { + presentationCoordinator.dismiss() + } label: { + HStack { + if let systemName = proxy.systemName { + Image(systemName: systemName) + .renderingMode(.template) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 25, height: 25) + } + + proxy.title + .font(.body) + .fontWeight(.bold) + .monospacedDigit() + } + .padding(.horizontal, 24) + .padding(.vertical, 8) + .frame(minHeight: 50) + .background(BlurView()) + .clipShape(Capsule()) + .overlay(Capsule().stroke(Color.gray.opacity(0.2), lineWidth: 1)) + .shadow(color: Color.black.opacity(0.1), radius: 5, x: 0, y: 6) + } + .buttonStyle(ToastButtonStyle()) + } + + struct ToastButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + .scaleEffect(configuration.isPressed ? 0.92 : 1) + .animation(.interactiveSpring, value: configuration.isPressed) + } + } +} diff --git a/Swiftfin/Components/PillHStack.swift b/Swiftfin/Components/PillHStack.swift new file mode 100644 index 00000000..ce8707a7 --- /dev/null +++ b/Swiftfin/Components/PillHStack.swift @@ -0,0 +1,62 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct PillHStack: View { + + private var title: String + private var items: [Item] + private var onSelect: (Item) -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text(title) + .font(.title2) + .fontWeight(.semibold) + .accessibility(addTraits: [.isHeader]) + .edgePadding(.leading) + + ScrollView(.horizontal, showsIndicators: false) { + HStack { + ForEach(items, id: \.displayTitle) { item in + Button { + onSelect(item) + } label: { + Text(item.displayTitle) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.primary) + .padding(10) + .background { + Color.systemFill + .cornerRadius(10) + } + } + } + } + .edgePadding(.horizontal) + } + } + } +} + +extension PillHStack { + + init(title: String, items: [Item]) { + self.init( + title: title, + items: items, + onSelect: { _ in } + ) + } + + func onSelect(_ action: @escaping (Item) -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin/Components/PosterButton.swift b/Swiftfin/Components/PosterButton.swift new file mode 100644 index 00000000..b5eeb80c --- /dev/null +++ b/Swiftfin/Components/PosterButton.swift @@ -0,0 +1,221 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +// TODO: expose `ImageView.image` modifier for image aspect fill/fit + +struct PosterButton: View { + + @EnvironmentTypeValue(\.posterOverlayRegistry) + private var posterOverlayRegistry + + @Namespace + private var namespace + + @State + private var posterSize: CGSize = .zero + + private let item: Item + private let type: PosterDisplayType + private let label: any View + private let action: (Namespace.ID) -> Void + + @ViewBuilder + private func posterView(overlay: some View = EmptyView()) -> some View { + VStack(alignment: .leading) { + PosterImage(item: item, type: type) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .overlay { overlay } + .contentShape(.contextMenuPreview, Rectangle()) + .posterCornerRadius(type) + .backport + .matchedTransitionSource(id: "item", in: namespace) + .posterShadow() + + label + .eraseToAnyView() + .allowsHitTesting(false) + } + } + + var body: some View { + Button { + action(namespace) + } label: { + let overlay = posterOverlayRegistry?(item) ?? + PosterButton.DefaultOverlay(item: item) + .eraseToAnyView() + + posterView(overlay: overlay) + .trackingSize($posterSize) + } + .foregroundStyle(.primary, .secondary) + .buttonStyle(.plain) + .matchedContextMenu(for: item) { + let frameScale = 1.3 + + posterView() + .frame( + width: posterSize.width * frameScale, + height: posterSize.height * frameScale + ) + .padding(20) + .background { + RoundedRectangle(cornerRadius: 10) + .fill(Color(uiColor: UIColor.secondarySystemGroupedBackground)) + } + } + } +} + +extension PosterButton { + + init( + item: Item, + type: PosterDisplayType, + action: @escaping (Namespace.ID) -> Void, + @ViewBuilder label: @escaping () -> any View + ) { + self.item = item + self.type = type + self.action = action + self.label = label() + } +} + +// TODO: remove these and replace with `TextStyle` + +extension PosterButton { + + // MARK: Default Content + + struct TitleContentView: View { + + let title: String + + var body: some View { + Text(title) + .font(.footnote) + .fontWeight(.regular) + .foregroundStyle(.primary) + } + } + + struct SubtitleContentView: View { + + let subtitle: String? + + var body: some View { + Text(subtitle ?? " ") + .font(.caption) + .fontWeight(.medium) + .foregroundStyle(.secondary) + } + } + + struct TitleSubtitleContentView: View { + + let item: Item + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + if item.showTitle { + TitleContentView(title: item.displayTitle) + .lineLimit(1, reservesSpace: true) + } + + SubtitleContentView(subtitle: item.subtitle) + .lineLimit(1, reservesSpace: true) + } + } + } + + // Content specific for BaseItemDto episode items + struct EpisodeContentSubtitleContent: View { + + @Default(.Customization.Episodes.useSeriesLandscapeBackdrop) + private var useSeriesLandscapeBackdrop + + let item: Item + + var body: some View { + if let item = item as? BaseItemDto { + // Unsure why this needs 0 spacing + // compared to other default content + VStack(alignment: .leading, spacing: 0) { + if item.showTitle, let seriesName = item.seriesName { + Text(seriesName) + .font(.footnote) + .fontWeight(.regular) + .foregroundColor(.primary) + .lineLimit(1, reservesSpace: true) + } + + DotHStack(padding: 3) { + Text(item.seasonEpisodeLabel ?? .emptyDash) + + if item.showTitle || useSeriesLandscapeBackdrop { + Text(item.displayTitle) + } else if let seriesName = item.seriesName { + Text(seriesName) + } + } + .font(.caption) + .foregroundColor(.secondary) + .lineLimit(1) + } + } + } + } + + // MARK: Default Overlay + + struct DefaultOverlay: View { + + @Default(.accentColor) + private var accentColor + @Default(.Customization.Indicators.showFavorited) + private var showFavorited + @Default(.Customization.Indicators.showProgress) + private var showProgress + @Default(.Customization.Indicators.showUnplayed) + private var showUnplayed + @Default(.Customization.Indicators.showPlayed) + private var showPlayed + + let item: Item + + var body: some View { + ZStack { + if let item = item as? BaseItemDto { + if item.canBePlayed, !item.isLiveStream, item.userData?.isPlayed == true { + WatchedIndicator(size: 25) + .isVisible(showPlayed) + } else { + if (item.userData?.playbackPositionTicks ?? 0) > 0 { + ProgressIndicator(progress: (item.userData?.playedPercentage ?? 0) / 100, height: 5) + .isVisible(showProgress) + } else if item.canBePlayed, !item.isLiveStream { + UnwatchedIndicator(size: 25) + .foregroundColor(accentColor) + .isVisible(showUnplayed) + } + } + + if item.userData?.isFavorite == true { + FavoriteIndicator(size: 25) + .isVisible(showFavorited) + } + } + } + } + } +} diff --git a/Swiftfin/Components/PosterHStack.swift b/Swiftfin/Components/PosterHStack.swift new file mode 100644 index 00000000..7d9ba6b0 --- /dev/null +++ b/Swiftfin/Components/PosterHStack.swift @@ -0,0 +1,122 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import CollectionHStack +import SwiftUI + +// TODO: Migrate to single `header: View` + +struct PosterHStack: View where Data.Element == Element, Data.Index == Int { + + private var data: Data + private var header: () -> any View + private var title: String? + private var type: PosterDisplayType + private var label: (Element) -> any View + private var trailingContent: () -> any View + private var action: (Element, Namespace.ID) -> Void + + private var layout: CollectionHStackLayout { + if UIDevice.isPhone { + return .grid( + columns: type == .landscape ? 2 : 3, + rows: 1, + columnTrailingInset: 0 + ) + } else { + return .minimumWidth( + columnWidth: type == .landscape ? 220 : 140, + rows: 1 + ) + } + } + + @ViewBuilder + private var stack: some View { + CollectionHStack( + uniqueElements: data, + layout: layout + ) { item in + PosterButton( + item: item, + type: type + ) { namespace in + action(item, namespace) + } label: { + label(item).eraseToAnyView() + } + } + .clipsToBounds(false) + .dataPrefix(20) + .insets(horizontal: EdgeInsets.edgePadding) + .itemSpacing(EdgeInsets.edgePadding / 2) + .scrollBehavior(.continuousLeadingEdge) + } + + var body: some View { + VStack(alignment: .leading) { + + HStack { + header() + .eraseToAnyView() + + Spacer() + + trailingContent() + .eraseToAnyView() + } + .edgePadding(.horizontal) + + stack + } + } +} + +extension PosterHStack { + + init( + title: String? = nil, + type: PosterDisplayType, + items: Data, + action: @escaping (Element, Namespace.ID) -> Void, + @ViewBuilder label: @escaping (Element) -> any View = { PosterButton.TitleSubtitleContentView(item: $0) } + ) { + self.init( + data: items, + header: { DefaultHeader(title: title) }, + title: title, + type: type, + label: label, + trailingContent: { EmptyView() }, + action: action + ) + } + + func trailing(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.trailingContent, with: content) + } +} + +// MARK: Default Header + +extension PosterHStack { + + struct DefaultHeader: View { + + let title: String? + + var body: some View { + if let title { + Text(title) + .font(.title2) + .fontWeight(.semibold) + .accessibility(addTraits: [.isHeader]) + } + } + } +} diff --git a/Swiftfin/Components/PrimaryButton.swift b/Swiftfin/Components/PrimaryButton.swift new file mode 100644 index 00000000..87cee22a --- /dev/null +++ b/Swiftfin/Components/PrimaryButton.swift @@ -0,0 +1,51 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct PrimaryButton: View { + + @Default(.accentColor) + private var accentColor + + private let title: String + private var onSelect: () -> Void + + var body: some View { + Button { + onSelect() + } label: { + ZStack { + Rectangle() + .foregroundColor(accentColor) + .frame(maxWidth: 400) + .frame(height: 50) + .cornerRadius(10) + + Text(title) + .fontWeight(.bold) + .foregroundColor(accentColor.overlayColor) + } + } + } +} + +extension PrimaryButton { + + init(title: String) { + self.init( + title: title, + onSelect: {} + ) + } + + func onSelect(_ action: @escaping () -> Void) -> Self { + copy(modifying: \.onSelect, with: action) + } +} diff --git a/Swiftfin/Components/SeeAllButton.swift b/Swiftfin/Components/SeeAllButton.swift new file mode 100644 index 00000000..5ea652b1 --- /dev/null +++ b/Swiftfin/Components/SeeAllButton.swift @@ -0,0 +1,37 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct SeeAllButton: View { + + private var action: () -> Void + + var body: some View { + Button( + L10n.seeAll, + systemImage: "chevron.right", + action: action + ) + .font(.subheadline.weight(.bold)) + .labelStyle(.titleAndIcon.trailingIcon) + } +} + +extension SeeAllButton { + + init() { + self.init( + action: {} + ) + } + + func onSelect(perform action: @escaping () -> Void) -> Self { + copy(modifying: \.action, with: action) + } +} diff --git a/Swiftfin/Components/SettingsBarButton.swift b/Swiftfin/Components/SettingsBarButton.swift new file mode 100644 index 00000000..45b81164 --- /dev/null +++ b/Swiftfin/Components/SettingsBarButton.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Factory +import SwiftUI + +struct SettingsBarButton: View { + + let server: ServerState + let user: UserState + let action: () -> Void + + var body: some View { + Button(action: action) { + AlternateLayoutView { + // Seems necessary for button layout + Image(systemName: "gearshape.fill") + } content: { + UserProfileImage( + userID: user.id, + source: user.profileImageSource( + client: server.client, + maxWidth: 120 + ), + pipeline: .Swiftfin.local + ) + } + } + .accessibilityLabel(L10n.settings) + } +} diff --git a/Swiftfin/Components/Slider/CapsuleSlider.swift b/Swiftfin/Components/Slider/CapsuleSlider.swift new file mode 100644 index 00000000..3cc65ef7 --- /dev/null +++ b/Swiftfin/Components/Slider/CapsuleSlider.swift @@ -0,0 +1,150 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: change "damping" behavior +// - change to be based on given stride of `Value` +// to translation diff step + +struct CapsuleSlider: View { + + @Binding + private var value: Value + + @State + private var contentSize: CGSize = .zero + @State + private var gestureTranslation: CGPoint = .zero + @State + private var isEditing: Bool = false + @State + private var translationStartLocation: CGPoint = .zero + + @State + private var currentValueDampingStartTranslation: CGPoint = .zero + @State + private var currentValueDamping: Double = 1.0 + @State + private var currentValueDampingStartValue: Value = .zero + + @State + private var needsToSetTranslationStartState: Bool = true + + private var gesturePadding: CGFloat + private var onEditingChanged: (Bool) -> Void + private let total: Value + private let translationBinding: Binding + private let valueDamping: Double + + private var dragGesture: some Gesture { + DragGesture(coordinateSpace: .global) + .onChanged { newValue in + if needsToSetTranslationStartState { + translationStartLocation = newValue.location + needsToSetTranslationStartState = false + + currentValueDamping = valueDamping + currentValueDampingStartTranslation = newValue.location + currentValueDampingStartValue = value + } + + if valueDamping != currentValueDamping { + currentValueDamping = valueDamping + currentValueDampingStartTranslation = newValue.location + currentValueDampingStartValue = value + } + + gestureTranslation = CGPoint( + x: translationStartLocation.x - newValue.location.x, + y: translationStartLocation.y - newValue.location.y + ) + + let newTranslation = CGPoint( + x: (currentValueDampingStartTranslation.x - newValue.location.x) * currentValueDamping, + y: currentValueDampingStartTranslation.y - newValue.location.y + ) + + let newProgress = currentValueDampingStartValue - Value(newTranslation.x / contentSize.width) * total + value = clamp(newProgress, min: 0, max: total) + } + } + + var body: some View { + ProgressView(value: value, total: total) + .progressViewStyle(.playback) + .overlay { + Color.clear + .frame(height: contentSize.height + gesturePadding) + .contentShape(Rectangle()) + .highPriorityGesture(dragGesture) + .onLongPressGesture(minimumDuration: 0.01, perform: {}) { isPressing in + if isPressing { + isEditing = true + onEditingChanged(true) + needsToSetTranslationStartState = true + } else { + translationBinding.wrappedValue = .zero + isEditing = false + onEditingChanged(false) + } + } + } + .trackingSize($contentSize) + .onChange(of: value) { newValue in + guard isEditing else { return } + + if newValue == 0 || newValue == total { + UIDevice.impact(.light) + } + } + .onChange(of: gestureTranslation) { newValue in + if isEditing { + translationBinding.wrappedValue = newValue + } + } + } +} + +extension CapsuleSlider { + + init( + value: Binding, + total: Value = 1.0, + valueDamping: Double = 1.0 + ) { + self.init( + value: value, + total: total, + translation: .constant(.zero), + valueDamping: valueDamping + ) + } + + init( + value: Binding, + total: Value = 1.0, + translation: Binding, + valueDamping: Double = 1.0 + ) { + self._value = value + self.gesturePadding = 0 + self.onEditingChanged = { _ in } + self.total = total + self.translationBinding = translation + self.valueDamping = clamp(valueDamping, min: 0.01, max: 2) + } + + func onEditingChanged(perform action: @escaping (Bool) -> Void) -> Self { + copy(modifying: \.onEditingChanged, with: action) + } + + func gesturePadding(_ padding: CGFloat) -> Self { + copy(modifying: \.gesturePadding, with: padding) + } +} diff --git a/Swiftfin/Components/Slider/ThumbSlider.swift b/Swiftfin/Components/Slider/ThumbSlider.swift new file mode 100644 index 00000000..3c00bd13 --- /dev/null +++ b/Swiftfin/Components/Slider/ThumbSlider.swift @@ -0,0 +1,103 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: gesture padding + +struct ThumbSlider: View { + + @Binding + private var value: V + + @State + private var contentSize: CGSize = .zero + @State + private var isEditing: Bool = false + @State + private var translationStartLocation: CGPoint = .zero + @State + private var translationStartValue: V = 0 + @State + private var currentTranslation: CGFloat = 0 + + private var onEditingChanged: (Bool) -> Void + private let total: V + private var trackMask: () -> any View + + private var trackDrag: some Gesture { + DragGesture(coordinateSpace: .global) + .onChanged { newValue in + if !isEditing { + isEditing = true + onEditingChanged(true) + translationStartValue = value + translationStartLocation = newValue.location + currentTranslation = 0 + } + + currentTranslation = translationStartLocation.x - newValue.location.x + + let newProgress = translationStartValue - V(currentTranslation / contentSize.width) * total + value = clamp(newProgress, min: 0, max: total) + } + .onEnded { _ in + isEditing = false + onEditingChanged(false) + } + } + + var body: some View { + ProgressView(value: value, total: total) + .progressViewStyle(.playback.square) + .overlay(alignment: .leading) { + Circle() + .foregroundStyle(.primary) + .frame(height: 20) + .gesture(trackDrag) + .offset(x: Double(value / total) * contentSize.width - 10) + } + .trackingSize($contentSize) + } +} + +extension ThumbSlider { + + init(value: Binding, total: V = 1.0) { + self.init( + value: value, + onEditingChanged: { _ in }, + total: total, + trackMask: { Color.white } + ) + } + + func onEditingChanged(_ action: @escaping (Bool) -> Void) -> Self { + copy(modifying: \.onEditingChanged, with: action) + } + + func trackMask(@ViewBuilder _ content: @escaping () -> any View) -> Self { + copy(modifying: \.trackMask, with: content) + } +} + +struct ThumbSliderTests: View { + + @State + private var value: Double = 0.3 + + var body: some View { + ThumbSlider(value: $value, total: 1.0) + .frame(height: 5) + .padding(.horizontal, 10) + } +} + +#Preview { + ThumbSliderTests() +} diff --git a/Swiftfin/Components/UnmaskSecureField.swift b/Swiftfin/Components/UnmaskSecureField.swift new file mode 100644 index 00000000..46c21b63 --- /dev/null +++ b/Swiftfin/Components/UnmaskSecureField.swift @@ -0,0 +1,146 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: use _UIHostingView for button animation workaround? +// - have a nice animation for toggle + +/// - Note: Do not use this view directly. +/// Use `SecureField.init(_:text:maskToggle)` instead +struct _UnmaskSecureField: UIViewRepresentable { + + private var submitAction: () -> Void + private let text: Binding + private let title: String + + init( + _ title: String, + text: Binding + ) { + self.text = text + self.title = title + self.submitAction = {} + } + + func makeUIView(context: Context) -> UITextField { + + let textField = UITextField() + textField.font = context.environment.font?.uiFont ?? UIFont.preferredFont(forTextStyle: .body) + textField.adjustsFontForContentSizeCategory = true + textField.isSecureTextEntry = true + textField.keyboardType = .asciiCapable + textField.placeholder = title + textField.text = text.wrappedValue + textField.addTarget( + context.coordinator, + action: #selector(Coordinator.textDidChange), + for: .editingChanged + ) + + let button = UIButton(type: .custom) + button.translatesAutoresizingMaskIntoConstraints = false + button.addTarget( + context.coordinator, + action: #selector(Coordinator.buttonPressed), + for: .touchUpInside + ) + button.setImage( + UIImage(systemName: "eye.fill"), + for: .normal + ) + + NSLayoutConstraint.activate([ + button.heightAnchor.constraint(equalToConstant: 50), + button.widthAnchor.constraint(equalToConstant: 50), + ]) + + textField.rightView = button + textField.rightViewMode = .always + + context.coordinator.button = button + context.coordinator.submitAction = submitAction + context.coordinator.textField = textField + context.coordinator.textDidChange() + context.coordinator.textBinding = text + + textField.delegate = context.coordinator + + return textField + } + + func updateUIView(_ textField: UITextField, context: Context) { + if text.wrappedValue != textField.text { + textField.text = text.wrappedValue + } + + context.coordinator.submitAction = submitAction + } + + func makeCoordinator() -> Coordinator { + Coordinator() + } + + class Coordinator: NSObject, UITextFieldDelegate { + + weak var button: UIButton? + weak var textField: UITextField? + var textBinding: Binding = .constant("") + var submitAction: () -> Void = {} + + @objc + func buttonPressed() { + guard let textField else { return } + textField.toggleSecureEntry() + + let eye = textField.isSecureTextEntry ? "eye.fill" : "eye.slash" + button?.setImage(UIImage(systemName: eye), for: .normal) + } + + @objc + func textDidChange() { + guard let textField, let text = textField.text else { return } + button?.isEnabled = !text.isEmpty + textBinding.wrappedValue = text + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + submitAction() + return true + } + } +} + +extension _UnmaskSecureField { + + func onSubmit(_ action: @escaping () -> Void) -> some View { + copy(modifying: \.submitAction, with: action) + } +} + +private extension UITextField { + + // https://stackoverflow.com/a/48115361 + func toggleSecureEntry() { + + isSecureTextEntry.toggle() + + if let existingText = text, isSecureTextEntry { + deleteBackward() + + if let textRange = textRange(from: beginningOfDocument, to: endOfDocument) { + replace(textRange, withText: existingText) + } + } + + if let existingSelectedTextRange = selectedTextRange { + selectedTextRange = nil + selectedTextRange = existingSelectedTextRange + } + } +} diff --git a/Swiftfin/Components/Video3DFormatPicker.swift b/Swiftfin/Components/Video3DFormatPicker.swift new file mode 100644 index 00000000..f5916cde --- /dev/null +++ b/Swiftfin/Components/Video3DFormatPicker.swift @@ -0,0 +1,25 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct Video3DFormatPicker: View { + let title: String + @Binding + var selectedFormat: Video3DFormat? + + var body: some View { + Picker(title, selection: $selectedFormat) { + Text(L10n.none).tag(nil as Video3DFormat?) + ForEach(Video3DFormat.allCases, id: \.self) { format in + Text(format.displayTitle).tag(format as Video3DFormat?) + } + } + } +} diff --git a/Swiftfin/Extensions/ButtonStyle-iOS.swift b/Swiftfin/Extensions/ButtonStyle-iOS.swift new file mode 100644 index 00000000..288052e7 --- /dev/null +++ b/Swiftfin/Extensions/ButtonStyle-iOS.swift @@ -0,0 +1,124 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +/// - Important: On iOS, this is a `BorderlessButtonStyle` instead. +/// This is only used to allow platform shared views. +extension PrimitiveButtonStyle where Self == BorderlessButtonStyle { + static var card: BorderlessButtonStyle { .init() } +} + +extension ButtonStyle where Self == ToolbarPillButtonStyle { + + static var toolbarPill: ToolbarPillButtonStyle { + ToolbarPillButtonStyle(primary: Defaults[.accentColor], secondary: .secondary) + } + + static func toolbarPill(_ primary: Color, _ secondary: Color = Color.secondary) -> ToolbarPillButtonStyle { + ToolbarPillButtonStyle(primary: primary, secondary: secondary) + } +} + +// TODO: don't take `Color`, take generic `ShapeStyle` +struct ToolbarPillButtonStyle: ButtonStyle { + + @Environment(\.isEnabled) + private var isEnabled + + let primary: Color + let secondary: Color + + func makeBody(configuration: Configuration) -> some View { + configuration.label + .foregroundStyle(isEnabled ? primary.overlayColor : secondary) + .font(.headline) + .padding(.vertical, 5) + .padding(.horizontal, 10) + .background(isEnabled ? primary : secondary) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .opacity(isEnabled && !configuration.isPressed ? 1 : 0.5) + } +} + +extension ButtonStyle where Self == TintedMaterialButtonStyle { + + // TODO: just be `Material` backed instead of `TintedMaterial` + static var material: TintedMaterialButtonStyle { + TintedMaterialButtonStyle(tint: Color.clear, foregroundColor: Color.primary) + } + + static func tintedMaterial(tint: Color, foregroundColor: Color) -> TintedMaterialButtonStyle { + TintedMaterialButtonStyle( + tint: tint, + foregroundColor: foregroundColor + ) + } +} + +struct TintedMaterialButtonStyle: ButtonStyle { + + @Environment(\.isSelected) + private var isSelected + @Environment(\.isEnabled) + private var isEnabled + + // Take tint instead of reading from view as + // global accent color causes flashes of color + let tint: Color + let foregroundColor: Color + + func makeBody(configuration: Configuration) -> some View { + ZStack { + // TODO: use container relative shape instead of corner radius + TintedMaterial(tint: buttonTint) + .cornerRadius(10) + .id(isSelected) + + configuration.label + .foregroundStyle(foregroundStyle) + .symbolRenderingMode(.monochrome) + } + } + + private var buttonTint: Color { + if isEnabled && isSelected { + tint + } else { + Color.gray.opacity(0.3) + } + } + + private var foregroundStyle: AnyShapeStyle { + if isSelected { + AnyShapeStyle(foregroundColor) + } else if isEnabled { + AnyShapeStyle(HierarchicalShapeStyle.primary) + } else { + AnyShapeStyle(Color.gray.opacity(0.3)) + } + } +} + +extension ButtonStyle where Self == IsPressedButtonStyle { + + static func isPressed(_ isPressed: @escaping (Bool) -> Void) -> IsPressedButtonStyle { + IsPressedButtonStyle(isPressed: isPressed) + } +} + +struct IsPressedButtonStyle: ButtonStyle { + + let isPressed: (Bool) -> Void + + func makeBody(configuration: Configuration) -> some View { + configuration.label + .onChange(of: configuration.isPressed, perform: isPressed) + } +} diff --git a/Swiftfin/Extensions/LAContext.swift b/Swiftfin/Extensions/LAContext.swift new file mode 100644 index 00000000..b4207be6 --- /dev/null +++ b/Swiftfin/Extensions/LAContext.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import LocalAuthentication + +extension LAContext { + + func canEvaluatePolicy(_ policy: LAPolicy) throws { + var error: NSError? + _ = canEvaluatePolicy(policy, error: &error) + + if let error { + throw error + } + } +} diff --git a/Swiftfin/Extensions/Label-iOS.swift b/Swiftfin/Extensions/Label-iOS.swift new file mode 100644 index 00000000..b156c1cf --- /dev/null +++ b/Swiftfin/Extensions/Label-iOS.swift @@ -0,0 +1,61 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: see if could be moved to `Shared` + +// MARK: EpisodeSelectorLabelStyle + +extension LabelStyle where Self == EpisodeSelectorLabelStyle { + + static var episodeSelector: EpisodeSelectorLabelStyle { + EpisodeSelectorLabelStyle() + } +} + +struct EpisodeSelectorLabelStyle: LabelStyle { + + func makeBody(configuration: Configuration) -> some View { + HStack { + configuration.title + + configuration.icon + } + .font(.headline) + .padding(.vertical, 5) + .padding(.horizontal, 10) + .background { + Color.tertiarySystemFill + .cornerRadius(10) + } + .compositingGroup() + .shadow(radius: 1) + .font(.caption) + } +} + +// MARK: SectionFooterWithImageLabelStyle + +extension TitleAndIconLabelStyle { + + var trailingIcon: TrailingIconReversedButtonStyle { + TrailingIconReversedButtonStyle() + } +} + +struct TrailingIconReversedButtonStyle: LabelStyle { + + func makeBody(configuration: Configuration) -> some View { + HStack { + configuration.title + + configuration.icon + } + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift b/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift new file mode 100644 index 00000000..fb24906b --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift @@ -0,0 +1,22 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct DetectOrientation: ViewModifier { + + @Binding + var orientation: UIDeviceOrientation + + func body(content: Content) -> some View { + content + .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in + orientation = UIDevice.current.orientation + } + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift new file mode 100644 index 00000000..ddc9d9fd --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift @@ -0,0 +1,36 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct NavigationBarCloseButtonModifier: ViewModifier { + + @Default(.accentColor) + private var accentColor + + let disabled: Bool + let action: () -> Void + + func body(content: Content) -> some View { + content.toolbar { + ToolbarItemGroup(placement: .topBarLeading) { + Button { + action() + } label: { + Image(systemName: "xmark.circle.fill") + .fontWeight(.bold) + .symbolRenderingMode(.palette) + .foregroundStyle(accentColor.overlayColor, accentColor) + .opacity(disabled ? 0.75 : 1) + } + .disabled(disabled) + } + } + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift new file mode 100644 index 00000000..c6b363bf --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift @@ -0,0 +1,28 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct NavigationBarDrawerModifier: ViewModifier { + + private let drawer: () -> Drawer + + init(@ViewBuilder drawer: @escaping () -> Drawer) { + self.drawer = drawer + } + + func body(content: Content) -> some View { + NavigationBarDrawerView { + drawer() + .ignoresSafeArea() + } content: { + content + } + .ignoresSafeArea() + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift new file mode 100644 index 00000000..fe58581b --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift @@ -0,0 +1,113 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct NavigationBarDrawerView: UIViewControllerRepresentable { + + private let buttons: () -> Drawer + private let content: () -> Content + + init( + @ViewBuilder buttons: @escaping () -> Drawer, + @ViewBuilder content: @escaping () -> Content + ) { + self.buttons = buttons + self.content = content + } + + func makeUIViewController(context: Context) -> UINavigationBarDrawerHostingController { + UINavigationBarDrawerHostingController(buttons: buttons, content: content) + } + + func updateUIViewController(_ uiViewController: UINavigationBarDrawerHostingController, context: Context) {} +} + +class UINavigationBarDrawerHostingController: UIHostingController { + + private let drawer: () -> Drawer + private let content: () -> Content + + // TODO: see if we can get the height instead from the view passed in + private let drawerHeight: CGFloat = 36 + + private lazy var blurView: UIVisualEffectView = { + let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .systemThinMaterial)) + blurView.translatesAutoresizingMaskIntoConstraints = false + return blurView + }() + + private lazy var drawerButtonsView: UIHostingController = { + let drawerButtonsView = UIHostingController(rootView: drawer()) + drawerButtonsView.view.translatesAutoresizingMaskIntoConstraints = false + drawerButtonsView.view.backgroundColor = nil + return drawerButtonsView + }() + + init( + buttons: @escaping () -> Drawer, + content: @escaping () -> Content + ) { + self.drawer = buttons + self.content = content + + super.init(rootView: content()) + } + + @available(*, unavailable) + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = nil + + view.addSubview(blurView) + + addChild(drawerButtonsView) + view.addSubview(drawerButtonsView.view) + drawerButtonsView.didMove(toParent: self) + + NSLayoutConstraint.activate([ + drawerButtonsView.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: -drawerHeight), + drawerButtonsView.view.heightAnchor.constraint(equalToConstant: drawerHeight), + drawerButtonsView.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), + drawerButtonsView.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), + ]) + + NSLayoutConstraint.activate([ + blurView.topAnchor.constraint(equalTo: view.topAnchor), + blurView.bottomAnchor.constraint(equalTo: drawerButtonsView.view.bottomAnchor), + blurView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + blurView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + ]) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) + navigationController?.navigationBar.shadowImage = UIImage() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + navigationController?.navigationBar.setBackgroundImage(nil, for: .default) + navigationController?.navigationBar.shadowImage = nil + } + + override var additionalSafeAreaInsets: UIEdgeInsets { + get { + .init(top: drawerHeight, left: 0, bottom: 0, right: 0) + } + set { + super.additionalSafeAreaInsets = .init(top: drawerHeight, left: 0, bottom: 0, right: 0) + } + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift new file mode 100644 index 00000000..cc6eb6c3 --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift @@ -0,0 +1,40 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI + +struct NavigationBarMenuButtonModifier: ViewModifier { + + @Default(.accentColor) + private var accentColor + + let isLoading: Bool + let isHidden: Bool + let items: () -> Content + + func body(content: Self.Content) -> some View { + content.toolbar { + ToolbarItemGroup(placement: .topBarTrailing) { + + if isLoading { + ProgressView() + } + + if !isHidden { + Menu(L10n.options, systemImage: "ellipsis.circle") { + items() + } + .labelStyle(.iconOnly) + .fontWeight(.semibold) + .foregroundStyle(accentColor) + } + } + } + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift new file mode 100644 index 00000000..2c5469c6 --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift @@ -0,0 +1,29 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +struct NavigationBarOffsetModifier: ViewModifier { + + @Binding + var scrollViewOffset: CGFloat + + let start: CGFloat + let end: CGFloat + + func body(content: Content) -> some View { + NavigationBarOffsetView( + scrollViewOffset: $scrollViewOffset, + start: start, + end: end + ) { + content + } + .ignoresSafeArea() + } +} diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift new file mode 100644 index 00000000..5d22d1d1 --- /dev/null +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift @@ -0,0 +1,97 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +// TODO: fix lifecycle with zoom transition + +struct NavigationBarOffsetView: UIViewControllerRepresentable { + + @Binding + private var scrollViewOffset: CGFloat + + private let start: CGFloat + private let end: CGFloat + private let content: () -> Content + + init( + scrollViewOffset: Binding, + start: CGFloat, + end: CGFloat, + @ViewBuilder content: @escaping () -> Content + ) { + self._scrollViewOffset = scrollViewOffset + self.start = start + self.end = end + self.content = content + } + + func makeUIViewController(context: Context) -> UINavigationBarOffsetHostingController { + UINavigationBarOffsetHostingController(rootView: content()) + } + + func updateUIViewController(_ uiViewController: UINavigationBarOffsetHostingController, context: Context) { + uiViewController.scrollViewDidScroll(scrollViewOffset, start: start, end: end) + } +} + +class UINavigationBarOffsetHostingController: UIHostingController { + + private var lastAlpha: CGFloat = 0 + + private lazy var blurView: UIVisualEffectView = { + let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .systemThinMaterial)) + blurView.translatesAutoresizingMaskIntoConstraints = false + return blurView + }() + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = nil + + view.addSubview(blurView) + blurView.alpha = 0 + + NSLayoutConstraint.activate([ + blurView.topAnchor.constraint(equalTo: view.topAnchor), + blurView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + blurView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + blurView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + ]) + } + + func scrollViewDidScroll(_ offset: CGFloat, start: CGFloat, end: CGFloat) { + + let diff = end - start + let currentProgress = (offset - start) / diff + let alpha = clamp(currentProgress, min: 0, max: 1) + + navigationController?.navigationBar + .titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.label.withAlphaComponent(alpha)] + blurView.alpha = alpha + lastAlpha = alpha + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + navigationController?.navigationBar + .titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.label.withAlphaComponent(lastAlpha)] + navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) + navigationController?.navigationBar.shadowImage = UIImage() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.label] + navigationController?.navigationBar.setBackgroundImage(nil, for: .default) + navigationController?.navigationBar.shadowImage = nil + } +} diff --git a/Swiftfin/Extensions/View/View-iOS.swift b/Swiftfin/Extensions/View/View-iOS.swift new file mode 100644 index 00000000..4a61aa56 --- /dev/null +++ b/Swiftfin/Extensions/View/View-iOS.swift @@ -0,0 +1,81 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import SwiftUI +import SwiftUIIntrospect + +extension View { + + func detectOrientation(_ orientation: Binding) -> some View { + modifier(DetectOrientation(orientation: orientation)) + } + + func navigationBarOffset(_ scrollViewOffset: Binding, start: CGFloat, end: CGFloat) -> some View { + modifier(NavigationBarOffsetModifier(scrollViewOffset: scrollViewOffset, start: start, end: end)) + } + + func navigationBarDrawer(@ViewBuilder _ drawer: @escaping () -> Drawer) -> some View { + modifier(NavigationBarDrawerModifier(drawer: drawer)) + } + + @ViewBuilder + func navigationBarFilterDrawer( + viewModel: FilterViewModel, + types: [ItemFilterType], + onSelect: @escaping (NavigationBarFilterDrawer.Parameters) -> Void + ) -> some View { + if types.isEmpty { + self + } else { + navigationBarDrawer { + NavigationBarFilterDrawer( + viewModel: viewModel, + types: types + ) + .onSelect(onSelect) + } + } + } + + @ViewBuilder + func navigationBarCloseButton( + disabled: Bool = false, + _ action: @escaping () -> Void + ) -> some View { + modifier( + NavigationBarCloseButtonModifier( + disabled: disabled, + action: action + ) + ) + } + + @ViewBuilder + func navigationBarMenuButton( + isLoading: Bool = false, + isHidden: Bool = false, + @ViewBuilder + _ items: @escaping () -> Content + ) -> some View { + modifier( + NavigationBarMenuButtonModifier( + isLoading: isLoading, + isHidden: isHidden, + items: items + ) + ) + } + + @ViewBuilder + func listRowCornerRadius(_ radius: CGFloat) -> some View { + introspect(.listCell, on: .iOS(.v16), .iOS(.v17), .iOS(.v18)) { cell in + cell.layer.cornerRadius = radius + } + } +} diff --git a/Swiftfin/Objects/AppURLHandler.swift b/Swiftfin/Objects/AppURLHandler.swift new file mode 100644 index 00000000..5c64f0ca --- /dev/null +++ b/Swiftfin/Objects/AppURLHandler.swift @@ -0,0 +1,109 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation +import JellyfinAPI + +final class AppURLHandler { + static let deepLinkScheme = "jellyfin" + + enum AppURLState { + case launched + case allowedInLogin + case allowed + + func allowedScheme(with url: URL) -> Bool { + switch self { + case .launched: + return false + case .allowed: + return true + case .allowedInLogin: + return false + } + } + } + + static let shared = AppURLHandler() + + var cancellables = Set() + + var appURLState: AppURLState = .launched + var launchURL: URL? +} + +extension AppURLHandler { + @discardableResult + func processDeepLink(url: URL) -> Bool { + guard url.scheme == Self.deepLinkScheme || url.scheme == "widget-extension" else { + return false + } + if AppURLHandler.shared.appURLState.allowedScheme(with: url) { + return processURL(url) + } else { + launchURL = url + } + return true + } + + func processLaunchedURLIfNeeded() { + guard let launchURL = launchURL, + launchURL.absoluteString.isNotEmpty else { return } + if processDeepLink(url: launchURL) { + self.launchURL = nil + } + } + + private func processURL(_ url: URL) -> Bool { + if processURLForUser(url: url) { + return true + } + + return false + } + + private func processURLForUser(url: URL) -> Bool { + guard url.host?.lowercased() == "users", + url.pathComponents[safe: 1]?.isEmpty == false else { return false } + + // /Users/{UserID}/Items/{ItemID} + if url.pathComponents[safe: 2]?.lowercased() == "items", + let userID = url.pathComponents[safe: 1], + let itemID = url.pathComponents[safe: 3] + { + // It would be nice if the ItemViewModel could be initialized to id later. + getItem(userID: userID, itemID: itemID) { item in + guard let item = item else { return } + // TODO: reimplement URL handling +// Notifications[.processDeepLink].post(DeepLink.item(item)) + } + + return true + } + + return false + } +} + +extension AppURLHandler { + func getItem(userID: String, itemID: String, completion: @escaping (BaseItemDto?) -> Void) { +// UserLibraryAPI.getItem(userId: userID, itemId: itemID) +// .sink(receiveCompletion: { innerCompletion in +// switch innerCompletion { +// case .failure: +// completion(nil) +// default: +// break +// } +// }, receiveValue: { item in +// completion(item) +// }) +// .store(in: &cancellables) + } +} diff --git a/Swiftfin/Objects/DeepLink.swift b/Swiftfin/Objects/DeepLink.swift new file mode 100644 index 00000000..20d226b7 --- /dev/null +++ b/Swiftfin/Objects/DeepLink.swift @@ -0,0 +1,14 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI + +enum DeepLink { + case item(BaseItemDto) +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/AppIcon-dark-blue.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/AppIcon-dark-blue.svg new file mode 100644 index 00000000..0359f76d --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/AppIcon-dark-blue.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-blue + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/Contents.json new file mode 100644 index 00000000..ad53b2dc --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-blue.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-blue.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/AppIcon-dark-green.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/AppIcon-dark-green.svg new file mode 100644 index 00000000..fd482fa9 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/AppIcon-dark-green.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-green + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/Contents.json new file mode 100644 index 00000000..1f84f6cb --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-green.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-green.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/AppIcon-dark-jellyfin.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/AppIcon-dark-jellyfin.svg new file mode 100644 index 00000000..df67de89 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/AppIcon-dark-jellyfin.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-jellyfin + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/Contents.json new file mode 100644 index 00000000..151add20 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-jellyfin.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-jellyfin.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/AppIcon-dark-orange.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/AppIcon-dark-orange.svg new file mode 100644 index 00000000..62a768a5 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/AppIcon-dark-orange.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-orange + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/Contents.json new file mode 100644 index 00000000..c1b388f6 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-orange.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-orange.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/AppIcon-dark-red.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/AppIcon-dark-red.svg new file mode 100644 index 00000000..6c848265 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/AppIcon-dark-red.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-red + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/Contents.json new file mode 100644 index 00000000..7158d1b8 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-red.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-red.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/AppIcon-dark-yellow.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/AppIcon-dark-yellow.svg new file mode 100644 index 00000000..9787edce --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/AppIcon-dark-yellow.svg @@ -0,0 +1,16 @@ + + + AppIcon-dark-yellow + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/Contents.json new file mode 100644 index 00000000..a437da5b --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-dark-yellow.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-yellow.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/AppIcon-invertedDark-blue.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/AppIcon-invertedDark-blue.svg new file mode 100644 index 00000000..5183ef54 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/AppIcon-invertedDark-blue.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-blue + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/Contents.json new file mode 100644 index 00000000..ee9343e8 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-blue.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-blue.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/AppIcon-invertedDark-green.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/AppIcon-invertedDark-green.svg new file mode 100644 index 00000000..d0438c88 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/AppIcon-invertedDark-green.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-green + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/Contents.json new file mode 100644 index 00000000..7776bbd2 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-green.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-green.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/AppIcon-invertedDark-jellyfin.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/AppIcon-invertedDark-jellyfin.svg new file mode 100644 index 00000000..f551bcb8 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/AppIcon-invertedDark-jellyfin.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-jellyfin + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/Contents.json new file mode 100644 index 00000000..5a7cb929 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-jellyfin.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-jellyfin.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/AppIcon-invertedDark-orange.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/AppIcon-invertedDark-orange.svg new file mode 100644 index 00000000..855ae608 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/AppIcon-invertedDark-orange.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-orange + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/Contents.json new file mode 100644 index 00000000..f58bd11f --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-orange.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-orange.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/AppIcon-invertedDark-red.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/AppIcon-invertedDark-red.svg new file mode 100644 index 00000000..6d6f5085 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/AppIcon-invertedDark-red.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-red + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/Contents.json new file mode 100644 index 00000000..745880cd --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-red.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-red.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/AppIcon-invertedDark-yellow.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/AppIcon-invertedDark-yellow.svg new file mode 100644 index 00000000..9935c5cd --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/AppIcon-invertedDark-yellow.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedDark-yellow + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/Contents.json new file mode 100644 index 00000000..acddd76a --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedDark-yellow.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedDark-yellow.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/AppIcon-invertedLight-blue.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/AppIcon-invertedLight-blue.svg new file mode 100644 index 00000000..7fe53b01 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/AppIcon-invertedLight-blue.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-blue + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/Contents.json new file mode 100644 index 00000000..919ded90 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-blue.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-blue.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/AppIcon-invertedLight-green.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/AppIcon-invertedLight-green.svg new file mode 100644 index 00000000..1b434671 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/AppIcon-invertedLight-green.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-green + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/Contents.json new file mode 100644 index 00000000..e75c6e7f --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-green.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-green.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/AppIcon-invertedLight-jellyfin.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/AppIcon-invertedLight-jellyfin.svg new file mode 100644 index 00000000..03df4bb1 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/AppIcon-invertedLight-jellyfin.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-jellyfin + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/Contents.json new file mode 100644 index 00000000..40b430ea --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-jellyfin.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-jellyfin.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/AppIcon-invertedLight-orange.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/AppIcon-invertedLight-orange.svg new file mode 100644 index 00000000..46a6c39b --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/AppIcon-invertedLight-orange.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-orange + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/Contents.json new file mode 100644 index 00000000..7e5cb9c8 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-orange.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-orange.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/AppIcon-invertedLight-red.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/AppIcon-invertedLight-red.svg new file mode 100644 index 00000000..9f251a13 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/AppIcon-invertedLight-red.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-red + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/Contents.json new file mode 100644 index 00000000..97664edb --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-red.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-red.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/AppIcon-invertedLight-yellow.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/AppIcon-invertedLight-yellow.svg new file mode 100644 index 00000000..72209c33 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/AppIcon-invertedLight-yellow.svg @@ -0,0 +1,16 @@ + + + AppIcon-invertedLight-yellow + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/Contents.json new file mode 100644 index 00000000..c48c59cc --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-invertedLight-yellow.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-invertedLight-yellow.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/AppIcon-light-blue.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/AppIcon-light-blue.svg new file mode 100644 index 00000000..bc41f6e1 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/AppIcon-light-blue.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-blue + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/Contents.json new file mode 100644 index 00000000..6e49249a --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-blue.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-blue.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/AppIcon-light-green.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/AppIcon-light-green.svg new file mode 100644 index 00000000..b48a3ce1 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/AppIcon-light-green.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-green + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/Contents.json new file mode 100644 index 00000000..ca6d643d --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-green.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-green.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/AppIcon-light-jellyfin.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/AppIcon-light-jellyfin.svg new file mode 100644 index 00000000..d23e85d5 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/AppIcon-light-jellyfin.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-jellyfin + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/Contents.json new file mode 100644 index 00000000..17df257e --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-jellyfin.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-jellyfin.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/AppIcon-light-orange.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/AppIcon-light-orange.svg new file mode 100644 index 00000000..bb1a78ef --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/AppIcon-light-orange.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-orange + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/Contents.json new file mode 100644 index 00000000..482ac97e --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-orange.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-orange.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/AppIcon-light-red.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/AppIcon-light-red.svg new file mode 100644 index 00000000..9101ca42 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/AppIcon-light-red.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-red + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/Contents.json new file mode 100644 index 00000000..15cfbf82 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-red.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-red.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/AppIcon-light-yellow.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/AppIcon-light-yellow.svg new file mode 100644 index 00000000..08b69104 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/AppIcon-light-yellow.svg @@ -0,0 +1,16 @@ + + + AppIcon-light-yellow + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/Contents.json new file mode 100644 index 00000000..892b39fa --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-light-yellow.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-light-yellow.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/AppIcon-primary-primary.svg b/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/AppIcon-primary-primary.svg new file mode 100644 index 00000000..b9734257 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/AppIcon-primary-primary.svg @@ -0,0 +1,16 @@ + + + primary + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/Contents.json new file mode 100644 index 00000000..fb781a9c --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcon-primary-primary.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "AppIcon-primary-primary.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/jellypig tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcons/Contents.json similarity index 100% rename from jellypig tvOS/Resources/Assets.xcassets/DeviceIcons/Browsers/Contents.json rename to Swiftfin/Resources/Assets.xcassets/AppIcons/Contents.json diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/AppIcon-dark-blue.png b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/AppIcon-dark-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f56341f37dc290346600f524de8cb72d3807cb74 GIT binary patch literal 309143 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¬3gmjhL&R%8o_Ij69-aQv%{Adf}Vba}| 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

9mt6xliU6WG%#T)0WCe^ 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 literal 0 HcmV?d00001 diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/Contents.json new file mode 100644 index 00000000..5e53a352 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-blue.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-blue.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/AppIcon-dark-green.png b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/AppIcon-dark-green.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc342f65d1c4fe99bb6787c38c31a5a4a783eca GIT binary patch literal 300468 zcmeEui91wn{5R4@r4k}bX;IdY?1l;z*_o_UgzWp4WvJwdP+7)K$vVc^cQYcySh9|N zAIsQ>!R#-k=l3qx_5KCVJf`spK^Cr{`E_qR{b(TCan{sR5}9@qXa z9o>-(db%U~uk`yrbQuhP-({rBIPyQ+2OsPk$MVq8DbqcApkm-lzfw<%wn2Mk`{d_C zp*6!my>AabefDLQ>hFZeR9MM|IJNPPmRQRdpVoFfLg;%KKwt+w`3wiBzb5IxogwI^hE=?^Xf<_4%7Me9{*T(8HDGgS9&zN;9(~ATNAR ziLgtHGza5lI{FjJbPQ*M>HcoA+zy#N?(5=s`hP$8=lu}=26{TNqyN_z&IUJ}IpIoI z^d_u>{mTDyI&QiRuKzjt-|MUd(;cUi_x#D6#HUjzNmqW--V z|M|s#e(|p{{O1?{-irVH;y=Im*BJiui+^v$e}3_wU;Jwf|M|tgx8ncr7ZByYtft|O z`qW-;kNfIo3}z%o02MbXfXWJsibnyXAsWEwc#Q>hlr$*N!*4Z9Ivx$Oh(}ulS@~h0 zE}~-8>19*|c$iWt zKzp%yi85q@Tvqot5ONu$9eY`T7=h5p$tWOg3XgFCgC^l3E;umLkt;lhXQ60j(124x z6Gy7={~>qY8dJFPS=9M9A5Jb*I$0PS(`+vv~xUfrrevH{)S~#Z7 zNUWy>wI`Y#5=qjvv+E-)0B}vf_VMm`q39poyQJ3L**;>zI$s}h)4}pU-KB!(#Ujy7Elk{oMqqjz=>2LAy3!Zb1AkxSs6dyIl z#r5oM@l57FT(t^va@(I&pK`TY<=-1VSPF?30Ph7<<6Oz8`sCrTw~0Nkr+tj z)rjys)Cow}T)FX7b!t;7W^-NMv>(L09fa!o3i2#b27#Apdk%C?f+fGYWH>Ynbp`=jb(8?Y7omX5({}-30@=|$D3vn9pCr~m7&>;MO{~hS4rT0&doPwe zBF;^u(cPe>=~aDMA6gE#lC{a2$JfAYvZ{r_q;-%fbrtZ+?jQzq#BcvQLAn!~E(3hQ za-R={l~mR$YHH5KYb7#y@igRh~^_fbdgY>Q4fpow!OZc zacpoykbOW^#-8{;g!_~a;0(U(nmPW~4^R~|Hc~RYu9`eS+s5G_G~7VS!kNEQJ$^4^ zVg_*5>A~SZYOiM?CuwsWU65A9t~+|N5OVa#(JC8C9vES`E3j^CXj>d4?Yo+uPDJO> zk_=SVgyh86XeV``P{>vvEiG}||FM&1<>ZNPe&$yzg0Rm9XsF2`FG4+-d>(n}@-4Tp zKW0?7&WJOo1VU8*Iv$7t$fszWM#vLFRa5N%apT6twkoUl>K|_gL3Uns!J7TpR`4-& zPx_7@4PPpvWYRbvp0fdyKHPsNxTqnNBNTEgXBZ&)7|>d{C+GVseGE-xJ<{vH>fj=Z zB(Z=@s5`r$zK_g@(o)FoCuJJEnRN60g+psXGAePW?*Ry*rI^KQN|&O2rbSbvA8fC2 z1HrE>viv$Un>}S9iB7GT84BGtH4(Gkgh#e=^bKIjpv@BbO)*N+|J|GC8Kn@^(1t3XA z;(>J5B1s<46&Zg$jWV2aaq#V4Frg}vB|5dqnJ2ny6ey#6Uuh?0`n&rW{aUkPj!JDR z4iM6oO-VVcp3g2LaW11A2U);}S_>C}*Z;VsEcqq$@bVBwq9VDz|MK0#d7~M-T=>Mg zsVf5*?A2D$6f|-)y}4|9&&uBrFYfLI8}_=5?wXD9l%IDJsdF$BpriQH*(XF0#F3<^ z+PrySr$p2Zu*sFyPZQgDR4$*Lh(-|ermfW|eYR0EZJkVkiyWl6KHPgzt--r^6XU@Sgeti_3-v2;h%A3e+of1L8}P!xx2P zw_>*M^qKB@4#*RVBCOt)U1YXX01`|66HikJZ}|h%%t(CXYsx>C%C>%~gkAI@Y)_Kf zJ8t-qmIIWj;LUE3F}0Jn*Nba$2(-Ly+IwjI%2V>!f4Pt*?YPN*{r~3g2vZ91u&&-L z-m9eMXBd4Mvvxufx?oUmV51`R+3-4lT_b2LHra8@g>0+qG*H-!DrHO2zh0iSoj;ce z3azzi9k?-W|DC>MkB=zs(*vSUXp{@6v7Hd35iX%zXe~ep5YfJV^kUu8p}sqDongy# zxAwy4+lN7ia$cs^uPy+$02d|t(=v16_k+3Bn|at=k@V2j8QHui4#kTs6HQ1KdQs6_ zmT;1F zn95B7h@Xwh;rFm+c|JQzGcW%CV=FlQ484DGIN)&eEgivj9!ZWo+o!S^y4dkZH zcx})<1bdrkwUZ+<_ebp>fKeV^Ni+E;3}4X>PcZa#xUk&hvN&cwiKluWIaATrl*16; zUProiB}YM^lQ5ORa<)zzg~Bn1k5xuSf^*z94j1erL|x~FL7WcLOD z5r9Zz9s6qxdr>DkT&5>=FQ*(H@xQ*Yw+pgJ+xtSa28))~)^%4fFNu1RI?-N*?B>A& z^|}vR>j1Z+eed29BHdZMc#32ph7>IsaAq5+wx_)r*g?gF{zQ^71GQY|ZUkEMN9?4J zx@aQ{%7&?VA@;PD^gt^@C2jAzHj9(oU*uKi#Ngwv9W)x^dMMVfL^kM>rD)m#O96ym zIoejsl#_Kef|iPL4@;sfa<_qp0(0-UOxYEf}-g1fKUe(YFvgw(>FU-mYTcr2}R zy}p9n1t!hxV`P6-x2nIj314}}`Q4$)*)WlR<5-k-bo@flPC)hMW}k4tERSJUUc|8A zK6-IA?5DgNg-zKhwl3wJNLrdvqFDQgW1AY0w2_9r+yHmSac5J&RXEX@V*AM{5F?Ay zre72Y^}q* z6Xvm`)+6rMJ9_~UySN0h!vM2!8Stpm>zq(42hn)b$t*u%mPcZmNBt9gCRQaIjnuc2 zzk(RvJQmIls94o^!Y+WqJ`SU4#7Im!4GpfX!&P!KT;S(Agt?VZE(iI3`ZxQzKpK|r ztD|y)mc9s54HNP$j1svZOy>B^8N8-pJr?TQd9P|v(Jt(1u@{#rl6i^DLsvWo>A0F5 z;T!s1%r6^p!DP~$6FnA!AlJnz;RM}CGTN8}h81f6DLCJ8%^5h84kQ=SW(M8y_XSEB1OJSYjuCO1;T61oE0s9v`h)Q> zKua^&Rz^V=08kH+}O7To`mXb#i+^HiQER!ac>GNKGCC&bVrvx(HWImw~^4>$IC<#2G zB4dR9Mw^@Or{NzZOybcW#j6Oe1e)=gYrO>02Hm+v82zNSP0|6*mXC#FA&yJ(LKxAG~*mr%}rL zI48Y*qkl3BuMy2VakQ&^7gD@jr2H-leivU}2=!?5dOsgf_=Gr3>vTa>lc7l33=W9g z!rDJz`5RZ6PcDj-Pr8WRd3OHrnc6Z)E4kVE?bsFyw?d4V9L8TQjK1Wk7qw_=uE1+S zgDjS$!Qm5Ib|7#!D5mrQp%UaU?sxXe_dCv)!USn&Y6{CAJ_ujK!fq!mp1v7g2mL2n ziuSGXj#dO7VgDl6>{fl0;`_ox174@A>LSF)&?wlX+D0vHsu|M_UXHt)afpSKrx+M0 zO8(!^>mMe+K-MaP0Xt27lQeG-=6y5?kT&U9BDl)sEicd3$9Wmj+DbNDbP-%@%Xy;; zwXB5W;m6<3-kDq;m&nF|BDyv2aSbQ+tu&(qT^1_UqZ;PsqkH=gN`M zb~zS-7yVS1cYPnD31G@3*oja&Np4YLKlL~8zhs~Ujar%fb%@suojI9%G+dl&GZ-ZL z((0qCEhJ44D8)IOAHN_Cd{SFd9_j4or2=OF0>Me+TXtEYduiA0?JrOT`3vr`J^fZUxbXR-y;M_3Gh@dU&WM69qq}d}z

`wWAst5IINRmF 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 z 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%0DMNS2m$b@MAR$3oOD(LYMn6k_ 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�k9j2$qn%^ZuCtL}hN~>)@dcc%@VE8W8tbIBd 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 Ijc)z%fBTIF&j0`b literal 0 HcmV?d00001 diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/Contents.json new file mode 100644 index 00000000..2698c56b --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-green.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-green.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/AppIcon-dark-jellyfin.png b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/AppIcon-dark-jellyfin.png new file mode 100644 index 0000000000000000000000000000000000000000..a1de8f952acbfc6fea7c16a9625965e1b4a7a2a3 GIT binary patch literal 308680 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 ?2r=^{l$4fT))+wu`3higp4M5!DXcq91!LizY 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 z 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�P+w{=Zp0tU25S%C8G)`i8=ijG8FDuOqB2S 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 literal 0 HcmV?d00001 diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/Contents.json b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/Contents.json new file mode 100644 index 00000000..43c18692 --- /dev/null +++ b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-jellyfin.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon-dark-jellyfin.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-orange.appiconset/AppIcon-dark-orange.png b/Swiftfin/Resources/Assets.xcassets/AppIcons/Dark/AppIcon-dark-orange.appiconset/AppIcon-dark-orange.png new file mode 100644 index 0000000000000000000000000000000000000000..04c2b7faa5ff08536e0383cd9801bbd2841819cb GIT binary patch literal 307866 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

O+!tWUA)lB8Q12kssZWi_&CqZ9dlxO}jbC$9CrG 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

jqs%8$BeAGyix_p@^CQs_bTr) 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

490VWKfZO{E*@gIf()D+E<_ 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