yattee/Apple TV/VideoListRowView.swift

90 lines
3.1 KiB
Swift
Raw Normal View History

2021-06-10 22:50:10 +00:00
import SwiftUI
import URLImage
import URLImageStore
2021-06-28 15:02:13 +00:00
struct VideoListRowView: View {
2021-06-11 00:05:59 +00:00
@Environment(\.isFocused) private var focused: Bool
2021-06-10 22:50:10 +00:00
var video: Video
var body: some View {
2021-06-11 00:05:59 +00:00
NavigationLink(destination: PlayerView(id: video.id)) {
2021-06-10 22:50:10 +00:00
HStack(alignment: .top, spacing: 2) {
2021-06-11 21:11:59 +00:00
Section {
if let thumbnail = video.thumbnailURL {
// to replace with AsyncImage when it is fixed with lazy views
URLImage(thumbnail) { image in
image
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 320, height: 180)
}
.mask(RoundedRectangle(cornerRadius: 12))
} else {
Image(systemName: "exclamationmark.square")
}
2021-06-10 22:50:10 +00:00
}
.frame(width: 320, height: 180)
2021-06-11 00:05:59 +00:00
HStack {
VStack(alignment: .leading) {
Text(video.title)
.foregroundColor(.primary)
.bold()
.lineLimit(1)
2021-06-10 22:50:10 +00:00
2021-06-11 00:05:59 +00:00
Text("\(video.author)")
.foregroundColor(.secondary)
.bold()
.lineLimit(1)
2021-06-26 09:39:35 +00:00
if !video.published.isEmpty || video.views != 0 {
HStack(spacing: 8) {
if !video.published.isEmpty {
Image(systemName: "calendar")
Text(video.published)
}
2021-06-11 00:05:59 +00:00
2021-06-26 09:39:35 +00:00
if video.views != 0 {
Image(systemName: "eye")
Text(video.viewsCount)
}
}
2021-06-26 09:39:35 +00:00
.foregroundColor(.secondary)
.padding(.top)
2021-06-11 00:05:59 +00:00
}
}
.padding()
Spacer()
2021-06-10 22:50:10 +00:00
2021-06-11 00:05:59 +00:00
HStack(spacing: 8) {
if let time = video.playTime {
Image(systemName: "clock")
2021-06-11 00:05:59 +00:00
Text(time)
.fontWeight(.bold)
}
2021-06-11 00:05:59 +00:00
}
.foregroundColor(.secondary)
}
.frame(minHeight: 180)
2021-06-10 22:50:10 +00:00
}
}
}
}
2021-06-14 18:05:02 +00:00
// struct VideoThumbnailView_Previews: PreviewProvider {
// static var previews: some View {
// VideoThumbnailView(video: Video(
// id: "A",
// title: "A very very long text which",
// thumbnailURL: URL(string: "https://invidious.home.arekf.net/vi/yXohcxCKqvo/maxres.jpg")!,
// author: "Bear",
// length: 240,
// published: "2 days ago",
// channelID: ""
// )).frame(maxWidth: 350)
// }
// }