diff options
Diffstat (limited to 'Jel/Views/Library/Item')
-rw-r--r-- | Jel/Views/Library/Item/ItemGenresView.swift | 8 | ||||
-rw-r--r-- | Jel/Views/Library/Item/ItemHeaderView.swift | 2 | ||||
-rw-r--r-- | Jel/Views/Library/Item/ItemInfoView.swift | 9 | ||||
-rw-r--r-- | Jel/Views/Library/Item/ItemPeopleView.swift | 27 | ||||
-rw-r--r-- | Jel/Views/Library/Item/ItemView.swift | 1 | ||||
-rw-r--r-- | Jel/Views/Library/Item/Person/ItemPeopleView.swift | 37 | ||||
-rw-r--r-- | Jel/Views/Library/Item/Person/ItemPersonIconView.swift | 70 | ||||
-rw-r--r-- | Jel/Views/Library/Item/Types/ItemMovieView.swift | 4 |
8 files changed, 114 insertions, 44 deletions
diff --git a/Jel/Views/Library/Item/ItemGenresView.swift b/Jel/Views/Library/Item/ItemGenresView.swift index 5bfccb0..4e8321f 100644 --- a/Jel/Views/Library/Item/ItemGenresView.swift +++ b/Jel/Views/Library/Item/ItemGenresView.swift @@ -20,6 +20,7 @@ struct ItemGenresView: View { VStack(alignment: .leading) { Text("Genres") .font(.title2) + .padding(.horizontal) ScrollView(.horizontal) { HStack { @@ -43,18 +44,15 @@ struct ItemGenresView: View { .clipShape(.capsule) } } + .padding(.horizontal) } + .scrollIndicators(.hidden) } .onAppear { Task { let parameters = Paths.GetItemsParameters( userID: authState.userId ?? "", isRecursive: true, - fields: [.primaryImageAspectRatio, - .genres, - .taglines, - .overview, - .parentID], includeItemTypes: [.movie, .series], genres: item.genres ?? [] ) diff --git a/Jel/Views/Library/Item/ItemHeaderView.swift b/Jel/Views/Library/Item/ItemHeaderView.swift index 44be776..4c2bbe3 100644 --- a/Jel/Views/Library/Item/ItemHeaderView.swift +++ b/Jel/Views/Library/Item/ItemHeaderView.swift @@ -25,7 +25,7 @@ struct ItemHeaderView: View { StickyHeaderView(minHeight: 400) { ItemIconView(item: item, imageType: "Backdrop", contentMode: .fill) .setCornerRadius(0) - .overlay(overlayGradient.opacity(0.8)) + .overlay(overlayGradient) } HStack { diff --git a/Jel/Views/Library/Item/ItemInfoView.swift b/Jel/Views/Library/Item/ItemInfoView.swift index bafbc9f..dda1c39 100644 --- a/Jel/Views/Library/Item/ItemInfoView.swift +++ b/Jel/Views/Library/Item/ItemInfoView.swift @@ -24,14 +24,7 @@ struct ItemInfoView: View { Text(item.getRuntime() ?? "-:--") } if let officialRating = item.officialRating { - Text(officialRating) - .bold() - .padding(2) - .overlay { - RoundedRectangle(cornerSize: CGSize(width: 2, height: 2), style: .continuous) - .stroke(.gray) - } - .foregroundStyle(.gray) + TextRatingView(officialRating, fillStyle: .stroke) } } } diff --git a/Jel/Views/Library/Item/ItemPeopleView.swift b/Jel/Views/Library/Item/ItemPeopleView.swift deleted file mode 100644 index b8b0846..0000000 --- a/Jel/Views/Library/Item/ItemPeopleView.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// ItemPeopleView.swift -// Jel -// -// Created by zerocool on 1/8/24. -// - -import SwiftUI -import JellyfinKit - -struct ItemPeopleView: View { - var item: BaseItemDto - - var body: some View { - ScrollView(.horizontal) { - HStack { - ForEach(item.people ?? []) {person in - Text(person.name ?? "---") - } - } - } - } -} - -//#Preview { -// ItemPeopleView() -//} diff --git a/Jel/Views/Library/Item/ItemView.swift b/Jel/Views/Library/Item/ItemView.swift index de4dc1b..da85f32 100644 --- a/Jel/Views/Library/Item/ItemView.swift +++ b/Jel/Views/Library/Item/ItemView.swift @@ -21,6 +21,7 @@ struct ItemView: View { } } } + .scrollIndicators(.hidden) } } diff --git a/Jel/Views/Library/Item/Person/ItemPeopleView.swift b/Jel/Views/Library/Item/Person/ItemPeopleView.swift new file mode 100644 index 0000000..6e2a974 --- /dev/null +++ b/Jel/Views/Library/Item/Person/ItemPeopleView.swift @@ -0,0 +1,37 @@ +// +// ItemPeopleView.swift +// Jel +// +// Created by zerocool on 1/8/24. +// + +import SwiftUI +import JellyfinKit +import NukeUI + +struct ItemPeopleView: View { + + var item: BaseItemDto + + var body: some View { + VStack(alignment: .leading) { + Text("Cast and Crew") + .font(.title2) + .padding(.leading) + + ScrollView(.horizontal) { + LazyHStack(alignment: .top) { + ForEach(item.people ?? [], id: \.iterId) {person in + ItemPersonIconView(person: person) + } + } + .padding(.horizontal) + } + .scrollIndicators(.hidden) + } + } +} + +//#Preview { +// ItemPeopleView() +//} diff --git a/Jel/Views/Library/Item/Person/ItemPersonIconView.swift b/Jel/Views/Library/Item/Person/ItemPersonIconView.swift new file mode 100644 index 0000000..a6e5161 --- /dev/null +++ b/Jel/Views/Library/Item/Person/ItemPersonIconView.swift @@ -0,0 +1,70 @@ +// +// ItemPersonIconView.swift +// Jel +// +// Created by zerocool on 1/8/24. +// + +import SwiftUI +import JellyfinKit +import NukeUI + +struct ItemPersonIconPlaceholderView: View { + var body: some View { + VStack { + Image(systemName: "person") + .resizable() + .padding() + .scaledToFit() + } + } +} + +struct ItemPersonIconView: View { + @StateObject var authState: AuthStateController = AuthStateController.shared + @EnvironmentObject var jellyfinClient: JellyfinClientController + + var person: BaseItemPerson + + @State var personImageUrl: URL? + @State var loading: Bool = true + + var body: some View { + VStack() { + LazyImage(url: personImageUrl) {state in + if let image = state.image { + image + .resizable() + .clipShape(RoundedRectangle(cornerRadius: 5)) + } else { + ItemPersonIconPlaceholderView() + } + } + .aspectRatio(contentMode: .fit) + .frame(width: 100, height: 170) + + VStack { + Text(person.name ?? "---") + .font(.callout) + Text(person.role ?? "---") + .font(.caption) + .foregroundStyle(.gray) + } + .frame(width: 100) + } + // .redacted(reason: loading ? .placeholder : []) + .onAppear { + Task { + let request = Paths.getItemImage(itemID: person.id ?? "", imageType: "Primary") + + let serverUrl = jellyfinClient.getUrl() + personImageUrl = serverUrl?.appending(path: request.url?.absoluteString ?? "") + // loading = false + } + } + } +} + +//#Preview { +// ItemPersonView() +//} diff --git a/Jel/Views/Library/Item/Types/ItemMovieView.swift b/Jel/Views/Library/Item/Types/ItemMovieView.swift index fcf8c06..5181e73 100644 --- a/Jel/Views/Library/Item/Types/ItemMovieView.swift +++ b/Jel/Views/Library/Item/Types/ItemMovieView.swift @@ -23,7 +23,7 @@ struct ItemMovieView: View { .onChange(of: geo.frame(in: .global).minY) { let minY = geo.frame(in: .global).minY - pageScrolled = minY < 0 + pageScrolled = minY < -100 } } } @@ -32,10 +32,8 @@ struct ItemMovieView: View { .padding() ItemGenresView(item: item) - .padding() ItemPeopleView(item: item) - .padding() } .navigationBarTitleDisplayMode(.inline) .navigationTitle(item.name ?? "Untitled") |