From 3eab18bc8d280621b4461b1189a92dbcb42ebb64 Mon Sep 17 00:00:00 2001 From: Ethan Pippin Date: Fri, 14 Jan 2022 12:22:13 -0700 Subject: [PATCH 01/11] add redirects --- Shared/Generated/Strings.swift | 2 ++ .../ViewModels/ConnectToServerViewModel.swift | 25 +++++++++++++++++- Translations/en.lproj/Localizable.strings | Bin 11440 -> 11526 bytes 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Shared/Generated/Strings.swift b/Shared/Generated/Strings.swift index e62b4404..ccaf4c22 100644 --- a/Shared/Generated/Strings.swift +++ b/Shared/Generated/Strings.swift @@ -354,6 +354,8 @@ internal enum L10n { internal static let system = L10n.tr("Localizable", "system") /// Tags internal static let tags = L10n.tr("Localizable", "tags") + /// Too Many Redirects + internal static let tooManyRedirects = L10n.tr("Localizable", "tooManyRedirects") /// Try again internal static let tryAgain = L10n.tr("Localizable", "tryAgain") /// TV Shows diff --git a/Shared/ViewModels/ConnectToServerViewModel.swift b/Shared/ViewModels/ConnectToServerViewModel.swift index aa86ed37..12a5fbea 100644 --- a/Shared/ViewModels/ConnectToServerViewModel.swift +++ b/Shared/ViewModels/ConnectToServerViewModel.swift @@ -44,7 +44,8 @@ final class ConnectToServerViewModel: ViewModel { return message } - func connectToServer(uri: String) { + func connectToServer(uri: String, redirectCount: Int = 0) { + #if targetEnvironment(simulator) var uri = uri if uri == "localhost" { @@ -63,6 +64,28 @@ final class ConnectToServerViewModel: ViewModel { case .finished: () case let .failure(error): switch error { + case is ErrorResponse: + let errorResponse = error as! ErrorResponse + switch errorResponse { + case let .error(_, _, response, _): + // a url in the response is the result if a redirect + if let newURL = response?.url { + if redirectCount > 2 { + self.handleAPIRequestError(displayMessage: L10n.tooManyRedirects, + logLevel: .critical, + tag: "connectToServer", + completion: completion) + } else { + self + .connectToServer(uri: newURL.absoluteString + .removeRegexMatches(pattern: "/web/index.html", replaceWith: ""), + redirectCount: redirectCount + 1) + } + } else { + self.handleAPIRequestError(completion: completion) + } + } + print(errorResponse) case is SwiftfinStore.Errors: let swiftfinError = error as! SwiftfinStore.Errors switch swiftfinError { diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index cc09b41e36cdfbc25e4b2280cd27dce5b40fde0f..a1457c89db41a0995365734b460f4acc8c2524ba 100644 GIT binary patch delta 94 zcmdlG*%q~7gHD(dLkUAZ5c)DCGUPE-G6XTCGNdqMG86&nWT0FzgA#)RgDns%F@%6s PD!|n$U{!6+z{LOn?n)9) delta 7 OcmZpR+7P*6gAM==Jp* Date: Fri, 14 Jan 2022 12:24:34 -0700 Subject: [PATCH 02/11] cleanup --- Shared/ViewModels/ConnectToServerViewModel.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Shared/ViewModels/ConnectToServerViewModel.swift b/Shared/ViewModels/ConnectToServerViewModel.swift index 12a5fbea..426b5a37 100644 --- a/Shared/ViewModels/ConnectToServerViewModel.swift +++ b/Shared/ViewModels/ConnectToServerViewModel.swift @@ -78,14 +78,13 @@ final class ConnectToServerViewModel: ViewModel { } else { self .connectToServer(uri: newURL.absoluteString - .removeRegexMatches(pattern: "/web/index.html", replaceWith: ""), + .removeRegexMatches(pattern: "/web/index.html"), redirectCount: redirectCount + 1) } } else { self.handleAPIRequestError(completion: completion) } } - print(errorResponse) case is SwiftfinStore.Errors: let swiftfinError = error as! SwiftfinStore.Errors switch swiftfinError { From 815a91457ece2ca7d88a1f5f2d6d8a1eb3709900 Mon Sep 17 00:00:00 2001 From: Ethan Pippin Date: Sat, 15 Jan 2022 22:26:15 -0700 Subject: [PATCH 03/11] Update Strings.swift --- Shared/Generated/Strings.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared/Generated/Strings.swift b/Shared/Generated/Strings.swift index bf8d6f49..b6b5fb87 100644 --- a/Shared/Generated/Strings.swift +++ b/Shared/Generated/Strings.swift @@ -355,7 +355,7 @@ internal enum L10n { /// Tags internal static var tags: String { return L10n.tr("Localizable", "tags") } /// Too Many Redirects - internal static let tooManyRedirects: String { return L10n.tr("Localizable", "tooManyRedirects") } + internal static var tooManyRedirects: String { return L10n.tr("Localizable", "tooManyRedirects") } /// Try again internal static var tryAgain: String { return L10n.tr("Localizable", "tryAgain") } /// TV Shows From 68f143460a4693db593e10b092e7303d47ca12db Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 17:37:08 +0100 Subject: [PATCH 04/11] Add missing accessibility label to the settings buttons --- Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift | 1 + Swiftfin/Views/HomeView.swift | 1 + Swiftfin/Views/ServerListView.swift | 1 + 3 files changed, 3 insertions(+) diff --git a/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift b/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift index ade0eb88..122cc829 100644 --- a/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift +++ b/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift @@ -85,5 +85,6 @@ final class MainTabCoordinator: TabCoordinatable { @ViewBuilder func makeSettingsTab(isActive: Bool) -> some View { Image(systemName: "gearshape.fill") + .accessibilityLabel(L10n.settings) } } diff --git a/Swiftfin/Views/HomeView.swift b/Swiftfin/Views/HomeView.swift index e6e8f764..792f0851 100644 --- a/Swiftfin/Views/HomeView.swift +++ b/Swiftfin/Views/HomeView.swift @@ -127,6 +127,7 @@ struct HomeView: View { homeRouter.route(to: \.settings) } label: { Image(systemName: "gearshape.fill") + .accessibilityLabel(L10n.settings) } } } diff --git a/Swiftfin/Views/ServerListView.swift b/Swiftfin/Views/ServerListView.swift index 79725c0f..e561acd4 100644 --- a/Swiftfin/Views/ServerListView.swift +++ b/Swiftfin/Views/ServerListView.swift @@ -104,6 +104,7 @@ struct ServerListView: View { serverListRouter.route(to: \.basicAppSettings) } label: { Image(systemName: "gearshape.fill") + .accessibilityLabel(L10n.settings) } } From fa026298a997e4434c4263c625d6750c25be16dd Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 20:06:48 +0100 Subject: [PATCH 05/11] Add missing accessibility traits for the Headers in the Home and Item views --- Swiftfin/Components/EpisodesRowView/EpisodesRowView.swift | 1 + Swiftfin/Components/PillHStackView.swift | 1 + Swiftfin/Views/HomeView.swift | 5 ++++- Swiftfin/Views/ItemView/ItemViewBody.swift | 4 ++++ .../Views/ItemView/Landscape/ItemLandscapeTopBarView.swift | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Swiftfin/Components/EpisodesRowView/EpisodesRowView.swift b/Swiftfin/Components/EpisodesRowView/EpisodesRowView.swift index 10c5f2ff..3bcac987 100644 --- a/Swiftfin/Components/EpisodesRowView/EpisodesRowView.swift +++ b/Swiftfin/Components/EpisodesRowView/EpisodesRowView.swift @@ -25,6 +25,7 @@ struct EpisodesRowView: View where RowManager: EpisodesRowManager { if onlyCurrentSeason { if let currentSeason = Array(viewModel.seasonsEpisodes.keys).first(where: { $0.id == viewModel.item.id }) { Text(currentSeason.name ?? L10n.noTitle) + .accessibility(addTraits: [.isHeader]) } } else { Menu { diff --git a/Swiftfin/Components/PillHStackView.swift b/Swiftfin/Components/PillHStackView.swift index 9b066663..f519c855 100644 --- a/Swiftfin/Components/PillHStackView.swift +++ b/Swiftfin/Components/PillHStackView.swift @@ -21,6 +21,7 @@ struct PillHStackView: View { .fontWeight(.semibold) .padding(.top, 3) .padding(.leading, 16) + .accessibility(addTraits: [.isHeader]) ScrollView(.horizontal, showsIndicators: false) { HStack { diff --git a/Swiftfin/Views/HomeView.swift b/Swiftfin/Views/HomeView.swift index 792f0851..5e70b18a 100644 --- a/Swiftfin/Views/HomeView.swift +++ b/Swiftfin/Views/HomeView.swift @@ -62,6 +62,7 @@ struct HomeView: View { .font(.title2) .fontWeight(.bold) .padding() + .accessibility(addTraits: [.isHeader]) } selectedAction: { item in homeRouter.route(to: \.item, item) } @@ -73,6 +74,7 @@ struct HomeView: View { .font(.title2) .fontWeight(.bold) .padding() + .accessibility(addTraits: [.isHeader]) } selectedAction: { item in homeRouter.route(to: \.item, item) } @@ -85,7 +87,8 @@ struct HomeView: View { Text(L10n.latestWithString(library.name ?? "")) .font(.title2) .fontWeight(.bold) - + .accessibility(addTraits: [.isHeader]) + Spacer() Button { diff --git a/Swiftfin/Views/ItemView/ItemViewBody.swift b/Swiftfin/Views/ItemView/ItemViewBody.swift index c7926c3b..55dfc8a5 100644 --- a/Swiftfin/Views/ItemView/ItemViewBody.swift +++ b/Swiftfin/Views/ItemView/ItemViewBody.swift @@ -55,6 +55,7 @@ struct ItemViewBody: View { L10n.seasons.text .fontWeight(.semibold) .padding() + .accessibility(addTraits: [.isHeader]) }, selectedAction: { season in itemRouter.route(to: \.item, season) }) @@ -113,6 +114,7 @@ struct ItemViewBody: View { .fontWeight(.semibold) .padding(.bottom) .padding(.horizontal) + .accessibility(addTraits: [.isHeader]) } selectedAction: { collectionItem in itemRouter.route(to: \.item, collectionItem) } @@ -128,6 +130,7 @@ struct ItemViewBody: View { .fontWeight(.semibold) .padding(.bottom) .padding(.horizontal) + .accessibility(addTraits: [.isHeader]) }, selectedAction: { person in itemRouter.route(to: \.library, (viewModel: .init(person: person), title: person.title)) @@ -144,6 +147,7 @@ struct ItemViewBody: View { .fontWeight(.semibold) .padding(.bottom) .padding(.horizontal) + .accessibility(addTraits: [.isHeader]) }, selectedAction: { item in itemRouter.route(to: \.item, item) diff --git a/Swiftfin/Views/ItemView/Landscape/ItemLandscapeTopBarView.swift b/Swiftfin/Views/ItemView/Landscape/ItemLandscapeTopBarView.swift index 7a58de68..6ee32c2a 100644 --- a/Swiftfin/Views/ItemView/Landscape/ItemLandscapeTopBarView.swift +++ b/Swiftfin/Views/ItemView/Landscape/ItemLandscapeTopBarView.swift @@ -25,6 +25,7 @@ struct ItemLandscapeTopBarView: View { .foregroundColor(.primary) .padding(.leading, 16) .padding(.bottom, 10) + .accessibility(addTraits: [.isHeader]) // MARK: Details From e069c69d13aa282ec6af8856df329d4b2dcb69f5 Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 20:23:06 +0100 Subject: [PATCH 06/11] Hide title with initial for voice over --- Shared/Views/ImageView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Shared/Views/ImageView.swift b/Shared/Views/ImageView.swift index 911e932b..49a32be0 100644 --- a/Shared/Views/ImageView.swift +++ b/Shared/Views/ImageView.swift @@ -37,6 +37,7 @@ struct ImageView: View { Text(failureInitials) .font(.largeTitle) .foregroundColor(.secondary) + .accessibilityHidden(true) } } From be0e3c50972adbf079a12b11458bf9217e9fc9de Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 20:54:58 +0100 Subject: [PATCH 07/11] Avoid inverting the colors of movies and series posters when using Smart Invert --- Swiftfin/Components/EpisodesRowView/EpisodeRowCard.swift | 1 + Swiftfin/Components/PortraitHStackView.swift | 1 + Swiftfin/Components/PortraitItemButton.swift | 1 + Swiftfin/Views/ContinueWatchingView.swift | 1 + Swiftfin/Views/ItemView/Landscape/ItemLandscapeMainView.swift | 2 ++ .../Views/ItemView/Portrait/ItemPortraitHeaderOverlayView.swift | 1 + Swiftfin/Views/ItemView/Portrait/ItemPortraitMainView.swift | 1 + Swiftfin/Views/LibraryListView.swift | 1 + 8 files changed, 9 insertions(+) diff --git a/Swiftfin/Components/EpisodesRowView/EpisodeRowCard.swift b/Swiftfin/Components/EpisodesRowView/EpisodeRowCard.swift index 412eee34..ef5de88f 100644 --- a/Swiftfin/Components/EpisodesRowView/EpisodeRowCard.swift +++ b/Swiftfin/Components/EpisodesRowView/EpisodeRowCard.swift @@ -34,6 +34,7 @@ struct EpisodeRowCard: View { } } .padding(.top) + .accessibilityIgnoresInvertColors() VStack(alignment: .leading) { Text(episode.getEpisodeLocator() ?? "S-:E-") diff --git a/Swiftfin/Components/PortraitHStackView.swift b/Swiftfin/Components/PortraitHStackView.swift index 06276d2c..edd67dcc 100644 --- a/Swiftfin/Components/PortraitHStackView.swift +++ b/Swiftfin/Components/PortraitHStackView.swift @@ -48,6 +48,7 @@ struct PortraitImageHStackView: View { failureInitials: item.failureInitials) .portraitPoster(width: maxWidth) .shadow(radius: 4, y: 2) + .accessibilityIgnoresInvertColors() if item.showTitle { Text(item.title) diff --git a/Swiftfin/Views/ContinueWatchingView.swift b/Swiftfin/Views/ContinueWatchingView.swift index 8c5c04c2..cd32af82 100644 --- a/Swiftfin/Views/ContinueWatchingView.swift +++ b/Swiftfin/Views/ContinueWatchingView.swift @@ -29,6 +29,7 @@ struct ContinueWatchingView: View { ZStack { ImageView(src: item.getBackdropImage(maxWidth: 320), bh: item.getBackdropImageBlurHash()) .frame(width: 320, height: 180) + .accessibilityIgnoresInvertColors() HStack { VStack { diff --git a/Swiftfin/Views/ItemView/Landscape/ItemLandscapeMainView.swift b/Swiftfin/Views/ItemView/Landscape/ItemLandscapeMainView.swift index c4290d05..8ef58c0e 100644 --- a/Swiftfin/Views/ItemView/Landscape/ItemLandscapeMainView.swift +++ b/Swiftfin/Views/ItemView/Landscape/ItemLandscapeMainView.swift @@ -28,6 +28,7 @@ struct ItemLandscapeMainView: View { bh: viewModel.item.getPrimaryImageBlurHash()) .frame(width: 130, height: 195) .cornerRadius(10) + .accessibilityIgnoresInvertColors() Spacer().frame(height: 15) @@ -100,6 +101,7 @@ struct ItemLandscapeMainView: View { .edgesIgnoringSafeArea(.all) .blur(radius: 8) .layoutPriority(-1) + .accessibilityIgnoresInvertColors() // iPadOS is making the view go all the way to the edge. // We have to accomodate this here diff --git a/Swiftfin/Views/ItemView/Portrait/ItemPortraitHeaderOverlayView.swift b/Swiftfin/Views/ItemView/Portrait/ItemPortraitHeaderOverlayView.swift index 2ae40695..db91e1c6 100644 --- a/Swiftfin/Views/ItemView/Portrait/ItemPortraitHeaderOverlayView.swift +++ b/Swiftfin/Views/ItemView/Portrait/ItemPortraitHeaderOverlayView.swift @@ -26,6 +26,7 @@ struct PortraitHeaderOverlayView: View { ImageView(src: viewModel.item.portraitHeaderViewURL(maxWidth: 130)) .portraitPoster(width: 130) + .accessibilityIgnoresInvertColors() VStack(alignment: .leading, spacing: 1) { Spacer() diff --git a/Swiftfin/Views/ItemView/Portrait/ItemPortraitMainView.swift b/Swiftfin/Views/ItemView/Portrait/ItemPortraitMainView.swift index 0c6403b1..fbb4692b 100644 --- a/Swiftfin/Views/ItemView/Portrait/ItemPortraitMainView.swift +++ b/Swiftfin/Views/ItemView/Portrait/ItemPortraitMainView.swift @@ -23,6 +23,7 @@ struct ItemPortraitMainView: View { bh: viewModel.item.getBackdropImageBlurHash()) .opacity(0.4) .blur(radius: 2.0) + .accessibilityIgnoresInvertColors() } // MARK: portraitStaticOverlayView diff --git a/Swiftfin/Views/LibraryListView.swift b/Swiftfin/Views/LibraryListView.swift index 2438e35c..26c25fb6 100644 --- a/Swiftfin/Views/LibraryListView.swift +++ b/Swiftfin/Views/LibraryListView.swift @@ -82,6 +82,7 @@ struct LibraryListView: View { ZStack { ImageView(src: library.getPrimaryImage(maxWidth: 500), bh: library.getPrimaryImageBlurHash()) .opacity(0.4) + .accessibilityIgnoresInvertColors() HStack { Spacer() VStack { From a6b77ddf0eb37078d46ea0e72dacda0284c8a955 Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 20:55:15 +0100 Subject: [PATCH 08/11] Avoid inverting the colors in the video player when using smart Invert --- Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift b/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift index ca36f1df..233285c1 100644 --- a/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift +++ b/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift @@ -97,6 +97,7 @@ class VLCPlayerViewController: UIViewController { setupConstraints() view.backgroundColor = .black + view.accessibilityIgnoresInvertColors = true setupMediaPlayer(newViewModel: viewModel) From d08365da205d5288e6f78ec84789fb8c37113341 Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 21:00:03 +0100 Subject: [PATCH 09/11] Add missing accessibility traits for Headers in ItemViewDetails View --- Swiftfin/Views/ItemView/ItemViewDetailsView.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Swiftfin/Views/ItemView/ItemViewDetailsView.swift b/Swiftfin/Views/ItemView/ItemViewDetailsView.swift index d82df68a..56bec5f9 100644 --- a/Swiftfin/Views/ItemView/ItemViewDetailsView.swift +++ b/Swiftfin/Views/ItemView/ItemViewDetailsView.swift @@ -22,6 +22,7 @@ struct ItemViewDetailsView: View { L10n.information.text .font(.title3) .fontWeight(.bold) + .accessibility(addTraits: [.isHeader]) ForEach(viewModel.informationItems, id: \.self.title) { informationItem in VStack(alignment: .leading, spacing: 2) { @@ -40,6 +41,7 @@ struct ItemViewDetailsView: View { L10n.media.text .font(.title3) .fontWeight(.bold) + .accessibility(addTraits: [.isHeader]) VStack(alignment: .leading, spacing: 2) { L10n.file.text From 7a188bd922da60ba7e211408241588529371ec22 Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 21:04:01 +0100 Subject: [PATCH 10/11] Ease voice over navigation combining key and values view elements in ItemViewDetails --- Swiftfin/Views/HomeView.swift | 2 +- Swiftfin/Views/ItemView/ItemViewDetailsView.swift | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Swiftfin/Views/HomeView.swift b/Swiftfin/Views/HomeView.swift index 5e70b18a..0d2fafeb 100644 --- a/Swiftfin/Views/HomeView.swift +++ b/Swiftfin/Views/HomeView.swift @@ -88,7 +88,7 @@ struct HomeView: View { .font(.title2) .fontWeight(.bold) .accessibility(addTraits: [.isHeader]) - + Spacer() Button { diff --git a/Swiftfin/Views/ItemView/ItemViewDetailsView.swift b/Swiftfin/Views/ItemView/ItemViewDetailsView.swift index 56bec5f9..a91c2058 100644 --- a/Swiftfin/Views/ItemView/ItemViewDetailsView.swift +++ b/Swiftfin/Views/ItemView/ItemViewDetailsView.swift @@ -32,6 +32,7 @@ struct ItemViewDetailsView: View { .font(.subheadline) .foregroundColor(Color.secondary) } + .accessibilityElement(children: .combine) } } .padding(.bottom, 20) @@ -50,6 +51,7 @@ struct ItemViewDetailsView: View { .font(.subheadline) .foregroundColor(Color.secondary) } + .accessibilityElement(children: .combine) VStack(alignment: .leading, spacing: 2) { L10n.containers.text @@ -58,6 +60,7 @@ struct ItemViewDetailsView: View { .font(.subheadline) .foregroundColor(Color.secondary) } + .accessibilityElement(children: .combine) ForEach(viewModel.selectedVideoPlayerViewModel?.mediaItems ?? [], id: \.self.title) { mediaItem in VStack(alignment: .leading, spacing: 2) { @@ -67,6 +70,7 @@ struct ItemViewDetailsView: View { .font(.subheadline) .foregroundColor(Color.secondary) } + .accessibilityElement(children: .combine) } } } From 5603eb7bcae82c380776581340d094f4457affbf Mon Sep 17 00:00:00 2001 From: David Cordero Date: Sun, 16 Jan 2022 21:43:22 +0100 Subject: [PATCH 11/11] Fix typo --- .../JellyfinAPIExtensions/BaseItemDto+Stackable.swift | 2 +- .../JellyfinAPIExtensions/BaseItemPersonExtensions.swift | 2 +- Shared/Objects/PortraitImageStackable.swift | 2 +- Swiftfin/Components/PortraitHStackView.swift | 2 +- Swiftfin/Components/PortraitItemButton.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Shared/Extensions/JellyfinAPIExtensions/BaseItemDto+Stackable.swift b/Shared/Extensions/JellyfinAPIExtensions/BaseItemDto+Stackable.swift index d44f38ec..61d8d2f8 100644 --- a/Shared/Extensions/JellyfinAPIExtensions/BaseItemDto+Stackable.swift +++ b/Shared/Extensions/JellyfinAPIExtensions/BaseItemDto+Stackable.swift @@ -17,7 +17,7 @@ extension BaseItemDto: PortraitImageStackable { id ?? "no id" } - public func imageURLContsructor(maxWidth: Int) -> URL { + public func imageURLConstructor(maxWidth: Int) -> URL { switch self.itemType { case .episode: return getSeriesPrimaryImage(maxWidth: maxWidth) diff --git a/Shared/Extensions/JellyfinAPIExtensions/BaseItemPersonExtensions.swift b/Shared/Extensions/JellyfinAPIExtensions/BaseItemPersonExtensions.swift index 5b72e8cb..b26fef16 100644 --- a/Shared/Extensions/JellyfinAPIExtensions/BaseItemPersonExtensions.swift +++ b/Shared/Extensions/JellyfinAPIExtensions/BaseItemPersonExtensions.swift @@ -68,7 +68,7 @@ extension BaseItemPerson: PortraitImageStackable { (id ?? "noid") + title + (subtitle ?? "nodescription") + blurHash + failureInitials } - public func imageURLContsructor(maxWidth: Int) -> URL { + public func imageURLConstructor(maxWidth: Int) -> URL { self.getImage(baseURL: SessionManager.main.currentLogin.server.currentURI, maxWidth: maxWidth) } diff --git a/Shared/Objects/PortraitImageStackable.swift b/Shared/Objects/PortraitImageStackable.swift index 07af7bda..9d4c7d30 100644 --- a/Shared/Objects/PortraitImageStackable.swift +++ b/Shared/Objects/PortraitImageStackable.swift @@ -9,7 +9,7 @@ import Foundation public protocol PortraitImageStackable { - func imageURLContsructor(maxWidth: Int) -> URL + func imageURLConstructor(maxWidth: Int) -> URL var title: String { get } var subtitle: String? { get } var blurHash: String { get } diff --git a/Swiftfin/Components/PortraitHStackView.swift b/Swiftfin/Components/PortraitHStackView.swift index edd67dcc..cbfb01f5 100644 --- a/Swiftfin/Components/PortraitHStackView.swift +++ b/Swiftfin/Components/PortraitHStackView.swift @@ -43,7 +43,7 @@ struct PortraitImageHStackView: View { selectedAction(item) } label: { VStack(alignment: horizontalAlignment) { - ImageView(src: item.imageURLContsructor(maxWidth: Int(maxWidth)), + ImageView(src: item.imageURLConstructor(maxWidth: Int(maxWidth)), bh: item.blurHash, failureInitials: item.failureInitials) .portraitPoster(width: maxWidth)