diff options
Diffstat (limited to 'Jel/Views/Item')
-rw-r--r-- | Jel/Views/Item/ItemIconView.swift | 2 | ||||
-rw-r--r-- | Jel/Views/Item/ItemInfoView.swift | 10 | ||||
-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 | ||||
-rw-r--r-- | Jel/Views/Item/Types/ItemSeasonView.swift | 10 | ||||
-rw-r--r-- | Jel/Views/Item/Types/ItemSeriesView.swift | 2 |
7 files changed, 104 insertions, 9 deletions
diff --git a/Jel/Views/Item/ItemIconView.swift b/Jel/Views/Item/ItemIconView.swift index 906ed01..d43685d 100644 --- a/Jel/Views/Item/ItemIconView.swift +++ b/Jel/Views/Item/ItemIconView.swift @@ -70,7 +70,7 @@ struct ItemIconView: View { case "Primary": return item.imageBlurHashes?.primary?[item.imageTags?[imageType] ?? ""] ?? "" case "Backdrop": - return item.imageBlurHashes?.backdrop?[item.backdropImageTags?[0] ?? ""] ?? "" + return item.imageBlurHashes?.backdrop?[item.backdropImageTags?.first ?? ""] ?? "" default: return "" } diff --git a/Jel/Views/Item/ItemInfoView.swift b/Jel/Views/Item/ItemInfoView.swift index dda1c39..22eedaf 100644 --- a/Jel/Views/Item/ItemInfoView.swift +++ b/Jel/Views/Item/ItemInfoView.swift @@ -14,9 +14,13 @@ struct ItemInfoView: View { var body: some View { VStack(alignment: .leading) { HStack { - Text((item.productionYear != nil) ? String(item.productionYear!) : "---") - Text("•") - Text(item.genres?.first ?? "---") + if let productionYear = item.productionYear { + Text(String(productionYear)) + } + if let genres = item.genres { + Text("•") + Text(genres.first ?? "---") + } } HStack { 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) diff --git a/Jel/Views/Item/Types/ItemSeasonView.swift b/Jel/Views/Item/Types/ItemSeasonView.swift index 9d02dfe..f73c9a5 100644 --- a/Jel/Views/Item/Types/ItemSeasonView.swift +++ b/Jel/Views/Item/Types/ItemSeasonView.swift @@ -13,8 +13,16 @@ struct ItemSeasonView: View { var body: some View { VStack { - ItemMediaView(item: item) + if item.overview != nil { + ItemMediaView(item: item) + .padding([.horizontal, .bottom]) + } + + ItemSeriesEpisodesView(item: item) + .padding(.horizontal) } + .navigationTitle(item.name ?? "Untitled") + .navigationBarTitleDisplayMode(.large) } } diff --git a/Jel/Views/Item/Types/ItemSeriesView.swift b/Jel/Views/Item/Types/ItemSeriesView.swift index f0559b9..7b27c8e 100644 --- a/Jel/Views/Item/Types/ItemSeriesView.swift +++ b/Jel/Views/Item/Types/ItemSeriesView.swift @@ -34,7 +34,7 @@ struct ItemSeriesView: View { ItemGenresView(item: item) .foregroundStyle(Color.primary) - ItemSeriesSeriesView(item: item) + ItemSeriesSeasonsView(item: item) .foregroundStyle(Color.primary) ItemPeopleView(item: item) |