diff options
author | Shav Kinderlehrer <[email protected]> | 2024-01-11 20:44:49 -0500 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2024-01-11 20:44:49 -0500 |
commit | 6b8d3372d21149ed0efb4d43bf0cab44bd24f9a4 (patch) | |
tree | a6c393738b67dd753efe839aff59193da94b7bb3 | |
parent | 6edc39791a577a500c92f32361cf1e7d2590ec37 (diff) | |
download | jel-6b8d3372d21149ed0efb4d43bf0cab44bd24f9a4.tar.gz jel-6b8d3372d21149ed0efb4d43bf0cab44bd24f9a4.zip |
Implement peopleView
-rw-r--r-- | Jel.xcodeproj/project.pbxproj | 4 | ||||
-rw-r--r-- | Jel.xcodeproj/xcuserdata/zerocool.xcuserdatad/xcschemes/xcschememanagement.plist | 2 | ||||
-rw-r--r-- | Jel/Views/Item/ItemGenresView.swift (renamed from Jel/Views/Library/Item/ItemGenresView.swift) | 0 | ||||
-rw-r--r-- | Jel/Views/Item/ItemHeaderView.swift (renamed from Jel/Views/Library/Item/ItemHeaderView.swift) | 0 | ||||
-rw-r--r-- | Jel/Views/Item/ItemIconView.swift (renamed from Jel/Views/Library/ItemIconView.swift) | 0 | ||||
-rw-r--r-- | Jel/Views/Item/ItemInfoView.swift (renamed from Jel/Views/Library/Item/ItemInfoView.swift) | 0 | ||||
-rw-r--r-- | Jel/Views/Item/ItemMediaView.swift (renamed from Jel/Views/Library/Item/ItemMediaView.swift) | 1 | ||||
-rw-r--r-- | Jel/Views/Item/ItemView.swift (renamed from Jel/Views/Library/Item/ItemView.swift) | 0 | ||||
-rw-r--r-- | Jel/Views/Item/Person/ItemPeopleView.swift (renamed from Jel/Views/Library/Item/Person/ItemPeopleView.swift) | 13 | ||||
-rw-r--r-- | Jel/Views/Item/Person/ItemPersonIconView.swift (renamed from Jel/Views/Library/Item/Person/ItemPersonIconView.swift) | 31 | ||||
-rw-r--r-- | Jel/Views/Item/Types/ItemMovieView.swift (renamed from Jel/Views/Library/Item/Types/ItemMovieView.swift) | 6 | ||||
-rw-r--r-- | TODO.txt | 10 |
12 files changed, 47 insertions, 20 deletions
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 @@ <key>Jel.xcscheme_^#shared#^_</key> <dict> <key>orderHint</key> - <integer>1</integer> + <integer>0</integer> </dict> <key>JellyfinClient.xcscheme_^#shared#^_</key> <dict> diff --git a/Jel/Views/Library/Item/ItemGenresView.swift b/Jel/Views/Item/ItemGenresView.swift index 4e8321f..4e8321f 100644 --- a/Jel/Views/Library/Item/ItemGenresView.swift +++ b/Jel/Views/Item/ItemGenresView.swift diff --git a/Jel/Views/Library/Item/ItemHeaderView.swift b/Jel/Views/Item/ItemHeaderView.swift index 4c2bbe3..4c2bbe3 100644 --- a/Jel/Views/Library/Item/ItemHeaderView.swift +++ b/Jel/Views/Item/ItemHeaderView.swift diff --git a/Jel/Views/Library/ItemIconView.swift b/Jel/Views/Item/ItemIconView.swift index c2006cc..c2006cc 100644 --- a/Jel/Views/Library/ItemIconView.swift +++ b/Jel/Views/Item/ItemIconView.swift diff --git a/Jel/Views/Library/Item/ItemInfoView.swift b/Jel/Views/Item/ItemInfoView.swift index dda1c39..dda1c39 100644 --- a/Jel/Views/Library/Item/ItemInfoView.swift +++ b/Jel/Views/Item/ItemInfoView.swift diff --git a/Jel/Views/Library/Item/ItemMediaView.swift b/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: "<br>") ?? [], id: \.self) {overview in Text(overview) diff --git a/Jel/Views/Library/Item/ItemView.swift b/Jel/Views/Item/ItemView.swift index da85f32..da85f32 100644 --- a/Jel/Views/Library/Item/ItemView.swift +++ b/Jel/Views/Item/ItemView.swift diff --git a/Jel/Views/Library/Item/Person/ItemPeopleView.swift b/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 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 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 |