From 7aa602f19dec3cf526c4550c5e63a8fc6dfac723 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Wed, 27 Dec 2023 08:25:35 -0500 Subject: Implement auto aspect ratio for LibraryIconViews --- Jel/Views/Library/Item/ItemMediaView.swift | 77 ++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Jel/Views/Library/Item/ItemMediaView.swift (limited to 'Jel/Views/Library/Item/ItemMediaView.swift') diff --git a/Jel/Views/Library/Item/ItemMediaView.swift b/Jel/Views/Library/Item/ItemMediaView.swift new file mode 100644 index 0000000..38c242d --- /dev/null +++ b/Jel/Views/Library/Item/ItemMediaView.swift @@ -0,0 +1,77 @@ +// +// ItemMediaView.swift +// Jel +// +// Created by zerocool on 12/23/23. +// + +import SwiftUI +import JellyfinKit + +struct ItemMediaView: View { + @EnvironmentObject var jellyfinClient: JellyfinClientController + @StateObject var authState: AuthStateController = AuthStateController.shared + + @State var item: BaseItemDto + @State var loading: Bool = true + + @State var navigationTitle: String = "" + + var body: some View { + VStack { + if loading { + ProgressView() + .progressViewStyle(.circular) + } else { + ScrollView { + ItemHeaderView(item: item) + .padding(.bottom) + .background { + GeometryReader {geo in + EmptyView() + .onChange(of: geo.frame(in: .global).minY) { + let minY = geo.frame(in: .global).minY + if minY < 0 { + navigationTitle = item.name ?? "" + } else { + navigationTitle = "" + } + } + } + } + + VStack(alignment: .leading) { + Text(item.taglines?.count ?? 0 > 0 ? item.taglines?[0] ?? "" : "") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.bottom) + + Text(item.overview ?? "---") + } + .padding() + } + } + } + .toolbarRole(.editor) + .navigationBarTitleDisplayMode(.inline) + .navigationTitle(navigationTitle) + .ignoresSafeArea() + .scrollIndicators(.hidden) + .onAppear { + Task { + do { + let request = Paths.getItem(userID: authState.userId ?? "", itemID: item.id ?? "") + let response = try await jellyfinClient.send(request) + item = response.value + loading = false + } catch { + } + } + } + } +} + +//#Preview { +// ItemMovieView(item: BaseItemDto()) + +//} -- cgit v1.2.3