diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 4642e480e..90b14a29b 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -247,6 +247,10 @@ ..\packages\squirrel.windows.1.4.4\lib\Net45\NuGet.Squirrel.dll True + + ..\packages\Open.WinKeyboardHook.1.0.11\lib\net45\Open.WinKeyboardHook.dll + True + ..\packages\Process.NET.1.0.5\lib\Process.NET.dll True @@ -298,10 +302,6 @@ ..\packages\WpfExceptionViewer.1.0.0.0\lib\VioletTape.WpfExceptionViewer.dll True - - ..\packages\VirtualInput.1.0.1\lib\net20\VirtualInput.dll - True - @@ -354,6 +354,7 @@ + diff --git a/Artemis/Artemis/DAL/ProfileProvider.cs b/Artemis/Artemis/DAL/ProfileProvider.cs index 2721ae7d6..b1fc66710 100644 --- a/Artemis/Artemis/DAL/ProfileProvider.cs +++ b/Artemis/Artemis/DAL/ProfileProvider.cs @@ -21,7 +21,7 @@ namespace Artemis.DAL { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private static readonly string ProfileFolder = + public static readonly string ProfileFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\profiles"; private static bool _installedDefaults; @@ -33,7 +33,7 @@ namespace Artemis.DAL CheckProfiles(); InstallDefaults(); } - + public static List GetProfileNames(KeyboardProvider keyboard, ModuleModel module) { if (keyboard == null || module == null) @@ -177,7 +177,7 @@ namespace Artemis.DAL } } - private static List ReadProfiles(string subDirectory) + public static List ReadProfiles(string subDirectory) { var profiles = new List(); var directory = ProfileFolder + "/" + subDirectory; diff --git a/Artemis/Artemis/InjectionModules/ManagerModules.cs b/Artemis/Artemis/InjectionModules/ManagerModules.cs index 6f6b1c1b3..c1e788ba7 100644 --- a/Artemis/Artemis/InjectionModules/ManagerModules.cs +++ b/Artemis/Artemis/InjectionModules/ManagerModules.cs @@ -14,6 +14,7 @@ namespace Artemis.InjectionModules Bind().ToSelf().InSingletonScope(); Bind().ToSelf().InSingletonScope(); Bind().ToSelf().InSingletonScope(); + Bind().ToSelf().InSingletonScope(); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs index c266bb4d8..dba3b4657 100644 --- a/Artemis/Artemis/Managers/MainManager.cs +++ b/Artemis/Artemis/Managers/MainManager.cs @@ -19,12 +19,14 @@ namespace Artemis.Managers /// public class MainManager : IDisposable { + private readonly MigrationManager _migrationManager; private readonly Timer _processTimer; public MainManager(ILogger logger, LoopManager loopManager, DeviceManager deviceManager, - ModuleManager moduleManager, PreviewManager previewManager, PipeServer pipeServer, - GameStateWebServer gameStateWebServer) + ModuleManager moduleManager, PreviewManager previewManager, MigrationManager migrationManager, + PipeServer pipeServer, GameStateWebServer gameStateWebServer) { + _migrationManager = migrationManager; Logger = logger; LoopManager = loopManager; DeviceManager = deviceManager; @@ -111,6 +113,7 @@ namespace Artemis.Managers ProgramEnabled = true; await LoopManager.StartAsync(); + _migrationManager.MigrateProfiles(); RaiseEnabledChangedEvent(new EnabledChangedEventArgs(ProgramEnabled)); } @@ -121,10 +124,8 @@ namespace Artemis.Managers { Logger.Debug("Disabling program"); foreach (var overlayModule in ModuleManager.OverlayModules) - { if (overlayModule.Settings.IsEnabled) overlayModule.Dispose(); - } LoopManager.Stop(); ProgramEnabled = false; RaiseEnabledChangedEvent(new EnabledChangedEventArgs(ProgramEnabled)); diff --git a/Artemis/Artemis/Managers/MigrationManager.cs b/Artemis/Artemis/Managers/MigrationManager.cs new file mode 100644 index 000000000..b314b6952 --- /dev/null +++ b/Artemis/Artemis/Managers/MigrationManager.cs @@ -0,0 +1,40 @@ +using System.IO; +using Artemis.DAL; + +namespace Artemis.Managers +{ + public class MigrationManager + { + private readonly DeviceManager _deviceManager; + + public MigrationManager(DeviceManager deviceManager) + { + _deviceManager = deviceManager; + } + + /// + /// Migrates old versions of profiles to new versions + /// + public void MigrateProfiles() + { + // 1.8.0.0 - Rename WindowsProfile to GeneralProfile + foreach (var keyboardProvider in _deviceManager.KeyboardProviders) + { + var folder = ProfileProvider.ProfileFolder + "/" + keyboardProvider.Slug + "/WindowsProfile"; + if (!Directory.Exists(folder)) + continue; + + // Get all the profiles + var profiles = ProfileProvider.ReadProfiles(keyboardProvider.Slug + "/WindowsProfile"); + foreach (var profile in profiles) + { + // Change their GameName and save, effectively moving them to the new folder + profile.GameName = "GeneralProfile"; + ProfileProvider.AddOrUpdate(profile); + } + // Delete the old profiles + Directory.Delete(folder, true); + } + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Properties/AssemblyInfo.cs b/Artemis/Artemis/Properties/AssemblyInfo.cs index 7205a0d2c..b89de5c2b 100644 --- a/Artemis/Artemis/Properties/AssemblyInfo.cs +++ b/Artemis/Artemis/Properties/AssemblyInfo.cs @@ -53,7 +53,7 @@ using System.Windows; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.1.0")] -[assembly: AssemblyFileVersion("1.7.1.0")] +[assembly: AssemblyVersion("1.8.0.0")] +[assembly: AssemblyFileVersion("1.8.0.0")] [assembly: InternalsVisibleTo("Artemis.Explorables")] diff --git a/Artemis/Artemis/Resources/Keyboards/default-profiles.zip b/Artemis/Artemis/Resources/Keyboards/default-profiles.zip index a675632a6..9520a5698 100644 Binary files a/Artemis/Artemis/Resources/Keyboards/default-profiles.zip and b/Artemis/Artemis/Resources/Keyboards/default-profiles.zip differ diff --git a/Artemis/Artemis/Utilities/Keyboard/KeyboardHook.cs b/Artemis/Artemis/Utilities/Keyboard/KeyboardHook.cs index 326552cae..13555234f 100644 --- a/Artemis/Artemis/Utilities/Keyboard/KeyboardHook.cs +++ b/Artemis/Artemis/Utilities/Keyboard/KeyboardHook.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; using System.Windows.Forms; -using VirtualInput; +using Open.WinKeyboardHook; namespace Artemis.Utilities.Keyboard { @@ -10,13 +10,14 @@ namespace Artemis.Utilities.Keyboard static KeyboardHook() { - VirtualKeyboard.StartInterceptor(); - VirtualKeyboard.KeyDown += VirtualKeyboardOnKeyDown; + var interceptor = new KeyboardInterceptor(); + interceptor.KeyDown += VirtualKeyboardOnKeyDown; + interceptor.StartCapturing(); } - private static void VirtualKeyboardOnKeyDown(object sender, KeyEventArgs keyEventArgs) + private static async void VirtualKeyboardOnKeyDown(object sender, KeyEventArgs keyEventArgs) { - Task.Factory.StartNew(() => { KeyDownCallback?.Invoke(keyEventArgs); }); + await Task.Factory.StartNew(() => { KeyDownCallback?.Invoke(keyEventArgs); }); } public static event KeyDownCallbackHandler KeyDownCallback; diff --git a/Artemis/Artemis/packages.config b/Artemis/Artemis/packages.config index 55b725806..5afbe906d 100644 --- a/Artemis/Artemis/packages.config +++ b/Artemis/Artemis/packages.config @@ -23,12 +23,12 @@ + - \ No newline at end of file