mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-21 01:24:44 +01:00
update sleep prevention
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace MediaBrowser.ServerApplication.Native
|
||||
{
|
||||
@@ -7,11 +8,33 @@ namespace MediaBrowser.ServerApplication.Native
|
||||
/// </summary>
|
||||
public static class Standby
|
||||
{
|
||||
public static void PreventSystemStandby()
|
||||
public static void PreventSleepAndMonitorOff()
|
||||
{
|
||||
SystemHelper.ResetStandbyTimer();
|
||||
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED | NativeMethods.ES_DISPLAY_REQUIRED);
|
||||
}
|
||||
|
||||
public static void PreventSleep()
|
||||
{
|
||||
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
|
||||
}
|
||||
|
||||
// Clear EXECUTION_STATE flags to allow the system to sleep and turn off monitor normally
|
||||
public static void AllowSleep()
|
||||
{
|
||||
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS);
|
||||
}
|
||||
|
||||
internal static class NativeMethods
|
||||
{
|
||||
// Import SetThreadExecutionState Win32 API and necessary flags
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
public static extern uint SetThreadExecutionState(uint esFlags);
|
||||
public const uint ES_CONTINUOUS = 0x80000000;
|
||||
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
|
||||
public const uint ES_DISPLAY_REQUIRED = 0x00000002;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
internal enum EXECUTION_STATE : uint
|
||||
{
|
||||
ES_NONE = 0,
|
||||
@@ -21,16 +44,5 @@ namespace MediaBrowser.ServerApplication.Native
|
||||
ES_AWAYMODE_REQUIRED = 0x00000040,
|
||||
ES_CONTINUOUS = 0x80000000
|
||||
}
|
||||
|
||||
public class SystemHelper
|
||||
{
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
|
||||
|
||||
public static void ResetStandbyTimer()
|
||||
{
|
||||
EXECUTION_STATE es = SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using MediaBrowser.ServerApplication.Networking;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Windows.Forms;
|
||||
using CommonIO;
|
||||
using MediaBrowser.Controller.Power;
|
||||
using MediaBrowser.Server.Startup.Common.FFMpeg;
|
||||
@@ -134,7 +135,12 @@ namespace MediaBrowser.ServerApplication.Native
|
||||
|
||||
public void PreventSystemStandby()
|
||||
{
|
||||
Standby.PreventSystemStandby();
|
||||
MainStartup.Invoke(Standby.PreventSleep);
|
||||
}
|
||||
|
||||
public void AllowSystemStandby()
|
||||
{
|
||||
MainStartup.Invoke(Standby.AllowSleep);
|
||||
}
|
||||
|
||||
public IPowerManagement GetPowerManagement()
|
||||
|
||||
Reference in New Issue
Block a user