diff --git a/Jel.xcodeproj/project.pbxproj b/Jel.xcodeproj/project.pbxproj
index 4fe0af5..6237f55 100644
--- a/Jel.xcodeproj/project.pbxproj
+++ b/Jel.xcodeproj/project.pbxproj
@@ -161,6 +161,7 @@
3D13F96D2B38A31300E91913 /* Utility */,
3D9063CC2B279A310063DD2A /* ContentView.swift */,
3DDD67902B293B780026781E /* Dashboard */,
+ 3D13F95D2B375DAC00E91913 /* Item */,
3D8AB2A62B366309005BD7D0 /* Library */,
3DDD67942B29E27A0026781E /* Settings */,
3D91FDC52B28C28900919017 /* SignIn */,
@@ -194,6 +195,7 @@
3D13F95D2B375DAC00E91913 /* Item */ = {
isa = PBXGroup;
children = (
+ 3D41D1F92B2CAE0000E58234 /* ItemIconView.swift */,
3DAFA8ED2B3B707100D71AD1 /* Types */,
3DBAC9E82B4C891C005F8764 /* Person */,
3D13F95E2B375DB800E91913 /* ItemView.swift */,
@@ -217,8 +219,6 @@
3D8AB2A62B366309005BD7D0 /* Library */ = {
isa = PBXGroup;
children = (
- 3D13F95D2B375DAC00E91913 /* Item */,
- 3D41D1F92B2CAE0000E58234 /* ItemIconView.swift */,
3D8AB2A72B366353005BD7D0 /* LibraryDetailView.swift */,
);
path = Library;
diff --git a/Jel.xcodeproj/xcuserdata/zerocool.xcuserdatad/xcschemes/xcschememanagement.plist b/Jel.xcodeproj/xcuserdata/zerocool.xcuserdatad/xcschemes/xcschememanagement.plist
index 4bb5b56..27d21d3 100644
--- a/Jel.xcodeproj/xcuserdata/zerocool.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Jel.xcodeproj/xcuserdata/zerocool.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,7 +7,7 @@
Jel.xcscheme_^#shared#^_
orderHint
- 1
+ 0
JellyfinClient.xcscheme_^#shared#^_
diff --git a/Jel/Views/Library/Item/ItemGenresView.swift b/Jel/Views/Item/ItemGenresView.swift
similarity index 100%
rename from Jel/Views/Library/Item/ItemGenresView.swift
rename to Jel/Views/Item/ItemGenresView.swift
diff --git a/Jel/Views/Library/Item/ItemHeaderView.swift b/Jel/Views/Item/ItemHeaderView.swift
similarity index 100%
rename from Jel/Views/Library/Item/ItemHeaderView.swift
rename to Jel/Views/Item/ItemHeaderView.swift
diff --git a/Jel/Views/Library/ItemIconView.swift b/Jel/Views/Item/ItemIconView.swift
similarity index 100%
rename from Jel/Views/Library/ItemIconView.swift
rename to Jel/Views/Item/ItemIconView.swift
diff --git a/Jel/Views/Library/Item/ItemInfoView.swift b/Jel/Views/Item/ItemInfoView.swift
similarity index 100%
rename from Jel/Views/Library/Item/ItemInfoView.swift
rename to Jel/Views/Item/ItemInfoView.swift
diff --git a/Jel/Views/Library/Item/ItemMediaView.swift b/Jel/Views/Item/ItemMediaView.swift
similarity index 96%
rename from Jel/Views/Library/Item/ItemMediaView.swift
rename to Jel/Views/Item/ItemMediaView.swift
index 1d1e53d..be8264a 100644
--- a/Jel/Views/Library/Item/ItemMediaView.swift
+++ b/Jel/Views/Item/ItemMediaView.swift
@@ -21,7 +21,6 @@ struct ItemMediaView: View {
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)
diff --git a/Jel/Views/Library/Item/ItemView.swift b/Jel/Views/Item/ItemView.swift
similarity index 100%
rename from Jel/Views/Library/Item/ItemView.swift
rename to Jel/Views/Item/ItemView.swift
diff --git a/Jel/Views/Library/Item/Person/ItemPeopleView.swift b/Jel/Views/Item/Person/ItemPeopleView.swift
similarity index 58%
rename from Jel/Views/Library/Item/Person/ItemPeopleView.swift
rename to Jel/Views/Item/Person/ItemPeopleView.swift
index 6e2a974..f007796 100644
--- a/Jel/Views/Library/Item/Person/ItemPeopleView.swift
+++ b/Jel/Views/Item/Person/ItemPeopleView.swift
@@ -20,9 +20,18 @@ struct ItemPeopleView: View {
.padding(.leading)
ScrollView(.horizontal) {
- LazyHStack(alignment: .top) {
+ // FIXME: For some reason, a LazyHStack clips the text for this view
+ HStack(alignment: .top) {
ForEach(item.people ?? [], id: \.iterId) {person in
- ItemPersonIconView(person: person)
+ NavigationLink {
+ VStack {
+ ItemPersonIconView(person: person)
+ Text("Subview")
+ }
+ .navigationTitle(person.name ?? "Unnamed")
+ } label: {
+ ItemPersonIconView(person: person)
+ }
}
}
.padding(.horizontal)
diff --git a/Jel/Views/Library/Item/Person/ItemPersonIconView.swift b/Jel/Views/Item/Person/ItemPersonIconView.swift
similarity index 65%
rename from Jel/Views/Library/Item/Person/ItemPersonIconView.swift
rename to Jel/Views/Item/Person/ItemPersonIconView.swift
index a6e5161..b839deb 100644
--- a/Jel/Views/Library/Item/Person/ItemPersonIconView.swift
+++ b/Jel/Views/Item/Person/ItemPersonIconView.swift
@@ -11,12 +11,16 @@ import NukeUI
struct ItemPersonIconPlaceholderView: View {
var body: some View {
- VStack {
- Image(systemName: "person")
+ ZStack {
+ Color(uiColor: UIColor.secondarySystemBackground)
+ Image(systemName: "person.fill")
.resizable()
+ .aspectRatio(contentMode: .fit)
.padding()
- .scaledToFit()
+ .foregroundStyle(Color(uiColor: UIColor.secondarySystemFill))
}
+ .frame(height: 150)
+ .clipShape(RoundedRectangle(cornerRadius: 5))
}
}
@@ -27,39 +31,40 @@ struct ItemPersonIconView: View {
var person: BaseItemPerson
@State var personImageUrl: URL?
- @State var loading: Bool = true
var body: some View {
- VStack() {
+ VStack {
LazyImage(url: personImageUrl) {state in
if let image = state.image {
image
.resizable()
+ .aspectRatio(contentMode: .fit)
.clipShape(RoundedRectangle(cornerRadius: 5))
} else {
ItemPersonIconPlaceholderView()
}
}
- .aspectRatio(contentMode: .fit)
- .frame(width: 100, height: 170)
+ .frame(height: 170)
- VStack {
+ VStack(alignment: .leading) {
Text(person.name ?? "---")
- .font(.callout)
+ .font(.footnote)
+ .lineLimit(nil)
Text(person.role ?? "---")
.font(.caption)
- .foregroundStyle(.gray)
+ .foregroundStyle(Color(uiColor: UIColor.secondaryLabel))
+ .fixedSize(horizontal: false, vertical: true)
+ .lineLimit(nil)
}
- .frame(width: 100)
+ .multilineTextAlignment(.leading)
}
- // .redacted(reason: loading ? .placeholder : [])
+ .frame(width: 100)
.onAppear {
Task {
let request = Paths.getItemImage(itemID: person.id ?? "", imageType: "Primary")
let serverUrl = jellyfinClient.getUrl()
personImageUrl = serverUrl?.appending(path: request.url?.absoluteString ?? "")
- // loading = false
}
}
}
diff --git a/Jel/Views/Library/Item/Types/ItemMovieView.swift b/Jel/Views/Item/Types/ItemMovieView.swift
similarity index 86%
rename from Jel/Views/Library/Item/Types/ItemMovieView.swift
rename to Jel/Views/Item/Types/ItemMovieView.swift
index 5181e73..5cb5c3b 100644
--- a/Jel/Views/Library/Item/Types/ItemMovieView.swift
+++ b/Jel/Views/Item/Types/ItemMovieView.swift
@@ -23,7 +23,7 @@ struct ItemMovieView: View {
.onChange(of: geo.frame(in: .global).minY) {
let minY = geo.frame(in: .global).minY
- pageScrolled = minY < -100
+ pageScrolled = minY < -150
}
}
}
@@ -32,8 +32,12 @@ struct ItemMovieView: View {
.padding()
ItemGenresView(item: item)
+ .padding(.bottom)
+ .foregroundStyle(Color.primary)
ItemPeopleView(item: item)
+ .padding(.bottom)
+ .foregroundStyle(Color.primary)
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle(item.name ?? "Untitled")
diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 0000000..a2f41e4
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,10 @@
+===
+TODO
+
+- Implement play button
+
+===
+DONE
+
+- Use Color.seondaryLabel for gray text
+- Fix text wrapping on ItemPersonIconView