remove elevated form and app context provider

This commit is contained in:
Vincent Maas committed 2024-04-02 21:49:02 +02:00
1 parent bc162af76e
commit fbd25f46b7
37 files changed
+321 -348

No files matched your search

-3
View File
@@ -56,9 +56,6 @@
<None Remove="XForms\LogWindow.xaml" />
</ItemGroup>
<ItemGroup>
<Compile Update="Forms\ElevatedForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Forms\OptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
+10 -6
View File
@@ -1,10 +1,10 @@
using ColorControl.Forms;
using ColorControl.Services.AMD;
using ColorControl.Services.AMD;
using ColorControl.Services.LG;
using ColorControl.Services.NVIDIA;
using ColorControl.Services.Samsung;
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using ColorControl.Svc;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Diagnostics;
@@ -19,7 +19,7 @@ namespace ColorControl
{
if (startUpParams.StartElevated)
{
StartElevated();
await StartElevated();
return true;
}
@@ -105,13 +105,17 @@ Options:
return result;
}
private static void StartElevated()
private static async Task StartElevated()
{
try
{
var elevatedForm = Program.ServiceProvider.GetRequiredService<ElevatedForm>();
var backgroundService = Program.ServiceProvider.GetRequiredService<ColorControlBackgroundService>();
Application.Run(elevatedForm);
backgroundService.PipeName = "elevatedpipe";
await backgroundService.StartAndStopWithMutex();
Application.Run();
}
catch (Exception ex)
{
-46
View File
@@ -1,46 +0,0 @@
namespace ColorControl.Forms
{
partial class ElevatedForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// ElevatedForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(251, 124);
this.Name = "ElevatedForm";
this.Text = "ElevatedForm";
this.ResumeLayout(false);
}
#endregion
}
}
-53
View File
@@ -1,53 +0,0 @@
using ColorControl.Svc;
using System;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ColorControl.Forms;
public partial class ElevatedForm : Form
{
private ColorControlBackgroundService _backgroundService;
public ElevatedForm(ColorControlBackgroundService backgroundService)
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
ShowInTaskbar = false;
Load += ElevatedForm_Load;
Shown += ElevatedForm_Shown;
Task.Run(CheckMutexAsync);
_backgroundService = backgroundService;
_backgroundService.PipeName = "elevatedpipe";
Task.Run(async () => await _backgroundService.StartAsync(CancellationToken.None));
}
private void ElevatedForm_Shown(object sender, EventArgs e)
{
Hide();
}
protected void ElevatedForm_Load(object sender, EventArgs e)
{
Size = new Size(0, 0);
}
private void CheckMutexAsync()
{
var mutex = new Mutex(false, Shared.Common.GlobalContext.CurrentContext.MutexId, out var created);
try
{
mutex.WaitOne();
}
catch (AbandonedMutexException)
{
}
BeginInvoke(Application.Exit);
}
}
-60
View File
@@ -1,60 +0,0 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+1
View File
@@ -404,6 +404,7 @@ namespace ColorControl.Forms
chkStartMinimized.TabIndex = 3;
chkStartMinimized.Text = "Start minimized";
chkStartMinimized.UseVisualStyleBackColor = true;
chkStartMinimized.CheckedChanged += chkStartMinimized_CheckedChanged;
//
// chkStartAfterLogin
//
+11 -4
View File
@@ -16,20 +16,20 @@ public partial class OptionsPanel : UserControl
{
private readonly WinApiService _winApiService;
private readonly WinApiAdminService _winApiAdminService;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly ElevationService _elevationService;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
private bool _initialized;
private Config _config;
public OptionsPanel(WinApiService winApiService, WinApiAdminService winApiAdminService, AppContextProvider appContextProvider, ElevationService elevationService, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
public OptionsPanel(WinApiService winApiService, WinApiAdminService winApiAdminService, GlobalContext globalContext, ElevationService elevationService, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_winApiService = winApiService;
_winApiAdminService = winApiAdminService;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_elevationService = elevationService;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
_config = appContextProvider.GetAppContext().Config;
_config = globalContext.Config;
InitializeComponent();
@@ -363,4 +363,11 @@ Currently ColorControl is {(_winApiService.IsAdministrator() ? "" : "not ")}runn
ColorProfileWindow.CreateAndShow(isHDR: false);
}
private void chkStartMinimized_CheckedChanged(object sender, EventArgs e)
{
if (_initialized)
{
_config.StartMinimized = chkStartMinimized.Checked;
}
}
}
+27 -5
View File
@@ -11,7 +11,6 @@ using ColorControl.Shared.Contracts;
using ColorControl.Shared.EventDispatcher;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using Microsoft.Extensions.DependencyInjection;
using NLog;
using NWin32;
@@ -49,15 +48,13 @@ namespace ColorControl
private GamePanel _gamePanel;
public MainForm(AppContextProvider appContextProvider, ServiceManager serviceManager,
public MainForm(GlobalContext globalContext, ServiceManager serviceManager,
IServiceProvider serviceProvider, ElevationService elevationService, NotifyIconManager notifyIconManager, KeyboardShortcutDispatcher keyboardShortcutDispatcher, UpdateManager updateManager)
{
InitializeComponent();
Icon = Resources.AppIcon;
var appContext = appContextProvider.GetAppContext();
_serviceManager = serviceManager;
_serviceProvider = serviceProvider;
_elevationService = elevationService;
@@ -66,7 +63,7 @@ namespace ColorControl
_updateManager = updateManager;
_config = Program.Config;
Text = appContext.ApplicationTitleAdmin;
Text = globalContext.ApplicationTitleAdmin;
LoadConfig();
@@ -361,6 +358,31 @@ namespace ColorControl
//InstallUpdate("");
//await Test();
//var dm = DisplayManager.Create(DisplayManagerOptions.None);
//var targets = dm.GetCurrentTargets();
//var monitor = targets.First().TryGetMonitor();
//var result = dm.TryReadCurrentStateForAllTargets();
//var state = result.State;
//var res2 = state.TryFunctionalize(DisplayStateFunctionalizeOptions.None);
////var path = state.ConnectTarget(targets.First());
//var path = state.GetPathForTarget(targets.First());
//var res3 = state.TryApply(DisplayStateApplyOptions.None);
//path.IsInterlaced = false;
//path.Scaling = DisplayPathScaling.Identity;
//path.SourcePixelFormat = Windows.Graphics.DirectX.DirectXPixelFormat.R8G8B8A8UIntNormalized;
//path.PresentationRate = null;
//path.Properties.Clear();
//path.WireFormat = null;
//var modes = path.FindModes(DisplayModeQueryOptions.None);
_serviceManager.NvService?.TestResolution();
}
+12 -5
View File
@@ -20,7 +20,7 @@ internal class MainWorker
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly BackgroundWorker _backgroundWorker;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly ServiceManager _serviceManager;
private readonly Config _config;
private readonly NotifyIconManager _notifyIconManager;
@@ -37,7 +37,7 @@ internal class MainWorker
public static int SHORTCUTID_SCREENSAVER = -100;
public MainWorker(
AppContextProvider appContextProvider,
GlobalContext globalContext,
ServiceManager serviceManager,
NotifyIconManager notifyIconManager,
WindowMessageDispatcher windowMessageDispatcher,
@@ -48,7 +48,7 @@ internal class MainWorker
UpdateManager updateManager)
{
_backgroundWorker = new BackgroundWorker();
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_serviceManager = serviceManager;
_notifyIconManager = notifyIconManager;
_windowMessageDispatcher = windowMessageDispatcher;
@@ -57,7 +57,7 @@ internal class MainWorker
_winApiService = winApiService;
_winApiAdminService = winApiAdminService;
_updateManager = updateManager;
_config = _appContextProvider.GetAppContext().Config;
_config = _globalContext.Config;
}
public async Task DoWork()
@@ -74,6 +74,7 @@ internal class MainWorker
System.Windows.Forms.Application.Run(_windowMessageDispatcher.MessageForm);
_serviceManager.Save();
_notifyIconManager.HideIcon();
if (_screenStateNotify != 0)
@@ -88,12 +89,13 @@ internal class MainWorker
private async Task Init()
{
_appContextProvider.GetAppContext().SynchronizationContext = AsyncOperationManager.SynchronizationContext;
_globalContext.SynchronizationContext = AsyncOperationManager.SynchronizationContext;
_windowMessageDispatcher.RegisterEventHandler(WindowMessageDispatcher.Event_WindowMessageQueryEndSession, HandleQueryEndSessionEvent);
_windowMessageDispatcher.RegisterEventHandler(WindowMessageDispatcher.Event_WindowMessageClose, HandleCloseEvent);
_windowMessageDispatcher.RegisterEventHandler(WindowMessageDispatcher.Event_WindowMessagePowerBroadcast, HandlePowerBroadcastEvent);
_windowMessageDispatcher.RegisterEventHandler(WindowMessageDispatcher.Event_WindowMessageShowWindow, HandleShowWindowEvent);
_windowMessageDispatcher.RegisterEventHandler(WindowMessageDispatcher.Event_WindowMessageUserBringToFront, HandleUserBringToFrontEvent);
_screenStateNotify = WinApi.RegisterPowerSettingNotification(_windowMessageDispatcher.MessageForm.Handle, ref Utils.GUID_CONSOLE_DISPLAY_STATE, 0);
@@ -139,6 +141,11 @@ internal class MainWorker
}
}
private void HandleUserBringToFrontEvent(object sender, WindowMessageEventArgs e)
{
Program.OpenMainForm();
}
private void HandlePowerBroadcastEvent(object sender, WindowMessageEventArgs e)
{
if (e.Message.WParam.ToInt32() == WinApi.PBT_POWERSETTINGCHANGE)
+10 -12
View File
@@ -94,16 +94,16 @@ namespace ColorControl
Logger.Debug($"Result of setting SetHighDpiMode: {result}");
}
var host = CreateHostBuilder().Build();
ServiceProvider = host.Services;
var mutexId = $"Global\\{typeof(MainForm).GUID}";
var appContextProvider = ServiceProvider.GetRequiredService<AppContextProvider>();
var startUpParams = StartUpParams.Parse(args);
AppContext = new GlobalContext(Config, startUpParams, DataDir, _loggingRule, ServiceProvider, mutexId);
appContextProvider.SetAppContext(AppContext);
AppContext = new GlobalContext(Config, startUpParams, DataDir, _loggingRule, null, mutexId);
var host = CreateHostBuilder().Build();
ServiceProvider = host.Services;
AppContext.ServiceProvider = ServiceProvider;
MessageForms.Title = AppContext.ApplicationTitle;
var existingProcess = Utils.GetProcessByName("ColorControl");
@@ -279,7 +279,6 @@ namespace ColorControl
services.AddSingleton<WindowMessageDispatcher>();
services.AddSingleton<KeyboardShortcutDispatcher>();
services.AddSingleton<MainForm>();
services.AddSingleton<ElevatedForm>();
services.AddSingleton<LogWindow>();
services.AddTransient<ColorProfileWindow>();
services.AddSingleton<RestartDetector>();
@@ -299,6 +298,8 @@ namespace ColorControl
{
Logger.Debug("RUNNING SERVICE");
AppContext = new GlobalContext(null, new StartUpParams(), DataDir, _loggingRule, null);
using IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
@@ -313,17 +314,14 @@ namespace ColorControl
.Build();
ServiceProvider = host.Services;
var appContextProvider = ServiceProvider.GetRequiredService<AppContextProvider>();
AppContext = new GlobalContext(null, new StartUpParams(), DataDir, _loggingRule, ServiceProvider);
appContextProvider.SetAppContext(AppContext);
AppContext.ServiceProvider = ServiceProvider;
await host.RunAsync();
}
private static void RegisterSharedServices(this IServiceCollection services)
{
services.AddSingleton<AppContextProvider>();
services.AddSingleton(AppContext);
services.AddSingleton<SessionSwitchDispatcher>();
services.AddSingleton<WinApiAdminService>();
services.AddSingleton<WinApiService>();
+6 -6
View File
@@ -1,10 +1,10 @@
using ATI.ADL;
using ColorControl.Services.Common;
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using ColorControl.Shared.EventDispatcher;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -20,18 +20,18 @@ namespace ColorControl.Services.AMD
{
private readonly AmdService _amdService;
private readonly NotifyIconManager _notifyIconManager;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
private Config _config;
private string _lastDisplayRefreshRates = string.Empty;
internal AmdPanel(AmdService amdService, NotifyIconManager notifyIconManager, AppContextProvider appContextProvider, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
internal AmdPanel(AmdService amdService, NotifyIconManager notifyIconManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_amdService = amdService;
_notifyIconManager = notifyIconManager;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
_config = Shared.Common.GlobalContext.CurrentContext.Config;
_config = globalContext.Config;
InitializeComponent();
@@ -303,7 +303,7 @@ namespace ColorControl.Services.AMD
if (!string.IsNullOrEmpty(preset.shortcut))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, preset.id);
WinApi.UnregisterHotKey(_globalContext.MainHandle, preset.id);
}
_amdService.GetPresets().Remove(preset);
+4 -4
View File
@@ -24,7 +24,7 @@ namespace ColorControl.Services.AMD
public static readonly int SHORTCUTID_AMDQA = -201;
public AmdService(AppContextProvider appContextProvider) : base(appContextProvider)
public AmdService(GlobalContext globalContext) : base(globalContext)
{
LoadPresets();
}
@@ -33,9 +33,9 @@ namespace ColorControl.Services.AMD
{
try
{
var appContextProvider = Program.ServiceProvider.GetRequiredService<AppContextProvider>();
var globalContext = Program.ServiceProvider.GetRequiredService<GlobalContext>();
var service = new AmdService(appContextProvider);
var service = new AmdService(globalContext);
var result = await service.ApplyPreset(idOrName);
@@ -57,7 +57,7 @@ namespace ColorControl.Services.AMD
{
base.InstallEventHandlers();
SetShortcuts(SHORTCUTID_AMDQA, _appContextProvider.GetAppContext().Config.AmdQuickAccessShortcut);
SetShortcuts(SHORTCUTID_AMDQA, _globalContext.Config.AmdQuickAccessShortcut);
}
protected override List<AmdPreset> GetDefaultPresets()
@@ -11,17 +11,17 @@ public class ElevationService
{
private readonly WinApiService _winApiService;
private readonly WinApiAdminService _winApiAdminService;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly Config _config;
public ElevationService(WinApiService winApiService, WinApiAdminService winApiAdminService, AppContextProvider appContextProvider)
public ElevationService(WinApiService winApiService, WinApiAdminService winApiAdminService, GlobalContext globalContext)
{
_winApiService = winApiService;
_winApiAdminService = winApiAdminService;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_config = appContextProvider.GetAppContext().Config;
_config = globalContext.Config;
}
public void SetElevationMethod(ElevationMethod elevationMethod, bool startAfterLoginChecked = false)
@@ -1,5 +1,5 @@
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using ColorControl.Shared.Common;
using ColorControl.Shared.Native;
using NWin32;
using NWin32.NativeTypes;
using System;
@@ -15,7 +15,7 @@ namespace ColorControl.Services.Common
{
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public GraphicsService(AppContextProvider appContextProvider) : base(appContextProvider)
public GraphicsService(GlobalContext globalContext) : base(globalContext)
{
}
@@ -4,9 +4,9 @@ using ColorControl.Services.GameLauncher;
using ColorControl.Services.LG;
using ColorControl.Services.NVIDIA;
using ColorControl.Services.Samsung;
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Services;
using novideo_srgb;
using System;
using System.Collections.Generic;
@@ -17,7 +17,7 @@ namespace ColorControl.Services.Common;
public class NotifyIconManager
{
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly ServiceManager _serviceManager;
private readonly Config _config;
@@ -30,11 +30,11 @@ public class NotifyIconManager
private ToolStripMenuItem _samsungTrayMenu;
private ToolStripMenuItem _gameTrayMenu;
public NotifyIconManager(AppContextProvider appContextProvider, ServiceManager serviceManager)
public NotifyIconManager(GlobalContext globalContext, ServiceManager serviceManager)
{
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_serviceManager = serviceManager;
_config = appContextProvider.GetAppContext().Config;
_config = globalContext.Config;
}
public void Build()
@@ -234,7 +234,7 @@ public class NotifyIconManager
internal void SetText(string text = null)
{
var fullText = $"{_appContextProvider.GetAppContext().ApplicationTitleAdmin}{(text == null ? "" : $"\n{text}")}";
var fullText = $"{_globalContext.ApplicationTitleAdmin}{(text == null ? "" : $"\n{text}")}";
FormUtils.SetNotifyIconText(NotifyIcon, fullText.Trim());
}
+7 -7
View File
@@ -1,7 +1,7 @@
using ColorControl.Shared.EventDispatcher;
using ColorControl.Shared.Common;
using ColorControl.Shared.EventDispatcher;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using NStandard;
@@ -37,14 +37,14 @@ namespace ColorControl.Services.Common
protected T _lastTriggeredPreset;
protected int _quickAccessShortcutId;
protected AppContextProvider _appContextProvider;
protected GlobalContext _globalContext;
private List<JsonConverter> _jsonConverters;
public ServiceBase(AppContextProvider appContextProvider)
public ServiceBase(GlobalContext globalContext)
{
_appContextProvider = appContextProvider;
_dataPath = appContextProvider.GetAppContext().DataPath;
_globalContext = globalContext;
_dataPath = globalContext.DataPath;
_jsonConverters = new List<JsonConverter>();
Initialize();
@@ -114,7 +114,7 @@ namespace ColorControl.Services.Common
{
_quickAccessShortcutId = quickAccessShortcutId;
var keyboardShortcutDispatcher = _appContextProvider.GetAppContext().ServiceProvider.GetService<KeyboardShortcutDispatcher>();
var keyboardShortcutDispatcher = _globalContext.ServiceProvider.GetService<KeyboardShortcutDispatcher>();
if (keyboardShortcutDispatcher == null)
{
@@ -3,6 +3,7 @@ using ColorControl.Services.GameLauncher;
using ColorControl.Services.LG;
using ColorControl.Services.NVIDIA;
using ColorControl.Services.Samsung;
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using ColorControl.Shared.Services;
using NLog;
@@ -27,12 +28,12 @@ public class ServiceManager
internal GameService GameService { get; set; }
internal SamsungService SamsungService { get; set; }
public ServiceManager(WinApiAdminService winApiAdminService, IServiceProvider serviceProvider, AppContextProvider appContextProvider)
public ServiceManager(WinApiAdminService winApiAdminService, IServiceProvider serviceProvider, GlobalContext globalContext)
{
_winApiAdminService = winApiAdminService;
_serviceProvider = serviceProvider;
_config = appContextProvider.GetAppContext().Config;
_config = globalContext.Config;
}
public void LoadModules()
@@ -12,7 +12,7 @@ namespace ColorControl.Services.Common;
public class UpdateManager
{
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly ServiceManager _serviceManager;
private readonly NotifyIconManager _notifyIconManager;
private readonly WinApiService _winApiService;
@@ -23,14 +23,14 @@ public class UpdateManager
private string _updateHtmlUrl;
private string _downloadUrl;
public UpdateManager(AppContextProvider appContextProvider, ServiceManager serviceManager, NotifyIconManager notifyIconManager, WinApiService winApiService, WinApiAdminService winApiAdminService)
public UpdateManager(GlobalContext globalContext, ServiceManager serviceManager, NotifyIconManager notifyIconManager, WinApiService winApiService, WinApiAdminService winApiAdminService)
{
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_serviceManager = serviceManager;
_notifyIconManager = notifyIconManager;
_winApiService = winApiService;
_winApiAdminService = winApiAdminService;
_config = appContextProvider.GetAppContext().Config;
_config = globalContext.Config;
}
private void trayIconBalloonTip_Clicked(object sender, EventArgs e)
@@ -119,7 +119,7 @@ public class UpdateManager
return;
}
_appContextProvider.GetAppContext().UpdateAvailable = true;
_globalContext.UpdateAvailable = true;
if (_notifyIconManager.NotifyIcon.Visible)
{
@@ -172,7 +172,7 @@ public class UpdateManager
else
{
_downloadUrl = null;
_appContextProvider.GetAppContext().UpdateAvailable = true;
_globalContext.UpdateAvailable = true;
}
}
}
@@ -24,14 +24,14 @@ namespace ColorControl.Services.GameLauncher
private Config _config;
private GameService _gameService;
private readonly ServiceManager _serviceManager;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
public GamePanel(GameService gameService, ServiceManager serviceManager, AppContextProvider appContextProvider, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
public GamePanel(GameService gameService, ServiceManager serviceManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_gameService = gameService;
_serviceManager = serviceManager;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
_config = Shared.Common.GlobalContext.CurrentContext.Config;
@@ -258,7 +258,7 @@ namespace ColorControl.Services.GameLauncher
if (!string.IsNullOrEmpty(preset.shortcut))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, preset.id);
WinApi.UnregisterHotKey(_globalContext.MainHandle, preset.id);
}
_gameService.GetPresets().Remove(preset);
@@ -34,7 +34,7 @@ namespace ColorControl.Services.GameLauncher
public static readonly int SHORTCUTID_GAMEQA = -203;
public GameService(AppContextProvider appContextProvider, ServiceManager serviceManager, ProcessEventDispatcher processEventDispatcher, WinApiAdminService winApiAdminService, WinApiService winApiService) : base(appContextProvider)
public GameService(GlobalContext globalContext, ServiceManager serviceManager, ProcessEventDispatcher processEventDispatcher, WinApiAdminService winApiAdminService, WinApiService winApiService) : base(globalContext)
{
LoadConfig();
LoadPresets();
@@ -49,7 +49,7 @@ namespace ColorControl.Services.GameLauncher
{
base.InstallEventHandlers();
SetShortcuts(SHORTCUTID_GAMEQA, _appContextProvider.GetAppContext().Config.GameQuickAccessShortcut);
SetShortcuts(SHORTCUTID_GAMEQA, _globalContext.Config.GameQuickAccessShortcut);
}
private async Task ProcessChanged(object sender, ProcessChangedEventArgs e, CancellationToken token)
+12 -1
View File
@@ -73,7 +73,8 @@ namespace ColorControl.Services.LG
protected static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public static List<string> DefaultActionsOnGameBar = new() { "backlight", "contrast", "brightness", "color" };
private static List<string> IreValueLabels = new() { "IRE 2.5", "IRE 5", "IRE 7.5", "IRE 10", "IRE 15", "IRE 20", "IRE 25", "IRE 30", "IRE 35", "IRE 40", "IRE 45", "IRE 50", "IRE 55", "IRE 60", "IRE 65", "IRE 70", "IRE 75", "IRE 80", "IRE 85", "IRE 90", "IRE 95", "IRE 100" };
private static List<string> IreValueLabels = ["IRE 2.5", "IRE 5", "IRE 7.5", "IRE 10", "IRE 15", "IRE 20", "IRE 25", "IRE 30", "IRE 35", "IRE 40", "IRE 45", "IRE 50", "IRE 55", "IRE 60", "IRE 65", "IRE 70", "IRE 75", "IRE 80", "IRE 85", "IRE 90", "IRE 95", "IRE 100"];
private static List<string> Ire10ptValueLabels = ["IRE 10", "IRE 20", "IRE 30", "IRE 40", "IRE 50", "IRE 60", "IRE 70", "IRE 80", "IRE 90", "IRE 100"];
public string Name { get; private set; }
public string IpAddress { get; private set; }
@@ -252,6 +253,16 @@ namespace ColorControl.Services.LG
AddGenericPictureAction("whiteBalanceBlue", minValue: -50, maxValue: 50, numberOfValues: 22, valueLabels: IreValueLabels);
AddGenericPictureAction("whiteBalanceGreen", minValue: -50, maxValue: 50, numberOfValues: 22, valueLabels: IreValueLabels);
AddGenericPictureAction("whiteBalanceRed", minValue: -50, maxValue: 50, numberOfValues: 22, valueLabels: IreValueLabels);
AddGenericPictureAction("whiteBalanceBlue10pt", minValue: -50, maxValue: 50, numberOfValues: 10, valueLabels: Ire10ptValueLabels);
AddGenericPictureAction("whiteBalanceGreen10pt", minValue: -50, maxValue: 50, numberOfValues: 10, valueLabels: Ire10ptValueLabels);
AddGenericPictureAction("whiteBalanceRed10pt", minValue: -50, maxValue: 50, numberOfValues: 10, valueLabels: Ire10ptValueLabels);
AddGenericPictureAction("whiteBalanceBlueOffset", minValue: -50, maxValue: 50, title: "White Balance - Blue Offset");
AddGenericPictureAction("whiteBalanceBlueGain", minValue: -50, maxValue: 50, title: "White Balance - Blue Gain");
AddGenericPictureAction("whiteBalanceGreenOffset", minValue: -50, maxValue: 50, title: "White Balance - Green Offset");
AddGenericPictureAction("whiteBalanceGreenGain", minValue: -50, maxValue: 50, title: "White Balance - Green Gain");
AddGenericPictureAction("whiteBalanceRedOffset", minValue: -50, maxValue: 50, title: "White Balance - Red Offset");
AddGenericPictureAction("whiteBalanceRedGain", minValue: -50, maxValue: 50, title: "White Balance - Red Gain");
AddGenericPictureAction("whiteBalanceMethod", typeof(WhiteBalanceMethod), title: "White Balance - Method");
AddInvokableAction("turnScreenOff", TurnScreenOffAction);
AddInvokableAction("turnScreenOn", TurnScreenOnAction);
+5 -5
View File
@@ -26,17 +26,17 @@ namespace ColorControl.Services.LG
private Config _config;
private LgService _lgService;
private readonly ServiceManager _serviceManager;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
private string _lgTabMessage;
private bool _disableEvents = false;
internal LgPanel(LgService lgService, ServiceManager serviceManager, AppContextProvider appContextProvider, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
internal LgPanel(LgService lgService, ServiceManager serviceManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_lgService = lgService;
_serviceManager = serviceManager;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
_config = Shared.Common.GlobalContext.CurrentContext.Config;
@@ -443,7 +443,7 @@ namespace ColorControl.Services.LG
if (!string.IsNullOrEmpty(preset.shortcut))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, preset.id);
WinApi.UnregisterHotKey(_globalContext.MainHandle, preset.id);
}
_lgService.GetPresets().Remove(preset);
@@ -1208,7 +1208,7 @@ Do you want to continue?";
if (string.IsNullOrEmpty(shortcutGB))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, LgService.SHORTCUTID_GAMEBAR);
WinApi.UnregisterHotKey(_globalContext.MainHandle, LgService.SHORTCUTID_GAMEBAR);
}
else
{
+12 -6
View File
@@ -70,9 +70,9 @@ namespace ColorControl.Services.LG
public static readonly int SHORTCUTID_LGQA = -202;
public static readonly int SHORTCUTID_GAMEBAR = -101;
public LgService(AppContextProvider appContextProvider, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, ProcessEventDispatcher processEventDispatcher, ServiceManager serviceManager, RestartDetector restartDetector, WinApiService winApiService, WinApiAdminService winApiAdminService) : base(appContextProvider)
public LgService(GlobalContext globalContext, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, ProcessEventDispatcher processEventDispatcher, ServiceManager serviceManager, RestartDetector restartDetector, WinApiService winApiService, WinApiAdminService winApiAdminService) : base(globalContext)
{
_allowPowerOn = appContextProvider.GetAppContext().StartUpParams.RunningFromScheduledTask;
_allowPowerOn = globalContext.StartUpParams.RunningFromScheduledTask;
_powerEventDispatcher = powerEventDispatcher;
_sessionSwitchDispatcher = sessionSwitchDispatcher;
_processEventDispatcher = processEventDispatcher;
@@ -82,7 +82,7 @@ namespace ColorControl.Services.LG
_restartDetector = restartDetector;
_winApiService = winApiService;
_winApiAdminService = winApiAdminService;
_syncContext = appContextProvider.GetAppContext().SynchronizationContext;
_syncContext = globalContext.SynchronizationContext;
LgTvApiCore.SyncContext = _syncContext;
LoadConfig();
@@ -286,7 +286,7 @@ namespace ColorControl.Services.LG
{
Devices = Config.Devices;
if (!_appContextProvider.GetAppContext().StartUpParams.NoDeviceRefresh)
if (!_globalContext.StartUpParams.NoDeviceRefresh)
{
var customIpAddresses = Devices.Where(d => d.IsCustom).Select(d => d.IpAddress);
@@ -446,7 +446,7 @@ namespace ColorControl.Services.LG
SetShortcuts(SHORTCUTID_LGQA, Config.QuickAccessShortcut);
var keyboardShortcutDispatcher = _appContextProvider.GetAppContext().ServiceProvider.GetService<KeyboardShortcutDispatcher>();
var keyboardShortcutDispatcher = _globalContext.ServiceProvider.GetService<KeyboardShortcutDispatcher>();
if (keyboardShortcutDispatcher != null)
{
keyboardShortcutDispatcher.RegisterShortcut(SHORTCUTID_GAMEBAR, Config.GameBarShortcut);
@@ -468,10 +468,16 @@ namespace ColorControl.Services.LG
{
await RefreshDevices(afterStartUp: true);
if (_appContextProvider.GetAppContext().StartUpParams.RunningFromScheduledTask)
if (_globalContext.StartUpParams.RunningFromScheduledTask)
{
await ExecutePresetsForEvent(PresetTriggerType.Startup);
}
if (_globalContext.StartUpParams.ExecuteLgPreset)
{
await ExecutePresetAsync(_globalContext.StartUpParams.LgPresetName);
}
}
private void SessionSwitched(object sender, SessionSwitchEventArgs e)
+6 -6
View File
@@ -34,18 +34,18 @@ namespace ColorControl.Services.NVIDIA
private Config _config;
private NvService _nvService;
private readonly NotifyIconManager _notifyIconManager;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private string _lastDisplayRefreshRates = string.Empty;
private RpcClientService _rpcService;
private readonly WinApiAdminService _winApiAdminService;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
public NvPanel(NvService nvService, NotifyIconManager notifyIconManager, AppContextProvider appContextProvider, RpcClientService rpcService, WinApiAdminService winApiAdminService, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
public NvPanel(NvService nvService, NotifyIconManager notifyIconManager, GlobalContext globalContext, RpcClientService rpcService, WinApiAdminService winApiAdminService, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_nvService = nvService;
_notifyIconManager = notifyIconManager;
_appContextProvider = appContextProvider;
_config = appContextProvider.GetAppContext().Config;
_globalContext = globalContext;
_config = globalContext.Config;
_rpcService = rpcService;
_winApiAdminService = winApiAdminService;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
@@ -157,7 +157,7 @@ namespace ColorControl.Services.NVIDIA
item.Font = new Font(item.Font, item.Font.Style | FontStyle.Bold);
//item.BackColor = Color.LightGray;
}
item.BackColor = _appContextProvider.GetAppContext().Config.UseDarkMode ? Color.DimGray : Color.LightGray;
item.BackColor = _globalContext.Config.UseDarkMode ? Color.DimGray : Color.LightGray;
var values = displayInfo.Values;
@@ -245,7 +245,7 @@ namespace ColorControl.Services.NVIDIA
if (!string.IsNullOrEmpty(preset.shortcut))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, preset.id);
WinApi.UnregisterHotKey(_globalContext.MainHandle, preset.id);
}
_nvService.GetPresets().Remove(preset);
+19 -8
View File
@@ -222,7 +222,7 @@ namespace ColorControl.Services.NVIDIA
public static readonly int SHORTCUTID_NVQA = -200;
public NvService(AppContextProvider appContextProvider, WinApiService winApiService, RpcClientService rpcClientService, PowerEventDispatcher powerEventDispatcher, ServiceManager serviceManager) : base(appContextProvider)
public NvService(GlobalContext globalContext, WinApiService winApiService, RpcClientService rpcClientService, PowerEventDispatcher powerEventDispatcher, ServiceManager serviceManager) : base(globalContext)
{
_winApiService = winApiService;
_rpcClientService = rpcClientService;
@@ -238,11 +238,11 @@ namespace ColorControl.Services.NVIDIA
public override void InstallEventHandlers()
{
SetShortcuts(SHORTCUTID_NVQA, _appContextProvider.GetAppContext().Config.NvQuickAccessShortcut);
SetShortcuts(SHORTCUTID_NVQA, _globalContext.Config.NvQuickAccessShortcut);
GetDisplayInfos(false);
MainViewModel.ConfigPath = _appContextProvider.GetAppContext().DataPath;
MainViewModel.ConfigPath = _globalContext.DataPath;
if (Config.ApplyNovideoOnStartup)
{
MainWindow.CreateAndShow(false);
@@ -481,7 +481,7 @@ namespace ColorControl.Services.NVIDIA
if (preset.ColorProfileSettings.ProfileName != null)
{
CCD.SetDisplayDefaultColorProfile(display.Name, preset.ColorProfileSettings.ProfileName, _appContextProvider.GetAppContext().Config.SetMinTmlAndMaxTml);
CCD.SetDisplayDefaultColorProfile(display.Name, preset.ColorProfileSettings.ProfileName, _globalContext.Config.SetMinTmlAndMaxTml);
}
}
@@ -1291,12 +1291,23 @@ namespace ColorControl.Services.NVIDIA
public void SetColorProfile(Display display, string name)
{
CCD.SetDisplayDefaultColorProfile(display.Name, name, _appContextProvider.GetAppContext().Config.SetMinTmlAndMaxTml);
CCD.SetDisplayDefaultColorProfile(display.Name, name, _globalContext.Config.SetMinTmlAndMaxTml);
}
public void TestResolution()
{
SetDithering(NvDitherState.Enabled, 1, 4, setRegistryKey: true);
//var display = GetCurrentDisplay();
//var configs = DisplayApi.GetDisplayConfig();
//var displayDevice = display.DisplayDevice;
//var output = displayDevice.Output;
//var bytes = File.ReadAllBytes(@"d:\S95C_mod.bin");
//displayDevice.PhysicalGPU.WriteEDIDData(output, bytes);
//SetDithering(NvDitherState.Enabled, 1, 4, setRegistryKey: true);
//GetHdrMetaData();
@@ -1449,13 +1460,13 @@ namespace ColorControl.Services.NVIDIA
{
var preset = GetPresetForDisplay(display, true, displays.Count());
var values = preset.GetDisplayValues(_appContextProvider.GetAppContext().Config);
var values = preset.GetDisplayValues(_globalContext.Config);
var displayInfo = new NvDisplayInfo(display, values, preset.InfoLine, preset.displayName);
list.Add(displayInfo);
}
var notifyIconManager = _appContextProvider.GetAppContext().ServiceProvider.GetService<NotifyIconManager>();
var notifyIconManager = _globalContext.ServiceProvider.GetService<NotifyIconManager>();
if (notifyIconManager != null)
{
+64 -16
View File
@@ -44,6 +44,7 @@ namespace ColorControl.Services.Samsung
public enum ServiceMenuType
{
HospitalityMenu,
FactoryMenu2024,
}
public delegate void GenericDelegate(object sender);
@@ -701,35 +702,45 @@ namespace ColorControl.Services.Samsung
private async Task<bool> ServiceMenuAction(Dictionary<string, object> _)
{
var preset1 = new SamsungPreset("ServiceMenuStep1", null, new[] { "KEY_MUTE:600", "KEY_1:600", "KEY_1:600", "KEY_9:600", "KEY_ENTER:2000" });
var preset2 = new SamsungPreset("ServiceMenuStep2", null, new[] { "KEY_1", "KEY_2", "KEY_3", "KEY_4", "KEY_UP" });
var preset3 = new SamsungPreset("ServiceMenuStep3", null, new[] { "KEY_VOLUP:5100:Press", "KEY_VOLUP:500:Release" });
var rebootPreset = new SamsungPreset("ServiceMenuStep4", null, new[] { "KEY_POWER:5000", "WOL" });
var serviceMenuTypes = new[] { ServiceMenuType.HospitalityMenu, ServiceMenuType.FactoryMenu2024 }.Select(t => Utils.GetDescription(t));
var serviceMenuTypes = new[] { ServiceMenuType.HospitalityMenu }.Select(t => Utils.GetDescription(t));
var serviceMenuTypeField = new FieldDefinition
{
Label = "Service Menu Access Type",
SubLabel = "Both types will not reset your settings. 'Factory Menu 2024' is recommended for 2024 series. Click 'Next >' to continue or 'X' to stop",
FieldType = FieldType.DropDown,
Values = serviceMenuTypes,
Value = ServiceMenuType.HospitalityMenu
};
if (!MessageForms.ShowDialog($"Access Service Menu", new[] {
new FieldDefinition
{
Label = "Service Menu Access Type",
SubLabel = "'Hospitality Menu' will not reset your settings. Click 'Next >' to continue or 'X' to stop",
FieldType = FieldType.DropDown,
Values = serviceMenuTypes,
Value = ServiceMenuType.HospitalityMenu
} }, okButtonText: "Next >").Any())
if (!MessageForms.ShowDialog($"Access Service Menu", [serviceMenuTypeField], okButtonText: "Next >").Any())
{
return true;
}
return serviceMenuTypeField.ValueAsEnum<ServiceMenuType>() switch
{
ServiceMenuType.HospitalityMenu => await OpenHospitalityMenu(),
ServiceMenuType.FactoryMenu2024 => await OpenFactoryMenu2024()
};
}
private async Task<bool> OpenHospitalityMenu()
{
var preset1 = new SamsungPreset("ServiceMenuStep1", null, ["KEY_MUTE:600", "KEY_1:600", "KEY_1:600", "KEY_9:600", "KEY_ENTER:2000"]);
var preset2 = new SamsungPreset("ServiceMenuStep2", null, ["KEY_1", "KEY_2", "KEY_3", "KEY_4", "KEY_UP"]);
var preset3 = new SamsungPreset("ServiceMenuStep3", null, ["KEY_VOLUP:5100:Press", "KEY_VOLUP:500:Release"]);
var rebootPreset = new SamsungPreset("ServiceMenuStep4", null, ["KEY_POWER:5000", "WOL"]);
await ExecutePresetWithProgressAsync(preset1, "Step 1: opening Service Menu. It is normal to see messages like 'Not Available'.");
if (!MessageForms.ShowDialog($"Access Service Menu - Step 2", new[] {
if (!MessageForms.ShowDialog($"Access Service Menu - Step 2", [
new FieldDefinition
{
Label = "Service Menu opened?",
SubLabel = "If the menu is opened with the 'Hospitality Mode' item highlighted and the rest disabled, click 'Next >' to continue or 'X' to stop",
FieldType = FieldType.Label
} }, okButtonText: "Next >").Any())
} ], okButtonText: "Next >").Any())
{
return true;
}
@@ -765,6 +776,43 @@ namespace ColorControl.Services.Samsung
return true;
}
private async Task<bool> OpenFactoryMenu2024()
{
var preset1 = new SamsungPreset("ServiceMenuStep1", null, ["KEY_INFO", "KEY_FACTORY:2000"]);
var preset2 = new SamsungPreset("ServiceMenuStep2", null, ["KEY_UP", "KEY_0", "KEY_0", "KEY_9", "KEY_8"]);
var rebootPreset = new SamsungPreset("ServiceMenuStep4", null, ["KEY_POWER:5000", "WOL"]);
await ExecutePresetWithProgressAsync(preset1, "Step 1: opening Service Menu. It is normal to see messages like 'Not Available'.");
var values = MessageForms.ShowDialog($"Access Service Menu - Step 2", new[] {
new FieldDefinition
{
Label = "Service Menu - Advanced",
SubLabel = "If the service menu opened and you want to access the Advanced settings, click 'Next >' or click 'X' to skip",
FieldType = FieldType.Label
} }, okButtonText: "Next >");
if (values.Any())
{
await ExecutePresetWithProgressAsync(preset2, "Step 2: accessing Advanced Service Menu...");
}
if (!MessageForms.ShowDialog($"Reboot TV - Final Step", new[] {
new FieldDefinition
{
Label = "Reboot TV",
SubLabel = "After you have made the necessary changes, click 'Reboot TV' to reboot the TV or click 'X' to close. If the TV turns not back on automatically, power it on manually.",
FieldType = FieldType.Label
} }, okButtonText: "Reboot TV").Any())
{
return true;
}
await ExecutePresetWithProgressAsync(rebootPreset, "Final Step: rebooting TV...");
return true;
}
private async Task ExecutePresetWithProgressAsync(SamsungPreset preset, string text)
{
var progressForm = MessageForms.ShowProgress(text);
@@ -6,7 +6,6 @@ using ColorControl.Shared.Contracts;
using ColorControl.Shared.EventDispatcher;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using NLog;
using NStandard;
using System;
@@ -24,16 +23,16 @@ namespace ColorControl.Services.Samsung
private Config _config;
private SamsungService _samsungService;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
private readonly ServiceManager _serviceManager;
private string _tabMessage;
private bool _disableEvents = false;
public SamsungPanel(SamsungService samsungService, AppContextProvider appContextProvider, KeyboardShortcutDispatcher keyboardShortcutDispatcher, ServiceManager serviceManager)
public SamsungPanel(SamsungService samsungService, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher, ServiceManager serviceManager)
{
_samsungService = samsungService;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_keyboardShortcutDispatcher = keyboardShortcutDispatcher;
_serviceManager = serviceManager;
_config = Shared.Common.GlobalContext.CurrentContext.Config;
@@ -453,7 +452,7 @@ namespace ColorControl.Services.Samsung
if (!string.IsNullOrEmpty(preset.shortcut))
{
WinApi.UnregisterHotKey(_appContextProvider.GetAppContext().MainHandle, preset.id);
WinApi.UnregisterHotKey(_globalContext.MainHandle, preset.id);
}
_samsungService.GetPresets().Remove(preset);
@@ -44,9 +44,9 @@ namespace ColorControl.Services.Samsung
public static readonly int SHORTCUTID_SAMSUNGQA = -204;
public SamsungService(AppContextProvider appContextProvider, ServiceManager serviceManager, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, RestartDetector restartDetector, ProcessEventDispatcher processEventDispatcher, WinApiAdminService winApiAdminService) : base(appContextProvider)
public SamsungService(GlobalContext globalContext, ServiceManager serviceManager, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, RestartDetector restartDetector, ProcessEventDispatcher processEventDispatcher, WinApiAdminService winApiAdminService) : base(globalContext)
{
_appContext = appContextProvider.GetAppContext();
_appContext = globalContext;
_allowPowerOn = _appContext.StartUpParams.RunningFromScheduledTask;
_serviceManager = serviceManager;
_powerEventDispatcher = powerEventDispatcher;
@@ -107,6 +107,11 @@ namespace ColorControl.Services.Samsung
{
await ExecutePresetsForEvent(PresetTriggerType.Startup);
}
if (_appContext.StartUpParams.ExecuteSamsungPreset)
{
await ExecutePresetAsync(_appContext.StartUpParams.SamsungPresetName);
}
}
private void LoadConfig()
@@ -208,7 +213,7 @@ namespace ColorControl.Services.Samsung
{
Devices = Config.Devices;
if (!_appContextProvider.GetAppContext().StartUpParams.NoDeviceRefresh)
if (!_globalContext.StartUpParams.NoDeviceRefresh)
{
var customIpAddresses = Devices.Where(d => d.IsCustom).Select(d => d.IpAddress);
@@ -249,5 +249,31 @@ namespace ColorControl.Svc
}
}
}
internal async Task StartAndStopWithMutex()
{
var cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
var _ = Task.Run(() => CheckMutexAsync(cancellationTokenSource));
await StartAsync(cancellationToken);
}
private void CheckMutexAsync(CancellationTokenSource cancellationTokenSource)
{
var mutex = new Mutex(false, GlobalContext.CurrentContext.MutexId, out var _);
try
{
mutex.WaitOne();
}
catch (AbandonedMutexException)
{
}
cancellationTokenSource.Cancel();
Environment.Exit(0);
}
}
}
@@ -1,4 +1,5 @@
using ColorControl.Shared.Forms;
using ColorControl.Shared.Common;
using ColorControl.Shared.Forms;
using ColorControl.Shared.Native;
using ColorControl.Shared.Services;
using ColorControl.Shared.XForms;
@@ -18,15 +19,15 @@ namespace ColorControl.XForms
{
private ColorProfileViewModel _viewModel;
private readonly WinApiAdminService _winApiAdminService;
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
public ColorProfileWindow(WinApiAdminService winApiAdminService, AppContextProvider appContextProvider, bool isHDR)
public ColorProfileWindow(WinApiAdminService winApiAdminService, GlobalContext globalContext, bool isHDR)
{
_winApiAdminService = winApiAdminService;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_viewModel = new ColorProfileViewModel(isHDR);
_viewModel.SetMinMaxTml = appContextProvider.GetAppContext().Config.SetMinTmlAndMaxTml;
_viewModel.SetMinMaxTml = globalContext.Config.SetMinTmlAndMaxTml;
DataContext = _viewModel;
InitializeComponent();
@@ -49,8 +50,8 @@ namespace ColorControl.XForms
}
var winApiAdminService = Program.ServiceProvider.GetRequiredService<WinApiAdminService>();
var appContextProvider = Program.ServiceProvider.GetRequiredService<AppContextProvider>();
var window = new ColorProfileWindow(winApiAdminService, appContextProvider, isHDR);
var globalContext = Program.ServiceProvider.GetRequiredService<GlobalContext>();
var window = new ColorProfileWindow(winApiAdminService, globalContext, isHDR);
if (show)
{
+10
View File
@@ -134,6 +134,16 @@ namespace LgTv
bool_true
}
public enum WhiteBalanceMethod
{
[Description("2-points")]
_2,
[Description("20-points")]
_10,
[Description("22-points")]
_22
}
public enum GammaExp
{
low,
+1 -1
View File
@@ -20,7 +20,7 @@ namespace ColorControl.Shared.Common
public DateTime StartTime { get; private set; } = DateTime.Now;
public string MutexId { get; private set; }
public nint MainHandle { get; set; }
public IServiceProvider ServiceProvider { get; private set; }
public IServiceProvider ServiceProvider { get; set; }
public string ApplicationTitle { get; private set; }
public string ApplicationTitleAdmin { get; private set; }
@@ -37,11 +37,11 @@ public class ProcessEventDispatcher : EventDispatcher<ProcessChangedEventArgs>
protected static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
private AppContextProvider _appContextProvider { get; }
private GlobalContext _globalContext { get; }
public ProcessEventDispatcher(AppContextProvider appContextProvider)
public ProcessEventDispatcher(GlobalContext globalContext)
{
_appContextProvider = appContextProvider;
_globalContext = globalContext;
IsRunning = true;
@@ -62,7 +62,7 @@ public class ProcessEventDispatcher : EventDispatcher<ProcessChangedEventArgs>
while (IsRunning)
{
await Task.Delay(_appContextProvider.GetAppContext().Config.ProcessMonitorPollingInterval);
await Task.Delay(_globalContext.Config.ProcessMonitorPollingInterval);
if (!HasHandlers(Event_ProcessChanged))
{
@@ -1,4 +1,4 @@
using ColorControl.Shared.Services;
using ColorControl.Shared.Common;
using NWin32;
namespace ColorControl.Shared.EventDispatcher;
@@ -22,9 +22,10 @@ public class WindowMessageDispatcher : EventDispatcher<WindowMessageEventArgs>
public const string Event_WindowMessageClose = "WindowMessageClose";
public const string Event_WindowMessagePowerBroadcast = "WindowMessagePowerBroadcast";
public const string Event_WindowMessageShowWindow = "WindowMessageShowWindow";
public const string Event_WindowMessageUserBringToFront = "WindowMessageUserBringToFront";
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
private readonly AppContextProvider _appContextProvider;
private readonly GlobalContext _globalContext;
public DummyForm MessageForm { get; set; }
@@ -34,16 +35,17 @@ public class WindowMessageDispatcher : EventDispatcher<WindowMessageEventArgs>
{ NativeConstants.WM_QUERYENDSESSION, Event_WindowMessageQueryEndSession },
{ NativeConstants.WM_CLOSE, Event_WindowMessageClose },
{ NativeConstants.WM_POWERBROADCAST, Event_WindowMessagePowerBroadcast },
{ NativeConstants.WM_SHOWWINDOW, Event_WindowMessageShowWindow }
{ NativeConstants.WM_SHOWWINDOW, Event_WindowMessageShowWindow },
{ Utils.WM_BRINGTOFRONT, Event_WindowMessageUserBringToFront }
};
public WindowMessageDispatcher(AppContextProvider appContextProvider)
public WindowMessageDispatcher(GlobalContext globalContext)
{
MessageForm = new DummyForm();
MessageForm.OnMessage += MessageForm_OnMessage;
_appContextProvider = appContextProvider;
_globalContext = globalContext;
_appContextProvider.GetAppContext().MainHandle = MessageForm.Handle;
_globalContext.MainHandle = MessageForm.Handle;
}
private void MessageForm_OnMessage(object sender, Message e)
+14
View File
@@ -3,6 +3,7 @@ using MHC2Gen;
using NWin32;
using System.ComponentModel;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace ColorControl.Shared.Native
@@ -63,6 +64,19 @@ namespace ColorControl.Shared.Native
}
}
public static void GetAllPaths()
{
uint numPathArrayElements;
uint numModeInfoArrayElements;
NativeMethods.GetDisplayConfigBufferSizes(QueryDisplayFlags.AllPaths, out numPathArrayElements, out numModeInfoArrayElements);
var pathArray = new DisplayConfigPathInfo[numPathArrayElements];
var modeArray = new DisplayConfigModeInfo[numModeInfoArrayElements];
var result = NativeMethods.QueryDisplayConfig(QueryDisplayFlags.AllPaths, ref numPathArrayElements, pathArray, ref numModeInfoArrayElements, modeArray, out Unsafe.NullRef<DisplayConfigTopologyId>());
}
public static LUID GetAdapterId(string displayName = null)
{
return ExecuteForModeConfig((modeInfo) =>
-18
View File
@@ -1,18 +0,0 @@
namespace ColorControl.Shared.Services
{
public class AppContextProvider
{
private Common.GlobalContext _appContext;
public void SetAppContext(Common.GlobalContext appContext)
{
_appContext = appContext;
}
public Common.GlobalContext GetAppContext()
{
return _appContext;
}
}
}
+4 -24
View File
@@ -1,6 +1,5 @@
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using NWin32;
using System.Diagnostics;
namespace ColorControl.Shared.Services;
@@ -73,36 +72,17 @@ public class WinElevatedProcessManager
return 0;
}
private static nint ElevatedProcessWindowHandle = nint.Zero;
private static int ElevatedProcessId;
public void CheckElevatedProcess()
{
ElevatedProcessWindowHandle = NativeMethods.FindWindowW(null, "ElevatedForm");
if (ElevatedProcessWindowHandle != nint.Zero)
if (ElevatedProcessId != 0 && !Process.GetProcessById(ElevatedProcessId).HasExited)
{
return;
}
ExecuteDirect(StartUpParams.StartElevatedParam, false);
ElevatedProcessId = ExecuteDirect(StartUpParams.StartElevatedParam, false);
var delay = 1000;
while (delay >= 0)
{
Thread.Sleep(100);
ElevatedProcessWindowHandle = NativeMethods.FindWindowW(null, "ElevatedForm");
if (ElevatedProcessWindowHandle != nint.Zero)
{
Thread.Sleep(500);
break;
}
delay -= 100;
}
Thread.Sleep(500);
}
}