fix: prevent idle sleep during playback
This commit is contained in:
@@ -78,6 +78,7 @@ struct SystemPlaybackChecks {
|
||||
defer { model.shutdown() }
|
||||
require(!model.showsBufferInfo && !model.automaticYouTubeQuality && model.compactWindow.snappingEnabled,
|
||||
"session overrides never replace built-in settings")
|
||||
requirePlaybackPower(system: false, display: false, "idle player permits sleep")
|
||||
model.setVolume(0)
|
||||
let directory = URL(fileURLWithPath: CommandLine.arguments[1], isDirectory: true)
|
||||
let center = MPNowPlayingInfoCenter.default()
|
||||
@@ -109,8 +110,14 @@ struct SystemPlaybackChecks {
|
||||
}
|
||||
until("open starts authoritative playback") { model.canTogglePlayback && model.state.status == PLAYER_PLAYING }
|
||||
require(center.playbackState == .playing, "playing publishes macOS playback ownership")
|
||||
requirePlaybackPower(system: true, display: true, "local video keeps the Mac and display awake")
|
||||
var bufferingState = model.state
|
||||
bufferingState.buffering = true
|
||||
model.applyState(bufferingState)
|
||||
requirePlaybackPower(system: true, display: true, "buffering does not drop video sleep prevention")
|
||||
require(model.setPlayback(playing: false), "explicit pause accepted")
|
||||
until("pause acknowledged") { model.state.status == PLAYER_PAUSED }
|
||||
requirePlaybackPower(system: false, display: false, "pause releases sleep prevention")
|
||||
let pausedPosition = model.state.position
|
||||
if !NSWorkspace.shared.isVoiceOverEnabled {
|
||||
model.setControlsHovered(true)
|
||||
@@ -214,6 +221,7 @@ struct SystemPlaybackChecks {
|
||||
require(model.bufferedRange == nil, "accepted close immediately hides a stale retained-media snapshot")
|
||||
require(center.nowPlayingInfo == nil && center.playbackState == .stopped,
|
||||
"accepted close releases system playback immediately")
|
||||
requirePlaybackPower(system: false, display: false, "close releases sleep prevention immediately")
|
||||
require(!commands.togglePlayPauseCommand.isEnabled && !commands.nextTrackCommand.isEnabled,
|
||||
"closed source cannot receive system playback or seek commands")
|
||||
|
||||
@@ -278,9 +286,21 @@ struct SystemPlaybackChecks {
|
||||
until("decode error acknowledged") { model.state.status == PLAYER_ERROR && !model.isBusy }
|
||||
require(center.nowPlayingInfo == nil && !commands.playCommand.isEnabled,
|
||||
"failed source does not claim playback keys")
|
||||
requirePlaybackPower(system: false, display: false, "playback failure permits sleep")
|
||||
model.open(localURL)
|
||||
until("playback resumes before end-of-media check") {
|
||||
model.state.status == PLAYER_PLAYING && model.canSeek && !model.state.seek_pending
|
||||
}
|
||||
require(model.seekRelative(model.duration - model.state.position - 0.2), "seek near end accepted")
|
||||
until("video reaches its natural end") { model.state.status == PLAYER_ENDED }
|
||||
requirePlaybackPower(system: false, display: false, "end of media permits sleep")
|
||||
model.open(directory.appendingPathComponent("audio.wav"))
|
||||
until("audio-only playback starts") { model.state.status == PLAYER_PLAYING && !model.state.has_video }
|
||||
requirePlaybackPower(system: true, display: false, "audio keeps the Mac awake but permits display sleep")
|
||||
model.shutdown()
|
||||
require(center.nowPlayingInfo == nil && !commands.pauseCommand.isEnabled,
|
||||
"shutdown releases system playback")
|
||||
requirePlaybackPower(system: false, display: false, "shutdown releases active sleep prevention")
|
||||
print("System playback checks passed")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user