add autoplay setting

This commit is contained in:
Ethan Pippin 2021-12-30 14:25:52 -07:00
parent c4466c2cb9
commit 678fdd03bf
6 changed files with 54 additions and 6 deletions

View File

@ -117,6 +117,18 @@ struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
.foregroundColor(viewModel.selectedSubtitleStreamIndex == -1 ? .gray : .white)
}
if viewModel.shouldShowAutoPlayNextItem {
Button {
viewModel.autoPlayNextItem.toggle()
} label: {
if viewModel.autoPlayNextItem {
Image(systemName: "play.circle.fill")
} else {
Image(systemName: "play.circle")
}
}
}
// MARK: Settings Menu
Menu {
@ -342,7 +354,9 @@ struct VLCPlayerCompactOverlayView_Previews: PreviewProvider {
sliderPercentage: 0.432,
selectedAudioStreamIndex: -1,
selectedSubtitleStreamIndex: -1,
showAdjacentItems: true))
showAdjacentItems: true,
shouldShowAutoPlayNextItem: true,
autoPlayNextItem: true))
}
.previewInterfaceOrientation(.landscapeLeft)
}

View File

@ -240,7 +240,9 @@ struct VLCPlayerOverlayView_Previews: PreviewProvider {
sliderPercentage: 0.0,
selectedAudioStreamIndex: -1,
selectedSubtitleStreamIndex: -1,
showAdjacentItems: true))
showAdjacentItems: true,
shouldShowAutoPlayNextItem: true,
autoPlayNextItem: true))
}
.previewInterfaceOrientation(.landscapeLeft)
}

View File

@ -382,10 +382,14 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate {
// MARK: mediaPlayerStateChanged
func mediaPlayerStateChanged(_ aNotification: Notification!) {
self.viewModel.playerState = vlcMediaPlayer.state
viewModel.playerState = vlcMediaPlayer.state
if vlcMediaPlayer.state == VLCMediaPlayerState.ended {
didSelectClose()
if viewModel.autoPlayNextItem && viewModel.nextItemVideoPlayerViewModel != nil {
didSelectNextItem()
} else {
didSelectClose()
}
}
}

View File

@ -8,6 +8,7 @@
*/
import Combine
import Defaults
import JellyfinAPI
import UIKit
@ -88,6 +89,14 @@ extension BaseItemDto {
}
}
// MARK: VidoPlayerViewModel Creation
// TODO: show adjacent items
let shouldShowAutoPlayNextItem = Defaults[.shouldShowAutoPlayNextItem]
let autoPlayNextItem = Defaults[.autoPlayNextItem]
let videoPlayerViewModel = VideoPlayerViewModel(item: self,
title: self.name!,
subtitle: subtitle,
@ -105,7 +114,9 @@ extension BaseItemDto {
sliderPercentage: (self.userData?.playedPercentage ?? 0) / 100,
selectedAudioStreamIndex: defaultAudioStream?.index ?? -1,
selectedSubtitleStreamIndex: defaultSubtitleStream?.index ?? -1,
showAdjacentItems: true)
showAdjacentItems: true,
shouldShowAutoPlayNextItem: shouldShowAutoPlayNextItem,
autoPlayNextItem: autoPlayNextItem)
return videoPlayerViewModel
})

View File

@ -33,4 +33,6 @@ extension Defaults.Keys {
static let videoPlayerJumpForward = Key<VideoPlayerJumpLength>("videoPlayerJumpForward", default: .fifteen, suite: SwiftfinStore.Defaults.suite)
static let videoPlayerJumpBackward = Key<VideoPlayerJumpLength>("videoPlayerJumpBackward", default: .fifteen, suite: SwiftfinStore.Defaults.suite)
static let nativeVideoPlayer = Key<Bool>("nativeVideoPlayer", default: false, suite: SwiftfinStore.Defaults.suite)
static let shouldShowAutoPlayNextItem = Key<Bool>("shouldShowAutoPlayNextItem", default: true, suite: SwiftfinStore.Defaults.suite)
static let autoPlayNextItem = Key<Bool>("autoPlayNextItem", default: true, suite: SwiftfinStore.Defaults.suite)
}

View File

@ -6,6 +6,7 @@
//
import Combine
import Defaults
import Foundation
import JellyfinAPI
import UIKit
@ -54,6 +55,16 @@ final class VideoPlayerViewModel: ViewModel {
}
}
@Published var showAdjacentItems: Bool
@Published var shouldShowAutoPlayNextItem: Bool {
willSet {
Defaults[.shouldShowAutoPlayNextItem] = newValue
}
}
@Published var autoPlayNextItem: Bool {
willSet {
Defaults[.autoPlayNextItem] = newValue
}
}
@Published var previousItemVideoPlayerViewModel: VideoPlayerViewModel?
@Published var nextItemVideoPlayerViewModel: VideoPlayerViewModel?
@ -105,7 +116,9 @@ final class VideoPlayerViewModel: ViewModel {
sliderPercentage: Double,
selectedAudioStreamIndex: Int,
selectedSubtitleStreamIndex: Int,
showAdjacentItems: Bool) {
showAdjacentItems: Bool,
shouldShowAutoPlayNextItem: Bool,
autoPlayNextItem: Bool) {
self.item = item
self.title = title
self.subtitle = subtitle
@ -124,6 +137,8 @@ final class VideoPlayerViewModel: ViewModel {
self.selectedAudioStreamIndex = selectedAudioStreamIndex
self.selectedSubtitleStreamIndex = selectedSubtitleStreamIndex
self.showAdjacentItems = showAdjacentItems
self.shouldShowAutoPlayNextItem = shouldShowAutoPlayNextItem
self.autoPlayNextItem = autoPlayNextItem
super.init()