summaryrefslogtreecommitdiff
path: root/Jel/Views/Library
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2023-12-27 08:25:35 -0500
committerShav Kinderlehrer <[email protected]>2023-12-27 08:25:35 -0500
commit7aa602f19dec3cf526c4550c5e63a8fc6dfac723 (patch)
treea4ee5ed0a5e8b9a40ad0ef5e98b1e65b8fd207cb /Jel/Views/Library
parentbd0b6ff491b33088a4db55c495b8aab797f0b22a (diff)
downloadjel-7aa602f19dec3cf526c4550c5e63a8fc6dfac723.tar.gz
jel-7aa602f19dec3cf526c4550c5e63a8fc6dfac723.zip
Implement auto aspect ratio for LibraryIconViews
Diffstat (limited to 'Jel/Views/Library')
-rw-r--r--Jel/Views/Library/Item/ItemInfoView.swift4
-rw-r--r--Jel/Views/Library/Item/ItemMediaView.swift (renamed from Jel/Views/Library/Item/ItemMovieView.swift)4
-rw-r--r--Jel/Views/Library/Item/Types/ItemMovieView.swift22
-rw-r--r--Jel/Views/Library/LibraryDetailView.swift65
-rw-r--r--Jel/Views/Library/LibraryIconView.swift21
5 files changed, 75 insertions, 41 deletions
diff --git a/Jel/Views/Library/Item/ItemInfoView.swift b/Jel/Views/Library/Item/ItemInfoView.swift
index d48dfef..103acf9 100644
--- a/Jel/Views/Library/Item/ItemInfoView.swift
+++ b/Jel/Views/Library/Item/ItemInfoView.swift
@@ -14,9 +14,9 @@ struct ItemInfoView: View {
var body: some View {
VStack(alignment: .leading) {
HStack {
- Text(item.genres?.first ?? "---")
- Text("•")
Text((item.productionYear != nil) ? String(item.productionYear!) : "---")
+ Text("•")
+ Text(item.genres?.first ?? "---")
}
Text(item.getRuntime() ?? "-:--")
}
diff --git a/Jel/Views/Library/Item/ItemMovieView.swift b/Jel/Views/Library/Item/ItemMediaView.swift
index eed083e..38c242d 100644
--- a/Jel/Views/Library/Item/ItemMovieView.swift
+++ b/Jel/Views/Library/Item/ItemMediaView.swift
@@ -1,5 +1,5 @@
//
-// ItemMovieView.swift
+// ItemMediaView.swift
// Jel
//
// Created by zerocool on 12/23/23.
@@ -8,7 +8,7 @@
import SwiftUI
import JellyfinKit
-struct ItemMovieView: View {
+struct ItemMediaView: View {
@EnvironmentObject var jellyfinClient: JellyfinClientController
@StateObject var authState: AuthStateController = AuthStateController.shared
diff --git a/Jel/Views/Library/Item/Types/ItemMovieView.swift b/Jel/Views/Library/Item/Types/ItemMovieView.swift
new file mode 100644
index 0000000..22de82d
--- /dev/null
+++ b/Jel/Views/Library/Item/Types/ItemMovieView.swift
@@ -0,0 +1,22 @@
+//
+// ItemMovieView.swift
+// Jel
+//
+// Created by zerocool on 12/26/23.
+//
+
+import SwiftUI
+import JellyfinKit
+
+struct ItemMovieView: View {
+ @State var item: BaseItemDto
+ var body: some View {
+ VStack {
+ ItemMediaView(item: item)
+ }
+ }
+}
+
+//#Preview {
+// ItemMovieView()
+//}
diff --git a/Jel/Views/Library/LibraryDetailView.swift b/Jel/Views/Library/LibraryDetailView.swift
index 5d0e695..5b58a4e 100644
--- a/Jel/Views/Library/LibraryDetailView.swift
+++ b/Jel/Views/Library/LibraryDetailView.swift
@@ -34,55 +34,50 @@ struct LibraryDetailView: View {
}
ScrollView {
LazyVGrid(columns: columns) {
- if !searchText.isEmpty {
- ForEach(searchResultItems ?? []) {item in
- NavigationLink {
- ItemView(item: item)
- } label: {
- LibraryIconView(library: item, imageType: "Primary", width: 170)
- .padding()
- }
- .buttonStyle(PlainButtonStyle())
- }
- } else {
- ForEach(items ?? []) {item in
- NavigationLink {
- ItemView(item: item)
- } label: {
- LibraryIconView(library: item, imageType: "Primary", width: 170)
- .padding()
- }
- .buttonStyle(PlainButtonStyle())
+ // uses searchResultItems only if searchText is not empty
+ ForEach(!searchText.isEmpty ? (searchResultItems ?? items) ?? [] : items ?? []) {item in
+ NavigationLink {
+ ItemView(item: item)
+ } label: {
+ LibraryIconView(library: item, imageType: "Primary", width: 170)
+ .setAspectRatio(item.primaryImageAspectRatio ?? 0.6)
+ .padding()
+
}
+ .buttonStyle(PlainButtonStyle())
}
}
}
.if(!loading) {view in
view.searchable(text: $searchText)
- .onChange(of: searchText) {
- Task {
- let parameters = Paths.GetParameters(
- userID: AuthStateController.shared.userId,
- searchTerm: searchText.lowercased(),
- parentID: library.id
- )
- searchResultHints = await jellyfinClient.search(parameters: parameters)
-
- searchResultItems = items?.filter { item in
- for hint in searchResultHints?.searchHints ?? [] {
- if hint.name == item.name {
- return true
+ .onChange(of: searchText) {
+ Task {
+ let parameters = Paths.GetParameters(
+ userID: AuthStateController.shared.userId,
+ searchTerm: searchText.lowercased(),
+ parentID: library.id
+ )
+ searchResultHints = await jellyfinClient.search(parameters: parameters)
+
+ searchResultItems = items?.filter { item in
+ for hint in searchResultHints?.searchHints ?? [] {
+ if hint.name == item.name {
+ return true
+ }
}
+ return false
}
- return false
}
}
- }
}
.navigationTitle(library.name ?? "Unknown")
.onAppear {
Task {
- let params = Paths.GetItemsParameters(userID: authState.userId, parentID: library.id)
+ let params = Paths.GetItemsParameters(
+ userID: authState.userId,
+ parentID: library.id,
+ fields: [.primaryImageAspectRatio]
+ )
let request = Paths.getItems(parameters: params)
do {
diff --git a/Jel/Views/Library/LibraryIconView.swift b/Jel/Views/Library/LibraryIconView.swift
index a849446..9bd3182 100644
--- a/Jel/Views/Library/LibraryIconView.swift
+++ b/Jel/Views/Library/LibraryIconView.swift
@@ -32,21 +32,22 @@ struct LibraryIconView: View {
if let image = state.image {
image
.resizable()
+ .aspectRatio(contentMode: contentMode)
} else {
if let content = placeHolder {
content
} else {
Image(uiImage: blurHashImage)
.resizable()
+ .aspectRatio(contentMode: .fill)
}
}
}
- .aspectRatio(contentMode: contentMode)
.frame(width: width, height: height)
.clipShape(RoundedRectangle(cornerRadius: imageCornerRadius))
.onAppear {
let blurhash = library.imageBlurHashes?.primary?[library.imageTags?[imageType] ?? ""] ?? ""
- blurHashImage = UIImage(blurHash: blurhash, size: CGSize(width: 16, height: 16)) ?? UIImage()
+ blurHashImage = UIImage(blurHash: blurhash, size: CGSize(width: 32, height: 32)) ?? UIImage()
let imageId = library.id ?? ""
let request = Paths.getItemImage(itemID: imageId, imageType: imageType)
@@ -70,6 +71,22 @@ struct LibraryIconView: View {
copy.imageCornerRadius = cornerRadius
return copy
}
+
+ func setAspectRatio(_ aspectRatio: Double?) -> Self {
+ var copy = self
+ if aspectRatio == nil {
+ return copy
+ }
+
+ if let newWidth = copy.width {
+ copy.height = newWidth / aspectRatio!
+ }
+ if let newHeight = copy.height {
+ copy.width = newHeight * aspectRatio!
+ }
+
+ return copy
+ }
}
//#Preview {