diff --git a/Model/PlayerQueue.swift b/Model/PlayerQueue.swift index d6e7f666..edd93620 100644 --- a/Model/PlayerQueue.swift +++ b/Model/PlayerQueue.swift @@ -127,6 +127,16 @@ extension PlayerModel { } } + func playHistory(_ item: PlayerQueueItem) { + let newItem = enqueueVideo(item.video, prepending: true) + + advanceToItem(newItem!) + + if let historyItemIndex = history.firstIndex(of: item) { + history.remove(at: historyItemIndex) + } + } + @discardableResult func removeHistory(_ item: PlayerQueueItem) -> PlayerQueueItem? { if let index = history.firstIndex(where: { $0 == item }) { return history.remove(at: index) diff --git a/Shared/Player/PlayerQueueRow.swift b/Shared/Player/PlayerQueueRow.swift index 283d8515..7e3fdbd1 100644 --- a/Shared/Player/PlayerQueueRow.swift +++ b/Shared/Player/PlayerQueueRow.swift @@ -14,11 +14,7 @@ struct PlayerQueueRow: View { player.addCurrentItemToHistory() if history { - let newItem = player.enqueueVideo(item.video, prepending: true) - player.advanceToItem(newItem!) - if let historyItemIndex = player.history.firstIndex(of: item) { - player.history.remove(at: historyItemIndex) - } + player.playHistory(item) } else { player.advanceToItem(item) } diff --git a/Shared/Player/PlayerViewController.swift b/Shared/Player/PlayerViewController.swift index f9e012d7..1ab903d1 100644 --- a/Shared/Player/PlayerViewController.swift +++ b/Shared/Player/PlayerViewController.swift @@ -45,6 +45,7 @@ final class PlayerViewController: UIViewController { let controller = UIHostingController(rootView: AnyView( NowPlayingView(infoViewController: true) + .frame(maxHeight: 600) .environmentObject(playerModel) ) ) diff --git a/tvOS/NowPlayingView.swift b/tvOS/NowPlayingView.swift index 3d4d2890..24063461 100644 --- a/tvOS/NowPlayingView.swift +++ b/tvOS/NowPlayingView.swift @@ -33,15 +33,13 @@ struct NowPlayingView: View { .padding(.bottom, 20) } - if !infoViewController { - header("Playing Next") - } + header("Playing Next") if player.queue.isEmpty { Spacer() Text("Playback queue is empty") - .padding(.leading, 40) + .padding([.vertical, .leading], 40) .foregroundColor(.secondary) } @@ -58,6 +56,34 @@ struct NowPlayingView: View { } } } + + header("Played Previously") + + if player.history.isEmpty { + Spacer() + + Text("History is empty") + .padding([.vertical, .leading], 40) + .foregroundColor(.secondary) + } + + ForEach(player.history) { item in + Button { + player.playHistory(item) + player.presentPlayer() + } label: { + VideoBanner(video: item.video) + } + .contextMenu { + Button("Delete", role: .destructive) { + player.removeHistory(item) + } + + Button("Delete History", role: .destructive) { + player.removeHistoryItems() + } + } + } } .padding(.vertical) .padding(.horizontal, 40)