diff options
Diffstat (limited to 'Jel/Views/Item/Series')
-rw-r--r-- | Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift | 39 | ||||
-rw-r--r-- | Jel/Views/Item/Series/ItemSeriesEpisodesView.swift | 44 | ||||
-rw-r--r-- | Jel/Views/Item/Series/ItemSeriesSeasonsView.swift (renamed from Jel/Views/Item/Series/ItemSeriesSeriesView.swift) | 6 |
3 files changed, 86 insertions, 3 deletions
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/ItemSeriesSeriesView.swift b/Jel/Views/Item/Series/ItemSeriesSeasonsView.swift index 1e54185..a559174 100644 --- a/Jel/Views/Item/Series/ItemSeriesSeriesView.swift +++ b/Jel/Views/Item/Series/ItemSeriesSeasonsView.swift @@ -1,5 +1,5 @@ // -// ItemSeriesSeriesView.swift +// ItemSeriesSeasonsView.swift // Jel // // Created by zerocool on 2/12/24. @@ -8,7 +8,7 @@ import SwiftUI import JellyfinKit -struct ItemSeriesSeriesView: View { +struct ItemSeriesSeasonsView: View { var item: BaseItemDto @EnvironmentObject var jellyfinClient: JellyfinClientController @@ -18,7 +18,7 @@ struct ItemSeriesSeriesView: View { var body: some View { VStack(alignment: .leading) { - Text("Series") + Text("Seasons") .font(.title2) .padding(.horizontal) |