mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-26 02:54:20 +01:00
Merge branch 'AutoProfileTurnTempOffLoadProfileFix' of https://github.com/mika-n/DS4Windows into mika-n-AutoProfileTurnTempOffLoadProfileFix
This commit is contained in:
commit
c09c613dcf
@ -4,6 +4,8 @@ using System.Linq;
|
|||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Diagnostics; // StopWatch
|
||||||
|
using System.Threading; // Sleep
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using DS4Windows;
|
using DS4Windows;
|
||||||
|
|
||||||
@ -61,6 +63,17 @@ namespace DS4WinWPF
|
|||||||
|
|
||||||
if (matchedProfileEntity != null)
|
if (matchedProfileEntity != null)
|
||||||
{
|
{
|
||||||
|
bool forceLoadProfile = false;
|
||||||
|
|
||||||
|
if (!turnOffDS4WinApp && turnOffTemp)
|
||||||
|
{
|
||||||
|
// DS4Win was temporarily turned off by another auto-profile rule. Turn DS4Win on before trying to load a new profile because otherwise the new profile won't do anything.
|
||||||
|
// Force load the profile when DS4Win service afer waking up DS4Win service to make sure that the new profile will be active.
|
||||||
|
turnOffTemp = false;
|
||||||
|
SetAndWaitServiceStatus(true);
|
||||||
|
forceLoadProfile = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Program match found. Check if the new profile is different than current profile of the controller. Load the new profile only if it is not already loaded.
|
// Program match found. Check if the new profile is different than current profile of the controller. Load the new profile only if it is not already loaded.
|
||||||
for (int j = 0; j < 4; j++)
|
for (int j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
@ -68,7 +81,8 @@ namespace DS4WinWPF
|
|||||||
if (tempname != string.Empty && tempname != "(none)")
|
if (tempname != string.Empty && tempname != "(none)")
|
||||||
{
|
{
|
||||||
if ((Global.useTempProfile[j] && tempname != Global.tempprofilename[j]) ||
|
if ((Global.useTempProfile[j] && tempname != Global.tempprofilename[j]) ||
|
||||||
(!Global.useTempProfile[j] && tempname != Global.ProfilePath[j]))
|
(!Global.useTempProfile[j] && tempname != Global.ProfilePath[j]) ||
|
||||||
|
forceLoadProfile)
|
||||||
{
|
{
|
||||||
if (autoProfileDebugLogLevel > 0)
|
if (autoProfileDebugLogLevel > 0)
|
||||||
DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. LoadProfile Controller {j + 1}={tempname}", false);
|
DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. LoadProfile Controller {j + 1}={tempname}", false);
|
||||||
@ -87,13 +101,31 @@ namespace DS4WinWPF
|
|||||||
if (turnOffDS4WinApp)
|
if (turnOffDS4WinApp)
|
||||||
{
|
{
|
||||||
turnOffTemp = true;
|
turnOffTemp = true;
|
||||||
RequestServiceChange?.Invoke(this, false);
|
if (App.rootHub.running)
|
||||||
|
{
|
||||||
|
if (autoProfileDebugLogLevel > 0)
|
||||||
|
DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. Turning DS4Windows temporarily off", false);
|
||||||
|
|
||||||
|
SetAndWaitServiceStatus(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tempAutoProfile = matchedProfileEntity;
|
tempAutoProfile = matchedProfileEntity;
|
||||||
}
|
}
|
||||||
else if (tempAutoProfile != null)
|
else if (tempAutoProfile != null)
|
||||||
{
|
{
|
||||||
|
if (turnOffTemp && DS4Windows.Global.AutoProfileRevertDefaultProfile)
|
||||||
|
{
|
||||||
|
turnOffTemp = false;
|
||||||
|
if (!App.rootHub.running)
|
||||||
|
{
|
||||||
|
if (autoProfileDebugLogLevel > 0)
|
||||||
|
DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. Turning DS4Windows on before reverting to default profile", false);
|
||||||
|
|
||||||
|
SetAndWaitServiceStatus(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tempAutoProfile = null;
|
tempAutoProfile = null;
|
||||||
for (int j = 0; j < 4; j++)
|
for (int j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
@ -113,12 +145,6 @@ namespace DS4WinWPF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (turnOffTemp)
|
|
||||||
{
|
|
||||||
turnOffTemp = false;
|
|
||||||
RequestServiceChange?.Invoke(this, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,6 +211,25 @@ namespace DS4WinWPF
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetAndWaitServiceStatus(bool serviceRunningStatus)
|
||||||
|
{
|
||||||
|
// Start or Stop the service only if it is not already in the requested state
|
||||||
|
if (App.rootHub.running != serviceRunningStatus)
|
||||||
|
{
|
||||||
|
RequestServiceChange?.Invoke(this, serviceRunningStatus);
|
||||||
|
|
||||||
|
// Wait until DS4Win app service is running or stopped (as requested by serviceRunningStatus value) or timeout.
|
||||||
|
// LoadProfile call fails if a new profile is loaded while DS4Win service is still in stopped state (ie the loaded temp profile doesn't do anything).
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
sw.Start();
|
||||||
|
while (App.rootHub.running != serviceRunningStatus && sw.Elapsed.TotalSeconds < 10)
|
||||||
|
{
|
||||||
|
Thread.Sleep(500);
|
||||||
|
}
|
||||||
|
Thread.Sleep(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
private static extern IntPtr GetForegroundWindow();
|
private static extern IntPtr GetForegroundWindow();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user