summaryrefslogtreecommitdiff
path: root/Jel/Views
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2024-01-07 21:21:36 -0500
committerShav Kinderlehrer <[email protected]>2024-01-07 21:21:36 -0500
commite807d063195b1299dcaeb6e7213d7e3d300a3112 (patch)
tree27240514cc15ba0b2c64f41e658329be02ffd1ae /Jel/Views
parent3f74421e5b33e9e284197ef8d8f5e27fc1dc2a22 (diff)
downloadjel-e807d063195b1299dcaeb6e7213d7e3d300a3112.tar.gz
jel-e807d063195b1299dcaeb6e7213d7e3d300a3112.zip
Fix ItemMediaView NavigationTitle + Implement Genre Filtering
Diffstat (limited to 'Jel/Views')
-rw-r--r--Jel/Views/Library/Item/ItemGenresView.swift19
-rw-r--r--Jel/Views/Library/Item/ItemMediaView.swift24
-rw-r--r--Jel/Views/Library/LibraryDetailView.swift9
3 files changed, 38 insertions, 14 deletions
diff --git a/Jel/Views/Library/Item/ItemGenresView.swift b/Jel/Views/Library/Item/ItemGenresView.swift
index 25b86e4..5bfccb0 100644
--- a/Jel/Views/Library/Item/ItemGenresView.swift
+++ b/Jel/Views/Library/Item/ItemGenresView.swift
@@ -14,7 +14,7 @@ struct ItemGenresView: View {
@StateObject var authState: AuthStateController = AuthStateController.shared
var item: BaseItemDto
- @State var library: BaseItemDto = BaseItemDto()
+ @State var libraryItems: [BaseItemDto]? = []
var body: some View {
VStack(alignment: .leading) {
@@ -25,7 +25,7 @@ struct ItemGenresView: View {
HStack {
ForEach(item.genres ?? [], id: \.self) {genre in
NavigationLink {
- LibraryDetailView(library: library) {items in
+ LibraryDetailView(library: BaseItemDto(name: genre), items: libraryItems) {items in
var matchingItems: [BaseItemDto] = []
for item in items {
@@ -47,10 +47,21 @@ struct ItemGenresView: View {
}
.onAppear {
Task {
- let request = Paths.getItem(userID: authState.userId ?? "", itemID: item.parentID ?? "")
+ let parameters = Paths.GetItemsParameters(
+ userID: authState.userId ?? "",
+ isRecursive: true,
+ fields: [.primaryImageAspectRatio,
+ .genres,
+ .taglines,
+ .overview,
+ .parentID],
+ includeItemTypes: [.movie, .series],
+ genres: item.genres ?? []
+ )
+ let request = Paths.getItems(parameters: parameters)
do {
let res = try await jellyfinClient.send(request)
- library = res.value
+ libraryItems = res.value.items ?? []
} catch {
}
}
diff --git a/Jel/Views/Library/Item/ItemMediaView.swift b/Jel/Views/Library/Item/ItemMediaView.swift
index dfb6c7a..4b8f863 100644
--- a/Jel/Views/Library/Item/ItemMediaView.swift
+++ b/Jel/Views/Library/Item/ItemMediaView.swift
@@ -7,6 +7,7 @@
import SwiftUI
import JellyfinKit
+import VisibilityTrackingScrollView
struct ItemMediaView: View {
@EnvironmentObject var jellyfinClient: JellyfinClientController
@@ -15,7 +16,7 @@ struct ItemMediaView: View {
@State var item: BaseItemDto
@State var loading: Bool = true
- @State var navigationTitle: String = ""
+ @State var pageScrolled: Bool = false
var body: some View {
GeometryReader {geo in
@@ -23,7 +24,7 @@ struct ItemMediaView: View {
ProgressView()
.progressViewStyle(.circular)
} else {
- ScrollView {
+ ScrollView() {
ItemHeaderView(item: item)
.padding(.bottom)
.background {
@@ -31,11 +32,8 @@ struct ItemMediaView: View {
EmptyView()
.onChange(of: geo.frame(in: .global).minY) {
let minY = geo.frame(in: .global).minY
- if minY < 0 {
- navigationTitle = item.name ?? ""
- } else {
- navigationTitle = ""
- }
+
+ pageScrolled = minY < 0
}
}
}
@@ -49,6 +47,8 @@ struct ItemMediaView: View {
ForEach(item.overview?.components(separatedBy: "<br>") ?? [], id: \.self) {overview in
Text(overview)
}
+
+ ItemGenresView(item: item)
}
.if(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing) > 0) {view in
view
@@ -62,9 +62,15 @@ struct ItemMediaView: View {
.ignoresSafeArea()
}
}
- .toolbarRole(.editor)
.navigationBarTitleDisplayMode(.inline)
- .navigationTitle(navigationTitle)
+ .navigationTitle(item.name ?? "Untitled")
+ .toolbarRole(.editor)
+ .toolbar {
+ ToolbarItem(placement: .principal) {
+ Text(pageScrolled ? item.name ?? "Untitled" : "")
+ .bold()
+ }
+ }
.scrollIndicators(.hidden)
.onAppear {
Task {
diff --git a/Jel/Views/Library/LibraryDetailView.swift b/Jel/Views/Library/LibraryDetailView.swift
index b645a8a..8c74140 100644
--- a/Jel/Views/Library/LibraryDetailView.swift
+++ b/Jel/Views/Library/LibraryDetailView.swift
@@ -13,9 +13,9 @@ struct LibraryDetailView: View {
@StateObject var authState: AuthStateController = AuthStateController.shared
@State var library: BaseItemDto
+ @State var items: [BaseItemDto]? = []
var filter: (_ items: [BaseItemDto]) -> [BaseItemDto]
- @State var items: [BaseItemDto]? = []
@State var loading: Bool = true
@@ -73,6 +73,13 @@ struct LibraryDetailView: View {
}
}
.onAppear {
+ if items?.count ?? 0 > 0 {
+ items = self.filter(items ?? [])
+ items?.sort(by: {$0.name?.lowercased() ?? "" < $1.name?.lowercased() ?? ""})
+ loading = false
+ return
+ }
+
Task {
let params = Paths.GetItemsParameters(
userID: authState.userId,