Add to playlist from video player, state fixes

This commit is contained in:
Arkadiusz Fal
2021-10-25 23:29:06 +02:00
parent 47ad6a4410
commit b50d915d8e
10 changed files with 129 additions and 27 deletions

View File

@@ -50,6 +50,8 @@ final class PlayerModel: ObservableObject {
private var statusObservation: NSKeyValueObservation?
private var timeObserverThrottle = Throttle(interval: 2)
init(accounts: AccountsModel? = nil, instances: InstancesModel? = nil) {
self.accounts = accounts ?? AccountsModel()
self.instances = instances ?? InstancesModel()
@@ -365,8 +367,6 @@ final class PlayerModel: ObservableObject {
return
}
self.currentRate = self.player.rate
guard !self.currentItem.isNil else {
return
}
@@ -390,7 +390,9 @@ final class PlayerModel: ObservableObject {
return
}
self.updateCurrentItemIntervals()
self.timeObserverThrottle.execute {
self.updateCurrentItemIntervals()
}
}
}
@@ -402,15 +404,21 @@ final class PlayerModel: ObservableObject {
return
}
#if os(macOS)
if player.timeControlStatus == .playing {
ScreenSaverManager.shared.disable(reason: "Yattee is playing video")
} else {
ScreenSaverManager.shared.enable()
}
#endif
if player.timeControlStatus != .waitingToPlayAtSpecifiedRate {
self.objectWillChange.send()
}
self.updateCurrentItemIntervals()
self.timeObserverThrottle.execute {
#if os(macOS)
if player.timeControlStatus == .playing {
ScreenSaverManager.shared.disable(reason: "Yattee is playing video")
} else {
ScreenSaverManager.shared.enable()
}
#endif
self.updateCurrentItemIntervals()
}
}
}

View File

@@ -191,7 +191,25 @@ extension PlayerModel {
}
}
history = [Defaults[.lastPlayed]].compactMap { $0 } + Defaults[.history]
var savedHistory = Defaults[.history]
if let lastPlayed = Defaults[.lastPlayed] {
if let index = savedHistory.firstIndex(where: { $0.videoID == lastPlayed.videoID }) {
var updatedLastPlayed = savedHistory[index]
updatedLastPlayed.playbackTime = lastPlayed.playbackTime
updatedLastPlayed.videoDuration = lastPlayed.videoDuration
savedHistory.remove(at: index)
savedHistory.insert(updatedLastPlayed, at: 0)
} else {
savedHistory.insert(lastPlayed, at: 0)
}
Defaults[.lastPlayed] = nil
}
history = savedHistory
history.forEach { item in
accounts.api.loadDetails(item) { newItem in
if let index = self.history.firstIndex(where: { $0.id == item.id }) {
@@ -199,7 +217,5 @@ extension PlayerModel {
}
}
}
Defaults[.lastPlayed] = nil
}
}

View File

@@ -15,8 +15,12 @@ final class PlaylistsModel: ObservableObject {
playlists.sorted { $0.title.lowercased() < $1.title.lowercased() }
}
func find(id: Playlist.ID) -> Playlist? {
playlists.first { $0.id == id }
func find(id: Playlist.ID?) -> Playlist? {
if id.isNil {
return nil
}
return playlists.first { $0.id == id! }
}
var isEmpty: Bool {
@@ -26,6 +30,11 @@ final class PlaylistsModel: ObservableObject {
func load(force: Bool = false, onSuccess: @escaping () -> Void = {}) {
let request = force ? resource?.load() : resource?.loadIfNeeded()
guard !request.isNil else {
onSuccess()
return
}
request?
.onSuccess { resource in
if let playlists: [Playlist] = resource.typedContent() {