// // 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 { GeometryReader {geo in 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) ForEach(item.overview?.components(separatedBy: "
") ?? [], id: \.self) {overview in Text(overview) } } .if(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing) > 0) {view in view .padding(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing)) } .if(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing) <= 0) {view in view .padding() } } .ignoresSafeArea() } } .toolbarRole(.editor) .navigationBarTitleDisplayMode(.inline) .navigationTitle(navigationTitle) .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()) //}