Playback modes

This commit is contained in:
Arkadiusz Fal
2022-07-11 00:24:56 +02:00
parent f0b8e7f655
commit ebe3ba9ed5
13 changed files with 150 additions and 105 deletions

View File

@@ -74,6 +74,7 @@ extension Defaults.Keys {
static let queue = Key<[PlayerQueueItem]>("queue", default: [])
static let lastPlayed = Key<PlayerQueueItem?>("lastPlayed")
static let playbackMode = Key<PlayerModel.PlaybackMode>("playbackMode", default: .queue)
static let saveHistory = Key<Bool>("saveHistory", default: true)
static let showWatchingProgress = Key<Bool>("showWatchingProgress", default: true)

View File

@@ -18,9 +18,6 @@ struct AppSidebarPlaylists: View {
Button("Play All") {
player.play(playlists.find(id: playlist.id)?.videos ?? [])
}
Button("Shuffle All") {
player.play(playlists.find(id: playlist.id)?.videos ?? [], shuffling: true)
}
Button("Edit") {
navigation.presentEditPlaylistForm(playlists.find(id: playlist.id))
}

View File

@@ -275,6 +275,7 @@ struct PlayerControls: View {
Spacer()
HStack(spacing: 20) {
playbackModeButton
restartVideoButton
advanceToNextItemButton
#if !os(tvOS)
@@ -286,6 +287,12 @@ struct PlayerControls: View {
.font(.system(size: 20))
}
var playbackModeButton: some View {
button("Playback Mode", systemImage: player.playbackMode.systemImage, background: false) {
player.playbackMode = player.playbackMode.next()
}
}
var seekBackwardButton: some View {
button("Seek Backward", systemImage: "gobackward.10", size: 25, cornerRadius: 5, background: false) {
player.backend.seek(relative: .secondsInDefaultTimescale(-10))
@@ -337,7 +344,7 @@ struct PlayerControls: View {
button("Next", systemImage: "forward.fill", size: 25, cornerRadius: 5, background: false) {
player.advanceToNextItem()
}
.disabled(player.queue.isEmpty)
.disabled(!player.isAdvanceToNextItemAvailable)
}
func button(

View File

@@ -80,12 +80,8 @@ struct PlaylistsView: View {
Spacer()
if currentPlaylist != nil {
HStack(spacing: 0) {
playButton
shuffleButton
}
.offset(x: 10)
playButton
.offset(x: 10)
}
}
.padding(.horizontal)
@@ -180,7 +176,6 @@ struct PlaylistsView: View {
.labelStyle(.iconOnly)
playButton
shuffleButton
}
Spacer()
@@ -293,6 +288,7 @@ struct PlaylistsView: View {
private var playButton: some View {
Button {
player.playbackMode = .queue
player.play(items.compactMap(\.video))
} label: {
Image(systemName: "play")
@@ -301,16 +297,6 @@ struct PlaylistsView: View {
}
}
private var shuffleButton: some View {
Button {
player.play(items.compactMap(\.video), shuffling: true)
} label: {
Image(systemName: "shuffle")
.padding(8)
.contentShape(Rectangle())
}
}
private var currentPlaylist: Playlist? {
model.find(id: selectedPlaylistID) ?? model.all.first
}

View File

@@ -86,8 +86,6 @@ struct ChannelPlaylistView: View {
playButton
.labelStyle(.iconOnly)
shuffleButton
.labelStyle(.iconOnly)
}
#endif
VerticalCells(items: items)
@@ -119,7 +117,6 @@ struct ChannelPlaylistView: View {
}
playButton
shuffleButton
}
}
}
@@ -137,20 +134,13 @@ struct ChannelPlaylistView: View {
private var playButton: some View {
Button {
player.playbackMode = .queue
player.play(videos)
} label: {
Label("Play All", systemImage: "play")
}
}
private var shuffleButton: some View {
Button {
player.play(videos, shuffling: true)
} label: {
Label("Shuffle", systemImage: "shuffle")
}
}
private var videos: [Video] {
items.compactMap(\.video)
}

View File

@@ -109,7 +109,7 @@ struct ControlsBar: View {
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
}
.disabled(model.queue.isEmpty)
.disabled(!model.isAdvanceToNextItemAvailable)
Button {
model.closeCurrentItem()

View File

@@ -65,16 +65,11 @@ struct PlaylistVideosView: View {
FavoriteButton(item: FavoriteItem(section: .channelPlaylist(playlist.id, playlist.title)))
Button {
player.playbackMode = .queue
player.play(videos)
} label: {
Label("Play All", systemImage: "play")
}
Button {
player.play(videos, shuffling: true)
} label: {
Label("Shuffle", systemImage: "shuffle")
}
}
}
}