summaryrefslogtreecommitdiff
path: root/Jel
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2024-02-20 22:18:15 -0500
committerShav Kinderlehrer <[email protected]>2024-02-20 22:18:15 -0500
commit53b079259556532569af3af0e3b15aa887adbfd4 (patch)
treedd6cf98924d5cfeaedfe4258d784571b3ad90c21 /Jel
parentc9fea341849b5290966f71be958ed6ad41b77576 (diff)
downloadjel-53b079259556532569af3af0e3b15aa887adbfd4.tar.gz
jel-53b079259556532569af3af0e3b15aa887adbfd4.zip
Start creating itemSeriesView
Diffstat (limited to 'Jel')
-rw-r--r--Jel/Models/UIScreenWidthExtension.swift15
-rw-r--r--Jel/Models/ViewOffsetKey.swift17
-rw-r--r--Jel/Views/Dashboard/DashboardLibraryView.swift4
-rw-r--r--Jel/Views/Item/ItemIconView.swift2
-rw-r--r--Jel/Views/Item/ItemInfoView.swift10
-rw-r--r--Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift39
-rw-r--r--Jel/Views/Item/Series/ItemSeriesEpisodesView.swift44
-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.swift10
-rw-r--r--Jel/Views/Item/Types/ItemSeriesView.swift2
10 files changed, 121 insertions, 28 deletions
diff --git a/Jel/Models/UIScreenWidthExtension.swift b/Jel/Models/UIScreenWidthExtension.swift
new file mode 100644
index 0000000..6f2f5de
--- /dev/null
+++ b/Jel/Models/UIScreenWidthExtension.swift
@@ -0,0 +1,15 @@
+//
+// UIScreenWidthExtension.swift
+// Jel
+//
+// Created by zerocool on 2/14/24.
+//
+
+import Foundation
+import UIKit
+
+extension UIScreen{
+ static let screenWidth = UIScreen.main.bounds.size.width
+ static let screenHeight = UIScreen.main.bounds.size.height
+ static let screenSize = UIScreen.main.bounds.size
+}
diff --git a/Jel/Models/ViewOffsetKey.swift b/Jel/Models/ViewOffsetKey.swift
deleted file mode 100644
index b118478..0000000
--- a/Jel/Models/ViewOffsetKey.swift
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// ViewOffsetKey.swift
-// Jel
-//
-// Created by zerocool on 12/24/23.
-//
-
-import SwiftUI
-
-/// A preference key to store ScrollView offset
-public struct ViewOffsetKey: PreferenceKey {
- public typealias Value = CGFloat
- public static var defaultValue = CGFloat.zero
- public static func reduce(value: inout Value, nextValue: () -> Value) {
- value += nextValue()
- }
-}
diff --git a/Jel/Views/Dashboard/DashboardLibraryView.swift b/Jel/Views/Dashboard/DashboardLibraryView.swift
index b2a8449..0510113 100644
--- a/Jel/Views/Dashboard/DashboardLibraryView.swift
+++ b/Jel/Views/Dashboard/DashboardLibraryView.swift
@@ -37,8 +37,8 @@ struct DashboardLibraryView: View {
}
.buttonStyle(PlainButtonStyle())
}
- }.padding(.horizontal)
- }
+ }
+ }.padding(.horizontal)
}
.onAppear {
Task {
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)