mirror of
https://github.com/Stremio/stremio-shell-ng.git
synced 2026-05-14 02:50:47 +00:00
Keep display awake while playing
Some checks failed
Continuous integration / test (push) Has been cancelled
Some checks failed
Continuous integration / test (push) Has been cancelled
This commit is contained in:
parent
bbbe882faf
commit
453cc134a3
1 changed files with 40 additions and 12 deletions
|
|
@ -1,13 +1,15 @@
|
||||||
use crate::stremio_app::ipc;
|
use crate::stremio_app::ipc;
|
||||||
use crate::stremio_app::RPCResponse;
|
use crate::stremio_app::RPCResponse;
|
||||||
use flume::{Receiver, Sender};
|
use flume::{Receiver, Sender};
|
||||||
use libmpv2::{events::Event, events::EventContext, Format, Mpv, SetData};
|
use libmpv2::{events::Event, events::EventContext, events::PropertyData, Format, Mpv, SetData};
|
||||||
use native_windows_gui::{self as nwg, PartialUi};
|
use native_windows_gui::{self as nwg, PartialUi};
|
||||||
use std::{
|
use std::{
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
thread::{self, JoinHandle},
|
thread::{self, JoinHandle},
|
||||||
};
|
};
|
||||||
use winapi::shared::windef::HWND;
|
use winapi::shared::windef::HWND;
|
||||||
|
use winapi::um::winbase::SetThreadExecutionState;
|
||||||
|
use winapi::um::winnt::{ES_CONTINUOUS, ES_DISPLAY_REQUIRED, ES_SYSTEM_REQUIRED};
|
||||||
|
|
||||||
use crate::stremio_app::stremio_player::{
|
use crate::stremio_app::stremio_player::{
|
||||||
CmdVal, InMsg, InMsgArgs, InMsgFn, PlayerEnded, PlayerEvent, PlayerProprChange, PlayerResponse,
|
CmdVal, InMsg, InMsgArgs, InMsgFn, PlayerEnded, PlayerEvent, PlayerProprChange, PlayerResponse,
|
||||||
|
|
@ -92,6 +94,10 @@ fn create_event_thread(
|
||||||
event_context
|
event_context
|
||||||
.disable_deprecated_events()
|
.disable_deprecated_events()
|
||||||
.expect("failed to disable deprecated MPV events");
|
.expect("failed to disable deprecated MPV events");
|
||||||
|
// Shell-owned observer so the display stays awake while playing.
|
||||||
|
if let Err(error) = event_context.observe_property("pause", Format::Flag, 0) {
|
||||||
|
eprintln!("failed to observe pause: {error:?}");
|
||||||
|
}
|
||||||
|
|
||||||
// -- Event handler loop --
|
// -- Event handler loop --
|
||||||
|
|
||||||
|
|
@ -115,18 +121,29 @@ fn create_event_thread(
|
||||||
|
|
||||||
// even if you don't do anything with the events, it is still necessary to empty the event loop
|
// even if you don't do anything with the events, it is still necessary to empty the event loop
|
||||||
let player_response = match event {
|
let player_response = match event {
|
||||||
Event::PropertyChange { name, change, .. } => PlayerResponse(
|
Event::PropertyChange { name, change, .. } => {
|
||||||
"mpv-prop-change",
|
if name == "pause" {
|
||||||
PlayerEvent::PropChange(PlayerProprChange::from_name_value(
|
if let PropertyData::Flag(paused) = change {
|
||||||
name.to_string(),
|
set_sleep_inhibit(!paused);
|
||||||
change,
|
}
|
||||||
)),
|
}
|
||||||
),
|
PlayerResponse(
|
||||||
Event::EndFile(reason) => PlayerResponse(
|
"mpv-prop-change",
|
||||||
"mpv-event-ended",
|
PlayerEvent::PropChange(PlayerProprChange::from_name_value(
|
||||||
PlayerEvent::End(PlayerEnded::from_end_reason(reason)),
|
name.to_string(),
|
||||||
),
|
change,
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Event::EndFile(reason) => {
|
||||||
|
set_sleep_inhibit(false);
|
||||||
|
PlayerResponse(
|
||||||
|
"mpv-event-ended",
|
||||||
|
PlayerEvent::End(PlayerEnded::from_end_reason(reason)),
|
||||||
|
)
|
||||||
|
}
|
||||||
Event::Shutdown => {
|
Event::Shutdown => {
|
||||||
|
set_sleep_inhibit(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_ => continue,
|
_ => continue,
|
||||||
|
|
@ -139,6 +156,17 @@ fn create_event_thread(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_sleep_inhibit(playing: bool) {
|
||||||
|
let flags = if playing {
|
||||||
|
ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED
|
||||||
|
} else {
|
||||||
|
ES_CONTINUOUS
|
||||||
|
};
|
||||||
|
unsafe {
|
||||||
|
SetThreadExecutionState(flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn create_message_thread(
|
fn create_message_thread(
|
||||||
mpv: Arc<Mpv>,
|
mpv: Arc<Mpv>,
|
||||||
observe_property_sender: Sender<ObserveProperty>,
|
observe_property_sender: Sender<ObserveProperty>,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue