1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-15 06:40:32 +05:30
yattee/Shared/Home/HistoryView.swift

57 lines
1.7 KiB
Swift
Raw Normal View History

2022-11-09 19:04:04 +05:30
import SwiftUI
struct HistoryView: View {
2022-11-14 23:16:50 +05:30
static let detailsPreloadLimit = 50
2022-11-15 16:52:27 +05:30
var limit = 10
2022-11-09 19:04:04 +05:30
@FetchRequest(sortDescriptors: [.init(key: "watchedAt", ascending: false)])
var watches: FetchedResults<Watch>
@EnvironmentObject<PlayerModel> private var player
var body: some View {
LazyVStack {
2022-11-11 23:20:13 +05:30
if visibleWatches.isEmpty {
VStack(alignment: .center, spacing: 20) {
HStack {
Image(systemName: "clock")
Text("Playback history is empty")
}.foregroundColor(.secondary)
2022-11-09 19:04:04 +05:30
}
2022-11-11 23:20:13 +05:30
} else {
ForEach(visibleWatches, id: \.videoID) { watch in
PlayerQueueRow(
item: PlayerQueueItem.from(watch, video: player.historyVideo(watch.videoID)),
history: true
)
.contextMenu {
VideoContextMenuView(video: player.historyVideo(watch.videoID) ?? watch.video)
}
2022-11-09 19:04:04 +05:30
}
}
}
2022-11-14 23:16:50 +05:30
.onAppear {
visibleWatches
.prefix(Self.detailsPreloadLimit)
.map(\.videoID)
.forEach(player.loadHistoryVideoDetails)
}
2022-11-11 23:20:13 +05:30
#if os(tvOS)
.padding(.horizontal, 40)
#else
.padding(.horizontal, 15)
#endif
2022-11-09 19:04:04 +05:30
}
private var visibleWatches: [Watch] {
Array(watches.filter { $0.videoID != player.currentVideo?.videoID }.prefix(limit))
}
}
struct HistoryView_Previews: PreviewProvider {
static var previews: some View {
HistoryView()
}
}