From 53b079259556532569af3af0e3b15aa887adbfd4 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Tue, 20 Feb 2024 22:18:15 -0500 Subject: Start creating itemSeriesView --- .../Item/Series/ItemSeriesEpisodeIconView.swift | 39 +++++++++++++++ Jel/Views/Item/Series/ItemSeriesEpisodesView.swift | 44 ++++++++++++++++ Jel/Views/Item/Series/ItemSeriesSeasonsView.swift | 58 ++++++++++++++++++++++ Jel/Views/Item/Series/ItemSeriesSeriesView.swift | 58 ---------------------- 4 files changed, 141 insertions(+), 58 deletions(-) create mode 100644 Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift create mode 100644 Jel/Views/Item/Series/ItemSeriesEpisodesView.swift create mode 100644 Jel/Views/Item/Series/ItemSeriesSeasonsView.swift delete mode 100644 Jel/Views/Item/Series/ItemSeriesSeriesView.swift (limited to 'Jel/Views/Item/Series') diff --git a/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift b/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift new file mode 100644 index 0000000..fea8997 --- /dev/null +++ b/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift @@ -0,0 +1,39 @@ +// +// ItemSeriesEpisodeIconView.swift +// Jel +// +// Created by zerocool on 2/14/24. +// + +import SwiftUI +import JellyfinKit +import ExpandableText + +struct ItemSeriesEpisodeIconView: View { + var item: BaseItemDto + + var body: some View { + HStack(alignment: .top) { + VStack(alignment: .leading) { + Text("Episode \(item.indexNumber ?? 0)") + .foregroundStyle(Color.secondary) + .font(.callout) + ItemIconView(item: item, width: UIScreen.screenWidth * 0.5, contentMode: .fill) + .setAspectRatio(item.primaryImageAspectRatio ?? 1.7) + } + .frame(width: UIScreen.screenWidth * 0.5) + + VStack(alignment: .leading) { + Text(item.name ?? "Episode \(item.indexNumber ?? 0)") + .font(.callout) + .bold() + Text(item.overview ?? "") + .frame(height: (UIScreen.screenWidth * 0.5) / (item.primaryImageAspectRatio ?? 1.7)) // Calculate optimal amount of lines based on episode image + } + } + } +} + +//#Preview { +// ItemSeriesEpisodeIconView() +//} diff --git a/Jel/Views/Item/Series/ItemSeriesEpisodesView.swift b/Jel/Views/Item/Series/ItemSeriesEpisodesView.swift new file mode 100644 index 0000000..ae473ef --- /dev/null +++ b/Jel/Views/Item/Series/ItemSeriesEpisodesView.swift @@ -0,0 +1,44 @@ +// +// ItemSeriesEpisodesView.swift +// Jel +// +// Created by zerocool on 2/14/24. +// + +import SwiftUI +import JellyfinKit + +struct ItemSeriesEpisodesView: View { + @EnvironmentObject var jellyfinClient: JellyfinClientController + @StateObject var authState: AuthStateController = AuthStateController.shared + + var item: BaseItemDto + + @State var episodeItems: [BaseItemDto] = [] + + var body: some View { + VStack { + ForEach(episodeItems) {episode in + ItemSeriesEpisodeIconView(item: episode) + } + } + .onAppear { + Task { + let parameters = Paths.GetItemsParameters( + userID: authState.userId, + parentID: item.id ?? "" + ) + let req = Paths.getItems(parameters: parameters) + + do { + let res = try await jellyfinClient.send(req) + episodeItems = res.value.items ?? [] + } catch {} + } + } + } +} + +//#Preview { +// ItemSeriesEpisodesView() +//} diff --git a/Jel/Views/Item/Series/ItemSeriesSeasonsView.swift b/Jel/Views/Item/Series/ItemSeriesSeasonsView.swift new file mode 100644 index 0000000..a559174 --- /dev/null +++ b/Jel/Views/Item/Series/ItemSeriesSeasonsView.swift @@ -0,0 +1,58 @@ +// +// ItemSeriesSeasonsView.swift +// Jel +// +// Created by zerocool on 2/12/24. +// + +import SwiftUI +import JellyfinKit + +struct ItemSeriesSeasonsView: View { + var item: BaseItemDto + + @EnvironmentObject var jellyfinClient: JellyfinClientController + @StateObject var authState: AuthStateController = AuthStateController.shared + + @State var seriesItems: [BaseItemDto] = [] + + var body: some View { + VStack(alignment: .leading) { + Text("Seasons") + .font(.title2) + .padding(.horizontal) + + ScrollView(.horizontal) { + LazyHStack { + ForEach(seriesItems) {series in + NavigationLink { + ItemView(item: series) + } label: { + ItemIconView(item: series, height: 170) + .setAspectRatio(series.primaryImageAspectRatio ?? 0.6) + .showCaption() + } + } + }.padding(.horizontal) + } + } + .onAppear{ + Task { + let parameters = Paths.GetItemsParameters( + userID: authState.userId ?? "", + parentID: item.id ?? "" + ) + let req = Paths.getItems(parameters: parameters) + + do { + let res = try await jellyfinClient.send(req) + seriesItems = res.value.items ?? [] + } catch {} + } + } + } +} + +//#Preview { +// ItemSeriesSeriesView() +//} diff --git a/Jel/Views/Item/Series/ItemSeriesSeriesView.swift b/Jel/Views/Item/Series/ItemSeriesSeriesView.swift deleted file mode 100644 index 1e54185..0000000 --- a/Jel/Views/Item/Series/ItemSeriesSeriesView.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// ItemSeriesSeriesView.swift -// Jel -// -// Created by zerocool on 2/12/24. -// - -import SwiftUI -import JellyfinKit - -struct ItemSeriesSeriesView: View { - var item: BaseItemDto - - @EnvironmentObject var jellyfinClient: JellyfinClientController - @StateObject var authState: AuthStateController = AuthStateController.shared - - @State var seriesItems: [BaseItemDto] = [] - - var body: some View { - VStack(alignment: .leading) { - Text("Series") - .font(.title2) - .padding(.horizontal) - - ScrollView(.horizontal) { - LazyHStack { - ForEach(seriesItems) {series in - NavigationLink { - ItemView(item: series) - } label: { - ItemIconView(item: series, height: 170) - .setAspectRatio(series.primaryImageAspectRatio ?? 0.6) - .showCaption() - } - } - }.padding(.horizontal) - } - } - .onAppear{ - Task { - let parameters = Paths.GetItemsParameters( - userID: authState.userId ?? "", - parentID: item.id ?? "" - ) - let req = Paths.getItems(parameters: parameters) - - do { - let res = try await jellyfinClient.send(req) - seriesItems = res.value.items ?? [] - } catch {} - } - } - } -} - -//#Preview { -// ItemSeriesSeriesView() -//} -- cgit v1.2.3