瀏覽代碼

update sleep prevention

Luke Pulverenti 9 年之前
父節點
當前提交
9807448fce

+ 1 - 1
MediaBrowser.Providers/People/MovieDbPersonProvider.cs

@@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.People
 
                     var requestCount = _requestCount;
 
-                    if (requestCount >= 30)
+                    if (requestCount >= 40)
                     {
                         //_logger.Debug("Throttling Tmdb people");
 

+ 5 - 0
MediaBrowser.Server.Mono/Native/BaseMonoApp.cs

@@ -69,6 +69,11 @@ namespace MediaBrowser.Server.Mono.Native
 
         }
 
+        public void AllowSystemStandby()
+        {
+
+        }
+
         public List<Assembly> GetAssembliesWithParts()
         {
             var list = new List<Assembly>();

+ 15 - 16
MediaBrowser.Server.Startup.Common/EntryPoints/KeepServerAwake.cs

@@ -27,28 +27,27 @@ namespace MediaBrowser.Server.Startup.Common.EntryPoints
             _timer = new PeriodicTimer(obj =>
             {
                 var now = DateTime.UtcNow;
-                if (_sessionManager.Sessions.Any(i => (now - i.LastActivityDate).TotalMinutes < 15))
+                var nativeApp = ((ApplicationHost)_appHost).NativeApp;
+
+                try
+                {
+                    if (_sessionManager.Sessions.Any(i => (now - i.LastActivityDate).TotalMinutes < 15))
+                    {
+                        nativeApp.PreventSystemStandby();
+                    }
+                    else
+                    {
+                        nativeApp.AllowSystemStandby();
+                    }
+                }
+                catch (Exception ex)
                 {
-                    KeepAlive();
+                    _logger.ErrorException("Error resetting system standby timer", ex);
                 }
 
             }, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
         }
 
-        private void KeepAlive()
-        {
-            var nativeApp = ((ApplicationHost)_appHost).NativeApp;
-
-            try
-            {
-                nativeApp.PreventSystemStandby();
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error resetting system standby timer", ex);
-            }
-        }
-
         public void Dispose()
         {
             if (_timer != null)

+ 2 - 0
MediaBrowser.Server.Startup.Common/INativeApp.cs

@@ -93,6 +93,8 @@ namespace MediaBrowser.Server.Startup.Common
         /// </summary>
         void PreventSystemStandby();
 
+        void AllowSystemStandby();
+
         /// <summary>
         /// Gets the power management.
         /// </summary>

+ 5 - 0
MediaBrowser.ServerApplication/MainStartup.cs

@@ -321,6 +321,11 @@ namespace MediaBrowser.ServerApplication
             }
         }
 
+        public static void Invoke(Action action)
+        {
+            _serverNotifyIcon.Invoke(action);
+        }
+
         /// <summary>
         /// Starts the service.
         /// </summary>

+ 26 - 14
MediaBrowser.ServerApplication/Native/Standby.cs

@@ -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);
-            }
-        }
     }
 }

+ 7 - 1
MediaBrowser.ServerApplication/Native/WindowsApp.cs

@@ -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()

+ 6 - 1
MediaBrowser.ServerApplication/ServerNotifyIcon.cs

@@ -36,10 +36,15 @@ namespace MediaBrowser.ServerApplication
             set
             {
                 Action act = () => notifyIcon1.Visible = false;
-                contextMenuStrip1.Invoke(act);
+                Invoke(act);
             }
         }
 
+        public void Invoke(Action action)
+        {
+            contextMenuStrip1.Invoke(action);
+        }
+
         public ServerNotifyIcon(ILogManager logManager,
             IServerApplicationHost appHost,
             IServerConfigurationManager configurationManager,