add autoplay setting
This commit is contained in:
parent
c4466c2cb9
commit
678fdd03bf
|
@ -117,6 +117,18 @@ struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
|
||||||
.foregroundColor(viewModel.selectedSubtitleStreamIndex == -1 ? .gray : .white)
|
.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
|
// MARK: Settings Menu
|
||||||
Menu {
|
Menu {
|
||||||
|
|
||||||
|
@ -342,7 +354,9 @@ struct VLCPlayerCompactOverlayView_Previews: PreviewProvider {
|
||||||
sliderPercentage: 0.432,
|
sliderPercentage: 0.432,
|
||||||
selectedAudioStreamIndex: -1,
|
selectedAudioStreamIndex: -1,
|
||||||
selectedSubtitleStreamIndex: -1,
|
selectedSubtitleStreamIndex: -1,
|
||||||
showAdjacentItems: true))
|
showAdjacentItems: true,
|
||||||
|
shouldShowAutoPlayNextItem: true,
|
||||||
|
autoPlayNextItem: true))
|
||||||
}
|
}
|
||||||
.previewInterfaceOrientation(.landscapeLeft)
|
.previewInterfaceOrientation(.landscapeLeft)
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,7 +240,9 @@ struct VLCPlayerOverlayView_Previews: PreviewProvider {
|
||||||
sliderPercentage: 0.0,
|
sliderPercentage: 0.0,
|
||||||
selectedAudioStreamIndex: -1,
|
selectedAudioStreamIndex: -1,
|
||||||
selectedSubtitleStreamIndex: -1,
|
selectedSubtitleStreamIndex: -1,
|
||||||
showAdjacentItems: true))
|
showAdjacentItems: true,
|
||||||
|
shouldShowAutoPlayNextItem: true,
|
||||||
|
autoPlayNextItem: true))
|
||||||
}
|
}
|
||||||
.previewInterfaceOrientation(.landscapeLeft)
|
.previewInterfaceOrientation(.landscapeLeft)
|
||||||
}
|
}
|
||||||
|
|
|
@ -382,10 +382,14 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate {
|
||||||
// MARK: mediaPlayerStateChanged
|
// MARK: mediaPlayerStateChanged
|
||||||
func mediaPlayerStateChanged(_ aNotification: Notification!) {
|
func mediaPlayerStateChanged(_ aNotification: Notification!) {
|
||||||
|
|
||||||
self.viewModel.playerState = vlcMediaPlayer.state
|
viewModel.playerState = vlcMediaPlayer.state
|
||||||
|
|
||||||
if vlcMediaPlayer.state == VLCMediaPlayerState.ended {
|
if vlcMediaPlayer.state == VLCMediaPlayerState.ended {
|
||||||
didSelectClose()
|
if viewModel.autoPlayNextItem && viewModel.nextItemVideoPlayerViewModel != nil {
|
||||||
|
didSelectNextItem()
|
||||||
|
} else {
|
||||||
|
didSelectClose()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Combine
|
import Combine
|
||||||
|
import Defaults
|
||||||
import JellyfinAPI
|
import JellyfinAPI
|
||||||
import UIKit
|
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,
|
let videoPlayerViewModel = VideoPlayerViewModel(item: self,
|
||||||
title: self.name!,
|
title: self.name!,
|
||||||
subtitle: subtitle,
|
subtitle: subtitle,
|
||||||
|
@ -105,7 +114,9 @@ extension BaseItemDto {
|
||||||
sliderPercentage: (self.userData?.playedPercentage ?? 0) / 100,
|
sliderPercentage: (self.userData?.playedPercentage ?? 0) / 100,
|
||||||
selectedAudioStreamIndex: defaultAudioStream?.index ?? -1,
|
selectedAudioStreamIndex: defaultAudioStream?.index ?? -1,
|
||||||
selectedSubtitleStreamIndex: defaultSubtitleStream?.index ?? -1,
|
selectedSubtitleStreamIndex: defaultSubtitleStream?.index ?? -1,
|
||||||
showAdjacentItems: true)
|
showAdjacentItems: true,
|
||||||
|
shouldShowAutoPlayNextItem: shouldShowAutoPlayNextItem,
|
||||||
|
autoPlayNextItem: autoPlayNextItem)
|
||||||
|
|
||||||
return videoPlayerViewModel
|
return videoPlayerViewModel
|
||||||
})
|
})
|
||||||
|
|
|
@ -33,4 +33,6 @@ extension Defaults.Keys {
|
||||||
static let videoPlayerJumpForward = Key<VideoPlayerJumpLength>("videoPlayerJumpForward", default: .fifteen, suite: SwiftfinStore.Defaults.suite)
|
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 videoPlayerJumpBackward = Key<VideoPlayerJumpLength>("videoPlayerJumpBackward", default: .fifteen, suite: SwiftfinStore.Defaults.suite)
|
||||||
static let nativeVideoPlayer = Key<Bool>("nativeVideoPlayer", default: false, 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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Combine
|
import Combine
|
||||||
|
import Defaults
|
||||||
import Foundation
|
import Foundation
|
||||||
import JellyfinAPI
|
import JellyfinAPI
|
||||||
import UIKit
|
import UIKit
|
||||||
|
@ -54,6 +55,16 @@ final class VideoPlayerViewModel: ViewModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Published var showAdjacentItems: Bool
|
@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 previousItemVideoPlayerViewModel: VideoPlayerViewModel?
|
||||||
@Published var nextItemVideoPlayerViewModel: VideoPlayerViewModel?
|
@Published var nextItemVideoPlayerViewModel: VideoPlayerViewModel?
|
||||||
|
|
||||||
|
@ -105,7 +116,9 @@ final class VideoPlayerViewModel: ViewModel {
|
||||||
sliderPercentage: Double,
|
sliderPercentage: Double,
|
||||||
selectedAudioStreamIndex: Int,
|
selectedAudioStreamIndex: Int,
|
||||||
selectedSubtitleStreamIndex: Int,
|
selectedSubtitleStreamIndex: Int,
|
||||||
showAdjacentItems: Bool) {
|
showAdjacentItems: Bool,
|
||||||
|
shouldShowAutoPlayNextItem: Bool,
|
||||||
|
autoPlayNextItem: Bool) {
|
||||||
self.item = item
|
self.item = item
|
||||||
self.title = title
|
self.title = title
|
||||||
self.subtitle = subtitle
|
self.subtitle = subtitle
|
||||||
|
@ -124,6 +137,8 @@ final class VideoPlayerViewModel: ViewModel {
|
||||||
self.selectedAudioStreamIndex = selectedAudioStreamIndex
|
self.selectedAudioStreamIndex = selectedAudioStreamIndex
|
||||||
self.selectedSubtitleStreamIndex = selectedSubtitleStreamIndex
|
self.selectedSubtitleStreamIndex = selectedSubtitleStreamIndex
|
||||||
self.showAdjacentItems = showAdjacentItems
|
self.showAdjacentItems = showAdjacentItems
|
||||||
|
self.shouldShowAutoPlayNextItem = shouldShowAutoPlayNextItem
|
||||||
|
self.autoPlayNextItem = autoPlayNextItem
|
||||||
|
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue