Luminate/Sources/LuminateHome/HomePosterCell.swift

44 lines
1.2 KiB
Swift

import Adwaita
import LuminateCore
struct HomePosterCell: View {
var item: Components.Schemas.BaseItemDto
var client: JellyfinClient
@State private var imageData: Data?
var view: Body {
VStack {
if let data = imageData {
Picture(data)
.frame(minWidth: 150, maxWidth: 150, minHeight: 225, maxHeight: 225)
} else {
Box()
.frame(minWidth: 150, maxWidth: 150, minHeight: 225, maxHeight: 225)
.style("card")
}
Text(item.Name ?? "")
.style("body")
.halign(.center)
.maxWidth(150)
}
.onAppear {
loadImage()
}
}
private func loadImage() {
guard let tag = item.primaryImageTag,
let itemId = item.Id,
let url = client.imageURL(
itemId: itemId,
imageType: .Primary,
tag: tag,
maxWidth: 300
) else { return }
Task {
let service = ImageService()
imageData = try? await service.loadImage(url: url)
}
}
}