Fix restoring queue

This commit is contained in:
Arkadiusz Fal 2022-01-09 16:05:05 +01:00
parent 534f356471
commit a04827cc56
6 changed files with 30 additions and 6 deletions

View File

@ -33,7 +33,7 @@ final class PlayerModel: ObservableObject {
@Published var streamSelection: Stream? { didSet { rebuildTVMenu() } } @Published var streamSelection: Stream? { didSet { rebuildTVMenu() } }
@Published var queue = [PlayerQueueItem]() { didSet { Defaults[.queue] = queue } } @Published var queue = [PlayerQueueItem]() { didSet { Defaults[.queue] = queue } }
@Published var currentItem: PlayerQueueItem! { didSet { updateWindowTitle() } } @Published var currentItem: PlayerQueueItem! { didSet { handleCurrentItemChange() } }
@Published var historyVideos = [Video]() @Published var historyVideos = [Video]()
@Published var preservedTime: CMTime? @Published var preservedTime: CMTime?
@ -804,10 +804,12 @@ final class PlayerModel: ObservableObject {
} }
#endif #endif
func updateWindowTitle() { func handleCurrentItemChange() {
#if os(macOS) #if os(macOS)
Windows.player.window?.title = windowTitle Windows.player.window?.title = windowTitle
#endif #endif
Defaults[.lastPlayed] = currentItem
} }
#if os(macOS) #if os(macOS)

View File

@ -201,4 +201,21 @@ extension PlayerModel {
func removeQueueItems() { func removeQueueItems() {
queue.removeAll() queue.removeAll()
} }
func restoreQueue() {
guard !accounts.current.isNil else {
return
}
queue = ([Defaults[.lastPlayed]] + Defaults[.queue]).compactMap { $0 }
Defaults[.lastPlayed] = nil
queue.forEach { item in
accounts.api.loadDetails(item) { newItem in
if let index = self.queue.firstIndex(where: { $0.id == item.id }) {
self.queue[index] = newItem
}
}
}
}
} }

View File

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

View File

@ -30,7 +30,7 @@ private struct CurrentPlaylistID: EnvironmentKey {
} }
private struct LoadMoreContentHandler: EnvironmentKey { private struct LoadMoreContentHandler: EnvironmentKey {
static let defaultValue: LoadMoreContentHandlerType = { } static let defaultValue: LoadMoreContentHandlerType = {}
} }
typealias LoadMoreContentHandlerType = () -> Void typealias LoadMoreContentHandlerType = () -> Void

View File

@ -139,6 +139,10 @@ struct ContentView: View {
player.accounts = accounts player.accounts = accounts
player.comments = comments player.comments = comments
if !accounts.current.isNil {
player.restoreQueue()
}
if !Defaults[.saveRecents] { if !Defaults[.saveRecents] {
recents.clear() recents.clear()
} }

View File

@ -32,9 +32,9 @@ struct SearchSuggestions: View {
HStack(spacing: 0) { HStack(spacing: 0) {
if suggestion.hasPrefix(state.suggestionsText.lowercased()) { if suggestion.hasPrefix(state.suggestionsText.lowercased()) {
Text(state.suggestionsText.lowercased()) Text(state.suggestionsText.lowercased())
.lineLimit(1) .lineLimit(1)
.layoutPriority(2) .layoutPriority(2)
.foregroundColor(.secondary) .foregroundColor(.secondary)
} }
Text(querySuffix(suggestion)) Text(querySuffix(suggestion))