From 2062846e18d076bc7494ebf2f24fd589d56b9a31 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 31 May 2017 19:24:45 +0200 Subject: [PATCH 001/452] Code reorganization --- AutoHotkey.Interop/AutoHotkey.Interop.csproj | 8 +- AutoHotkey.Interop/Util.cs | 116 -- .../AutoHotkeyAPI.cs} | 151 +- .../{ => src}/AutoHotkeyEngine.cs | 40 +- .../{ => src}/SafeLibraryHandle.cs | 21 +- AutoHotkey.Interop/src/Util.cs | 102 ++ InstallationScript/Install.nsi | 4 +- Toastify/{ => Resources}/SpotifyAdPlaying.png | Bin Toastify/{ => Resources}/SpotifyLogo.png | Bin .../{ => Resources}/SpotifyToastifyLogo.png | Bin .../SpotifyToastifyUpdateLogo.png | Bin .../{ => Resources}/ToastifyAccessDenied.png | Bin Toastify/ScreenHelper.cs | 47 - Toastify/Settings.xaml.cs | 300 --- Toastify/SettingsXml.cs | 851 --------- Toastify/Spotify.cs | 617 ------- Toastify/Toastify.csproj | 67 +- Toastify/VersionChecker.cs | 88 - Toastify/packages.config | 2 +- Toastify/spotify.ico | Bin 47284 -> 0 bytes Toastify/{ => src}/App.xaml | 18 +- Toastify/{ => src}/App.xaml.cs | 97 +- Toastify/{ => src/Core}/HotKey.cs | 844 ++++----- Toastify/src/Core/SettingsXml.cs | 890 +++++++++ Toastify/src/Core/Song.cs | 43 + Toastify/src/Core/Spotify.cs | 385 ++++ Toastify/src/Core/SpotifyAction.cs | 23 + .../Events/CheckVersionCompleteEventArgs.cs | 10 + .../Helpers}/BoolToVisibleConverter.cs | 44 +- .../Helpers}/OppositeBoolConverter.cs | 44 +- .../OppositeBoolToVisibleConverter.cs | 44 +- Toastify/src/Helpers/ScreenHelper.cs | 34 + Toastify/{ => src/Helpers}/VolumeHelper.cs | 727 ++++---- Toastify/{ => src/Helpers}/WinHelper.cs | 181 +- Toastify/{ => src}/LastInputDebug.cs | 17 +- Toastify/{ => src/Services}/Telemetry.cs | 27 +- Toastify/src/Services/TelemetryCategory.cs | 9 + Toastify/src/Services/VersionChecker.cs | 84 + Toastify/{ => src/UI}/About.xaml | 116 +- Toastify/{ => src/UI}/About.xaml.cs | 149 +- Toastify/{ => src/UI}/Settings.xaml | 277 +-- Toastify/src/UI/Settings.xaml.cs | 277 +++ Toastify/{ => src/UI}/Toast.xaml | 102 +- Toastify/{ => src/UI}/Toast.xaml.cs | 1601 +++++++++-------- Toastify/src/Win32API.cs | 146 ++ 45 files changed, 4284 insertions(+), 4319 deletions(-) delete mode 100644 AutoHotkey.Interop/Util.cs rename AutoHotkey.Interop/{AutoHotkeyDll.cs => src/AutoHotkeyAPI.cs} (69%) rename AutoHotkey.Interop/{ => src}/AutoHotkeyEngine.cs (82%) rename AutoHotkey.Interop/{ => src}/SafeLibraryHandle.cs (68%) create mode 100644 AutoHotkey.Interop/src/Util.cs rename Toastify/{ => Resources}/SpotifyAdPlaying.png (100%) rename Toastify/{ => Resources}/SpotifyLogo.png (100%) rename Toastify/{ => Resources}/SpotifyToastifyLogo.png (100%) rename Toastify/{ => Resources}/SpotifyToastifyUpdateLogo.png (100%) rename Toastify/{ => Resources}/ToastifyAccessDenied.png (100%) delete mode 100644 Toastify/ScreenHelper.cs delete mode 100644 Toastify/Settings.xaml.cs delete mode 100644 Toastify/SettingsXml.cs delete mode 100644 Toastify/Spotify.cs delete mode 100644 Toastify/VersionChecker.cs delete mode 100644 Toastify/spotify.ico rename Toastify/{ => src}/App.xaml (97%) rename Toastify/{ => src}/App.xaml.cs (96%) rename Toastify/{ => src/Core}/HotKey.cs (57%) create mode 100644 Toastify/src/Core/SettingsXml.cs create mode 100644 Toastify/src/Core/Song.cs create mode 100644 Toastify/src/Core/Spotify.cs create mode 100644 Toastify/src/Core/SpotifyAction.cs create mode 100644 Toastify/src/Events/CheckVersionCompleteEventArgs.cs rename Toastify/{ => src/Helpers}/BoolToVisibleConverter.cs (74%) rename Toastify/{ => src/Helpers}/OppositeBoolConverter.cs (84%) rename Toastify/{ => src/Helpers}/OppositeBoolToVisibleConverter.cs (74%) create mode 100644 Toastify/src/Helpers/ScreenHelper.cs rename Toastify/{ => src/Helpers}/VolumeHelper.cs (67%) rename Toastify/{ => src/Helpers}/WinHelper.cs (67%) rename Toastify/{ => src}/LastInputDebug.cs (76%) rename Toastify/{ => src/Services}/Telemetry.cs (87%) create mode 100644 Toastify/src/Services/TelemetryCategory.cs create mode 100644 Toastify/src/Services/VersionChecker.cs rename Toastify/{ => src/UI}/About.xaml (97%) rename Toastify/{ => src/UI}/About.xaml.cs (55%) rename Toastify/{ => src/UI}/Settings.xaml (90%) create mode 100644 Toastify/src/UI/Settings.xaml.cs rename Toastify/{ => src/UI}/Toast.xaml (97%) rename Toastify/{ => src/UI}/Toast.xaml.cs (56%) create mode 100644 Toastify/src/Win32API.cs diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj b/AutoHotkey.Interop/AutoHotkey.Interop.csproj index a26b795c..869deb42 100644 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj +++ b/AutoHotkey.Interop/AutoHotkey.Interop.csproj @@ -67,11 +67,11 @@ - - + + - - + + diff --git a/AutoHotkey.Interop/Util.cs b/AutoHotkey.Interop/Util.cs deleted file mode 100644 index 7adfb8d2..00000000 --- a/AutoHotkey.Interop/Util.cs +++ /dev/null @@ -1,116 +0,0 @@ -using Microsoft.Win32.SafeHandles; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace AutoHotkey.Interop -{ - internal static class Util - { - public static string FindEmbededResourceName(Assembly assembly, string path) - { - path = Regex.Replace(path, @"[/\\]", "."); - - if (!path.StartsWith(".")) - path = "." + path; - - var names = assembly.GetManifestResourceNames(); - - foreach (var name in names) - { - if (name.EndsWith(path)) - { - return name; - } - } - - return null; - } - - public static void ExtractEmbededResourceToFile(Assembly assembly, string embededResourcePath, string targetFileName) - { - //ensure directory exists - var dir = Path.GetDirectoryName(targetFileName); - - if (!Directory.Exists(dir)) - Directory.CreateDirectory(dir); - - using (var readStream = assembly.GetManifestResourceStream(embededResourcePath)) - using (var writeStream = File.Open(targetFileName, FileMode.Create)) - { - readStream.CopyTo(writeStream); - readStream.Flush(); - } - } - - public static bool Is64Bit() - { - return IntPtr.Size == 8; - } - public static bool Is32Bit() - { - return IntPtr.Size == 4; - } - - - - public static void EnsureAutoHotkeyLoaded() - { - if (dllHandle.IsValueCreated) - return; - - var handle = dllHandle.Value; - } - - private static Lazy dllHandle = new Lazy( - () => Util.LoadAutoHotKeyDll()); - private static SafeLibraryHandle LoadAutoHotKeyDll() - { - //Locate and Load 32bit or 64bit version of AutoHotkey.dll - string tempFolderPath = Path.Combine(Path.GetTempPath(), "AutoHotkey.Interop"); - string path32 = @"x86\AutoHotkey.dll"; - string path64 = @"x64\AutoHotkey.dll"; - - var loadDllFromFileOrResource = new Func(relativePath => - { - if (File.Exists(relativePath)) - { - return SafeLibraryHandle.LoadLibrary(relativePath); - } - else - { - var assembly = typeof(AutoHotkeyEngine).Assembly; - var resource = Util.FindEmbededResourceName(assembly, relativePath); - - if (resource != null) - { - var target = Path.Combine(tempFolderPath, relativePath); - Util.ExtractEmbededResourceToFile(assembly, resource, target); - return SafeLibraryHandle.LoadLibrary(target); - } - - return null; - } - }); - - - if (Util.Is32Bit()) - { - return loadDllFromFileOrResource(path32); - } - else if (Util.Is64Bit()) - { - return loadDllFromFileOrResource(path64); - } - else - { - return null; - } - } - } -} diff --git a/AutoHotkey.Interop/AutoHotkeyDll.cs b/AutoHotkey.Interop/src/AutoHotkeyAPI.cs similarity index 69% rename from AutoHotkey.Interop/AutoHotkeyDll.cs rename to AutoHotkey.Interop/src/AutoHotkeyAPI.cs index b51291a3..6abfaa60 100644 --- a/AutoHotkey.Interop/AutoHotkeyDll.cs +++ b/AutoHotkey.Interop/src/AutoHotkeyAPI.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; namespace AutoHotkey.Interop { @@ -12,7 +8,7 @@ namespace AutoHotkey.Interop /// They assume AutoHotkey.dll is in the same directory as your /// executable. /// - internal class AutoHotkeyDll + internal class AutoHotkeyAPI { private const string DLLPATH = "AutoHotkey.dll"; @@ -21,87 +17,87 @@ internal class AutoHotkeyDll /// /// Start new thread from ahk file. /// - /// This parameter must be a path to existing ahk file. - /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). - /// Parameters passed to dll. - /// ahkdll returns a thread handle. - /// ahktextdll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. + /// This parameter must be a path to existing ahk file. + /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). + /// Parameters passed to dll. + /// ahkdll returns a thread handle. + /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint ahkdll( - [MarshalAs(UnmanagedType.LPWStr)] string Path, - [MarshalAs(UnmanagedType.LPWStr)] string Options, - [MarshalAs(UnmanagedType.LPWStr)] string Parameters); + public static extern uint AhkDll( + [MarshalAs(UnmanagedType.LPWStr)] string path, + [MarshalAs(UnmanagedType.LPWStr)] string options, + [MarshalAs(UnmanagedType.LPWStr)] string parameters); /// - /// ahktextdll is used to launch a script in a separate thread from text/variable. + /// AhkTextDll is used to launch a script in a separate thread from text/variable. /// - /// This parameter must be a string with ahk script. - /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). - /// Parameters passed to dll. + /// This parameter must be a string with ahk script. + /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). + /// Parameters passed to dll. /// ahkdll returns a thread handle. - /// ahktextdll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. + /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint ahktextdll( - [MarshalAs(UnmanagedType.LPWStr)] string Code, - [MarshalAs(UnmanagedType.LPWStr)] string Options, - [MarshalAs(UnmanagedType.LPWStr)] string Parameters); + public static extern uint AhkTextDll( + [MarshalAs(UnmanagedType.LPWStr)] string code, + [MarshalAs(UnmanagedType.LPWStr)] string options, + [MarshalAs(UnmanagedType.LPWStr)] string parameters); - #endregion + #endregion Create Thread #region Determine Thread's State /// - /// ahkReady is used to check if a dll script is running or not. + /// AhkReady is used to check if a dll script is running or not. /// /// 1 if a thread is running or 0 otherwise. /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool ahkReady(); + public static extern bool AhkReady(); - #endregion + #endregion Determine Thread's State #region Control Thread /// - /// ahkTerminate is used to stop and exit a running script. + /// AhkTerminate is used to stop and exit a running script. /// /// Time in milliseconds to wait until thread exits. /// Returns always 0. /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void ahkTerminate(uint timeout); + public static extern void AhkTerminate(uint timeout); /// - /// ahkReload is used to terminate and start a running script again. + /// AhkReload is used to terminate and start a running script again. /// [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void ahkReload(); + public static extern void AhkReload(); /// - /// ahkPause will pause/un-pause a thread and run traditional AutoHotkey Sleep internally. + /// AhkPause will pause/un-pause a thread and run traditional AutoHotkey Sleep internally. /// /// Should be "On" or "Off" as a string [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void ahkPause( + public static extern void AhkPause( [MarshalAs(UnmanagedType.LPWStr)] string strState); - #endregion + #endregion Control Thread #region Add New Code /// /// addFile includes additional script from a file to the running script. /// - /// Path to a file that will be added to a running script. - /// Allow duplicate includes. - /// Ignore if loading a file failed. + /// Path to a file that will be added to a running script. + /// Allow duplicate includes. + /// Ignore if loading a file failed. /// addFile returns a pointer to the first line of new created code. /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint addFile( - [MarshalAs(UnmanagedType.LPWStr)]string FilePath, - byte AllowDuplicateInclude, - byte IgnoreLoadFailure); + public static extern uint AddFile( + [MarshalAs(UnmanagedType.LPWStr)] string filePath, + byte allowDuplicateInclude, + byte ignoreLoadFailure); // Constant values for the execute parameter of addScript public struct Execute @@ -117,11 +113,11 @@ public struct Execute /// addScript returns a pointer to the first line of new created code. /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint addScript( - [MarshalAs(UnmanagedType.LPWStr)]string code, + public static extern uint AddScript( + [MarshalAs(UnmanagedType.LPWStr)] string code, byte execute); - #endregion + #endregion Add New Code #region Execute Some Code @@ -132,7 +128,7 @@ public static extern uint addScript( /// Returns true if script was executed and false if there was an error. /// ahkExec will execute the code and delete it before it returns. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool ahkExec( + public static extern bool AhkExec( [MarshalAs(UnmanagedType.LPWStr)] string code); //TODO: ahkExecuteLine @@ -145,7 +141,7 @@ public static extern bool ahkExec( /// 1 if label exists 0 otherwise. /// Default is 0 = wait for code to finish execution. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool ahkLabel( + public static extern bool AhkLabel( [MarshalAs(UnmanagedType.LPWStr)] string labelName, bool noWait); @@ -166,7 +162,7 @@ public static extern bool ahkLabel( /// The 10th parameter, or null /// Return value is always a string/text, add 0 to make sure it resolves to digit if necessary. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr ahkFunction( + public static extern IntPtr AhkFunction( [MarshalAs(UnmanagedType.LPWStr)] string functionName, [MarshalAs(UnmanagedType.LPWStr)] string parameter1, [MarshalAs(UnmanagedType.LPWStr)] string parameter2, @@ -184,73 +180,72 @@ public static extern IntPtr ahkFunction( /// ahkFunction is used to launch a function in script. /// /// Name of function to call. - /// Parameters to pass to function. + /// Parameters to pass to function. /// 0 if function exists else -1. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool ahkPostFunction( + public static extern bool AhkPostFunction( [MarshalAs(UnmanagedType.LPWStr)] string functionName, - [MarshalAs(UnmanagedType.LPWStr)] string Parameters); + [MarshalAs(UnmanagedType.LPWStr)] string parameters); - #endregion + #endregion Execute Some Code #region Working With Variables /// - /// ahkassign is used to assign a string to a variable in script. + /// AhkAssign is used to assign a string to a variable in script. /// - /// Name of a variable. - /// Value to assign to variable. + /// Name of a variable. + /// Value to assign to variable. /// Returns value is 0 on success and -1 on failure. - /// ahkassign will create the variable if it does not exist. + /// AhkAssign will create the variable if it does not exist. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool ahkassign( - [MarshalAs(UnmanagedType.LPWStr)] string VariableName, - [MarshalAs(UnmanagedType.LPWStr)] string NewValue); + public static extern bool AhkAssign( + [MarshalAs(UnmanagedType.LPWStr)] string variableName, + [MarshalAs(UnmanagedType.LPWStr)] string newValue); /// - /// ahkgetvar is used to get a value from a variable in script. + /// AhkGetVar is used to get a value from a variable in script. /// - /// Name of variable to get value from. - /// Get value or pointer. + /// Name of variable to get value from. + /// Get value or pointer. /// Returned value is always a string, add 0 to convert to integer if necessary, especially when using getPointer. - /// ahkgetvar returns empty string if variable does not exist or is empty. + /// AhkGetVar returns empty string if variable does not exist or is empty. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr ahkgetvar( - [MarshalAs(UnmanagedType.LPWStr)] string VariableName, - [MarshalAs(UnmanagedType.I4)] int GetPointer); + public static extern IntPtr AhkGetVar( + [MarshalAs(UnmanagedType.LPWStr)] string variableName, + [MarshalAs(UnmanagedType.I4)] int getPointer); - #endregion + #endregion Working With Variables #region Advanced /// /// ahkFundFunc is used to get function its pointer /// - /// Name of function to call. + /// Name of function to call. /// Function pointer. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr ahkFindFunc( - [MarshalAs(UnmanagedType.LPWStr)] string FuncName); + public static extern IntPtr AhkFindFunc( + [MarshalAs(UnmanagedType.LPWStr)] string funcName); /// /// ahkFindLabel is used to get a pointer to the label. /// - /// Name of label. + /// Name of label. /// ahkFindLabel returns a pointer to a line where label points to. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr ahkFindLabel( - [MarshalAs(UnmanagedType.LPWStr)] string LabelName); + public static extern IntPtr AhkFindLabel( + [MarshalAs(UnmanagedType.LPWStr)] string labelName); /// - /// Build in function to get a pointer to the structure of a user-defined variable. + /// Build in function to get a pointer to the structure of a user-defined variable. /// - /// the name of the variable + /// the name of the variable /// The pointer to the variable. [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl, EntryPoint = "getVar")] public static extern IntPtr GetVar( - [MarshalAs(UnmanagedType.LPWStr)] string Variable); + [MarshalAs(UnmanagedType.LPWStr)] string variable); - #endregion + #endregion Advanced } - -} +} \ No newline at end of file diff --git a/AutoHotkey.Interop/AutoHotkeyEngine.cs b/AutoHotkey.Interop/src/AutoHotkeyEngine.cs similarity index 82% rename from AutoHotkey.Interop/AutoHotkeyEngine.cs rename to AutoHotkey.Interop/src/AutoHotkeyEngine.cs index ce9ceda6..164792f0 100644 --- a/AutoHotkey.Interop/AutoHotkeyEngine.cs +++ b/AutoHotkey.Interop/src/AutoHotkeyEngine.cs @@ -1,10 +1,5 @@ using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; namespace AutoHotkey.Interop { @@ -18,7 +13,7 @@ public AutoHotkeyEngine() Util.EnsureAutoHotkeyLoaded(); //ensure that a thread is started - AutoHotkeyDll.ahktextdll("", "", ""); + AutoHotkeyAPI.AhkTextDll("", "", ""); } /// @@ -28,7 +23,7 @@ public AutoHotkeyEngine() /// Returns the value of the variable, or an empty string if the variable does not exist. public string GetVar(string variableName) { - var p = AutoHotkeyDll.ahkgetvar(variableName, 0); + var p = AutoHotkeyAPI.AhkGetVar(variableName, 0); return Marshal.PtrToStringUni(p); } @@ -42,7 +37,7 @@ public void SetVar(string variableName, string value) if (value == null) value = ""; - AutoHotkeyDll.ahkassign(variableName, value); + AutoHotkeyAPI.AhkAssign(variableName, value); } /// @@ -53,8 +48,8 @@ public void SetVar(string variableName, string value) public string Eval(string code) { var codeToRun = "A__EVAL:=" + code; - AutoHotkeyDll.ahkExec(codeToRun); - return GetVar("A__EVAL"); + AutoHotkeyAPI.AhkExec(codeToRun); + return this.GetVar("A__EVAL"); } /// @@ -63,7 +58,7 @@ public string Eval(string code) /// The filepath of the script public void Load(string filePath) { - AutoHotkeyDll.addFile(filePath, 1, 1); + AutoHotkeyAPI.AddFile(filePath, 1, 1); } /// @@ -72,7 +67,7 @@ public void Load(string filePath) /// The code to execute public void ExecRaw(string code) { - AutoHotkeyDll.ahkExec(code); + AutoHotkeyAPI.AhkExec(code); } /// @@ -80,7 +75,7 @@ public void ExecRaw(string code) /// public void Terminate() { - AutoHotkeyDll.ahkTerminate(1000); + AutoHotkeyAPI.AhkTerminate(1000); } /// @@ -88,7 +83,7 @@ public void Terminate() /// public void Suspend() { - ExecRaw("Suspend, On"); + this.ExecRaw("Suspend, On"); } /// @@ -96,7 +91,7 @@ public void Suspend() /// public void UnSuspend() { - ExecRaw("Suspend, Off"); + this.ExecRaw("Suspend, Off"); } /// @@ -125,12 +120,9 @@ public string ExecFunction(string functionName, string param9 = null, string param10 = null) { - IntPtr ret = AutoHotkeyDll.ahkFunction(functionName, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); + IntPtr ret = AutoHotkeyAPI.AhkFunction(functionName, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); - if (ret == IntPtr.Zero) - return null; - else - return Marshal.PtrToStringUni(ret); + return ret == IntPtr.Zero ? null : Marshal.PtrToStringUni(ret); } @@ -141,7 +133,7 @@ public string ExecFunction(string functionName, /// Returns true if the function exists, otherwise false. public bool FunctionExists(string functionName) { - IntPtr funcptr = AutoHotkeyDll.ahkFindFunc(functionName); + IntPtr funcptr = AutoHotkeyAPI.AhkFindFunc(functionName); return funcptr != IntPtr.Zero; } @@ -151,7 +143,7 @@ public bool FunctionExists(string functionName) /// Name of the label. public void ExecLabel(string labelName) { - AutoHotkeyDll.ahkLabel(labelName, false); + AutoHotkeyAPI.AhkLabel(labelName, false); } /// @@ -161,8 +153,8 @@ public void ExecLabel(string labelName) /// Returns true if the label exists, otherwise false public bool LabelExists(string labelName) { - IntPtr labelptr = AutoHotkeyDll.ahkFindLabel(labelName); + IntPtr labelptr = AutoHotkeyAPI.AhkFindLabel(labelName); return labelptr != IntPtr.Zero; } } -} +} \ No newline at end of file diff --git a/AutoHotkey.Interop/SafeLibraryHandle.cs b/AutoHotkey.Interop/src/SafeLibraryHandle.cs similarity index 68% rename from AutoHotkey.Interop/SafeLibraryHandle.cs rename to AutoHotkey.Interop/src/SafeLibraryHandle.cs index 3d72447a..48f2f2c7 100644 --- a/AutoHotkey.Interop/SafeLibraryHandle.cs +++ b/AutoHotkey.Interop/src/SafeLibraryHandle.cs @@ -1,13 +1,9 @@ using Microsoft.Win32.SafeHandles; using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; -using System.Text; -using System.Threading.Tasks; namespace AutoHotkey.Interop { @@ -24,18 +20,15 @@ internal sealed class SafeLibraryHandle : SafeHandleZeroOrMinusOneIsInvalid [DllImport("kernel32.dll", SetLastError = true)] private static extern bool FreeLibrary(IntPtr hModule); - #endregion + #endregion Native Calls - private SafeLibraryHandle() : base(true) { } - - protected override bool ReleaseHandle() - { - return FreeLibrary(handle); + private SafeLibraryHandle() : base(true) + { } - - protected override void Dispose(bool disposing) + + protected override bool ReleaseHandle() { - base.Dispose(disposing); + return FreeLibrary(this.handle); } } -} +} \ No newline at end of file diff --git a/AutoHotkey.Interop/src/Util.cs b/AutoHotkey.Interop/src/Util.cs new file mode 100644 index 00000000..e014a1a2 --- /dev/null +++ b/AutoHotkey.Interop/src/Util.cs @@ -0,0 +1,102 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; + +namespace AutoHotkey.Interop +{ + internal static class Util + { + public static string FindEmbededResourceName(Assembly assembly, string path) + { + path = Regex.Replace(path, @"[/\\]", "."); + + if (!path.StartsWith(".")) + path = "." + path; + + var names = assembly.GetManifestResourceNames(); + + return names.FirstOrDefault(name => name.EndsWith(path)); + } + + public static void ExtractEmbeddedResourceToFile(Assembly assembly, string embededResourcePath, string targetFileName) + { + //ensure directory exists + FileInfo fi = new FileInfo(targetFileName); + if (!fi.Exists) + return; + + var dir = Path.GetDirectoryName(targetFileName); + if (dir != null) + { + DirectoryInfo di = new DirectoryInfo(dir); + if (!di.Exists) + di.Create(); + + using (var readStream = assembly.GetManifestResourceStream(embededResourcePath)) + { + using (var writeStream = File.Open(targetFileName, FileMode.Create)) + { + readStream?.CopyTo(writeStream); + readStream?.Flush(); + } + } + } + } + + public static bool Is64Bit() + { + return IntPtr.Size == 8; + } + + public static bool Is32Bit() + { + return IntPtr.Size == 4; + } + + + + public static void EnsureAutoHotkeyLoaded() + { + if (dllHandle.IsValueCreated) + return; + + var dummy = dllHandle.Value; + } + + private static readonly Lazy dllHandle = new Lazy(LoadAutoHotKeyDll); + + private static SafeLibraryHandle LoadAutoHotKeyDll() + { + //Locate and Load 32bit or 64bit version of AutoHotkey.dll + string tempFolderPath = Path.Combine(Path.GetTempPath(), "AutoHotkey.Interop"); + const string path32 = @"x86\AutoHotkey.dll"; + const string path64 = @"x64\AutoHotkey.dll"; + + var loadDllFromFileOrResource = new Func(relativePath => + { + if (File.Exists(relativePath)) + return SafeLibraryHandle.LoadLibrary(relativePath); + + var assembly = typeof(AutoHotkeyEngine).Assembly; + var resource = FindEmbededResourceName(assembly, relativePath); + + if (resource != null) + { + var target = Path.Combine(tempFolderPath, relativePath); + ExtractEmbeddedResourceToFile(assembly, resource, target); + return SafeLibraryHandle.LoadLibrary(target); + } + + return null; + }); + + return Is32Bit() + ? loadDllFromFileOrResource(path32) + : Is64Bit() + ? loadDllFromFileOrResource(path64) + : null; + } + } +} \ No newline at end of file diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index c69944e7..84f8c5f1 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -72,8 +72,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.6" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.6" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.8.3" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.8.3" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/SpotifyAdPlaying.png b/Toastify/Resources/SpotifyAdPlaying.png similarity index 100% rename from Toastify/SpotifyAdPlaying.png rename to Toastify/Resources/SpotifyAdPlaying.png diff --git a/Toastify/SpotifyLogo.png b/Toastify/Resources/SpotifyLogo.png similarity index 100% rename from Toastify/SpotifyLogo.png rename to Toastify/Resources/SpotifyLogo.png diff --git a/Toastify/SpotifyToastifyLogo.png b/Toastify/Resources/SpotifyToastifyLogo.png similarity index 100% rename from Toastify/SpotifyToastifyLogo.png rename to Toastify/Resources/SpotifyToastifyLogo.png diff --git a/Toastify/SpotifyToastifyUpdateLogo.png b/Toastify/Resources/SpotifyToastifyUpdateLogo.png similarity index 100% rename from Toastify/SpotifyToastifyUpdateLogo.png rename to Toastify/Resources/SpotifyToastifyUpdateLogo.png diff --git a/Toastify/ToastifyAccessDenied.png b/Toastify/Resources/ToastifyAccessDenied.png similarity index 100% rename from Toastify/ToastifyAccessDenied.png rename to Toastify/Resources/ToastifyAccessDenied.png diff --git a/Toastify/ScreenHelper.cs b/Toastify/ScreenHelper.cs deleted file mode 100644 index 9207968f..00000000 --- a/Toastify/ScreenHelper.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; - -namespace Toastify -{ - public static class ScreenHelper - { - - private const int SCREEN_RIGHT_MARGIN = 5; - private const int SCREEN_TOP_MARGIN = 5; - - public static Point GetDPIRatios() - { - var presentationSource = PresentationSource.FromVisual(Toast.Current); - - // if we hit this then Settings were loaded before the Toast window was - System.Diagnostics.Debug.Assert(presentationSource != null); - - if (presentationSource == null) - { - // return a default dpi ratio of 1 (96dpi) - return new Point(1, 1); - } - - return new Point( - presentationSource.CompositionTarget.TransformToDevice.M11, - presentationSource.CompositionTarget.TransformToDevice.M22 - ); - } - - public static System.Windows.Point GetDefaultToastPosition(double width, double height) - { - var screenRect = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; - - var dpiRatio = GetDPIRatios(); - - return new System.Windows.Point - ( - (screenRect.Width / dpiRatio.X) - width - SCREEN_RIGHT_MARGIN, - (screenRect.Height / dpiRatio.Y) - height - SCREEN_TOP_MARGIN - ); - } - } -} diff --git a/Toastify/Settings.xaml.cs b/Toastify/Settings.xaml.cs deleted file mode 100644 index 2055671e..00000000 --- a/Toastify/Settings.xaml.cs +++ /dev/null @@ -1,300 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; -using System.Data; -using System.Windows.Forms; -using System.Globalization; - -namespace Toastify -{ - /// - /// Logique d'interaction pour Window1.xaml - /// - public partial class Settings : Window - { - public SettingsXml settings; - private Toast toast; - - private List modifierKeys = new List { System.Windows.Input.Key.LeftCtrl, System.Windows.Input.Key.RightCtrl, System.Windows.Input.Key.LeftAlt, System.Windows.Input.Key.Right, System.Windows.Input.Key.LeftShift, System.Windows.Input.Key.RightShift, System.Windows.Input.Key.LWin, System.Windows.Input.Key.RWin, System.Windows.Input.Key.System }; - - private static Settings _current; - - public static void Launch(Toast toast) - { - if (_current != null) - { - _current.Activate(); - } - else - { - new Settings(toast).ShowDialog(); - } - } - - private Settings(Toast toast) - { - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.SettingsLaunched); - - this.settings = SettingsXml.Current.Clone(); - this.toast = toast; - - InitializeComponent(); - - //Data context initialisation - GeneralGrid.DataContext = this.settings; - - //Slider initialisation - try - { - slTopColor.Value = byte.Parse(settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); - slBottomColor.Value = byte.Parse(settings.ToastColorBottom.Substring(1, 2), NumberStyles.AllowHexSpecifier); - slBorderColor.Value = byte.Parse(settings.ToastBorderColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); - } - catch { } - - if (_current == null) - _current = this; - } - - private void Window_Closed(object sender, EventArgs e) - { - if (_current == this) - _current = null; - } - - //Change Color button click events - private void bChangeColorTop_Click(object sender, RoutedEventArgs e) - { - ColorDialog MyDialog = new ColorDialog(); - string alpha = settings.ToastColorTop.Substring(1, 2); - MyDialog.Color = HexToColor(settings.ToastColorTop); - MyDialog.ShowDialog(); - settings.ToastColorTop = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); - } - - private void bChangeColorBottom_Click(object sender, RoutedEventArgs e) - { - ColorDialog MyDialog = new ColorDialog(); - string alpha = settings.ToastColorBottom.Substring(1, 2); - MyDialog.Color = HexToColor(settings.ToastColorBottom); - MyDialog.ShowDialog(); - settings.ToastColorBottom = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); - } - - private void bChangeBorderColor_Click(object sender, RoutedEventArgs e) - { - ColorDialog MyDialog = new ColorDialog(); - string alpha = settings.ToastBorderColor.Substring(1, 2); - MyDialog.Color = HexToColor(settings.ToastBorderColor); - MyDialog.ShowDialog(); - settings.ToastBorderColor = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); - } - - //Default and Save blick events - private void bDefault_Click(object sender, RoutedEventArgs e) - { - settings.Default(); - SaveAndApplySettings(); - } - - private void bSave_Click(object sender, RoutedEventArgs e) - { - SaveAndApplySettings(); - } - - private void SaveAndApplySettings() - { - settings.Save(replaceCurrent: true); - - toast.InitToast(); - toast.DisplayAction(SpotifyAction.SettingsSaved, null); - } - - //Text box Mouse Wheel events - private void tbCornerTopLeft_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - { - settings.ToastBorderCornerRadiusTopLeft += 0.1; - } - else if (settings.ToastBorderCornerRadiusTopLeft >= 0.1) - settings.ToastBorderCornerRadiusTopLeft -= 0.1; - } - - private void tbCornerTopRight_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastBorderCornerRadiusTopRight += 0.1; - else if (settings.ToastBorderCornerRadiusTopLeft >= 0.1) - settings.ToastBorderCornerRadiusTopRight -= 0.1; - } - - private void tbCornerBottomRight_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastBorderCornerRadiusBottomRight += 0.1; - else if (settings.ToastBorderCornerRadiusBottomRight >= 0.1) - settings.ToastBorderCornerRadiusBottomRight -= 0.1; - } - - private void tbCornerBottomLeft_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastBorderCornerRadiusBottomLeft += 0.1; - else if (settings.ToastBorderCornerRadiusBottomLeft >= 0.1) - settings.ToastBorderCornerRadiusBottomLeft -= 0.1; - } - - private void tbFadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.FadeOutTime += 10; - else if (settings.FadeOutTime >= 10) - settings.FadeOutTime -= 10; - } - - private void tbBorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastBorderThickness++; - else if (settings.ToastBorderThickness >= 1) - settings.ToastBorderThickness--; - } - - private void tbToastWidth_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastWidth += 5; - else if (settings.ToastWidth >= 205) - settings.ToastWidth -= 5; - } - - private void tbToastHeight_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.ToastHeight += 5; - else if (settings.ToastHeight >= 70) - settings.ToastHeight -= 5; - } - - private void tbPositionLeft_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.PositionLeft++; - else if (settings.PositionLeft > 0) - settings.PositionLeft--; - } - - private void tbPositionTop_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - settings.PositionTop++; - else if (settings.PositionTop > 0) - settings.PositionTop--; - } - - //Slider value changed events - private void slTopColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(slTopColor.Value).ToString("X2"); - settings.ToastColorTop = "#" + transparency + settings.ToastColorTop.Substring(3); - } - - private void slBottomColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(slBottomColor.Value).ToString("X2"); - settings.ToastColorBottom = "#" + transparency + settings.ToastColorBottom.Substring(3); - } - - private void slBorderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(slBorderColor.Value).ToString("X2"); - settings.ToastBorderColor = "#" + transparency + settings.ToastBorderColor.Substring(3); - } - - // Hexadecimal to Color converter - public static System.Drawing.Color HexToColor(string hexColor) - { - //Remove # if present - if (hexColor.IndexOf('#') != -1) - hexColor = hexColor.Replace("#", ""); - - byte alpha = 0; - byte red = 0; - byte green = 0; - byte blue = 0; - - if (hexColor.Length == 8) - { - //#RRGGBB - alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); - red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); - green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); - } - - return System.Drawing.Color.FromArgb(alpha, red, green, blue); - } - - private void txtSingleKey_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) - { - e.Handled = true; - - var key = e.Key; - - if (key == Key.System) - { - key = e.SystemKey; - } - - txtSingleKey.Text = key.ToString(); - - Hotkey hotkey = lstHotKeys.SelectedItem as Hotkey; - - if (hotkey != null) - { - hotkey.Key = key; - } - } - - private void lstHotKeys_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - Hotkey hotkey = lstHotKeys.SelectedItem as Hotkey; - - if (hotkey != null) - { - txtSingleKey.Text = hotkey.Key.ToString(); - } - } - - private void btnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) - { - var dialog = new OpenFileDialog(); - - if (SettingsXml.Current.SaveTrackToFilePath != null) - { - dialog.FileName = SettingsXml.Current.SaveTrackToFilePath; - } - - dialog.CheckPathExists = true; - dialog.CheckFileExists = false; - dialog.ShowReadOnly = false; - - if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - settings.SaveTrackToFilePath = dialog.FileName; - } - } - - } -} diff --git a/Toastify/SettingsXml.cs b/Toastify/SettingsXml.cs deleted file mode 100644 index 38ac26f8..00000000 --- a/Toastify/SettingsXml.cs +++ /dev/null @@ -1,851 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; -using System.IO; -using System.ComponentModel; -using System.Globalization; -using Microsoft.Win32; - -namespace Toastify -{ - [Serializable] - public class SettingsXml : INotifyPropertyChanged - { - - #region Singleton - - private static SettingsXml _theOne; - - public static SettingsXml Current - { - get - { - if (_theOne == null) - { - _theOne = new SettingsXml(); - } - - return _theOne; - } - - private set - { - if (_theOne != null) - { - _theOne.UnloadSettings(); - - _theOne = value; - - _theOne.ApplySettings(); - } - } - } - - #endregion - - private const string REG_KEY_STARTUP = @"Software\Microsoft\Windows\CurrentVersion\Run"; - private const string SETTINGS_FILE = "Toastify.xml"; - - private bool _CloseSpotifyWithToastify; - private bool _MinimizeSpotifyOnStartup; - private bool _GlobalHotKeys; - private bool _DisableToast; - private bool _OnlyShowToastOnHotkey; - private bool? _AlwaysStartSpotify; - private bool _DontPromptToStartSpotify; - private bool _ChangeSpotifyVolumeOnly; - private int _FadeOutTime; - private string _ToastColorTop; - private string _ToastColorBottom; - private string _ToastBorderColor; - private double _ToastBorderThickness; - private double _ToastBorderCornerRadiusTopLeft; - private double _ToastBorderCornerRadiusTopRight; - private double _ToastBorderCornerRadiusBottomRight; - private double _ToastBorderCornerRadiusBottomLeft; - private double _PositionLeft; - private double _PositionTop; - private double _ToastWidth; - private double _ToastHeight; - private string _ClipboardTemplate; - private bool _SaveTrackToFile; - private string _SaveTrackToFilePath; - private bool _PreventAnalytics; - private bool _FirstRun; - private string _PreviousOS; - private string _PreviousVersion; - private bool _PreventSleepWhilePlaying; - private List _HotKeys; - public List Plugins { get; set; } - - private string _settingsFile; - - // used for both defaults and to synchronize the list of hotkeys when upgrading versions - // so that any newly added hotkeys are magically visible to the user (without them having to - // reset their settings) - private List _defaultHotKeys = new List - { - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Down , Action = SpotifyAction.Stop }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind }, - }; - - /// - /// Returns the location of the settings file - /// - [XmlIgnore] - public string SettingsFile - { - get - { - if (_settingsFile == null) - { - string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); - - if (!Directory.Exists(settingsPath)) - { - try - { - Directory.CreateDirectory(settingsPath); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine("Exception creating user settings directory (" + settingsPath + "). Exception: " + ex); - - // No messagebox as this should not happen (and there will be a MessageBox later on when - // settings fail to load) - } - } - - _settingsFile = Path.Combine(settingsPath, SETTINGS_FILE); - } - - return _settingsFile; - } - } - - // this is a dynamic setting depending on the existing registry key - // (which allows for it to be set reliably from the installer) - // so make sure to not include it in the XML file - [XmlIgnore] - public bool LaunchOnStartup - { - get { return IsSetToLaunchOnStartup(); } - set - { - NotifyPropertyChanged("LaunchOnStartup"); - - SetLaunchOnStartup(value); - } - } - - public bool MinimizeSpotifyOnStartup - { - get { return _MinimizeSpotifyOnStartup; } - set - { - if (_MinimizeSpotifyOnStartup != value) - { - _MinimizeSpotifyOnStartup = value; - NotifyPropertyChanged("MinimizeSpotifyOnStartup"); - } - } - } - - public bool CloseSpotifyWithToastify - { - get { return _CloseSpotifyWithToastify; } - set - { - if (_CloseSpotifyWithToastify != value) - { - _CloseSpotifyWithToastify = value; - NotifyPropertyChanged("CloseSpotifyWithToastify"); - } - } - } - - public bool GlobalHotKeys - { - get { return _GlobalHotKeys; } - set - { - if (_GlobalHotKeys != value) - { - _GlobalHotKeys = value; - NotifyPropertyChanged("GlobalHotKeys"); - } - } - } - - public bool OnlyShowToastOnHotkey - { - get { return _OnlyShowToastOnHotkey; } - set - { - if (_OnlyShowToastOnHotkey != value) - { - _OnlyShowToastOnHotkey = value; - - NotifyPropertyChanged("OnlyShowToastOnHotkey"); - } - } - } - - public bool DisableToast - { - get { return _DisableToast; } - set - { - if (_DisableToast != value) - { - _DisableToast = value; - - NotifyPropertyChanged("DisableToast"); - } - } - } - - public bool? AlwaysStartSpotify - { - get { return _AlwaysStartSpotify; } - set - { - if (_AlwaysStartSpotify != value) - { - _AlwaysStartSpotify = value; - - NotifyPropertyChanged("AlwaysStartSpotify"); - } - } - } - - public bool DontPromptToStartSpotify - { - get { return _DontPromptToStartSpotify; } - set - { - if (_DontPromptToStartSpotify != value) - { - _DontPromptToStartSpotify = value; - - NotifyPropertyChanged("DontPromptToStartSpotify"); - } - } - } - - public bool ChangeSpotifyVolumeOnly - { - get { return _ChangeSpotifyVolumeOnly; } - set - { - if (_ChangeSpotifyVolumeOnly != value) - { - _ChangeSpotifyVolumeOnly = value; - - NotifyPropertyChanged("ChangeSpotifyVolumeOnly"); - } - } - } - - public int FadeOutTime - { - get { return _FadeOutTime; } - set - { - if (_FadeOutTime != value) - { - _FadeOutTime = value; - - NotifyPropertyChanged("FadeOutTime"); - } - } - } - - public string ToastColorTop - { - get { return _ToastColorTop; } - set - { - if (_ToastColorTop != value) - { - _ToastColorTop = value; - - NotifyPropertyChanged("ToastColorTop"); - } - } - } - - public string ToastColorBottom - { - get { return _ToastColorBottom; } - set - { - if (_ToastColorBottom != value) - { - _ToastColorBottom = value; - - NotifyPropertyChanged("ToastColorBottom"); - } - } - } - - public string ToastBorderColor - { - get { return _ToastBorderColor; } - set - { - if (_ToastBorderColor != value) - { - _ToastBorderColor = value; - - NotifyPropertyChanged("ToastBorderColor"); - } - } - } - - public double ToastBorderThickness - { - get { return _ToastBorderThickness; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastBorderThickness != value) - { - _ToastBorderThickness = value; - - NotifyPropertyChanged("ToastBorderThickness"); - } - } - } - - public double ToastBorderCornerRadiusTopLeft - { - get { return _ToastBorderCornerRadiusTopLeft; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastBorderCornerRadiusTopLeft != value) - { - _ToastBorderCornerRadiusTopLeft = value; - - NotifyPropertyChanged("ToastBorderCornerRadiusTopLeft"); - } - } - } - - public double ToastBorderCornerRadiusTopRight - { - get { return _ToastBorderCornerRadiusTopRight; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastBorderCornerRadiusTopRight != value) - { - _ToastBorderCornerRadiusTopRight = value; - - NotifyPropertyChanged("ToastBorderCornerRadiusTopRight"); - } - } - } - - public double ToastBorderCornerRadiusBottomRight - { - get { return _ToastBorderCornerRadiusBottomRight; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastBorderCornerRadiusBottomRight != value) - { - _ToastBorderCornerRadiusBottomRight = value; - - NotifyPropertyChanged("ToastBorderCornerRadiusBottomRight"); - } - } - } - - public double ToastBorderCornerRadiusBottomLeft - { - get { return _ToastBorderCornerRadiusBottomLeft; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastBorderCornerRadiusBottomLeft != value) - { - _ToastBorderCornerRadiusBottomLeft = value; - - NotifyPropertyChanged("ToastBorderCornerRadiusBottomLeft"); - } - } - } - - public double ToastWidth - { - get { return _ToastWidth; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastWidth != value) - { - _ToastWidth = value; - - NotifyPropertyChanged("ToastWidth"); - } - } - } - - public double ToastHeight - { - get { return _ToastHeight; } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (_ToastHeight != value) - { - _ToastHeight = value; - - NotifyPropertyChanged("ToastHeight"); - } - } - } - - public double PositionLeft - { - get { return _PositionLeft; } - set - { - if (_PositionLeft != value) - { - _PositionLeft = value; - - NotifyPropertyChanged("PositionLeft"); - } - } - } - - public double PositionTop - { - get { return _PositionTop; } - set - { - if (_PositionTop != value) - { - _PositionTop = value; - - NotifyPropertyChanged("PositionTop"); - } - } - } - - public string ClipboardTemplate - { - get { return _ClipboardTemplate; } - set - { - if (_ClipboardTemplate != value) - { - _ClipboardTemplate = value; - - NotifyPropertyChanged("ClipboardTemplate"); - } - } - } - - public bool SaveTrackToFile - { - get { return _SaveTrackToFile; } - set - { - if (_SaveTrackToFile != value) - { - _SaveTrackToFile = value; - - NotifyPropertyChanged("SaveTrackToFile"); - } - } - } - - public string SaveTrackToFilePath - { - get { return _SaveTrackToFilePath; } - set - { - if (_SaveTrackToFilePath != value) - { - _SaveTrackToFilePath = value; - - NotifyPropertyChanged("SaveTrackToFilePath"); - } - } - } - - public bool PreventAnalytics - { - get { return _PreventAnalytics; } - set - { - if (_PreventAnalytics != value) - { - _PreventAnalytics = value; - - NotifyPropertyChanged("PreventAnalytics"); - } - } - } - - public bool FirstRun - { - get { return _FirstRun; } - set - { - if (_FirstRun != value) - { - _FirstRun = value; - - NotifyPropertyChanged("FirstRun"); - } - } - } - - public List HotKeys - { - get { return _HotKeys; } - set - { - if (_HotKeys != value) - { - _HotKeys = value; - - NotifyPropertyChanged("HotKeys"); - } - } - } - - public string PreviousOS - { - get { return _PreviousOS; } - set - { - if (_PreviousOS != value) - { - _PreviousOS = value; - - NotifyPropertyChanged("PreviousOS"); - } - } - } - - public string PreviousVersion - { - get { return _PreviousVersion; } - set - { - if (_PreviousVersion != value) - { - _PreviousVersion = value; - - NotifyPropertyChanged("PreviousVersion"); - } - } - } - - public bool PreventSleepWhilePlaying - { - get { return _PreventSleepWhilePlaying; } - set - { - if (_PreventSleepWhilePlaying != value) - { - _PreventSleepWhilePlaying = value; - - NotifyPropertyChanged("PreventSleepWhilePlaying"); - } - } - } - - public void Default(bool setHotKeys = false) - { - AlwaysStartSpotify = true; - DontPromptToStartSpotify = false; - CloseSpotifyWithToastify = true; - ChangeSpotifyVolumeOnly = false; - - FadeOutTime = 4000; - GlobalHotKeys = true; - DisableToast = false; - - ToastColorTop = "#FF000000"; - ToastColorBottom = "#FF000000"; - ToastBorderColor = "#FF000000"; - - ToastBorderThickness = 1.0; - - ToastWidth = 300; - ToastHeight = 75; - - ToastBorderCornerRadiusTopLeft = 0; - ToastBorderCornerRadiusTopRight = 0; - ToastBorderCornerRadiusBottomRight = 0; - ToastBorderCornerRadiusBottomLeft = 0; - - var position = ScreenHelper.GetDefaultToastPosition(ToastWidth, ToastHeight); - - PositionLeft = position.X; - PositionTop = position.Y; - - ClipboardTemplate = "I'm currently listening to {0}"; - - SaveTrackToFile = false; - PreventAnalytics = false; - PreventSleepWhilePlaying = false; - - Hotkey.ClearAll(); - - // only set hotkeys when it's requested (we don't set hotkeys when - // loading from XML since it will create duplicates) - if (setHotKeys) - HotKeys = _defaultHotKeys; - - Plugins = new List(); - - // there are a few settings that we don't really want to override when - // clearing settings (in fact these are more properties that we store - // alongside settings for convenience), so don't reset them if they have - // values - if (_theOne != null) - { - FirstRun = _theOne.FirstRun; - PreviousVersion = _theOne.PreviousVersion; - PreviousOS = _theOne.PreviousOS; - } - } - - public void Save(bool replaceCurrent = false) - { - using (StreamWriter sw = new StreamWriter(SettingsFile, false)) - { - XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); - xmlSerializer.Serialize(sw, this); - } - - if (replaceCurrent) - { - Current = this; - } - } - - public void Update() - { - if (PropertyChanged != null) - PropertyChanged(this, new PropertyChangedEventArgs(String.Empty)); - } - - private SettingsXml() - { - Default(); - } - - public SettingsXml Load() - { - if (!System.IO.File.Exists(SettingsFile)) - { - SettingsXml.Current.Default(setHotKeys: true); - SettingsXml.Current.Save(); - } - else - { - using (StreamReader sr = new StreamReader(SettingsFile)) - { - XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); - SettingsXml xml = xmlSerializer.Deserialize(sr) as SettingsXml; - - xml.CheckForNewSettings(); - - Current = xml; - } - } - - Current.SanitizeSettingsFile(); - - return Current; - } - - /// - /// Helpful place to fix common issues with settings files - /// - private void SanitizeSettingsFile() - { - if (this._HotKeys == null) - return; - - // let's collapse duplicate hotkeys - var toKeep = new List(); - - for (int i = 0; i < _defaultHotKeys.Count; i++) - { - var current = _defaultHotKeys[i]; - var keep = current; - - for (int j = 0; j < _HotKeys.Count; j++) - { - var compare = _HotKeys[j]; - - if (current.Action == compare.Action && compare.Enabled) - { - keep = compare; - } - } - - toKeep.Add(keep); - } - - // deactivate all of the old hotkeys, especially duplicate ones that are active - foreach (var hotkey in _HotKeys) - { - if (!toKeep.Contains(hotkey)) - hotkey.Deactivate(); - } - - _HotKeys = toKeep; - - Save(); - } - - /// - /// Called when loading a settings file to iterate through new dynamic properties (such as Hotkeys) - /// which may have changed and would otherwise be hidden from the user - /// - private void CheckForNewSettings() - { - foreach (var defaultHotkey in _defaultHotKeys) - { - bool found = false; - foreach (var hotkey in HotKeys) - { - if (hotkey.Action == defaultHotkey.Action) - { - found = true; - break; - } - } - - if (!found) - HotKeys.Add(defaultHotkey.Clone()); - } - } - - /// - /// Any active settings (such as hotkeys) should be triggered here - /// - private void ApplySettings() - { - - if (GlobalHotKeys) - { - foreach (Hotkey hotkey in HotKeys) - { - hotkey.Activate(); - } - } - } - - private bool IsSetToLaunchOnStartup() - { - RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, false); - - return (key.GetValue("Toastify", null) != null); - } - - private void SetLaunchOnStartup(bool enabled) - { - RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, true); - - if (enabled) - { - key.SetValue("Toastify", "\"" + System.Windows.Forms.Application.ExecutablePath + "\""); - } - else - { - key.DeleteValue("Toastify", false); - } - - key.Close(); - } - - /// - /// Any active settings (such as hotkeys) should be unloaded here - /// - private void UnloadSettings() - { - if (HotKeys != null) - { - foreach (Hotkey hotkey in HotKeys) - { - hotkey.Deactivate(); - } - } - } - - public SettingsXml Clone() - { - SettingsXml clone = MemberwiseClone() as SettingsXml; - - clone.HotKeys = new List(); - - foreach (Hotkey key in HotKeys) - { - clone.HotKeys.Add(key.Clone()); - } - - return clone; - } - - #region INotifyPropertyChanged - - public event PropertyChangedEventHandler PropertyChanged; - - private void NotifyPropertyChanged(String info) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - } - - #endregion - } - - [Serializable] - public class PluginDetails - { - public string FileName { get; set; } - public string TypeName { get; set; } - public string Settings { get; set; } - } -} diff --git a/Toastify/Spotify.cs b/Toastify/Spotify.cs deleted file mode 100644 index 9b911d8a..00000000 --- a/Toastify/Spotify.cs +++ /dev/null @@ -1,617 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using System.Threading; -using System.IO; -using System.Reflection; -using System.Net; -using Newtonsoft.Json; - -namespace Toastify -{ - internal class Win32 - { - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); - - internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); - - [DllImport("user32.dll")] - internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); - - [DllImport("user32.dll")] - internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); - - [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] - internal static extern int GetWindowTextLength(IntPtr hWnd); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] - internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll")] - internal static extern IntPtr SetFocus(IntPtr hWnd); - - [DllImport("user32.dll")] - internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); - - [DllImport("user32.dll")] - internal static extern bool SetForegroundWindow(IntPtr hWnd); - - [DllImport("user32.dll")] - internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags); - - [Flags()] - internal enum SetWindowPosFlags : uint - { - /// If the calling thread and the thread that owns the window are attached to different input queues, - /// the system posts the request to the thread that owns the window. This prevents the calling thread from - /// blocking its execution while other threads process the request. - /// SWP_ASYNCWINDOWPOS - AsynchronousWindowPosition = 0x4000, - /// Prevents generation of the WM_SYNCPAINT message. - /// SWP_DEFERERASE - DeferErase = 0x2000, - /// Draws a frame (defined in the window's class description) around the window. - /// SWP_DRAWFRAME - DrawFrame = 0x0020, - /// Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to - /// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE - /// is sent only when the window's size is being changed. - /// SWP_FRAMECHANGED - FrameChanged = 0x0020, - /// Hides the window. - /// SWP_HIDEWINDOW - HideWindow = 0x0080, - /// Does not activate the window. If this flag is not set, the window is activated and moved to the - /// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter - /// parameter). - /// SWP_NOACTIVATE - DoNotActivate = 0x0010, - /// Discards the entire contents of the client area. If this flag is not specified, the valid - /// contents of the client area are saved and copied back into the client area after the window is sized or - /// repositioned. - /// SWP_NOCOPYBITS - DoNotCopyBits = 0x0100, - /// Retains the current position (ignores X and Y parameters). - /// SWP_NOMOVE - IgnoreMove = 0x0002, - /// Does not change the owner window's position in the Z order. - /// SWP_NOOWNERZORDER - DoNotChangeOwnerZOrder = 0x0200, - /// Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to - /// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent - /// window uncovered as a result of the window being moved. When this flag is set, the application must - /// explicitly invalidate or redraw any parts of the window and parent window that need redrawing. - /// SWP_NOREDRAW - DoNotRedraw = 0x0008, - /// Same as the SWP_NOOWNERZORDER flag. - /// SWP_NOREPOSITION - DoNotReposition = 0x0200, - /// Prevents the window from receiving the WM_WINDOWPOSCHANGING message. - /// SWP_NOSENDCHANGING - DoNotSendChangingEvent = 0x0400, - /// Retains the current size (ignores the cx and cy parameters). - /// SWP_NOSIZE - IgnoreResize = 0x0001, - /// Retains the current Z order (ignores the hWndInsertAfter parameter). - /// SWP_NOZORDER - IgnoreZOrder = 0x0004, - /// Displays the window. - /// SWP_SHOWWINDOW - ShowWindow = 0x0040, - } - - internal struct WINDOWPLACEMENT - { - public int length; - public int flags; - public int showCmd; - public System.Drawing.Point ptMinPosition; - public System.Drawing.Point ptMaxPosition; - public System.Drawing.Rectangle rcNormalPosition; - } - - internal class Constants - { - internal const uint WM_APPCOMMAND = 0x0319; - - internal const int SW_SHOWMINIMIZED = 2; - internal const int SW_SHOWNOACTIVATE = 4; - internal const int SW_SHOWMINNOACTIVE = 7; - internal const int SW_SHOW = 5; - internal const int SW_RESTORE = 9; - - internal const int WM_CLOSE = 0x10; - internal const int WM_QUIT = 0x12; - } - } - - public enum SpotifyAction : long - { - None = 0, - ShowToast = 1, - ShowSpotify = 2, - CopyTrackInfo = 3, - SettingsSaved = 4, - PasteTrackInfo = 5, - ThumbsUp = 6, // not usable, left in for future (hopefully!) - ThumbsDown = 7, // not usable, left in for future (hopefully!) - PlayPause = 917504, - Mute = 524288, - VolumeDown = 589824, - VolumeUp = 655360, - Stop = 851968, - PreviousTrack = 786432, - NextTrack = 720896, - FastForward = 49 << 16, - Rewind = 50 << 16, - } - - public class Song - { - public string Artist { get; set; } - public string Track { get; set; } - public string Album { get; set; } - - public string CoverArtUrl { get; set; } - - public Song(string artist, string title, string album = null) - { - Artist = artist; - Track = title; - Album = album; - } - - public override string ToString() - { - if (Artist == null) - return Track; - - return string.Format("{0} - {1}", Artist, Track); - } - - internal bool IsValid() - { - return (!string.IsNullOrEmpty(Artist) || !string.IsNullOrEmpty(Track)); - } - - public override bool Equals(object obj) - { - var target = obj as Song; - - if (target == null) - return false; - - return (target.Artist == this.Artist && target.Track == this.Track); - } - - // overriding GetHashCode is "required" when overriding Equals - public override int GetHashCode() - { - return base.GetHashCode(); - } - } - - static class Spotify - { - private static AutoHotkey.Interop.AutoHotkeyEngine _ahk; - - public static void StartSpotify() - { - if (IsRunning()) - return; - - string spotifyPath = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; //string.Empty = (Default) value - - // try in the secondary location - if (string.IsNullOrEmpty(spotifyPath)) - { - spotifyPath = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; //string.Empty = (Default) value - } - - if (string.IsNullOrEmpty(spotifyPath)) - { - throw new ArgumentException("Could not find spotify path in registry"); - } - - // launch Spotify - var spotifyExe = Path.Combine(spotifyPath, "spotify.exe"); - - System.Diagnostics.Process.Start(spotifyExe); - - if (SettingsXml.Current.MinimizeSpotifyOnStartup) - { - Minimize(); - } - else - { - - // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively - // safe amount of time to wait, even if the pattern is gross. (Minimize() doesn't need it since - // it waits for the Window to appear before minimizing) - Thread.Sleep(2000); - } - } - - private static void Minimize() - { - var remainingSleep = 2000; - - IntPtr hWnd; - - // Since Minimize is often called during startup, the hWnd is often not created yet - // wait a maximum of remainingSleep for it to appear and then minimize it if it did. - while ((hWnd = Spotify.GetSpotify()) == IntPtr.Zero && remainingSleep > 0) - { - Thread.Sleep(100); - remainingSleep -= 100; - } - - if (hWnd != IntPtr.Zero) - { - // disgusting but sadly neccessary. Let Spotify initialize a bit before minimizing it - // otherwise the window hides itself and doesn't respond to taskbar clicks. - // I tried to work around this by waiting for the window size to initialize (via GetWindowRect) - // but that didn't work, there is some internal initialization that needs to occur. - Thread.Sleep(500); - Win32.ShowWindow(hWnd, Win32.Constants.SW_SHOWMINIMIZED); - } - } - - private static void KillProc(string name) - { - // let's play nice and try to gracefully clear out all Sync processes - var procs = System.Diagnostics.Process.GetProcessesByName(name); - - foreach (var proc in procs) - { - // lParam == Band Process Id, passed in below - Win32.EnumWindows(delegate(IntPtr hWnd, IntPtr lParam) - { - uint processId = 0; - Win32.GetWindowThreadProcessId(hWnd, out processId); - - // Essentially: Find every hWnd associated with this process and ask it to go away - if (processId == (uint)lParam) - { - Win32.SendMessage(hWnd, Win32.Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); - Win32.SendMessage(hWnd, Win32.Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); - } - - return true; - }, - (IntPtr)proc.Id); - } - - // let everything calm down - Thread.Sleep(1000); - - procs = System.Diagnostics.Process.GetProcessesByName(name); - - // ok, no more mister nice guy. Sadly. - foreach (var proc in procs) - { - try - { - proc.Kill(); - } - catch { } // ignore exceptions (usually due to trying to kill non-existant child processes - } - } - - public static void KillSpotify() - { - KillProc("spotify"); - } - - private static IntPtr GetSpotify() - { - var windowClassName = "SpotifyMainWindow"; - - return Win32.FindWindow(windowClassName, null); - } - - public static bool IsRunning() - { - return (GetSpotify() != IntPtr.Zero); - } - - public static Song GetCurrentSong() - { - if (!Spotify.IsRunning()) - return null; - - string song = ""; - string artist = ""; - string album = ""; - - IntPtr hWnd = GetSpotify(); - int length = Win32.GetWindowTextLength(hWnd); - StringBuilder sb = new StringBuilder(length + 1); - Win32.GetWindowText(hWnd, sb, sb.Capacity); - - string title = sb.ToString(); - - if (!string.IsNullOrWhiteSpace(title) && title != "Spotify") - { - // Unfortunately we don't have a great way to get the title from Spotify - // so we need to do some gymnastics. - // Music played from an artist's page is usually in the format "artist - song" - // while music played from a playlist is often in the format "artist - song - album" - // unfortunately this means that some songs that actually have a " - " in either the artist name - // or in the song name will potentially display incorrectly - var portions = title.Split(new string[] { " - " }, StringSplitOptions.None); - - song = (portions.Length > 1 ? portions[1] : null); - artist = portions[0]; - album = (portions.Length > 2 ? string.Join(" ", portions.Skip(2).ToArray()) : null); // take everything else that's left - - return new Song(artist, song, album); - } - - return null; - } - - public static void SetCoverArt(Song song) - { - // probably an ad, don't bother looking for an image - if (string.IsNullOrWhiteSpace(song.Track) || string.IsNullOrWhiteSpace(song.Artist)) - return; - - string imageUrl = null; - string spotifyTrackSearchURL = null; - var jsonResponse = string.Empty; - - try - { - // Spotify now have a full supported JSON-based web API that we can use to grab album art from tracks. Example URL: - // https://api.spotify.com/v1/search?query=track%3A%22Eagle%22+artist%3Aabba&offset=0&type=track - // - // Documentation: https://developer.spotify.com/web-api/migration-guide/ (great overview of functionality, even though it's a comparison guide) - - // temporary workaround for https://github.com/spotify/web-api/issues/191 - // essentially '/' is considered illegal, so we replace it with ' ' which generally returns the correct result - var artist = song.Artist.Replace('/', ' '); - var track = song.Track.Replace('/', ' '); - - spotifyTrackSearchURL = "https://api.spotify.com/v1/search?q=track%3A%22" + - Uri.EscapeDataString(track) + - "%22+artist%3A%22" + - Uri.EscapeDataString(artist) + - "%22&type=track"; - - using (var wc = new WebClient()) - { - jsonResponse += wc.DownloadString(spotifyTrackSearchURL); - } - - dynamic spotifyTracks = JsonConvert.DeserializeObject(jsonResponse); - - // iterate through all of the images, finding the smallest ones. This is usually the last - // one, but there is no guarantee in the docs. - int smallestWidth = int.MaxValue; - - // TryGetValue doesn't seem to work, so we're doing this old school - if (spotifyTracks != null && - spotifyTracks.tracks != null && - spotifyTracks.tracks.items != null && - spotifyTracks.tracks.items.First != null && - spotifyTracks.tracks.items.First.album != null && - spotifyTracks.tracks.items.First.album.images != null) - { - foreach (dynamic image in spotifyTracks.tracks.items.First.album.images) - { - if (image.width < smallestWidth) - { - imageUrl = image.url; - smallestWidth = image.width; - } - } - } - } - catch (WebException e) - { - System.Diagnostics.Debug.WriteLine("Web Exception grabbing Spotify track art:\n" + e); - - var response = e.Response as HttpWebResponse; - - if (response != null) - { - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, - "URL: " + spotifyTrackSearchURL + " \nError Code: " + response.StatusCode + " Dump: " + e.ToString()); - } - else - { - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, - "URL: " + spotifyTrackSearchURL + " \n[No Response] Dump: " + e.ToString()); - } - - throw; - } - catch (Exception e) - { - System.Diagnostics.Debug.WriteLine("Exception grabbing Spotify track art:\n" + e); - - var jsonSubstring = (jsonResponse == null ? null : - jsonResponse.Substring(0, - jsonResponse.Length > 100 ? 100 : jsonResponse.Length)); - - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.ResponseError, "URL: " + spotifyTrackSearchURL + " \nType: " + e.GetType().Name + " JSON excerpt: " + jsonSubstring +" dump: " + e.ToString()); - - throw; - } - - song.CoverArtUrl = imageUrl; - } - - public static string CurrentCoverImageUrl { get; set; } - - private static bool IsMinimized() - { - if (!Spotify.IsRunning()) - return false; - - var hWnd = Spotify.GetSpotify(); - - // check Spotify's current window state - var placement = new Win32.WINDOWPLACEMENT(); - Win32.GetWindowPlacement(hWnd, ref placement); - - return (placement.showCmd == Win32.Constants.SW_SHOWMINIMIZED); - } - - private static void ShowSpotifyWithNoActivate() - { - var hWnd = Spotify.GetSpotify(); - - // check Spotify's current window state - var placement = new Win32.WINDOWPLACEMENT(); - Win32.GetWindowPlacement(hWnd, ref placement); - - var flags = Win32.SetWindowPosFlags.DoNotActivate | Win32.SetWindowPosFlags.DoNotChangeOwnerZOrder | Win32.SetWindowPosFlags.ShowWindow; - - Win32.SetWindowPos(hWnd, (IntPtr)0, placement.rcNormalPosition.Left, placement.rcNormalPosition.Top, 0, 0, flags); - } - - private static void ShowSpotify() - { - if (Spotify.IsRunning()) - { - var hWnd = Spotify.GetSpotify(); - - // check Spotify's current window state - var placement = new Win32.WINDOWPLACEMENT(); - Win32.GetWindowPlacement(hWnd, ref placement); - - int showCommand = Win32.Constants.SW_SHOW; - - // if Spotify is minimzed we need to send a restore so that the window - // will come back exactly like it was before being minimized (i.e. maximized - // or otherwise) otherwise if we call SW_RESTORE on a currently maximized window - // then instead of staying maximized it will return to normal size. - if (placement.showCmd == Win32.Constants.SW_SHOWMINIMIZED) - { - showCommand = Win32.Constants.SW_RESTORE; - } - - Win32.ShowWindow(hWnd, showCommand); - - Win32.SetForegroundWindow(hWnd); - Win32.SetFocus(hWnd); - } - } - - public static void SendAction(SpotifyAction a) - { - if (!Spotify.IsRunning()) - return; - - // bah. Because control cannot fall through cases we need to special case volume - if (SettingsXml.Current.ChangeSpotifyVolumeOnly) - { - if (a == SpotifyAction.VolumeUp) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - - VolumeHelper.IncrementVolume("Spotify"); - return; - } - else if (a == SpotifyAction.VolumeDown) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - - VolumeHelper.DecrementVolume("Spotify"); - return; - } - else if (a == SpotifyAction.Mute) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - - VolumeHelper.ToggleApplicationMute("Spotify"); - return; - } - } - - switch (a) - { - case SpotifyAction.CopyTrackInfo: - case SpotifyAction.ShowToast: - //Nothing - break; - case SpotifyAction.ShowSpotify: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.ShowSpotify); - - - if (Spotify.IsMinimized()) - { - ShowSpotify(); - } - else - { - Minimize(); - } - - break; - case SpotifyAction.FastForward: - - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.FastForward); - - SendComplexKeys("+{Right}"); - break; - - case SpotifyAction.Rewind: - - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Rewind); - - SendComplexKeys("+{Left}"); - break; - - default: - - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Default + a.ToString()); - - Win32.SendMessage(GetSpotify(), Win32.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)a)); - break; - } - } - - /// - /// Some commands require sending keys directly to Spotify (for example, Fast Forward and Rewind which - /// are not handled by Spotify). We can't inject keys directly with WM_KEYDOWN/UP since we need a keyboard - /// hook to actually change the state of various modifier keys (for example, Shift + Right for Fast Forward). - /// - /// AutoHotKey has that hook and can modify the state for us, so let's take advantge of it. - /// - /// - private static void SendComplexKeys(string keys) - { - // Is this nicer? - // _ahk = _ahk ?? new AutoHotkey.Interop.AutoHotkeyEngine(); - - // only initialize AHK when needed as it can be expensive (dll copy etc) if not actually needed - if (_ahk == null) - { - _ahk = new AutoHotkey.Interop.AutoHotkeyEngine(); - } - - _ahk.ExecRaw("SetTitleMatchMode 2"); - - _ahk.ExecRaw("DetectHiddenWindows, On"); - _ahk.ExecRaw("ControlSend, ahk_parent, " + keys + ", ahk_class SpotifyMainWindow"); - - _ahk.ExecRaw("DetectHiddenWindows, Off"); - } - } -} diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 0cc48aae..2434c613 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -14,7 +14,7 @@ 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 - spotify.ico + Resources\spotify.ico Toastify.EntryPoint @@ -86,9 +86,8 @@ .\ManagedWinapi.dll - - ..\packages\Newtonsoft.Json.8.0.2\lib\net40\Newtonsoft.Json.dll - True + + ..\packages\Newtonsoft.Json.10.0.2\lib\net40\Newtonsoft.Json.dll @@ -120,52 +119,57 @@ - + MSBuild:Compile Designer MSBuild:Compile Designer - + + + + + Designer MSBuild:Compile MSBuild:Compile Designer - + Designer MSBuild:Compile - + MSBuild:Compile Designer MSBuild:Compile Designer - + App.xaml Code - - - - - - + + + + + + + Settings.xaml - - + + Toast.xaml Code - + About.xaml - - + + Code @@ -179,11 +183,11 @@ Settings.settings True - - - + + + - + ResXFileCodeGenerator Resources.Designer.cs @@ -200,16 +204,13 @@ - - - - + - + - + @@ -245,15 +246,15 @@ - - + + Always - + diff --git a/Toastify/VersionChecker.cs b/Toastify/VersionChecker.cs deleted file mode 100644 index e8c60b63..00000000 --- a/Toastify/VersionChecker.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Net; -using System.Text.RegularExpressions; -using System.Threading; -using System.Reflection; -using System.Diagnostics; - -namespace Toastify -{ - class VersionChecker - { - private static string _version; - - public static string Version - { - get - { - if (_version == null) - { - var assembly = Assembly.GetExecutingAssembly(); - var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); - - _version = fileVersionInfo.FileVersion; - - var thirdDot = _version.LastIndexOf('.'); - - _version = _version.Substring(0, thirdDot); - } - - return _version; - } - } - - public string UpdateUrl { get { return "https://toastify.codeplex.com/releases/view/24273"; } } - - WebClient wc; - - public event EventHandler CheckVersionComplete; - - public VersionChecker() - { - wc = new WebClient(); - wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); - } - - void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - string version = string.Empty; - bool newVersion = false; - - if (e.Cancelled == false && e.Error == null) - { - var match = Regex.Match(e.Result, "Version: (?[\\d+\\.]+)", RegexOptions.IgnoreCase | RegexOptions.Singleline); - - if (match.Success) - { - version = match.Groups["ver"].Value.Trim(); - newVersion = Version != version; - } - } - - if (this.CheckVersionComplete != null) - this.CheckVersionComplete(this, new CheckVersionCompleteEventArgs { Version = version, New = newVersion }); - } - - public void BeginCheckVersion() - { - Thread t = new Thread(ThreadedBeginCheckVersion); - t.IsBackground = true; - t.Start(); - } - - private void ThreadedBeginCheckVersion() - { - //WebClients XXXAsync isn't as async as I wanted... - wc.DownloadStringAsync(new Uri("http://toastify.codeplex.com/wikipage?title=Version")); - } - } - - class CheckVersionCompleteEventArgs : EventArgs - { - public string Version { get; set; } - public bool New { get; set; } - } -} diff --git a/Toastify/packages.config b/Toastify/packages.config index 7d8e055f..f0e83162 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/Toastify/spotify.ico b/Toastify/spotify.ico deleted file mode 100644 index 7c5312d6592ea3f7ab77d2642e42f4ff1624c686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47284 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%0DN5>dpVt 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 - - - - + + + + + diff --git a/Toastify/App.xaml.cs b/Toastify/src/App.xaml.cs similarity index 96% rename from Toastify/App.xaml.cs rename to Toastify/src/App.xaml.cs index 993e2e86..a56d1ea7 100644 --- a/Toastify/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,48 +1,49 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Windows; -using System.Threading; - -namespace Toastify -{ - //Special entry point to allow for single instance check - public class EntryPoint - { - [STAThread] - public static void Main(string[] args) - { - string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; - bool exclusive; - using (Mutex m = new Mutex(true, appSpecificGuid, out exclusive)) - { - if (exclusive) - { - App app = new App(); - app.InitializeComponent(); - - LastInputDebug.Start(); - - app.Run(); - } - else - { - MessageBox.Show("Toastify is already running!\n\nLook for the blue icon in your system tray.", "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); - } - } - } - } - - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application - { - private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) - { - Telemetry.TrackException(e.Exception); - } - } -} +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; +using System.Threading; +using Toastify.Services; + +namespace Toastify +{ + //Special entry point to allow for single instance check + public class EntryPoint + { + [STAThread] + public static void Main(string[] args) + { + string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; + bool exclusive; + using (Mutex m = new Mutex(true, appSpecificGuid, out exclusive)) + { + if (exclusive) + { + App app = new App(); + app.InitializeComponent(); + + LastInputDebug.Start(); + + app.Run(); + } + else + { + MessageBox.Show("Toastify is already running!\n\nLook for the blue icon in your system tray.", "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); + } + } + } + } + + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + { + Telemetry.TrackException(e.Exception); + } + } +} diff --git a/Toastify/HotKey.cs b/Toastify/src/Core/HotKey.cs similarity index 57% rename from Toastify/HotKey.cs rename to Toastify/src/Core/HotKey.cs index b23a2069..5519c3eb 100644 --- a/Toastify/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -1,411 +1,433 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.ComponentModel; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Reflection; -using System.Windows.Input; -using ManagedWinapi; -using System.Xml.Serialization; - -namespace Toastify -{ - public class Hotkey : INotifyPropertyChanged - { - private bool _enabled; - /// - /// Specifies whether or not the hotkey is enabled or disabled from a user's - /// perspective. Does not actually enable or disable the hotkey, use Activate() - /// and Deactivate(). - /// - /// Why do we have these two schemes? We need a way to be able to deactivate a - /// Hotkey (for example when unloading settings) without changing the Enabled - /// property (which only indicates the user's preference) - /// - public bool Enabled - { - get { return _enabled; } - set - { - if (_enabled != value) - { - _enabled = value; - - NotifyPropertyChanged("Enabled"); - } - } - } - - private bool _windowsKey; - public bool WindowsKey - { - get { return _windowsKey; } - set - { - if (_windowsKey != value) - { - _windowsKey = value; - - NotifyPropertyChanged("WindowsKey"); - - CheckIfValid(); - } - } - } - - - private bool _ctrl; - public bool Ctrl - { - get { return _ctrl; } - set - { - if (_ctrl != value) - { - _ctrl = value; - - NotifyPropertyChanged("Notify"); - - CheckIfValid(); - } - } - } - - private bool _alt; - public bool Alt - { - get { return _alt; } - set - { - if (_alt != value) - { - _alt = value; - - NotifyPropertyChanged("Alt"); - - CheckIfValid(); - } - } - } - - private bool _shift; - public bool Shift - { - get { return _shift; } - set - { - if (_shift != value) - { - _shift = value; - - NotifyPropertyChanged("Shift"); - - CheckIfValid(); - } - } - } - - - private Key _key; - public Key Key - { - get { return _key; } - set - { - if (_key != value) - { - _key = value; - - NotifyPropertyChanged("Key"); - - CheckIfValid(); - } - } - } - - private SpotifyAction _action; - public SpotifyAction Action - { - get { return _action; } - set - { - if (_action != value) - { - _action = value; - - NotifyPropertyChanged("Action"); - } - } - } - - [XmlIgnore] - public string HumanReadableAction - { - get - { - switch (Action) - { - case SpotifyAction.CopyTrackInfo: - return "Copy Track Name"; - - case SpotifyAction.PasteTrackInfo: - return "Paste Track Name"; - - case SpotifyAction.Mute: - return "Mute"; - - case SpotifyAction.NextTrack: - return "Next Track"; - - case SpotifyAction.None: - return "None"; - - case SpotifyAction.PlayPause: - return "Play / Pause"; - - case SpotifyAction.PreviousTrack: - return "Previous Track"; - - case SpotifyAction.SettingsSaved: - return "Settings Saved"; - - case SpotifyAction.ShowSpotify: - return "Show / Hide Spotify"; - - case SpotifyAction.ShowToast: - return "Show Toast"; - - case SpotifyAction.Stop: - return "Stop"; - - case SpotifyAction.VolumeDown: - return "Volume Down"; - - case SpotifyAction.VolumeUp: - return "Volume Up"; - - case SpotifyAction.FastForward: - return "Fast Forward"; - - case SpotifyAction.Rewind: - return "Rewind"; - - case SpotifyAction.ThumbsUp: - return "Thumbs Up"; - - case SpotifyAction.ThumbsDown: - return "Thunbs Down"; - } - - return "No Action"; - } - } - - private bool _isValid; - [XmlIgnore] - public bool IsValid - { - get { return _isValid; } - set - { - if (_isValid != value) - { - _isValid = value; - - NotifyPropertyChanged("IsValid"); - } - } - - } - - private string _invalidReason; - [XmlIgnore] - public string InvalidReason - { - get { return _invalidReason; } - set - { - if (_invalidReason != value) - { - _invalidReason = value; - - NotifyPropertyChanged("InvalidReason"); - } - } - } - - private bool _active = false; - private ManagedWinapi.Hotkey _globalKey; - - public Hotkey Clone() - { - Hotkey clone = MemberwiseClone() as Hotkey; - - // regardless of whether or not the original hotkey was active - // the cloned one should not start in an active state - clone._active = false; - - return clone; - } - - /// - /// Turn this HotKey off - /// - public void Deactivate() - { - SetActive(false); - } - - /// - /// Turn this hotkey on. Does nothing if this Hotkey is not enabled - /// - public void Activate() - { - SetActive(true); - } - - private void SetActive(bool value) - { - if (_active != value) - { - _active = value; - - InitGlobalKey(); - } - } - - private void InitGlobalKey() - { - // If we're not enabled shut everything done asap - if (!Enabled || !_active) - { - if (_globalKey != null) - { - _globalKey.Enabled = false; - _globalKey = null; // may as well collect the memory - } - - // may not be false if !Enabled - _active = false; - - return; - } - - if (_globalKey == null) - _globalKey = new ManagedWinapi.Hotkey(); - - // make sure that we don't try to reregister the key midway updating - // the combination - if (_globalKey.Enabled) - _globalKey.Enabled = false; - - _globalKey.WindowsKey = this.WindowsKey; - _globalKey.Alt = this.Alt; - _globalKey.Ctrl = this.Ctrl; - _globalKey.Shift = this.Shift; - _globalKey.KeyCode = ConvertInputKeyToFormsKeys(this.Key); - - _globalKey.HotkeyPressed += (s, e) => { Toast.ActionHookCallback(this); }; - - try - { - _globalKey.Enabled = true; - } - catch (HotkeyAlreadyInUseException) - { - IsValid = false; - InvalidReason = "Hotkey is already in use by a different program"; - } - } - - /// - /// Validity rules are: - /// - /// 1. Ctrl or Alt must be selected - /// 2. a key must be specified - /// - private void CheckIfValid() - { - if (Key == Key.None) - { - IsValid = false; - InvalidReason = "You must select a valid key for your hotkey combination"; - - return; - } - - IsValid = true; - InvalidReason = ""; - } - - #region Static Functions - - private static List _hotkeys = new List(); - - public static void ClearAll() - { - // disable will be called by the destructors, but we want to force a disable - // now so that we don't wait for the GC to clean up the objects - foreach (Hotkey hotkey in _hotkeys) - { - hotkey.Deactivate(); - } - - _hotkeys.Clear(); - } - - private static System.Windows.Forms.Keys ConvertInputKeyToFormsKeys(System.Windows.Input.Key key) - { - if (Enum.GetNames(typeof(System.Windows.Forms.Keys)).Contains(key.ToString())) - return (System.Windows.Forms.Keys)Enum.Parse(typeof(System.Windows.Forms.Keys), key.ToString()); - else - return Keys.None; - } - - #endregion - - private ManagedWinapi.Hotkey key = new ManagedWinapi.Hotkey(); - - public Hotkey() - { - _hotkeys.Add(this); - } - - ~Hotkey() - { - if (key != null) - key.Enabled = false; - } - - [XmlIgnore] - public string HumanReadableKey - { - get - { - StringBuilder sb = new StringBuilder(); - if (this.WindowsKey) sb.Append("Win+"); - if (this.Ctrl) sb.Append("Ctrl+"); - if (this.Alt) sb.Append("Alt+"); - if (this.Shift) sb.Append("Shift+"); - sb.Append(this.Key.ToString()); - return sb.ToString(); - } - } - - #region INotifyPropertyChanged - - public event PropertyChangedEventHandler PropertyChanged; - - private void NotifyPropertyChanged(String info) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - } - - #endregion - } -} +using ManagedWinapi; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Windows.Input; +using System.Xml.Serialization; +using Toastify.UI; + +namespace Toastify.Core +{ + public class Hotkey : INotifyPropertyChanged + { + private bool _enabled; + + /// + /// Specifies whether or not the hotkey is enabled or disabled from a user's + /// perspective. Does not actually enable or disable the hotkey, use Activate() + /// and Deactivate(). + /// + /// Why do we have these two schemes? We need a way to be able to deactivate a + /// Hotkey (for example when unloading settings) without changing the Enabled + /// property (which only indicates the user's preference) + /// + public bool Enabled + { + get + { + return this._enabled; + } + set + { + if (this._enabled != value) + { + this._enabled = value; + this.NotifyPropertyChanged("Enabled"); + } + } + } + + private bool _windowsKey; + + public bool WindowsKey + { + get + { + return this._windowsKey; + } + set + { + if (this._windowsKey != value) + { + this._windowsKey = value; + + this.NotifyPropertyChanged("WindowsKey"); + + this.CheckIfValid(); + } + } + } + + + private bool _ctrl; + + public bool Ctrl + { + get + { + return this._ctrl; + } + set + { + if (this._ctrl != value) + { + this._ctrl = value; + + this.NotifyPropertyChanged("Notify"); + + this.CheckIfValid(); + } + } + } + + private bool _alt; + + public bool Alt + { + get + { + return this._alt; + } + set + { + if (this._alt != value) + { + this._alt = value; + this.NotifyPropertyChanged("Alt"); + this.CheckIfValid(); + } + } + } + + private bool _shift; + + public bool Shift + { + get + { + return this._shift; + } + set + { + if (this._shift != value) + { + this._shift = value; + this.NotifyPropertyChanged("Shift"); + this.CheckIfValid(); + } + } + } + + + private Key _key; + + public Key Key + { + get + { + return this._key; + } + set + { + if (this._key != value) + { + this._key = value; + this.NotifyPropertyChanged("Key"); + this.CheckIfValid(); + } + } + } + + private SpotifyAction _action; + + public SpotifyAction Action + { + get + { + return this._action; + } + set + { + if (this._action != value) + { + this._action = value; + this.NotifyPropertyChanged("Action"); + } + } + } + + [XmlIgnore] + public string HumanReadableAction + { + get + { + switch (this.Action) + { + case SpotifyAction.CopyTrackInfo: + return "Copy Track Name"; + + case SpotifyAction.PasteTrackInfo: + return "Paste Track Name"; + + case SpotifyAction.Mute: + return "Mute"; + + case SpotifyAction.NextTrack: + return "Next Track"; + + case SpotifyAction.None: + return "None"; + + case SpotifyAction.PlayPause: + return "Play / Pause"; + + case SpotifyAction.PreviousTrack: + return "Previous Track"; + + case SpotifyAction.SettingsSaved: + return "Settings Saved"; + + case SpotifyAction.ShowSpotify: + return "Show / Hide Spotify"; + + case SpotifyAction.ShowToast: + return "Show Toast"; + + case SpotifyAction.Stop: + return "Stop"; + + case SpotifyAction.VolumeDown: + return "Volume Down"; + + case SpotifyAction.VolumeUp: + return "Volume Up"; + + case SpotifyAction.FastForward: + return "Fast Forward"; + + case SpotifyAction.Rewind: + return "Rewind"; + + case SpotifyAction.ThumbsUp: + return "Thumbs Up"; + + case SpotifyAction.ThumbsDown: + return "Thunbs Down"; + } + + return "No Action"; + } + } + + private bool _isValid; + + [XmlIgnore] + public bool IsValid + { + get + { + return this._isValid; + } + set + { + if (this._isValid != value) + { + this._isValid = value; + this.NotifyPropertyChanged("IsValid"); + } + } + } + + private string _invalidReason; + + [XmlIgnore] + public string InvalidReason + { + get + { + return this._invalidReason; + } + set + { + if (this._invalidReason != value) + { + this._invalidReason = value; + this.NotifyPropertyChanged("InvalidReason"); + } + } + } + + private bool _active; + private ManagedWinapi.Hotkey _globalKey; + + public Hotkey Clone() + { + Hotkey clone = this.MemberwiseClone() as Hotkey; + + // regardless of whether or not the original hotkey was active + // the cloned one should not start in an active state + if (clone != null) + clone._active = false; + + return clone; + } + + /// + /// Turn this HotKey off + /// + public void Deactivate() + { + this.SetActive(false); + } + + /// + /// Turn this hotkey on. Does nothing if this Hotkey is not enabled + /// + public void Activate() + { + this.SetActive(true); + } + + private void SetActive(bool value) + { + if (this._active != value) + { + this._active = value; + + this.InitGlobalKey(); + } + } + + private void InitGlobalKey() + { + // If we're not enabled shut everything done asap + if (!this.Enabled || !this._active) + { + if (this._globalKey != null) + { + this._globalKey.Enabled = false; + this._globalKey = null; // may as well collect the memory + } + + // may not be false if !Enabled + this._active = false; + + return; + } + + if (this._globalKey == null) + this._globalKey = new ManagedWinapi.Hotkey(); + + // make sure that we don't try to reregister the key midway updating + // the combination + if (this._globalKey.Enabled) + this._globalKey.Enabled = false; + + this._globalKey.WindowsKey = this.WindowsKey; + this._globalKey.Alt = this.Alt; + this._globalKey.Ctrl = this.Ctrl; + this._globalKey.Shift = this.Shift; + this._globalKey.KeyCode = ConvertInputKeyToFormsKeys(this.Key); + + this._globalKey.HotkeyPressed += (s, e) => { Toast.ActionHookCallback(this); }; + + try + { + this._globalKey.Enabled = true; + } + catch (HotkeyAlreadyInUseException) + { + this.IsValid = false; + this.InvalidReason = "Hotkey is already in use by a different program"; + } + } + + /// + /// Validity rules are: + /// + /// 1. Ctrl or Alt must be selected + /// 2. a key must be specified + /// + private void CheckIfValid() + { + if (this.Key == Key.None) + { + this.IsValid = false; + this.InvalidReason = "You must select a valid key for your hotkey combination"; + + return; + } + + this.IsValid = true; + this.InvalidReason = ""; + } + + #region Static Functions + + private static readonly List hotkeys = new List(); + + public static void ClearAll() + { + // disable will be called by the destructors, but we want to force a disable + // now so that we don't wait for the GC to clean up the objects + foreach (Hotkey hotkey in hotkeys) + { + hotkey.Deactivate(); + } + + hotkeys.Clear(); + } + + private static Keys ConvertInputKeyToFormsKeys(Key key) + { + if (Enum.GetNames(typeof(Keys)).Contains(key.ToString())) + return (Keys)Enum.Parse(typeof(Keys), key.ToString()); + + return Keys.None; + } + + #endregion Static Functions + + private readonly ManagedWinapi.Hotkey key = new ManagedWinapi.Hotkey(); + + public Hotkey() + { + hotkeys.Add(this); + } + + ~Hotkey() + { + if (this.key != null) + this.key.Enabled = false; + } + + [XmlIgnore] + public string HumanReadableKey + { + get + { + StringBuilder sb = new StringBuilder(); + if (this.WindowsKey) sb.Append("Win+"); + if (this.Ctrl) sb.Append("Ctrl+"); + if (this.Alt) sb.Append("Alt+"); + if (this.Shift) sb.Append("Shift+"); + sb.Append(this.Key); + return sb.ToString(); + } + } + + #region INotifyPropertyChanged + + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyPropertyChanged(string info) + { + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); + } + + #endregion INotifyPropertyChanged + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs new file mode 100644 index 00000000..2d9d5cb1 --- /dev/null +++ b/Toastify/src/Core/SettingsXml.cs @@ -0,0 +1,890 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Xml.Serialization; +using Toastify.Helpers; + +namespace Toastify.Core +{ + [Serializable] + public class SettingsXml : INotifyPropertyChanged + { + #region Singleton + + private static SettingsXml _instance; + + public static SettingsXml Instance + { + get + { + return _instance ?? (_instance = new SettingsXml()); + } + private set + { + if (_instance != null) + { + _instance.UnloadSettings(); + _instance = value; + _instance.ApplySettings(); + } + } + } + + #endregion Singleton + + private const string REG_KEY_STARTUP = @"Software\Microsoft\Windows\CurrentVersion\Run"; + private const string SETTINGS_FILE = "Toastify.xml"; + + private bool _CloseSpotifyWithToastify; + private bool _MinimizeSpotifyOnStartup; + private bool _GlobalHotKeys; + private bool _DisableToast; + private bool _OnlyShowToastOnHotkey; + private bool? _AlwaysStartSpotify; + private bool _DontPromptToStartSpotify; + private bool _ChangeSpotifyVolumeOnly; + private int _FadeOutTime; + private string _ToastColorTop; + private string _ToastColorBottom; + private string _ToastBorderColor; + private double _ToastBorderThickness; + private double _ToastBorderCornerRadiusTopLeft; + private double _ToastBorderCornerRadiusTopRight; + private double _ToastBorderCornerRadiusBottomRight; + private double _ToastBorderCornerRadiusBottomLeft; + private double _PositionLeft; + private double _PositionTop; + private double _ToastWidth; + private double _ToastHeight; + private string _ClipboardTemplate; + private bool _SaveTrackToFile; + private string _SaveTrackToFilePath; + private bool _PreventAnalytics; + private bool _FirstRun; + private string _PreviousOS; + private string _PreviousVersion; + private bool _PreventSleepWhilePlaying; + private List _HotKeys; + public List Plugins { get; set; } + + private string _settingsFile; + + // used for both defaults and to synchronize the list of hotkeys when upgrading versions + // so that any newly added hotkeys are magically visible to the user (without them having to + // reset their settings) + private readonly List _defaultHotKeys = new List + { + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Down , Action = SpotifyAction.Stop }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind }, + }; + + /// + /// Returns the location of the settings file + /// + [XmlIgnore] + public string SettingsFile + { + get + { + if (this._settingsFile == null) + { + string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); + + if (!Directory.Exists(settingsPath)) + { + try + { + Directory.CreateDirectory(settingsPath); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine("Exception creating user settings directory (" + settingsPath + "). Exception: " + ex); + + // No messagebox as this should not happen (and there will be a MessageBox later on when + // settings fail to load) + } + } + + this._settingsFile = Path.Combine(settingsPath, SETTINGS_FILE); + } + + return this._settingsFile; + } + } + + // this is a dynamic setting depending on the existing registry key + // (which allows for it to be set reliably from the installer) + // so make sure to not include it in the XML file + [XmlIgnore] + public bool LaunchOnStartup + { + get + { + return this.IsSetToLaunchOnStartup(); + } + set + { + this.NotifyPropertyChanged("LaunchOnStartup"); + this.SetLaunchOnStartup(value); + } + } + + public bool MinimizeSpotifyOnStartup + { + get + { + return this._MinimizeSpotifyOnStartup; + } + set + { + if (this._MinimizeSpotifyOnStartup != value) + { + this._MinimizeSpotifyOnStartup = value; + this.NotifyPropertyChanged("MinimizeSpotifyOnStartup"); + } + } + } + + public bool CloseSpotifyWithToastify + { + get + { + return this._CloseSpotifyWithToastify; + } + set + { + if (this._CloseSpotifyWithToastify != value) + { + this._CloseSpotifyWithToastify = value; + this.NotifyPropertyChanged("CloseSpotifyWithToastify"); + } + } + } + + public bool GlobalHotKeys + { + get + { + return this._GlobalHotKeys; + } + set + { + if (this._GlobalHotKeys != value) + { + this._GlobalHotKeys = value; + this.NotifyPropertyChanged("GlobalHotKeys"); + } + } + } + + public bool OnlyShowToastOnHotkey + { + get + { + return this._OnlyShowToastOnHotkey; + } + set + { + if (this._OnlyShowToastOnHotkey != value) + { + this._OnlyShowToastOnHotkey = value; + this.NotifyPropertyChanged("OnlyShowToastOnHotkey"); + } + } + } + + public bool DisableToast + { + get + { + return this._DisableToast; + } + set + { + if (this._DisableToast != value) + { + this._DisableToast = value; + this.NotifyPropertyChanged("DisableToast"); + } + } + } + + public bool? AlwaysStartSpotify + { + get + { + return this._AlwaysStartSpotify; + } + set + { + if (this._AlwaysStartSpotify != value) + { + this._AlwaysStartSpotify = value; + this.NotifyPropertyChanged("AlwaysStartSpotify"); + } + } + } + + public bool DontPromptToStartSpotify + { + get + { + return this._DontPromptToStartSpotify; + } + set + { + if (this._DontPromptToStartSpotify != value) + { + this._DontPromptToStartSpotify = value; + this.NotifyPropertyChanged("DontPromptToStartSpotify"); + } + } + } + + public bool ChangeSpotifyVolumeOnly + { + get + { + return this._ChangeSpotifyVolumeOnly; + } + set + { + if (this._ChangeSpotifyVolumeOnly != value) + { + this._ChangeSpotifyVolumeOnly = value; + this.NotifyPropertyChanged("ChangeSpotifyVolumeOnly"); + } + } + } + + public int FadeOutTime + { + get + { + return this._FadeOutTime; + } + set + { + if (this._FadeOutTime != value) + { + this._FadeOutTime = value; + this.NotifyPropertyChanged("FadeOutTime"); + } + } + } + + public string ToastColorTop + { + get + { + return this._ToastColorTop; + } + set + { + if (this._ToastColorTop != value) + { + this._ToastColorTop = value; + this.NotifyPropertyChanged("ToastColorTop"); + } + } + } + + public string ToastColorBottom + { + get + { + return this._ToastColorBottom; + } + set + { + if (this._ToastColorBottom != value) + { + this._ToastColorBottom = value; + this.NotifyPropertyChanged("ToastColorBottom"); + } + } + } + + public string ToastBorderColor + { + get + { + return this._ToastBorderColor; + } + set + { + if (this._ToastBorderColor != value) + { + this._ToastBorderColor = value; + this.NotifyPropertyChanged("ToastBorderColor"); + } + } + } + + public double ToastBorderThickness + { + get + { + return this._ToastBorderThickness; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastBorderThickness - value) > double.Epsilon) + { + this._ToastBorderThickness = value; + this.NotifyPropertyChanged("ToastBorderThickness"); + } + } + } + + public double ToastBorderCornerRadiusTopLeft + { + get + { + return this._ToastBorderCornerRadiusTopLeft; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastBorderCornerRadiusTopLeft - value) > double.Epsilon) + { + this._ToastBorderCornerRadiusTopLeft = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusTopLeft"); + } + } + } + + public double ToastBorderCornerRadiusTopRight + { + get + { + return this._ToastBorderCornerRadiusTopRight; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastBorderCornerRadiusTopRight - value) > double.Epsilon) + { + this._ToastBorderCornerRadiusTopRight = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusTopRight"); + } + } + } + + public double ToastBorderCornerRadiusBottomRight + { + get + { + return this._ToastBorderCornerRadiusBottomRight; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastBorderCornerRadiusBottomRight - value) > double.Epsilon) + { + this._ToastBorderCornerRadiusBottomRight = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomRight"); + } + } + } + + public double ToastBorderCornerRadiusBottomLeft + { + get + { + return this._ToastBorderCornerRadiusBottomLeft; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastBorderCornerRadiusBottomLeft - value) > double.Epsilon) + { + this._ToastBorderCornerRadiusBottomLeft = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomLeft"); + } + } + } + + public double ToastWidth + { + get + { + return this._ToastWidth; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastWidth - value) > double.Epsilon) + { + this._ToastWidth = value; + this.NotifyPropertyChanged("ToastWidth"); + } + } + } + + public double ToastHeight + { + get + { + return this._ToastHeight; + } + set + { + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._ToastHeight - value) > double.Epsilon) + { + this._ToastHeight = value; + this.NotifyPropertyChanged("ToastHeight"); + } + } + } + + public double PositionLeft + { + get + { + return this._PositionLeft; + } + set + { + if (Math.Abs(this._PositionLeft - value) > double.Epsilon) + { + this._PositionLeft = value; + this.NotifyPropertyChanged("PositionLeft"); + } + } + } + + public double PositionTop + { + get + { + return this._PositionTop; + } + set + { + if (Math.Abs(this._PositionTop - value) > double.Epsilon) + { + this._PositionTop = value; + this.NotifyPropertyChanged("PositionTop"); + } + } + } + + public string ClipboardTemplate + { + get + { + return this._ClipboardTemplate; + } + set + { + if (this._ClipboardTemplate != value) + { + this._ClipboardTemplate = value; + this.NotifyPropertyChanged("ClipboardTemplate"); + } + } + } + + public bool SaveTrackToFile + { + get + { + return this._SaveTrackToFile; + } + set + { + if (this._SaveTrackToFile != value) + { + this._SaveTrackToFile = value; + this.NotifyPropertyChanged("SaveTrackToFile"); + } + } + } + + public string SaveTrackToFilePath + { + get + { + return this._SaveTrackToFilePath; + } + set + { + if (this._SaveTrackToFilePath != value) + { + this._SaveTrackToFilePath = value; + this.NotifyPropertyChanged("SaveTrackToFilePath"); + } + } + } + + public bool PreventAnalytics + { + get + { + return this._PreventAnalytics; + } + set + { + if (this._PreventAnalytics != value) + { + this._PreventAnalytics = value; + this.NotifyPropertyChanged("PreventAnalytics"); + } + } + } + + public bool FirstRun + { + get + { + return this._FirstRun; + } + set + { + if (this._FirstRun != value) + { + this._FirstRun = value; + this.NotifyPropertyChanged("FirstRun"); + } + } + } + + public List HotKeys + { + get + { + return this._HotKeys; + } + set + { + if (this._HotKeys != value) + { + this._HotKeys = value; + this.NotifyPropertyChanged("HotKeys"); + } + } + } + + public string PreviousOS + { + get + { + return this._PreviousOS; + } + set + { + if (this._PreviousOS != value) + { + this._PreviousOS = value; + this.NotifyPropertyChanged("PreviousOS"); + } + } + } + + public string PreviousVersion + { + get + { + return this._PreviousVersion; + } + set + { + if (this._PreviousVersion != value) + { + this._PreviousVersion = value; + this.NotifyPropertyChanged("PreviousVersion"); + } + } + } + + public bool PreventSleepWhilePlaying + { + get + { + return this._PreventSleepWhilePlaying; + } + set + { + if (this._PreventSleepWhilePlaying != value) + { + this._PreventSleepWhilePlaying = value; + this.NotifyPropertyChanged("PreventSleepWhilePlaying"); + } + } + } + + public void Default(bool setHotKeys = false) + { + this.AlwaysStartSpotify = true; + this.DontPromptToStartSpotify = false; + this.CloseSpotifyWithToastify = true; + this.ChangeSpotifyVolumeOnly = false; + + this.FadeOutTime = 4000; + this.GlobalHotKeys = true; + this.DisableToast = false; + + this.ToastColorTop = "#FF000000"; + this.ToastColorBottom = "#FF000000"; + this.ToastBorderColor = "#FF000000"; + + this.ToastBorderThickness = 1.0; + + this.ToastWidth = 300; + this.ToastHeight = 75; + + this.ToastBorderCornerRadiusTopLeft = 0; + this.ToastBorderCornerRadiusTopRight = 0; + this.ToastBorderCornerRadiusBottomRight = 0; + this.ToastBorderCornerRadiusBottomLeft = 0; + + var position = ScreenHelper.GetDefaultToastPosition(this.ToastWidth, this.ToastHeight); + + this.PositionLeft = position.X; + this.PositionTop = position.Y; + + this.ClipboardTemplate = "I'm currently listening to {0}"; + + this.SaveTrackToFile = false; + this.PreventAnalytics = false; + this.PreventSleepWhilePlaying = false; + + Hotkey.ClearAll(); + + // only set hotkeys when it's requested (we don't set hotkeys when + // loading from XML since it will create duplicates) + if (setHotKeys) + this.HotKeys = this._defaultHotKeys; + + this.Plugins = new List(); + + // there are a few settings that we don't really want to override when + // clearing settings (in fact these are more properties that we store + // alongside settings for convenience), so don't reset them if they have + // values + if (_instance != null) + { + this.FirstRun = _instance.FirstRun; + this.PreviousVersion = _instance.PreviousVersion; + this.PreviousOS = _instance.PreviousOS; + } + } + + public void Save(bool replaceCurrent = false) + { + using (StreamWriter sw = new StreamWriter(this.SettingsFile, false)) + { + XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); + xmlSerializer.Serialize(sw, this); + } + + if (replaceCurrent) + { + Instance = this; + } + } + + public void Update() + { + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(String.Empty)); + } + + private SettingsXml() + { + this.Default(); + } + + public SettingsXml Load() + { + if (!File.Exists(this.SettingsFile)) + { + Instance.Default(true); + Instance.Save(); + } + else + { + using (StreamReader sr = new StreamReader(this.SettingsFile)) + { + XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); + SettingsXml xml = xmlSerializer.Deserialize(sr) as SettingsXml; + + xml?.CheckForNewSettings(); + + Instance = xml; + } + } + + Instance?.SanitizeSettingsFile(); + + return Instance; + } + + /// + /// Helpful place to fix common issues with settings files + /// + private void SanitizeSettingsFile() + { + if (this._HotKeys == null) + return; + + // let's collapse duplicate hotkeys + var toKeep = new List(); + + foreach (Hotkey current in this._defaultHotKeys) + { + Hotkey keep = current; + + foreach (Hotkey compare in this._HotKeys) + { + if (current.Action == compare.Action && compare.Enabled) + keep = compare; + } + + toKeep.Add(keep); + } + + // deactivate all of the old hotkeys, especially duplicate ones that are active + foreach (Hotkey hotkey in this._HotKeys) + { + if (!toKeep.Contains(hotkey)) + hotkey.Deactivate(); + } + + this._HotKeys = toKeep; + + this.Save(); + } + + /// + /// Called when loading a settings file to iterate through new dynamic properties (such as Hotkeys) + /// which may have changed and would otherwise be hidden from the user + /// + private void CheckForNewSettings() + { + foreach (Hotkey defaultHotkey in this._defaultHotKeys) + { + bool found = this.HotKeys.Any(hotkey => hotkey.Action == defaultHotkey.Action); + + if (!found) + this.HotKeys.Add(defaultHotkey.Clone()); + } + } + + /// + /// Any active settings (such as hotkeys) should be triggered here + /// + private void ApplySettings() + { + if (this.GlobalHotKeys) + { + foreach (Hotkey hotkey in this.HotKeys) + { + hotkey.Activate(); + } + } + } + + private bool IsSetToLaunchOnStartup() + { + RegistryKey key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, false); + + return key?.GetValue("Toastify", null) != null; + } + + private void SetLaunchOnStartup(bool enabled) + { + RegistryKey key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, true); + + if (enabled) + key?.SetValue("Toastify", "\"" + System.Windows.Forms.Application.ExecutablePath + "\""); + else + key?.DeleteValue("Toastify", false); + + key?.Close(); + } + + /// + /// Any active settings (such as hotkeys) should be unloaded here + /// + private void UnloadSettings() + { + if (this.HotKeys != null) + { + foreach (Hotkey hotkey in this.HotKeys) + { + hotkey.Deactivate(); + } + } + } + + public SettingsXml Clone() + { + SettingsXml clone = this.MemberwiseClone() as SettingsXml; + + if (clone != null) + { + clone.HotKeys = new List(); + + foreach (Hotkey key in this.HotKeys) + { + clone.HotKeys.Add(key.Clone()); + } + } + + return clone; + } + + #region INotifyPropertyChanged + + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyPropertyChanged(string info) + { + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); + } + + #endregion INotifyPropertyChanged + } +} + +namespace Toastify +{ + [Serializable] + public class PluginDetails + { + public string FileName { get; set; } + public string TypeName { get; set; } + public string Settings { get; set; } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs new file mode 100644 index 00000000..b625165d --- /dev/null +++ b/Toastify/src/Core/Song.cs @@ -0,0 +1,43 @@ +namespace Toastify.Core +{ + public class Song + { + public string Artist { get; set; } + public string Track { get; set; } + public string Album { get; set; } + + public string CoverArtUrl { get; set; } + + public Song(string artist, string title, string album = null) + { + this.Artist = artist; + this.Track = title; + this.Album = album; + } + + public override string ToString() + { + return this.Artist == null ? this.Track : $"{this.Artist} – {this.Track}"; + } + + internal bool IsValid() + { + return !string.IsNullOrEmpty(this.Artist) || !string.IsNullOrEmpty(this.Track); + } + + public override bool Equals(object obj) + { + var target = obj as Song; + if (target == null) + return false; + + return target.Artist == this.Artist && target.Track == this.Track; + } + + // overriding GetHashCode is "required" when overriding Equals + public override int GetHashCode() + { + return base.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs new file mode 100644 index 00000000..f35a9616 --- /dev/null +++ b/Toastify/src/Core/Spotify.cs @@ -0,0 +1,385 @@ +using Microsoft.Win32; +using Newtonsoft.Json; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using Toastify.Core; +using Toastify.Helpers; +using Toastify.Services; + +namespace Toastify +{ + internal static class Spotify + { + private static AutoHotkey.Interop.AutoHotkeyEngine _ahk; + + public static string CurrentCoverImageUrl { get; set; } + + public static void StartSpotify() + { + if (IsRunning()) + return; + + string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + + // try in the secondary location + if (string.IsNullOrEmpty(spotifyPath)) + spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + + if (string.IsNullOrEmpty(spotifyPath)) + throw new ArgumentException("Could not find spotify path in registry"); + + // launch Spotify + var spotifyExe = Path.Combine(spotifyPath, "spotify.exe"); + + Process.Start(spotifyExe); + + if (SettingsXml.Instance.MinimizeSpotifyOnStartup) + Minimize(); + else + { + // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively + // safe amount of time to wait, even if the pattern is gross. (Minimize() doesn't need it since + // it waits for the Window to appear before minimizing) + Thread.Sleep(2000); + } + } + + private static void Minimize() + { + var remainingSleep = 2000; + + IntPtr hWnd; + + // Since Minimize is often called during startup, the hWnd is often not created yet + // wait a maximum of remainingSleep for it to appear and then minimize it if it did. + while ((hWnd = GetSpotify()) == IntPtr.Zero && remainingSleep > 0) + { + Thread.Sleep(100); + remainingSleep -= 100; + } + + if (hWnd != IntPtr.Zero) + { + // disgusting but sadly neccessary. Let Spotify initialize a bit before minimizing it + // otherwise the window hides itself and doesn't respond to taskbar clicks. + // I tried to work around this by waiting for the window size to initialize (via GetWindowRect) + // but that didn't work, there is some internal initialization that needs to occur. + Thread.Sleep(500); + Win32API.ShowWindow(hWnd, Win32API.Constants.SW_SHOWMINIMIZED); + } + } + + private static void KillProc(string name) + { + // let's play nice and try to gracefully clear out all Sync processes + var procs = Process.GetProcessesByName(name); + + foreach (var proc in procs) + { + // lParam == Band Process Id, passed in below + Win32API.EnumWindows(delegate (IntPtr hWnd, IntPtr lParam) + { + Win32API.GetWindowThreadProcessId(hWnd, out uint processId); + + // Essentially: Find every hWnd associated with this process and ask it to go away + if (processId == (uint)lParam) + { + Win32API.SendMessage(hWnd, Win32API.Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + Win32API.SendMessage(hWnd, Win32API.Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); + } + + return true; + }, + (IntPtr)proc.Id); + } + + // let everything calm down + Thread.Sleep(1000); + + procs = Process.GetProcessesByName(name); + + // ok, no more mister nice guy. Sadly. + foreach (var proc in procs) + { + try + { + proc.Kill(); + } + catch + { + // ignore exceptions (usually due to trying to kill non-existant child processes + } + } + } + + public static void KillSpotify() + { + KillProc("spotify"); + } + + private static IntPtr GetSpotify() + { + return Win32API.FindWindow("SpotifyMainWindow", null); + } + + public static bool IsRunning() + { + return GetSpotify() != IntPtr.Zero; + } + + public static Song GetCurrentSong() + { + if (!IsRunning()) + return null; + + IntPtr hWnd = GetSpotify(); + int length = Win32API.GetWindowTextLength(hWnd); + StringBuilder sb = new StringBuilder(length + 1); + Win32API.GetWindowText(hWnd, sb, sb.Capacity); + + string title = sb.ToString(); + + if (!string.IsNullOrWhiteSpace(title) && title != "Spotify") + { + // Unfortunately we don't have a great way to get the title from Spotify + // so we need to do some gymnastics. + // Music played from an artist's page is usually in the format "artist - song" + // while music played from a playlist is often in the format "artist - song - album" + // unfortunately this means that some songs that actually have a " - " in either the artist name + // or in the song name will potentially display incorrectly + var portions = title.Split(new[] { " - " }, StringSplitOptions.None); + + string song = portions.Length > 1 ? portions[1] : null; + string artist = portions[0]; + string album = portions.Length > 2 ? string.Join(" ", portions.Skip(2).ToArray()) : null; + + return new Song(artist, song, album); + } + + return null; + } + + public static void SetCoverArt(Song song) + { + // probably an ad, don't bother looking for an image + if (string.IsNullOrWhiteSpace(song.Track) || string.IsNullOrWhiteSpace(song.Artist)) + return; + + string imageUrl = null; + string spotifyTrackSearchURL = null; + var jsonResponse = string.Empty; + + try + { + // Spotify now has a full supported JSON-based web API that we can use to grab album art from tracks. Example URL: + // https://api.spotify.com/v1/search?query=track%3A%22Eagle%22+artist%3Aabba&offset=0&type=track + // + // Documentation: https://developer.spotify.com/web-api/migration-guide/ (great overview of functionality, even though it's a comparison guide) + + // temporary workaround for https://github.com/spotify/web-api/issues/191 + // essentially '/' is considered illegal, so we replace it with ' ' which generally returns the correct result + var artist = song.Artist.Replace('/', ' '); + var track = song.Track.Replace('/', ' '); + + spotifyTrackSearchURL = $"https://api.spotify.com/v1/search?q=track%3A%22{Uri.EscapeDataString(track)}%22+artist%3A%22{Uri.EscapeDataString(artist)}%22&type=track"; + + using (var wc = new WebClient()) + { + jsonResponse += wc.DownloadString(spotifyTrackSearchURL); + } + + dynamic spotifyTracks = JsonConvert.DeserializeObject(jsonResponse); + + // iterate through all of the images, finding the smallest ones. This is usually the last + // one, but there is no guarantee in the docs. + int smallestWidth = int.MaxValue; + + // TryGetValue doesn't seem to work, so we're doing this old school + if (spotifyTracks?.tracks?.items?.First?.album?.images != null) + { + foreach (dynamic image in spotifyTracks.tracks.items.First.album.images) + { + if (image.width < smallestWidth) + { + imageUrl = image.url; + smallestWidth = image.width; + } + } + } + } + catch (WebException e) + { + Debug.WriteLine($"Web Exception grabbing Spotify track art:\n{e}"); + + if (e.Response is HttpWebResponse response) + { + Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, + $"URL: {spotifyTrackSearchURL} \nError Code: {response.StatusCode} Dump: {e}"); + } + else + { + Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, + $"URL: {spotifyTrackSearchURL} \n[No Response] Dump: {e}"); + } + + throw; + } + catch (Exception e) + { + Debug.WriteLine("Exception grabbing Spotify track art:\n" + e); + + var jsonSubstring = jsonResponse.Substring(0, jsonResponse.Length > 100 ? 100 : jsonResponse.Length); + + Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.ResponseError, + $"URL: {spotifyTrackSearchURL} \nType: {e.GetType().Name} JSON excerpt: {jsonSubstring} dump: {e}"); + + throw; + } + + song.CoverArtUrl = imageUrl; + } + + private static bool IsMinimized() + { + if (!IsRunning()) + return false; + + var hWnd = GetSpotify(); + + // check Spotify's current window state + var placement = new Win32API.WindowPlacement(); + Win32API.GetWindowPlacement(hWnd, ref placement); + + return placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED; + } + + private static void ShowSpotifyWithNoActivate() + { + var hWnd = GetSpotify(); + + // check Spotify's current window state + var placement = new Win32API.WindowPlacement(); + Win32API.GetWindowPlacement(hWnd, ref placement); + + const Win32API.SetWindowPosFlags flags = Win32API.SetWindowPosFlags.DoNotActivate | Win32API.SetWindowPosFlags.DoNotChangeOwnerZOrder | Win32API.SetWindowPosFlags.ShowWindow; + + Win32API.SetWindowPos(hWnd, (IntPtr)0, placement.rcNormalPosition.Left, placement.rcNormalPosition.Top, 0, 0, flags); + } + + private static void ShowSpotify() + { + if (IsRunning()) + { + var hWnd = GetSpotify(); + + // check Spotify's current window state + var placement = new Win32API.WindowPlacement(); + Win32API.GetWindowPlacement(hWnd, ref placement); + + int showCommand = Win32API.Constants.SW_SHOW; + + // if Spotify is minimzed we need to send a restore so that the window + // will come back exactly like it was before being minimized (i.e. maximized + // or otherwise) otherwise if we call SW_RESTORE on a currently maximized window + // then instead of staying maximized it will return to normal size. + if (placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED) + showCommand = Win32API.Constants.SW_RESTORE; + + Win32API.ShowWindow(hWnd, showCommand); + + Win32API.SetForegroundWindow(hWnd); + Win32API.SetFocus(hWnd); + } + } + + public static void SendAction(SpotifyAction a) + { + if (!IsRunning()) + return; + + // bah. Because control cannot fall through cases we need to special case volume + if (SettingsXml.Instance.ChangeSpotifyVolumeOnly) + { + switch (a) + { + case SpotifyAction.VolumeUp: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); + + VolumeHelper.IncrementVolume("Spotify"); + return; + case SpotifyAction.VolumeDown: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); + + VolumeHelper.DecrementVolume("Spotify"); + return; + case SpotifyAction.Mute: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); + + VolumeHelper.ToggleApplicationMute("Spotify"); + return; + } + } + + switch (a) + { + case SpotifyAction.CopyTrackInfo: + case SpotifyAction.ShowToast: + //Nothing + break; + + case SpotifyAction.ShowSpotify: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.ShowSpotify); + if (IsMinimized()) + ShowSpotify(); + else + Minimize(); + break; + + case SpotifyAction.FastForward: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.FastForward); + SendComplexKeys("+{Right}"); + break; + + case SpotifyAction.Rewind: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Rewind); + SendComplexKeys("+{Left}"); + break; + + default: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Default + a); + Win32API.SendMessage(GetSpotify(), Win32API.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)a)); + break; + } + } + + /// + /// Some commands require sending keys directly to Spotify (for example, Fast Forward and Rewind which + /// are not handled by Spotify). We can't inject keys directly with WM_KEYDOWN/UP since we need a keyboard + /// hook to actually change the state of various modifier keys (for example, Shift + Right for Fast Forward). + /// + /// AutoHotKey has that hook and can modify the state for us, so let's take advantge of it. + /// + /// + private static void SendComplexKeys(string keys) + { + // Is this nicer? + // _ahk = _ahk ?? new AutoHotkey.Interop.AutoHotkeyEngine(); + + // only initialize AHK when needed as it can be expensive (dll copy etc) if not actually needed + if (_ahk == null) + _ahk = new AutoHotkey.Interop.AutoHotkeyEngine(); + + _ahk.ExecRaw("SetTitleMatchMode 2"); + + _ahk.ExecRaw("DetectHiddenWindows, On"); + _ahk.ExecRaw("ControlSend, ahk_parent, " + keys + ", ahk_class SpotifyMainWindow"); + + _ahk.ExecRaw("DetectHiddenWindows, Off"); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SpotifyAction.cs b/Toastify/src/Core/SpotifyAction.cs new file mode 100644 index 00000000..df3983c0 --- /dev/null +++ b/Toastify/src/Core/SpotifyAction.cs @@ -0,0 +1,23 @@ +namespace Toastify.Core +{ + public enum SpotifyAction : long + { + None = 0, + ShowToast = 1, + ShowSpotify = 2, + CopyTrackInfo = 3, + SettingsSaved = 4, + PasteTrackInfo = 5, + ThumbsUp = 6, // not usable, left in for future (hopefully!) + ThumbsDown = 7, // not usable, left in for future (hopefully!) + PlayPause = 917504, + Mute = 524288, + VolumeDown = 589824, + VolumeUp = 655360, + Stop = 851968, + PreviousTrack = 786432, + NextTrack = 720896, + FastForward = 49 << 16, + Rewind = 50 << 16, + } +} \ No newline at end of file diff --git a/Toastify/src/Events/CheckVersionCompleteEventArgs.cs b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs new file mode 100644 index 00000000..fbed5bbd --- /dev/null +++ b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs @@ -0,0 +1,10 @@ +using System; + +namespace Toastify.Events +{ + internal class CheckVersionCompleteEventArgs : EventArgs + { + public string Version { get; set; } + public bool New { get; set; } + } +} \ No newline at end of file diff --git a/Toastify/BoolToVisibleConverter.cs b/Toastify/src/Helpers/BoolToVisibleConverter.cs similarity index 74% rename from Toastify/BoolToVisibleConverter.cs rename to Toastify/src/Helpers/BoolToVisibleConverter.cs index 51faad82..2ad5df85 100644 --- a/Toastify/BoolToVisibleConverter.cs +++ b/Toastify/src/Helpers/BoolToVisibleConverter.cs @@ -1,24 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Data; -using System.Windows; - -namespace Toastify -{ - public class BoolToVisibleConverter : IValueConverter - { - - public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - // Note: will throw a cast exception if you throw the wrong type at it. Good :) - return ((bool)value ? Visibility.Visible : Visibility.Collapsed); - } - - public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} +using System; +using System.Windows; +using System.Windows.Data; + +namespace Toastify.Helpers +{ + public class BoolToVisibleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + // Note: will throw a cast exception if you throw the wrong type at it. Good :) + return (bool)value ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/OppositeBoolConverter.cs b/Toastify/src/Helpers/OppositeBoolConverter.cs similarity index 84% rename from Toastify/OppositeBoolConverter.cs rename to Toastify/src/Helpers/OppositeBoolConverter.cs index 0356e675..533d5732 100644 --- a/Toastify/OppositeBoolConverter.cs +++ b/Toastify/src/Helpers/OppositeBoolConverter.cs @@ -1,24 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Data; - -namespace Toastify -{ - public class OppositeBoolConverter : IValueConverter - { - - public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - // Note: don't check validity etc, since we'll need to throw an exception anyway, may as well let - // that exception be here and not waste time :) - return !(bool)value; - } - - public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} +using System; +using System.Windows.Data; + +namespace Toastify.Helpers +{ + public class OppositeBoolConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + // Note: don't check validity etc, since we'll need to throw an exception anyway, may as well let + // that exception be here and not waste time :) + return !(bool)value; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/OppositeBoolToVisibleConverter.cs b/Toastify/src/Helpers/OppositeBoolToVisibleConverter.cs similarity index 74% rename from Toastify/OppositeBoolToVisibleConverter.cs rename to Toastify/src/Helpers/OppositeBoolToVisibleConverter.cs index 043ccdcc..1cd17e63 100644 --- a/Toastify/OppositeBoolToVisibleConverter.cs +++ b/Toastify/src/Helpers/OppositeBoolToVisibleConverter.cs @@ -1,24 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Data; -using System.Windows; - -namespace Toastify -{ - public class OppositeBoolToVisibleConverter : IValueConverter - { - - public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - // Note: will throw a cast exception if you throw the wrong type at it. Good :) - return (!(bool)value ? Visibility.Visible : Visibility.Collapsed); - } - - public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} +using System; +using System.Windows; +using System.Windows.Data; + +namespace Toastify.Helpers +{ + public class OppositeBoolToVisibleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + // Note: will throw a cast exception if you throw the wrong type at it. Good :) + return !(bool)value ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Helpers/ScreenHelper.cs b/Toastify/src/Helpers/ScreenHelper.cs new file mode 100644 index 00000000..45141c73 --- /dev/null +++ b/Toastify/src/Helpers/ScreenHelper.cs @@ -0,0 +1,34 @@ +using System.Diagnostics; +using System.Windows; +using System.Windows.Forms; +using Toastify.UI; + +namespace Toastify.Helpers +{ + internal static class ScreenHelper + { + private const int SCREEN_RIGHT_MARGIN = 0; + private const int SCREEN_TOP_MARGIN = 5; + + public static Point GetDPIRatios() + { + var presentationSource = PresentationSource.FromVisual(Toast.Current); + + // if we hit this then Settings were loaded before the Toast window was + Debug.Assert(presentationSource != null); + + return new Point(presentationSource.CompositionTarget?.TransformToDevice.M11 ?? 1.0, + presentationSource.CompositionTarget?.TransformToDevice.M22 ?? 1.0); + } + + public static Point GetDefaultToastPosition(double width, double height) + { + var screenRect = Screen.PrimaryScreen.WorkingArea; + + var dpiRatio = GetDPIRatios(); + + return new Point(screenRect.Width / dpiRatio.X - width - SCREEN_RIGHT_MARGIN, + screenRect.Height / dpiRatio.Y - height - SCREEN_TOP_MARGIN); + } + } +} \ No newline at end of file diff --git a/Toastify/VolumeHelper.cs b/Toastify/src/Helpers/VolumeHelper.cs similarity index 67% rename from Toastify/VolumeHelper.cs rename to Toastify/src/Helpers/VolumeHelper.cs index 9d86ceeb..1690469b 100644 --- a/Toastify/VolumeHelper.cs +++ b/Toastify/src/Helpers/VolumeHelper.cs @@ -1,368 +1,359 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - -namespace Toastify -{ - class VolumeHelper - { - // base code from: http://stackoverflow.com/a/14322736 - - public static void IncrementVolume(string name) - { - var curVolume = GetApplicationVolume(name); - - if (curVolume != null && curVolume <100) - SetApplicationVolume(name, (float)curVolume + 2); - } - - public static void DecrementVolume(string name) - { - var curVolume = GetApplicationVolume(name); - - if (curVolume != null && curVolume > 0) - SetApplicationVolume(name, (float)curVolume - 2); - } - - public static float? GetApplicationVolume(string name) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return null; - - float level; - volume.GetMasterVolume(out level); - return level * 100; - } - - public static bool? GetApplicationMute(string name) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return null; - - bool mute; - volume.GetMute(out mute); - return mute; - } - - public static void SetApplicationVolume(string name, float level) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return; - - Guid guid = Guid.Empty; - volume.SetMasterVolume(level / 100, ref guid); - } - - internal static void ToggleApplicationMute(string name) - { - - var muted = GetApplicationMute(name); - - if (muted == null) - return; - - SetApplicationMute(name, !(bool)muted); - } - - - public static void SetApplicationMute(string name, bool mute) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return; - - Guid guid = Guid.Empty; - volume.SetMute(mute, ref guid); - } - - public static IEnumerable EnumerateApplications() - { - // get the speakers (1st render + multimedia) device - IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); - IMMDevice speakers; - deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); - - // activate the session manager. we need the enumerator - Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; - object o; - speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); - IAudioSessionManager2 mgr = (IAudioSessionManager2)o; - - // enumerate sessions for on this device - IAudioSessionEnumerator sessionEnumerator; - mgr.GetSessionEnumerator(out sessionEnumerator); - int count; - sessionEnumerator.GetCount(out count); - - for (int i = 0; i < count; i++) - { - IAudioSessionControl ctl; - IAudioSessionControl2 ctl2; - - sessionEnumerator.GetSession(i, out ctl); - - ctl2 = ctl as IAudioSessionControl2; - - if (ctl2 != null) - { - uint pid = 0; - string sout1 = ""; - string sout2 = ""; - - ctl2.GetSessionIdentifier(out sout1); - ctl2.GetProcessId(out pid); - ctl2.GetSessionInstanceIdentifier(out sout2); - - } - - string dn; - ctl.GetDisplayName(out dn); - yield return dn; - Marshal.ReleaseComObject(ctl); - } - Marshal.ReleaseComObject(sessionEnumerator); - Marshal.ReleaseComObject(mgr); - Marshal.ReleaseComObject(speakers); - Marshal.ReleaseComObject(deviceEnumerator); - } - - private static ISimpleAudioVolume GetVolumeObject(string name) - { - // get the speakers (1st render + multimedia) device - IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); - IMMDevice speakers; - deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); - - // activate the session manager. we need the enumerator - Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; - object o; - speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); - IAudioSessionManager2 mgr = (IAudioSessionManager2)o; - - // enumerate sessions for on this device - IAudioSessionEnumerator sessionEnumerator; - mgr.GetSessionEnumerator(out sessionEnumerator); - int count; - sessionEnumerator.GetCount(out count); - - // lower case name for easier comparison with the Session ID later on - name = name.ToLower(); - - // search for an audio session with the required name - // Note: Since GetDisplayName only returns a real name if the application bothered to call SetDisplayName - // (which apps like Spotify do not), we instead use the SessionID (which usually includes the exe name) - ISimpleAudioVolume volumeControl = null; - - for (int i = 0; i < count; i++) - { - - IAudioSessionControl ctl; - IAudioSessionControl2 ctl2; - - sessionEnumerator.GetSession(i, out ctl); - - ctl2 = ctl as IAudioSessionControl2; - - string dn; - ctl.GetDisplayName(out dn); - - if (ctl2 != null) - { - string sessionID = ""; - - ctl2.GetSessionIdentifier(out sessionID); - - if (sessionID.ToLower().Contains(name)) - { - volumeControl = ctl as ISimpleAudioVolume; - break; - } - } - - if (ctl != null) - Marshal.ReleaseComObject(ctl); - - if (ctl2 != null) - Marshal.ReleaseComObject(ctl2); - } - - Marshal.ReleaseComObject(sessionEnumerator); - Marshal.ReleaseComObject(mgr); - Marshal.ReleaseComObject(speakers); - Marshal.ReleaseComObject(deviceEnumerator); - - return volumeControl; - } - - // - // Should probably be in the central WinHelper (or a NativeMethods) but it seemed cleaner to - // keep it all together. - // - - [ComImport] - [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] - internal class MMDeviceEnumerator - { - } - - internal enum EDataFlow - { - eRender, - eCapture, - eAll, - EDataFlow_enum_count - } - - internal enum ERole - { - eConsole, - eMultimedia, - eCommunications, - ERole_enum_count - } - - [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IMMDeviceEnumerator - { - int NotImpl1(); - - [PreserveSig] - int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice); - - // the rest is not implemented - } - - [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IMMDevice - { - [PreserveSig] - int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface); - - // the rest is not implemented - } - - [Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionManager2 - { - int NotImpl1(); - int NotImpl2(); - - [PreserveSig] - int GetSessionEnumerator(out IAudioSessionEnumerator SessionEnum); - - // the rest is not implemented - } - - [Guid("E2F5BB11-0570-40CA-ACDD-3AA01277DEE8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionEnumerator - { - [PreserveSig] - int GetCount(out int SessionCount); - - [PreserveSig] - int GetSession(int SessionCount, out IAudioSessionControl Session); - } - - [Guid("F4B1A599-7266-4319-A8CA-E70ACB11E8CD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionControl - { - int NotImpl1(); - - [PreserveSig] - int GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pRetVal); - - // the rest is not implemented - } - - public enum AudioSessionState - { - AudioSessionStateInactive = 0, - AudioSessionStateActive = 1, - AudioSessionStateExpired = 2 - } - - public enum AudioSessionDisconnectReason - { - DisconnectReasonDeviceRemoval = 0, - DisconnectReasonServerShutdown = (DisconnectReasonDeviceRemoval + 1), - DisconnectReasonFormatChanged = (DisconnectReasonServerShutdown + 1), - DisconnectReasonSessionLogoff = (DisconnectReasonFormatChanged + 1), - DisconnectReasonSessionDisconnected = (DisconnectReasonSessionLogoff + 1), - DisconnectReasonExclusiveModeOverride = (DisconnectReasonSessionDisconnected + 1) - } - - [Guid("24918ACC-64B3-37C1-8CA9-74A66E9957A8"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IAudioSessionEvents - { - [PreserveSig] - int OnDisplayNameChanged([MarshalAs(UnmanagedType.LPWStr)] string NewDisplayName, Guid EventContext); - [PreserveSig] - int OnIconPathChanged([MarshalAs(UnmanagedType.LPWStr)] string NewIconPath, Guid EventContext); - [PreserveSig] - int OnSimpleVolumeChanged(float NewVolume, bool newMute, Guid EventContext); - [PreserveSig] - int OnChannelVolumeChanged(UInt32 ChannelCount, IntPtr NewChannelVolumeArray, UInt32 ChangedChannel, Guid EventContext); - [PreserveSig] - int OnGroupingParamChanged(Guid NewGroupingParam, Guid EventContext); - [PreserveSig] - int OnStateChanged(AudioSessionState NewState); - [PreserveSig] - int OnSessionDisconnected(AudioSessionDisconnectReason DisconnectReason); - } - - [Guid("BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IAudioSessionControl2 - { - [PreserveSig] - int GetState(out AudioSessionState state); - [PreserveSig] - int GetDisplayName([Out(), MarshalAs(UnmanagedType.LPWStr)] out string name); - [PreserveSig] - int SetDisplayName([MarshalAs(UnmanagedType.LPWStr)] string value, Guid EventContext); - [PreserveSig] - int GetIconPath([Out(), MarshalAs(UnmanagedType.LPWStr)] out string Path); - [PreserveSig] - int SetIconPath([MarshalAs(UnmanagedType.LPWStr)] string Value, Guid EventContext); - [PreserveSig] - int GetGroupingParam(out Guid GroupingParam); - [PreserveSig] - int SetGroupingParam(Guid Override, Guid Eventcontext); - [PreserveSig] - int RegisterAudioSessionNotification(IAudioSessionEvents NewNotifications); - [PreserveSig] - int UnregisterAudioSessionNotification(IAudioSessionEvents NewNotifications); - [PreserveSig] - int GetSessionIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); - [PreserveSig] - int GetSessionInstanceIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); - [PreserveSig] - int GetProcessId(out UInt32 retvVal); - [PreserveSig] - int IsSystemSoundsSession(); - [PreserveSig] - int SetDuckingPreference(bool optOut); - } - - - [Guid("87CE5498-68D6-44E5-9215-6DA47EF883D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface ISimpleAudioVolume - { - [PreserveSig] - int SetMasterVolume(float fLevel, ref Guid EventContext); - - [PreserveSig] - int GetMasterVolume(out float pfLevel); - - [PreserveSig] - int SetMute(bool bMute, ref Guid EventContext); - - [PreserveSig] - int GetMute(out bool pbMute); - } - } -} +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +// ReSharper disable SuspiciousTypeConversion.Global + +namespace Toastify.Helpers +{ + internal class VolumeHelper + { + // base code from: http://stackoverflow.com/a/14322736 + + private const float VOLUME_DELTA = 5.0f; + + public static void IncrementVolume(string name) + { + float? curVolume = GetApplicationVolume(name); + + if (curVolume != null && curVolume < 100.0f) + SetApplicationVolume(name, curVolume.Value + VOLUME_DELTA); + } + + public static void DecrementVolume(string name) + { + var curVolume = GetApplicationVolume(name); + + if (curVolume != null && curVolume > 0.0f) + SetApplicationVolume(name, curVolume.Value - VOLUME_DELTA); + } + + public static float? GetApplicationVolume(string name) + { + ISimpleAudioVolume volume = GetVolumeObject(name); + if (volume == null) + return null; + + volume.GetMasterVolume(out float level); + return level * 100.0f; + } + + public static bool? GetApplicationMute(string name) + { + ISimpleAudioVolume volume = GetVolumeObject(name); + if (volume == null) + return null; + + volume.GetMute(out bool mute); + return mute; + } + + public static void SetApplicationVolume(string name, float level) + { + ISimpleAudioVolume volume = GetVolumeObject(name); + if (volume == null) + return; + + Guid guid = Guid.Empty; + volume.SetMasterVolume(level / 100, ref guid); + } + + internal static void ToggleApplicationMute(string name) + { + bool? muted = GetApplicationMute(name); + if (muted == null) + return; + + SetApplicationMute(name, !muted.Value); + } + + + public static void SetApplicationMute(string name, bool mute) + { + ISimpleAudioVolume volume = GetVolumeObject(name); + if (volume == null) + return; + + Guid guid = Guid.Empty; + volume.SetMute(mute, ref guid); + } + + public static IEnumerable EnumerateApplications() + { + // get the speakers (1st render + multimedia) device + MMDeviceEnumerator deviceEnumerator_ = new MMDeviceEnumerator(); + IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)deviceEnumerator_; + deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.ERender, ERole.EMultimedia, out IMMDevice speakers); + + // activate the session manager. we need the enumerator + Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; + speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); + IAudioSessionManager2 mgr = (IAudioSessionManager2)o; + + // enumerate sessions for on this device + mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); + sessionEnumerator.GetCount(out int count); + + for (int i = 0; i < count; i++) + { + sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); + + if (ctl is IAudioSessionControl2 ctl2) + { + ctl2.GetSessionIdentifier(out string sout1); + ctl2.GetProcessId(out uint pid); + ctl2.GetSessionInstanceIdentifier(out string sout2); + } + + ctl.GetDisplayName(out string dn); + yield return dn; + Marshal.ReleaseComObject(ctl); + } + Marshal.ReleaseComObject(sessionEnumerator); + Marshal.ReleaseComObject(mgr); + Marshal.ReleaseComObject(speakers); + Marshal.ReleaseComObject(deviceEnumerator); + } + + private static ISimpleAudioVolume GetVolumeObject(string name) + { + // get the speakers (1st render + multimedia) device + MMDeviceEnumerator deviceEnumerator_ = new MMDeviceEnumerator(); + IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)deviceEnumerator_; + deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.ERender, ERole.EMultimedia, out IMMDevice speakers); + + // activate the session manager. we need the enumerator + Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; + speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); + IAudioSessionManager2 mgr = (IAudioSessionManager2)o; + + // enumerate sessions for on this device + mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); + sessionEnumerator.GetCount(out int count); + + // lower case name for easier comparison with the Session ID later on + name = name.ToLower(); + + // search for an audio session with the required name + // Note: Since GetDisplayName only returns a real name if the application bothered to call SetDisplayName + // (which apps like Spotify do not), we instead use the SessionID (which usually includes the exe name) + ISimpleAudioVolume volumeControl = null; + + for (int i = 0; i < count; i++) + { + sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); + IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; + + ctl.GetDisplayName(out string dn); + + if (ctl2 != null) + { + ctl2.GetSessionIdentifier(out string sessionID); + + if (sessionID.ToLower().Contains(name)) + { + volumeControl = ctl as ISimpleAudioVolume; + break; + } + } + + Marshal.ReleaseComObject(ctl); + if (ctl2 != null) + Marshal.ReleaseComObject(ctl2); + } + + Marshal.ReleaseComObject(sessionEnumerator); + Marshal.ReleaseComObject(mgr); + Marshal.ReleaseComObject(speakers); + Marshal.ReleaseComObject(deviceEnumerator); + + return volumeControl; + } + + // + // Should probably be in the central WinHelper (or a NativeMethods) but it seemed cleaner to + // keep it all together. + // + + [ComImport] + [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] + internal class MMDeviceEnumerator + { + } + + internal enum EDataFlow + { + ERender, + ECapture, + EAll, + EDataFlowEnumCount + } + + internal enum ERole + { + EConsole, + EMultimedia, + ECommunications, + ERoleEnumCount + } + + [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IMMDeviceEnumerator + { + int NotImpl1(); + + [PreserveSig] + int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice); + + // the rest is not implemented + } + + [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IMMDevice + { + [PreserveSig] + int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface); + + // the rest is not implemented + } + + [Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IAudioSessionManager2 + { + int NotImpl1(); + + int NotImpl2(); + + [PreserveSig] + int GetSessionEnumerator(out IAudioSessionEnumerator sessionEnum); + + // the rest is not implemented + } + + [Guid("E2F5BB11-0570-40CA-ACDD-3AA01277DEE8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IAudioSessionEnumerator + { + [PreserveSig] + int GetCount(out int sessionCount); + + [PreserveSig] + int GetSession(int sessionCount, out IAudioSessionControl session); + } + + [Guid("F4B1A599-7266-4319-A8CA-E70ACB11E8CD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IAudioSessionControl + { + int NotImpl1(); + + [PreserveSig] + int GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pRetVal); + + // the rest is not implemented + } + + public enum AudioSessionState + { + AudioSessionStateInactive = 0, + AudioSessionStateActive = 1, + AudioSessionStateExpired = 2 + } + + public enum AudioSessionDisconnectReason + { + DisconnectReasonDeviceRemoval = 0, + DisconnectReasonServerShutdown = (DisconnectReasonDeviceRemoval + 1), + DisconnectReasonFormatChanged = (DisconnectReasonServerShutdown + 1), + DisconnectReasonSessionLogoff = (DisconnectReasonFormatChanged + 1), + DisconnectReasonSessionDisconnected = (DisconnectReasonSessionLogoff + 1), + DisconnectReasonExclusiveModeOverride = (DisconnectReasonSessionDisconnected + 1) + } + + [Guid("24918ACC-64B3-37C1-8CA9-74A66E9957A8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IAudioSessionEvents + { + [PreserveSig] + int OnDisplayNameChanged([MarshalAs(UnmanagedType.LPWStr)] string newDisplayName, Guid eventContext); + + [PreserveSig] + int OnIconPathChanged([MarshalAs(UnmanagedType.LPWStr)] string newIconPath, Guid eventContext); + + [PreserveSig] + int OnSimpleVolumeChanged(float newVolume, bool newMute, Guid eventContext); + + [PreserveSig] + int OnChannelVolumeChanged(UInt32 channelCount, IntPtr newChannelVolumeArray, UInt32 changedChannel, Guid eventContext); + + [PreserveSig] + int OnGroupingParamChanged(Guid newGroupingParam, Guid eventContext); + + [PreserveSig] + int OnStateChanged(AudioSessionState newState); + + [PreserveSig] + int OnSessionDisconnected(AudioSessionDisconnectReason disconnectReason); + } + + [Guid("BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IAudioSessionControl2 + { + [PreserveSig] + int GetState(out AudioSessionState state); + + [PreserveSig] + int GetDisplayName([Out(), MarshalAs(UnmanagedType.LPWStr)] out string name); + + [PreserveSig] + int SetDisplayName([MarshalAs(UnmanagedType.LPWStr)] string value, Guid eventContext); + + [PreserveSig] + int GetIconPath([Out(), MarshalAs(UnmanagedType.LPWStr)] out string path); + + [PreserveSig] + int SetIconPath([MarshalAs(UnmanagedType.LPWStr)] string value, Guid eventContext); + + [PreserveSig] + int GetGroupingParam(out Guid groupingParam); + + [PreserveSig] + int SetGroupingParam(Guid Override, Guid eventcontext); + + [PreserveSig] + int RegisterAudioSessionNotification(IAudioSessionEvents newNotifications); + + [PreserveSig] + int UnregisterAudioSessionNotification(IAudioSessionEvents newNotifications); + + [PreserveSig] + int GetSessionIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); + + [PreserveSig] + int GetSessionInstanceIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); + + [PreserveSig] + int GetProcessId(out UInt32 retvVal); + + [PreserveSig] + int IsSystemSoundsSession(); + + [PreserveSig] + int SetDuckingPreference(bool optOut); + } + + + [Guid("87CE5498-68D6-44E5-9215-6DA47EF883D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISimpleAudioVolume + { + [PreserveSig] + int SetMasterVolume(float fLevel, ref Guid eventContext); + + [PreserveSig] + int GetMasterVolume(out float pfLevel); + + [PreserveSig] + int SetMute(bool bMute, ref Guid eventContext); + + [PreserveSig] + int GetMute(out bool pbMute); + } + } +} \ No newline at end of file diff --git a/Toastify/WinHelper.cs b/Toastify/src/Helpers/WinHelper.cs similarity index 67% rename from Toastify/WinHelper.cs rename to Toastify/src/Helpers/WinHelper.cs index 02e933b5..e83ef842 100644 --- a/Toastify/WinHelper.cs +++ b/Toastify/src/Helpers/WinHelper.cs @@ -1,95 +1,86 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; -using System.Windows.Interop; - -namespace Toastify -{ - class WinHelper - { - [Flags] - public enum ExtendedWindowStyles - { - // ... - WS_EX_TOOLWINDOW = 0x00000080, - // ... - } - - public enum GetWindowLongFields - { - // ... - GWL_EXSTYLE = (-20), - // ... - } - - [DllImport("user32.dll")] - private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); - - private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) - { - int error = 0; - IntPtr result = IntPtr.Zero; - // Win32 SetWindowLong doesn't clear error on success - SetLastError(0); - - if (IntPtr.Size == 4) - { - // use SetWindowLong - Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); - error = Marshal.GetLastWin32Error(); - result = new IntPtr(tempResult); - } - else - { - // use SetWindowLongPtr - result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); - error = Marshal.GetLastWin32Error(); - } - - if ((result == IntPtr.Zero) && (error != 0)) - { - throw new System.ComponentModel.Win32Exception(error); - } - - return result; - } - - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] - private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); - - [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] - private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); - - private static int IntPtrToInt32(IntPtr intPtr) - { - return unchecked((int)intPtr.ToInt64()); - } - - [DllImport("kernel32.dll", EntryPoint = "SetLastError")] - public static extern void SetLastError(int dwErrorCode); - - public static void AddToolWindowStyle(System.Windows.Window window) - { - WindowInteropHelper wndHelper = new WindowInteropHelper(window); - int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)WinHelper.GetWindowLongFields.GWL_EXSTYLE); - exStyle |= (int)ExtendedWindowStyles.WS_EX_TOOLWINDOW; - SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GWL_EXSTYLE, (IntPtr)exStyle); - } - - [FlagsAttribute] - public enum EXECUTION_STATE : uint - { - ES_AWAYMODE_REQUIRED = 0x00000040, - ES_CONTINUOUS = 0x80000000, - ES_DISPLAY_REQUIRED = 0x00000002, - ES_SYSTEM_REQUIRED = 0x00000001 - // Legacy flag, should not be used. - // ES_USER_PRESENT = 0x00000004 - } - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); - } -} +using System; +using System.Runtime.InteropServices; +using System.Windows.Interop; + +namespace Toastify.Helpers +{ + internal class WinHelper + { + [Flags] + public enum ExtendedWindowStyles + { + WsExToolwindow = 0x00000080, + } + + public enum GetWindowLongFields + { + GwlExstyle = -20, + } + + [DllImport("user32.dll")] + private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); + + private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) + { + int error; + IntPtr result; + // Win32API SetWindowLong doesn't clear error on success + SetLastError(0); + + if (IntPtr.Size == 4) + { + // use SetWindowLong + Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); + error = Marshal.GetLastWin32Error(); + result = new IntPtr(tempResult); + } + else + { + // use SetWindowLongPtr + result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); + error = Marshal.GetLastWin32Error(); + } + + if (result == IntPtr.Zero && error != 0) + throw new System.ComponentModel.Win32Exception(error); + + return result; + } + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] + private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] + private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); + + private static int IntPtrToInt32(IntPtr intPtr) + { + return unchecked((int)intPtr.ToInt64()); + } + + [DllImport("kernel32.dll", EntryPoint = "SetLastError")] + public static extern void SetLastError(int dwErrorCode); + + public static void AddToolWindowStyle(System.Windows.Window window) + { + WindowInteropHelper wndHelper = new WindowInteropHelper(window); + int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle); + exStyle |= (int)ExtendedWindowStyles.WsExToolwindow; + SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); + } + + [Flags] + public enum ExecutionState : uint + { + EsAwaymodeRequired = 0x00000040, + EsContinuous = 0x80000000, + EsDisplayRequired = 0x00000002, + EsSystemRequired = 0x00000001 + // Legacy flag, should not be used. + // ES_USER_PRESENT = 0x00000004 + } + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); + } +} \ No newline at end of file diff --git a/Toastify/LastInputDebug.cs b/Toastify/src/LastInputDebug.cs similarity index 76% rename from Toastify/LastInputDebug.cs rename to Toastify/src/LastInputDebug.cs index 4c890cac..71fdfa9f 100644 --- a/Toastify/LastInputDebug.cs +++ b/Toastify/src/LastInputDebug.cs @@ -3,32 +3,32 @@ using System; using System.Runtime.InteropServices; using System.Threading; +// ReSharper disable BuiltInTypeReferenceStyle namespace Toastify { internal static class LastInputDebug { - [StructLayout(LayoutKind.Sequential)] - struct LASTINPUTINFO + // ReSharper disable once InconsistentNaming + private struct LASTINPUTINFO { - public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO)); + private static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO)); [MarshalAs(UnmanagedType.U4)] public UInt32 cbSize; + [MarshalAs(UnmanagedType.U4)] public UInt32 dwTime; } [DllImport("user32.dll")] - static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); + private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); public static void Start() { - var t = new Thread(LastInputCheck); t.Start(); - } private static void LastInputCheck() @@ -49,11 +49,12 @@ private static void LastInputCheck() } } } + #else -namespace Toastify +namespace Toastify { - internal static class LastInputDebug + internal static class LastInputDebug { public static void Start() { } } diff --git a/Toastify/Telemetry.cs b/Toastify/src/Services/Telemetry.cs similarity index 87% rename from Toastify/Telemetry.cs rename to Toastify/src/Services/Telemetry.cs index 60c20d3d..aa46b284 100644 --- a/Toastify/Telemetry.cs +++ b/Toastify/src/Services/Telemetry.cs @@ -2,16 +2,10 @@ using System; using System.Linq; using System.Management; +using Toastify.Core; -namespace Toastify +namespace Toastify.Services { - public enum TelemetryCategory - { - General, - Action, - SpotifyWebService, - } - public static class Telemetry { private static AnalyticsSession _session; @@ -26,7 +20,7 @@ private static void Init() { _session = new AnalyticsSession("http://toastify.nachmore.com/app", "UA-61123985-2"); - var settings = SettingsXml.Current; + var settings = SettingsXml.Instance; // abort asap if we are surpressing analytics if (settings.PreventAnalytics) @@ -36,18 +30,17 @@ private static void Init() _client = _session.CreatePageViewRequest("/", "Global"); - if (SettingsXml.Current.FirstRun) + if (SettingsXml.Instance.FirstRun) { TrackEvent(TelemetryCategory.General, "Install", GetOS()); - SettingsXml.Current.FirstRun = false; + SettingsXml.Instance.FirstRun = false; } } public static void TrackEvent(TelemetryCategory category, string action, object label = null, int value = 0) { - if (_client != null) - _client.SendEvent(category.ToString(), action, (label != null ? label.ToString() : null), value.ToString()); + _client?.SendEvent(category.ToString(), action, label?.ToString(), value.ToString()); } internal static void TrackException(Exception exception) @@ -72,13 +65,13 @@ private static string GetFriendlyOS() { var name = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().OfType() select x.GetPropertyValue("Caption")).FirstOrDefault(); - return name != null ? name.ToString() : "Unknown"; + return name?.ToString() ?? "Unknown"; } /// /// Poor mans enum -> expanded string. - /// - /// Once I've been using this for a while I may change this to a pure enum if + /// + /// Once I've been using this for a while I may change this to a pure enum if /// spaces in names prove to be annoying for querying / sorting the data /// public static class TelemetryEvent @@ -111,4 +104,4 @@ public static class Action } } } -} +} \ No newline at end of file diff --git a/Toastify/src/Services/TelemetryCategory.cs b/Toastify/src/Services/TelemetryCategory.cs new file mode 100644 index 00000000..c868cec8 --- /dev/null +++ b/Toastify/src/Services/TelemetryCategory.cs @@ -0,0 +1,9 @@ +namespace Toastify.Services +{ + public enum TelemetryCategory + { + General, + Action, + SpotifyWebService, + } +} \ No newline at end of file diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs new file mode 100644 index 00000000..05d27bbb --- /dev/null +++ b/Toastify/src/Services/VersionChecker.cs @@ -0,0 +1,84 @@ +using System; +using System.Diagnostics; +using System.Net; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Threading; +using Toastify.Events; + +namespace Toastify.Services +{ + internal class VersionChecker + { + private static string _version; + + public static string Version + { + get + { + if (_version == null) + { + var assembly = Assembly.GetExecutingAssembly(); + if (assembly.Location != null) + { + var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); + _version = fileVersionInfo.FileVersion; + } + + if (_version != null) + { + var thirdDot = _version.LastIndexOf('.'); + _version = _version.Substring(0, thirdDot); + } + } + + return _version; + } + } + + public string UpdateUrl { get { return "https://toastify.codeplex.com/releases/view/24273"; } } + + public string VersionUrl { get { return "http://toastify.codeplex.com/wikipage?title=Version"; } } + + private readonly WebClient wc; + + public event EventHandler CheckVersionComplete; + + public VersionChecker() + { + this.wc = new WebClient(); + this.wc.DownloadStringCompleted += this.WebClient_DownloadStringCompleted; + } + + public void BeginCheckVersion() + { + Thread t = new Thread(this.ThreadedBeginCheckVersion) { IsBackground = true }; + t.Start(); + } + + private void ThreadedBeginCheckVersion() + { + //WebClients XXXAsync isn't as async as I wanted... + this.wc.DownloadStringAsync(new Uri(this.VersionUrl)); + } + + private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) + { + string version = string.Empty; + bool newVersion = false; + + if (!e.Cancelled && e.Error == null) + { + var match = Regex.Match(e.Result, "Version: (?[\\d+\\.]+)", RegexOptions.IgnoreCase | RegexOptions.Singleline); + + if (match.Success) + { + version = match.Groups["ver"].Value.Trim(); + newVersion = Version != version; + } + } + + this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = version, New = newVersion }); + } + } +} \ No newline at end of file diff --git a/Toastify/About.xaml b/Toastify/src/UI/About.xaml similarity index 97% rename from Toastify/About.xaml rename to Toastify/src/UI/About.xaml index 65049329..c9212d3f 100644 --- a/Toastify/About.xaml +++ b/Toastify/src/UI/About.xaml @@ -1,58 +1,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Toastify - - - - - - - - - - - - toastify.codeplex.com - - Checking for updates... - Credits to: Linus, Maaaackan, Aqualize, ncahmore... - - Created by Jesper Palm 2009, licensed under GPLv2. - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toastify + + + + + + + + + + + + toastify.codeplex.com + + Checking for updates... + Credits to: Linus, Maaaackan, Aqualize, ncahmore... + + Created by Jesper Palm 2009, licensed under GPLv2. + + + diff --git a/Toastify/About.xaml.cs b/Toastify/src/UI/About.xaml.cs similarity index 55% rename from Toastify/About.xaml.cs rename to Toastify/src/UI/About.xaml.cs index f47efb82..37c590ea 100644 --- a/Toastify/About.xaml.cs +++ b/Toastify/src/UI/About.xaml.cs @@ -1,77 +1,72 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; -using System.Threading; -using System.Diagnostics; - -namespace Toastify -{ - /// - /// Interaction logic for About.xaml - /// - public partial class About : Window - { - VersionChecker versionChecker; - - public About() - { - InitializeComponent(); - - versionChecker = new VersionChecker(); - versionChecker.CheckVersionComplete += new EventHandler(versionChecker_CheckVersionComplete); - - this.DataContext = versionChecker; - } - - void versionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) - { - string latestVersionText = ""; - - if (string.IsNullOrEmpty(e.Version)) - latestVersionText = "Unable to check version."; - else if (e.New) - latestVersionText = "New version available!"; - else - latestVersionText = "You have the latest version."; - - this.Dispatcher.Invoke(new Action(() => - { - Run run = new Run(latestVersionText); - LatestVersion.Inlines.Clear(); - LatestVersion.Inlines.Add(run); - }), System.Windows.Threading.DispatcherPriority.Normal); - } - - private void CodeplexLink_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) - { - System.Diagnostics.Process.Start("http://toastify.codeplex.com"); - } - - private void Border_MouseUp(object sender, MouseButtonEventArgs e) - { - this.Close(); - } - - private void Window_Loaded(object sender, RoutedEventArgs e) - { - versionChecker.BeginCheckVersion(); - } - - private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) - { - Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); - e.Handled = true; - - this.Close(); - } - } -} +using System; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Windows; +using System.Windows.Documents; +using System.Windows.Input; +using Toastify.Events; +using Toastify.Services; + +namespace Toastify.UI +{ + /// + /// Interaction logic for About.xaml + /// + [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] + public partial class About : Window + { + private readonly VersionChecker versionChecker; + + public About() + { + this.InitializeComponent(); + + this.versionChecker = new VersionChecker(); + this.versionChecker.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; + + this.DataContext = this.versionChecker; + } + + private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) + { + string latestVersionText; + + if (string.IsNullOrEmpty(e.Version)) + latestVersionText = "Unable to check version."; + else if (e.New) + latestVersionText = "New version available!"; + else + latestVersionText = "You have the latest version."; + + this.Dispatcher.Invoke(new Action(() => + { + Run run = new Run(latestVersionText); + this.LatestVersion.Inlines.Clear(); + this.LatestVersion.Inlines.Add(run); + }), System.Windows.Threading.DispatcherPriority.Normal); + } + + private void CodeplexLink_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + Process.Start("http://toastify.codeplex.com"); + } + + private void Border_MouseUp(object sender, MouseButtonEventArgs e) + { + this.Close(); + } + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + this.versionChecker.BeginCheckVersion(); + } + + private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) + { + Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); + e.Handled = true; + + this.Close(); + } + } +} \ No newline at end of file diff --git a/Toastify/Settings.xaml b/Toastify/src/UI/Settings.xaml similarity index 90% rename from Toastify/Settings.xaml rename to Toastify/src/UI/Settings.xaml index 68664f66..d22c40a2 100644 --- a/Toastify/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -1,138 +1,139 @@ - - - - - - - - - - - - - - - - Launch Toastify with Windows - Minimize Spotify on launch - Close Spotify when you close Toastify - When changing volume, change volume only for Spotify - - - - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - - - - - - Do not collect anonymous usage data - - Data is never shared, is anonymous, and is used to inform future features - - - - - - - - - - - - Enable Global Hotkeys - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disable Toast - - Only Show Toast when Hotkey is pressed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. - - - - - - - - - - - + + + + + + + + + + + + + + + + Launch Toastify with Windows + Minimize Spotify on launch + Close Spotify when you close Toastify + When changing volume, change volume only for Spotify + + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + + + + + + Do not collect anonymous usage data + + Data is never shared, is anonymous, and is used to inform future features + + + + + + + + + + + + Enable Global Hotkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disable Toast + + Only Show Toast when Hotkey is pressed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. + + + + + + + + + + + diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/UI/Settings.xaml.cs new file mode 100644 index 00000000..b1790e8f --- /dev/null +++ b/Toastify/src/UI/Settings.xaml.cs @@ -0,0 +1,277 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Forms; +using System.Windows.Input; +using Toastify.Core; +using Toastify.Services; + +namespace Toastify.UI +{ + [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] + public partial class Settings : Window + { + public SettingsXml settings; + private readonly Toast toast; + + private List modifierKeys = new List { Key.LeftCtrl, Key.RightCtrl, Key.LeftAlt, Key.Right, Key.LeftShift, Key.RightShift, Key.LWin, Key.RWin, Key.System }; + + private static Settings _current; + + public static void Launch(Toast toast) + { + if (_current != null) + _current.Activate(); + else + new Settings(toast).ShowDialog(); + } + + private Settings(Toast toast) + { + Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.SettingsLaunched); + + this.settings = SettingsXml.Instance.Clone(); + this.toast = toast; + + this.InitializeComponent(); + + //Data context initialisation + this.GeneralGrid.DataContext = this.settings; + + //Slider initialisation + try + { + this.slTopColor.Value = byte.Parse(this.settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); + this.slBottomColor.Value = byte.Parse(this.settings.ToastColorBottom.Substring(1, 2), NumberStyles.AllowHexSpecifier); + this.slBorderColor.Value = byte.Parse(this.settings.ToastBorderColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); + } + catch + { + // ignored + } + + if (_current == null) + _current = this; + } + + private void Window_Closed(object sender, EventArgs e) + { + if (ReferenceEquals(_current, this)) + _current = null; + } + + //Change Color button click events + private void ChangeColorTop_Click(object sender, RoutedEventArgs e) + { + ColorDialog MyDialog = new ColorDialog(); + string alpha = this.settings.ToastColorTop.Substring(1, 2); + MyDialog.Color = HexToColor(this.settings.ToastColorTop); + MyDialog.ShowDialog(); + this.settings.ToastColorTop = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); + } + + private void ChangeColorBottom_Click(object sender, RoutedEventArgs e) + { + ColorDialog MyDialog = new ColorDialog(); + string alpha = this.settings.ToastColorBottom.Substring(1, 2); + MyDialog.Color = HexToColor(this.settings.ToastColorBottom); + MyDialog.ShowDialog(); + this.settings.ToastColorBottom = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); + } + + private void ChangeBorderColor_Click(object sender, RoutedEventArgs e) + { + ColorDialog MyDialog = new ColorDialog(); + string alpha = this.settings.ToastBorderColor.Substring(1, 2); + MyDialog.Color = HexToColor(this.settings.ToastBorderColor); + MyDialog.ShowDialog(); + this.settings.ToastBorderColor = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); + } + + //Default and Save blick events + private void Default_Click(object sender, RoutedEventArgs e) + { + this.settings.Default(); + this.SaveAndApplySettings(); + } + + private void Save_Click(object sender, RoutedEventArgs e) + { + this.SaveAndApplySettings(); + } + + private void SaveAndApplySettings() + { + this.settings.Save(true); + + this.toast.InitToast(); + this.toast.DisplayAction(SpotifyAction.SettingsSaved, null); + } + + //Text box Mouse Wheel events + private void CornerTopLeft_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + { + this.settings.ToastBorderCornerRadiusTopLeft += 0.1; + } + else if (this.settings.ToastBorderCornerRadiusTopLeft >= 0.1) + this.settings.ToastBorderCornerRadiusTopLeft -= 0.1; + } + + private void CornerTopRight_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastBorderCornerRadiusTopRight += 0.1; + else if (this.settings.ToastBorderCornerRadiusTopLeft >= 0.1) + this.settings.ToastBorderCornerRadiusTopRight -= 0.1; + } + + private void CornerBottomRight_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastBorderCornerRadiusBottomRight += 0.1; + else if (this.settings.ToastBorderCornerRadiusBottomRight >= 0.1) + this.settings.ToastBorderCornerRadiusBottomRight -= 0.1; + } + + private void CornerBottomLeft_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastBorderCornerRadiusBottomLeft += 0.1; + else if (this.settings.ToastBorderCornerRadiusBottomLeft >= 0.1) + this.settings.ToastBorderCornerRadiusBottomLeft -= 0.1; + } + + private void FadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.FadeOutTime += 10; + else if (this.settings.FadeOutTime >= 10) + this.settings.FadeOutTime -= 10; + } + + private void BorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastBorderThickness++; + else if (this.settings.ToastBorderThickness >= 1) + this.settings.ToastBorderThickness--; + } + + private void ToastWidth_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastWidth += 5; + else if (this.settings.ToastWidth >= 205) + this.settings.ToastWidth -= 5; + } + + private void ToastHeight_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastHeight += 5; + else if (this.settings.ToastHeight >= 70) + this.settings.ToastHeight -= 5; + } + + private void PositionLeft_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.PositionLeft++; + else if (this.settings.PositionLeft > 0) + this.settings.PositionLeft--; + } + + private void PositionTop_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.PositionTop++; + else if (this.settings.PositionTop > 0) + this.settings.PositionTop--; + } + + //Slider value changed events + private void TopColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + string transparency = Convert.ToByte(this.slTopColor.Value).ToString("X2"); + this.settings.ToastColorTop = "#" + transparency + this.settings.ToastColorTop.Substring(3); + } + + private void BottomColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + string transparency = Convert.ToByte(this.slBottomColor.Value).ToString("X2"); + this.settings.ToastColorBottom = "#" + transparency + this.settings.ToastColorBottom.Substring(3); + } + + private void BorderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + string transparency = Convert.ToByte(this.slBorderColor.Value).ToString("X2"); + this.settings.ToastBorderColor = "#" + transparency + this.settings.ToastBorderColor.Substring(3); + } + + // Hexadecimal to Color converter + public static System.Drawing.Color HexToColor(string hexColor) + { + //Remove # if present + if (hexColor.IndexOf('#') != -1) + hexColor = hexColor.Replace("#", ""); + + byte alpha = 0; + byte red = 0; + byte green = 0; + byte blue = 0; + + if (hexColor.Length == 8) + { + //#RRGGBB + alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); + red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); + green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); + blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); + } + + return System.Drawing.Color.FromArgb(alpha, red, green, blue); + } + + private void TxtSingleKey_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) + { + e.Handled = true; + + var key = e.Key; + if (key == Key.System) + key = e.SystemKey; + + this.txtSingleKey.Text = key.ToString(); + + if (this.lstHotKeys.SelectedItem is Hotkey hotkey) + hotkey.Key = key; + } + + private void LstHotKeys_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (this.lstHotKeys.SelectedItem is Hotkey hotkey) + this.txtSingleKey.Text = hotkey.Key.ToString(); + } + + private void BtnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) + { + var dialog = new OpenFileDialog(); + + if (SettingsXml.Instance.SaveTrackToFilePath != null) + { + dialog.FileName = SettingsXml.Instance.SaveTrackToFilePath; + } + + dialog.CheckPathExists = true; + dialog.CheckFileExists = false; + dialog.ShowReadOnly = false; + + if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) + this.settings.SaveTrackToFilePath = dialog.FileName; + } + } +} \ No newline at end of file diff --git a/Toastify/Toast.xaml b/Toastify/src/UI/Toast.xaml similarity index 97% rename from Toastify/Toast.xaml rename to Toastify/src/UI/Toast.xaml index 1338f17e..078b4842 100644 --- a/Toastify/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -1,51 +1,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Body (feat. DJ Rush) - Si Begg - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Body (feat. DJ Rush) + Si Begg + + + + diff --git a/Toastify/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs similarity index 56% rename from Toastify/Toast.xaml.cs rename to Toastify/src/UI/Toast.xaml.cs index d7e285e6..ac99dff5 100644 --- a/Toastify/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -1,792 +1,809 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Timers; -using System.Windows; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Interop; -using System.Windows.Media.Imaging; -using System.Net; -using System.IO; -using System.Xml.XPath; -using System.Xml; -using System.Diagnostics; -using System.Web; -using System.Runtime.InteropServices; -using Newtonsoft.Json; -using Garlic; - -namespace Toastify -{ - public partial class Toast : Window - { - private const string DEFAULT_ICON = "SpotifyToastifyLogo.png"; - private const string AD_PLAYING_ICON = "SpotifyAdPlaying.png"; - private const string ALBUM_ACCESS_DENIED_ICON = "ToastifyAccessDenied.png"; - - Timer watchTimer; - Timer minimizeTimer; - - System.Windows.Forms.NotifyIcon trayIcon; - - /// - /// Holds the actual icon shown on the toast - /// - string toastIcon = ""; - - BitmapImage cover; - - private VersionChecker versionChecker; - private bool isUpdateToast = false; - - internal List Plugins { get; set; } - - internal static Toast Current { get; private set; } - - /// - /// To the best of our knowledge this is our current playing song - /// - Song currentSong = null; - - private bool dragging = false; - - public new Visibility Visibility - { - get { return base.Visibility; } - set - { - base.Visibility = value; - } - } - - public void LoadSettings() - { - - try - { - SettingsXml.Current.Load(); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine("Exception loading settings:\n" + ex); - - MessageBox.Show(@"Toastify was unable to load the settings file." + Environment.NewLine + - "Delete the Toastify.xml file and restart the application to recreate the settings file." + Environment.NewLine + - Environment.NewLine + - "The application will now be started with default settings.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - - SettingsXml.Current.Default(setHotKeys: true); - } - } - - public Toast() - { - InitializeComponent(); - - // set a static reference back to ourselves, useful for callbacks - Current = this; - } - - private void Window_Loaded(object sender, RoutedEventArgs e) - { - //Load settings from XML - LoadSettings(); - - string version = VersionChecker.Version; - - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); - - if (SettingsXml.Current.PreviousOS != version) - { - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - - SettingsXml.Current.PreviousOS = version; - } - - //Init toast(color settings) - InitToast(); - - //Init tray icon - trayIcon = new System.Windows.Forms.NotifyIcon(); - trayIcon.Icon = Toastify.Properties.Resources.spotifyicon; - trayIcon.Text = "Toastify"; - trayIcon.Visible = true; - - trayIcon.ContextMenu = new System.Windows.Forms.ContextMenu(); - - //Init tray icon menu - System.Windows.Forms.MenuItem menuSettings = new System.Windows.Forms.MenuItem(); - menuSettings.Text = "Settings"; - menuSettings.Click += (s, ev) => { Settings.Launch(this); }; - - trayIcon.ContextMenu.MenuItems.Add(menuSettings); - - System.Windows.Forms.MenuItem menuAbout = new System.Windows.Forms.MenuItem(); - menuAbout.Text = "About Toastify..."; - menuAbout.Click += (s, ev) => { new About().ShowDialog(); }; - - trayIcon.ContextMenu.MenuItems.Add(menuAbout); - - trayIcon.ContextMenu.MenuItems.Add("-"); - - System.Windows.Forms.MenuItem menuExit = new System.Windows.Forms.MenuItem(); - menuExit.Text = "Exit"; - menuExit.Click += (s, ev) => { Application.Current.Shutdown(); }; //this.Close(); }; - - trayIcon.ContextMenu.MenuItems.Add(menuExit); - - trayIcon.MouseClick += (s, ev) => { if (ev.Button == System.Windows.Forms.MouseButtons.Left) DisplayAction(SpotifyAction.ShowToast, null); }; - - trayIcon.DoubleClick += (s, ev) => { Settings.Launch(this); }; - - //Init watch timer - watchTimer = new Timer(1000); - watchTimer.Elapsed += (s, ev) => - { - watchTimer.Stop(); - CheckTitle(); - watchTimer.Start(); - }; - - this.Deactivated += Toast_Deactivated; - - //Remove from ALT+TAB - WinHelper.AddToolWindowStyle(this); - - //Check if Spotify is running. - AskUserToStartSpotify(); - LoadPlugins(); - - //Let the plugins know we're started. - foreach (var p in this.Plugins) - { - try - { - p.Started(); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - } - - if (!SettingsXml.Current.DisableToast) - watchTimer.Enabled = true; //Only need to be enabled if we are going to show the toast. - - versionChecker = new VersionChecker(); - versionChecker.CheckVersionComplete += new EventHandler(versionChecker_CheckVersionComplete); - versionChecker.BeginCheckVersion(); - - // TODO: right now this is pretty dumb - kick off update notifications every X hours, this might get annoying - // and really we should just pop a notification once per version and probably immediately after a song toast - var updateTimer = new System.Windows.Threading.DispatcherTimer(); - updateTimer.Tick += (timerSender, timerE) => { versionChecker.BeginCheckVersion(); }; - updateTimer.Interval = new TimeSpan(6, 0, 0); - updateTimer.Start(); - } - - void Toast_Deactivated(object sender, EventArgs e) - { - this.Topmost = true; - } - - public void InitToast() - { - const double MIN_WIDTH = 200.0; - const double MIN_HEIGHT = 65.0; - - //If we find any invalid settings in the xml we skip it and use default. - //User notification of bad settings will be implemented with the settings dialog. - - //This method is UGLY but we'll keep it until the settings dialog is implemented. - SettingsXml settings = SettingsXml.Current; - - ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); - - ColorConverter cc = new ColorConverter(); - if (!string.IsNullOrEmpty(settings.ToastBorderColor) && cc.IsValid(settings.ToastBorderColor)) - ToastBorder.BorderBrush = new SolidColorBrush((Color)cc.ConvertFrom(settings.ToastBorderColor)); - - if (!string.IsNullOrEmpty(settings.ToastColorTop) && !string.IsNullOrEmpty(settings.ToastColorBottom) && cc.IsValid(settings.ToastColorTop) && cc.IsValid(settings.ToastColorBottom)) - { - Color top = (Color)cc.ConvertFrom(settings.ToastColorTop); - Color botton = (Color)cc.ConvertFrom(settings.ToastColorBottom); - - ToastBorder.Background = new LinearGradientBrush(top, botton, 90.0); - } - - if (settings.ToastWidth >= MIN_WIDTH) - this.Width = settings.ToastWidth; - if (settings.ToastHeight >= MIN_HEIGHT) - this.Height = settings.ToastHeight; - - //If we made it this far we have all the values needed. - ToastBorder.CornerRadius = new CornerRadius(settings.ToastBorderCornerRadiusTopLeft, settings.ToastBorderCornerRadiusTopRight, settings.ToastBorderCornerRadiusBottomRight, settings.ToastBorderCornerRadiusBottomLeft); - } - - private void CheckTitle() - { - Song currentSong = Spotify.GetCurrentSong(); - - if (currentSong != null && currentSong.IsValid() && !currentSong.Equals(this.currentSong)) - { - // set the previous title asap so that the next timer call to this function will - // fail fast (setting it at the end may cause multiple web requests) - this.currentSong = currentSong; - - try - { - Spotify.SetCoverArt(currentSong); - } - catch - { - // Exceptions will be handled (for telemetry etc.) within SetCoverArt, but they will be rethrown - // so that we can set custom artwork here - currentSong.CoverArtUrl = ALBUM_ACCESS_DENIED_ICON; - } - - // Toastify-specific custom logic around album art (if it's missing, or an ad) - UpdateSongForToastify(currentSong); - - toastIcon = currentSong.CoverArtUrl; - - this.Dispatcher.Invoke((Action)delegate { Title1.Text = currentSong.Track; Title2.Text = currentSong.Artist; }, System.Windows.Threading.DispatcherPriority.Normal); - - foreach (var p in this.Plugins) - { - try - { - p.TrackChanged(currentSong.Artist, currentSong.Track); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - } - - this.Dispatcher.Invoke((Action)delegate { FadeIn(); }, System.Windows.Threading.DispatcherPriority.Normal); - - if (SettingsXml.Current.SaveTrackToFile) - { - if (!string.IsNullOrEmpty(SettingsXml.Current.SaveTrackToFilePath)) - { - try - { - string trackText = GetClipboardText(currentSong); - - File.WriteAllText(SettingsXml.Current.SaveTrackToFilePath, trackText); - } - catch { } // ignore errors writing out the album - } - } - } - } - - private void UpdateSongForToastify(Song currentSong) - { - if (string.IsNullOrWhiteSpace(currentSong.Track)) - { - currentSong.CoverArtUrl = AD_PLAYING_ICON; - - currentSong.Track = "Spotify Ad"; - } - else if (string.IsNullOrWhiteSpace(currentSong.CoverArtUrl)) - { - currentSong.CoverArtUrl = DEFAULT_ICON; - } - } - - private void FadeIn(bool force = false, bool isUpdate = false) - { - if (minimizeTimer != null) - minimizeTimer.Stop(); - - if (dragging) - return; - - SettingsXml settings = SettingsXml.Current; - - // this is a convenient place to reset the idle timer (if so asked) - // as this will be triggered when a song is played. The primary problem is if there is a - // particularly long song then this will not work. That said, this is the safest (in terms of - // not causing a user's computer from never sleeping). - if (settings.PreventSleepWhilePlaying) - { -#if DEBUG - var rv = -#endif - WinHelper.SetThreadExecutionState(WinHelper.EXECUTION_STATE.ES_SYSTEM_REQUIRED); -#if DEBUG - System.Diagnostics.Debug.WriteLine("** SetThreadExecutionState returned: " + rv); -#endif - } - - if ((settings.DisableToast || settings.OnlyShowToastOnHotkey) && !force) - return; - - isUpdateToast = isUpdate; - - if (!string.IsNullOrEmpty(toastIcon)) - { - cover = new BitmapImage(); - cover.BeginInit(); - cover.UriSource = new Uri(toastIcon, UriKind.RelativeOrAbsolute); - cover.EndInit(); - LogoToast.Source = cover; - } - - this.WindowState = WindowState.Normal; - - System.Drawing.Rectangle workingArea = new System.Drawing.Rectangle((int)this.Left, (int)this.Height, (int)this.ActualWidth, (int)this.ActualHeight); - workingArea = System.Windows.Forms.Screen.GetWorkingArea(workingArea); - - this.Left = settings.PositionLeft; - this.Top = settings.PositionTop; - - ResetPositionIfOffScreen(workingArea); - - DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); - anim.Completed += (s, e) => { FadeOut(); }; - this.BeginAnimation(Window.OpacityProperty, anim); - - this.Topmost = true; - } - - private void ResetPositionIfOffScreen(System.Drawing.Rectangle workingArea) - { - var rect = new System.Drawing.Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); - - if (!System.Windows.Forms.Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) - { - // get the defaults, but don't save them (this allows the user to reconnect their screen and get their - // desired settings back) - var position = ScreenHelper.GetDefaultToastPosition(this.Width, this.Height); - - this.Left = position.X; - this.Top = position.Y; - } - } - - private void FadeOut(bool now = false) - { - // 16 == one frame (0 is not a valid interval) - var interval = (now ? 16 : SettingsXml.Current.FadeOutTime); - - DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); - anim.BeginTime = TimeSpan.FromMilliseconds(interval); - this.BeginAnimation(Window.OpacityProperty, anim); - - if (minimizeTimer == null) - { - minimizeTimer = new Timer(); - minimizeTimer.AutoReset = false; - - minimizeTimer.Elapsed += (s, ev) => - { - Dispatcher.Invoke((Action)delegate - { - this.WindowState = WindowState.Minimized; - - System.Diagnostics.Debug.WriteLine("Minimized"); - }); - }; - } - - // extra buffer to avoid graphics corruption at the tail end of the fade - minimizeTimer.Interval = interval * 2; - - minimizeTimer.Stop(); - minimizeTimer.Start(); - } - - void versionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) - { - if (!e.New) - return; - - string title = "Update Toastify!"; - string caption = "Version " + e.Version + " available now."; - - // this is a background thread, so sleep it a bit so that it doesn't clash with the startup toast - System.Threading.Thread.Sleep(20000); - - this.Dispatcher.Invoke((Action)delegate - { - Title1.Text = title; - Title2.Text = caption; - - toastIcon = "SpotifyToastifyUpdateLogo.png"; - - FadeIn(force: true, isUpdate: true); - }, System.Windows.Threading.DispatcherPriority.Normal); - } - - private void LoadPlugins() - { - //Load plugins - this.Plugins = new List(); - string applicationPath = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName; - - foreach (var p in SettingsXml.Current.Plugins) - { - try - { - var plugin = Activator.CreateInstanceFrom(System.IO.Path.Combine(applicationPath, p.FileName), p.TypeName).Unwrap() as Toastify.Plugin.PluginBase; - plugin.Init(p.Settings); - this.Plugins.Add(plugin); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - Console.WriteLine("Loaded " + p.TypeName); - } - } - - private void AskUserToStartSpotify() - { - SettingsXml settings = SettingsXml.Current; - - // Thanks to recent changes in Spotify that removed the song Artist + Title from the titlebar - // we are forced to launch Spotify ourselves (under WebDriver), so we no longer ask the user - try - { - Spotify.StartSpotify(); - } - catch (Exception e) - { - MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - } - } - - protected override void OnClosing(System.ComponentModel.CancelEventArgs e) - { - // close Spotify first - if (SettingsXml.Current.CloseSpotifyWithToastify) - { - Spotify.KillSpotify(); - } - - // Ensure trayicon is removed on exit. (Thx Linus) - trayIcon.Visible = false; - trayIcon.Dispose(); - trayIcon = null; - - // Let the plugins now we're closing up. - // we do this last since it's transparent to the user - foreach (var p in this.Plugins) - { - try - { - p.Closing(); - p.Dispose(); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - } - - this.Plugins.Clear(); - - base.OnClosing(e); - } - - private System.Windows.Input.Key ConvertKey(System.Windows.Forms.Keys key) - { - if (Enum.GetNames(typeof(System.Windows.Input.Key)).Contains(key.ToString())) - return (System.Windows.Input.Key)Enum.Parse(typeof(System.Windows.Input.Key), key.ToString()); - else - return Key.None; - } - - #region ActionHookCallback - - private static Hotkey _lastHotkey = null; - private static DateTime _lastHotkeyPressTime = DateTime.Now; - - /// - /// If the same hotkey press happens within this buffer time, it will be ignored. - /// - /// I came to 150 by pressing keys as quickly as possibly. The minimum time was less than 150 - /// but most values fell in the 150 to 200 range for quick presses, so 150 seemed the most reasonable - /// - private const int WAIT_BETWEEN_HOTKEY_PRESS = 150; - - internal static void ActionHookCallback(Hotkey hotkey) - { - // Bug 9421: ignore this keypress if it is the same as the previous one and it's been less than - // WAIT_BETWEEN_HOTKEY_PRESS since the last press. Note that we do not update - // _lastHotkeyPressTime in this case to avoid being trapped in a never ending cycle of - // ignoring keypresses if the user (for some reason) decides to press really quickly, - // really often on the hotkey - if (hotkey == _lastHotkey && DateTime.Now.Subtract(_lastHotkeyPressTime).TotalMilliseconds < WAIT_BETWEEN_HOTKEY_PRESS) - return; - - _lastHotkey = hotkey; - _lastHotkeyPressTime = DateTime.Now; - - string currentTrack = string.Empty; - - try - { - Song songBeforeAction = Toast.Current.currentSong; - - if (hotkey.Action == SpotifyAction.CopyTrackInfo && songBeforeAction != null) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); - - CopySongToClipboard(songBeforeAction); - } - else if (hotkey.Action == SpotifyAction.PasteTrackInfo && songBeforeAction != null) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); - - CopySongToClipboard(songBeforeAction); - - SendPasteKey(hotkey); - } - else - { - Spotify.SendAction(hotkey.Action); - } - - Toast.Current.DisplayAction(hotkey.Action, songBeforeAction); - } - catch (Exception ex) - { - if (System.Diagnostics.Debugger.IsAttached) - System.Diagnostics.Debugger.Break(); - - System.Diagnostics.Debug.WriteLine("Exception with hooked key! " + ex); - Toast.Current.Title1.Text = "Unable to communicate with Spotify"; - Toast.Current.Title2.Text = ""; - Toast.Current.FadeIn(); - } - } - - private static void SendPasteKey(Hotkey hotkey) - { - var shiftKey = new ManagedWinapi.KeyboardKey(System.Windows.Forms.Keys.ShiftKey); - var altKey = new ManagedWinapi.KeyboardKey(System.Windows.Forms.Keys.Alt); - var ctrlKey = new ManagedWinapi.KeyboardKey(System.Windows.Forms.Keys.ControlKey); - var vKey = new ManagedWinapi.KeyboardKey(System.Windows.Forms.Keys.V); - - // Before injecting a paste command, first make sure that no modifiers are already - // being pressed (which will throw off the Ctrl+v). - // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck - var maxSleep = 250; - - // minimum sleep time - System.Threading.Thread.Sleep(150); - - //System.Diagnostics.Debug.WriteLine("shift: " + shiftKey.State + " alt: " + altKey.State + " ctrl: " + ctrlKey.State); - - while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) - System.Threading.Thread.Sleep(maxSleep -= 50); - - //System.Diagnostics.Debug.WriteLine("maxSleep: " + maxSleep); - - // press keys in sequence. Don't use PressAndRelease since that seems to be too fast - // for most applications and the sequence gets lost. - ctrlKey.Press(); - vKey.Press(); - System.Threading.Thread.Sleep(25); - vKey.Release(); - System.Threading.Thread.Sleep(25); - ctrlKey.Release(); - } - - private static string GetClipboardText(Song currentSong) - { - string trackBeforeAction = currentSong.ToString(); - var template = SettingsXml.Current.ClipboardTemplate; - - // if the string is empty we set it to {0} - if (string.IsNullOrWhiteSpace(template)) - template = "{0}"; - - // add the song name to the end of the template if the user forgot to put in the - // replacement marker - if (!template.Contains("{0}")) - template += " {0}"; - - return string.Format(template, trackBeforeAction); - } - - private static void CopySongToClipboard(Song trackBeforeAction) - { - Clipboard.SetText(GetClipboardText(trackBeforeAction)); - } - - #endregion - - public void DisplayAction(SpotifyAction action, Song trackBeforeAction) - { - //Anything that changes track doesn't need to be handled since - //that will be handled in the timer event. - - const string VOLUME_UP_TEXT = "Volume ++"; - const string VOLUME_DOWN_TEXT = "Volume --"; - const string MUTE_ON_OFF_TEXT = "Mute On/Off"; - const string NOTHINGS_PLAYING = "Nothing's playing"; - const string PAUSED_TEXT = "Paused"; - const string STOPPED_TEXT = "Stopped"; - const string SETTINGS_TEXT = "Settings saved"; - - if (!Spotify.IsRunning() && action != SpotifyAction.SettingsSaved) - { - toastIcon = DEFAULT_ICON; - Title1.Text = "Spotify not available!"; - Title2.Text = string.Empty; - FadeIn(); - return; - } - - Song currentTrack = trackBeforeAction; - - string prevTitle1 = Title1.Text; - string prevTitle2 = Title2.Text; - - switch (action) - { - case SpotifyAction.PlayPause: - if (trackBeforeAction != null) - { - //We pressed pause - Title1.Text = "Paused"; - Title2.Text = trackBeforeAction.ToString(); - FadeIn(); - } - currentSong = null; //If we presses play this will force a toast to display in next timer event. - break; - case SpotifyAction.Stop: - currentSong = null; - Title1.Text = "Stopped"; - Title2.Text = trackBeforeAction.ToString(); - FadeIn(); - break; - case SpotifyAction.SettingsSaved: - Title1.Text = SETTINGS_TEXT; - Title2.Text = "Here is a preview of your settings!"; - FadeIn(); - break; - case SpotifyAction.NextTrack: //No need to handle - break; - case SpotifyAction.PreviousTrack: //No need to handle - break; - case SpotifyAction.VolumeUp: - Title1.Text = VOLUME_UP_TEXT; - Title2.Text = currentTrack.ToString(); - FadeIn(); - break; - case SpotifyAction.VolumeDown: - Title1.Text = VOLUME_DOWN_TEXT; - Title2.Text = currentTrack.ToString(); - FadeIn(); - break; - case SpotifyAction.Mute: - Title1.Text = MUTE_ON_OFF_TEXT; - Title2.Text = currentTrack.ToString(); - FadeIn(); - break; - case SpotifyAction.ShowToast: - if (currentTrack == null || !currentTrack.IsValid()) - { - toastIcon = DEFAULT_ICON; - - Title1.Text = NOTHINGS_PLAYING; - Title2.Text = string.Empty; - } - else - { - if (currentTrack != null && currentTrack.IsValid()) - { - toastIcon = currentTrack.CoverArtUrl; - - Title1.Text = currentTrack.Artist; - Title2.Text = currentTrack.Track; - } - } - - FadeIn(force: true); - break; - case SpotifyAction.ShowSpotify: //No need to handle - break; - case SpotifyAction.ThumbsUp: - toastIcon = "Resources/thumbs_up.png"; - - Title1.Text = "Thumbs Up!"; - Title2.Text = currentTrack.ToString(); - FadeIn(); - break; - case SpotifyAction.ThumbsDown: - toastIcon = "Resources/thumbs_down.png"; - - Title1.Text = "Thumbs Down :("; - Title2.Text = currentTrack.ToString(); - FadeIn(); - break; - } - } - - /// - /// Mouse is over the window, halt any fade out animations and keep - /// the toast active. - /// - /// - /// - private void Window_MouseEnter(object sender, MouseEventArgs e) - { - this.BeginAnimation(Window.OpacityProperty, null); - this.Opacity = 1.0; - } - - private void Window_MouseLeave(object sender, MouseEventArgs e) - { - FadeOut(); - } - - private void Window_MouseDown(object sender, MouseButtonEventArgs e) - { - if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) - { - dragging = true; - DragMove(); - return; - } - - FadeOut(now: true); - - if (isUpdateToast) - { - Process.Start(new ProcessStartInfo(versionChecker.UpdateUrl)); - } - else - { - Spotify.SendAction(SpotifyAction.ShowSpotify); - } - } - - private void Window_MouseUp(object sender, MouseButtonEventArgs e) - { - if (dragging) - { - dragging = false; - - // save the new window position - SettingsXml settings = SettingsXml.Current; - - settings.PositionLeft = this.Left; - settings.PositionTop = this.Top; - - settings.Save(); - } - } - - - } -} +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Media.Imaging; +using Toastify.Core; +using Toastify.Events; +using Toastify.Helpers; +using Toastify.Services; +using Application = System.Windows.Application; +using Clipboard = System.Windows.Clipboard; +using MessageBox = System.Windows.MessageBox; +using MouseEventArgs = System.Windows.Input.MouseEventArgs; +using Timer = System.Timers.Timer; + +namespace Toastify.UI +{ + [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] + public partial class Toast : Window + { + private const string DEFAULT_ICON = "SpotifyToastifyLogo.png"; + private const string AD_PLAYING_ICON = "SpotifyAdPlaying.png"; + private const string ALBUM_ACCESS_DENIED_ICON = "ToastifyAccessDenied.png"; + + private Timer watchTimer; + private Timer minimizeTimer; + + private NotifyIcon trayIcon; + + /// + /// Holds the actual icon shown on the toast + /// + private string toastIcon = ""; + + private BitmapImage cover; + + private VersionChecker versionChecker; + private bool isUpdateToast; + + internal List Plugins { get; set; } + + internal static Toast Current { get; private set; } + + /// + /// To the best of our knowledge this is our current playing song + /// + private Song currentSong; + + private bool dragging; + + public new Visibility Visibility + { + get { return base.Visibility; } + set { base.Visibility = value; } + } + + public void LoadSettings() + { + try + { + SettingsXml.Instance.Load(); + } + catch (Exception ex) + { + Debug.WriteLine("Exception loading settings:\n" + ex); + + MessageBox.Show(@"Toastify was unable to load the settings file." + Environment.NewLine + + "Delete the Toastify.xml file and restart the application to recreate the settings file." + Environment.NewLine + + Environment.NewLine + + "The application will now be started with default settings.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + + SettingsXml.Instance.Default(setHotKeys: true); + } + } + + public Toast() + { + this.InitializeComponent(); + + // set a static reference back to ourselves, useful for callbacks + Current = this; + } + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + //Load settings from XML + this.LoadSettings(); + + string version = VersionChecker.Version; + + Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); + + if (SettingsXml.Instance.PreviousOS != version) + { + Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); + + SettingsXml.Instance.PreviousOS = version; + } + + //Init toast(color settings) + this.InitToast(); + + //Init tray icon + this.trayIcon = new NotifyIcon + { + Icon = Properties.Resources.spotifyicon, + Text = @"Toastify", + Visible = true, + ContextMenu = new ContextMenu() + }; + + + //Init tray icon menu + MenuItem menuSettings = new MenuItem { Text = @"Settings" }; + menuSettings.Click += (s, ev) => { Settings.Launch(this); }; + + this.trayIcon.ContextMenu.MenuItems.Add(menuSettings); + + MenuItem menuAbout = new MenuItem { Text = @"About Toastify..." }; + menuAbout.Click += (s, ev) => { new About().ShowDialog(); }; + + this.trayIcon.ContextMenu.MenuItems.Add(menuAbout); + + this.trayIcon.ContextMenu.MenuItems.Add("-"); + + MenuItem menuExit = new MenuItem { Text = @"Exit" }; + menuExit.Click += (s, ev) => { Application.Current.Shutdown(); }; //this.Close(); }; + + this.trayIcon.ContextMenu.MenuItems.Add(menuExit); + + this.trayIcon.MouseClick += (s, ev) => { if (ev.Button == MouseButtons.Left) this.DisplayAction(SpotifyAction.ShowToast, null); }; + + this.trayIcon.DoubleClick += (s, ev) => { Settings.Launch(this); }; + + //Init watch timer + this.watchTimer = new Timer(1000); + this.watchTimer.Elapsed += (s, ev) => + { + this.watchTimer.Stop(); + this.CheckTitle(); + this.watchTimer.Start(); + }; + + this.Deactivated += this.Toast_Deactivated; + + //Remove from ALT+TAB + WinHelper.AddToolWindowStyle(this); + + //Check if Spotify is running. + this.AskUserToStartSpotify(); + this.LoadPlugins(); + + //Let the plugins know we're started. + foreach (var p in this.Plugins) + { + try + { + p.Started(); + } + catch (Exception) + { + //For now we swallow any plugin errors. + } + } + + if (!SettingsXml.Instance.DisableToast) + this.watchTimer.Enabled = true; //Only need to be enabled if we are going to show the toast. + + this.versionChecker = new VersionChecker(); + this.versionChecker.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; + this.versionChecker.BeginCheckVersion(); + + // TODO: right now this is pretty dumb - kick off update notifications every X hours, this might get annoying + // and really we should just pop a notification once per version and probably immediately after a song toast + var updateTimer = new System.Windows.Threading.DispatcherTimer(); + updateTimer.Tick += (timerSender, timerE) => { this.versionChecker.BeginCheckVersion(); }; + updateTimer.Interval = new TimeSpan(6, 0, 0); + updateTimer.Start(); + } + + private void Toast_Deactivated(object sender, EventArgs e) + { + this.Topmost = true; + } + + public void InitToast() + { + const double minWidth = 200.0; + const double minHeight = 65.0; + + //If we find any invalid settings in the xml we skip it and use default. + //User notification of bad settings will be implemented with the settings dialog. + + //This method is UGLY but we'll keep it until the settings dialog is implemented. + SettingsXml settings = SettingsXml.Instance; + + this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); + + System.Windows.Media.ColorConverter cc = new System.Windows.Media.ColorConverter(); + if (!string.IsNullOrEmpty(settings.ToastBorderColor) && cc.IsValid(settings.ToastBorderColor)) + { + object borderBrush = cc.ConvertFrom(settings.ToastBorderColor); + if (borderBrush != null) + this.ToastBorder.BorderBrush = new SolidColorBrush((System.Windows.Media.Color)borderBrush); + } + + if (!string.IsNullOrEmpty(settings.ToastColorTop) && !string.IsNullOrEmpty(settings.ToastColorBottom) && cc.IsValid(settings.ToastColorTop) && cc.IsValid(settings.ToastColorBottom)) + { + object top = cc.ConvertFrom(settings.ToastColorTop); + object bottom = cc.ConvertFrom(settings.ToastColorBottom); + + if (top != null && bottom != null) + this.ToastBorder.Background = new LinearGradientBrush((System.Windows.Media.Color)top, (System.Windows.Media.Color)bottom, 90.0); + } + + if (settings.ToastWidth >= minWidth) + this.Width = settings.ToastWidth; + if (settings.ToastHeight >= minHeight) + this.Height = settings.ToastHeight; + + //If we made it this far we have all the values needed. + this.ToastBorder.CornerRadius = new CornerRadius(settings.ToastBorderCornerRadiusTopLeft, settings.ToastBorderCornerRadiusTopRight, settings.ToastBorderCornerRadiusBottomRight, settings.ToastBorderCornerRadiusBottomLeft); + } + + private void CheckTitle() + { + Song currentSong = Spotify.GetCurrentSong(); + + if (currentSong != null && currentSong.IsValid() && !currentSong.Equals(this.currentSong)) + { + // set the previous title asap so that the next timer call to this function will + // fail fast (setting it at the end may cause multiple web requests) + this.currentSong = currentSong; + + try + { + Spotify.SetCoverArt(currentSong); + } + catch + { + // Exceptions will be handled (for telemetry etc.) within SetCoverArt, but they will be rethrown + // so that we can set custom artwork here + currentSong.CoverArtUrl = ALBUM_ACCESS_DENIED_ICON; + } + + // Toastify-specific custom logic around album art (if it's missing, or an ad) + this.UpdateSongForToastify(currentSong); + + this.toastIcon = currentSong.CoverArtUrl; + + this.Dispatcher.Invoke((Action)delegate { this.Title1.Text = currentSong.Track; this.Title2.Text = currentSong.Artist; }, System.Windows.Threading.DispatcherPriority.Normal); + + foreach (var p in this.Plugins) + { + try + { + p.TrackChanged(currentSong.Artist, currentSong.Track); + } + catch (Exception) + { + //For now we swallow any plugin errors. + } + } + + this.Dispatcher.Invoke((Action)delegate { this.FadeIn(); }, System.Windows.Threading.DispatcherPriority.Normal); + + if (SettingsXml.Instance.SaveTrackToFile) + { + if (!string.IsNullOrEmpty(SettingsXml.Instance.SaveTrackToFilePath)) + { + try + { + string trackText = GetClipboardText(currentSong); + + File.WriteAllText(SettingsXml.Instance.SaveTrackToFilePath, trackText); + } + catch + { + // ignore errors writing out the album + } + } + } + } + } + + private void UpdateSongForToastify(Song currentSong) + { + if (string.IsNullOrWhiteSpace(currentSong.Track)) + { + currentSong.CoverArtUrl = AD_PLAYING_ICON; + currentSong.Track = "Spotify Ad"; + } + else if (string.IsNullOrWhiteSpace(currentSong.CoverArtUrl)) + currentSong.CoverArtUrl = DEFAULT_ICON; + } + + private void FadeIn(bool force = false, bool isUpdate = false) + { + this.minimizeTimer?.Stop(); + + if (this.dragging) + return; + + SettingsXml settings = SettingsXml.Instance; + + // this is a convenient place to reset the idle timer (if so asked) + // as this will be triggered when a song is played. The primary problem is if there is a + // particularly long song then this will not work. That said, this is the safest (in terms of + // not causing a user's computer from never sleeping). + if (settings.PreventSleepWhilePlaying) + { +#if DEBUG + var rv = +#endif + WinHelper.SetThreadExecutionState(WinHelper.ExecutionState.EsSystemRequired); +#if DEBUG + Debug.WriteLine("** SetThreadExecutionState returned: " + rv); +#endif + } + + if ((settings.DisableToast || settings.OnlyShowToastOnHotkey) && !force) + return; + + this.isUpdateToast = isUpdate; + + if (!string.IsNullOrEmpty(this.toastIcon)) + { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.UriSource = new Uri(this.toastIcon, UriKind.RelativeOrAbsolute); + this.cover.EndInit(); + this.LogoToast.Source = this.cover; + } + + this.WindowState = WindowState.Normal; + + Rectangle workingArea = new Rectangle((int)this.Left, (int)this.Height, (int)this.ActualWidth, (int)this.ActualHeight); + workingArea = Screen.GetWorkingArea(workingArea); + + this.Left = settings.PositionLeft; + this.Top = settings.PositionTop; + + this.ResetPositionIfOffScreen(workingArea); + + DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); + anim.Completed += (s, e) => { this.FadeOut(); }; + this.BeginAnimation(OpacityProperty, anim); + + this.Topmost = true; + } + + private void ResetPositionIfOffScreen(Rectangle workingArea) + { + var rect = new Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); + + if (!Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) + { + // get the defaults, but don't save them (this allows the user to reconnect their screen and get their + // desired settings back) + var position = ScreenHelper.GetDefaultToastPosition(this.Width, this.Height); + + this.Left = position.X; + this.Top = position.Y; + } + } + + private void FadeOut(bool now = false) + { + // 16 == one frame (0 is not a valid interval) + var interval = now ? 16 : SettingsXml.Instance.FadeOutTime; + + DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)) + { + BeginTime = TimeSpan.FromMilliseconds(interval) + }; + this.BeginAnimation(OpacityProperty, anim); + + if (this.minimizeTimer == null) + { + this.minimizeTimer = new Timer { AutoReset = false }; + + this.minimizeTimer.Elapsed += (s, ev) => + { + this.Dispatcher.Invoke((Action)delegate + { + this.WindowState = WindowState.Minimized; + Debug.WriteLine("Minimized"); + }); + }; + } + + // extra buffer to avoid graphics corruption at the tail end of the fade + this.minimizeTimer.Interval = interval * 2; + + this.minimizeTimer.Stop(); + this.minimizeTimer.Start(); + } + + private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) + { + if (!e.New) + return; + + const string title = "Update Toastify!"; + string caption = "Version " + e.Version + " available now."; + + // this is a background thread, so sleep it a bit so that it doesn't clash with the startup toast + System.Threading.Thread.Sleep(20000); + + this.Dispatcher.Invoke((Action)delegate + { + this.Title1.Text = title; + this.Title2.Text = caption; + + this.toastIcon = "SpotifyToastifyUpdateLogo.png"; + + this.FadeIn(true, true); + }, System.Windows.Threading.DispatcherPriority.Normal); + } + + private void LoadPlugins() + { + //Load plugins + this.Plugins = new List(); + Assembly assembly = Assembly.GetExecutingAssembly(); + if (assembly.Location != null) + { + string applicationPath = new FileInfo(assembly.Location).DirectoryName; + + foreach (var p in SettingsXml.Instance.Plugins) + { + try + { + if (applicationPath != null) + { + var plugin = Activator.CreateInstanceFrom(Path.Combine(applicationPath, p.FileName), p.TypeName).Unwrap() as Plugin.PluginBase; + plugin?.Init(p.Settings); + this.Plugins.Add(plugin); + } + else + Debug.WriteLine("applicationPath is null"); + } + catch (Exception) + { + //For now we swallow any plugin errors. + } + Console.WriteLine(@"Loaded " + p.TypeName); + } + } + } + + private void AskUserToStartSpotify() + { + // Thanks to recent changes in Spotify that removed the song Artist + Title from the titlebar + // we are forced to launch Spotify ourselves (under WebDriver), so we no longer ask the user + try + { + Spotify.StartSpotify(); + } + catch (Exception e) + { + MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + } + } + + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) + { + // close Spotify first + if (SettingsXml.Instance.CloseSpotifyWithToastify) + Spotify.KillSpotify(); + + // Ensure trayicon is removed on exit. (Thx Linus) + this.trayIcon.Visible = false; + this.trayIcon.Dispose(); + this.trayIcon = null; + + // Let the plugins now we're closing up. + // we do this last since it's transparent to the user + foreach (var p in this.Plugins) + { + try + { + p.Closing(); + p.Dispose(); + } + catch (Exception) + { + //For now we swallow any plugin errors. + } + } + + this.Plugins.Clear(); + + base.OnClosing(e); + } + + private Key ConvertKey(Keys key) + { + if (Enum.GetNames(typeof(Key)).Contains(key.ToString())) + return (Key)Enum.Parse(typeof(Key), key.ToString()); + + return Key.None; + } + + #region ActionHookCallback + + private static Hotkey _lastHotkey; + private static DateTime _lastHotkeyPressTime = DateTime.Now; + + /// + /// If the same hotkey press happens within this buffer time, it will be ignored. + /// + /// I came to 150 by pressing keys as quickly as possibly. The minimum time was less than 150 + /// but most values fell in the 150 to 200 range for quick presses, so 150 seemed the most reasonable + /// + private const int WAIT_BETWEEN_HOTKEY_PRESS = 150; + + internal static void ActionHookCallback(Hotkey hotkey) + { + // Bug 9421: ignore this keypress if it is the same as the previous one and it's been less than + // WAIT_BETWEEN_HOTKEY_PRESS since the last press. Note that we do not update + // _lastHotkeyPressTime in this case to avoid being trapped in a never ending cycle of + // ignoring keypresses if the user (for some reason) decides to press really quickly, + // really often on the hotkey + if (hotkey == _lastHotkey && DateTime.Now.Subtract(_lastHotkeyPressTime).TotalMilliseconds < WAIT_BETWEEN_HOTKEY_PRESS) + return; + + _lastHotkey = hotkey; + _lastHotkeyPressTime = DateTime.Now; + + string currentTrack = string.Empty; + + try + { + Song songBeforeAction = Current.currentSong; + + if (hotkey.Action == SpotifyAction.CopyTrackInfo && songBeforeAction != null) + { + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); + + CopySongToClipboard(songBeforeAction); + } + else if (hotkey.Action == SpotifyAction.PasteTrackInfo && songBeforeAction != null) + { + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); + + CopySongToClipboard(songBeforeAction); + + SendPasteKey(hotkey); + } + else + { + Spotify.SendAction(hotkey.Action); + } + + Current.DisplayAction(hotkey.Action, songBeforeAction); + } + catch (Exception ex) + { + if (Debugger.IsAttached) + Debugger.Break(); + + Debug.WriteLine("Exception with hooked key! " + ex); + Current.Title1.Text = "Unable to communicate with Spotify"; + Current.Title2.Text = ""; + Current.FadeIn(); + } + } + + private static void SendPasteKey(Hotkey hotkey) + { + var shiftKey = new ManagedWinapi.KeyboardKey(Keys.ShiftKey); + var altKey = new ManagedWinapi.KeyboardKey(Keys.Alt); + var ctrlKey = new ManagedWinapi.KeyboardKey(Keys.ControlKey); + var vKey = new ManagedWinapi.KeyboardKey(Keys.V); + + // Before injecting a paste command, first make sure that no modifiers are already + // being pressed (which will throw off the Ctrl+v). + // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck + var maxSleep = 250; + + // minimum sleep time + System.Threading.Thread.Sleep(150); + + //System.Diagnostics.Debug.WriteLine("shift: " + shiftKey.State + " alt: " + altKey.State + " ctrl: " + ctrlKey.State); + + while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) + System.Threading.Thread.Sleep(maxSleep -= 50); + + //System.Diagnostics.Debug.WriteLine("maxSleep: " + maxSleep); + + // press keys in sequence. Don't use PressAndRelease since that seems to be too fast + // for most applications and the sequence gets lost. + ctrlKey.Press(); + vKey.Press(); + System.Threading.Thread.Sleep(25); + vKey.Release(); + System.Threading.Thread.Sleep(25); + ctrlKey.Release(); + } + + private static string GetClipboardText(Song currentSong) + { + string trackBeforeAction = currentSong.ToString(); + var template = SettingsXml.Instance.ClipboardTemplate; + + // if the string is empty we set it to {0} + if (string.IsNullOrWhiteSpace(template)) + template = "{0}"; + + // add the song name to the end of the template if the user forgot to put in the + // replacement marker + if (!template.Contains("{0}")) + template += " {0}"; + + return string.Format(template, trackBeforeAction); + } + + private static void CopySongToClipboard(Song trackBeforeAction) + { + Clipboard.SetText(GetClipboardText(trackBeforeAction)); + } + + #endregion ActionHookCallback + + public void DisplayAction(SpotifyAction action, Song trackBeforeAction) + { + //Anything that changes track doesn't need to be handled since + //that will be handled in the timer event. + + const string volumeUpText = "Volume ++"; + const string volumeDownText = "Volume --"; + const string muteOnOffText = "Mute On/Off"; + const string nothingsPlaying = "Nothing's playing"; + const string pausedText = "Paused"; + const string stoppedText = "Stopped"; + const string settingsText = "Settings saved"; + + if (!Spotify.IsRunning() && action != SpotifyAction.SettingsSaved) + { + this.toastIcon = DEFAULT_ICON; + this.Title1.Text = "Spotify not available!"; + this.Title2.Text = string.Empty; + this.FadeIn(); + return; + } + + Song currentTrack = trackBeforeAction; + + string prevTitle1 = this.Title1.Text; + string prevTitle2 = this.Title2.Text; + + switch (action) + { + case SpotifyAction.PlayPause: + if (trackBeforeAction != null) + { + //We pressed pause + this.Title1.Text = "Paused"; + this.Title2.Text = trackBeforeAction.ToString(); + this.FadeIn(); + } + this.currentSong = null; //If we presses play this will force a toast to display in next timer event. + break; + + case SpotifyAction.Stop: + this.currentSong = null; + this.Title1.Text = "Stopped"; + this.Title2.Text = trackBeforeAction.ToString(); + this.FadeIn(); + break; + + case SpotifyAction.SettingsSaved: + this.Title1.Text = settingsText; + this.Title2.Text = "Here is a preview of your settings!"; + this.FadeIn(); + break; + + case SpotifyAction.NextTrack: //No need to handle + break; + + case SpotifyAction.PreviousTrack: //No need to handle + break; + + case SpotifyAction.VolumeUp: + this.Title1.Text = volumeUpText; + this.Title2.Text = currentTrack.ToString(); + this.FadeIn(); + break; + + case SpotifyAction.VolumeDown: + this.Title1.Text = volumeDownText; + this.Title2.Text = currentTrack.ToString(); + this.FadeIn(); + break; + + case SpotifyAction.Mute: + this.Title1.Text = muteOnOffText; + this.Title2.Text = currentTrack.ToString(); + this.FadeIn(); + break; + + case SpotifyAction.ShowToast: + if (currentTrack == null || !currentTrack.IsValid()) + { + this.toastIcon = DEFAULT_ICON; + + this.Title1.Text = nothingsPlaying; + this.Title2.Text = string.Empty; + } + else + { + if (currentTrack.IsValid()) + { + this.toastIcon = currentTrack.CoverArtUrl; + + this.Title1.Text = currentTrack.Artist; + this.Title2.Text = currentTrack.Track; + } + } + + this.FadeIn(true); + break; + + case SpotifyAction.ShowSpotify: //No need to handle + break; + + case SpotifyAction.ThumbsUp: + this.toastIcon = "Resources/thumbs_up.png"; + + this.Title1.Text = "Thumbs Up!"; + this.Title2.Text = currentTrack.ToString(); + this.FadeIn(); + break; + + case SpotifyAction.ThumbsDown: + this.toastIcon = "Resources/thumbs_down.png"; + + this.Title1.Text = "Thumbs Down :("; + this.Title2.Text = currentTrack.ToString(); + this.FadeIn(); + break; + } + } + + /// + /// Mouse is over the window, halt any fade out animations and keep + /// the toast active. + /// + /// + /// + private void Window_MouseEnter(object sender, MouseEventArgs e) + { + this.BeginAnimation(OpacityProperty, null); + this.Opacity = 1.0; + } + + private void Window_MouseLeave(object sender, MouseEventArgs e) + { + this.FadeOut(); + } + + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) + { + this.dragging = true; + this.DragMove(); + return; + } + + this.FadeOut(true); + + if (this.isUpdateToast) + { + Process.Start(new ProcessStartInfo(this.versionChecker.UpdateUrl)); + } + else + { + Spotify.SendAction(SpotifyAction.ShowSpotify); + } + } + + private void Window_MouseUp(object sender, MouseButtonEventArgs e) + { + if (this.dragging) + { + this.dragging = false; + + // save the new window position + SettingsXml settings = SettingsXml.Instance; + + settings.PositionLeft = this.Left; + settings.PositionTop = this.Top; + + settings.Save(); + } + } + } +} \ No newline at end of file diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs new file mode 100644 index 00000000..3573062e --- /dev/null +++ b/Toastify/src/Win32API.cs @@ -0,0 +1,146 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Toastify +{ + internal class Win32API + { + [DllImport("user32.dll", SetLastError = true)] + internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + + internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); + + [DllImport("user32.dll")] + internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); + + [DllImport("user32.dll")] + internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + internal static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern int GetWindowTextLength(IntPtr hWnd); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + internal static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll")] + internal static extern IntPtr SetFocus(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + [DllImport("user32.dll")] + internal static extern bool SetForegroundWindow(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); + + [Flags()] + internal enum SetWindowPosFlags : uint + { + /// If the calling thread and the thread that owns the window are attached to different input queues, + /// the system posts the request to the thread that owns the window. This prevents the calling thread from + /// blocking its execution while other threads process the request. + /// SWP_ASYNCWINDOWPOS + AsynchronousWindowPosition = 0x4000, + + /// Prevents generation of the WM_SYNCPAINT message. + /// SWP_DEFERERASE + DeferErase = 0x2000, + + /// Draws a frame (defined in the window's class description) around the window. + /// SWP_DRAWFRAME + DrawFrame = 0x0020, + + /// Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to + /// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE + /// is sent only when the window's size is being changed. + /// SWP_FRAMECHANGED + FrameChanged = 0x0020, + + /// Hides the window. + /// SWP_HIDEWINDOW + HideWindow = 0x0080, + + /// Does not activate the window. If this flag is not set, the window is activated and moved to the + /// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter + /// parameter). + /// SWP_NOACTIVATE + DoNotActivate = 0x0010, + + /// Discards the entire contents of the client area. If this flag is not specified, the valid + /// contents of the client area are saved and copied back into the client area after the window is sized or + /// repositioned. + /// SWP_NOCOPYBITS + DoNotCopyBits = 0x0100, + + /// Retains the current position (ignores X and y parameters). + /// SWP_NOMOVE + IgnoreMove = 0x0002, + + /// Does not change the owner window's position in the Z order. + /// SWP_NOOWNERZORDER + DoNotChangeOwnerZOrder = 0x0200, + + /// Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to + /// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent + /// window uncovered as a result of the window being moved. When this flag is set, the application must + /// explicitly invalidate or redraw any parts of the window and parent window that need redrawing. + /// SWP_NOREDRAW + DoNotRedraw = 0x0008, + + /// Same as the SWP_NOOWNERZORDER flag. + /// SWP_NOREPOSITION + DoNotReposition = 0x0200, + + /// Prevents the window from receiving the WM_WINDOWPOSCHANGING message. + /// SWP_NOSENDCHANGING + DoNotSendChangingEvent = 0x0400, + + /// Retains the current size (ignores the cx and cy parameters). + /// SWP_NOSIZE + IgnoreResize = 0x0001, + + /// Retains the current Z order (ignores the hWndInsertAfter parameter). + /// SWP_NOZORDER + IgnoreZOrder = 0x0004, + + /// Displays the window. + /// SWP_SHOWWINDOW + ShowWindow = 0x0040, + } + + internal struct WindowPlacement + { + public int length; + public int flags; + public int showCmd; + public System.Drawing.Point ptMinPosition; + public System.Drawing.Point ptMaxPosition; + public System.Drawing.Rectangle rcNormalPosition; + } + + internal class Constants + { + internal const uint WM_APPCOMMAND = 0x0319; + + internal const int SW_SHOWMINIMIZED = 2; + internal const int SW_SHOWNOACTIVATE = 4; + internal const int SW_SHOWMINNOACTIVE = 7; + internal const int SW_SHOW = 5; + internal const int SW_RESTORE = 9; + + internal const int WM_CLOSE = 0x10; + internal const int WM_QUIT = 0x12; + } + } +} \ No newline at end of file From 78f35fc2481ef097bc52f25b4d07270009276ac9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 1 Jun 2017 23:29:05 +0200 Subject: [PATCH 002/452] More code clean-up --- ExamplePlugin/ExamplePlugin.csproj | 18 ++ PluginBase/PluginBase.csproj | 18 ++ Toastify.sln | 22 ++- Toastify/Toastify.csproj | 19 +++ Toastify/src/App.xaml | 8 +- Toastify/src/App.xaml.cs | 17 +- Toastify/src/UI/About.xaml | 40 +++-- Toastify/src/UI/Settings.xaml | 177 +++++++++++--------- Toastify/src/UI/Settings.xaml.cs | 255 ++++++++++++++++------------- Toastify/src/UI/Toast.xaml | 14 +- Toastify/src/UI/Toast.xaml.cs | 2 + 11 files changed, 357 insertions(+), 233 deletions(-) diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index 7f806108..254c30ae 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -55,6 +55,24 @@ 4 AllRules.ruleset + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + AllRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + AllRules.ruleset + diff --git a/PluginBase/PluginBase.csproj b/PluginBase/PluginBase.csproj index cdc32779..e2bec8ae 100644 --- a/PluginBase/PluginBase.csproj +++ b/PluginBase/PluginBase.csproj @@ -55,6 +55,24 @@ 4 AllRules.ruleset + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + AllRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + AllRules.ruleset + diff --git a/Toastify.sln b/Toastify.sln index 77524d3e..b6075b17 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugin", "Plugin", "{64E51A59-02A2-4423-8DE1-F337D479E3B7}" EndProject @@ -29,22 +29,28 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|x64.ActiveCfg = Debug|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|x64.ActiveCfg = Debug|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|x64.Build.0 = Debug|x64 {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|Any CPU.ActiveCfg = Release|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|Any CPU.Build.0 = Release|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|x64.ActiveCfg = Release|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|x64.ActiveCfg = Release|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|x64.Build.0 = Release|x64 {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|x64.ActiveCfg = Debug|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|x64.Build.0 = Debug|x64 {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|Any CPU.Build.0 = Release|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|x64.ActiveCfg = Release|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|x64.ActiveCfg = Release|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|x64.Build.0 = Release|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|x64.ActiveCfg = Debug|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|x64.ActiveCfg = Debug|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|x64.Build.0 = Debug|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|Any CPU.ActiveCfg = Release|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|Any CPU.Build.0 = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|x64.ActiveCfg = Release|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|x64.ActiveCfg = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|x64.Build.0 = Release|x64 {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|Any CPU.Build.0 = Debug|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 2434c613..54bc1570 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -77,6 +77,25 @@ false + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + false + prompt + AllRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + AllRules.ruleset + ..\packages\Garlic.2.1.0.0\lib\net35\Garlic.dll diff --git a/Toastify/src/App.xaml b/Toastify/src/App.xaml index e71309b6..b372dd50 100644 --- a/Toastify/src/App.xaml +++ b/Toastify/src/App.xaml @@ -1,8 +1,8 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + StartupUri="src/UI/Toast.xaml" + DispatcherUnhandledException="Application_DispatcherUnhandledException"> diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index a56d1ea7..8035876e 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,10 +1,7 @@ using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Windows; +using System.Diagnostics.CodeAnalysis; using System.Threading; +using System.Windows; using Toastify.Services; namespace Toastify @@ -15,9 +12,8 @@ public class EntryPoint [STAThread] public static void Main(string[] args) { - string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; - bool exclusive; - using (Mutex m = new Mutex(true, appSpecificGuid, out exclusive)) + const string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; + using (Mutex unused = new Mutex(true, appSpecificGuid, out bool exclusive)) { if (exclusive) { @@ -29,9 +25,7 @@ public static void Main(string[] args) app.Run(); } else - { MessageBox.Show("Toastify is already running!\n\nLook for the blue icon in your system tray.", "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); - } } } } @@ -39,6 +33,7 @@ public static void Main(string[] args) /// /// Interaction logic for App.xaml /// + [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class App : Application { private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) @@ -46,4 +41,4 @@ private void Application_DispatcherUnhandledException(object sender, System.Wind Telemetry.TrackException(e.Exception); } } -} +} \ No newline at end of file diff --git a/Toastify/src/UI/About.xaml b/Toastify/src/UI/About.xaml index c9212d3f..e81a933f 100644 --- a/Toastify/src/UI/About.xaml +++ b/Toastify/src/UI/About.xaml @@ -1,7 +1,10 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:services="clr-namespace:Toastify.Services" + mc:Ignorable="d" + Title="About" Height="179.818" Width="333.358" AllowsTransparency="True" Background="Transparent" ShowInTaskbar="False" WindowStartupLocation="CenterOwner" WindowStyle="None" Loaded="Window_Loaded" Topmost="True"> @@ -21,9 +24,9 @@ - + - + @@ -33,26 +36,29 @@ - - - Toastify + + + + Toastify - - - - + + + + - - - - toastify.codeplex.com + + + + toastify.codeplex.com + Checking for updates... Credits to: Linus, Maaaackan, Aqualize, ncahmore... - Created by Jesper Palm 2009, licensed under GPLv2. + Created by Jesper Palm 2009, licensed under GPLv2. diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index d22c40a2..589b2541 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -1,41 +1,48 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:helpers="clr-namespace:Toastify.Helpers" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:core="clr-namespace:Toastify.Core" + mc:Ignorable="d" + Title="Toastify - Settings" Height="542" Width="568" ResizeMode="NoResize" Icon="../../Resources/spotify.ico" Closed="Window_Closed"> - - + + - Launch Toastify with Windows - Minimize Spotify on launch - Close Spotify when you close Toastify - When changing volume, change volume only for Spotify - - - + Launch Toastify with Windows + Minimize Spotify on launch + Close Spotify when you close Toastify + When changing volume, change volume only for Spotify + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - - - - - Do not collect anonymous usage data - + + Save Artist and Album to file when song changes (uses the clipboard template) + + + Do not collect anonymous usage data Data is never shared, is anonymous, and is used to inform future features - + Prevent the computer from sleeping while Spotify is playing @@ -45,12 +52,13 @@ - Enable Global Hotkeys + Enable Global Hotkeys - + - + @@ -58,9 +66,9 @@ - - - + + + @@ -72,10 +80,10 @@ - + - + @@ -83,57 +91,80 @@ - + - Disable Toast + Disable Toast - Only Show Toast when Hotkey is pressed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. - + Only Show Toast when Hotkey is pressed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. + + + + + + + + + - - + + + + + + + + + + + + + + + + + diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/UI/Settings.xaml.cs index b1790e8f..5e278c36 100644 --- a/Toastify/src/UI/Settings.xaml.cs +++ b/Toastify/src/UI/Settings.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Drawing; using System.Globalization; using System.Windows; using System.Windows.Controls; @@ -44,9 +45,9 @@ private Settings(Toast toast) //Slider initialisation try { - this.slTopColor.Value = byte.Parse(this.settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); - this.slBottomColor.Value = byte.Parse(this.settings.ToastColorBottom.Substring(1, 2), NumberStyles.AllowHexSpecifier); - this.slBorderColor.Value = byte.Parse(this.settings.ToastBorderColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); + this.SlTopColor.Value = byte.Parse(this.settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); + this.SlBottomColor.Value = byte.Parse(this.settings.ToastColorBottom.Substring(1, 2), NumberStyles.AllowHexSpecifier); + this.SlBorderColor.Value = byte.Parse(this.settings.ToastBorderColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); } catch { @@ -57,13 +58,116 @@ private Settings(Toast toast) _current = this; } + private void SaveAndApplySettings() + { + this.settings.Save(true); + + this.toast.InitToast(); + this.toast.DisplayAction(SpotifyAction.SettingsSaved, null); + } + + /// + /// Hexadecimal to converter. + /// + /// Hex color. + /// A . + public static Color HexToColor(string hexColor) + { + //Remove # if present + if (hexColor.IndexOf('#') != -1) + hexColor = hexColor.Replace("#", ""); + + byte alpha = 0; + byte red = 0; + byte green = 0; + byte blue = 0; + + if (hexColor.Length == 8) + { + //#RRGGBB + alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); + red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); + green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); + blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); + } + + return Color.FromArgb(alpha, red, green, blue); + } + + #region Event handlers + private void Window_Closed(object sender, EventArgs e) { if (ReferenceEquals(_current, this)) _current = null; } - //Change Color button click events + private void BtnDefault_Click(object sender, RoutedEventArgs e) + { + this.settings.Default(); + this.SaveAndApplySettings(); + } + + private void BtnSave_Click(object sender, RoutedEventArgs e) + { + this.SaveAndApplySettings(); + } + + #region "General" tab + + private void BtnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) + { + var dialog = new OpenFileDialog(); + + if (SettingsXml.Instance.SaveTrackToFilePath != null) + dialog.FileName = SettingsXml.Instance.SaveTrackToFilePath; + + dialog.CheckPathExists = true; + dialog.CheckFileExists = false; + dialog.ShowReadOnly = false; + + if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) + this.settings.SaveTrackToFilePath = dialog.FileName; + } + + #endregion "General" tab + + #region "Hotkeys" tab + + private void LstHotKeys_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (this.LstHotKeys.SelectedItem is Hotkey hotkey) + this.TxtSingleKey.Text = hotkey.Key.ToString(); + } + + private void TxtSingleKey_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) + { + e.Handled = true; + + var key = e.Key; + if (key == Key.System) + key = e.SystemKey; + + this.TxtSingleKey.Text = key.ToString(); + + if (this.LstHotKeys.SelectedItem is Hotkey hotkey) + hotkey.Key = key; + } + + #endregion "Hotkeys" tab + + #region "Toast" tab + + private void FadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.FadeOutTime += 10; + else if (this.settings.FadeOutTime >= 10) + this.settings.FadeOutTime -= 10; + } + + #region Change colors + private void ChangeColorTop_Click(object sender, RoutedEventArgs e) { ColorDialog MyDialog = new ColorDialog(); @@ -73,6 +177,12 @@ private void ChangeColorTop_Click(object sender, RoutedEventArgs e) this.settings.ToastColorTop = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); } + private void TopColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + string transparency = Convert.ToByte(this.SlTopColor.Value).ToString("X2"); + this.settings.ToastColorTop = "#" + transparency + this.settings.ToastColorTop.Substring(3); + } + private void ChangeColorBottom_Click(object sender, RoutedEventArgs e) { ColorDialog MyDialog = new ColorDialog(); @@ -82,6 +192,12 @@ private void ChangeColorBottom_Click(object sender, RoutedEventArgs e) this.settings.ToastColorBottom = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); } + private void BottomColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + string transparency = Convert.ToByte(this.SlBottomColor.Value).ToString("X2"); + this.settings.ToastColorBottom = "#" + transparency + this.settings.ToastColorBottom.Substring(3); + } + private void ChangeBorderColor_Click(object sender, RoutedEventArgs e) { ColorDialog MyDialog = new ColorDialog(); @@ -91,27 +207,24 @@ private void ChangeBorderColor_Click(object sender, RoutedEventArgs e) this.settings.ToastBorderColor = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); } - //Default and Save blick events - private void Default_Click(object sender, RoutedEventArgs e) + private void BorderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { - this.settings.Default(); - this.SaveAndApplySettings(); + string transparency = Convert.ToByte(this.SlBorderColor.Value).ToString("X2"); + this.settings.ToastBorderColor = "#" + transparency + this.settings.ToastBorderColor.Substring(3); } - private void Save_Click(object sender, RoutedEventArgs e) - { - this.SaveAndApplySettings(); - } + #endregion Change colors - private void SaveAndApplySettings() + private void BorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) { - this.settings.Save(true); - - this.toast.InitToast(); - this.toast.DisplayAction(SpotifyAction.SettingsSaved, null); + if (e.Delta > 0) + this.settings.ToastBorderThickness++; + else if (this.settings.ToastBorderThickness >= 1) + this.settings.ToastBorderThickness--; } - //Text box Mouse Wheel events + #region Corner radius + private void CornerTopLeft_MouseWheel(object sender, MouseWheelEventArgs e) { if (e.Delta > 0) @@ -130,14 +243,6 @@ private void CornerTopRight_MouseWheel(object sender, MouseWheelEventArgs e) this.settings.ToastBorderCornerRadiusTopRight -= 0.1; } - private void CornerBottomRight_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - this.settings.ToastBorderCornerRadiusBottomRight += 0.1; - else if (this.settings.ToastBorderCornerRadiusBottomRight >= 0.1) - this.settings.ToastBorderCornerRadiusBottomRight -= 0.1; - } - private void CornerBottomLeft_MouseWheel(object sender, MouseWheelEventArgs e) { if (e.Delta > 0) @@ -146,21 +251,17 @@ private void CornerBottomLeft_MouseWheel(object sender, MouseWheelEventArgs e) this.settings.ToastBorderCornerRadiusBottomLeft -= 0.1; } - private void FadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) + private void CornerBottomRight_MouseWheel(object sender, MouseWheelEventArgs e) { if (e.Delta > 0) - this.settings.FadeOutTime += 10; - else if (this.settings.FadeOutTime >= 10) - this.settings.FadeOutTime -= 10; + this.settings.ToastBorderCornerRadiusBottomRight += 0.1; + else if (this.settings.ToastBorderCornerRadiusBottomRight >= 0.1) + this.settings.ToastBorderCornerRadiusBottomRight -= 0.1; } - private void BorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - this.settings.ToastBorderThickness++; - else if (this.settings.ToastBorderThickness >= 1) - this.settings.ToastBorderThickness--; - } + #endregion Corner radius + + #region Toast size & position private void ToastWidth_MouseWheel(object sender, MouseWheelEventArgs e) { @@ -194,84 +295,10 @@ private void PositionTop_MouseWheel(object sender, MouseWheelEventArgs e) this.settings.PositionTop--; } - //Slider value changed events - private void TopColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(this.slTopColor.Value).ToString("X2"); - this.settings.ToastColorTop = "#" + transparency + this.settings.ToastColorTop.Substring(3); - } + #endregion Toast size & position - private void BottomColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(this.slBottomColor.Value).ToString("X2"); - this.settings.ToastColorBottom = "#" + transparency + this.settings.ToastColorBottom.Substring(3); - } - - private void BorderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(this.slBorderColor.Value).ToString("X2"); - this.settings.ToastBorderColor = "#" + transparency + this.settings.ToastBorderColor.Substring(3); - } + #endregion "Toast" tab - // Hexadecimal to Color converter - public static System.Drawing.Color HexToColor(string hexColor) - { - //Remove # if present - if (hexColor.IndexOf('#') != -1) - hexColor = hexColor.Replace("#", ""); - - byte alpha = 0; - byte red = 0; - byte green = 0; - byte blue = 0; - - if (hexColor.Length == 8) - { - //#RRGGBB - alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); - red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); - green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); - } - - return System.Drawing.Color.FromArgb(alpha, red, green, blue); - } - - private void TxtSingleKey_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) - { - e.Handled = true; - - var key = e.Key; - if (key == Key.System) - key = e.SystemKey; - - this.txtSingleKey.Text = key.ToString(); - - if (this.lstHotKeys.SelectedItem is Hotkey hotkey) - hotkey.Key = key; - } - - private void LstHotKeys_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - if (this.lstHotKeys.SelectedItem is Hotkey hotkey) - this.txtSingleKey.Text = hotkey.Key.ToString(); - } - - private void BtnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) - { - var dialog = new OpenFileDialog(); - - if (SettingsXml.Instance.SaveTrackToFilePath != null) - { - dialog.FileName = SettingsXml.Instance.SaveTrackToFilePath; - } - - dialog.CheckPathExists = true; - dialog.CheckFileExists = false; - dialog.ShowReadOnly = false; - - if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) - this.settings.SaveTrackToFilePath = dialog.FileName; - } + #endregion Event handlers } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/UI/Toast.xaml index 078b4842..d4cb2966 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -1,8 +1,8 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + Title="Toastify" Height="75" Width="300" WindowStyle="None" ResizeMode="NoResize" AllowsTransparency="True" Background="#00000000" ShowInTaskbar="False" Loaded="Window_Loaded" Opacity="0" + MouseEnter="Window_MouseEnter" MouseLeave="Window_MouseLeave" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp" Cursor="Hand" Topmost="True" WindowState="Minimized" ShowActivated="False"> @@ -33,7 +33,7 @@ - + @@ -43,7 +43,9 @@ - Body (feat. DJ Rush) + + + Si Begg diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index ac99dff5..48252f0b 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -59,8 +59,10 @@ public partial class Toast : Window public new Visibility Visibility { +#pragma warning disable IDE0009 // Member access should be qualified. get { return base.Visibility; } set { base.Visibility = value; } +#pragma warning restore IDE0009 // Member access should be qualified. } public void LoadSettings() From 7a26af241582ec950142b58821be61f2d94d8a2a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 1 Jun 2017 23:33:35 +0200 Subject: [PATCH 003/452] Turned Spotify class into a singleton --- Toastify/src/Core/Spotify.cs | 238 +++++++++++++++------------------- Toastify/src/UI/Toast.xaml.cs | 14 +- Toastify/src/Win32API.cs | 58 ++++++++- 3 files changed, 167 insertions(+), 143 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index f35a9616..6bdf53e3 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,3 +1,4 @@ +using AutoHotkey.Interop; using Microsoft.Win32; using Newtonsoft.Json; using System; @@ -7,39 +8,82 @@ using System.Net; using System.Text; using System.Threading; -using Toastify.Core; using Toastify.Helpers; using Toastify.Services; -namespace Toastify +namespace Toastify.Core { - internal static class Spotify + internal class Spotify { - private static AutoHotkey.Interop.AutoHotkeyEngine _ahk; + #region Singleton - public static string CurrentCoverImageUrl { get; set; } + private static Spotify _instance; - public static void StartSpotify() + public static Spotify Instance { - if (IsRunning()) - return; + get { return _instance ?? (_instance = new Spotify()); } + } + + #endregion Singleton + + #region Private fields + + private AutoHotkeyEngine ahk; + + private readonly string spotifyPath; + + private Process spotifyProcess; + + #endregion Private fields + + #region Public properties + + public string CurrentCoverArtUrl { get; set; } + + public bool IsRunning { get { return this.GetMainWindowHandle() != IntPtr.Zero; } } + + public bool IsMinimized + { + get + { + if (!this.IsRunning) + return false; + + var hWnd = this.GetMainWindowHandle(); + + // check Spotify's current window state + var placement = new Win32API.WindowPlacement(); + Win32API.GetWindowPlacement(hWnd, ref placement); - string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + return placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED; + } + } - // try in the secondary location - if (string.IsNullOrEmpty(spotifyPath)) - spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + #endregion Public properties - if (string.IsNullOrEmpty(spotifyPath)) + protected Spotify() + { + this.spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + + // Try in the secondary location. + if (string.IsNullOrEmpty(this.spotifyPath)) + this.spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + + if (string.IsNullOrEmpty(this.spotifyPath)) throw new ArgumentException("Could not find spotify path in registry"); + } - // launch Spotify - var spotifyExe = Path.Combine(spotifyPath, "spotify.exe"); + public void StartSpotify() + { + if (this.IsRunning) + return; - Process.Start(spotifyExe); + // Launch Spotify. + var spotifyFilePath = Path.Combine(this.spotifyPath, "spotify.exe"); + this.spotifyProcess = Process.Start(spotifyFilePath); if (SettingsXml.Instance.MinimizeSpotifyOnStartup) - Minimize(); + this.Minimize(); else { // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively @@ -49,15 +93,15 @@ public static void StartSpotify() } } - private static void Minimize() + private void Minimize() { - var remainingSleep = 2000; + int remainingSleep = 2000; IntPtr hWnd; // Since Minimize is often called during startup, the hWnd is often not created yet // wait a maximum of remainingSleep for it to appear and then minimize it if it did. - while ((hWnd = GetSpotify()) == IntPtr.Zero && remainingSleep > 0) + while ((hWnd = this.GetMainWindowHandle()) == IntPtr.Zero && remainingSleep > 0) { Thread.Sleep(100); remainingSleep -= 100; @@ -74,75 +118,35 @@ private static void Minimize() } } - private static void KillProc(string name) + public void Kill() { - // let's play nice and try to gracefully clear out all Sync processes - var procs = Process.GetProcessesByName(name); - - foreach (var proc in procs) - { - // lParam == Band Process Id, passed in below - Win32API.EnumWindows(delegate (IntPtr hWnd, IntPtr lParam) - { - Win32API.GetWindowThreadProcessId(hWnd, out uint processId); - - // Essentially: Find every hWnd associated with this process and ask it to go away - if (processId == (uint)lParam) - { - Win32API.SendMessage(hWnd, Win32API.Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); - Win32API.SendMessage(hWnd, Win32API.Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); - } - - return true; - }, - (IntPtr)proc.Id); - } - - // let everything calm down - Thread.Sleep(1000); - - procs = Process.GetProcessesByName(name); - - // ok, no more mister nice guy. Sadly. - foreach (var proc in procs) + if (this.spotifyProcess != null) { - try - { - proc.Kill(); - } - catch - { - // ignore exceptions (usually due to trying to kill non-existant child processes - } + this.spotifyProcess.Close(); + Thread.Sleep(1000); } + Win32API.KillProc("spotify"); } - public static void KillSpotify() + private IntPtr GetMainWindowHandle() { - KillProc("spotify"); + return this.spotifyProcess?.MainWindowHandle ?? Win32API.FindWindow("SpotifyMainWindow", null); } - private static IntPtr GetSpotify() + public Song GetCurrentSong() { - return Win32API.FindWindow("SpotifyMainWindow", null); - } - - public static bool IsRunning() - { - return GetSpotify() != IntPtr.Zero; - } - - public static Song GetCurrentSong() - { - if (!IsRunning()) + if (!this.IsRunning) return null; - IntPtr hWnd = GetSpotify(); - int length = Win32API.GetWindowTextLength(hWnd); - StringBuilder sb = new StringBuilder(length + 1); - Win32API.GetWindowText(hWnd, sb, sb.Capacity); + string title = this.spotifyProcess?.MainWindowTitle; + if (string.IsNullOrWhiteSpace(title)) + { + IntPtr hWnd = this.GetMainWindowHandle(); + StringBuilder sb = new StringBuilder(Win32API.GetWindowTextLength(hWnd) + 1); + Win32API.GetWindowText(hWnd, sb, sb.Capacity); - string title = sb.ToString(); + title = sb.ToString(); + } if (!string.IsNullOrWhiteSpace(title) && title != "Spotify") { @@ -164,7 +168,7 @@ public static Song GetCurrentSong() return null; } - public static void SetCoverArt(Song song) + public void SetCoverArt(Song song) { // probably an ad, don't bother looking for an image if (string.IsNullOrWhiteSpace(song.Track) || string.IsNullOrWhiteSpace(song.Artist)) @@ -242,40 +246,14 @@ public static void SetCoverArt(Song song) } song.CoverArtUrl = imageUrl; + this.CurrentCoverArtUrl = imageUrl; } - private static bool IsMinimized() - { - if (!IsRunning()) - return false; - - var hWnd = GetSpotify(); - - // check Spotify's current window state - var placement = new Win32API.WindowPlacement(); - Win32API.GetWindowPlacement(hWnd, ref placement); - - return placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED; - } - - private static void ShowSpotifyWithNoActivate() + private void ShowSpotify() { - var hWnd = GetSpotify(); - - // check Spotify's current window state - var placement = new Win32API.WindowPlacement(); - Win32API.GetWindowPlacement(hWnd, ref placement); - - const Win32API.SetWindowPosFlags flags = Win32API.SetWindowPosFlags.DoNotActivate | Win32API.SetWindowPosFlags.DoNotChangeOwnerZOrder | Win32API.SetWindowPosFlags.ShowWindow; - - Win32API.SetWindowPos(hWnd, (IntPtr)0, placement.rcNormalPosition.Left, placement.rcNormalPosition.Top, 0, 0, flags); - } - - private static void ShowSpotify() - { - if (IsRunning()) + if (this.IsRunning) { - var hWnd = GetSpotify(); + var hWnd = this.GetMainWindowHandle(); // check Spotify's current window state var placement = new Win32API.WindowPlacement(); @@ -297,35 +275,34 @@ private static void ShowSpotify() } } - public static void SendAction(SpotifyAction a) + public void SendAction(SpotifyAction action) { - if (!IsRunning()) + if (!this.IsRunning) return; // bah. Because control cannot fall through cases we need to special case volume if (SettingsXml.Instance.ChangeSpotifyVolumeOnly) { - switch (a) + switch (action) { case SpotifyAction.VolumeUp: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - VolumeHelper.IncrementVolume("Spotify"); return; + case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - VolumeHelper.DecrementVolume("Spotify"); return; + case SpotifyAction.Mute: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - VolumeHelper.ToggleApplicationMute("Spotify"); return; } } - switch (a) + switch (action) { case SpotifyAction.CopyTrackInfo: case SpotifyAction.ShowToast: @@ -334,25 +311,25 @@ public static void SendAction(SpotifyAction a) case SpotifyAction.ShowSpotify: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.ShowSpotify); - if (IsMinimized()) - ShowSpotify(); + if (this.IsMinimized) + this.ShowSpotify(); else - Minimize(); + this.Minimize(); break; case SpotifyAction.FastForward: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.FastForward); - SendComplexKeys("+{Right}"); + this.SendComplexKeys("+{Right}"); break; case SpotifyAction.Rewind: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Rewind); - SendComplexKeys("+{Left}"); + this.SendComplexKeys("+{Left}"); break; default: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Default + a); - Win32API.SendMessage(GetSpotify(), Win32API.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)a)); + Telemetry.TrackEvent(TelemetryCategory.Action, $"{Telemetry.TelemetryEvent.Action.Default}{action}"); + Win32API.SendMessage(this.GetMainWindowHandle(), Win32API.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)action)); break; } } @@ -365,21 +342,18 @@ public static void SendAction(SpotifyAction a) /// AutoHotKey has that hook and can modify the state for us, so let's take advantge of it. /// /// - private static void SendComplexKeys(string keys) + private void SendComplexKeys(string keys) { - // Is this nicer? - // _ahk = _ahk ?? new AutoHotkey.Interop.AutoHotkeyEngine(); - // only initialize AHK when needed as it can be expensive (dll copy etc) if not actually needed - if (_ahk == null) - _ahk = new AutoHotkey.Interop.AutoHotkeyEngine(); + if (this.ahk == null) + this.ahk = new AutoHotkeyEngine(); - _ahk.ExecRaw("SetTitleMatchMode 2"); + this.ahk.ExecRaw("SetTitleMatchMode 2"); - _ahk.ExecRaw("DetectHiddenWindows, On"); - _ahk.ExecRaw("ControlSend, ahk_parent, " + keys + ", ahk_class SpotifyMainWindow"); + this.ahk.ExecRaw("DetectHiddenWindows, On"); + this.ahk.ExecRaw($"ControlSend, ahk_parent, {keys}, ahk_class SpotifyMainWindow"); - _ahk.ExecRaw("DetectHiddenWindows, Off"); + this.ahk.ExecRaw("DetectHiddenWindows, Off"); } } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 48252f0b..63c53242 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -235,7 +235,7 @@ public void InitToast() private void CheckTitle() { - Song currentSong = Spotify.GetCurrentSong(); + Song currentSong = Spotify.Instance.GetCurrentSong(); if (currentSong != null && currentSong.IsValid() && !currentSong.Equals(this.currentSong)) { @@ -245,7 +245,7 @@ private void CheckTitle() try { - Spotify.SetCoverArt(currentSong); + Spotify.Instance.SetCoverArt(currentSong); } catch { @@ -466,7 +466,7 @@ private void AskUserToStartSpotify() // we are forced to launch Spotify ourselves (under WebDriver), so we no longer ask the user try { - Spotify.StartSpotify(); + Spotify.Instance.StartSpotify(); } catch (Exception e) { @@ -478,7 +478,7 @@ protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { // close Spotify first if (SettingsXml.Instance.CloseSpotifyWithToastify) - Spotify.KillSpotify(); + Spotify.Instance.Kill(); // Ensure trayicon is removed on exit. (Thx Linus) this.trayIcon.Visible = false; @@ -561,7 +561,7 @@ internal static void ActionHookCallback(Hotkey hotkey) } else { - Spotify.SendAction(hotkey.Action); + Spotify.Instance.SendAction(hotkey.Action); } Current.DisplayAction(hotkey.Action, songBeforeAction); @@ -647,7 +647,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) const string stoppedText = "Stopped"; const string settingsText = "Settings saved"; - if (!Spotify.IsRunning() && action != SpotifyAction.SettingsSaved) + if (!Spotify.Instance.IsRunning && action != SpotifyAction.SettingsSaved) { this.toastIcon = DEFAULT_ICON; this.Title1.Text = "Spotify not available!"; @@ -788,7 +788,7 @@ private void Window_MouseDown(object sender, MouseButtonEventArgs e) } else { - Spotify.SendAction(SpotifyAction.ShowSpotify); + Spotify.Instance.SendAction(SpotifyAction.ShowSpotify); } } diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 3573062e..b4ee22d7 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -1,11 +1,16 @@ using System; +using System.Diagnostics; +using System.Drawing; using System.Runtime.InteropServices; using System.Text; +using System.Threading; namespace Toastify { internal class Win32API { + #region DLL imports + [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); @@ -44,7 +49,52 @@ internal class Win32API [DllImport("user32.dll", SetLastError = true)] internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); - [Flags()] + #endregion DLL imports + + public static void KillProc(string name) + { + // let's play nice and try to gracefully clear out all Sync processes + var procs = Process.GetProcessesByName(name); + + foreach (var proc in procs) + { + // lParam == Band Process Id, passed in below + EnumWindows(delegate (IntPtr hWnd, IntPtr lParam) + { + GetWindowThreadProcessId(hWnd, out uint processId); + + // Essentially: Find every hWnd associated with this process and ask it to go away + if (processId == (uint)lParam) + { + SendMessage(hWnd, Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + SendMessage(hWnd, Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); + } + + return true; + }, + (IntPtr)proc.Id); + } + + // let everything calm down + Thread.Sleep(1000); + + procs = Process.GetProcessesByName(name); + + // ok, no more mister nice guy. Sadly. + foreach (var proc in procs) + { + try + { + proc.Kill(); + } + catch + { + // ignore exceptions (usually due to trying to kill non-existant child processes + } + } + } + + [Flags] internal enum SetWindowPosFlags : uint { /// If the calling thread and the thread that owns the window are attached to different input queues, @@ -124,9 +174,9 @@ internal struct WindowPlacement public int length; public int flags; public int showCmd; - public System.Drawing.Point ptMinPosition; - public System.Drawing.Point ptMaxPosition; - public System.Drawing.Rectangle rcNormalPosition; + public Point ptMinPosition; + public Point ptMaxPosition; + public Rectangle rcNormalPosition; } internal class Constants From 3028d9e1471d76493f1df1bbac4fc3d0391ccb65 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 2 Jun 2017 14:13:40 +0200 Subject: [PATCH 004/452] Using JohnnyCrazy's SpotifyAPI-NET Its local API can be used to get the current track and its album cover art. The API also provides events (track changed, play state changed, etc.) that can be used to update the toast only when needed, instead of using a timer. --- LICENSE | 172 +++++++++++++ Toastify/Properties/Resources.Designer.cs | 2 +- Toastify/Properties/Settings.Designer.cs | 4 +- Toastify/Toastify.csproj | 21 +- Toastify/app.config | 13 +- Toastify/packages.config | 5 +- Toastify/src/App.xaml | 3 +- Toastify/src/App.xaml.cs | 6 + Toastify/src/Core/Song.cs | 31 ++- Toastify/src/Core/Spotify.cs | 240 ++++++++++-------- .../SpotifyPlayStateChangedEventArgs.cs | 14 + .../Events/SpotifyTrackChangedEventArgs.cs | 16 ++ .../SpotifyTrackTimeChangedEventArgs.cs | 14 + .../Events/SpotifyVolumeChangedEventArgs.cs | 16 ++ Toastify/src/Helpers/WinHelper.cs | 86 ------- Toastify/src/UI/Toast.xaml.cs | 6 +- Toastify/src/Win32API.cs | 93 ++++++- 17 files changed, 532 insertions(+), 210 deletions(-) create mode 100644 Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs create mode 100644 Toastify/src/Events/SpotifyTrackChangedEventArgs.cs create mode 100644 Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs create mode 100644 Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs delete mode 100644 Toastify/src/Helpers/WinHelper.cs diff --git a/LICENSE b/LICENSE index 6c8d8470..7af9de3d 100644 --- a/LICENSE +++ b/LICENSE @@ -6,6 +6,8 @@ August 8, 2011, the same date as the binaries. 1. Toastify (http://toastify.codeplex.com) 2. Managed Windows API (http://mwinapi.sourceforge.net/) 3. WPF Toolkit (http://wpf.codeplex.com/) +4. SpotifyAPI-NET (https://github.com/JohnnyCrazy/SpotifyAPI-NET) + Toastify License - GNU General Public License version 2 (GPLv2) =============================================================== @@ -98,6 +100,7 @@ NO WARRANTY 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + Managed Windows API License - GNU Lesser General Public License (LGPL) ======================================================================= @@ -159,6 +162,7 @@ Each version is given a distinguishing version number. If the Library as you rec If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. + WPF Toolkit - Ms-PL =================== @@ -195,3 +199,171 @@ A "contributor" is any person that distributes its contribution under this licen (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. +SpotifyAPI-NET - GNU Lesser General Public License v3.0 (LGPLv3) +================================================================ + +GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index 838312a2..2872ad28 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34014 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/Toastify/Properties/Settings.Designer.cs b/Toastify/Properties/Settings.Designer.cs index d53b91d5..a2ca1e1b 100644 --- a/Toastify/Properties/Settings.Designer.cs +++ b/Toastify/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34014 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ namespace Toastify.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 54bc1570..a313d4b0 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -10,7 +10,7 @@ Properties Toastify Toastify - v4.0 + v4.5 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -21,7 +21,8 @@ 3.5 true - Client + + SAK SAK SAK @@ -55,6 +56,7 @@ 4 false AllRules.ruleset + false pdbonly @@ -64,6 +66,7 @@ prompt 4 AllRules.ruleset + false D38DAF47B3CBFC190231922089F056B55D662088 @@ -86,6 +89,7 @@ false prompt AllRules.ruleset + false bin\x64\Release\ @@ -95,18 +99,21 @@ x64 prompt AllRules.ruleset + false ..\packages\Garlic.2.1.0.0\lib\net35\Garlic.dll - True .\ManagedWinapi.dll - ..\packages\Newtonsoft.Json.10.0.2\lib\net40\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\SpotifyAPI-NET.2.14.1\lib\SpotifyAPI.dll @@ -114,6 +121,7 @@ + @@ -145,6 +153,10 @@ Designer + + + + @@ -188,7 +200,6 @@ About.xaml - Code diff --git a/Toastify/app.config b/Toastify/app.config index f76deb94..c604505b 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,3 +1,12 @@ - + - + + + + + + + + + + diff --git a/Toastify/packages.config b/Toastify/packages.config index f0e83162..584c5471 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,5 +1,6 @@  - - + + + \ No newline at end of file diff --git a/Toastify/src/App.xaml b/Toastify/src/App.xaml index b372dd50..0fa601fa 100644 --- a/Toastify/src/App.xaml +++ b/Toastify/src/App.xaml @@ -2,7 +2,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="src/UI/Toast.xaml" - DispatcherUnhandledException="Application_DispatcherUnhandledException"> + DispatcherUnhandledException="Application_DispatcherUnhandledException" + Exit="App_OnExit"> diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 8035876e..abda0c05 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis; using System.Threading; using System.Windows; +using Toastify.Core; using Toastify.Services; namespace Toastify @@ -40,5 +41,10 @@ private void Application_DispatcherUnhandledException(object sender, System.Wind { Telemetry.TrackException(e.Exception); } + + private void App_OnExit(object sender, ExitEventArgs e) + { + Spotify.Instance?.Dispose(); + } } } \ No newline at end of file diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index b625165d..e568e7f3 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -1,10 +1,16 @@ +using SpotifyAPI.Local.Enums; +using SpotifyAPI.Local.Models; +using System.Diagnostics.CodeAnalysis; + namespace Toastify.Core { public class Song { - public string Artist { get; set; } + private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size640, AlbumArtSize.Size320, AlbumArtSize.Size160 }; + + public string Artist { get; } public string Track { get; set; } - public string Album { get; set; } + public string Album { get; } public string CoverArtUrl { get; set; } @@ -34,10 +40,27 @@ public override bool Equals(object obj) return target.Artist == this.Artist && target.Track == this.Track; } - // overriding GetHashCode is "required" when overriding Equals + [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode")] public override int GetHashCode() { - return base.GetHashCode(); + return this.Artist.GetHashCode() ^ this.Track.GetHashCode(); + } + + public static implicit operator Song(Track spotifyTrack) + { + string artist = spotifyTrack.ArtistResource.Name; + string title = spotifyTrack.TrackResource.Name; + string album = spotifyTrack.AlbumResource.Name; + string coverArtUrl = ""; + + foreach (var size in albumArtSizes) + { + coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); + if (!string.IsNullOrWhiteSpace(coverArtUrl)) + break; + } + + return new Song(artist, title, album) { CoverArtUrl = coverArtUrl }; } } } \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 6bdf53e3..09c04f8e 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,19 +1,18 @@ using AutoHotkey.Interop; using Microsoft.Win32; using Newtonsoft.Json; +using SpotifyAPI.Local; using System; using System.Diagnostics; using System.IO; -using System.Linq; using System.Net; -using System.Text; using System.Threading; using Toastify.Helpers; using Toastify.Services; namespace Toastify.Core { - internal class Spotify + internal class Spotify : IDisposable { #region Singleton @@ -30,16 +29,18 @@ public static Spotify Instance private AutoHotkeyEngine ahk; + private SpotifyLocalAPI localAPI; + private readonly string spotifyPath; private Process spotifyProcess; + private Song _currentSong; + #endregion Private fields #region Public properties - public string CurrentCoverArtUrl { get; set; } - public bool IsRunning { get { return this.GetMainWindowHandle() != IntPtr.Zero; } } public bool IsMinimized @@ -59,113 +60,40 @@ public bool IsMinimized } } - #endregion Public properties - - protected Spotify() + public Song CurrentSong { - this.spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; - - // Try in the secondary location. - if (string.IsNullOrEmpty(this.spotifyPath)) - this.spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; - - if (string.IsNullOrEmpty(this.spotifyPath)) - throw new ArgumentException("Could not find spotify path in registry"); + get { return this._currentSong ?? (this._currentSong = this.localAPI?.GetStatus()?.Track); } + private set { this._currentSong = value; } } - public void StartSpotify() - { - if (this.IsRunning) - return; + #endregion Public properties - // Launch Spotify. - var spotifyFilePath = Path.Combine(this.spotifyPath, "spotify.exe"); - this.spotifyProcess = Process.Start(spotifyFilePath); + #region Events - if (SettingsXml.Instance.MinimizeSpotifyOnStartup) - this.Minimize(); - else - { - // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively - // safe amount of time to wait, even if the pattern is gross. (Minimize() doesn't need it since - // it waits for the Window to appear before minimizing) - Thread.Sleep(2000); - } - } + public event EventHandler SongChanged; - private void Minimize() - { - int remainingSleep = 2000; + public event EventHandler PlayStateChanged; - IntPtr hWnd; + public event EventHandler TrackTimeChanged; - // Since Minimize is often called during startup, the hWnd is often not created yet - // wait a maximum of remainingSleep for it to appear and then minimize it if it did. - while ((hWnd = this.GetMainWindowHandle()) == IntPtr.Zero && remainingSleep > 0) - { - Thread.Sleep(100); - remainingSleep -= 100; - } + public event EventHandler VolumeChanged; - if (hWnd != IntPtr.Zero) - { - // disgusting but sadly neccessary. Let Spotify initialize a bit before minimizing it - // otherwise the window hides itself and doesn't respond to taskbar clicks. - // I tried to work around this by waiting for the window size to initialize (via GetWindowRect) - // but that didn't work, there is some internal initialization that needs to occur. - Thread.Sleep(500); - Win32API.ShowWindow(hWnd, Win32API.Constants.SW_SHOWMINIMIZED); - } - } - - public void Kill() - { - if (this.spotifyProcess != null) - { - this.spotifyProcess.Close(); - Thread.Sleep(1000); - } - Win32API.KillProc("spotify"); - } - - private IntPtr GetMainWindowHandle() - { - return this.spotifyProcess?.MainWindowHandle ?? Win32API.FindWindow("SpotifyMainWindow", null); - } + #endregion Events - public Song GetCurrentSong() + protected Spotify() { - if (!this.IsRunning) - return null; - - string title = this.spotifyProcess?.MainWindowTitle; - if (string.IsNullOrWhiteSpace(title)) - { - IntPtr hWnd = this.GetMainWindowHandle(); - StringBuilder sb = new StringBuilder(Win32API.GetWindowTextLength(hWnd) + 1); - Win32API.GetWindowText(hWnd, sb, sb.Capacity); - - title = sb.ToString(); - } - - if (!string.IsNullOrWhiteSpace(title) && title != "Spotify") - { - // Unfortunately we don't have a great way to get the title from Spotify - // so we need to do some gymnastics. - // Music played from an artist's page is usually in the format "artist - song" - // while music played from a playlist is often in the format "artist - song - album" - // unfortunately this means that some songs that actually have a " - " in either the artist name - // or in the song name will potentially display incorrectly - var portions = title.Split(new[] { " - " }, StringSplitOptions.None); - - string song = portions.Length > 1 ? portions[1] : null; - string artist = portions[0]; - string album = portions.Length > 2 ? string.Join(" ", portions.Skip(2).ToArray()) : null; - - return new Song(artist, song, album); - } - - return null; + this.spotifyPath = this.GetSpotifyPath(); + + // Connect with Spotify to use the local API. + this.localAPI = new SpotifyLocalAPI(); + this.localAPI.Connect(); + + // Subscribe to SpotifyLocalAPI events. + this.localAPI.OnTrackChange += this.SpotifyLocalAPI_OnTrackChange; + this.localAPI.OnPlayStateChange += this.SpotifyLocalAPI_OnPlayStateChange; + this.localAPI.OnTrackTimeChange += this.SpotifyLocalAPI_OnTrackTimeChange; + this.localAPI.OnVolumeChange += this.SpotifyLocalAPI_OnVolumeChange; + this.localAPI.ListenForEvents = true; } public void SetCoverArt(Song song) @@ -246,7 +174,66 @@ public void SetCoverArt(Song song) } song.CoverArtUrl = imageUrl; - this.CurrentCoverArtUrl = imageUrl; + } + + public void StartSpotify() + { + if (this.IsRunning) + return; + + if (this.localAPI == null) + this.localAPI = new SpotifyLocalAPI(); + + // Launch Spotify. + var spotifyFilePath = Path.Combine(this.spotifyPath, "spotify.exe"); + this.spotifyProcess = Process.Start(spotifyFilePath); + + if (SettingsXml.Instance.MinimizeSpotifyOnStartup) + this.Minimize(); + else + { + // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively + // safe amount of time to wait, even if the pattern is gross. (Minimize() doesn't need it since + // it waits for the Window to appear before minimizing) + Thread.Sleep(2000); + } + } + + private void Minimize() + { + int remainingSleep = 2000; + + IntPtr hWnd; + + // Since Minimize is often called during startup, the hWnd is often not created yet + // wait a maximum of remainingSleep for it to appear and then minimize it if it did. + while ((hWnd = this.GetMainWindowHandle()) == IntPtr.Zero && remainingSleep > 0) + { + Thread.Sleep(100); + remainingSleep -= 100; + } + + if (hWnd != IntPtr.Zero) + { + // disgusting but sadly neccessary. Let Spotify initialize a bit before minimizing it + // otherwise the window hides itself and doesn't respond to taskbar clicks. + // I tried to work around this by waiting for the window size to initialize (via GetWindowRect) + // but that didn't work, there is some internal initialization that needs to occur. + Thread.Sleep(500); + Win32API.ShowWindow(hWnd, Win32API.Constants.SW_SHOWMINIMIZED); + } + } + + public void Kill() + { + if (this.spotifyProcess != null) + { + this.spotifyProcess.Close(); + Thread.Sleep(1000); + } + Win32API.KillProc("spotify"); + + this.localAPI.Dispose(); } private void ShowSpotify() @@ -275,6 +262,11 @@ private void ShowSpotify() } } + private IntPtr GetMainWindowHandle() + { + return this.spotifyProcess?.MainWindowHandle ?? Win32API.FindWindow("SpotifyMainWindow", null); + } + public void SendAction(SpotifyAction action) { if (!this.IsRunning) @@ -355,5 +347,49 @@ private void SendComplexKeys(string keys) this.ahk.ExecRaw("DetectHiddenWindows, Off"); } + + private string GetSpotifyPath() + { + string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + + // Try in the secondary location. + if (string.IsNullOrEmpty(spotifyPath)) + spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + + if (string.IsNullOrEmpty(spotifyPath)) + throw new ArgumentException("Could not find spotify path in registry"); + + return spotifyPath; + } + + public void Dispose() + { + this.localAPI?.Dispose(); + } + + #region Event handlers + + private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e) + { + this.CurrentSong = e.NewTrack; + this.SongChanged?.Invoke(this, new SpotifyTrackChangedEventArgs(e.OldTrack, this.CurrentSong)); + } + + private void SpotifyLocalAPI_OnPlayStateChange(object sender, PlayStateEventArgs e) + { + this.PlayStateChanged?.Invoke(this, new SpotifyPlayStateChangedEventArgs(e.Playing)); + } + + private void SpotifyLocalAPI_OnTrackTimeChange(object sender, TrackTimeChangeEventArgs e) + { + this.TrackTimeChanged?.Invoke(this, new SpotifyTrackTimeChangedEventArgs(e.TrackTime)); + } + + private void SpotifyLocalAPI_OnVolumeChange(object sender, VolumeChangeEventArgs e) + { + this.VolumeChanged?.Invoke(this, new SpotifyVolumeChangedEventArgs(e.OldVolume, e.NewVolume)); + } + + #endregion Event handlers } } \ No newline at end of file diff --git a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs new file mode 100644 index 00000000..3fcb352c --- /dev/null +++ b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace Toastify.Core +{ + public class SpotifyPlayStateChangedEventArgs : EventArgs + { + public bool Playing { get; } + + public SpotifyPlayStateChangedEventArgs(bool playing) + { + this.Playing = playing; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs new file mode 100644 index 00000000..727f01ba --- /dev/null +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -0,0 +1,16 @@ +using System; + +namespace Toastify.Core +{ + internal class SpotifyTrackChangedEventArgs : EventArgs + { + public Song PreviousSong { get; } + public Song NewSong { get; } + + public SpotifyTrackChangedEventArgs(Song previousSong, Song newSong) + { + this.PreviousSong = previousSong; + this.NewSong = newSong; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs new file mode 100644 index 00000000..7243b69f --- /dev/null +++ b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace Toastify.Core +{ + public class SpotifyTrackTimeChangedEventArgs : EventArgs + { + public double TrackTime { get; } + + public SpotifyTrackTimeChangedEventArgs(double trackTime) + { + this.TrackTime = trackTime; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs b/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs new file mode 100644 index 00000000..184fc1de --- /dev/null +++ b/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs @@ -0,0 +1,16 @@ +using System; + +namespace Toastify.Core +{ + public class SpotifyVolumeChangedEventArgs : EventArgs + { + public double PreviousVolume { get; } + public double NewVolume { get; } + + public SpotifyVolumeChangedEventArgs(double previousVolume, double newVolume) + { + this.PreviousVolume = previousVolume; + this.NewVolume = newVolume; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Helpers/WinHelper.cs b/Toastify/src/Helpers/WinHelper.cs deleted file mode 100644 index e83ef842..00000000 --- a/Toastify/src/Helpers/WinHelper.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Windows.Interop; - -namespace Toastify.Helpers -{ - internal class WinHelper - { - [Flags] - public enum ExtendedWindowStyles - { - WsExToolwindow = 0x00000080, - } - - public enum GetWindowLongFields - { - GwlExstyle = -20, - } - - [DllImport("user32.dll")] - private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); - - private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) - { - int error; - IntPtr result; - // Win32API SetWindowLong doesn't clear error on success - SetLastError(0); - - if (IntPtr.Size == 4) - { - // use SetWindowLong - Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); - error = Marshal.GetLastWin32Error(); - result = new IntPtr(tempResult); - } - else - { - // use SetWindowLongPtr - result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); - error = Marshal.GetLastWin32Error(); - } - - if (result == IntPtr.Zero && error != 0) - throw new System.ComponentModel.Win32Exception(error); - - return result; - } - - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] - private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); - - [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] - private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); - - private static int IntPtrToInt32(IntPtr intPtr) - { - return unchecked((int)intPtr.ToInt64()); - } - - [DllImport("kernel32.dll", EntryPoint = "SetLastError")] - public static extern void SetLastError(int dwErrorCode); - - public static void AddToolWindowStyle(System.Windows.Window window) - { - WindowInteropHelper wndHelper = new WindowInteropHelper(window); - int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle); - exStyle |= (int)ExtendedWindowStyles.WsExToolwindow; - SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); - } - - [Flags] - public enum ExecutionState : uint - { - EsAwaymodeRequired = 0x00000040, - EsContinuous = 0x80000000, - EsDisplayRequired = 0x00000002, - EsSystemRequired = 0x00000001 - // Legacy flag, should not be used. - // ES_USER_PRESENT = 0x00000004 - } - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); - } -} \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 63c53242..e74f3add 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -155,7 +155,7 @@ private void Window_Loaded(object sender, RoutedEventArgs e) this.Deactivated += this.Toast_Deactivated; //Remove from ALT+TAB - WinHelper.AddToolWindowStyle(this); + Win32API.AddToolWindowStyle(this); //Check if Spotify is running. this.AskUserToStartSpotify(); @@ -235,7 +235,7 @@ public void InitToast() private void CheckTitle() { - Song currentSong = Spotify.Instance.GetCurrentSong(); + Song currentSong = Spotify.Instance.CurrentSong; if (currentSong != null && currentSong.IsValid() && !currentSong.Equals(this.currentSong)) { @@ -323,7 +323,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) #if DEBUG var rv = #endif - WinHelper.SetThreadExecutionState(WinHelper.ExecutionState.EsSystemRequired); + Win32API.SetThreadExecutionState(Win32API.ExecutionState.EsSystemRequired); #if DEBUG Debug.WriteLine("** SetThreadExecutionState returned: " + rv); #endif diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index b4ee22d7..01ef6a41 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -1,21 +1,25 @@ using System; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Runtime.InteropServices; using System.Text; using System.Threading; +using System.Windows.Interop; namespace Toastify { + [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] + [SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")] internal class Win32API { + internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); + #region DLL imports [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); - internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); - [DllImport("user32.dll")] internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); @@ -49,6 +53,21 @@ internal class Win32API [DllImport("user32.dll", SetLastError = true)] internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); + [DllImport("user32.dll")] + private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] + private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] + private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); + + [DllImport("kernel32.dll", EntryPoint = "SetLastError")] + public static extern void SetLastError(int dwErrorCode); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); + #endregion DLL imports public static void KillProc(string name) @@ -94,6 +113,48 @@ public static void KillProc(string name) } } + private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) + { + int error; + IntPtr result; + // Win32API SetWindowLong doesn't clear error on success + SetLastError(0); + + if (IntPtr.Size == 4) + { + // use SetWindowLong + Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); + error = Marshal.GetLastWin32Error(); + result = new IntPtr(tempResult); + } + else + { + // use SetWindowLongPtr + result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); + error = Marshal.GetLastWin32Error(); + } + + if (result == IntPtr.Zero && error != 0) + throw new System.ComponentModel.Win32Exception(error); + + return result; + } + + private static int IntPtrToInt32(IntPtr intPtr) + { + return unchecked((int)intPtr.ToInt64()); + } + + public static void AddToolWindowStyle(System.Windows.Window window) + { + WindowInteropHelper wndHelper = new WindowInteropHelper(window); + int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle); + exStyle |= (int)ExtendedWindowStyles.WsExToolwindow; + SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); + } + + #region Enums + [Flags] internal enum SetWindowPosFlags : uint { @@ -169,6 +230,32 @@ internal enum SetWindowPosFlags : uint ShowWindow = 0x0040, } + [Flags] + public enum ExtendedWindowStyles + { + WsExToolwindow = 0x00000080, + } + + public enum GetWindowLongFields + { + GwlExstyle = -20, + } + + [Flags] + public enum ExecutionState : uint + { + EsAwaymodeRequired = 0x00000040, + EsContinuous = 0x80000000, + EsDisplayRequired = 0x00000002, + EsSystemRequired = 0x00000001 + // Legacy flag, should not be used. + // ES_USER_PRESENT = 0x00000004 + } + + #endregion Enums + + #region Internal classes and structs + internal struct WindowPlacement { public int length; @@ -192,5 +279,7 @@ internal class Constants internal const int WM_CLOSE = 0x10; internal const int WM_QUIT = 0x12; } + + #endregion Internal classes and structs } } \ No newline at end of file From 08b91e581eaafa55babc9b9ae9449615c5fa45e3 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 2 Jun 2017 14:20:35 +0200 Subject: [PATCH 005/452] Removed unused referenced assemblies --- AutoHotkey.Interop/AutoHotkey.Interop.csproj | 5 -- ExamplePlugin/ExamplePlugin.cs | 16 ++---- ExamplePlugin/ExamplePlugin.csproj | 9 --- PluginBase/{PluginBase.cs => IPluginBase.cs} | 60 ++++++++++---------- PluginBase/PluginBase.csproj | 11 +--- Toastify/Toastify.csproj | 7 --- Toastify/src/UI/Toast.xaml.cs | 6 +- 7 files changed, 39 insertions(+), 75 deletions(-) rename PluginBase/{PluginBase.cs => IPluginBase.cs} (60%) diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj b/AutoHotkey.Interop/AutoHotkey.Interop.csproj index 869deb42..0c6dc100 100644 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj +++ b/AutoHotkey.Interop/AutoHotkey.Interop.csproj @@ -60,11 +60,6 @@ - - - - - diff --git a/ExamplePlugin/ExamplePlugin.cs b/ExamplePlugin/ExamplePlugin.cs index 60981b2f..ea3b4b99 100644 --- a/ExamplePlugin/ExamplePlugin.cs +++ b/ExamplePlugin/ExamplePlugin.cs @@ -1,14 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using Toastify.Plugin; namespace ExamplePlugin { //Sample Plugin. Simply logs the songs being played to a text file. //A reference is added to the ToastifyApi.dll(PluginBase) //The plugin class below implements the PluginBase interface - //Toastify.xml // @@ -19,13 +16,10 @@ namespace ExamplePlugin // // - public class ExamplePlugin : Toastify.Plugin.PluginBase + public class ExamplePlugin : IPluginBase { - public ExamplePlugin() - { - } + private string logFilename; - string logFilename; public void Init(string settings) { //Init is called direcly after the constructor. @@ -47,7 +41,7 @@ public void Closing() public void TrackChanged(string artist, string title) { - System.IO.File.AppendAllText(logFilename, string.Format("{0} - {1}{2}", artist, title, Environment.NewLine)); + System.IO.File.AppendAllText(logFilename, $"{artist} - {title}{Environment.NewLine}"); } public void Dispose() @@ -56,4 +50,4 @@ public void Dispose() //This is called direcly after Closing() } } -} +} \ No newline at end of file diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index 254c30ae..33d2e4e9 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -74,18 +74,9 @@ AllRules.ruleset - 3.5 - - 3.5 - - - 3.5 - - - diff --git a/PluginBase/PluginBase.cs b/PluginBase/IPluginBase.cs similarity index 60% rename from PluginBase/PluginBase.cs rename to PluginBase/IPluginBase.cs index 28459c90..8096efeb 100644 --- a/PluginBase/PluginBase.cs +++ b/PluginBase/IPluginBase.cs @@ -1,30 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Toastify.Plugin -{ - public interface PluginBase : IDisposable - { - /// - /// Is called directly after the constructor. - /// - /// Data from the Settings element in the xml. - void Init(string settings); - /// - /// Is called when Toastify is first started. After Init(). - /// - void Started(); - /// - /// Is called when Toastify is closing. - /// - void Closing(); - /// - /// Is called on track change. - /// - /// - /// - void TrackChanged(string artist, string title); - } -} +using System; + +namespace Toastify.Plugin +{ + public interface IPluginBase : IDisposable + { + /// + /// Called directly after the constructor. + /// + /// Data from the Settings element in the xml. + void Init(string settings); + + /// + /// Called when Toastify is first started. After Init(). + /// + void Started(); + + /// + /// Called when Toastify is closing. + /// + void Closing(); + + /// + /// Called on track change. + /// + /// + /// + void TrackChanged(string artist, string title); + } +} \ No newline at end of file diff --git a/PluginBase/PluginBase.csproj b/PluginBase/PluginBase.csproj index e2bec8ae..1aeb792b 100644 --- a/PluginBase/PluginBase.csproj +++ b/PluginBase/PluginBase.csproj @@ -74,21 +74,12 @@ AllRules.ruleset - 3.5 - - 3.5 - - - 3.5 - - - - + diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index a313d4b0..79bcbc74 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -124,13 +124,6 @@ - - 3.5 - - - 3.5 - - 3.0 diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index e74f3add..9642e911 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -46,7 +46,7 @@ public partial class Toast : Window private VersionChecker versionChecker; private bool isUpdateToast; - internal List Plugins { get; set; } + internal List Plugins { get; set; } internal static Toast Current { get; private set; } @@ -432,7 +432,7 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp private void LoadPlugins() { //Load plugins - this.Plugins = new List(); + this.Plugins = new List(); Assembly assembly = Assembly.GetExecutingAssembly(); if (assembly.Location != null) { @@ -444,7 +444,7 @@ private void LoadPlugins() { if (applicationPath != null) { - var plugin = Activator.CreateInstanceFrom(Path.Combine(applicationPath, p.FileName), p.TypeName).Unwrap() as Plugin.PluginBase; + var plugin = Activator.CreateInstanceFrom(Path.Combine(applicationPath, p.FileName), p.TypeName).Unwrap() as Plugin.IPluginBase; plugin?.Init(p.Settings); this.Plugins.Add(plugin); } From 16d49e3ebd8aed60a436d6118973969c74d11be1 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 12:20:41 +0200 Subject: [PATCH 006/452] Replaced 'watchTimer' with events Also, massive refactoring of Toast's initialization methods. --- ExamplePlugin/ExamplePlugin.cs | 25 +- PluginBase/IPluginBase.cs | 12 +- PluginBase/PluginBase.csproj | 1 + PluginBase/SpotifyTrackChangedEventArgs.cs | 18 + Toastify/src/Core/HotKey.cs | 2 +- Toastify/src/Core/SettingsXml.cs | 17 +- Toastify/src/Core/Song.cs | 24 +- .../Events/SpotifyTrackChangedEventArgs.cs | 5 + Toastify/src/UI/Toast.xaml | 9 +- Toastify/src/UI/Toast.xaml.cs | 759 ++++++++---------- Toastify/src/Win32API.cs | 32 + 11 files changed, 452 insertions(+), 452 deletions(-) create mode 100644 PluginBase/SpotifyTrackChangedEventArgs.cs diff --git a/ExamplePlugin/ExamplePlugin.cs b/ExamplePlugin/ExamplePlugin.cs index ea3b4b99..8afab14d 100644 --- a/ExamplePlugin/ExamplePlugin.cs +++ b/ExamplePlugin/ExamplePlugin.cs @@ -6,7 +6,7 @@ namespace ExamplePlugin //Sample Plugin. Simply logs the songs being played to a text file. //A reference is added to the ToastifyApi.dll(PluginBase) //The plugin class below implements the PluginBase interface - + //Toastify.xml // // @@ -22,32 +22,33 @@ public class ExamplePlugin : IPluginBase public void Init(string settings) { - //Init is called direcly after the constructor. - //Any data from the element in Toastify.xml is passed on. - //For multiple values, use a seperated list of some sort. Eg. "value1|value2|value3"... settings.Split('|')... + // Init is called direcly after the constructor. + // Any data from the element in Toastify.xml is passed on. + // For multiple values, use a seperated list of some sort. Eg. "value1|value2|value3"... settings.Split('|')... this.logFilename = settings; } - public void Started() + public void Started(object sende, EventArgs e) { - System.IO.File.AppendAllText(logFilename, "ExamplePlugin Started - " + DateTime.Now.ToLongTimeString() + Environment.NewLine); + System.IO.File.AppendAllText(this.logFilename, "ExamplePlugin Started - " + DateTime.Now.ToLongTimeString() + Environment.NewLine); } - public void Closing() + public void Closing(object sender, EventArgs e) { - System.IO.File.AppendAllText(logFilename, "ExamplePlugin Closing - " + DateTime.Now.ToLongTimeString() + Environment.NewLine); + System.IO.File.AppendAllText(this.logFilename, "ExamplePlugin Closing - " + DateTime.Now.ToLongTimeString() + Environment.NewLine); + this.Dispose(); } - public void TrackChanged(string artist, string title) + public void TrackChanged(object sender, SpotifyTrackChangedEventArgs e) { - System.IO.File.AppendAllText(logFilename, $"{artist} - {title}{Environment.NewLine}"); + System.IO.File.AppendAllText(this.logFilename, $"{e.Artist} - {e.Title}{Environment.NewLine}"); } public void Dispose() { - //Dispose of any resources here. - //This is called direcly after Closing() + // Dispose of any resources here. + // This is called direcly after Closing(). } } } \ No newline at end of file diff --git a/PluginBase/IPluginBase.cs b/PluginBase/IPluginBase.cs index 8096efeb..8941c6fc 100644 --- a/PluginBase/IPluginBase.cs +++ b/PluginBase/IPluginBase.cs @@ -13,18 +13,20 @@ public interface IPluginBase : IDisposable /// /// Called when Toastify is first started. After Init(). /// - void Started(); + /// + /// + void Started(object sender, EventArgs e); /// /// Called when Toastify is closing. /// - void Closing(); + void Closing(object sender, EventArgs e); /// /// Called on track change. /// - /// - /// - void TrackChanged(string artist, string title); + /// + /// + void TrackChanged(object sender, SpotifyTrackChangedEventArgs e); } } \ No newline at end of file diff --git a/PluginBase/PluginBase.csproj b/PluginBase/PluginBase.csproj index 1aeb792b..c3d5a2a3 100644 --- a/PluginBase/PluginBase.csproj +++ b/PluginBase/PluginBase.csproj @@ -81,6 +81,7 @@ + diff --git a/PluginBase/SpotifyTrackChangedEventArgs.cs b/PluginBase/SpotifyTrackChangedEventArgs.cs new file mode 100644 index 00000000..20e7a9fb --- /dev/null +++ b/PluginBase/SpotifyTrackChangedEventArgs.cs @@ -0,0 +1,18 @@ +using System; + +namespace Toastify.Plugin +{ + public class SpotifyTrackChangedEventArgs : EventArgs + { + public string Artist { get; } + public string Album { get; } + public string Title { get; } + + public SpotifyTrackChangedEventArgs(string artist, string album, string title) + { + this.Artist = artist; + this.Album = album; + this.Title = title; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Core/HotKey.cs index 5519c3eb..98e240de 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -332,7 +332,7 @@ private void InitGlobalKey() this._globalKey.Shift = this.Shift; this._globalKey.KeyCode = ConvertInputKeyToFormsKeys(this.Key); - this._globalKey.HotkeyPressed += (s, e) => { Toast.ActionHookCallback(this); }; + this._globalKey.HotkeyPressed += (s, e) => { Toast.HotkeyActionCallback(this); }; try { diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 2d9d5cb1..2bb9de6b 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -644,6 +644,11 @@ public bool PreventSleepWhilePlaying } } + private SettingsXml() + { + this.Default(); + } + public void Default(bool setHotKeys = false) { this.AlwaysStartSpotify = true; @@ -710,19 +715,12 @@ public void Save(bool replaceCurrent = false) } if (replaceCurrent) - { Instance = this; - } } public void Update() { - this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(String.Empty)); - } - - private SettingsXml() - { - this.Default(); + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(string.Empty)); } public SettingsXml Load() @@ -876,10 +874,7 @@ private void NotifyPropertyChanged(string info) #endregion INotifyPropertyChanged } -} -namespace Toastify -{ [Serializable] public class PluginDetails { diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index e568e7f3..cf51cdda 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -21,14 +21,30 @@ public Song(string artist, string title, string album = null) this.Album = album; } - public override string ToString() + internal bool IsValid() { - return this.Artist == null ? this.Track : $"{this.Artist} – {this.Track}"; + return !string.IsNullOrEmpty(this.Artist) || !string.IsNullOrEmpty(this.Track); } - internal bool IsValid() + public string GetClipboardText(string template) { - return !string.IsNullOrEmpty(this.Artist) || !string.IsNullOrEmpty(this.Track); + string trackBeforeAction = this.ToString(); + + // if the string is empty we set it to {0} + if (string.IsNullOrWhiteSpace(template)) + template = "{0}"; + + // add the song name to the end of the template if the user forgot to put in the + // replacement marker + if (!template.Contains("{0}")) + template += " {0}"; + + return string.Format(template, trackBeforeAction); + } + + public override string ToString() + { + return this.Artist == null ? this.Track : $"{this.Artist} – {this.Track}"; } public override bool Equals(object obj) diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs index 727f01ba..d035e403 100644 --- a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -12,5 +12,10 @@ public SpotifyTrackChangedEventArgs(Song previousSong, Song newSong) this.PreviousSong = previousSong; this.NewSong = newSong; } + + public static implicit operator Plugin.SpotifyTrackChangedEventArgs(SpotifyTrackChangedEventArgs e) + { + return new Plugin.SpotifyTrackChangedEventArgs(e.NewSong.Artist, e.NewSong.Album, e.NewSong.Track); + } } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/UI/Toast.xaml index d4cb2966..14da5676 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -1,8 +1,9 @@  + Title="Toastify" Width="300" Height="75" MinWidth="200" MinHeight="65" AllowsTransparency="True" Background="#00000000" Opacity="0" + WindowStyle="None" ResizeMode="NoResize" ShowInTaskbar="False" Cursor="Hand" Topmost="True" WindowState="Minimized" ShowActivated="False" + Loaded="Window_Loaded" MouseEnter="Window_MouseEnter" MouseLeave="Window_MouseLeave" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp"> @@ -34,9 +35,7 @@ - - - + diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 9642e911..9a028fd9 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -6,18 +6,23 @@ using System.IO; using System.Linq; using System.Reflection; +using System.Threading; using System.Windows; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; +using System.Windows.Threading; using Toastify.Core; using Toastify.Events; using Toastify.Helpers; +using Toastify.Plugin; using Toastify.Services; using Application = System.Windows.Application; using Clipboard = System.Windows.Clipboard; +using Color = System.Windows.Media.Color; +using ColorConverter = System.Windows.Media.ColorConverter; using MessageBox = System.Windows.MessageBox; using MouseEventArgs = System.Windows.Input.MouseEventArgs; using Timer = System.Timers.Timer; @@ -27,35 +32,31 @@ namespace Toastify.UI [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class Toast : Window { - private const string DEFAULT_ICON = "SpotifyToastifyLogo.png"; - private const string AD_PLAYING_ICON = "SpotifyAdPlaying.png"; - private const string ALBUM_ACCESS_DENIED_ICON = "ToastifyAccessDenied.png"; + private const string DEFAULT_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyLogo.png"; + private const string AD_PLAYING_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyAdPlaying.png"; + private const string ALBUM_ACCESS_DENIED_ICON = "pack://application:,,,/Toastify;component/Resources/ToastifyAccessDenied.png"; + private const string UPDATE_LOGO_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyUpdateLogo.png"; + + internal static Toast Current { get; private set; } + + #region Private fields - private Timer watchTimer; private Timer minimizeTimer; private NotifyIcon trayIcon; - /// - /// Holds the actual icon shown on the toast - /// - private string toastIcon = ""; - + private Song currentSong; private BitmapImage cover; + private string toastIconURI = ""; private VersionChecker versionChecker; private bool isUpdateToast; - internal List Plugins { get; set; } - - internal static Toast Current { get; private set; } + private bool dragging; - /// - /// To the best of our knowledge this is our current playing song - /// - private Song currentSong; + #endregion Private fields - private bool dragging; + internal List Plugins { get; set; } public new Visibility Visibility { @@ -65,37 +66,62 @@ public partial class Toast : Window #pragma warning restore IDE0009 // Member access should be qualified. } - public void LoadSettings() - { - try - { - SettingsXml.Instance.Load(); - } - catch (Exception ex) - { - Debug.WriteLine("Exception loading settings:\n" + ex); + #region Events - MessageBox.Show(@"Toastify was unable to load the settings file." + Environment.NewLine + - "Delete the Toastify.xml file and restart the application to recreate the settings file." + Environment.NewLine + - Environment.NewLine + - "The application will now be started with default settings.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + public event EventHandler Started; - SettingsXml.Instance.Default(setHotKeys: true); - } - } + public event EventHandler ToastClosing; + + #endregion Events public Toast() { this.InitializeComponent(); - // set a static reference back to ourselves, useful for callbacks + // Set a static reference back to ourselves, useful for callbacks. Current = this; } - private void Window_Loaded(object sender, RoutedEventArgs e) + #region Initialization + + private void Init() { - //Load settings from XML this.LoadSettings(); + this.InitToast(); + this.InitTrayIcon(); + this.StartSpotifyOrAskUser(); + + // Subscribe to Spotify's events (i.e. SpotifyLocalAPI's). + Spotify.Instance.SongChanged += this.Spotify_SongChanged; + Spotify.Instance.PlayStateChanged += this.Spotify_PlayStateChanged; + Spotify.Instance.TrackTimeChanged += this.Spotify_TrackTimeChanged; + + this.Deactivated += this.Toast_Deactivated; + + this.LoadPlugins(); + this.Started?.Invoke(this, EventArgs.Empty); + + this.InitVersionChecker(); + } + + private void LoadSettings() + { + try + { + SettingsXml.Instance.Load(); + } + catch (Exception ex) + { + Debug.WriteLine("Exception loading settings:\n" + ex); + + MessageBox.Show( + $@"Toastify was unable to load the settings file.{Environment.NewLine + }Delete the Toastify.xml file and restart the application to recreate the settings file.{Environment.NewLine + }{Environment.NewLine + }The application will now be started with default settings.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + + SettingsXml.Instance.Default(true); + } string version = VersionChecker.Version; @@ -104,14 +130,52 @@ private void Window_Loaded(object sender, RoutedEventArgs e) if (SettingsXml.Instance.PreviousOS != version) { Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - SettingsXml.Instance.PreviousOS = version; } + } - //Init toast(color settings) - this.InitToast(); + public void InitToast() + { + //If we find any invalid settings in the xml we skip it and use default. + //User notification of bad settings will be implemented with the settings dialog. + + // TODO: Refactor InitToast method. + //This method is UGLY but we'll keep it until the settings dialog is implemented. + SettingsXml settings = SettingsXml.Instance; + + double minWidth = this.MinWidth > 0.0 ? this.MinWidth : 200.0; + double minHeight = this.MinHeight > 0.0 ? this.MinHeight : 65.0; + + this.Width = settings.ToastWidth >= minWidth ? settings.ToastWidth : minWidth; + this.Height = settings.ToastHeight >= minHeight ? settings.ToastHeight : minHeight; + this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); + + ColorConverter cc = new ColorConverter(); + + // Borders + if (!string.IsNullOrEmpty(settings.ToastBorderColor) && cc.IsValid(settings.ToastBorderColor)) + { + object borderBrush = cc.ConvertFrom(settings.ToastBorderColor); + if (borderBrush != null) + this.ToastBorder.BorderBrush = new SolidColorBrush((Color)borderBrush); + } + + // Top & Bottom + if (!string.IsNullOrEmpty(settings.ToastColorTop) && cc.IsValid(settings.ToastColorTop) && + !string.IsNullOrEmpty(settings.ToastColorBottom) && cc.IsValid(settings.ToastColorBottom)) + { + object top = cc.ConvertFrom(settings.ToastColorTop); + object bottom = cc.ConvertFrom(settings.ToastColorBottom); + + if (top != null && bottom != null) + this.ToastBorder.Background = new LinearGradientBrush((Color)top, (Color)bottom, 90.0); + } - //Init tray icon + this.ToastBorder.CornerRadius = new CornerRadius(settings.ToastBorderCornerRadiusTopLeft, settings.ToastBorderCornerRadiusTopRight, settings.ToastBorderCornerRadiusBottomRight, settings.ToastBorderCornerRadiusBottomLeft); + } + + private void InitTrayIcon() + { this.trayIcon = new NotifyIcon { Icon = Properties.Resources.spotifyicon, @@ -120,189 +184,141 @@ private void Window_Loaded(object sender, RoutedEventArgs e) ContextMenu = new ContextMenu() }; - //Init tray icon menu MenuItem menuSettings = new MenuItem { Text = @"Settings" }; menuSettings.Click += (s, ev) => { Settings.Launch(this); }; - this.trayIcon.ContextMenu.MenuItems.Add(menuSettings); - MenuItem menuAbout = new MenuItem { Text = @"About Toastify..." }; menuAbout.Click += (s, ev) => { new About().ShowDialog(); }; - this.trayIcon.ContextMenu.MenuItems.Add(menuAbout); - - this.trayIcon.ContextMenu.MenuItems.Add("-"); - MenuItem menuExit = new MenuItem { Text = @"Exit" }; menuExit.Click += (s, ev) => { Application.Current.Shutdown(); }; //this.Close(); }; + this.trayIcon.ContextMenu.MenuItems.Add(menuSettings); + this.trayIcon.ContextMenu.MenuItems.Add(menuAbout); + this.trayIcon.ContextMenu.MenuItems.Add("-"); this.trayIcon.ContextMenu.MenuItems.Add(menuExit); this.trayIcon.MouseClick += (s, ev) => { if (ev.Button == MouseButtons.Left) this.DisplayAction(SpotifyAction.ShowToast, null); }; - this.trayIcon.DoubleClick += (s, ev) => { Settings.Launch(this); }; + } - //Init watch timer - this.watchTimer = new Timer(1000); - this.watchTimer.Elapsed += (s, ev) => + private void StartSpotifyOrAskUser() + { + try { - this.watchTimer.Stop(); - this.CheckTitle(); - this.watchTimer.Start(); - }; - - this.Deactivated += this.Toast_Deactivated; - - //Remove from ALT+TAB - Win32API.AddToolWindowStyle(this); - - //Check if Spotify is running. - this.AskUserToStartSpotify(); - this.LoadPlugins(); + Spotify.Instance.StartSpotify(); + } + catch (Exception e) + { + MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + } + } - //Let the plugins know we're started. - foreach (var p in this.Plugins) + private void LoadPlugins() + { + this.Plugins = new List(); + Assembly assembly = Assembly.GetExecutingAssembly(); + if (assembly.Location != null) { - try - { - p.Started(); - } - catch (Exception) + string applicationPath = new FileInfo(assembly.Location).DirectoryName; + + foreach (var p in SettingsXml.Instance.Plugins) { - //For now we swallow any plugin errors. + try + { + if (applicationPath != null) + { + string pluginFilePath = Path.Combine(applicationPath, p.FileName); + if (Activator.CreateInstanceFrom(pluginFilePath, p.TypeName).Unwrap() is IPluginBase plugin) + { + plugin.Init(p.Settings); + this.Plugins.Add(plugin); + + this.Started += plugin.Started; + this.ToastClosing += plugin.Closing; + Spotify.Instance.SongChanged += (sender, e) => plugin.TrackChanged(sender, e); + } + else + Debug.WriteLine("'plugin' is not of type IPluginBase (?)"); + } + else + Debug.WriteLine("'applicationPath' is null"); + } + catch (Exception) + { + // TODO: Handle plugins' errors. + } + Console.WriteLine(@"Loaded " + p.TypeName); } } + } - if (!SettingsXml.Instance.DisableToast) - this.watchTimer.Enabled = true; //Only need to be enabled if we are going to show the toast. - + private void InitVersionChecker() + { this.versionChecker = new VersionChecker(); this.versionChecker.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; this.versionChecker.BeginCheckVersion(); // TODO: right now this is pretty dumb - kick off update notifications every X hours, this might get annoying // and really we should just pop a notification once per version and probably immediately after a song toast - var updateTimer = new System.Windows.Threading.DispatcherTimer(); + var updateTimer = new DispatcherTimer(); updateTimer.Tick += (timerSender, timerE) => { this.versionChecker.BeginCheckVersion(); }; updateTimer.Interval = new TimeSpan(6, 0, 0); updateTimer.Start(); } - private void Toast_Deactivated(object sender, EventArgs e) - { - this.Topmost = true; - } + #endregion Initialization - public void InitToast() + private void UpdateCurrentSong(Song song) { - const double minWidth = 200.0; - const double minHeight = 65.0; - - //If we find any invalid settings in the xml we skip it and use default. - //User notification of bad settings will be implemented with the settings dialog. + this.currentSong = song; - //This method is UGLY but we'll keep it until the settings dialog is implemented. - SettingsXml settings = SettingsXml.Instance; + this.UpdateCoverArtUrl(); - this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); + this.Dispatcher.Invoke(() => { this.Title1.Text = this.currentSong.Track; this.Title2.Text = this.currentSong.Artist; }, DispatcherPriority.Normal); + this.Dispatcher.Invoke(() => { this.FadeIn(); }, DispatcherPriority.Normal); - System.Windows.Media.ColorConverter cc = new System.Windows.Media.ColorConverter(); - if (!string.IsNullOrEmpty(settings.ToastBorderColor) && cc.IsValid(settings.ToastBorderColor)) + // Save track info to file. + if (SettingsXml.Instance.SaveTrackToFile) { - object borderBrush = cc.ConvertFrom(settings.ToastBorderColor); - if (borderBrush != null) - this.ToastBorder.BorderBrush = new SolidColorBrush((System.Windows.Media.Color)borderBrush); - } - - if (!string.IsNullOrEmpty(settings.ToastColorTop) && !string.IsNullOrEmpty(settings.ToastColorBottom) && cc.IsValid(settings.ToastColorTop) && cc.IsValid(settings.ToastColorBottom)) - { - object top = cc.ConvertFrom(settings.ToastColorTop); - object bottom = cc.ConvertFrom(settings.ToastColorBottom); - - if (top != null && bottom != null) - this.ToastBorder.Background = new LinearGradientBrush((System.Windows.Media.Color)top, (System.Windows.Media.Color)bottom, 90.0); - } - - if (settings.ToastWidth >= minWidth) - this.Width = settings.ToastWidth; - if (settings.ToastHeight >= minHeight) - this.Height = settings.ToastHeight; - - //If we made it this far we have all the values needed. - this.ToastBorder.CornerRadius = new CornerRadius(settings.ToastBorderCornerRadiusTopLeft, settings.ToastBorderCornerRadiusTopRight, settings.ToastBorderCornerRadiusBottomRight, settings.ToastBorderCornerRadiusBottomLeft); - } - - private void CheckTitle() - { - Song currentSong = Spotify.Instance.CurrentSong; - - if (currentSong != null && currentSong.IsValid() && !currentSong.Equals(this.currentSong)) - { - // set the previous title asap so that the next timer call to this function will - // fail fast (setting it at the end may cause multiple web requests) - this.currentSong = currentSong; - - try - { - Spotify.Instance.SetCoverArt(currentSong); - } - catch - { - // Exceptions will be handled (for telemetry etc.) within SetCoverArt, but they will be rethrown - // so that we can set custom artwork here - currentSong.CoverArtUrl = ALBUM_ACCESS_DENIED_ICON; - } - - // Toastify-specific custom logic around album art (if it's missing, or an ad) - this.UpdateSongForToastify(currentSong); - - this.toastIcon = currentSong.CoverArtUrl; - - this.Dispatcher.Invoke((Action)delegate { this.Title1.Text = currentSong.Track; this.Title2.Text = currentSong.Artist; }, System.Windows.Threading.DispatcherPriority.Normal); - - foreach (var p in this.Plugins) + if (!string.IsNullOrEmpty(SettingsXml.Instance.SaveTrackToFilePath)) { try { - p.TrackChanged(currentSong.Artist, currentSong.Track); - } - catch (Exception) - { - //For now we swallow any plugin errors. + string trackText = this.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate); + File.WriteAllText(SettingsXml.Instance.SaveTrackToFilePath, trackText); } - } - - this.Dispatcher.Invoke((Action)delegate { this.FadeIn(); }, System.Windows.Threading.DispatcherPriority.Normal); - - if (SettingsXml.Instance.SaveTrackToFile) - { - if (!string.IsNullOrEmpty(SettingsXml.Instance.SaveTrackToFilePath)) + catch { - try - { - string trackText = GetClipboardText(currentSong); - - File.WriteAllText(SettingsXml.Instance.SaveTrackToFilePath, trackText); - } - catch - { - // ignore errors writing out the album - } + // Ignore errors writing out the album. } } } } - private void UpdateSongForToastify(Song currentSong) + private void UpdateCoverArtUrl() { - if (string.IsNullOrWhiteSpace(currentSong.Track)) + try { - currentSong.CoverArtUrl = AD_PLAYING_ICON; - currentSong.Track = "Spotify Ad"; + Spotify.Instance.SetCoverArt(this.currentSong); } - else if (string.IsNullOrWhiteSpace(currentSong.CoverArtUrl)) - currentSong.CoverArtUrl = DEFAULT_ICON; + catch + { + // Exceptions will be handled (for telemetry etc.) within SetCoverArt, but they will be rethrown + // so that we can set custom artwork here + this.currentSong.CoverArtUrl = ALBUM_ACCESS_DENIED_ICON; + } + + if (string.IsNullOrWhiteSpace(this.currentSong.Track)) + { + this.currentSong.CoverArtUrl = AD_PLAYING_ICON; + this.currentSong.Track = "Spotify Ad"; + } + else if (string.IsNullOrWhiteSpace(this.currentSong.CoverArtUrl)) + this.currentSong.CoverArtUrl = DEFAULT_ICON; + + this.toastIconURI = this.currentSong.CoverArtUrl; } private void FadeIn(bool force = false, bool isUpdate = false) @@ -334,11 +350,11 @@ private void FadeIn(bool force = false, bool isUpdate = false) this.isUpdateToast = isUpdate; - if (!string.IsNullOrEmpty(this.toastIcon)) + if (!string.IsNullOrEmpty(this.toastIconURI)) { this.cover = new BitmapImage(); this.cover.BeginInit(); - this.cover.UriSource = new Uri(this.toastIcon, UriKind.RelativeOrAbsolute); + this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); this.cover.EndInit(); this.LogoToast.Source = this.cover; } @@ -360,21 +376,6 @@ private void FadeIn(bool force = false, bool isUpdate = false) this.Topmost = true; } - private void ResetPositionIfOffScreen(Rectangle workingArea) - { - var rect = new Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); - - if (!Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) - { - // get the defaults, but don't save them (this allows the user to reconnect their screen and get their - // desired settings back) - var position = ScreenHelper.GetDefaultToastPosition(this.Width, this.Height); - - this.Left = position.X; - this.Top = position.Y; - } - } - private void FadeOut(bool now = false) { // 16 == one frame (0 is not a valid interval) @@ -392,7 +393,7 @@ private void FadeOut(bool now = false) this.minimizeTimer.Elapsed += (s, ev) => { - this.Dispatcher.Invoke((Action)delegate + this.Dispatcher.Invoke(() => { this.WindowState = WindowState.Minimized; Debug.WriteLine("Minimized"); @@ -407,233 +408,21 @@ private void FadeOut(bool now = false) this.minimizeTimer.Start(); } - private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) - { - if (!e.New) - return; - - const string title = "Update Toastify!"; - string caption = "Version " + e.Version + " available now."; - - // this is a background thread, so sleep it a bit so that it doesn't clash with the startup toast - System.Threading.Thread.Sleep(20000); - - this.Dispatcher.Invoke((Action)delegate - { - this.Title1.Text = title; - this.Title2.Text = caption; - - this.toastIcon = "SpotifyToastifyUpdateLogo.png"; - - this.FadeIn(true, true); - }, System.Windows.Threading.DispatcherPriority.Normal); - } - - private void LoadPlugins() - { - //Load plugins - this.Plugins = new List(); - Assembly assembly = Assembly.GetExecutingAssembly(); - if (assembly.Location != null) - { - string applicationPath = new FileInfo(assembly.Location).DirectoryName; - - foreach (var p in SettingsXml.Instance.Plugins) - { - try - { - if (applicationPath != null) - { - var plugin = Activator.CreateInstanceFrom(Path.Combine(applicationPath, p.FileName), p.TypeName).Unwrap() as Plugin.IPluginBase; - plugin?.Init(p.Settings); - this.Plugins.Add(plugin); - } - else - Debug.WriteLine("applicationPath is null"); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - Console.WriteLine(@"Loaded " + p.TypeName); - } - } - } - - private void AskUserToStartSpotify() - { - // Thanks to recent changes in Spotify that removed the song Artist + Title from the titlebar - // we are forced to launch Spotify ourselves (under WebDriver), so we no longer ask the user - try - { - Spotify.Instance.StartSpotify(); - } - catch (Exception e) - { - MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - } - } - - protected override void OnClosing(System.ComponentModel.CancelEventArgs e) - { - // close Spotify first - if (SettingsXml.Instance.CloseSpotifyWithToastify) - Spotify.Instance.Kill(); - - // Ensure trayicon is removed on exit. (Thx Linus) - this.trayIcon.Visible = false; - this.trayIcon.Dispose(); - this.trayIcon = null; - - // Let the plugins now we're closing up. - // we do this last since it's transparent to the user - foreach (var p in this.Plugins) - { - try - { - p.Closing(); - p.Dispose(); - } - catch (Exception) - { - //For now we swallow any plugin errors. - } - } - - this.Plugins.Clear(); - - base.OnClosing(e); - } - - private Key ConvertKey(Keys key) - { - if (Enum.GetNames(typeof(Key)).Contains(key.ToString())) - return (Key)Enum.Parse(typeof(Key), key.ToString()); - - return Key.None; - } - - #region ActionHookCallback - - private static Hotkey _lastHotkey; - private static DateTime _lastHotkeyPressTime = DateTime.Now; - - /// - /// If the same hotkey press happens within this buffer time, it will be ignored. - /// - /// I came to 150 by pressing keys as quickly as possibly. The minimum time was less than 150 - /// but most values fell in the 150 to 200 range for quick presses, so 150 seemed the most reasonable - /// - private const int WAIT_BETWEEN_HOTKEY_PRESS = 150; - - internal static void ActionHookCallback(Hotkey hotkey) + private void ResetPositionIfOffScreen(Rectangle workingArea) { - // Bug 9421: ignore this keypress if it is the same as the previous one and it's been less than - // WAIT_BETWEEN_HOTKEY_PRESS since the last press. Note that we do not update - // _lastHotkeyPressTime in this case to avoid being trapped in a never ending cycle of - // ignoring keypresses if the user (for some reason) decides to press really quickly, - // really often on the hotkey - if (hotkey == _lastHotkey && DateTime.Now.Subtract(_lastHotkeyPressTime).TotalMilliseconds < WAIT_BETWEEN_HOTKEY_PRESS) - return; - - _lastHotkey = hotkey; - _lastHotkeyPressTime = DateTime.Now; - - string currentTrack = string.Empty; - - try - { - Song songBeforeAction = Current.currentSong; - - if (hotkey.Action == SpotifyAction.CopyTrackInfo && songBeforeAction != null) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); - - CopySongToClipboard(songBeforeAction); - } - else if (hotkey.Action == SpotifyAction.PasteTrackInfo && songBeforeAction != null) - { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); - - CopySongToClipboard(songBeforeAction); - - SendPasteKey(hotkey); - } - else - { - Spotify.Instance.SendAction(hotkey.Action); - } + var rect = new Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); - Current.DisplayAction(hotkey.Action, songBeforeAction); - } - catch (Exception ex) + if (!Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) { - if (Debugger.IsAttached) - Debugger.Break(); + // get the defaults, but don't save them (this allows the user to reconnect their screen and get their + // desired settings back) + var position = ScreenHelper.GetDefaultToastPosition(this.Width, this.Height); - Debug.WriteLine("Exception with hooked key! " + ex); - Current.Title1.Text = "Unable to communicate with Spotify"; - Current.Title2.Text = ""; - Current.FadeIn(); + this.Left = position.X; + this.Top = position.Y; } } - private static void SendPasteKey(Hotkey hotkey) - { - var shiftKey = new ManagedWinapi.KeyboardKey(Keys.ShiftKey); - var altKey = new ManagedWinapi.KeyboardKey(Keys.Alt); - var ctrlKey = new ManagedWinapi.KeyboardKey(Keys.ControlKey); - var vKey = new ManagedWinapi.KeyboardKey(Keys.V); - - // Before injecting a paste command, first make sure that no modifiers are already - // being pressed (which will throw off the Ctrl+v). - // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck - var maxSleep = 250; - - // minimum sleep time - System.Threading.Thread.Sleep(150); - - //System.Diagnostics.Debug.WriteLine("shift: " + shiftKey.State + " alt: " + altKey.State + " ctrl: " + ctrlKey.State); - - while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) - System.Threading.Thread.Sleep(maxSleep -= 50); - - //System.Diagnostics.Debug.WriteLine("maxSleep: " + maxSleep); - - // press keys in sequence. Don't use PressAndRelease since that seems to be too fast - // for most applications and the sequence gets lost. - ctrlKey.Press(); - vKey.Press(); - System.Threading.Thread.Sleep(25); - vKey.Release(); - System.Threading.Thread.Sleep(25); - ctrlKey.Release(); - } - - private static string GetClipboardText(Song currentSong) - { - string trackBeforeAction = currentSong.ToString(); - var template = SettingsXml.Instance.ClipboardTemplate; - - // if the string is empty we set it to {0} - if (string.IsNullOrWhiteSpace(template)) - template = "{0}"; - - // add the song name to the end of the template if the user forgot to put in the - // replacement marker - if (!template.Contains("{0}")) - template += " {0}"; - - return string.Format(template, trackBeforeAction); - } - - private static void CopySongToClipboard(Song trackBeforeAction) - { - Clipboard.SetText(GetClipboardText(trackBeforeAction)); - } - - #endregion ActionHookCallback - public void DisplayAction(SpotifyAction action, Song trackBeforeAction) { //Anything that changes track doesn't need to be handled since @@ -649,7 +438,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) if (!Spotify.Instance.IsRunning && action != SpotifyAction.SettingsSaved) { - this.toastIcon = DEFAULT_ICON; + this.toastIconURI = DEFAULT_ICON; this.Title1.Text = "Spotify not available!"; this.Title2.Text = string.Empty; this.FadeIn(); @@ -714,7 +503,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) case SpotifyAction.ShowToast: if (currentTrack == null || !currentTrack.IsValid()) { - this.toastIcon = DEFAULT_ICON; + this.toastIconURI = DEFAULT_ICON; this.Title1.Text = nothingsPlaying; this.Title2.Text = string.Empty; @@ -723,7 +512,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) { if (currentTrack.IsValid()) { - this.toastIcon = currentTrack.CoverArtUrl; + this.toastIconURI = currentTrack.CoverArtUrl; this.Title1.Text = currentTrack.Artist; this.Title2.Text = currentTrack.Track; @@ -737,7 +526,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) break; case SpotifyAction.ThumbsUp: - this.toastIcon = "Resources/thumbs_up.png"; + this.toastIconURI = "Resources/thumbs_up.png"; this.Title1.Text = "Thumbs Up!"; this.Title2.Text = currentTrack.ToString(); @@ -745,7 +534,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) break; case SpotifyAction.ThumbsDown: - this.toastIcon = "Resources/thumbs_down.png"; + this.toastIconURI = "Resources/thumbs_down.png"; this.Title1.Text = "Thumbs Down :("; this.Title2.Text = currentTrack.ToString(); @@ -754,6 +543,93 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) } } + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) + { + // close Spotify first + if (SettingsXml.Instance.CloseSpotifyWithToastify) + Spotify.Instance.Kill(); + + // Ensure trayicon is removed on exit. (Thx Linus) + this.trayIcon.Visible = false; + this.trayIcon.Dispose(); + this.trayIcon = null; + + this.ToastClosing?.Invoke(this, EventArgs.Empty); + this.Plugins.Clear(); + + base.OnClosing(e); + } + + #region HotkeyActionCallback + + private static Hotkey _lastHotkey; + private static DateTime _lastHotkeyPressTime = DateTime.Now; + + /// + /// If the same hotkey press happens within this buffer time, it will be ignored. + /// + /// I came to 150 by pressing keys as quickly as possibly. The minimum time was less than 150 + /// but most values fell in the 150 to 200 range for quick presses, so 150 seemed the most reasonable + /// + private const int WAIT_BETWEEN_HOTKEY_PRESS = 150; + + internal static void HotkeyActionCallback(Hotkey hotkey) + { + // Bug 9421: ignore this keypress if it is the same as the previous one and it's been less than + // WAIT_BETWEEN_HOTKEY_PRESS since the last press. Note that we do not update + // _lastHotkeyPressTime in this case to avoid being trapped in a never ending cycle of + // ignoring keypresses if the user (for some reason) decides to press really quickly, + // really often on the hotkey + if (hotkey == _lastHotkey && DateTime.Now.Subtract(_lastHotkeyPressTime).TotalMilliseconds < WAIT_BETWEEN_HOTKEY_PRESS) + return; + + _lastHotkey = hotkey; + _lastHotkeyPressTime = DateTime.Now; + + try + { + Song songBeforeAction = Current.currentSong; + + if (hotkey.Action == SpotifyAction.CopyTrackInfo && songBeforeAction != null) + { + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); + Clipboard.SetText(songBeforeAction.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + } + else if (hotkey.Action == SpotifyAction.PasteTrackInfo && songBeforeAction != null) + { + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); + Clipboard.SetText(songBeforeAction.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + Win32API.SendPasteKey(); + } + else + Spotify.Instance.SendAction(hotkey.Action); + + Current.DisplayAction(hotkey.Action, songBeforeAction); + } + catch (Exception ex) + { + if (Debugger.IsAttached) + Debugger.Break(); + + Debug.WriteLine("Exception with hooked key! " + ex); + Current.Title1.Text = "Unable to communicate with Spotify"; + Current.Title2.Text = ""; + Current.FadeIn(); + } + } + + #endregion HotkeyActionCallback + + #region Event handlers [xaml] + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + this.Init(); + + // Remove from ALT+TAB. + Win32API.AddToolWindowStyle(this); + } + /// /// Mouse is over the window, halt any fade out animations and keep /// the toast active. @@ -807,5 +683,60 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) settings.Save(); } } + + #endregion Event handlers [xaml] + + #region Event handlers [Spotify] + + private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArgs e) + { + if (e.NewSong == null || !e.NewSong.IsValid()) + return; + + this.UpdateCurrentSong(e.NewSong); + } + + private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEventArgs e) + { + // TODO: PlayStateChanged + } + + private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEventArgs e) + { + // TODO: TrackTimeChanged + } + + #endregion Event handlers [Spotify] + + #region Event handlers + + private void Toast_Deactivated(object sender, EventArgs e) + { + this.Topmost = true; + } + + private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) + { + if (!e.New) + return; + + const string title = "Update Toastify!"; + string caption = "Version " + e.Version + " available now."; + + // this is a background thread, so sleep it a bit so that it doesn't clash with the startup toast + Thread.Sleep(20000); + + this.Dispatcher.Invoke(() => + { + this.Title1.Text = title; + this.Title2.Text = caption; + + this.toastIconURI = UPDATE_LOGO_ICON; + + this.FadeIn(true, true); + }, DispatcherPriority.Normal); + } + + #endregion Event handlers } } \ No newline at end of file diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 01ef6a41..aaeaa6e7 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -5,6 +5,7 @@ using System.Runtime.InteropServices; using System.Text; using System.Threading; +using System.Windows.Forms; using System.Windows.Interop; namespace Toastify @@ -153,6 +154,37 @@ public static void AddToolWindowStyle(System.Windows.Window window) SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); } + public static void SendPasteKey() + { + var shiftKey = new ManagedWinapi.KeyboardKey(Keys.ShiftKey); + var altKey = new ManagedWinapi.KeyboardKey(Keys.Alt); + var ctrlKey = new ManagedWinapi.KeyboardKey(Keys.ControlKey); + var vKey = new ManagedWinapi.KeyboardKey(Keys.V); + + // Before injecting a paste command, first make sure that no modifiers are already + // being pressed (which will throw off the Ctrl+v). + // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck + var maxSleep = 250; + + // minimum sleep time + Thread.Sleep(150); + + //System.Diagnostics.Debug.WriteLine("shift: " + shiftKey.State + " alt: " + altKey.State + " ctrl: " + ctrlKey.State); + + while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) + Thread.Sleep(maxSleep -= 50); + + //System.Diagnostics.Debug.WriteLine("maxSleep: " + maxSleep); + + // Press keys in sequence. Don't use PressAndRelease since that seems to be too fast for most applications and the sequence gets lost. + ctrlKey.Press(); + vKey.Press(); + Thread.Sleep(25); + vKey.Release(); + Thread.Sleep(25); + ctrlKey.Release(); + } + #region Enums [Flags] From 3c4a722fcd7d622aaeb2f2b51457c553c7d92655 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 12:23:42 +0200 Subject: [PATCH 007/452] Added Connected event to Spotify Raised when SpotifyLocalAPI's Connect method is called. --- Toastify/Toastify.csproj | 1 + Toastify/src/Core/Spotify.cs | 16 ++++++++---- Toastify/src/Events/SpotifyStateEventArgs.cs | 26 ++++++++++++++++++++ Toastify/src/UI/Toast.xaml.cs | 9 +++++++ 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 Toastify/src/Events/SpotifyStateEventArgs.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 79bcbc74..f36d6410 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -147,6 +147,7 @@ + diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 09c04f8e..58512f87 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -7,6 +7,7 @@ using System.IO; using System.Net; using System.Threading; +using Toastify.Events; using Toastify.Helpers; using Toastify.Services; @@ -70,6 +71,8 @@ public Song CurrentSong #region Events + public event EventHandler Connected; + public event EventHandler SongChanged; public event EventHandler PlayStateChanged; @@ -86,9 +89,8 @@ protected Spotify() // Connect with Spotify to use the local API. this.localAPI = new SpotifyLocalAPI(); - this.localAPI.Connect(); - // Subscribe to SpotifyLocalAPI events. + // Subscribe to SpotifyLocalAPI's events. this.localAPI.OnTrackChange += this.SpotifyLocalAPI_OnTrackChange; this.localAPI.OnPlayStateChange += this.SpotifyLocalAPI_OnPlayStateChange; this.localAPI.OnTrackTimeChange += this.SpotifyLocalAPI_OnTrackTimeChange; @@ -179,10 +181,11 @@ public void SetCoverArt(Song song) public void StartSpotify() { if (this.IsRunning) + { + this.localAPI.Connect(); + this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); return; - - if (this.localAPI == null) - this.localAPI = new SpotifyLocalAPI(); + } // Launch Spotify. var spotifyFilePath = Path.Combine(this.spotifyPath, "spotify.exe"); @@ -197,6 +200,9 @@ public void StartSpotify() // it waits for the Window to appear before minimizing) Thread.Sleep(2000); } + + this.localAPI.Connect(); + this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); } private void Minimize() diff --git a/Toastify/src/Events/SpotifyStateEventArgs.cs b/Toastify/src/Events/SpotifyStateEventArgs.cs new file mode 100644 index 00000000..0db990b0 --- /dev/null +++ b/Toastify/src/Events/SpotifyStateEventArgs.cs @@ -0,0 +1,26 @@ +using SpotifyAPI.Local.Models; +using System; +using Toastify.Core; + +namespace Toastify.Events +{ + internal class SpotifyStateEventArgs : EventArgs + { + public Song CurrentSong { get; } + public bool Playing { get; } + public double TrackTime { get; } + public double Volume { get; } + + public SpotifyStateEventArgs(Song currentSong, bool playing, double trackTime, double volume) + { + this.CurrentSong = currentSong; + this.Playing = playing; + this.TrackTime = trackTime; + this.Volume = volume; + } + + public SpotifyStateEventArgs(StatusResponse spotifyStatus) : this(spotifyStatus.Track, spotifyStatus.Playing, spotifyStatus.PlayingPosition, spotifyStatus.Volume) + { + } + } +} \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 9a028fd9..1d2ce965 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -207,6 +207,7 @@ private void StartSpotifyOrAskUser() { try { + Spotify.Instance.Connected += this.Spotify_Connected; Spotify.Instance.StartSpotify(); } catch (Exception e) @@ -688,6 +689,14 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) #region Event handlers [Spotify] + private void Spotify_Connected(object sender, SpotifyStateEventArgs e) + { + if (e.CurrentSong == null || !e.CurrentSong.IsValid()) + return; + + this.UpdateCurrentSong(e.CurrentSong); + } + private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArgs e) { if (e.NewSong == null || !e.NewSong.IsValid()) From a75278fda114d1f281a449d11e1a84035a7f70a2 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 12:24:51 +0200 Subject: [PATCH 008/452] Fixed event args namespace --- Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs | 2 +- Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs | 2 +- Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs index 3fcb352c..ebd7e9bb 100644 --- a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Toastify.Core +namespace Toastify.Events { public class SpotifyPlayStateChangedEventArgs : EventArgs { diff --git a/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs index 7243b69f..400fa044 100644 --- a/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Toastify.Core +namespace Toastify.Events { public class SpotifyTrackTimeChangedEventArgs : EventArgs { diff --git a/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs b/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs index 184fc1de..db37c7d3 100644 --- a/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyVolumeChangedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Toastify.Core +namespace Toastify.Events { public class SpotifyVolumeChangedEventArgs : EventArgs { From 41519b306fa208e4d51ab6e68998f0d812666182 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 12:25:38 +0200 Subject: [PATCH 009/452] Fixed resources' URIs --- Toastify/src/UI/About.xaml | 2 +- Toastify/src/UI/Settings.xaml | 10 +++++----- Toastify/src/UI/Toast.xaml | 2 +- Toastify/src/UI/Toast.xaml.cs | 7 ++----- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Toastify/src/UI/About.xaml b/Toastify/src/UI/About.xaml index e81a933f..11d58d09 100644 --- a/Toastify/src/UI/About.xaml +++ b/Toastify/src/UI/About.xaml @@ -24,7 +24,7 @@ - + diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index 589b2541..ed5a9b2a 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:core="clr-namespace:Toastify.Core" mc:Ignorable="d" - Title="Toastify - Settings" Height="542" Width="568" ResizeMode="NoResize" Icon="../../Resources/spotify.ico" Closed="Window_Closed"> + Title="Toastify - Settings" Height="542" Width="568" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> @@ -33,7 +33,7 @@ This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - + Save Artist and Album to file when song changes (uses the clipboard template) @@ -66,7 +66,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -132,7 +132,7 @@ - + The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/UI/Toast.xaml index 14da5676..7bfd7d6d 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -34,7 +34,7 @@ - + diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1d2ce965..b2f57934 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -426,9 +426,6 @@ private void ResetPositionIfOffScreen(Rectangle workingArea) public void DisplayAction(SpotifyAction action, Song trackBeforeAction) { - //Anything that changes track doesn't need to be handled since - //that will be handled in the timer event. - const string volumeUpText = "Volume ++"; const string volumeDownText = "Volume --"; const string muteOnOffText = "Mute On/Off"; @@ -527,7 +524,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) break; case SpotifyAction.ThumbsUp: - this.toastIconURI = "Resources/thumbs_up.png"; + this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_up.png"; this.Title1.Text = "Thumbs Up!"; this.Title2.Text = currentTrack.ToString(); @@ -535,7 +532,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) break; case SpotifyAction.ThumbsDown: - this.toastIconURI = "Resources/thumbs_down.png"; + this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_down.png"; this.Title1.Text = "Thumbs Down :("; this.Title2.Text = currentTrack.ToString(); From 4c4546913a7f051650e255bd3b82b4cdce54605d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 12:46:08 +0200 Subject: [PATCH 010/452] Removed VolumeHelper and replaced with SpotifyLocalAPI's methods --- Toastify/Toastify.csproj | 2 +- Toastify/src/Core/Spotify.cs | 6 +- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 31 ++ Toastify/src/Helpers/VolumeHelper.cs | 359 ------------------ 4 files changed, 35 insertions(+), 363 deletions(-) create mode 100644 Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs delete mode 100644 Toastify/src/Helpers/VolumeHelper.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index f36d6410..e2420e7c 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -152,6 +152,7 @@ + @@ -193,7 +194,6 @@ About.xaml - Code diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 58512f87..2ef400f3 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -285,17 +285,17 @@ public void SendAction(SpotifyAction action) { case SpotifyAction.VolumeUp: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - VolumeHelper.IncrementVolume("Spotify"); + this.localAPI.IncrementVolume(); return; case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - VolumeHelper.DecrementVolume("Spotify"); + this.localAPI.DecrementVolume(); return; case SpotifyAction.Mute: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - VolumeHelper.ToggleApplicationMute("Spotify"); + this.localAPI.ToggleMute(); return; } } diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs new file mode 100644 index 00000000..9035f3eb --- /dev/null +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -0,0 +1,31 @@ +using SpotifyAPI.Local; + +namespace Toastify.Helpers +{ + internal static class SpotifyLocalAPIExtensions + { + private const float DELTA_VOLUME = 5.0f; + + public static void IncrementVolume(this SpotifyLocalAPI api) + { + float currentVolume = api.GetSpotifyVolume(); + float newVolume = currentVolume + DELTA_VOLUME; + api.SetSpotifyVolume(newVolume >= 100.0f ? 100.0f : newVolume); + } + + public static void DecrementVolume(this SpotifyLocalAPI api) + { + float currentVolume = api.GetSpotifyVolume(); + float newVolume = currentVolume - DELTA_VOLUME; + api.SetSpotifyVolume(newVolume <= 0.0f ? 0.0f : newVolume); + } + + public static void ToggleMute(this SpotifyLocalAPI api) + { + if (api.IsSpotifyMuted()) + api.UnMute(); + else + api.Mute(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Helpers/VolumeHelper.cs b/Toastify/src/Helpers/VolumeHelper.cs deleted file mode 100644 index 1690469b..00000000 --- a/Toastify/src/Helpers/VolumeHelper.cs +++ /dev/null @@ -1,359 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -// ReSharper disable SuspiciousTypeConversion.Global - -namespace Toastify.Helpers -{ - internal class VolumeHelper - { - // base code from: http://stackoverflow.com/a/14322736 - - private const float VOLUME_DELTA = 5.0f; - - public static void IncrementVolume(string name) - { - float? curVolume = GetApplicationVolume(name); - - if (curVolume != null && curVolume < 100.0f) - SetApplicationVolume(name, curVolume.Value + VOLUME_DELTA); - } - - public static void DecrementVolume(string name) - { - var curVolume = GetApplicationVolume(name); - - if (curVolume != null && curVolume > 0.0f) - SetApplicationVolume(name, curVolume.Value - VOLUME_DELTA); - } - - public static float? GetApplicationVolume(string name) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return null; - - volume.GetMasterVolume(out float level); - return level * 100.0f; - } - - public static bool? GetApplicationMute(string name) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return null; - - volume.GetMute(out bool mute); - return mute; - } - - public static void SetApplicationVolume(string name, float level) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return; - - Guid guid = Guid.Empty; - volume.SetMasterVolume(level / 100, ref guid); - } - - internal static void ToggleApplicationMute(string name) - { - bool? muted = GetApplicationMute(name); - if (muted == null) - return; - - SetApplicationMute(name, !muted.Value); - } - - - public static void SetApplicationMute(string name, bool mute) - { - ISimpleAudioVolume volume = GetVolumeObject(name); - if (volume == null) - return; - - Guid guid = Guid.Empty; - volume.SetMute(mute, ref guid); - } - - public static IEnumerable EnumerateApplications() - { - // get the speakers (1st render + multimedia) device - MMDeviceEnumerator deviceEnumerator_ = new MMDeviceEnumerator(); - IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)deviceEnumerator_; - deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.ERender, ERole.EMultimedia, out IMMDevice speakers); - - // activate the session manager. we need the enumerator - Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; - speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); - IAudioSessionManager2 mgr = (IAudioSessionManager2)o; - - // enumerate sessions for on this device - mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); - sessionEnumerator.GetCount(out int count); - - for (int i = 0; i < count; i++) - { - sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); - - if (ctl is IAudioSessionControl2 ctl2) - { - ctl2.GetSessionIdentifier(out string sout1); - ctl2.GetProcessId(out uint pid); - ctl2.GetSessionInstanceIdentifier(out string sout2); - } - - ctl.GetDisplayName(out string dn); - yield return dn; - Marshal.ReleaseComObject(ctl); - } - Marshal.ReleaseComObject(sessionEnumerator); - Marshal.ReleaseComObject(mgr); - Marshal.ReleaseComObject(speakers); - Marshal.ReleaseComObject(deviceEnumerator); - } - - private static ISimpleAudioVolume GetVolumeObject(string name) - { - // get the speakers (1st render + multimedia) device - MMDeviceEnumerator deviceEnumerator_ = new MMDeviceEnumerator(); - IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)deviceEnumerator_; - deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.ERender, ERole.EMultimedia, out IMMDevice speakers); - - // activate the session manager. we need the enumerator - Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; - speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); - IAudioSessionManager2 mgr = (IAudioSessionManager2)o; - - // enumerate sessions for on this device - mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); - sessionEnumerator.GetCount(out int count); - - // lower case name for easier comparison with the Session ID later on - name = name.ToLower(); - - // search for an audio session with the required name - // Note: Since GetDisplayName only returns a real name if the application bothered to call SetDisplayName - // (which apps like Spotify do not), we instead use the SessionID (which usually includes the exe name) - ISimpleAudioVolume volumeControl = null; - - for (int i = 0; i < count; i++) - { - sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); - IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; - - ctl.GetDisplayName(out string dn); - - if (ctl2 != null) - { - ctl2.GetSessionIdentifier(out string sessionID); - - if (sessionID.ToLower().Contains(name)) - { - volumeControl = ctl as ISimpleAudioVolume; - break; - } - } - - Marshal.ReleaseComObject(ctl); - if (ctl2 != null) - Marshal.ReleaseComObject(ctl2); - } - - Marshal.ReleaseComObject(sessionEnumerator); - Marshal.ReleaseComObject(mgr); - Marshal.ReleaseComObject(speakers); - Marshal.ReleaseComObject(deviceEnumerator); - - return volumeControl; - } - - // - // Should probably be in the central WinHelper (or a NativeMethods) but it seemed cleaner to - // keep it all together. - // - - [ComImport] - [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] - internal class MMDeviceEnumerator - { - } - - internal enum EDataFlow - { - ERender, - ECapture, - EAll, - EDataFlowEnumCount - } - - internal enum ERole - { - EConsole, - EMultimedia, - ECommunications, - ERoleEnumCount - } - - [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IMMDeviceEnumerator - { - int NotImpl1(); - - [PreserveSig] - int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice); - - // the rest is not implemented - } - - [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IMMDevice - { - [PreserveSig] - int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface); - - // the rest is not implemented - } - - [Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionManager2 - { - int NotImpl1(); - - int NotImpl2(); - - [PreserveSig] - int GetSessionEnumerator(out IAudioSessionEnumerator sessionEnum); - - // the rest is not implemented - } - - [Guid("E2F5BB11-0570-40CA-ACDD-3AA01277DEE8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionEnumerator - { - [PreserveSig] - int GetCount(out int sessionCount); - - [PreserveSig] - int GetSession(int sessionCount, out IAudioSessionControl session); - } - - [Guid("F4B1A599-7266-4319-A8CA-E70ACB11E8CD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAudioSessionControl - { - int NotImpl1(); - - [PreserveSig] - int GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pRetVal); - - // the rest is not implemented - } - - public enum AudioSessionState - { - AudioSessionStateInactive = 0, - AudioSessionStateActive = 1, - AudioSessionStateExpired = 2 - } - - public enum AudioSessionDisconnectReason - { - DisconnectReasonDeviceRemoval = 0, - DisconnectReasonServerShutdown = (DisconnectReasonDeviceRemoval + 1), - DisconnectReasonFormatChanged = (DisconnectReasonServerShutdown + 1), - DisconnectReasonSessionLogoff = (DisconnectReasonFormatChanged + 1), - DisconnectReasonSessionDisconnected = (DisconnectReasonSessionLogoff + 1), - DisconnectReasonExclusiveModeOverride = (DisconnectReasonSessionDisconnected + 1) - } - - [Guid("24918ACC-64B3-37C1-8CA9-74A66E9957A8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IAudioSessionEvents - { - [PreserveSig] - int OnDisplayNameChanged([MarshalAs(UnmanagedType.LPWStr)] string newDisplayName, Guid eventContext); - - [PreserveSig] - int OnIconPathChanged([MarshalAs(UnmanagedType.LPWStr)] string newIconPath, Guid eventContext); - - [PreserveSig] - int OnSimpleVolumeChanged(float newVolume, bool newMute, Guid eventContext); - - [PreserveSig] - int OnChannelVolumeChanged(UInt32 channelCount, IntPtr newChannelVolumeArray, UInt32 changedChannel, Guid eventContext); - - [PreserveSig] - int OnGroupingParamChanged(Guid newGroupingParam, Guid eventContext); - - [PreserveSig] - int OnStateChanged(AudioSessionState newState); - - [PreserveSig] - int OnSessionDisconnected(AudioSessionDisconnectReason disconnectReason); - } - - [Guid("BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IAudioSessionControl2 - { - [PreserveSig] - int GetState(out AudioSessionState state); - - [PreserveSig] - int GetDisplayName([Out(), MarshalAs(UnmanagedType.LPWStr)] out string name); - - [PreserveSig] - int SetDisplayName([MarshalAs(UnmanagedType.LPWStr)] string value, Guid eventContext); - - [PreserveSig] - int GetIconPath([Out(), MarshalAs(UnmanagedType.LPWStr)] out string path); - - [PreserveSig] - int SetIconPath([MarshalAs(UnmanagedType.LPWStr)] string value, Guid eventContext); - - [PreserveSig] - int GetGroupingParam(out Guid groupingParam); - - [PreserveSig] - int SetGroupingParam(Guid Override, Guid eventcontext); - - [PreserveSig] - int RegisterAudioSessionNotification(IAudioSessionEvents newNotifications); - - [PreserveSig] - int UnregisterAudioSessionNotification(IAudioSessionEvents newNotifications); - - [PreserveSig] - int GetSessionIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); - - [PreserveSig] - int GetSessionInstanceIdentifier([Out(), MarshalAs(UnmanagedType.LPWStr)] out string retVal); - - [PreserveSig] - int GetProcessId(out UInt32 retvVal); - - [PreserveSig] - int IsSystemSoundsSession(); - - [PreserveSig] - int SetDuckingPreference(bool optOut); - } - - - [Guid("87CE5498-68D6-44E5-9215-6DA47EF883D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface ISimpleAudioVolume - { - [PreserveSig] - int SetMasterVolume(float fLevel, ref Guid eventContext); - - [PreserveSig] - int GetMasterVolume(out float pfLevel); - - [PreserveSig] - int SetMute(bool bMute, ref Guid eventContext); - - [PreserveSig] - int GetMute(out bool pbMute); - } - } -} \ No newline at end of file From 62c6ff1210cddfde5ee4909c4ce100051f8bc536 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 13:59:22 +0200 Subject: [PATCH 011/452] Moved toast text changes and dispatch in UpdateToastText --- Toastify/src/UI/Toast.xaml.cs | 97 ++++++++++++----------------------- 1 file changed, 33 insertions(+), 64 deletions(-) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index b2f57934..1ed4b741 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -276,9 +276,7 @@ private void UpdateCurrentSong(Song song) this.currentSong = song; this.UpdateCoverArtUrl(); - - this.Dispatcher.Invoke(() => { this.Title1.Text = this.currentSong.Track; this.Title2.Text = this.currentSong.Artist; }, DispatcherPriority.Normal); - this.Dispatcher.Invoke(() => { this.FadeIn(); }, DispatcherPriority.Normal); + this.UpdateToastText(this.currentSong.Artist, this.currentSong.Track); // Save track info to file. if (SettingsXml.Instance.SaveTrackToFile) @@ -322,6 +320,19 @@ private void UpdateCoverArtUrl() this.toastIconURI = this.currentSong.CoverArtUrl; } + private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false, bool isUpdate = false) + { + this.Dispatcher.Invoke( + DispatcherPriority.Normal, + new Action(() => + { + this.Title1.Text = title1; + this.Title2.Text = title2; + if (fadeIn) + this.FadeIn(force, isUpdate); + })); + } + private void FadeIn(bool force = false, bool isUpdate = false) { this.minimizeTimer?.Stop(); @@ -437,106 +448,76 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) if (!Spotify.Instance.IsRunning && action != SpotifyAction.SettingsSaved) { this.toastIconURI = DEFAULT_ICON; - this.Title1.Text = "Spotify not available!"; - this.Title2.Text = string.Empty; - this.FadeIn(); + this.UpdateToastText("Spotify not available!"); return; } Song currentTrack = trackBeforeAction; - string prevTitle1 = this.Title1.Text; - string prevTitle2 = this.Title2.Text; - switch (action) { case SpotifyAction.PlayPause: if (trackBeforeAction != null) { - //We pressed pause - this.Title1.Text = "Paused"; - this.Title2.Text = trackBeforeAction.ToString(); - this.FadeIn(); + // We pressed pause. + this.UpdateToastText(pausedText, trackBeforeAction.ToString()); } this.currentSong = null; //If we presses play this will force a toast to display in next timer event. break; case SpotifyAction.Stop: this.currentSong = null; - this.Title1.Text = "Stopped"; - this.Title2.Text = trackBeforeAction.ToString(); - this.FadeIn(); + this.UpdateToastText(stoppedText, trackBeforeAction.ToString()); break; case SpotifyAction.SettingsSaved: - this.Title1.Text = settingsText; - this.Title2.Text = "Here is a preview of your settings!"; - this.FadeIn(); - break; - - case SpotifyAction.NextTrack: //No need to handle + this.UpdateToastText(settingsText, "Here is a preview of your settings!"); break; - case SpotifyAction.PreviousTrack: //No need to handle + case SpotifyAction.NextTrack: + case SpotifyAction.PreviousTrack: break; case SpotifyAction.VolumeUp: - this.Title1.Text = volumeUpText; - this.Title2.Text = currentTrack.ToString(); - this.FadeIn(); + this.UpdateToastText(volumeUpText, currentTrack.ToString()); break; case SpotifyAction.VolumeDown: - this.Title1.Text = volumeDownText; - this.Title2.Text = currentTrack.ToString(); - this.FadeIn(); + this.UpdateToastText(volumeDownText, currentTrack.ToString()); break; case SpotifyAction.Mute: - this.Title1.Text = muteOnOffText; - this.Title2.Text = currentTrack.ToString(); - this.FadeIn(); + this.UpdateToastText(muteOnOffText, currentTrack.ToString()); break; case SpotifyAction.ShowToast: if (currentTrack == null || !currentTrack.IsValid()) { this.toastIconURI = DEFAULT_ICON; - - this.Title1.Text = nothingsPlaying; - this.Title2.Text = string.Empty; + this.UpdateToastText(nothingsPlaying, string.Empty, false); } else { if (currentTrack.IsValid()) { this.toastIconURI = currentTrack.CoverArtUrl; - - this.Title1.Text = currentTrack.Artist; - this.Title2.Text = currentTrack.Track; + this.UpdateToastText(currentTrack.Artist, currentTrack.Track, false); } } - this.FadeIn(true); break; - case SpotifyAction.ShowSpotify: //No need to handle + case SpotifyAction.ShowSpotify: break; case SpotifyAction.ThumbsUp: this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_up.png"; - - this.Title1.Text = "Thumbs Up!"; - this.Title2.Text = currentTrack.ToString(); - this.FadeIn(); + this.UpdateToastText("Thumbs Up!", currentTrack.ToString()); break; case SpotifyAction.ThumbsDown: this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_down.png"; - - this.Title1.Text = "Thumbs Down :("; - this.Title2.Text = currentTrack.ToString(); - this.FadeIn(); + this.UpdateToastText("Thumbs Down: (", currentTrack.ToString()); break; } } @@ -610,9 +591,7 @@ internal static void HotkeyActionCallback(Hotkey hotkey) Debugger.Break(); Debug.WriteLine("Exception with hooked key! " + ex); - Current.Title1.Text = "Unable to communicate with Spotify"; - Current.Title2.Text = ""; - Current.FadeIn(); + Current.UpdateToastText("Unable to communicate with Spotify"); } } @@ -726,21 +705,11 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp if (!e.New) return; - const string title = "Update Toastify!"; - string caption = "Version " + e.Version + " available now."; - - // this is a background thread, so sleep it a bit so that it doesn't clash with the startup toast + // This is a background thread, so sleep it a bit so that it doesn't clash with the startup toast. Thread.Sleep(20000); - this.Dispatcher.Invoke(() => - { - this.Title1.Text = title; - this.Title2.Text = caption; - - this.toastIconURI = UPDATE_LOGO_ICON; - - this.FadeIn(true, true); - }, DispatcherPriority.Normal); + this.toastIconURI = UPDATE_LOGO_ICON; + this.UpdateToastText("Update Toastify!", $"Version {e.Version} available now.", true, true, true); } #endregion Event handlers From 65dac303b18438a82c48a98aca2a6b4e221e3130 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 3 Jun 2017 23:34:37 +0200 Subject: [PATCH 012/452] Consistently show correct information about the current song, even when paused Added a 'paused' field in Toast and using the PlayStateChanged event provided by SpotifyLocalAPI to modify it. The DisplayAction method (UpdateToastText, actually) changes the toast's text accordingly. --- Toastify/src/Core/Spotify.cs | 7 +-- Toastify/src/UI/Toast.xaml.cs | 114 +++++++++++++++++++++------------- 2 files changed, 74 insertions(+), 47 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 2ef400f3..71fc163e 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -195,10 +195,8 @@ public void StartSpotify() this.Minimize(); else { - // we need to let Spotify start up before interacting with it fully. 2 seconds is a relatively - // safe amount of time to wait, even if the pattern is gross. (Minimize() doesn't need it since - // it waits for the Window to appear before minimizing) - Thread.Sleep(2000); + // We need to let Spotify start up before interacting with it fully. + Thread.Sleep(3000); } this.localAPI.Connect(); @@ -304,7 +302,6 @@ public void SendAction(SpotifyAction action) { case SpotifyAction.CopyTrackInfo: case SpotifyAction.ShowToast: - //Nothing break; case SpotifyAction.ShowSpotify: diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1ed4b741..3b0f95c4 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -53,6 +53,7 @@ public partial class Toast : Window private bool isUpdateToast; private bool dragging; + private bool paused; #endregion Private fields @@ -212,6 +213,7 @@ private void StartSpotifyOrAskUser() } catch (Exception e) { + Debug.WriteLine(e.StackTrace); MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); } } @@ -271,12 +273,17 @@ private void InitVersionChecker() #endregion Initialization + /// + /// Update current song's cover art url and toast's text. + /// Also, save track info to file, if settings say so. + /// + /// The song to set as current. private void UpdateCurrentSong(Song song) { this.currentSong = song; this.UpdateCoverArtUrl(); - this.UpdateToastText(this.currentSong.Artist, this.currentSong.Track); + this.UpdateToastText(this.currentSong); // Save track info to file. if (SettingsXml.Instance.SaveTrackToFile) @@ -298,6 +305,7 @@ private void UpdateCurrentSong(Song song) private void UpdateCoverArtUrl() { + // TODO: Get SpotifyLocalAPI Track's cover art url try { Spotify.Instance.SetCoverArt(this.currentSong); @@ -320,6 +328,40 @@ private void UpdateCoverArtUrl() this.toastIconURI = this.currentSong.CoverArtUrl; } + /// + /// Update the toast's text using the songs' information. + /// + /// The song. + /// + /// An alternative text to use as the first title. If not null, this causes the + /// song's information to be displayed on one line as the second title. + /// + /// Whether or not to start the toast fade-in animation. + /// Whether or no0t to force the toast to show up. + private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = true, bool force = false) + { + string title1, title2; + if (altTitle1 == null) + { + title1 = this.paused ? "Paused" : song.Artist; + title2 = this.paused ? song.ToString() : song.Track; + } + else + { + title1 = altTitle1; + title2 = song.ToString(); + } + this.UpdateToastText(title1, title2, fadeIn, force); + } + + /// + /// Update the toast's text using custom strings. + /// + /// First title. + /// Second title. + /// Whether or not to start the toast fade-in animation. + /// Whether or no0t to force the toast to show up. + /// Whethere or not this update is caused by . private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false, bool isUpdate = false) { this.Dispatcher.Invoke( @@ -437,14 +479,6 @@ private void ResetPositionIfOffScreen(Rectangle workingArea) public void DisplayAction(SpotifyAction action, Song trackBeforeAction) { - const string volumeUpText = "Volume ++"; - const string volumeDownText = "Volume --"; - const string muteOnOffText = "Mute On/Off"; - const string nothingsPlaying = "Nothing's playing"; - const string pausedText = "Paused"; - const string stoppedText = "Stopped"; - const string settingsText = "Settings saved"; - if (!Spotify.Instance.IsRunning && action != SpotifyAction.SettingsSaved) { this.toastIconURI = DEFAULT_ICON; @@ -452,72 +486,58 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) return; } - Song currentTrack = trackBeforeAction; - switch (action) { case SpotifyAction.PlayPause: - if (trackBeforeAction != null) - { - // We pressed pause. - this.UpdateToastText(pausedText, trackBeforeAction.ToString()); - } - this.currentSong = null; //If we presses play this will force a toast to display in next timer event. - break; - - case SpotifyAction.Stop: - this.currentSong = null; - this.UpdateToastText(stoppedText, trackBeforeAction.ToString()); + case SpotifyAction.NextTrack: + case SpotifyAction.PreviousTrack: + case SpotifyAction.ShowSpotify: break; case SpotifyAction.SettingsSaved: - this.UpdateToastText(settingsText, "Here is a preview of your settings!"); + this.UpdateToastText("Settings saved", "Here is a preview of your settings!"); break; - case SpotifyAction.NextTrack: - case SpotifyAction.PreviousTrack: + // TODO: Is Stop really possible on Spotify? + case SpotifyAction.Stop: + this.UpdateToastText(this.currentSong, "Stopped"); + this.currentSong = null; break; case SpotifyAction.VolumeUp: - this.UpdateToastText(volumeUpText, currentTrack.ToString()); + this.UpdateToastText(this.currentSong, "Volume ++"); break; case SpotifyAction.VolumeDown: - this.UpdateToastText(volumeDownText, currentTrack.ToString()); + this.UpdateToastText(this.currentSong, "Volume --"); break; case SpotifyAction.Mute: - this.UpdateToastText(muteOnOffText, currentTrack.ToString()); + this.UpdateToastText(this.currentSong, "Mute On/Off"); break; case SpotifyAction.ShowToast: - if (currentTrack == null || !currentTrack.IsValid()) + if (this.currentSong == null || !this.currentSong.IsValid()) { this.toastIconURI = DEFAULT_ICON; - this.UpdateToastText(nothingsPlaying, string.Empty, false); + this.UpdateToastText("Nothing's playing", string.Empty, false); } - else + else if (this.currentSong.IsValid()) { - if (currentTrack.IsValid()) - { - this.toastIconURI = currentTrack.CoverArtUrl; - this.UpdateToastText(currentTrack.Artist, currentTrack.Track, false); - } + this.toastIconURI = this.currentSong.CoverArtUrl; + this.UpdateToastText(this.currentSong, null, false); } this.FadeIn(true); break; - case SpotifyAction.ShowSpotify: - break; - case SpotifyAction.ThumbsUp: this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_up.png"; - this.UpdateToastText("Thumbs Up!", currentTrack.ToString()); + this.UpdateToastText(this.currentSong, "Thumbs Up!"); break; case SpotifyAction.ThumbsDown: this.toastIconURI = "pack://application:,,,/Toastify;component/Resources/thumbs_down.png"; - this.UpdateToastText("Thumbs Down: (", currentTrack.ToString()); + this.UpdateToastText(this.currentSong, "Thumbs Down!"); break; } } @@ -665,11 +685,18 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) #region Event handlers [Spotify] + /// + /// This event is received only once, at the start of the application. + /// Here, we set up the initial state of the toast based on the current state of Spotify. + /// + /// . + /// private void Spotify_Connected(object sender, SpotifyStateEventArgs e) { if (e.CurrentSong == null || !e.CurrentSong.IsValid()) return; + this.paused = !e.Playing; this.UpdateCurrentSong(e.CurrentSong); } @@ -683,7 +710,10 @@ private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArg private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEventArgs e) { - // TODO: PlayStateChanged + // Only fade-in if the play state change was triggered by a hotkey. + bool fadeIn = _lastHotkey.Action == SpotifyAction.PlayPause; + this.paused = !e.Playing; + this.UpdateToastText(this.currentSong, null, fadeIn); } private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEventArgs e) From 96f3f09f5d109cf42c6d46bfaca2cfa2214dc0f4 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 01:55:09 +0200 Subject: [PATCH 013/452] Toast doesn't fade out when pressing hotkeys while it is still visible --- Toastify/src/Core/SettingsXml.cs | 3 + Toastify/src/UI/Toast.xaml.cs | 101 +++++++++++++++++-------------- 2 files changed, 59 insertions(+), 45 deletions(-) diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 2bb9de6b..f6006dd2 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -191,6 +191,9 @@ public bool GlobalHotKeys } } + /// + /// Only show the toast when the `` hotkey is pressed. + /// public bool OnlyShowToastOnHotkey { get diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 3b0f95c4..53e31549 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -53,20 +53,13 @@ public partial class Toast : Window private bool isUpdateToast; private bool dragging; + private bool visible; private bool paused; #endregion Private fields internal List Plugins { get; set; } - public new Visibility Visibility - { -#pragma warning disable IDE0009 // Member access should be qualified. - get { return base.Visibility; } - set { base.Visibility = value; } -#pragma warning restore IDE0009 // Member access should be qualified. - } - #region Events public event EventHandler Started; @@ -328,6 +321,22 @@ private void UpdateCoverArtUrl() this.toastIconURI = this.currentSong.CoverArtUrl; } + private void UpdateCoverArt() + { + if (!string.IsNullOrEmpty(this.toastIconURI)) + { + this.Dispatcher.Invoke(DispatcherPriority.Normal, + new Action(() => + { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); + this.cover.EndInit(); + this.LogoToast.Source = this.cover; + })); + } + } + /// /// Update the toast's text using the songs' information. /// @@ -399,35 +408,36 @@ private void FadeIn(bool force = false, bool isUpdate = false) #endif } - if ((settings.DisableToast || settings.OnlyShowToastOnHotkey) && !force) + if (settings.DisableToast || (settings.OnlyShowToastOnHotkey && !force && !this.visible)) return; this.isUpdateToast = isUpdate; - - if (!string.IsNullOrEmpty(this.toastIconURI)) - { - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); - this.cover.EndInit(); - this.LogoToast.Source = this.cover; - } - this.WindowState = WindowState.Normal; + this.Topmost = true; - Rectangle workingArea = new Rectangle((int)this.Left, (int)this.Height, (int)this.ActualWidth, (int)this.ActualHeight); - workingArea = Screen.GetWorkingArea(workingArea); - + this.UpdateCoverArt(); this.Left = settings.PositionLeft; this.Top = settings.PositionTop; + this.ResetPositionIfOffScreen(); - this.ResetPositionIfOffScreen(workingArea); - - DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); - anim.Completed += (s, e) => { this.FadeOut(); }; - this.BeginAnimation(OpacityProperty, anim); - - this.Topmost = true; + if (!this.visible) + { + DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); + anim.Completed += (s, e) => + { + this.visible = true; + this.FadeOut(); + }; + this.BeginAnimation(OpacityProperty, anim); + } + else if (this.minimizeTimer != null) + { + // Reset the timer's Interval so that the toast does not fade out while pressing the hotkeys. + this.Opacity = 1.0; + this.minimizeTimer.Interval = SettingsXml.Instance.FadeOutTime; + this.minimizeTimer.Start(); + Debug.WriteLine($"Timer Interval reset to {this.minimizeTimer.Interval}."); + } } private void FadeOut(bool now = false) @@ -435,41 +445,38 @@ private void FadeOut(bool now = false) // 16 == one frame (0 is not a valid interval) var interval = now ? 16 : SettingsXml.Instance.FadeOutTime; - DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)) - { - BeginTime = TimeSpan.FromMilliseconds(interval) - }; - this.BeginAnimation(OpacityProperty, anim); - if (this.minimizeTimer == null) { this.minimizeTimer = new Timer { AutoReset = false }; - - this.minimizeTimer.Elapsed += (s, ev) => + this.minimizeTimer.Elapsed += (s, e) => { this.Dispatcher.Invoke(() => { - this.WindowState = WindowState.Minimized; - Debug.WriteLine("Minimized"); + DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); + anim.Completed += (ss, ee) => + { + this.visible = false; + this.WindowState = WindowState.Minimized; + Debug.WriteLine("Minimized"); + }; + this.BeginAnimation(OpacityProperty, anim); }); }; } - // extra buffer to avoid graphics corruption at the tail end of the fade - this.minimizeTimer.Interval = interval * 2; + this.minimizeTimer.Interval = interval; this.minimizeTimer.Stop(); this.minimizeTimer.Start(); } - private void ResetPositionIfOffScreen(Rectangle workingArea) + private void ResetPositionIfOffScreen() { var rect = new Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); if (!Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) { - // get the defaults, but don't save them (this allows the user to reconnect their screen and get their - // desired settings back) + // Get the defaults, but don't save them (this allows the user to reconnect their screen and get their desired settings back) var position = ScreenHelper.GetDefaultToastPosition(this.Width, this.Height); this.Left = position.X; @@ -544,10 +551,14 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { - // close Spotify first + // Close Spotify first. if (SettingsXml.Instance.CloseSpotifyWithToastify) Spotify.Instance.Kill(); + // Dispose the timer. + this.minimizeTimer?.Stop(); + this.minimizeTimer?.Dispose(); + // Ensure trayicon is removed on exit. (Thx Linus) this.trayIcon.Visible = false; this.trayIcon.Dispose(); From f3690d58ca6d0b1019e54b6065c1e0b1d7f6cef0 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 01:57:52 +0200 Subject: [PATCH 014/452] Toast fades out immediately if the ShowToast hotkey is pressed a second time --- Toastify/src/UI/Toast.xaml.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 53e31549..8b438e6a 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -534,7 +534,10 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) this.toastIconURI = this.currentSong.CoverArtUrl; this.UpdateToastText(this.currentSong, null, false); } - this.FadeIn(true); + if (!this.visible) + this.FadeIn(true); + else + this.FadeOut(true); break; case SpotifyAction.ThumbsUp: From 890256ea3b0764b3fc4e931f5c599e97ef4396c2 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 12:06:13 +0200 Subject: [PATCH 015/452] Use SpotifyLocalAPI's Track.GetAlbumArtUrl() to fetch the current song's cover art --- Toastify/src/Core/Song.cs | 12 ++++-- Toastify/src/Core/Spotify.cs | 80 ----------------------------------- Toastify/src/UI/Toast.xaml.cs | 50 ++++++++++++---------- 3 files changed, 35 insertions(+), 107 deletions(-) diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index cf51cdda..bc7d75d1 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -6,7 +6,7 @@ namespace Toastify.Core { public class Song { - private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size640, AlbumArtSize.Size320, AlbumArtSize.Size160 }; + private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size160, AlbumArtSize.Size640, AlbumArtSize.Size320 }; public string Artist { get; } public string Track { get; set; } @@ -64,11 +64,15 @@ public override int GetHashCode() public static implicit operator Song(Track spotifyTrack) { - string artist = spotifyTrack.ArtistResource.Name; - string title = spotifyTrack.TrackResource.Name; - string album = spotifyTrack.AlbumResource.Name; + if (spotifyTrack.IsAd()) + return new Song("", ""); + + string artist = spotifyTrack.ArtistResource?.Name; + string title = spotifyTrack.TrackResource?.Name; + string album = spotifyTrack.AlbumResource?.Name; string coverArtUrl = ""; + // Take the smallest image possible. foreach (var size in albumArtSizes) { coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 71fc163e..0a8c3b09 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -98,86 +98,6 @@ protected Spotify() this.localAPI.ListenForEvents = true; } - public void SetCoverArt(Song song) - { - // probably an ad, don't bother looking for an image - if (string.IsNullOrWhiteSpace(song.Track) || string.IsNullOrWhiteSpace(song.Artist)) - return; - - string imageUrl = null; - string spotifyTrackSearchURL = null; - var jsonResponse = string.Empty; - - try - { - // Spotify now has a full supported JSON-based web API that we can use to grab album art from tracks. Example URL: - // https://api.spotify.com/v1/search?query=track%3A%22Eagle%22+artist%3Aabba&offset=0&type=track - // - // Documentation: https://developer.spotify.com/web-api/migration-guide/ (great overview of functionality, even though it's a comparison guide) - - // temporary workaround for https://github.com/spotify/web-api/issues/191 - // essentially '/' is considered illegal, so we replace it with ' ' which generally returns the correct result - var artist = song.Artist.Replace('/', ' '); - var track = song.Track.Replace('/', ' '); - - spotifyTrackSearchURL = $"https://api.spotify.com/v1/search?q=track%3A%22{Uri.EscapeDataString(track)}%22+artist%3A%22{Uri.EscapeDataString(artist)}%22&type=track"; - - using (var wc = new WebClient()) - { - jsonResponse += wc.DownloadString(spotifyTrackSearchURL); - } - - dynamic spotifyTracks = JsonConvert.DeserializeObject(jsonResponse); - - // iterate through all of the images, finding the smallest ones. This is usually the last - // one, but there is no guarantee in the docs. - int smallestWidth = int.MaxValue; - - // TryGetValue doesn't seem to work, so we're doing this old school - if (spotifyTracks?.tracks?.items?.First?.album?.images != null) - { - foreach (dynamic image in spotifyTracks.tracks.items.First.album.images) - { - if (image.width < smallestWidth) - { - imageUrl = image.url; - smallestWidth = image.width; - } - } - } - } - catch (WebException e) - { - Debug.WriteLine($"Web Exception grabbing Spotify track art:\n{e}"); - - if (e.Response is HttpWebResponse response) - { - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, - $"URL: {spotifyTrackSearchURL} \nError Code: {response.StatusCode} Dump: {e}"); - } - else - { - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.NetworkError, - $"URL: {spotifyTrackSearchURL} \n[No Response] Dump: {e}"); - } - - throw; - } - catch (Exception e) - { - Debug.WriteLine("Exception grabbing Spotify track art:\n" + e); - - var jsonSubstring = jsonResponse.Substring(0, jsonResponse.Length > 100 ? 100 : jsonResponse.Length); - - Telemetry.TrackEvent(TelemetryCategory.SpotifyWebService, Telemetry.TelemetryEvent.SpotifyWebService.ResponseError, - $"URL: {spotifyTrackSearchURL} \nType: {e.GetType().Name} JSON excerpt: {jsonSubstring} dump: {e}"); - - throw; - } - - song.CoverArtUrl = imageUrl; - } - public void StartSpotify() { if (this.IsRunning) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 8b438e6a..97f5e314 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.IO; using System.Linq; +using System.Net.Cache; using System.Reflection; using System.Threading; using System.Windows; @@ -298,18 +299,6 @@ private void UpdateCurrentSong(Song song) private void UpdateCoverArtUrl() { - // TODO: Get SpotifyLocalAPI Track's cover art url - try - { - Spotify.Instance.SetCoverArt(this.currentSong); - } - catch - { - // Exceptions will be handled (for telemetry etc.) within SetCoverArt, but they will be rethrown - // so that we can set custom artwork here - this.currentSong.CoverArtUrl = ALBUM_ACCESS_DENIED_ICON; - } - if (string.IsNullOrWhiteSpace(this.currentSong.Track)) { this.currentSong.CoverArtUrl = AD_PLAYING_ICON; @@ -328,11 +317,30 @@ private void UpdateCoverArt() this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); - this.cover.EndInit(); - this.LogoToast.Source = this.cover; + try + { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); + this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); + this.cover.EndInit(); + } + catch (Exception e) + { + Debug.WriteLine(e.Message); + + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + this.cover.EndInit(); + } + finally + { + this.LogoToast.Source = this.cover; + } })); } } @@ -433,10 +441,10 @@ private void FadeIn(bool force = false, bool isUpdate = false) else if (this.minimizeTimer != null) { // Reset the timer's Interval so that the toast does not fade out while pressing the hotkeys. + this.BeginAnimation(OpacityProperty, null); this.Opacity = 1.0; this.minimizeTimer.Interval = SettingsXml.Instance.FadeOutTime; this.minimizeTimer.Start(); - Debug.WriteLine($"Timer Interval reset to {this.minimizeTimer.Interval}."); } } @@ -670,13 +678,9 @@ private void Window_MouseDown(object sender, MouseButtonEventArgs e) this.FadeOut(true); if (this.isUpdateToast) - { Process.Start(new ProcessStartInfo(this.versionChecker.UpdateUrl)); - } else - { Spotify.Instance.SendAction(SpotifyAction.ShowSpotify); - } } private void Window_MouseUp(object sender, MouseButtonEventArgs e) @@ -685,7 +689,7 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) { this.dragging = false; - // save the new window position + // Save the new window position SettingsXml settings = SettingsXml.Instance; settings.PositionLeft = this.Left; From bf79cf5480113ad2a15018e9b9fe91970a22f555 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 12:19:54 +0200 Subject: [PATCH 016/452] v1.9.0 --- InstallationScript/Install.nsi | 8 +++++--- Toastify/Properties/AssemblyInfo.cs | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 84f8c5f1..170ae1b6 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -65,15 +65,16 @@ Section "Toastify (required)" File "AutoHotkey.Interop.dll" File "Garlic.dll" File "Newtonsoft.Json.dll" + File "SpotifyAPI.dll" File "LICENSE" ; Write the uninstall keys for Windows WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayName" "Toastify" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.8.3" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.8.3" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.0" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.0" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" @@ -114,6 +115,7 @@ Section "Uninstall" Delete "$INSTDIR\AutoHotkey.Interop.dll" Delete "$INSTDIR\Garlic.dll" Delete "$INSTDIR\Newtonsoft.Json.dll" + Delete "$INSTDIR\SpotifyAPI.dll" Delete "$INSTDIR\LICENSE" ; remove the settings directory diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index 9aabdd96..5bb1b280 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -10,9 +10,9 @@ [assembly: AssemblyTitle("Toastify")] [assembly: AssemblyDescription("Toast for Spotify")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Jesper Palm")] +[assembly: AssemblyCompany("Jesper Palm, Oren Nachman, Alessandro Attard Barbini")] [assembly: AssemblyProduct("Toastify")] -[assembly: AssemblyCopyright("Copyright © 2009")] +[assembly: AssemblyCopyright("Copyright © 2009-2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.8.3.*")] +[assembly: AssemblyVersion("1.9.0.*")] From 1536a20f79382fe5d0030c2bb89d40bafc60f96d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 18:37:07 +0200 Subject: [PATCH 017/452] Removed unused parameter from DisplayAction --- Toastify/src/UI/Settings.xaml.cs | 2 +- Toastify/src/UI/Toast.xaml.cs | 32 +++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/UI/Settings.xaml.cs index 5e278c36..512f4b84 100644 --- a/Toastify/src/UI/Settings.xaml.cs +++ b/Toastify/src/UI/Settings.xaml.cs @@ -63,7 +63,7 @@ private void SaveAndApplySettings() this.settings.Save(true); this.toast.InitToast(); - this.toast.DisplayAction(SpotifyAction.SettingsSaved, null); + this.toast.DisplayAction(SpotifyAction.SettingsSaved); } /// diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 97f5e314..be1c9863 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -194,8 +194,8 @@ private void InitTrayIcon() this.trayIcon.ContextMenu.MenuItems.Add("-"); this.trayIcon.ContextMenu.MenuItems.Add(menuExit); - this.trayIcon.MouseClick += (s, ev) => { if (ev.Button == MouseButtons.Left) this.DisplayAction(SpotifyAction.ShowToast, null); }; - this.trayIcon.DoubleClick += (s, ev) => { Settings.Launch(this); }; + this.trayIcon.MouseClick += this.TrayIcon_MouseClick; + this.trayIcon.DoubleClick += this.TrayIcon_DoubleClick; } private void StartSpotifyOrAskUser() @@ -410,7 +410,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) #if DEBUG var rv = #endif - Win32API.SetThreadExecutionState(Win32API.ExecutionState.EsSystemRequired); + Win32API.SetThreadExecutionState(Win32API.ExecutionState.EsSystemRequired); #if DEBUG Debug.WriteLine("** SetThreadExecutionState returned: " + rv); #endif @@ -492,7 +492,7 @@ private void ResetPositionIfOffScreen() } } - public void DisplayAction(SpotifyAction action, Song trackBeforeAction) + public void DisplayAction(SpotifyAction action) { if (!Spotify.Instance.IsRunning && action != SpotifyAction.SettingsSaved) { @@ -510,6 +510,7 @@ public void DisplayAction(SpotifyAction action, Song trackBeforeAction) break; case SpotifyAction.SettingsSaved: + this.toastIconURI = DEFAULT_ICON; this.UpdateToastText("Settings saved", "Here is a preview of your settings!"); break; @@ -609,23 +610,21 @@ internal static void HotkeyActionCallback(Hotkey hotkey) try { - Song songBeforeAction = Current.currentSong; - - if (hotkey.Action == SpotifyAction.CopyTrackInfo && songBeforeAction != null) + if (hotkey.Action == SpotifyAction.CopyTrackInfo && Current.currentSong != null) { Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); - Clipboard.SetText(songBeforeAction.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + Clipboard.SetText(Current.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); } - else if (hotkey.Action == SpotifyAction.PasteTrackInfo && songBeforeAction != null) + else if (hotkey.Action == SpotifyAction.PasteTrackInfo && Current.currentSong != null) { Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); - Clipboard.SetText(songBeforeAction.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + Clipboard.SetText(Current.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); Win32API.SendPasteKey(); } else Spotify.Instance.SendAction(hotkey.Action); - Current.DisplayAction(hotkey.Action, songBeforeAction); + Current.DisplayAction(hotkey.Action); } catch (Exception ex) { @@ -748,6 +747,17 @@ private void Toast_Deactivated(object sender, EventArgs e) this.Topmost = true; } + private void TrayIcon_MouseClick(object s, System.Windows.Forms.MouseEventArgs ev) + { + if (ev.Button == MouseButtons.Left) + this.DisplayAction(SpotifyAction.ShowToast); + } + + private void TrayIcon_DoubleClick(object s, EventArgs ev) + { + Settings.Launch(this); + } + private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) { if (!e.New) From 3308d33f8fee0d76e75fc71e56532bee1ead3547 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 4 Jun 2017 18:56:27 +0200 Subject: [PATCH 018/452] Added some installation files to .gitignore --- .gitignore | 16 ++++++++++------ Toastify/Toastify.csproj | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 8f505ef0..62ed83a8 100644 --- a/.gitignore +++ b/.gitignore @@ -180,13 +180,17 @@ UpgradeLog*.htm *.bim_*.settings *.user -InstallationScript/Toastify.exe.config -InstallationScript/Toastify.vshost.exe.config -InstallationScript/Toastify.vshost.exe -InstallationScript/app.publish/Toastify.exe +InstallationScript/*.exe* +InstallationScript/*/*.exe* +InstallationScript/AutoHotkey.Interop.dll InstallationScript/Garlic.dll InstallationScript/ManagedWinapi.dll -InstallationScript/Newtonsoft.Json.xml +InstallationScript/Newtonsoft.Json.dll InstallationScript/Resources/ManagedWinapiNativeHelper.dll -InstallationScript/*.exe +InstallationScript/ToastifyApi.dll +InstallationScript/SpotifyAPI.dll +InstallationScript/Newtonsoft.Json.xml +InstallationScript/SpotifyAPI.xml InstallationScript/Toastify.vshost.application +InstallationScript/Toastify.application +InstallationScript/LICENSE diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index e2420e7c..8fac560a 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -92,7 +92,7 @@ false - bin\x64\Release\ + ..\InstallationScript\ TRACE true pdbonly From 2db25bca7e1d6dbe9a36531ae9a188cbbeead17a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 6 Jun 2017 16:36:59 +0200 Subject: [PATCH 019/452] .NET Framework v4.5.2 --- AutoHotkey.Interop/AutoHotkey.Interop.csproj | 8 ++++++-- ExamplePlugin/ExamplePlugin.csproj | 11 ++++++++--- InstallationScript/Install.nsi | 8 ++++++-- PluginBase/PluginBase.csproj | 11 ++++++++--- Toastify/Properties/Resources.resx | 6 +++--- Toastify/Toastify.csproj | 10 +++++----- Toastify/app.config | 4 ++-- 7 files changed, 38 insertions(+), 20 deletions(-) diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj b/AutoHotkey.Interop/AutoHotkey.Interop.csproj index 0c6dc100..a6709e72 100644 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj +++ b/AutoHotkey.Interop/AutoHotkey.Interop.csproj @@ -9,7 +9,7 @@ Properties AutoHotkey.Interop AutoHotkey.Interop - v4.0 + v4.5.2 512 SAK SAK @@ -26,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -35,6 +36,7 @@ TRACE prompt 4 + false @@ -47,15 +49,17 @@ x64 prompt MinimumRecommendedRules.ruleset + false bin\x64\Release\ TRACE true - pdbonly + none x64 prompt MinimumRecommendedRules.ruleset + false diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index 33d2e4e9..29e20416 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ExamplePlugin ExamplePlugin - v3.5 + v4.5.2 512 @@ -35,6 +35,7 @@ SAK SAK SAK + true @@ -45,6 +46,7 @@ prompt 4 AllRules.ruleset + false pdbonly @@ -54,6 +56,7 @@ prompt 4 AllRules.ruleset + false true @@ -63,15 +66,17 @@ x64 prompt AllRules.ruleset + false bin\x64\Release\ TRACE true - pdbonly + none x64 prompt AllRules.ruleset + false diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 170ae1b6..ba71e145 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -1,7 +1,8 @@ !include "DotNET.nsh" !include LogicLib.nsh -!define DOTNET_VERSION "3.5" +!define DOTNET_VERSION "4.5.2" !include "MUI.nsh" +!include x64.nsh ; The name of the installer Name "Toastify Installer" @@ -10,7 +11,7 @@ Name "Toastify Installer" OutFile "ToastifyInstaller.exe" ; The default installation directory -InstallDir $PROGRAMFILES\Toastify +InstallDir $PROGRAMFILES64\Toastify ; Request application privileges for Windows Vista RequestExecutionLevel admin @@ -59,6 +60,7 @@ Section "Toastify (required)" ; Put file there File "Toastify.exe" + File "Toastify.exe.config" File "ToastifyApi.dll" File "ManagedWinapi.dll" File "Resources\ManagedWinapiNativeHelper.dll" @@ -109,6 +111,7 @@ Section "Uninstall" ; Remove files and uninstaller Delete "$INSTDIR\Toastify.exe" + Delete "$INSTDIR\Toastify.config" Delete "$INSTDIR\ToastifyApi.dll" Delete "$INSTDIR\ManagedWinapi.dll" Delete "$INSTDIR\ManagedWinapiNativeHelper.dll" @@ -117,6 +120,7 @@ Section "Uninstall" Delete "$INSTDIR\Newtonsoft.Json.dll" Delete "$INSTDIR\SpotifyAPI.dll" Delete "$INSTDIR\LICENSE" + Delete "$INSTDIR\uninstall.exe" ; remove the settings directory Delete "$APPDATA\Toastify.xml" diff --git a/PluginBase/PluginBase.csproj b/PluginBase/PluginBase.csproj index c3d5a2a3..22b6116f 100644 --- a/PluginBase/PluginBase.csproj +++ b/PluginBase/PluginBase.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties PluginBase ToastifyApi - v3.5 + v4.5.2 512 @@ -35,6 +35,7 @@ SAK SAK SAK + true @@ -45,6 +46,7 @@ prompt 4 AllRules.ruleset + false pdbonly @@ -54,6 +56,7 @@ prompt 4 AllRules.ruleset + false true @@ -63,15 +66,17 @@ x64 prompt AllRules.ruleset + false bin\x64\Release\ TRACE true - pdbonly + none x64 prompt AllRules.ruleset + false diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index c6aa3092..3d2e02a7 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ..\Resources\spotify.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 8fac560a..2a72f404 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties Toastify Toastify - v4.5 + v4.5.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -95,11 +95,12 @@ ..\InstallationScript\ TRACE true - pdbonly + none x64 prompt AllRules.ruleset false + 4 @@ -108,7 +109,6 @@ .\ManagedWinapi.dll - ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll @@ -216,10 +216,10 @@ ResXFileCodeGenerator Resources.Designer.cs - Always + SettingsSingleFileGenerator diff --git a/Toastify/app.config b/Toastify/app.config index c604505b..06a15b2b 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,6 +1,6 @@ - + - + From 6d2df441f03ef79b1bc1907abc5ecfc49c182f49 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 6 Jun 2017 17:22:48 +0200 Subject: [PATCH 020/452] Changed version check url --- Toastify/Toastify.csproj | 1 + Toastify/src/Services/VersionChecker.cs | 14 ++++++++------ Toastify/src/UI/About.xaml | 10 +++++----- Toastify/src/UI/About.xaml.cs | 8 ++++---- Toastify/src/UI/Toast.xaml.cs | 2 +- Toastify/version | 1 + 6 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 Toastify/version diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 2a72f404..1495088f 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -270,6 +270,7 @@ + diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 05d27bbb..45d8e489 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -12,7 +12,7 @@ internal class VersionChecker { private static string _version; - public static string Version + public static string CurrentVersion { get { @@ -36,9 +36,9 @@ public static string Version } } - public string UpdateUrl { get { return "https://toastify.codeplex.com/releases/view/24273"; } } + public string UpdateUrl { get { return "https://github.com/aleab/toastify/releases"; } } - public string VersionUrl { get { return "http://toastify.codeplex.com/wikipage?title=Version"; } } + public string VersionUrl { get { return "https://raw.githubusercontent.com/aleab/toastify/master/Toastify/version"; } } private readonly WebClient wc; @@ -69,12 +69,14 @@ private void WebClient_DownloadStringCompleted(object sender, DownloadStringComp if (!e.Cancelled && e.Error == null) { - var match = Regex.Match(e.Result, "Version: (?[\\d+\\.]+)", RegexOptions.IgnoreCase | RegexOptions.Singleline); + var match = Regex.Match(e.Result, "(\\d+\\.?)+", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (match.Success) { - version = match.Groups["ver"].Value.Trim(); - newVersion = Version != version; + version = match.Value; + Version localV = new Version(CurrentVersion); + Version remoteV = new Version(version); + newVersion = localV.CompareTo(remoteV) < 0; } } diff --git a/Toastify/src/UI/About.xaml b/Toastify/src/UI/About.xaml index 11d58d09..ef14e4b5 100644 --- a/Toastify/src/UI/About.xaml +++ b/Toastify/src/UI/About.xaml @@ -41,22 +41,22 @@ Toastify - - + - toastify.codeplex.com + github.com/aleab/toastify - Checking for updates... - Credits to: Linus, Maaaackan, Aqualize, ncahmore... + Checking for updates... + Credits to: Linus, Maaaackan, Aqualize, ncahmore, aleab... Created by Jesper Palm 2009, licensed under GPLv2. diff --git a/Toastify/src/UI/About.xaml.cs b/Toastify/src/UI/About.xaml.cs index 37c590ea..fee57ed1 100644 --- a/Toastify/src/UI/About.xaml.cs +++ b/Toastify/src/UI/About.xaml.cs @@ -38,17 +38,17 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp else latestVersionText = "You have the latest version."; - this.Dispatcher.Invoke(new Action(() => + this.Dispatcher.Invoke(() => { Run run = new Run(latestVersionText); this.LatestVersion.Inlines.Clear(); this.LatestVersion.Inlines.Add(run); - }), System.Windows.Threading.DispatcherPriority.Normal); + }, System.Windows.Threading.DispatcherPriority.Normal); } - private void CodeplexLink_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + private void Link_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { - Process.Start("http://toastify.codeplex.com"); + Process.Start("https://github.com/aleab/toastify"); } private void Border_MouseUp(object sender, MouseButtonEventArgs e) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index be1c9863..95efc69f 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -118,7 +118,7 @@ private void LoadSettings() SettingsXml.Instance.Default(true); } - string version = VersionChecker.Version; + string version = VersionChecker.CurrentVersion; Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); diff --git a/Toastify/version b/Toastify/version new file mode 100644 index 00000000..79041ca2 --- /dev/null +++ b/Toastify/version @@ -0,0 +1 @@ +1.9.0 \ No newline at end of file From 626a48e55968fc824d61fa6f9b1ec87dd3197f34 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 17 Jun 2017 15:33:27 +0200 Subject: [PATCH 021/452] Check play state on track change as well --- Toastify/src/Core/Spotify.cs | 2 +- Toastify/src/Events/SpotifyTrackChangedEventArgs.cs | 4 +++- Toastify/src/UI/Toast.xaml.cs | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 0a8c3b09..e4c7aaf6 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -295,7 +295,7 @@ public void Dispose() private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e) { this.CurrentSong = e.NewTrack; - this.SongChanged?.Invoke(this, new SpotifyTrackChangedEventArgs(e.OldTrack, this.CurrentSong)); + this.SongChanged?.Invoke(this, new SpotifyTrackChangedEventArgs(e.OldTrack, this.CurrentSong, this.localAPI.GetStatus().Playing)); } private void SpotifyLocalAPI_OnPlayStateChange(object sender, PlayStateEventArgs e) diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs index d035e403..68efc66f 100644 --- a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -6,11 +6,13 @@ internal class SpotifyTrackChangedEventArgs : EventArgs { public Song PreviousSong { get; } public Song NewSong { get; } + public bool Playing { get; } - public SpotifyTrackChangedEventArgs(Song previousSong, Song newSong) + public SpotifyTrackChangedEventArgs(Song previousSong, Song newSong, bool playing) { this.PreviousSong = previousSong; this.NewSong = newSong; + this.Playing = playing; } public static implicit operator Plugin.SpotifyTrackChangedEventArgs(SpotifyTrackChangedEventArgs e) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 95efc69f..1e434a0d 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -722,6 +722,7 @@ private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArg if (e.NewSong == null || !e.NewSong.IsValid()) return; + this.paused = !e.Playing; this.UpdateCurrentSong(e.NewSong); } From 34d84e8c2bca8c4e8e87482f575d11a25c5549a9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 17 Jun 2017 16:13:27 +0200 Subject: [PATCH 022/452] Don't show the toast if any app is running in fullscreen (e.g. a videogame) --- Toastify/src/Core/Spotify.cs | 2 - Toastify/src/UI/Toast.xaml.cs | 29 +++++--- Toastify/src/Win32API.cs | 126 +++++++++++++++++++++++----------- 3 files changed, 104 insertions(+), 53 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index e4c7aaf6..b2ed3f00 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,11 +1,9 @@ using AutoHotkey.Interop; using Microsoft.Win32; -using Newtonsoft.Json; using SpotifyAPI.Local; using System; using System.Diagnostics; using System.IO; -using System.Net; using System.Threading; using Toastify.Events; using Toastify.Helpers; diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1e434a0d..6c98dc8e 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -8,6 +8,7 @@ using System.Net.Cache; using System.Reflection; using System.Threading; +using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; using System.Windows.Input; @@ -394,6 +395,10 @@ private void UpdateToastText(string title1, string title2 = "", bool fadeIn = tr private void FadeIn(bool force = false, bool isUpdate = false) { + // If a full screen application is running (e.g. a videogame), do not fade in. + if (Win32API.IsAnyAppRunningInFullscreen()) + return; + this.minimizeTimer?.Stop(); if (this.dragging) @@ -458,17 +463,21 @@ private void FadeOut(bool now = false) this.minimizeTimer = new Timer { AutoReset = false }; this.minimizeTimer.Elapsed += (s, e) => { - this.Dispatcher.Invoke(() => + try { - DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); - anim.Completed += (ss, ee) => + this.Dispatcher.Invoke(() => { - this.visible = false; - this.WindowState = WindowState.Minimized; - Debug.WriteLine("Minimized"); - }; - this.BeginAnimation(OpacityProperty, anim); - }); + DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); + anim.Completed += (ss, ee) => + { + this.visible = false; + this.WindowState = WindowState.Minimized; + Debug.WriteLine("Minimized"); + }; + this.BeginAnimation(OpacityProperty, anim); + }); + } + catch (TaskCanceledException) { } }; } @@ -729,7 +738,7 @@ private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArg private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEventArgs e) { // Only fade-in if the play state change was triggered by a hotkey. - bool fadeIn = _lastHotkey.Action == SpotifyAction.PlayPause; + bool fadeIn = _lastHotkey?.Action == SpotifyAction.PlayPause; this.paused = !e.Playing; this.UpdateToastText(this.currentSong, null, fadeIn); } diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index aaeaa6e7..527cb65c 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -14,40 +14,55 @@ namespace Toastify [SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")] internal class Win32API { + private static readonly IntPtr desktopHandle = GetDesktopWindow(); + private static readonly IntPtr shellHandle = GetShellWindow(); + internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); #region DLL imports + [DllImport("user32.dll")] + internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); + [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] - internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); + internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); - [DllImport("user32.dll", CharSet = CharSet.Auto)] - internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern int GetWindowTextLength(IntPtr hWnd); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] - internal static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll")] - internal static extern IntPtr SetFocus(IntPtr hWnd); + private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] + private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] + private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); [DllImport("user32.dll")] - internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + internal static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] internal static extern bool SetForegroundWindow(IntPtr hWnd); + [DllImport("user32.dll")] + private static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + private static extern IntPtr GetShellWindow(); + + [DllImport("user32.dll", SetLastError = true)] + private static extern int GetWindowRect(IntPtr hwnd, out Rect rc); + [DllImport("user32.dll")] internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl); @@ -55,13 +70,13 @@ internal class Win32API internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); [DllImport("user32.dll")] - private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); + internal static extern IntPtr SetFocus(IntPtr hWnd); - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] - private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + [DllImport("user32.dll", CharSet = CharSet.Auto)] + internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] - private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + internal static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", EntryPoint = "SetLastError")] public static extern void SetLastError(int dwErrorCode); @@ -71,6 +86,33 @@ internal class Win32API #endregion DLL imports + private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) + { + int error; + IntPtr result; + // Win32API SetWindowLong doesn't clear error on success + SetLastError(0); + + if (IntPtr.Size == 4) + { + // use SetWindowLong + Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); + error = Marshal.GetLastWin32Error(); + result = new IntPtr(tempResult); + } + else + { + // use SetWindowLongPtr + result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); + error = Marshal.GetLastWin32Error(); + } + + if (result == IntPtr.Zero && error != 0) + throw new System.ComponentModel.Win32Exception(error); + + return result; + } + public static void KillProc(string name) { // let's play nice and try to gracefully clear out all Sync processes @@ -114,33 +156,6 @@ public static void KillProc(string name) } } - private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) - { - int error; - IntPtr result; - // Win32API SetWindowLong doesn't clear error on success - SetLastError(0); - - if (IntPtr.Size == 4) - { - // use SetWindowLong - Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); - error = Marshal.GetLastWin32Error(); - result = new IntPtr(tempResult); - } - else - { - // use SetWindowLongPtr - result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); - error = Marshal.GetLastWin32Error(); - } - - if (result == IntPtr.Zero && error != 0) - throw new System.ComponentModel.Win32Exception(error); - - return result; - } - private static int IntPtrToInt32(IntPtr intPtr) { return unchecked((int)intPtr.ToInt64()); @@ -154,6 +169,26 @@ public static void AddToolWindowStyle(System.Windows.Window window) SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); } + public static bool IsAnyAppRunningInFullscreen() + { + // Get the dimensions of the active window. + IntPtr hWnd = GetForegroundWindow(); + if (!hWnd.Equals(IntPtr.Zero)) + { + // Check we haven't picked up the desktop or the shell. + if (!hWnd.Equals(desktopHandle) && !hWnd.Equals(shellHandle)) + { + GetWindowRect(hWnd, out Rect appBounds); + + // Determine if window is fullscreen. + Rectangle screenBounds = Screen.FromHandle(hWnd).Bounds; + if (appBounds.bottom - appBounds.top == screenBounds.Height && appBounds.right - appBounds.left == screenBounds.Width) + return true; + } + } + return false; + } + public static void SendPasteKey() { var shiftKey = new ManagedWinapi.KeyboardKey(Keys.ShiftKey); @@ -312,6 +347,15 @@ internal class Constants internal const int WM_QUIT = 0x12; } + [StructLayout(LayoutKind.Sequential)] + internal struct Rect + { + public int left; + public int top; + public int right; + public int bottom; + } + #endregion Internal classes and structs } } \ No newline at end of file From 2be159abeca76118feb28a32c8fc23bc30de1c85 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 20 Jun 2017 19:15:38 +0200 Subject: [PATCH 023/452] Corrected album art sizes order --- Toastify/src/Core/Song.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index bc7d75d1..7f6132d9 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -6,7 +6,7 @@ namespace Toastify.Core { public class Song { - private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size160, AlbumArtSize.Size640, AlbumArtSize.Size320 }; + private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size160, AlbumArtSize.Size320, AlbumArtSize.Size640 }; public string Artist { get; } public string Track { get; set; } From 42900c7e36d2a14ac4c2890d92877f9745b954d1 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 22 Jun 2017 18:52:27 +0200 Subject: [PATCH 024/452] Updated dependencies --- Toastify/Toastify.csproj | 4 ++-- Toastify/app.config | 4 ++-- Toastify/packages.config | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 1495088f..7420aeef 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -110,10 +110,10 @@ .\ManagedWinapi.dll - ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\packages\SpotifyAPI-NET.2.14.1\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.14.2\lib\SpotifyAPI.dll diff --git a/Toastify/app.config b/Toastify/app.config index 06a15b2b..2ae7c6d9 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,6 +1,6 @@ - + - + diff --git a/Toastify/packages.config b/Toastify/packages.config index 584c5471..933f7ceb 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,6 +1,6 @@  - - + + \ No newline at end of file From 4bc0ec1e6cb82f17fc6759fd3279ca070102c03d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 22 Jun 2017 18:54:42 +0200 Subject: [PATCH 025/452] v1.9.1 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index ba71e145..e8ce48cd 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -75,8 +75,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.0" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.0" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.1" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index 5bb1b280..d3c0d128 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.0.*")] +[assembly: AssemblyVersion("1.9.1.*")] diff --git a/Toastify/version b/Toastify/version index 79041ca2..ac8947ae 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.0 \ No newline at end of file +1.9.1 \ No newline at end of file From 79e9dd65ba6e318c86fb4119dfbfa59c4be3363f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 25 Jun 2017 16:46:14 +0200 Subject: [PATCH 026/452] Fixed some things in the Settings window layout --- Toastify/src/UI/Settings.xaml | 112 +++++++++++++++++----------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index ed5a9b2a..501b8a6e 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:core="clr-namespace:Toastify.Core" mc:Ignorable="d" - Title="Toastify - Settings" Height="542" Width="568" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> + Title="Toastify - Settings" Height="552" Width="568" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> @@ -30,13 +30,13 @@ Height="16" Width="319" Grid.ColumnSpan="2" Grid.Column="0">When changing volume, change volume only for Spotify - - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - + Save Artist and Album to file when song changes (uses the clipboard template) - + Do not collect anonymous usage data Data is never shared, is anonymous, and is used to inform future features @@ -93,63 +93,63 @@ - Disable Toast + Disable Toast - Only Show Toast when Hotkey is pressed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. - - - - - - - - - + Only Show Toast when Hotkey is pressed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. + + + + + + + + + - - + + From c103940c842e49d486cec1788c915bf1318f396f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 25 Jun 2017 17:18:02 +0200 Subject: [PATCH 027/452] Check if toast's and Spotify's current songs match on PlayStateChanged --- Toastify/src/Core/Song.cs | 11 +++++++++++ Toastify/src/Core/Spotify.cs | 2 +- .../src/Events/SpotifyPlayStateChangedEventArgs.cs | 5 ++++- Toastify/src/UI/Toast.xaml.cs | 13 ++++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index 7f6132d9..b2892795 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -82,5 +82,16 @@ public static implicit operator Song(Track spotifyTrack) return new Song(artist, title, album) { CoverArtUrl = coverArtUrl }; } + + public static bool Equal(Song s1, Song s2) + { + if (ReferenceEquals(s1, s2)) + return true; + + if (s1 == null || s2 == null) + return false; + + return s1.Equals(s2); + } } } \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index b2ed3f00..009b57f3 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -298,7 +298,7 @@ private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e private void SpotifyLocalAPI_OnPlayStateChange(object sender, PlayStateEventArgs e) { - this.PlayStateChanged?.Invoke(this, new SpotifyPlayStateChangedEventArgs(e.Playing)); + this.PlayStateChanged?.Invoke(this, new SpotifyPlayStateChangedEventArgs(e.Playing, this.localAPI.GetStatus().Track)); } private void SpotifyLocalAPI_OnTrackTimeChange(object sender, TrackTimeChangeEventArgs e) diff --git a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs index ebd7e9bb..c3be84f7 100644 --- a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs @@ -1,14 +1,17 @@ using System; +using Toastify.Core; namespace Toastify.Events { public class SpotifyPlayStateChangedEventArgs : EventArgs { public bool Playing { get; } + public Song CurrentSong { get; } - public SpotifyPlayStateChangedEventArgs(bool playing) + public SpotifyPlayStateChangedEventArgs(bool playing, Song currentSong) { this.Playing = playing; + this.CurrentSong = currentSong; } } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 6c98dc8e..316838d8 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -737,10 +737,17 @@ private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArg private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEventArgs e) { - // Only fade-in if the play state change was triggered by a hotkey. - bool fadeIn = _lastHotkey?.Action == SpotifyAction.PlayPause; this.paused = !e.Playing; - this.UpdateToastText(this.currentSong, null, fadeIn); + + // If toast's and Spotify's current songs do not match, then fix toast's current song. + if (!Song.Equal(this.currentSong, e.CurrentSong)) + this.UpdateCurrentSong(e.CurrentSong); + else + { + // Only fade-in if the play state change was triggered by a hotkey. + bool fadeIn = _lastHotkey?.Action == SpotifyAction.PlayPause; + this.UpdateToastText(this.currentSong, null, fadeIn); + } } private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEventArgs e) From fe83fb40894880c6e6891bd2439878721cbe24a5 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 29 Jun 2017 04:27:50 +0200 Subject: [PATCH 028/452] Support Spotify Music app from Windows Store --- .gitignore | 3 + Toastify.sln | 74 +++++------ Toastify/Toastify.csproj | 148 +++++++++++----------- Toastify/app.manifest | 65 ++++++++++ Toastify/post-build.cmd | 20 +++ Toastify/src/Core/Spotify.cs | 28 +++- Toastify/src/Win32API.cs | 15 ++- packages/Windows/10.0.14393/Windows.winmd | Bin 0 -> 4706816 bytes 8 files changed, 240 insertions(+), 113 deletions(-) create mode 100644 Toastify/app.manifest create mode 100644 Toastify/post-build.cmd create mode 100644 packages/Windows/10.0.14393/Windows.winmd diff --git a/.gitignore b/.gitignore index 62ed83a8..d63852d6 100644 --- a/.gitignore +++ b/.gitignore @@ -194,3 +194,6 @@ InstallationScript/SpotifyAPI.xml InstallationScript/Toastify.vshost.application InstallationScript/Toastify.application InstallationScript/LICENSE + +# Exclude a few packages +!**/packages/Windows/* diff --git a/Toastify.sln b/Toastify.sln index b6075b17..406919ba 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.12 +VisualStudioVersion = 15.0.26430.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugin", "Plugin", "{64E51A59-02A2-4423-8DE1-F337D479E3B7}" EndProject @@ -21,44 +21,44 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoHotkey.Interop", "AutoH EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 + Windows (Debug)|Any CPU = Windows (Debug)|Any CPU + Windows (Debug)|x64 = Windows (Debug)|x64 + Windows (Release)|Any CPU = Windows (Release)|Any CPU + Windows (Release)|x64 = Windows (Release)|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|x64.ActiveCfg = Debug|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Debug|x64.Build.0 = Debug|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|Any CPU.Build.0 = Release|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|x64.ActiveCfg = Release|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Release|x64.Build.0 = Release|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|x64.ActiveCfg = Debug|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Debug|x64.Build.0 = Debug|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|Any CPU.Build.0 = Release|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|x64.ActiveCfg = Release|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Release|x64.Build.0 = Release|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|x64.ActiveCfg = Debug|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Debug|x64.Build.0 = Debug|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|Any CPU.Build.0 = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|x64.ActiveCfg = Release|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Release|x64.Build.0 = Release|x64 - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|x64.ActiveCfg = Debug|x64 - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Debug|x64.Build.0 = Debug|x64 - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Release|Any CPU.Build.0 = Release|Any CPU - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Release|x64.ActiveCfg = Release|x64 - {2869DBFE-7762-4930-95EA-2B0C111CF353}.Release|x64.Build.0 = Release|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|x64.ActiveCfg = Windows (Debug)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|x64.Build.0 = Windows (Debug)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.ActiveCfg = Windows (Release)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|x64.ActiveCfg = Debug|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|x64.Build.0 = Debug|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|x64.ActiveCfg = Release|x64 + {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|x64.Build.0 = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.ActiveCfg = Debug|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.Build.0 = Debug|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|x64.ActiveCfg = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|x64.Build.0 = Release|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|x64.ActiveCfg = Debug|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|x64.Build.0 = Debug|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|x64.ActiveCfg = Release|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 7420aeef..59fc9b01 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -1,8 +1,8 @@  - Debug - AnyCPU + Windows (Debug) + x64 9.0.30729 2.0 {CCC4A761-56D2-4188-807F-F7A547DFB031} @@ -21,8 +21,6 @@ 3.5 true - - SAK SAK SAK @@ -46,62 +44,76 @@ true true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - AllRules.ruleset - false - - - pdbonly - true - ..\InstallationScript\ - TRACE - prompt - 4 - AllRules.ruleset - false - D38DAF47B3CBFC190231922089F056B55D662088 - - Toastify_TemporaryKey.pfx - - true - - false - + + true + bin\Debug\Windows\ + DEBUG;TRACE + full + AnyCPU + false + prompt + AllRules.ruleset + + true - bin\x64\Debug\ + bin\x64\Debug\Windows\ DEBUG;TRACE full x64 false prompt AllRules.ruleset - false - - ..\InstallationScript\ + + bin\Release\Windows\ + TRACE + true + pdbonly + AnyCPU + prompt + AllRules.ruleset + + + bin\x64\Release\Windows\ TRACE true - none x64 prompt AllRules.ruleset - false - 4 + + app.manifest + + + + + + + + + ..\packages\Windows\10.0.14393\Windows.winmd + False + + + + + False + Exclude + True + Assembly + + + + ..\packages\Garlic.2.1.0.0\lib\net35\Garlic.dll @@ -116,27 +128,17 @@ ..\packages\SpotifyAPI-NET.2.14.2\lib\SpotifyAPI.dll - - 3.5 - + - - 3.0 - - - 3.0 - - - 3.0 - - - 3.0 - + + + + @@ -220,6 +222,7 @@ Always + SettingsSingleFileGenerator @@ -227,15 +230,6 @@ - - - - - - - - - {2869dbfe-7762-4930-95ea-2b0c111cf353} @@ -264,27 +258,37 @@ + + + - - - - - + + Always - + + + + False + Exclude + True + + + + + Assembly + - - + "$(ProjectDir)post-build.cmd" "$(ConfigurationName)" "$(DevEnvDir)" "$(SolutionDir)" "$(TargetDir)" "$(TargetFileName)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Toastify/post-build.cmd b/Toastify/post-build.cmd new file mode 100644 index 00000000..754ef46d --- /dev/null +++ b/Toastify/post-build.cmd @@ -0,0 +1,20 @@ +@ECHO OFF + +SET ConfigurationName=%~1 +SET DevEnvDir=%~2 +SET SolutionDir=%~3 +SET TargetDir=%~4 +SET TargetFileName=%~5 + +IF "%ConfigurationName:~0,7%"=="Windows" ( + ECHO - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" + CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" + + ECHO - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" + mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" + DEL "%TargetDir%%TargetFileName%.manifest" + + ECHO - Copy install script + COPY /Y "%SolutionDir%InstallationScript\Install.nsi" "%TargetDir%Install.nsi" + COPY /Y "%SolutionDir%InstallationScript\DotNET.nsh" "%TargetDir%DotNET.nsh" +) \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 009b57f3..1fd0cda2 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -5,9 +5,11 @@ using System.Diagnostics; using System.IO; using System.Threading; +using System.Windows; using Toastify.Events; using Toastify.Helpers; using Toastify.Services; +using Windows.ApplicationModel; namespace Toastify.Core { @@ -106,8 +108,7 @@ public void StartSpotify() } // Launch Spotify. - var spotifyFilePath = Path.Combine(this.spotifyPath, "spotify.exe"); - this.spotifyProcess = Process.Start(spotifyFilePath); + this.spotifyProcess = Process.Start(this.spotifyPath); if (SettingsXml.Instance.MinimizeSpotifyOnStartup) this.Minimize(); @@ -277,8 +278,29 @@ private string GetSpotifyPath() if (string.IsNullOrEmpty(spotifyPath)) spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + // If it's still null, then search for the UWP app (Windows 10 only). + if (string.IsNullOrEmpty(spotifyPath) && + Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 10) + { + Package spotifyPackage = null; + try + { + spotifyPackage = Win32API.UWP.FindPackage("SpotifyAB.SpotifyMusic"); + } + catch (UnauthorizedAccessException) + { + MessageBox.Show("This program must be run as administrator.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + Environment.Exit(69); + } + + if (spotifyPackage != null) + spotifyPath = $@"shell:AppsFolder\{spotifyPackage.Id.FamilyName}!Spotify"; + } + else if (!string.IsNullOrEmpty(spotifyPath)) + spotifyPath = Path.Combine(spotifyPath, "Spotify.exe"); + if (string.IsNullOrEmpty(spotifyPath)) - throw new ArgumentException("Could not find spotify path in registry"); + throw new ArgumentException("Could not find spotify path."); return spotifyPath; } diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 527cb65c..23a2e2ae 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -2,17 +2,20 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using System.Windows.Interop; +using Windows.ApplicationModel; +using Windows.Management.Deployment; namespace Toastify { [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] [SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")] - internal class Win32API + internal static class Win32API { private static readonly IntPtr desktopHandle = GetDesktopWindow(); private static readonly IntPtr shellHandle = GetShellWindow(); @@ -357,5 +360,15 @@ internal struct Rect } #endregion Internal classes and structs + + internal static class UWP + { + public static Package FindPackage(string name) + { + PackageManager packageManager = new PackageManager(); + var packages = packageManager.FindPackages(); + return packages.FirstOrDefault(package => package.Id.Name == name); + } + } } } \ No newline at end of file diff --git a/packages/Windows/10.0.14393/Windows.winmd b/packages/Windows/10.0.14393/Windows.winmd new file mode 100644 index 0000000000000000000000000000000000000000..27609c4e7d9626179d3453500b156439cd72ab5c GIT binary patch literal 4706816 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 z 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ℑ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

fvNTc~|7 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 kbF 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�Wl$KXZ<={2)T(m$w*^d1$FUZP^sM^r+3i%LmPP#Lt=%*ytx z^Ssu~iLCRo)=Z1GN$JrpDI>DZ{aQ0Kvd;ZlGdr?=^0j7av;+Cg#%L*9_L~jSLa9Dl zEHy<7P=fgtDpt(kldN;8xvg@a|F?MvmC)=6`lQ((=&p1encR2$ZJtDS=}(kM`U@qI z{zl291E>_+J8ND+)|Stjm;OI{^xt}C%_qn@2WQP|$lC8&^9Hi^d)B;#to@!f?;vZx zXU%)a+V5HO0kZac&J0V#vnAf2JZHXS)>nFs21?ISf9X9MD!oNRq|a!$#Fq?=ZjucR zmOip{7`kj`W@f$0x@=}dW%!A5*{brXz}*g(s-yc-ZS+v8iJnOn(PODHdW!PezC!kI zEHy`oP(fQ~^ogYfZC%k9>09&x6|!|lChL{7{furiD{1=$-9%+=QRq4+5^8L_hPrU9 z8ryE5PN<3P7V3za+U}s<(mm7@HM2cOO{6D?=j_b>L9Hade4%6C%w|KiG<(F-I?_i} zPkN6UNN-WN6vin!NS~Rtl@c>+B)w$TOnQx4pysyZEbS&GMLkdpTS`;|wXu~%eWjwP zzf>FzlnSGMsJpEz+S1d~FX)8yGdd=XLZ_rCbVm9XZIFINvC?m7x%4|)DfK~aX*^mj zwMJ{DHfX){HS$XBkze`-1*IR*KIuEORO*hlNxjexsU_MaeUJ7?ozW&~0NO7NLIN_15!jIK+m(M>5Ux-ETX z%XcNdaAVw;Z0MmBh8|0a(NifYdM0H?FQkub<&{*B*&8V>dMBkvAEb=vlaw8Ok#Zta zKT&REm-3=SXn?INTF80>Y@N|!>07h_4YvJ&Qn21&+xI9L8e;nijpd$ji0x-I8V$9r zK?}Hs4Yi#^L!?V+m~;gVm#(2m=@8l{%}0Z!TWF+o2aT5Qp|R2fG){ViCP*$cNm_)a zNK4Q(X&H)^;?N9fI+`V|Ky##3$SHZyJZT+TD8-}2k`FDF0w`8WK+C0#Xr;6nxuvaW zwKNs2mA0ex(oV#Gm&{R%L4Ii_;y*89HXCh_b|d~UF0;LeKR$;Xh(92M=As=^22w3Hj2k@BLmQhszE{c5X5}qS3Y=Q8#H2 z>Mi|%x<~_1M>N*(M9Za(Xr=Twa!WhW3~4KxChbPEq`hd4bPlbSLdYo{M@yvx zXr6QkEs!ptandC;LHY|#LUV1)GIH&-Tk;^U6o=f>8njwkf!0c^(0Vk_=0g!|Wu7e_ zwUgGNwrGLv5vnCUM-8NxsF8FFHIeS1X3{;>Liz{Qke;AA(gRcvt+0KSiAN1?c`Ixl zlu5HSD2p@-Rg)a(jMkfr&PprLd1(x~D9uNgr6_b&a-r+ebaYc%glIq+d`u=~q-i`VCc*en(Z%D%)msQQC;EN?Xxo}kbP&R2cN+B&lsic`GjpRV-r1>b5|>|RgA!@B3?-4)pk&etWJ+=96Q|f^^Pv`eqP@!&KoL?rYAbC-;nHT*N=iV@&~Dpy zWSw@mE%e{g-L{>`+RAR*?*Fg174brZ*Bi_utaJw!cvq%`PG9T<-+i`w z|1I5TyMelC_UOO$_StTs9-2Kt|DNIjvi7#mb_ZGKG-P}Je|`LKy^!rCvi2LYy++n4 zLbiX9b#z0vx5zp#A=`UoeVbsvEqRuI_p#shnVEIe_Va6I|L$YI&4#S)?YD&?YkT`` ziIKIH{kEjY+R6c2R%D&i1GdcnpJn`Sy#uz?$U4slY$=g-#1GigB5TVBZ0V7;<%71O z$lBgPTXAG<@1U*V|Ci=O)^R>)%Z;o{;h-%qvbKECmLFN$J7~*}tV`jbtuV6A=^Rsr)(3^Bxy35g3j4)pq1!? z?H(E|JwgMe2dF=~WP6FKNUu=^=_9Hpy+xIz_o$5Y9F;>?Y>BgS-!3Ib#iZ0IkCYbW zlTxBwQW(l1*-!x~DJp`l*)pS6QdZPR%8gn`c~Q8O6E%~vqb5>*R7Wa^>PdxB19Zby z6LpkIqfSyu)J3X_dP`+dJE=VCCRIc|r0S@HR2lU|w`^_DNU1&=AvHwfq_5C$sU?b( znxbJ+YcxS>j7Ce%(O7iH_6^!0wMW~~JzHnA3q7{|ii(6;`VAFBPi>>niJI19&0KVy z^?jh22x zW2N6wKPd)9N)yo#X)+p$YTI2XiL?UQrBx`AG#|a;Qmt)Ygx*O@&U&CYGluygIg{8 zZDh}mW=T2G9MssJ7cH0aqm`(My)ZI4Z4-M@lt?O$>{3DWh4q@+8>2H)OLSIhjjl=! z(P`;xbYA)jU6h)m%TgP3T`G;XN%hew>07i~>WtP(-=OugNYl|>$%F1ov(ZDzfgVdS=&3XpJ(E_Uvr+)vl$N1WQXD!h ztw3j_Md+9`ADx%hpo`KvbXkf=S0x|1j=r*QMz5re=miS5??lPCzJ%Miqa>)MeK*P{ z?L`GpD|-mt=D4)7A3!%zTl-1mL>=t+&|T>UdMw>SPo+EPne+g?kglPJ(iLSDYq(4y?=^W}NT|hn1FZS1{pY#?Dk=~<$(q}YS`iO=~2H&>qkA~ZAs2%#v zo*6ZhGNKk}q`fF=f=1gbqZ(3KR7Wb0>PZz*1F0%%BvnV%q|&Gsin6yy3%FFH>@Cq^ z>1(u5YJ*~>)@Ui3X#XCy;>)r*sF+lQyFT(jv4_T7wo#>(CVG99k}2Kr5v`&;;oUS}k2e zYo!}#z4RyYO52fN+KGbFZnQz#i#ACiv_(3Own-<^4rvV9B}Jh<(s;B_nuzvGlhHwG zDmpApM@OX?bWECwPDr!SDanCOOLNf~WsWnSLBzvqoDL1+935po1{Kyi}VB9Aq_yg&<6Vol#6q) z!5)u_Nb67`X&K5S1yB~rhq6g=D2KEP<&iunpR@)QKpXAbQ88&RswVA3C8XV`l(Z3* zkwU1Pv=vp55>O>+Gpd5N+mq(us7c9DKPe^Zjds{mqk(9rJv|!1HF2jsEgC0fL?fll zXtb0SjYYfc+0i>ryUSh|W#U-vve!phq=qP))EMQEnxb4%bCgG_jWS3r(PM3|CQ7H- zSLm5$tvVx01*%l}3rAvM7mE z5har z^KxsHE-;%Ry+!$?*QkK>85NQYPEka%p<+@PDj_9CrKF^&jFcRelWwq;3eqi9NxFlo zNcT`R=>e)CJx8^q{A{I;^oUsl=?Q8i6=rD@=@PSMQc7kmq|_)}N{d=a8Btp)GioPg zMIEHd39P5Otu^^jhop3*hcTPnzUeWmxz`bi&Ae`zZkC~ZfBrJZPq zv>OeT_M%}@2o0AGph)Qu8X+A)Bc(skXz4f_E1g8+q|Io8^e37m{e`ATf1_#AITVe~ z*{Aca&S_~fIwnP-Q_@s)LK=?_OB2yiblyG_&EnR0-aZ@6kzB|r%|+4Dd^AIHplRrW zeH}_AZANJ%4@xElPzuS1(n)Jj25A*aA}vAhxL>O z1TB^xp@q^vXdZfNPg{WJ&urzbJuzA>rABL|q-edA9$BY-YtM+R?Y*^UM*nUlE3)?X z)}9=#)G1OTH+pX`iVm{$y}cybFI7a=Y2Vw+BWru_?PZa*kN5V<$lBg}dvUZ!DvkD` z&-U-oCg}&XMe2pNNqx``>3g(G8i0b*Ahbd1j{L|LHWS54lhJBvDq1T|N9&~+?G2+u%rdK zHF8;I2n$0uB^x>~rA61J)aZ(rmO}nvRxAzap>n8}duPqo6bjZIH&GO;Qw!mBypxk^`-jrlMU^ z4B8{jMEj)4Xa~w47Kctr%g_mF1v)Kx&_QVxIxHfqNwrZ0 zsV=I7%7zU>X{4V~I_X>VfvuDcYm6>SP0>|p6uK^rK{ur+bX)3*?n=L-`%-iCQ2Giz zmRh2xQfu@~YJ*-#U!zx2d-O*72ECJhL@9JmJEKpU{eY~Wylhx^WPMM+Y}j|m`ksE- zuwKaeo_^V|KFIo>e%Y|^k@folWy5|#nWOos<%FkW!=H_)*%g#V+KwJ;>2CB?ibv0+z37D$La(F)=#6v;y_1fh57Hm#le86m zkxn90d;1gFrN2-j>2H)oI){=;7f=cm9`*oP$0|JR5wea|c-RwU9o_J-e~@+T!^55< z>-dF-y+qa#4-b2dtji-j>>jd?ee1BQMYy(0wNXc@DGHa`qe4=BR77fsib-`*38^9~ zB{fH7q_0ppspbE8x(n#2t}YD2$jsb(QrsoDySux)yL+HOf(3U78XQ6#PjJ^#N-0pF zKq*j4f#Oyug(AiN_k3mjYh^Xh+UFkI`^>$Q2~bo@YL3cCEm1kCHL4)BN0p?GsEX7X zRg=1+8d7&uOX`X0NWD=#sV{0E^+%1Qfykbh=AOE!nPO#83#p=Ql`5llsHJBl%2LE? z6{;nzM%ko=D2Fr}<&uI?9%&rPCrv;Fq)DidGzArrrlDfe3{*mzk4j0iP#Gx%m6H~s z3epl(Nm_=gNOMs&X$7i*x_I*D=e5A8>*C3dGD-zeW~ngBBIQJ>rJ^XCR2=1yN}^m+ zew0$mjnbkXo~|fX>W(%_z0q2!Ct8nsd4{7x(oj@D8iMjjL8yonfQm^YQ9jhiGZ&ST z7NIiId{j=FfhtG~Q3+`lsw9P=Dk#8n6wTpo8{j#FW=luVJm~;hfChWcp^ef-v{pKU z)=QUBtaJ>;NypJ<=>*y;okZKE(`cu39_^Mcp}lCB=P8;l{e@;q&(KuqZ!{SNdOo53 zXoM$O0e()AlAxuM4~0r8&`K!{3X@WyaLI!rB|o%Sa#1uI?J0}4^GE1Ldy1mNQc3iU zlppPu3ZtD;L9|yYj`mBX(LprUQxWCs!h2{>U6eLaa26QxCHgtP>Wl9r({(h4+IT7||-hfonI0!@~p z&{Sy~$|3bc4Wu0?m$VDzk@lc`(mqr`I)DmEM^G_oASxlnqb$-6x6&PD%dgN2xM8D^*25p>>`~s2*DH2|-Iaf9pMS(Q;`%S}Dy!^Q47njkZK#N}0~M2Yp%T&_R7%=_ z%1E0~IcYVjAVr``QWUC!HhK1;CelMRSUQKkmQJ8y(g74G9YQ0dBWRR#6pfLtp>EP~ z)JQswT1aP5E9n?&Bb`U>q>HG7bP08muA(l|Nz_cbj(SKpP%r5g>LcAo{iM5SfOH=X zk}jhLXtU=NT2Ey*dlD7mztRU{8>Ixq;?OovCfiDnZJz8lCS^cdrF3Y!`O_!#inbI^gTbhC9NFC8UX&hQ0bw#04 zceGgQiIz&e(Q>ITS}FBMVbVYpE(M@SsWTcY4MnliaI_Zf_H07gq-`jdv<2mm;!#3r z2TCmML0)Mea-;*uNQcl@(h-zYI*O7@yHH9g0;QIsP+BPlrI*&AjM6%kS=xZIpuL{D zg}G;QSJ~^yi#|&E(Pyb3O2|3b>nV&9OGS}aDvlhfBr;M?^p#W^C6&sen_Mrw)P zp(CCdXe~PF>0g9%B{fHZQfo9yYKz85?a^4NBN{JtMiZs3XtLBDO_h40=~8brQ|gOm zO97~zG!V^`TA~rs5Y#~$iaJTdQ5Pu)b(3nN9#UP@OR9Tj z&7AjKLR+P4Xs2`)ZATY8*U?6LT=3jLap;Q2Q?s;~hTIiwYD4I^| zL(dU36Fv5vL1mIzokr!*Q_oejRJw!~NS9HlbPX*=&ph{0nDh`Wm+qpK=#8gwG46F= zS@lObl34XbnWf6;o?5%3jEdDqj}!|)Po#n9xl|LqkV>PMQd#tmR35#NDx!B%RrFr! ziqdP2lIXKywNXOFdZR2-UzAO%iyr8@Ate&tmQJ9hD1rA3dLf-gFHu78c{D~khen}9-iv6XbP26T ziM^N6FVa=?GxB(^qp8w0G#z=px6n@M2HK5$-rMM-bQgU_j`tz@LAsAlq4eI6;ym|J zM(;xOtF#DRk(Qv}P-brwY9>XXR?;feL|Tnnpe)`^sFt)2)sx~;4QUIiCT&1T)J?jCI!NbGCzQu~ z4b72mp-|~Ankn5zv!&~3o^%5(K>56Xqvz6F^oR5s-I1Q5d(tcPKzfQENsrMJ=`Zvr zD&S30f+wex0QHfQp?;DN4UiI{LDDDs4wgK`zLs1xO!7m4sE{`uS}tWrYo!cmrIZPU zNjXutlml||!G32$|@ zS*ne;N;T1TsV<5`rM%728>umRFEvH~NG;JjRL0v8?U#C@y;65{P->69l{%xtQeX6q z)Ej*-bw%Hyn%-;Zr{tV&?|t-#^bB2*o}vrVE%dYW82uvsh3seWwY(3}uZrD3ze%^z z@6ug#6V>;=LU&LDucss@O!`3Vo|K5#pVGg?UPzzN1Ib6LovnfQEwM+6B_Q?$HS+qQ zZ(8$e_Ets*rMzgrR1(EWh0$KAC^{@vL~EteXuVVxZIsHR%~F1}RVt3QOI6WMsUX^o zntN-aU#05k3To-CkA9aLqTf(!Z*%kuYVRF_zL$c~S!pEtNeV#UN&V3e(ol3t8jgOH zMxzT-F#1^Bc(Z?dTH3j-CxhSz({g78mgOW=b zP--a^N-8BoMoNcLqOsn*D7};)rA6bsrO`{~80W2sUPy(}JE<&sE)_-pNafLcsU-SS zDvsWuiQeky37X`si5^L{zr?0^>!Xa!JJs77W#;erO!YQL>7~XfwbT@)m3pG&QbUwc zYKf9cZBZ7fJ<29^L^-6+$i70Sdb^@rigibMq~0hcn&DlB_OsF%-i2tVGy`pvR-ji-uuXo9OAu!Y~K*?N%XyR8vP)hL8qjr$gVlW`xx1Mgm`ZuyMhq!U1WC|;=PS* zUP8PNk zQgL)s%8mX&i@m`pTW_mzD3>$=fli%>>s1xhL{Ls_I%D7h4Z(nd+ z1WGP#K`EsulvavC>CyMzbLb!|_}+T}#YxA}Zs`o#FI`06NITGB=>&?DPNQh)Jc^YL zq0Q1Rv{u@K)=T@)M(HHlD;+^wrK4!ObPVl8r@U`b4c2_h`!A}6&Un+5MQ?31TdI%dNOjRXsWMt1RYaju zRkT>Dj+RO_(QimHwJ}C>(F#*3z{iK zpxM$UG)LNj=1CjS0%;Elm3E=UQaoBJZ9~hYD6~>qgTm1*?-BG!I*tC3&Y&mKIrOJ= z9zBhd87=eh?EQ!ll)N$DJv=^Wk+SuV{buJPb!S+pl9Cp=r>mN%-a!Nk=mkPrPk;d z^xWGO{UmiqXQj^Q0(#-?jebV2yg}$kX*fEC-gqaW!OZr?I|U6w|9V%UUQz_=BP~M% zq}8a0v;y^$mY{CvgLe(;B&|bT&}Z)+lttQwGNXjP11K9x>^q7YNXJkk0vQ5ESNs(_5|GOC8Y^4&%c*wI(MTj-8-1KmSeeZ|XjXXWSYtiGZsrBo6nM>%}u z(EzC;8iexsqR?O|9?g`tpxM$Av{G7zzLr*?VbUrTD6K{#qzE)hnvcdv3(;69291~2 zpo!8tG+Ek!rb?U8bZHx!Bke%*q+Mu%v0hp^Cb`6#Naay8DG6#JB}1*G6sV1q3bm8cpbkkyD4XO%jillzhg1^fl1igIk{`+^ zqm9x-6em4Ko292{tMm+Qm;ORKrHg2>^a|~j-lBuj zK6F?*guaoEpl_uE=sW2&nk*efQ>9~Qx^x`Plun@8(n&N&I)mm(=g@k+M>nO4=yz1t*Av-)1-`B?0NH;dzOHW|dLi{j_Fsmt>+6diNd1xhSLN&Z zh9cXyo^Ld=J?i;_ksYO;Z{+{48;XTAL%w4EZs$4OOMeY=?3Z{Jw&~v`>3Dv6b(Qf zeQqW0Yp9dY4|PMGeMwL!)WeqnwLyJ-rBMeoz*iZyLjk_ps0;eq*AzWyW7QZvlA5D? zXoRmPTF%ddBYgdl{Y+tmuP+MaPezRJ^+qdc9qF5Z^6>e_NZ$}tN(x40q!}o)Gzn#q zrl4%nG?YUchjK}?P(CRH*?C9$hN1$B4M&BfAXG#eiHb?1Q3(|6JBeEG=~J-p5Nads zLmi}T=x{CDdIWV*>@;d6ok4cqVBZPUOtD?)pn4oYofO-F_A7Q2byI8)Y9}2-4W#3! z2^#Oaglb7wkZtWHs)r`}{zA6zMBi&<*Ei93AK4X5^gTm%j)}fo zsFCzHvTL5`dxdNcCi)&DyUU5bhsb7QqVKI0^G@_VMRxTQeYcTa{Y2kgWOFsym#8w& ztyEV0&+ZeXl{_dln(9l1%1G%@B`E_cC8a^-q!g$En(ixzeoARo68$0-MOUQ!=vS#Q zx*!!tKcktxil`W)%=A@8C8YAG2%6(-jB25|zNV;})Ew22TB0gwnXe=Irm2lDG05VMxymn0E(1`plGzpHw|r+rl2^q+P4txmX@IX(tLDK zT7>qZNZ%T?8AbWlp{>#;v|ZYOcA|J+?JDGjJ5s!_F8W2PkJd|>&_>B0#YtJwW+^+` zD&<7mrQB$zlo#!m@}s>{L9|~gj1Edg(P61L`bH{=zLiR&@1(Nmd#OD7L8^#ONtMx$ zQdM+Ts*Zk=YN88hvu`w-EKNW&rS@pHGzHC(+M;>V475O+g+iqev{;&pmP+%{a%mx2 zDJ?=_(h?LdEklvg3KT6xpjasit(8`x4$^AWNt%YbNRv=EDF*eBI-*`uXVgdPiuy_2 z(EzC@8YJ~bgQdRcYpFjPCJjV^Qfo9q3P7WzA!v*=6pfXF(0FMinkWrN?WABdRT_t; zqb&uDmpznOe(L|{z8Y>k>5`80eM5m-II=@2hw@;NVo!7=owVi(bK=?r=y?L#l6OXweI54s~AN57&=K2Np(#=GSEmsn!{Ud<)n2V{47 z$@dA_U0(7f;ySy6OTK5syt?i$Fe`Aiz zzOv{SsWiGGl}EoybKz1M3d^1pHX+Fv!%|)rDCCIMe znr{M1D@{WgrB%pg=(=wWdPD5GFCN*oT=(tzf9nopXS?p(hU^Ni`?erE@^#-j^iJA< z-b~0JFz>y$0%BQiq=c7&_?Msij$t9&C*{eR{9&QMfZFOs`LIzN`&f2DNq$D z4XP%kLNz2Gswa6+Ey+a5E58rA;VQ+JY8K8_;s})^`o%$!v8O{n^Uu9J0UR zed{}pGD;^&X7b_^s~-N-5n!k2KzG^aOqOWvIc^N-Bs(Ntw_E$sheJWktV8KD1fNj;=^K z(XUc&^qZ6y{VwH4W2C}ptn`)@Y?b~++oca^r}PQ!mR_U1QUdz!mlC0ak_R1@T=b3P zhrX4Ppzow)=zA#z`aw#CPDyFdk5W2x7V&E=WLjIbM|SlIoQ}w5D1p-wrB`cf^jxvF z=!Mi7*s zilU@aLzG-W#usB4-)0 zJrX%{(R67cnk+3rc2$X-Maa&P$eDp=OY_l0X%?C(g`la(bxPO#Z)Ddgi0&v>64~)w zr!cxH6-9qY#gU!Eb@HQo$T;Oupi~i!m&&3MQdMNfGfrh>`x>V@vO7xRG(_L>NlX%_ zDf(V&jt)w7(P61E`cA5i_Dl8AHz>Jt9R1YNYAC9~$jO}{sDgA9?bUV1&{kO1wnuWYl2y&#ksDZQ)HIWvfX3`SWLRyAeN&8SnX%%WG ztwtTB2-Hc6LS3X7)JD$lqzmXIFMSf2S?7=fL0TjO=*+PFM7^)E)gI z^+Z>sbm)m2p+6;m^jyk{UP#%|KT=NgMyieMe*K-Y$kx)|$&Y@O3Zhd|VPwyS zzf%<1v*GU)NA_&^J0+1l8~#oj^gyk7Q4YmQBYR%_o%YC{aet>Hvabq%rzZMJ*HuLJ z*C^=q9o1PQltd*`@sGcU0GzgnCIqsG1av zx=4LdEomI;CQU(gq#3B5G#Yi1CZHZtZ`45Qj~YqSPz`AyY9a-oX3`MULK=!%Nj*^; zX*g;pjYJ(#6XzldmCm4v(p5BBx{Q`em(XJA8k#CyN7JPnXr^=v&6dugInsGFPdbej zpr+1iWP3DqULiY5Q|B?VYia7-N49TM=P9!DHgz5%J4#dMZ)8`{)Om*N`kFeo(Q@f8 zWLMwRxrZ0S!hyoINO7+J_=hZ|4x|#VfS8a|8{Nj-o!&G1N~wjs~Fq&fjQ+^a*_} zC8$fTq(o@CiOrE76I&o9AvR1(hC-#Mv@VuDpo!8eG)j7n z#z=njm?u3WHd*=$1xjzxSTw*%#dU+xU?(TCqYQR(BRk4qr!ca68|>sqcBO-zg2>K0 z*vXD;4hB1UksWWa|{lD&BL7DC?9viVNL)lCJjL)q@k#k)E517LILagSM}?$;s0a#l&LI0t z33M(Z`+N&@E+Km_4s` z3;itJM!!gRk$vh0I@^$aHU>H&=r?H*`dwOrZc5A0AJPhRM_PsMNvqKVDFQu`qRXi=!LWgy_7bff22*wKFmj+6w|lae8OB7&S0$mTT2Nrmj0406&SdnSXNbjao}$jN|g z{(_uL$mTD|@kcg)K~7d=^B3ggMfP+CIr))&1q3+-k$nXOIfapZ1q3-okv;7}PI1&g zDv26NrBM^9EVA#AgPiiHg;Wu>k}9J%QdQJWs*XBHHBl$2HtHhPMct(OsE5=L^^zK+ zK2lTEPil?^NG*|l^#nO>(ICZgBm24xa&jX3+7EJCBm3G4auT63#6~*Zkv&bLoN>s0 zax%&ZLiV$kQBHqkKd~9*j7IjemQl_GWZz4TawZ}B4r-J$1liASMmfRAzP}pfj70Wx zno-U`WIyd0#d(ObDE0vrlb)g+ z(leAx`U~Ze?xT#--zYPh>kO>Vy-DheDoOoO6)6DKkcOaI(oj@K8jk8oL8yT=5;c-W zqb5=?Dj{`8rKGN?jMNjAlX{~HXr8kQ4Um?hG13e)QCfi}OH0rkX%ZSFEkuK*DD<@y zgN8|qP@uFLjgTVHC}|2BD@{Y=rCDgI6oRHpbJ0v`KAMf@JNr<$bO1$4dr+*j4n<3c z&^&1qS|G)vP-zQVENw$er5$LwvQn&QLU48jdDQL(o(y2u+tpqM2x)GXu?&rl7^rG&DyFL7~ztv;ZA(j-#>U z>WFg^jgn5FG3bQzFA9|2q7mqnlc6EIL}#6xRz3Lh{7zxih$@_SilQdyXQw>MBUMDX z&}-*%BgX5^r~A$)w7;O0+n7)Nqy*@oln5P`Jm?$AhrUJcoOCEsN`tma`O#vjG)kV% zUY8v$S1c!5Ddk3CQeG4;6-3ceVH7K6K-;BMXs=Wht(A(S^-@W+QA&a0q-1Ebloc(N zGNGN4KiZ8FxXsZIQd9Ij@^ky6=c%oFqd%p-=mkpV2BUYJnVR&3gr))ejx^qyD>H{}1ZS?D9Nl!m#Dr9?PaxbHutSXax1D%zgqVJ?<=zHlp`cXQKPDy9b1?e{W zS-OjUk?x}_(s}fQ^ca0B-9kS}=g@BHBHAlmLi?qM=%92J9hR=4Z;-$H0o{|{qCce9 z=%!@1_(1wZ?2hy=`W z=16~|dD1JiKzfZrrMGCY^eh1)yTm5L7}Mib_etQ5h)+m6Lp^ zg5;t~k{_xfB|+7sWT=Le0@ac(Q_DJ1Dq{7dG^l};4mFZ8pe9m&)CHArqfi`Auo7+z z+K5WIn@|l@#@&IgaK9?!?n1vvd(f|_m7A&=uUgdF^+zlM{`0JBhmNLP-N%r?hZ$G-k$Cf#1~q`w*}G^bV{0m{=04#vh((I=OQ~^Pj^1DE9mJi zM0U2G?lffQ=;?+ayQ)5J42qRje`)RGMj<<1A9oGn3$5bYS}6kAdHcKjzO?ptCq#Wt5xl%XOpN6v*}+J+z-G{Q# zV~%?WWtI-0ENHHK6cv+>pb}`Fdjb`Zj-evbaa0J+cTb``(rJ_rEpX4E9MUmQfPz5OwDkFJNDYVM1jTZP>)kjOEx@f9Y6U~zvqfn_OS}Zk1)1~HUrqmG4ma3yU zD9r7P!ll+|qtq6ym%5{sQcn~nbw-g=dlW5oM6ps=v{vekmZL~_2718HGqG+IdYL>y zf;DaoI*T^CJJ5En+w7i1acH}H7j2bpqs?fS`xM<{ls)d>=!x_SJwk`v{Cp~#GKE!E zUaE)^ zsH@v>tPtqjyqM^ag$BwnaI(?mM?V%7%V$d!ywkt@@&s z=&T!p3Q6-(K4~s0Ak9KWq=l%MvJtEbg!a}jB?SvgfdH)Q5NY8 z$|jvdxuo+bk8}~`K$qNSsFU;WhX+z0qK4AQ~a{ME#_$Xn@om4U#&e zucZJq3f*x>BRj_(cPQ#14M%;Xk*JFlgnFU7?i4genuNwmJwz#`yC}7EAEiZqxqqV(=%t&xHT9J$q6$)VR7I+Zs!6p`4XG}w zCFMnRr243y)Dkt2TBAmiKWZX1M9rk;sD;!PwURocHd0sAPU?<2NR3e^sXXc;l||j8 ztf+^S9rcoOqCQf7G(akd21$j{V5unjS}Ki(NySm1)E*U+nxaZlWmH0{ib_c(Q5mTt zDu>>SR!WCZxO5yvN+;2J=>&>K9&;NlM_zLmEtMXkQ0XyREImc@r2A+Aa!sN( zytj~CG*j}S>5>P{L8(l8^oV_=GHuZVsUx~6bw+QOcQdv|+ zDv!!Z6;TDLGO8q1MOCDdsF+k86+*R5UG#!^o0@yx|*(Nt<)W@ zmpYHGGbP1J{E~5(4Ra8m3hN?){Q8g4` z(sUqe(ko(vqzuGrN!gLjMu2%utIbt_d5i2W1I)k3?lQo9Kz5e_<`c5J3@{1kYj+u7 z5+S?G0OLV*Bp<3Lxu}8UhZ;#qP!lN`Y9^&XEu>Vam6Q&(lQN+Wl0WJsWkp@2$E>QG z^c3}wo}pgSU#O4tH|i%nL<7(eQ*-`QpY%B9#Olt-F^-l%mbN~_pNlvx^$ zvPiX2KWPmbB&|b(r48t7X%+gY@iw6*iq%EUr243Z)DX3j8lyJS4D?8SXQ3xjXH-Y6 z!%=!E1pTSjx#+nxAH9%PqtDVp^iqmI3Dq|WC6;2)0BI4rr|XuW z(W(MaN@AfVRVVJ_QblAl8EVp?LW-3}w&tOxHnMpMH93(zIiV&uvegeYd6CU?s40u= z*$6c?kWx1)HFo4f}y4{ zvK0(9O_4pFp{6;qrzF(0MD}cin%2mkjZjk_+1E^%IgjipVI~3v(i&!BkewsUtU-2{ zVP+k&D+n_ikj-hB*@SFP!%RG~ISn&gkllHh*@o=S!^{q3vleEKBfIl3a~0WDg_&K* z<}b|bK{kJ3W*@Q{4>Jdlt!kJ#glx6K%n|h8>W?CO4#LbaWV0J)R-qB`maXuNb6O_c7V$)v3ZKUMhm33$mS*7{EO_#2{#{*Jvrg#6S5~K+$3NWdvd~!KeFc_++;|@*{gxVc!VLLxU4-e2?8p(OKe8i7n1RTS9ARoAd&VP7ZDgwuVd^4V z%Lo&I?7R`CKC)GfFr|^rP=slSY<(k4V`S?aVcH{`jR?~e*-A&4=Ezn$!gNM9FA=6I zvU!Ox-I2{pgz1TFULs6yWb+bX$|75Z2vZ)}Dnyuy$W|f3R7SQ65vD4#*@!UJ(SO-! ziR@{LFs+e2O%bLovel0?bCK;4Y4#wSmq@b@*}O!WO~|e^(yTysmyu=_vb&5l2awH6 zq*;gTek08WWOE;B4k25kNHZK&k%CY)X(Xy4jYhSkU{ppLhssG4Pz7lcsw7Q8HusTc z8nStbG&7LROQe~FY+fQw2(o#JH1mc=}5B-+4@GBp{SI! z8rcd)nh0bo7-^!A&1s~GK{lt6W)1o;r}4;EHPUQBwyKe48?sf6G&_*3YNXkP?3s)* zSCOqkl(~)U3Zl$iWHTOR?jxJ=DDx26wM3c6$gU;I_`3X8g(&lsm|azrd4}w&qRb6s zcNt~=LUw&o<|wjNh%(2JtwNMJj%*d8%-_h?GRnL{ww6)mHL~X*%DhE(Z&Bu7WcLtm?nLxyYV_D07`woBJq}h?qTVQRW&kTbU?x0@>cz^+SEjL=h3D% zvb&5nd6BJUv`K;N`l3xLWY-sM(jdFOXp;`v{YIM%$nH1V_@N)9Ovs*+XycD;)}l>T zWOEvAN+Mg|Xj2;53Pzi<$W}1glt;FL(WWA@6^u5Ok*#2~sfug`qfK>WD;RB(p;L<0 zMK-(9rXjMmj5gVkJy+2tC$gE0F;l)=7h~EYyV4lb_5ZEykzI3)nTBk}W6TU>$BQvN zk5Xj0V@!8s>k(u6BAfdd(-GPI#+c5?t{}z)A-lI2GZNXo#hB5^?k&ayBfGa4 zGY;9k#h3}m)+okILbgURCIHzA#+V_gOn+og zM2s1T?1_jm&5^BYjA@B%RbxzRWUCr$P9VF!SaTfNHOHEh$gVWjoJMw~vF04I>x(r} z$c_?gV$gr1tU)%V8{sFt)E z+5E+t2xK!9YtAEk!eY%9WNRL4wjp~WV$BX@PeiQQh3q+qHG7cFc&yonY{p~F0c0x} zYYrh>!B}$y*}BD=qsUe()*M6jylgOjUAYf4-UgEbEtN8$#ZoG?TuOshO36@|ln#YU zE?O%kLD7;A#iBUV64}|}OiyI<7iW4STZK4N8QIFjnX1U{JkC@{cIR=XAhOwwGlh}O zTAV40Y}VpTab!$;!IOy>lSb3erb(2^S`vln}z>xU4-m@6M^i`<4qK@yNow6$nGuPtU1&-&2VI^6>ox&tya7liEPH>&1hsZ8E=A-&1Ae8hioR} z%>-mmNxYea>?w&iA;{)0-b_O_&+%pkvU!d-Q;Mcl>E_iDJyy*B_OBJxU=kt0<_Myig!l4_!)Xs>CG8c01+7pX7mCUr#}q~5586ohI?jZqz` zDXJ&6M2)1@sEO1NHIv$+7E*iEO6rK(NS#qTX($>Xbw{0~{-}pE5cQG*P#L(3H zgU~(`j0Q{N(AQ|cnSz!}GtdHQ8VZ#rp~cb!v=kjMb5XRk424Ux&`K!;MM?`%th5NN zm6o9O(tH$#4w_Y{lC&CCkyfB;=&;#>woBX4W+@(RMMumrltVg$ib&^Ca_Im{DP2UV zr9&vKbOfcB&Y_Ib9+X+yhq6dVQ8wu~$|dbWd8894pL7xxkWQmQ=o@nbm6PtGGSY2S zLAr&CN!L*c=^849j+%$)2Xx#d>dw#Dk_XL}Tr@}Wp_x(wG+FXPQ>7$mIy!A?qQg={ z^o>*>?U$OOgHmJkt<)TSC)GuJrP^q>)DnG3=W52iWFf{5mPurT0sRzLGK^yO#8R*-?7MlA(-J8f2stD7lmh zrIh?pYAGv9i!%6?M&B`82EXEHr&J&9l`5kBQekvZDvAzE1<^NBN%XB$8*P-zqVJ`; zXtz`z#YvUXW~nOLDpg0@rJBg@GMnEj^dqrserwP#(h77+T8(~?V$fMB0{tXKp$pP7 z^fSuqcM?64wxD~`3G_fZgnpIwp*zw!^rv(lJ(muk7t%KLQrdz3k#?as(jN3qI)bi9 zXV4SrIQmUGihh@lp_|fa^am>7m!LQA3aC~Azki9nS1b{+kJ4LWpQYC*p|1OY5=)L%7qH~r9uUyG^h|N?3WJZkusossED6GDkWt?B~W$0 z%6(~(DxzYjk>57dPTGUoNV`xcX&-7O?LZw+E5BQ)9(!x$cLOz&uA@5AZPWm@_Irlj zb9Zd*_ZWSYo}$mvL-Y={@%x1SkY1xF(% zYUh`V)<30W=#7*Cy_C|Rf24Hig_Ht4NA3Omk(Yh6_sfbBO4(6j)X^_Ds)aiHl|<#F z+Ngq5A61bW{*R}-438q|!Z3_OW_r3C5DuB{U zg-}MR2+AyFKv|`1C_8H4>4p+ZoltzKBZ@0^MhT@blnAx)L~6x5k`x8`qhODVqDvNv zDcQ(RiiNyV0P;z3kb^pS@}S02F4SDghgwPnP-`g%YAa`-91Cl zr^rSl&=+YO`X-G+KcqqEmox@N)Y@U_y-{EyY4_r2zC^N`ih#DNtl(2|_;?I@!|(U6+E znc?Y$%x~(<@Qgy{7k6fO#vt?C(K9^Vkoi5H8J-@<{0h$uPakA{!Doi2A2Pq-Gs80g zncv=-;TeR?Z|}_T3_<2w!5q&lRF&8q&kR&qnuE$q(@;gUz_SExr}_n+WoWCk0_{W# zJsZ$eX%m_#twGbJRcNNP4oyajJvY$bWM1sKfU-)LPmmK^diUC^K5(`H1>c)e=vHHoQ8ecf^KD|Doa13p7&tj>bw~ z(P-%n8Z3QAeWh2ZxAYT@N9#RR*yFfV4IM=rJ+;tZ)Uw6X5$z_n#nT4ums+3$QZPCw zwMU1gR%kEU<{5w%N`25`sUMmz4MMY}UT7}b<(Yw2OH0s3X%X5iO+)LYS!k`a04IJ1G!#kX#fZ1)#1{0@PDVfqF}+P+xS~lL6J0Qlpwu8dP0MhiaqCo)+k|)Ce7r zTA_ndJ#<)VfR0K{&~d35I*G1(#-Q`kAaq?ChHguv&_!t+x-5-ASET{ytTY7OL^nN4 z&|_&4x+^V1_oWr+A-e0?fRggb`NDGyO(yoja{^73PNA975#$ZzQ^NBgJoegi2bmSG zJ@=4V@!E3>`7!UE#}oW}?K@8lWJce4zB4*qibQOp6a|f!q9K#-o#!X>W=j!>%|#zP z$y0oo~5LTja3XgT`jX@$m0ZO}-m85$}zLBpjMXf%rG4MPq!NAz|>KB)(a zi6VRZAb%9qI{?K-(Y?#ibJj-p&O<+>E$ElD4n@?w4d|OMkWgJ*8x*x0C{zPv=VXbQ!RVsY0_~LAquo*`v{&kk_Df-CtJDV_m-?ZT(jatNYK6{9ZP0lX&pQMyL!o{W zqx1-EmR_O7(i5~)dWM!uZ_sL#-dn0Y->(uGl|kvHVkoIp0VS8pp_Ec3^p{iu{f)AC zgHb}M4N8QvdOM=TD7&{8iYtX7f2kXaFZDsOr5-3I%HbV=9F)^L1Z9?np^PZEcL6Fc zO+i_uaVWbq0p*k?q1@6elvkRD@=G&NL1`W;EG-|bBlvsJMP0Xw< z@3oN0SKjM}&nxeZhWaZO0}YfsXfUeiO%gt@qBjnzuUH^5St@#ikjY%pn*cSI;-QA9 zvNr=VC#vjCgUpJ`-c)F)lo}0}(jk+jsyELcWkYop%YkZ3xsb_H)te8Q%+=hgI92_LQLt%gj#+TI4?qqV(t&{W0hp~+GsWb)Pa zHbG`ZU2iKiQVI?qt?O<7XS5A6HP`ocMx&)};q&Ty!~Tr+Kqg-U?|?t*6F%C&+Ygz2 z8+u2Ck2drU2_J3f9Tq;?$U7!H*2p^{d|o5(xbV@&-f4d{BYd>6cM3A~HSx|1A8q1Y z5I)+(J12a!sdq(qtf_a&pV%^Fs%qxl5I)+>yY5eHP58VP-Yuv#^ICcTF{8XbT6y=N z=8Ek?Ev0>^DQe?AgL+D*P*>?3GHcs-PoVC^g1xuUc2vo{BdOsuoF0P>S^q3BW`+7s8}%iMQosV2+Bxopm!KDy&C8pgwhim;XQ#~)1eXGE9k9s3cZ&upkLBC z^g}v^UP_nH2k8v@CjE<^ONY=W=?MCQMtZNI$7q!I26~Fdcq4^SIhBs_{zt5*6ops^ z=_j%7QZ!<%r5LEK^p(+eQUqcl(nn&U(r45~`i{Dyv0e}Jnxk=E3$;WOyjjpqDHFOX zWFSiozQKmGrB80erGHRbX#`3yjY1ivF(|V%4rP@lpzP8llvA35a!b=tUTFr( zFU>*)r8%guG!GS(7NFwN5>#4RhRRASP% zJ5YUT7iuW&L53Ov!yd=uJi^il-{Am(tl{F^cgLezM_@VceGmiiPlOH*loQO32l_3q0LeZv{mw; z?a~F-?vyT}-O?4bS2~CGOV`i=wA9;(wdUP%skaV_tXMr1Rce4DqGjGDXrR;#4MuCc zdr*IA7wU`FdjCQ1rGL?D=@5D=9Ydd_Bj}5?4}C!Eyr)of=?wBp=a5f2f&9>V?-dkV zx`h0tYsirWs!qozO(7 zBbtnMdPkv|RJGGP2F*shyc3Ygx63;YO((Y7I|;>S#cuBulo0Ll&Iq5k$2$$hCAQZ) z3k{d%ppj^wcR~2PecpL!D6#uqPiI~!NsTOYRdC6q3q_|grONIHjNOIMIjx`iC+6pD$w)=%^)iP1;&TDphcO0Up+={x!$ zJwj2n_CNGeu}EF{J}E^(KcugW{*vyXh+6RgMV2Bk?~6vC5R0zZGvp_|KwjxHdaQYG z&{OFhdX6kB8d>Ty&u7I#`6Um^E?Fq2WTU)N3{+5ZQEp^g0jRnZ2USI`l>;S}3Zbl0 z5tLlYg8q^+pp;T3lvv7!{+4o~v{D|FUdo3uN(E466w~U63UZ>DRu9xv>V=X^HBd^a z7Wzx7gZ`H4p|ny1lwN9tGD=NQW~mvB(q5IM-^iUdu&P#L9MQH}QjS^S^-FSbI z;-Q^V478qGO<;Xz-bN__vE3R?feuQk&`~KCIv}M+$E7&vtQ3g$N}FF$aEvn%7IL!fmSVKdKGAu zL#DfdRyJf#6lmo#F{v8buF*WmoG8%Bhs-SmS_P0fQJ|Fx9hI`6<5D4HP8nzwLFSZ! zRx$MZlqF1z%t2Orv|S2D<{Uv*Gh})YWOYKO(jcodGUo`g!jL&zkkttN&e9E;UIke# zkU3G1)e4zj1zBy7=~a-`5$%_nAk)(%)&$g-`jS}lP#0+m>Mu<~U8QNLr!)@rmgb;P zX%^}(jX?vY8E7y{W-UWQr6p)MN@1-+BT;H=6KXB}i$bJbsI9aQwUhRshSDL_SlWSF zO8=k^(iYTI+J>5=G}a>{&YQ-1fO<;bQ5Wea>MDIk!=(t_$t*=et)(catrQKllVTwA z&XC4>$J!2x{f9!NuP9Wyhq_BoP;coO>MOlK{iRoEp!5a}mOi4PD1+62-L^_a&|J=z z!77KAOL@>#sT5i)6+knkd}z8<1C5nxq4829v|gF3p^1vsLz@*VhUP0)0xgs(pp{Y% zv|6f!)=Fj2QmGJ{E#*R!r8;P%GFL&PiDk5UAhT~qD;SwQGFnZLsX3$7?a#bH$n+qi z)drcWGFoBC?3>Z*giJRwTK$mOBcs&^nNw!8+9T7Kj8;cv>dR<#M&=wDtzO9VC8IR} znUiOz z28t0OZQM*=>du_JwgekCn%Bh3?-Icprq0(^n>r6S*+(&jR4>I?W-O7f{y=AwGAk+KoR%&GWlHJOJ zB1*-OxsU8tDP(RTyHy66TgYx@Lgv}XZUv&nQaWThnbT^I%-Wn*7&6_+X*EKo(wtUD zlvL`3Oy-EeEs(j@oK`Dj?k%U)1|^h&k?Birs|Q+6Rk^KRXer8L^+799erpEm zD@{Q?rEzGWGzkrsrlH=_1k@iDwAP_eX$9&c%|TtIHK@BZ4|R~1p%7^SYAr26Eu}@M zt+WcYLxrquXf`Tr?Fd&<>j;`ltf+MiEtU?U`O?2=Au3@#LieRt=%w@qy_Vjgx6*&; zz4Q@%ke;EZ(r5HZ`ij0tFVJ)8J9;SnMCOyJg!KeHCRWNy(UVuL6o^Jk$I|`SZa^* zqsG=Klr)9W7?c<_vnHXdj5f2Tp_9@KbXr=4ZcB^MVQC3EDy>7ur8VfTGzXoP=ArY_ z0(4QDf-Xz5&_QV#x-P9iH&ILL2zn?TLyx5s=&5uH-AApgGw3;LZJk3eQ77v&8lK$f zD;g=iLw%)4y?AX&{}CG~y+MPek7%eAfqCPl@5Dw+KhaneW+h{EqLcv5l#-yyQXrZt z1)=GvtCa%HMt!UzsI^oMb&yJ-5UC6bmGYssQZdv{DuJ3x1yFOT5Ne6~S@lpCsR8OL zH905QV*0{8iMjlgHV2{A1a83TXRrx zX$C4Q%|a!mX{ar{jzM|Yb_tUNKD6jMp<&-|7w9-$MUW(G2Z$(lxlv#>|vPuz9b~MAXP)aEV z`dhNmUy=tUN3*RI=rXm;w&J1dQZjU3N`THwanMC609}<*p|esTx+w*r+fovA7tOay zpyyI4^i(Q_9!f>fW3<33gI=N)RvT29`c_yiP(i5)$}crTMWsflxYP=jM60YYR9fnc z%A)nwFtnY_>#Z?pzcd6LkS3tb(j>H18izJYBhXH15ZWz`LVM9hYY{pwtwKko73ie2 z3>}n~pu=dBwFaF=+pQDmJ?|0QtuyG0bPj!!j-l7m1@u-rg+54E&?o5<`hj*>PtY&v z5sJ(nJFEvNBHCqrMbXiID@Gr_m!N+v5As9*S}sZ}#X?D?1Sqi-fc}zf^tTiTC70r% zl<1I^4yBhepp59Sl?i1=C#_QGmsAWzNw5CRSVeiRwxb7_BUQC00@Tj;f>QRy;=QOL0&` z^ukJj8l$&XHncsmQ5LjS%78XXnb2nR%?d_U>A^Rv0_q@DLLpKW6e?9iU8EYQt5geh zm-?ZeQa#jLYJmDmjZlB72^uIhLxZIOXsFZz4VPM>ky0BpS{j7R9euMpqOpo~LgS?{ zGb(jMHKiV?w$uyNmHMFiQhU@;>WmsoMNm_z7-}xnK`o_HsI^oARhG)3c2XJC7JawI zpz`R4H4aroQGIjJ^pr*`&_rn#nkvmhGo=M+wzLXOmX@K>(jqigT7t%-=)OZ}HhV<( zoj_BiV`!#y1WiXVe5cSvPnUXUmnz5Du8-QxlnHu*H;F0K?!}W&_mWH z^tC}Ib5h?hH2g245on||2=$gmp}tZ-)L$Ba21%ijw;lq2#HJ=Ae|)EaWdu zL$Re9D6TXK#g~?#gwhn0NScQdOAAm^l*)GwEoHY}Q zz9{{9h9n!!m0}^&jkG=&O;#)#nkvOW(Nwo5zEUTGKFFYQ4Gq)q6cv;plzg?uN_Csf?`1bvYnpl{MM^h0`texXvn zCrcp_ft~bX&@W?n=ebLn#M(EEPger6TA#s_pBC zGLyNsuNO)$jX-}%15j3J5XvqMK{=&9D5KN^rIm)EzfoP^GE`Ywf~ul=zD=mGv;&ot zHlVW7DpX$Dg>p-4P+n;dDlM%;`K1-8ptJ=QmA0YcsJ?F>s)$x-Hc~H&GW~3-nfMh2EpCz8>hI)C)b8`k?1hKlD->fL=@8&|}oo zHx5On(w@Ev$lOP7-xL&;SYO{9^nrPOee=*KG|aaIEtQs`xxK?kK>Xsfgb zZI?EnozgzETlxp>mHtKhr7dW^v<4lP)}f=)4zyW1gbql@kg0xzZxdQeY^3iLS}dJF z3(;ub1+-GSgjS=mzH8_>8t=P>PD=OCS?LZsEj>VHj|sj<=sdAWz8HhZDg~nXQUo+u ziiCzr3D8{W4Qsnd(TI(dqM+f@J4U-o@rccqf>1jt3F;tyWnPH%3WZAlq3+U0)KmJ5 zdP^@*U+FvQFa1OVB@da$N){R~*=VBVqRCP$G*t>f)1^3QCYtJNf@(^QP)n&9YAv-v zZKckrwiJvSO6^f&sS|1{wL*2J2B^N&0#%nfqUPwRFW%7KH*?e%2aQj|-;DJoL&K#c zXe2u2%ZAq0Fv^8CN?FiSDGypM6+o+{9B93i53NL}eZ|mbbjDW#9YAM&rO#lEtck>h3KYl1?QhJA8OK;Fa^vU-#Jod@=6`2*EeBb|!Mi};c zk59fx$YlBC`^@ME6wyvbEMi)tB$YV<`4MBh+UJJ%l-Lw~V0 zs$Bvlm+~N!C90hdnLVP~1(4Y{s$B?~-J;q>P)ZcT?u?>JoltbC6*9ZUu-hP$FNPhA zOuiU)dt~y(usb4?&(H1^KI&%=LTMH26F$$+?)PWj0Q9#;dmxk9&+dlIZXSCA@-phN zN1&L}ER<9lhWw;4D7G{MC6-1ZM;e0sr8&qajYDyzNhrQF1tpZGp+qRIy$NNPHlUm+ zfqey?q`n09zv#4d2A!2oq4UxqbWu8jE=$MIRp|t}E?q!3rE}=0bO{|tLAGc3|79Vw zZ;%}UnYBT-jnY$9ko}nz8KsXXv-A~ZmA)fWL6H3unF@mJNUSxL2H8=NsXoY#hD-%P zb_`^yN@mwUrj}%O0hF73$?S5-RFKTBg-lh+>^vy1MsuP3Qa)5rDufD4MNm?+7qn#`_-Or%UAl(4Nas*j=^kn=T|jN6JE)y>19gxdp%Cc`3YBi5 z<|vCDFoM@Y9HUq$VR|DQ#g{zDC&e)HBp1b$q9K1N3W_aRC@#ur=R=XDJjg3$Ls6w1 zD7usj`Jqzwv(bD9p{i2$f2goV)C*OWI-=~-Ae2*Tf$~d@ zP(i5`DlD}@MWtX=TxyR>N}W(?sWU2z>f3w9^2yFKS>KK|jy@|EfPB(dM&E060O~0X zLcOKW=&dvc4V6Bk*V1?NLHdb4NfF5WMT&&JNm0-bDH{4E#Xu2Nfd@sFEEH9;QFO^g zeo`FdNbyiiDFO1A0#R%!2*s6>p!iZUlu$~65=p60VktFBDy2cmr7fJOt}0DOtiIHO zSVO55YAm%uO{HMeTxyS6N*z&asS|1|bw=%^Fw{ZnhC-wsC{*f&x=4LcSE(QBE)79_ zrD3SQGy)BjMxnvdI5b?EfJRD_&}eB28Y@jhT7YIsi_mOo z37RV{L-VB-XrZ(UEtb}xrP4aIT-tzEN}JGXX&YKA?Lh0LU1+0}ft#rh!bP1i7uAsBhHFRFOfi6n7 z&}Hckx+>j6*QE#Ort}EimY$%y(lc~ldVwBFuh3)Z4SFiQL(irE&`Z?Z4yHrjc%GZv zjnI9m0lF(SK@X*7=&{rSJ(cRA*HSC=OKO86rZ@T8qaVat*qxEd*TU|F%-R-qAM{-6 zhh9np&`oI&x-E4=W{(zj7&7&>u)85sRSUZZGF5f3zoL`Uf9SAu0WFliqtnt)bXK~8 zmP$v^b?F$IFP%U$rBi6ObOz0p4xy{kIdoq7h>l91(Q)Y-S}t8ei=`WArF09emhPan z(mk|ZdVn@ckI;1K3EC_@LtCX6XuI?Z?Udf2-O@XB5rx=+l@<}O3*e8}8eh+P1gdke9np{r61WbQ4*_8@a_ zA-09gy@l8|GWQl@$3dp|A-0Rm4TjjUkh!-IJ03F6L8u*uOa-BK4P;h?+O__S){oFZZOntfK0DK?MBG-D%5U*Os_)ia>&#YYPUe9SD|(@Wcn9smqMocP`es3y$`jk zAX8PS-3pnWhT3hA>1n7Pj7(2M?e=J=)DfAUhT5Hw>1n9l8JV7j+9ir6Ea;3vxlL*(hjs=+Jz2Cd(c5? zA2OW`v;RTn*$A`$MW&Ns_90}t7G@torfXsLF=V-E zJ?sbQy>tt`m2RL<(mnJ=x`RHT-u6fIm-HV>iTc_RCh$*aQWTU{ii9#tKbiNp^c`iD zqA{8t4YQk}<$Qx5X173#r6y=88fk~2t5RolUFw7`qp|h~bXyvQ?n}eaO=%3ei^kdG z&}wM{T8SpvE6`?X8CokXLF=VOXd{|x??H#9UFfK^109#Pp_6EaeFp89PN2QgIka0k zg?6IZ_C0i3x`i%EchFhs0XmQ7+RxAd=>@>*ivBFM=%pNQ3 z49M)U!cK)uRV(d$;qzA71;Xd8w6h_z$4a{hGW)Kyb0Aa8N;?<&y*3XryREbfA(MHf zodua%R@oJhsbG~|3YoR5>`KVgvdS)j%pR-kGRWjxWfw!g*Oo&j^D4Uaa+jWqsYPDStnF`j}ZNf*_ z*sYLRvBvI%Oy)IqFfuFF*kQ=jvc~R)%pPm(&dBV$#%_;(=j({fIo8^JkXgId?iW6~ z)*kR@v+DI$RJG2Yf=uRh_9$d3SZ9wxrh@hMlJI%!?PcNf*4rzP$+F&Fg-iwO z?KQ~kvEE*QOa<%hImqN&Z_h)&^DRQAstxuoWU_3qw;@x@273=O`8L@5kjb~fUWZJU z4fYOXD&1gjKqlV?dlNFdZLqf>lX;_k44Hfz?GwnX*l3?ZX19&@8D#d@X#ayu=8g8h z$mH8-A3`SIM*9f*o$nknwQRDlgpY2rFCepalYIx7%$w|c$YkDRKR~}%TtX)ECi@mL zwQRDlA(MHNeFK?Fx7x3e$+y-1_$T%inao@5pQxr3VG@6)AVos8rSFWIeYe_Ch}D(e z5HtI3wcjCgqOJCS$n3k-{)|j5+ijN>6(tLmmuyrS?X=?|vv#K)h)ktB?NrEAu+t7e zrskb?YGls4(@ucQ9y{$IWcJu;r$DCqopu^jRf>a5eLL+W$eePgoeY_C?6xzY`e?6R z4mFm_pbk<2)KDscno5OGbEybwDOEtNrDCY9R0_32r|o&DzqAAmm1dwW(lXRlT7|kx zD^O2q7V0g{L4BnKXrQzR4MykfedxAy0qvA7q21C8v{yQU)=DSPM(GsVEFD7or5osg zbPFAn?x4fcJ#(U-{6J52_P3HRnx?yKRE72{x0h%wBL&K$NXtq=X z&6S##ueUl%Lo)I{@vL;-H=Ahn)#Elv1P8QWjKJN`=Zx zL8zjX1XY%jp{h~}R9y;0HKjDDwv-Oll`^3ED6-QEEzD%p37JYGJN3|Z#hReKQZuw) zYJhf1ZO~#V7%i2mpyg6Wv{I^rc1xYnYN-}lE44@SrD|xsR0D048llZn3$ztQal+7Q zs*mDyLn~1PzG-nJl=ZNM^K&F;x&M;)o z8_gMk%)Zf_QONWvnll8MzC?4zA#?I*&J<+&7tNW54iJm(%tGs_FS;`atwny$CUlii zKW7y>FReirrFH1CbOV_a`8g+$snpNeg04&3&`oIvx-IQOccne(zO)aSp87c(&{64M zWP0!C975)1{G3JTxO4=WUimr4km;45a}Alk_&F=kS?LTi9rAO|A=4p0=K?Yv@^daB z(^Eg^3Njt?b50@CH9zMcWbW6`xrI#E{G2<;JR5$_5_D2phE5}oa}RB%e;(%n+K4RY zGcpxe&R1kAu$&j@q4W`%-7M!PGPPJvgsH!4v7Bhg>}xrZkU5*>L_wzGmh+tz<{Xyu z3_X=zp~uo2WIALy?~v(`<@|@t9r+v&S+-N3&xwJyBG<7|V-(YIk=fVZ>4wa1{!TUY zR;q#COSRAksSf%i)kEek{hbEL^v~aEgv?#~J57+eOMj;sGWGd8Es&|t-)V(Ref~}v z^hIieOo#lPU}QS!@3cpzlm1ReWP0H5bV89UdY_9zf%dlMgh(sWU2~qh9OfyfHMl2eFK~+$gB-;#voHcfHMJ^Jp!Cb$n-D3 z8G%gA0Zt$EOX`PA4+5NV$kZ3$3_zwE0nQL)P9ED?hRnXPoh``h7Ta0!XLJQJnPWS1 zkm+u0XB9H_#dg*pQ&ntd9Wr~wb~YeWUuV1?My@F zR%1K!kf}MgvjCY&V>^qG=}=tf6bj)Pit8Lh?W8j(R62*cNJmgt=>qC5T|zyjE2y`0 z1ND_opbpX<)L*)X21>V3Q|SR}E;=$wkX0 z51K0lpqWw(G#dpv$xv}A2`VZDp^_-ElM6kkLrI)G=q9l=PA_y(>VwWo{m^--2Rbbc zK$oRK=qgI*j6m0=QRt*J1|38hoJr{KEJiDkzqAB7(lQiNdWH&1=g=>$eS!)qHVr*i zY#(|moj}i}f6+^68+t9RL2spX=)Lp~{jO>Q`k>ewWNOafY(k%;SLlnh1$~oVpdZo{ z6j4>pK#`?cD5^9EMVICwKWPE-N{f(BT7_auJ5XF{7m6?KK?$XQP$KCNN-P~gNu^^b zxpWGpl+K{PqzfpmbP1)GuAq$4HI!MpfwD@sPDLxupjvuk;AzN12@OXg__) z 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

  • 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 z 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ⅅ1QU9 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

    dq&u~~~PRP?K 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 literal 0 HcmV?d00001 From f613327df6ef93ae54e78a65b4b3d221c1850994 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 30 Jun 2017 01:18:48 +0200 Subject: [PATCH 029/452] Refactor ToastifyAPI project - PluginBase project is now a part of ToastifyAPI project. - ToastifyAPI project should handle methods and classes that vary based on the version of Windows, and that require particular references (e.g. WinRT APIs); for example, the GetSpotifyPath method can return the URI of a UWP application in Windows 10 or the path of the desktop application, but it can only return the latter in Window 7. --- ExamplePlugin/ExamplePlugin.cs | 4 +- ExamplePlugin/ExamplePlugin.csproj | 12 +- InstallationScript/Install.nsi | 31 ++--- PluginBase/PluginBase.csproj | 116 ----------------- PluginBase/PluginBase.csproj.vspscc | 10 -- Toastify.sln | 42 +++--- Toastify/Toastify.csproj | 54 ++------ Toastify/app.manifest | 2 +- Toastify/post-build.cmd | 9 +- Toastify/src/Core/Spotify.cs | 39 ++---- .../Events/SpotifyTrackChangedEventArgs.cs | 4 +- Toastify/src/UI/Toast.xaml.cs | 4 +- Toastify/src/Win32API.cs | 13 -- .../Events}/SpotifyTrackChangedEventArgs.cs | 2 +- .../Plugins}/IPluginBase.cs | 3 +- .../Properties/AssemblyInfo.cs | 71 +++++----- ToastifyAPI/Spotify.cs | 33 +++++ ToastifyAPI/Spotify.uwp.cs | 17 +++ ToastifyAPI/Spotify.win32.cs | 14 ++ ToastifyAPI/ToastifyAPI.csproj | 123 ++++++++++++++++++ ToastifyAPI/Win32API.cs | 6 + ToastifyAPI/Win32API.uwp.cs | 20 +++ ToastifyAPI/multiple.proj | 23 ++++ 23 files changed, 350 insertions(+), 302 deletions(-) delete mode 100644 PluginBase/PluginBase.csproj delete mode 100644 PluginBase/PluginBase.csproj.vspscc rename {PluginBase => ToastifyAPI/Events}/SpotifyTrackChangedEventArgs.cs (93%) rename {PluginBase => ToastifyAPI/Plugins}/IPluginBase.cs (94%) rename {PluginBase => ToastifyAPI}/Properties/AssemblyInfo.cs (69%) create mode 100644 ToastifyAPI/Spotify.cs create mode 100644 ToastifyAPI/Spotify.uwp.cs create mode 100644 ToastifyAPI/Spotify.win32.cs create mode 100644 ToastifyAPI/ToastifyAPI.csproj create mode 100644 ToastifyAPI/Win32API.cs create mode 100644 ToastifyAPI/Win32API.uwp.cs create mode 100644 ToastifyAPI/multiple.proj diff --git a/ExamplePlugin/ExamplePlugin.cs b/ExamplePlugin/ExamplePlugin.cs index 8afab14d..0683eae5 100644 --- a/ExamplePlugin/ExamplePlugin.cs +++ b/ExamplePlugin/ExamplePlugin.cs @@ -1,5 +1,7 @@ using System; -using Toastify.Plugin; +using ToastifyAPI; +using ToastifyAPI.Events; +using ToastifyAPI.Plugins; namespace ExamplePlugin { diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index 29e20416..f3eede4a 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -87,12 +87,6 @@ - - - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8} - PluginBase - - False @@ -110,6 +104,12 @@ true + + + {5d68931f-528f-4d95-89be-3eb26832af8c} + ToastifyAPI + + - \ No newline at end of file diff --git a/PluginBase/PluginBase.csproj.vspscc b/PluginBase/PluginBase.csproj.vspscc deleted file mode 100644 index feffdeca..00000000 --- a/PluginBase/PluginBase.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Toastify.sln b/Toastify.sln index 406919ba..75167188 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26430.14 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugin", "Plugin", "{64E51A59-02A2-4423-8DE1-F337D479E3B7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installation", "Installation", "{FCD4BE87-8354-47A1-85DE-709E35559000}" ProjectSection(SolutionItems) = preProject InstallationScript\DotNET.nsh = InstallationScript\DotNET.nsh @@ -13,18 +11,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installation", "Installatio EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toastify", "Toastify\Toastify.csproj", "{CCC4A761-56D2-4188-807F-F7A547DFB031}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginBase", "PluginBase\PluginBase.csproj", "{4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExamplePlugin", "ExamplePlugin\ExamplePlugin.csproj", "{68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoHotkey.Interop", "AutoHotkey.Interop\AutoHotkey.Interop.csproj", "{2869DBFE-7762-4930-95EA-2B0C111CF353}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToastifyAPI", "ToastifyAPI\ToastifyAPI.csproj", "{5D68931F-528F-4D95-89BE-3EB26832AF8C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Windows (Debug)|Any CPU = Windows (Debug)|Any CPU Windows (Debug)|x64 = Windows (Debug)|x64 Windows (Release)|Any CPU = Windows (Release)|Any CPU Windows (Release)|x64 = Windows (Release)|x64 + zzz_ToastifyAPI (UWP)|Any CPU = zzz_ToastifyAPI (UWP)|Any CPU + zzz_ToastifyAPI (UWP)|x64 = zzz_ToastifyAPI (UWP)|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU @@ -35,22 +35,14 @@ Global {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.ActiveCfg = Windows (Release)|x64 {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|x64.ActiveCfg = Debug|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Debug)|x64.Build.0 = Debug|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|x64.ActiveCfg = Release|x64 - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8}.Windows (Release)|x64.Build.0 = Release|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Windows (Debug)|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.ActiveCfg = Debug|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.Build.0 = Debug|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|x64.ActiveCfg = Release|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|x64.Build.0 = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Debug|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Debug|x64 {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|Any CPU.Build.0 = Debug|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Debug)|x64.ActiveCfg = Debug|x64 @@ -59,12 +51,22 @@ Global {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|Any CPU.Build.0 = Release|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|x64.ActiveCfg = Release|x64 {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|x64.Build.0 = Release|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Debug|Any CPU + {2869DBFE-7762-4930-95EA-2B0C111CF353}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Debug|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|x64.ActiveCfg = Windows (Debug)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|x64.Build.0 = Windows (Debug)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|x64.ActiveCfg = Windows (Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Windows (UWP) (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|Any CPU.Build.0 = Windows (UWP) (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Windows (UWP) (Debug)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Windows (UWP) (Debug)|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8} = {64E51A59-02A2-4423-8DE1-F337D479E3B7} - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40} = {64E51A59-02A2-4423-8DE1-F337D479E3B7} - EndGlobalSection EndGlobal diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 59fc9b01..afda991c 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -14,6 +14,7 @@ 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 + app.manifest Resources\spotify.ico Toastify.EntryPoint @@ -74,7 +75,6 @@ bin\Release\Windows\ TRACE true - pdbonly AnyCPU prompt AllRules.ruleset @@ -87,33 +87,6 @@ prompt AllRules.ruleset - - app.manifest - - - - - - - - - ..\packages\Windows\10.0.14393\Windows.winmd - False - - - - - False - Exclude - True - Assembly - - - - ..\packages\Garlic.2.1.0.0\lib\net35\Garlic.dll @@ -235,9 +208,9 @@ {2869dbfe-7762-4930-95ea-2b0c111cf353} AutoHotkey.Interop - - {4F92BE1F-A5CC-4604-9185-1F09DDAFC7B8} - PluginBase + + {5d68931f-528f-4d95-89be-3eb26832af8c} + ToastifyAPI @@ -274,19 +247,14 @@ Always - - - False - Exclude - True - - - - - Assembly - - + + + "$(ProjectDir)post-build.cmd" "$(ConfigurationName)" "$(DevEnvDir)" "$(SolutionDir)" "$(TargetDir)" "$(TargetFileName)" diff --git a/Toastify/app.manifest b/Toastify/app.manifest index 8bd4ea69..e6912e92 100644 --- a/Toastify/app.manifest +++ b/Toastify/app.manifest @@ -21,7 +21,7 @@ - + diff --git a/Toastify/post-build.cmd b/Toastify/post-build.cmd index 754ef46d..91b81ee2 100644 --- a/Toastify/post-build.cmd +++ b/Toastify/post-build.cmd @@ -1,12 +1,15 @@ @ECHO OFF +SetLocal EnableExtensions EnableDelayedExpansion + SET ConfigurationName=%~1 SET DevEnvDir=%~2 SET SolutionDir=%~3 SET TargetDir=%~4 SET TargetFileName=%~5 -IF "%ConfigurationName:~0,7%"=="Windows" ( +IF "%ConfigurationName:~0,7%"=="Windows" IF NOT "x%ConfigurationName:Release=%"=="x%ConfigurationName%" ( + :: It's a Windows Release configuration ECHO - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" @@ -17,4 +20,6 @@ IF "%ConfigurationName:~0,7%"=="Windows" ( ECHO - Copy install script COPY /Y "%SolutionDir%InstallationScript\Install.nsi" "%TargetDir%Install.nsi" COPY /Y "%SolutionDir%InstallationScript\DotNET.nsh" "%TargetDir%DotNET.nsh" -) \ No newline at end of file +) + +EndLocal \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 1fd0cda2..4d4a7f2b 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,15 +1,12 @@ using AutoHotkey.Interop; -using Microsoft.Win32; using SpotifyAPI.Local; using System; using System.Diagnostics; -using System.IO; using System.Threading; using System.Windows; using Toastify.Events; using Toastify.Helpers; using Toastify.Services; -using Windows.ApplicationModel; namespace Toastify.Core { @@ -272,36 +269,16 @@ private void SendComplexKeys(string keys) private string GetSpotifyPath() { - string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; - - // Try in the secondary location. - if (string.IsNullOrEmpty(spotifyPath)) - spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; - - // If it's still null, then search for the UWP app (Windows 10 only). - if (string.IsNullOrEmpty(spotifyPath) && - Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 10) + string spotifyPath = null; + try { - Package spotifyPackage = null; - try - { - spotifyPackage = Win32API.UWP.FindPackage("SpotifyAB.SpotifyMusic"); - } - catch (UnauthorizedAccessException) - { - MessageBox.Show("This program must be run as administrator.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); - Environment.Exit(69); - } - - if (spotifyPackage != null) - spotifyPath = $@"shell:AppsFolder\{spotifyPackage.Id.FamilyName}!Spotify"; + spotifyPath = ToastifyAPI.Spotify.GetSpotifyPath(); + } + catch (UnauthorizedAccessException) + { + MessageBox.Show("This program must be run as administrator.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + Environment.Exit(69); } - else if (!string.IsNullOrEmpty(spotifyPath)) - spotifyPath = Path.Combine(spotifyPath, "Spotify.exe"); - - if (string.IsNullOrEmpty(spotifyPath)) - throw new ArgumentException("Could not find spotify path."); - return spotifyPath; } diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs index 68efc66f..6198badc 100644 --- a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -15,9 +15,9 @@ public SpotifyTrackChangedEventArgs(Song previousSong, Song newSong, bool playin this.Playing = playing; } - public static implicit operator Plugin.SpotifyTrackChangedEventArgs(SpotifyTrackChangedEventArgs e) + public static implicit operator ToastifyAPI.Events.SpotifyTrackChangedEventArgs(SpotifyTrackChangedEventArgs e) { - return new Plugin.SpotifyTrackChangedEventArgs(e.NewSong.Artist, e.NewSong.Album, e.NewSong.Track); + return new ToastifyAPI.Events.SpotifyTrackChangedEventArgs(e.NewSong.Artist, e.NewSong.Album, e.NewSong.Track); } } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 316838d8..a32b6eaf 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -19,8 +19,8 @@ using Toastify.Core; using Toastify.Events; using Toastify.Helpers; -using Toastify.Plugin; using Toastify.Services; +using ToastifyAPI.Plugins; using Application = System.Windows.Application; using Clipboard = System.Windows.Clipboard; using Color = System.Windows.Media.Color; @@ -726,7 +726,7 @@ private void Spotify_Connected(object sender, SpotifyStateEventArgs e) this.UpdateCurrentSong(e.CurrentSong); } - private void Spotify_SongChanged(object sender, Core.SpotifyTrackChangedEventArgs e) + private void Spotify_SongChanged(object sender, SpotifyTrackChangedEventArgs e) { if (e.NewSong == null || !e.NewSong.IsValid()) return; diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 23a2e2ae..73c7df40 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -2,14 +2,11 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; -using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using System.Windows.Interop; -using Windows.ApplicationModel; -using Windows.Management.Deployment; namespace Toastify { @@ -360,15 +357,5 @@ internal struct Rect } #endregion Internal classes and structs - - internal static class UWP - { - public static Package FindPackage(string name) - { - PackageManager packageManager = new PackageManager(); - var packages = packageManager.FindPackages(); - return packages.FirstOrDefault(package => package.Id.Name == name); - } - } } } \ No newline at end of file diff --git a/PluginBase/SpotifyTrackChangedEventArgs.cs b/ToastifyAPI/Events/SpotifyTrackChangedEventArgs.cs similarity index 93% rename from PluginBase/SpotifyTrackChangedEventArgs.cs rename to ToastifyAPI/Events/SpotifyTrackChangedEventArgs.cs index 20e7a9fb..f6b6c3e1 100644 --- a/PluginBase/SpotifyTrackChangedEventArgs.cs +++ b/ToastifyAPI/Events/SpotifyTrackChangedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Toastify.Plugin +namespace ToastifyAPI.Events { public class SpotifyTrackChangedEventArgs : EventArgs { diff --git a/PluginBase/IPluginBase.cs b/ToastifyAPI/Plugins/IPluginBase.cs similarity index 94% rename from PluginBase/IPluginBase.cs rename to ToastifyAPI/Plugins/IPluginBase.cs index 8941c6fc..486bd809 100644 --- a/PluginBase/IPluginBase.cs +++ b/ToastifyAPI/Plugins/IPluginBase.cs @@ -1,6 +1,7 @@ using System; +using ToastifyAPI.Events; -namespace Toastify.Plugin +namespace ToastifyAPI.Plugins { public interface IPluginBase : IDisposable { diff --git a/PluginBase/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs similarity index 69% rename from PluginBase/Properties/AssemblyInfo.cs rename to ToastifyAPI/Properties/AssemblyInfo.cs index cb694a1e..dbf26279 100644 --- a/PluginBase/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -1,36 +1,35 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PluginBase")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("PluginBase")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d7229ff5-9d92-4bd3-876c-642ee9e4321e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ToastifyAPI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Alessandro Attard Barbini")] +[assembly: AssemblyProduct("ToastifyAPI")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5d68931f-528f-4d95-89be-3eb26832af8c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.9.1.*")] diff --git a/ToastifyAPI/Spotify.cs b/ToastifyAPI/Spotify.cs new file mode 100644 index 00000000..47d0ca96 --- /dev/null +++ b/ToastifyAPI/Spotify.cs @@ -0,0 +1,33 @@ +using Microsoft.Win32; +using System; +using System.IO; + +namespace ToastifyAPI +{ + public static partial class Spotify + { + public static string GetSpotifyPath() + { + string spotifyPath = GetSpotifyPath_common() ?? GetSpotifyPath_platform(); + + if (string.IsNullOrEmpty(spotifyPath)) + throw new ArgumentException("Could not find spotify path."); + + return spotifyPath; + } + + private static string GetSpotifyPath_common() + { + string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + + // Try in the secondary location. + if (string.IsNullOrEmpty(spotifyPath)) + spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + + if (!string.IsNullOrEmpty(spotifyPath)) + spotifyPath = Path.Combine(spotifyPath, "Spotify.exe"); + + return spotifyPath; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Spotify.uwp.cs b/ToastifyAPI/Spotify.uwp.cs new file mode 100644 index 00000000..7f4bde88 --- /dev/null +++ b/ToastifyAPI/Spotify.uwp.cs @@ -0,0 +1,17 @@ +#if WIN_10 + +using Windows.ApplicationModel; + +namespace ToastifyAPI +{ + public static partial class Spotify + { + private static string GetSpotifyPath_platform() + { + Package spotifyPackage = Win32API.FindPackage("SpotifyAB.SpotifyMusic"); + return spotifyPackage != null ? $@"shell:AppsFolder\{spotifyPackage.Id.FamilyName}!Spotify" : null; + } + } +} + +#endif \ No newline at end of file diff --git a/ToastifyAPI/Spotify.win32.cs b/ToastifyAPI/Spotify.win32.cs new file mode 100644 index 00000000..d4b99bcd --- /dev/null +++ b/ToastifyAPI/Spotify.win32.cs @@ -0,0 +1,14 @@ +#if !WIN_10 + +namespace ToastifyAPI +{ + public static partial class Spotify + { + private static string GetSpotifyPath_platform() + { + return GetSpotifyPath_common(); + } + } +} + +#endif \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj new file mode 100644 index 00000000..85bb7225 --- /dev/null +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -0,0 +1,123 @@ + + + + + Windows (Debug) + x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C} + Library + Properties + ToastifyAPI + ToastifyAPI + v4.5.2 + 512 + + + + true + bin\Debug\Windows\ + DEBUG;TRACE + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + true + bin\x64\Debug\Windows\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + + + bin\Release\Windows\ + TRACE + true + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\Windows\ + TRACE + true + x64 + prompt + MinimumRecommendedRules.ruleset + + + true + bin\Debug\Windows 10\ + DEBUG;TRACE + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + true + bin\x64\Debug\Windows 10\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + + + bin\Release\Windows 10\ + TRACE + true + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\Windows 10\ + TRACE + true + x64 + prompt + MinimumRecommendedRules.ruleset + + + + + $(DefineConstants);WIN_10 + 10.0.14393.0 + 10.0.10240.0 + + + + ..\packages\Windows\10.0.14393\Windows.winmd + False + + + + + False + Exclude + True + Assembly + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ToastifyAPI/Win32API.cs b/ToastifyAPI/Win32API.cs new file mode 100644 index 00000000..3fa7edc2 --- /dev/null +++ b/ToastifyAPI/Win32API.cs @@ -0,0 +1,6 @@ +namespace ToastifyAPI +{ + internal static partial class Win32API + { + } +} \ No newline at end of file diff --git a/ToastifyAPI/Win32API.uwp.cs b/ToastifyAPI/Win32API.uwp.cs new file mode 100644 index 00000000..0c611a90 --- /dev/null +++ b/ToastifyAPI/Win32API.uwp.cs @@ -0,0 +1,20 @@ +#if WIN_10 + +using System.Linq; +using Windows.ApplicationModel; +using Windows.Management.Deployment; + +namespace ToastifyAPI +{ + internal static partial class Win32API + { + internal static Package FindPackage(string name) + { + PackageManager packageManager = new PackageManager(); + var packages = packageManager.FindPackages(); + return packages.FirstOrDefault(package => package.Id.Name == name); + } + } +} + +#endif \ No newline at end of file diff --git a/ToastifyAPI/multiple.proj b/ToastifyAPI/multiple.proj new file mode 100644 index 00000000..fcbb1134 --- /dev/null +++ b/ToastifyAPI/multiple.proj @@ -0,0 +1,23 @@ + + + + + + + + Configuration=Windows (UWP) (Debug) + + + + + + + Configuration=Windows (UWP) (Release) + + + + + + + + \ No newline at end of file From a1c0addb8767e616d4e63a8c0b129ec12299149c Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 30 Jun 2017 01:34:31 +0200 Subject: [PATCH 030/452] v1.9.2 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index d38fb422..dbbf7501 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -75,8 +75,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.1" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.2" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.2" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index d3c0d128..1e555cba 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.1.*")] +[assembly: AssemblyVersion("1.9.2.*")] diff --git a/Toastify/version b/Toastify/version index ac8947ae..92f55ca7 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.1 \ No newline at end of file +1.9.2 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index dbf26279..aaecdd60 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.1.*")] +[assembly: AssemblyVersion("1.9.2.*")] From a590eba9a2269f46f44609d90943c0ac68a92fa9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 30 Jun 2017 12:25:56 +0200 Subject: [PATCH 031/452] Close Toastify when Spotify is closed --- Toastify/src/Core/Spotify.cs | 41 ++++++++++++++++++++++++----------- Toastify/src/UI/Toast.xaml.cs | 11 +++++++++- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 4d4a7f2b..c35fc6cc 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -2,6 +2,7 @@ using SpotifyAPI.Local; using System; using System.Diagnostics; +using System.Linq; using System.Threading; using System.Windows; using Toastify.Events; @@ -27,7 +28,7 @@ public static Spotify Instance private AutoHotkeyEngine ahk; - private SpotifyLocalAPI localAPI; + private readonly SpotifyLocalAPI localAPI; private readonly string spotifyPath; @@ -68,6 +69,8 @@ public Song CurrentSong #region Events + public event EventHandler Exited; + public event EventHandler Connected; public event EventHandler SongChanged; @@ -97,22 +100,29 @@ protected Spotify() public void StartSpotify() { - if (this.IsRunning) + if (!this.IsRunning) { - this.localAPI.Connect(); - this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); - return; - } - - // Launch Spotify. - this.spotifyProcess = Process.Start(this.spotifyPath); + // Launch Spotify. + this.spotifyProcess = Process.Start(this.spotifyPath); - if (SettingsXml.Instance.MinimizeSpotifyOnStartup) - this.Minimize(); + if (SettingsXml.Instance.MinimizeSpotifyOnStartup) + this.Minimize(); + else + { + // We need to let Spotify start up before interacting with it fully. + Thread.Sleep(3000); + } + } else { - // We need to let Spotify start up before interacting with it fully. - Thread.Sleep(3000); + var processes = Process.GetProcessesByName("spotify"); + this.spotifyProcess = processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); + } + + if (this.spotifyProcess != null) + { + this.spotifyProcess.EnableRaisingEvents = true; + this.spotifyProcess.Exited += this.Spotify_Exited; } this.localAPI.Connect(); @@ -289,6 +299,11 @@ public void Dispose() #region Event handlers + private void Spotify_Exited(object sender, EventArgs e) + { + this.Exited?.Invoke(sender, e); + } + private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e) { this.CurrentSong = e.NewTrack; diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index a32b6eaf..1d7ca749 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -88,6 +88,7 @@ private void Init() this.StartSpotifyOrAskUser(); // Subscribe to Spotify's events (i.e. SpotifyLocalAPI's). + Spotify.Instance.Exited += this.Application_Shutdown; Spotify.Instance.SongChanged += this.Spotify_SongChanged; Spotify.Instance.PlayStateChanged += this.Spotify_PlayStateChanged; Spotify.Instance.TrackTimeChanged += this.Spotify_TrackTimeChanged; @@ -188,7 +189,7 @@ private void InitTrayIcon() menuAbout.Click += (s, ev) => { new About().ShowDialog(); }; MenuItem menuExit = new MenuItem { Text = @"Exit" }; - menuExit.Click += (s, ev) => { Application.Current.Shutdown(); }; //this.Close(); }; + menuExit.Click += this.Application_Shutdown; this.trayIcon.ContextMenu.MenuItems.Add(menuSettings); this.trayIcon.ContextMenu.MenuItems.Add(menuAbout); @@ -759,6 +760,14 @@ private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEven #region Event handlers + private void Application_Shutdown(object sender, EventArgs e) + { + Application.Current.Dispatcher.BeginInvoke( + DispatcherPriority.Normal, + new Action(() => Application.Current.Shutdown())); + // this.Close(); + } + private void Toast_Deactivated(object sender, EventArgs e) { this.Topmost = true; From 869c333c5e62426357fb3704d1cbdb2c51946be7 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 30 Jun 2017 21:12:27 +0200 Subject: [PATCH 032/452] Modified Win32API --- Toastify/Toastify.csproj | 8 +- Toastify/src/Helpers/WindowExtensions.cs | 15 +++ Toastify/src/UI/Toast.xaml.cs | 4 +- Toastify/src/Win32API.cs | 146 +++++++++++++++-------- 4 files changed, 115 insertions(+), 58 deletions(-) create mode 100644 Toastify/src/Helpers/WindowExtensions.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index afda991c..aedf5077 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -128,6 +128,7 @@ + @@ -249,11 +250,8 @@ - + + "$(ProjectDir)post-build.cmd" "$(ConfigurationName)" "$(DevEnvDir)" "$(SolutionDir)" "$(TargetDir)" "$(TargetFileName)" diff --git a/Toastify/src/Helpers/WindowExtensions.cs b/Toastify/src/Helpers/WindowExtensions.cs new file mode 100644 index 00000000..f8148c9e --- /dev/null +++ b/Toastify/src/Helpers/WindowExtensions.cs @@ -0,0 +1,15 @@ +using System; +using System.Windows; +using System.Windows.Interop; + +namespace Toastify.Helpers +{ + internal static class WindowExtensions + { + public static IntPtr GetHandle(this Window window) + { + WindowInteropHelper wndHelper = new WindowInteropHelper(window); + return wndHelper.Handle; + } + } +} \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1d7ca749..316e9302 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -397,7 +397,7 @@ private void UpdateToastText(string title1, string title2 = "", bool fadeIn = tr private void FadeIn(bool force = false, bool isUpdate = false) { // If a full screen application is running (e.g. a videogame), do not fade in. - if (Win32API.IsAnyAppRunningInFullscreen()) + if (Win32API.IsForegroundAppRunningInFullscreen()) return; this.minimizeTimer?.Stop(); @@ -416,7 +416,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) #if DEBUG var rv = #endif - Win32API.SetThreadExecutionState(Win32API.ExecutionState.EsSystemRequired); + Win32API.SetThreadExecutionState(Win32API.ExecutionState.ES_SYSTEM_REQUIRED); #if DEBUG Debug.WriteLine("** SetThreadExecutionState returned: " + rv); #endif diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 73c7df40..f721a0b3 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -6,8 +6,9 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Windows.Interop; +using Toastify.Helpers; +// ReSharper disable InconsistentNaming namespace Toastify { [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] @@ -40,13 +41,10 @@ internal static class Win32API internal static extern int GetWindowTextLength(IntPtr hWnd); [DllImport("user32.dll")] - private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); + private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex); - [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] - private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong); - - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] - private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + [DllImport("user32.dll", SetLastError = true)] + private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwNewLong); [DllImport("user32.dll")] internal static extern IntPtr GetForegroundWindow(); @@ -86,33 +84,6 @@ internal static class Win32API #endregion DLL imports - private static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong) - { - int error; - IntPtr result; - // Win32API SetWindowLong doesn't clear error on success - SetLastError(0); - - if (IntPtr.Size == 4) - { - // use SetWindowLong - Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong)); - error = Marshal.GetLastWin32Error(); - result = new IntPtr(tempResult); - } - else - { - // use SetWindowLongPtr - result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong); - error = Marshal.GetLastWin32Error(); - } - - if (result == IntPtr.Zero && error != 0) - throw new System.ComponentModel.Win32Exception(error); - - return result; - } - public static void KillProc(string name) { // let's play nice and try to gracefully clear out all Sync processes @@ -156,23 +127,23 @@ public static void KillProc(string name) } } - private static int IntPtrToInt32(IntPtr intPtr) + public static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) { - return unchecked((int)intPtr.ToInt64()); + long longPtr = (long)GetWindowLongPtr(hWnd, nIndex); + longPtr |= (long)dwLong; + SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); } public static void AddToolWindowStyle(System.Windows.Window window) { - WindowInteropHelper wndHelper = new WindowInteropHelper(window); - int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle); - exStyle |= (int)ExtendedWindowStyles.WsExToolwindow; - SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GwlExstyle, (IntPtr)exStyle); + AddWindowLongPtr(window.GetHandle(), GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStyles.WS_EX_TOOLWINDOW); } - public static bool IsAnyAppRunningInFullscreen() + public static bool IsForegroundAppRunningInFullscreen() { // Get the dimensions of the active window. IntPtr hWnd = GetForegroundWindow(); + if (!hWnd.Equals(IntPtr.Zero)) { // Check we haven't picked up the desktop or the shell. @@ -297,26 +268,99 @@ internal enum SetWindowPosFlags : uint ShowWindow = 0x0040, } + ///

    + /// Values to use with . + /// + internal enum GWL + { + GWL_EXSTYLE = -20, + GWL_HINSTANCE = -6, + GWL_HWNDPARENT = -8, + GWL_ID = -12, + GWL_STYLE = -16, + GWL_USERDATA = -21, + GWL_WNDPROC = -4 + } + + + /// + /// Window styles (). + /// [Flags] - public enum ExtendedWindowStyles + internal enum WindowStyles : long { - WsExToolwindow = 0x00000080, + WS_BORDER = 0x00800000L, + WS_CAPTION = 0x00C00000L, + WS_CHILD = 0x40000000L, + WS_CHILDWINDOW = 0x40000000L, + WS_CLIPCHILDREN = 0x02000000L, + WS_CLIPSIBLINGS = 0x04000000L, + WS_DISABLED = 0x08000000L, + WS_DLGFRAME = 0x00400000L, + WS_GROUP = 0x00020000L, + WS_HSCROLL = 0x00100000L, + WS_ICONIC = 0x20000000L, + WS_MAXIMIZE = 0x01000000L, + WS_MAXIMIZEBOX = 0x00010000L, + WS_MINIMIZE = 0x20000000L, + WS_MINIMIZEBOX = 0x00020000L, + WS_OVERLAPPED = 0x00000000L, + WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, + WS_POPUP = 0x80000000L, + WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU, + WS_SIZEBOX = 0x00040000L, + WS_SYSMENU = 0x00080000L, + WS_TABSTOP = 0x00010000L, + WS_THICKFRAME = 0x00040000L, + WS_TILED = 0x00000000L, + WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, + WS_VISIBLE = 0x10000000L, + WS_VSCROLL = 0x00200000L } - public enum GetWindowLongFields + /// + /// Extended window styles (). + /// + [Flags] + internal enum ExtendedWindowStyles : long { - GwlExstyle = -20, + WS_EX_ACCEPTFILES = 0x00000010L, + WS_EX_APPWINDOW = 0x00040000L, + WS_EX_CLIENTEDGE = 0x00000200L, + WS_EX_COMPOSITED = 0x02000000L, + WS_EX_CONTEXTHELP = 0x00000400L, + WS_EX_CONTROLPARENT = 0x00010000L, + WS_EX_DLGMODALFRAME = 0x00000001L, + WS_EX_LAYERED = 0x00080000L, + WS_EX_LAYOUTRTL = 0x00400000L, + WS_EX_LEFT = 0x00000000L, + WS_EX_LEFTSCROLLBAR = 0x00004000L, + WS_EX_LTRREADING = 0x00000000L, + WS_EX_MDICHILD = 0x00000040L, + WS_EX_NOACTIVATE = 0x08000000L, + WS_EX_NOINHERITLAYOUT = 0x00100000L, + WS_EX_NOPARENTNOTIFY = 0x00000004L, + WS_EX_NOREDIRECTIONBITMAP = 0x00200000L, + WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE, + WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST, + WS_EX_RIGHT = 0x00001000L, + WS_EX_RIGHTSCROLLBAR = 0x00000000L, + WS_EX_RTLREADING = 0x00002000L, + WS_EX_STATICEDGE = 0x00020000L, + WS_EX_TOOLWINDOW = 0x00000080L, + WS_EX_TOPMOST = 0x00000008L, + WS_EX_TRANSPARENT = 0x00000020L, + WS_EX_WINDOWEDGE = 0x00000100L } [Flags] public enum ExecutionState : uint { - EsAwaymodeRequired = 0x00000040, - EsContinuous = 0x80000000, - EsDisplayRequired = 0x00000002, - EsSystemRequired = 0x00000001 - // Legacy flag, should not be used. - // ES_USER_PRESENT = 0x00000004 + ES_AWAYMODE_REQUIRED = 0x00000040, + ES_CONTINUOUS = 0x80000000, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_SYSTEM_REQUIRED = 0x00000001, + ES_USER_PRESENT = 0x00000004 // Legacy flag, should not be used. } #endregion Enums From f8c003f9fddcd607058822cd4a71742721feaf4e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 30 Jun 2017 21:14:17 +0200 Subject: [PATCH 033/452] The toast will fade-in if a fullscreen app is 'windowed borderless' (e.g. a videogame) --- Toastify/src/Win32API.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index f721a0b3..7ecd67db 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -152,8 +152,15 @@ public static bool IsForegroundAppRunningInFullscreen() GetWindowRect(hWnd, out Rect appBounds); // Determine if window is fullscreen. + WindowStyles windowStyles = (WindowStyles)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); Rectangle screenBounds = Screen.FromHandle(hWnd).Bounds; - if (appBounds.bottom - appBounds.top == screenBounds.Height && appBounds.right - appBounds.left == screenBounds.Width) + + // - 'fullscreen' applications have WS_MAXIMIZE style; + // - 'windowed borderless' applications (e.g. videogames) don't (they have WS_POPUP, though). + bool isMaximized = (windowStyles & WindowStyles.WS_MAXIMIZE) > 0L; + bool windowFillsWholeScreen = appBounds.bottom - appBounds.top == screenBounds.Height && + appBounds.right - appBounds.left == screenBounds.Width; + if (windowFillsWholeScreen && isMaximized) return true; } } From 7d11384cad16b96b80c0ff82d3d5568cf275aea2 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 1 Jul 2017 00:03:15 +0200 Subject: [PATCH 034/452] Create README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..53d8cfd8 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Toastify + +Toastify + +Toastify adds global hotkeys and toast notifications to Spotify. + +This application uses [SpotifyAPI-NET](https://github.com/JohnnyCrazy/SpotifyAPI-NET). + +## Features +* Display the current playing track in a customizable toast-style popup +* Global hotkeys for media actions (Play/Pause, Next/Previous track, Mute, Fast Forward, Rewind) +* :heavy_exclamation_mark: Compatible with the Windows Store version of Spotify + +## Requirements +* Windows (7, 8/8.1, 10) +* .NET Framework 4.5.2 +* Spotify + +## Notice +Toastify is **not** a Spotify **replacement**. You need both running at the same time. From 884ae0bab22f95d8eb9ea7620cf9605f01c6801c Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 1 Jul 2017 00:36:17 +0200 Subject: [PATCH 035/452] Renamed LICENSE file --- LICENSE => LICENSE-3RD-PARTY | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE => LICENSE-3RD-PARTY (100%) diff --git a/LICENSE b/LICENSE-3RD-PARTY similarity index 100% rename from LICENSE rename to LICENSE-3RD-PARTY From 4acf6431c47c358aecb4c3c8725e3148f3360794 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 1 Jul 2017 00:40:12 +0200 Subject: [PATCH 036/452] Create LICENSE --- LICENSE | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..23cb7903 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. From 97cb15b479df37fa566f97396ef56d77b064d79d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 1 Jul 2017 00:50:18 +0200 Subject: [PATCH 037/452] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 53d8cfd8..d82bfe3b 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,9 @@ This application uses [SpotifyAPI-NET](https://github.com/JohnnyCrazy/SpotifyAPI ## Notice Toastify is **not** a Spotify **replacement**. You need both running at the same time. + +## License +This software is licensed under the GNU GPL-2.0; the complete license text can be found [here](/LICENSE). +See also the [original project](https://github.com/nachmore/toastify) this repository is a fork of, and its old [codeplex page](http://toastify.codeplex.com/). + +This project uses third-party libraries; their verbatim licenses can be found [here](/LICENSE-3RD-PARTY). From 7393465e378cd504b5a54b979e5a399901d77a43 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 04:51:39 +0200 Subject: [PATCH 038/452] Update app manifest for Windows 8.1 compatibility --- InstallationScript/Install.nsi | 1 + Toastify.sln | 2 ++ Toastify/app.manifest | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index dbbf7501..82a5eda1 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -10,6 +10,7 @@ OutFile "ToastifyInstaller.exe" InstallDir $PROGRAMFILES64\Toastify RequestExecutionLevel admin ManifestSupportedOS "{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" # Windows 7 +ManifestSupportedOS "{1f676c76-80e1-4239-95bb-83d0f6d0da78}" # Windows 8.1 ManifestSupportedOS "{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" # Windows 10 ;-------------------------------- diff --git a/Toastify.sln b/Toastify.sln index 75167188..357e74b8 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -37,6 +37,7 @@ Global {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Windows (Debug)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Windows (Debug)|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.ActiveCfg = Debug|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU @@ -53,6 +54,7 @@ Global {2869DBFE-7762-4930-95EA-2B0C111CF353}.Windows (Release)|x64.Build.0 = Release|x64 {2869DBFE-7762-4930-95EA-2B0C111CF353}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Debug|Any CPU {2869DBFE-7762-4930-95EA-2B0C111CF353}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Debug|x64 + {2869DBFE-7762-4930-95EA-2B0C111CF353}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Debug|x64 {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|x64.ActiveCfg = Windows (Debug)|x64 diff --git a/Toastify/app.manifest b/Toastify/app.manifest index e6912e92..5cd67962 100644 --- a/Toastify/app.manifest +++ b/Toastify/app.manifest @@ -27,7 +27,7 @@ - + From 827491e185defeb3c5c9cfba4bc0710d95868978 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 04:53:44 +0200 Subject: [PATCH 039/452] Only get packages for current user This removes the requirement of admin privileges (#2). --- Toastify/src/Core/Spotify.cs | 12 +----------- ToastifyAPI/Win32API.uwp.cs | 2 +- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index c35fc6cc..19cd4172 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -279,17 +279,7 @@ private void SendComplexKeys(string keys) private string GetSpotifyPath() { - string spotifyPath = null; - try - { - spotifyPath = ToastifyAPI.Spotify.GetSpotifyPath(); - } - catch (UnauthorizedAccessException) - { - MessageBox.Show("This program must be run as administrator.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); - Environment.Exit(69); - } - return spotifyPath; + return ToastifyAPI.Spotify.GetSpotifyPath(); } public void Dispose() diff --git a/ToastifyAPI/Win32API.uwp.cs b/ToastifyAPI/Win32API.uwp.cs index 0c611a90..6465208d 100644 --- a/ToastifyAPI/Win32API.uwp.cs +++ b/ToastifyAPI/Win32API.uwp.cs @@ -11,7 +11,7 @@ internal static partial class Win32API internal static Package FindPackage(string name) { PackageManager packageManager = new PackageManager(); - var packages = packageManager.FindPackages(); + var packages = packageManager.FindPackagesForUser(string.Empty); return packages.FirstOrDefault(package => package.Id.Name == name); } } From 5b42f7628ce7887b42f38497cd98387a657a3c34 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 20:00:27 +0200 Subject: [PATCH 040/452] Fixed error on start-up (#3) The *"Object reference not set to an instance of an object"* error was caused by Spotify not being completely loaded when Toastify tried to get its status. Actually, this was caused by a dumb null reference in Song.cs; however, the fact that Toastify started before Spotify was fully initialized, caused some unidentified problems in the connection enstablished by the local APIs which in turn were the cause of issue #1. --- Toastify/Properties/Resources.Designer.cs | 38 ++++++++ Toastify/Properties/Resources.resx | 14 +++ Toastify/Toastify.csproj | 1 + .../src/Core/ApplicationStartupException.cs | 38 ++++++++ Toastify/src/Core/SettingsXml.cs | 21 +++++ Toastify/src/Core/Song.cs | 3 + Toastify/src/Core/Spotify.cs | 88 ++++++++++++------- Toastify/src/UI/Toast.xaml.cs | 26 +++++- Toastify/src/Win32API.cs | 3 + 9 files changed, 197 insertions(+), 35 deletions(-) create mode 100644 Toastify/src/Core/ApplicationStartupException.cs diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index 2872ad28..187795f5 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -60,6 +60,44 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to An error occurred when trying to start Spotify.. + /// + internal static string ERROR_STARTUP { + get { + return ResourceManager.GetString("ERROR_STARTUP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Could not find Spotify process! + ///If Spotify is running, please open an issue at github.com/aleab/toastify.. + /// + internal static string ERROR_STARTUP_PROCESS { + get { + return ResourceManager.GetString("ERROR_STARTUP_PROCESS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error occurred when trying to start Spotify. + ///Please restart the application.. + /// + internal static string ERROR_STARTUP_RESTART { + get { + return ResourceManager.GetString("ERROR_STARTUP_RESTART", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An unknown error occurred when trying to start Spotify.. + /// + internal static string ERROR_UNKNOWN { + get { + return ResourceManager.GetString("ERROR_UNKNOWN", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index 3d2e02a7..c62e8635 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -117,6 +117,20 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + An error occurred when trying to start Spotify. + + + Could not find Spotify process! +If Spotify is running, please open an issue at github.com/aleab/toastify. + + + An error occurred when trying to start Spotify. +Please restart the application. + + + An unknown error occurred when trying to start Spotify. + ..\Resources\spotify.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index aedf5077..c08ae4b5 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -120,6 +120,7 @@ MSBuild:Compile Designer + diff --git a/Toastify/src/Core/ApplicationStartupException.cs b/Toastify/src/Core/ApplicationStartupException.cs new file mode 100644 index 00000000..997ed5c1 --- /dev/null +++ b/Toastify/src/Core/ApplicationStartupException.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using Toastify.Core; + +namespace Toastify.src.Core +{ + internal class ApplicationStartupException : ApplicationException + { + public ApplicationStartupException() : base(CreateMessage()) + { + } + + public ApplicationStartupException(string message) : base($"{CreateMessage()}\n\nAdditional details\n{message}") + { + } + + private static string CreateMessage() + { + List messages = new List(); + + bool spotifyInstanceCreated = Spotify.Instance != null; + if (spotifyInstanceCreated) + { + bool spotifyIsRunning = Spotify.Instance.IsRunning; + messages.Add($"Spotify is running: {spotifyIsRunning}"); + + var status = Spotify.Instance.Status; + messages.Add(status != null + ? $"Status: {status.Online}, {status.Running}, {status.Version}, {status.ClientVersion}, {status.Track != null}" + : "Status: null"); + } + else + messages.Add("Spotify instance not created!"); + + return string.Join(Environment.NewLine, messages); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index f6006dd2..0e991b72 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -67,6 +67,7 @@ private set private string _PreviousOS; private string _PreviousVersion; private bool _PreventSleepWhilePlaying; + private int _startupWaitTimeout; private List _HotKeys; public List Plugins { get; set; } @@ -647,6 +648,22 @@ public bool PreventSleepWhilePlaying } } + public int StartupWaitTimeout + { + get + { + return this._startupWaitTimeout; + } + set + { + if (this._startupWaitTimeout != value) + { + this._startupWaitTimeout = value; + this.NotifyPropertyChanged("StartupWaitTimeout"); + } + } + } + private SettingsXml() { this.Default(); @@ -654,6 +671,7 @@ private SettingsXml() public void Default(bool setHotKeys = false) { + this.StartupWaitTimeout = 20000; this.AlwaysStartSpotify = true; this.DontPromptToStartSpotify = false; this.CloseSpotifyWithToastify = true; @@ -784,6 +802,9 @@ private void SanitizeSettingsFile() this._HotKeys = toKeep; + // Validate StartupWaitTimeout: it cannot be negative! + this.StartupWaitTimeout = Math.Abs(this.StartupWaitTimeout); + this.Save(); } diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index b2892795..1f184c27 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -64,6 +64,9 @@ public override int GetHashCode() public static implicit operator Song(Track spotifyTrack) { + if (spotifyTrack == null) + return null; + if (spotifyTrack.IsAd()) return new Song("", ""); diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 19cd4172..3819ffaf 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,13 +1,14 @@ using AutoHotkey.Interop; using SpotifyAPI.Local; +using SpotifyAPI.Local.Models; using System; using System.Diagnostics; using System.Linq; using System.Threading; -using System.Windows; using Toastify.Events; using Toastify.Helpers; using Toastify.Services; +using Toastify.src.Core; namespace Toastify.Core { @@ -65,6 +66,8 @@ public Song CurrentSong private set { this._currentSong = value; } } + public StatusResponse Status { get { return this.localAPI?.GetStatus(); } } + #endregion Public properties #region Events @@ -100,56 +103,73 @@ protected Spotify() public void StartSpotify() { - if (!this.IsRunning) - { - // Launch Spotify. - this.spotifyProcess = Process.Start(this.spotifyPath); + int timeout = SettingsXml.Instance.StartupWaitTimeout; + this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(timeout) : this.FindSpotifyProcess(); - if (SettingsXml.Instance.MinimizeSpotifyOnStartup) - this.Minimize(); - else - { - // We need to let Spotify start up before interacting with it fully. - Thread.Sleep(3000); - } - } - else - { - var processes = Process.GetProcessesByName("spotify"); - this.spotifyProcess = processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); - } + if (this.spotifyProcess == null) + throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_PROCESS); - if (this.spotifyProcess != null) - { - this.spotifyProcess.EnableRaisingEvents = true; - this.spotifyProcess.Exited += this.Spotify_Exited; - } + this.spotifyProcess.EnableRaisingEvents = true; + this.spotifyProcess.Exited += this.Spotify_Exited; this.localAPI.Connect(); this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); } - private void Minimize() + /// + /// Starts the Spotify process and waits for it to enter an idle state. + /// + /// Specifies the maximum amount of time to wait for the process to enter an idle state. + /// The started process. + private Process LaunchSpotifyAndWaitForInputIdle(int timeoutMilliseconds = 10000) + { + int maxWait = timeoutMilliseconds; + + // Launch Spotify. + Process spotifyProcess = Process.Start(this.spotifyPath); + + // If it is an UWP app, then Process.Start should return null: we need to look for the process. + while (spotifyProcess == null && timeoutMilliseconds > 0) + { + spotifyProcess = this.FindSpotifyProcess(); + timeoutMilliseconds -= 250; + Thread.Sleep(250); + } + + // We need to let Spotify start-up before interacting with it. + spotifyProcess?.WaitForInputIdle(maxWait); + + if (SettingsXml.Instance.MinimizeSpotifyOnStartup) + this.Minimize(1000); + + return spotifyProcess; + } + + private Process FindSpotifyProcess() + { + var processes = Process.GetProcessesByName("spotify"); + return processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); + } + + private void Minimize(int delay = 0) { int remainingSleep = 2000; IntPtr hWnd; - // Since Minimize is often called during startup, the hWnd is often not created yet - // wait a maximum of remainingSleep for it to appear and then minimize it if it did. - while ((hWnd = this.GetMainWindowHandle()) == IntPtr.Zero && remainingSleep > 0) + // The window handle should have already been created, but just in case it has not, we wait for it to show up. + do { - Thread.Sleep(100); remainingSleep -= 100; - } + Thread.Sleep(100); + hWnd = this.GetMainWindowHandle(); + } while (hWnd == IntPtr.Zero && remainingSleep > 0); if (hWnd != IntPtr.Zero) { - // disgusting but sadly neccessary. Let Spotify initialize a bit before minimizing it - // otherwise the window hides itself and doesn't respond to taskbar clicks. - // I tried to work around this by waiting for the window size to initialize (via GetWindowRect) - // but that didn't work, there is some internal initialization that needs to occur. - Thread.Sleep(500); + // We also need to wait a little more before minimizing the window; + // if we don't, the toast will not show the current track until 'something' happens (track change, play state change...). + Thread.Sleep(delay); Win32API.ShowWindow(hWnd, Win32API.Constants.SW_SHOWMINIMIZED); } } diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 316e9302..9f146b83 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.IO; using System.Linq; +using System.Net; using System.Net.Cache; using System.Reflection; using System.Threading; @@ -19,6 +20,7 @@ using Toastify.Core; using Toastify.Events; using Toastify.Helpers; +using Toastify.src.Core; using Toastify.Services; using ToastifyAPI.Plugins; using Application = System.Windows.Application; @@ -207,10 +209,32 @@ private void StartSpotifyOrAskUser() Spotify.Instance.Connected += this.Spotify_Connected; Spotify.Instance.StartSpotify(); } + catch (ApplicationStartupException e) + { + Debug.WriteLine(e.StackTrace); + + string errorMsg = Properties.Resources.ERROR_STARTUP; + string techDetails = $"Technical details\n{e.Message}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + } + catch (WebException e) + { + Debug.WriteLine(e.StackTrace); + + string errorMsg = Properties.Resources.ERROR_STARTUP_RESTART; + string status = $"{e.Status}"; + if (e.Status == WebExceptionStatus.ProtocolError) + status += $" ({(e.Response as HttpWebResponse)?.StatusCode}, \"{(e.Response as HttpWebResponse)?.StatusDescription}\")"; + string techDetails = $"Technical details: {e.Message}\n{e.HResult}, {status}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + } catch (Exception e) { Debug.WriteLine(e.StackTrace); - MessageBox.Show("An unknown error occurred when trying to start Spotify.\nPlease start Spotify manually.\n\nTechnical Details: " + e.Message, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + + string errorMsg = Properties.Resources.ERROR_UNKNOWN; + string techDetails = $"Technical Details: {e.Message}\n{e.StackTrace}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); } } diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 7ecd67db..ea406d5d 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -384,6 +384,9 @@ internal struct WindowPlacement public Rectangle rcNormalPosition; } + // TODO: Create an enum out of these constants. + // See: ShowWindow function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx) + // See: SendMessage function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx) internal class Constants { internal const uint WM_APPCOMMAND = 0x0319; From 950149ece1ec342a65bbd7ddabca83a57db5ce89 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 20:18:55 +0200 Subject: [PATCH 041/452] Moved MessageBox messages in the Resources file --- Toastify/Properties/Resources.Designer.cs | 22 ++++++++++++++++++++++ Toastify/Properties/Resources.resx | 10 ++++++++++ Toastify/src/App.xaml.cs | 2 +- Toastify/src/UI/Toast.xaml.cs | 7 ++----- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index 187795f5..d387d1c1 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -60,6 +60,18 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to Toastify was unable to load the settings file. + ///Delete the "{0}" file and restart the application to recreate the settings file. + /// + ///The application will be started with default settings.. + /// + internal static string ERROR_SETTINGS_UNABLE_TO_LOAD { + get { + return ResourceManager.GetString("ERROR_SETTINGS_UNABLE_TO_LOAD", resourceCulture); + } + } + /// /// Looks up a localized string similar to An error occurred when trying to start Spotify.. /// @@ -98,6 +110,16 @@ internal static string ERROR_UNKNOWN { } } + /// + /// Looks up a localized string similar to Toastify is already running! + ///Look for the blue icon in your system tray.. + /// + internal static string INFO_TOASTIFY_ALREADY_RUNNING { + get { + return ResourceManager.GetString("INFO_TOASTIFY_ALREADY_RUNNING", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index c62e8635..6f5cc236 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -117,6 +117,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Toastify was unable to load the settings file. +Delete the "{0}" file and restart the application to recreate the settings file. + +The application will be started with default settings. + An error occurred when trying to start Spotify. @@ -131,6 +137,10 @@ Please restart the application. An unknown error occurred when trying to start Spotify. + + Toastify is already running! +Look for the blue icon in your system tray. + ..\Resources\spotify.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index abda0c05..555d35e3 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -26,7 +26,7 @@ public static void Main(string[] args) app.Run(); } else - MessageBox.Show("Toastify is already running!\n\nLook for the blue icon in your system tray.", "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); + MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); } } } diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 9f146b83..b65bc2fa 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -113,11 +113,8 @@ private void LoadSettings() { Debug.WriteLine("Exception loading settings:\n" + ex); - MessageBox.Show( - $@"Toastify was unable to load the settings file.{Environment.NewLine - }Delete the Toastify.xml file and restart the application to recreate the settings file.{Environment.NewLine - }{Environment.NewLine - }The application will now be started with default settings.", "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, SettingsXml.Instance.SettingsFile); + MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); SettingsXml.Instance.Default(true); } From 1dc57c23732456eb8f3fd44317229117c8449a38 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 20:31:40 +0200 Subject: [PATCH 042/452] Anonymous data collection is turned off by default I don't have access to the data anyway. If I decide to sign-in to Google Analytics, I may turn it on again. --- Toastify/src/Core/SettingsXml.cs | 14 +++++++------- Toastify/src/Services/Telemetry.cs | 2 +- Toastify/src/UI/Settings.xaml | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 0e991b72..78bc8d08 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -62,7 +62,7 @@ private set private string _ClipboardTemplate; private bool _SaveTrackToFile; private string _SaveTrackToFilePath; - private bool _PreventAnalytics; + private bool _optInToAnalytics; private bool _FirstRun; private string _PreviousOS; private string _PreviousVersion; @@ -552,18 +552,18 @@ public string SaveTrackToFilePath } } - public bool PreventAnalytics + public bool OptInToAnalytics { get { - return this._PreventAnalytics; + return this._optInToAnalytics; } set { - if (this._PreventAnalytics != value) + if (this._optInToAnalytics != value) { - this._PreventAnalytics = value; - this.NotifyPropertyChanged("PreventAnalytics"); + this._optInToAnalytics = value; + this.NotifyPropertyChanged("OptInToAnalytics"); } } } @@ -703,7 +703,7 @@ public void Default(bool setHotKeys = false) this.ClipboardTemplate = "I'm currently listening to {0}"; this.SaveTrackToFile = false; - this.PreventAnalytics = false; + this.OptInToAnalytics = false; this.PreventSleepWhilePlaying = false; Hotkey.ClearAll(); diff --git a/Toastify/src/Services/Telemetry.cs b/Toastify/src/Services/Telemetry.cs index aa46b284..6e63b62d 100644 --- a/Toastify/src/Services/Telemetry.cs +++ b/Toastify/src/Services/Telemetry.cs @@ -23,7 +23,7 @@ private static void Init() var settings = SettingsXml.Instance; // abort asap if we are surpressing analytics - if (settings.PreventAnalytics) + if (settings.OptInToAnalytics) return; _session.SetCustomVariable(1, "OS Version", GetOS()); diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index 501b8a6e..9262ddfc 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -37,9 +37,9 @@ Save Artist and Album to file when song changes (uses the clipboard template) - - Do not collect anonymous usage data - Data is never shared, is anonymous, and is used to inform future features + + Opt in to anonymous data collection. + Data is never shared, is anonymous, and is used solely to improve the app. Prevent the computer from sleeping while Spotify is playing From 08d60e1b65884881b310b2be2e49bb58374bf0a9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 21:04:50 +0200 Subject: [PATCH 043/452] Changed target framework to 4.5 and modified Install.nsi Using DotNetChecker script to check .NET Framework presence on installation and eventually download it. (https://github.com/ReVolly/NsisDotNetChecker) --- AutoHotkey.Interop/AutoHotkey.Interop.csproj | 2 +- ExamplePlugin/ExamplePlugin.csproj | 2 +- InstallationScript/DotNET.nsh | 160 ------------------- InstallationScript/DotNetChecker.dll | Bin 0 -> 85504 bytes InstallationScript/DotNetChecker.nsh | 129 +++++++++++++++ InstallationScript/Install.nsi | 54 ++++--- InstallationScript/README.txt | 2 + InstallationScript/killproc_README.txt | 8 - README.md | 2 +- Toastify.sln | 2 +- Toastify/Toastify.csproj | 3 +- Toastify/app.config | 8 +- Toastify/packages.config | 4 +- Toastify/post-build.cmd | 1 + ToastifyAPI/ToastifyAPI.csproj | 2 +- 15 files changed, 175 insertions(+), 204 deletions(-) delete mode 100644 InstallationScript/DotNET.nsh create mode 100644 InstallationScript/DotNetChecker.dll create mode 100644 InstallationScript/DotNetChecker.nsh create mode 100644 InstallationScript/README.txt delete mode 100644 InstallationScript/killproc_README.txt diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj b/AutoHotkey.Interop/AutoHotkey.Interop.csproj index a6709e72..db58b4fb 100644 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj +++ b/AutoHotkey.Interop/AutoHotkey.Interop.csproj @@ -9,7 +9,7 @@ Properties AutoHotkey.Interop AutoHotkey.Interop - v4.5.2 + v4.5 512 SAK SAK diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index f3eede4a..78ae32ed 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -10,7 +10,7 @@ Properties ExamplePlugin ExamplePlugin - v4.5.2 + v4.5 512 diff --git a/InstallationScript/DotNET.nsh b/InstallationScript/DotNET.nsh deleted file mode 100644 index 8a2d4021..00000000 --- a/InstallationScript/DotNET.nsh +++ /dev/null @@ -1,160 +0,0 @@ -# DotNET version checking macro. -# Written by AnarkiNet(AnarkiNet@gmail.com) originally, modified by eyal0 (for use in http://www.sourceforge.net/projects/itwister) -# Downloads and runs the Microsoft .NET Framework version 2.0 Redistributable and runs it if the user does not have the correct version. -# To use, call the macro with a string: -# !insertmacro CheckDotNET "2" -# !insertmacro CheckDotNET "2.0.9" -# (Version 2.0.9 is less than version 2.0.10.) -# All register variables are saved and restored by CheckDotNet -# No output - -!macro CheckDotNET DotNetReqVer - !define DOTNET_URL "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" - DetailPrint "Checking your .NET Framework version..." - ;callee register save - Push $0 - Push $1 - Push $2 - Push $3 - Push $4 - Push $5 - Push $6 ;backup of intsalled ver - Push $7 ;backup of DoNetReqVer - - StrCpy $7 ${DotNetReqVer} - - System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i r2r2) i .r1 ?u" - - ${If} $0 == 0 - DetailPrint ".NET Framework not found, download is required for program to run." - Goto NoDotNET - ${EndIf} - - DetailPrint $0 - - ;at this point, $0 has maybe v2.345.678. - StrCpy $0 $0 $2 1 ;remove the starting "v", $0 has the installed version num as a string - StrCpy $6 $0 - StrCpy $1 $7 ;$1 has the requested verison num as a string - - ;MessageBox MB_OKCANCEL "found $0" IDCANCEL GiveUpDotNET - - ;MessageBox MB_OKCANCEL "looking for $1" IDCANCEL GiveUpDotNET - - ;now let's compare the versions, installed against required ... - ${Do} - StrCpy $2 "" ;clear out the installed part - StrCpy $3 "" ;clear out the required part - - ${Do} - ${If} $0 == "" ;if there are no more characters in the version - StrCpy $4 "." ;fake the end of the version string - ${Else} - StrCpy $4 $0 1 0 ;$4 = character from the installed ver - ${If} $4 != "." - StrCpy $0 $0 ${NSIS_MAX_STRLEN} 1 ;remove that first character from the remaining - ${EndIf} - ${EndIf} - - ${If} $1 == "" ;if there are no more characters in the version - StrCpy $5 "." ;fake the end of the version string - ${Else} - StrCpy $5 $1 1 0 ;$5 = character from the required ver - ${If} $5 != "." - StrCpy $1 $1 ${NSIS_MAX_STRLEN} 1 ;remove that first character from the remaining - ${EndIf} - ${EndIf} - ;MessageBox MB_OKCANCEL "installed $2,$4,$0 required $3,$5,$1" IDCANCEL GiveUpDotNET - ${If} $4 == "." - ${AndIf} $5 == "." - ${ExitDo} ;we're at the end of the part - ${EndIf} - - ${If} $4 == "." ;if we're at the end of the current installed part - StrCpy $2 "0$2" ;put a zero on the front - ${Else} ;we have another character - StrCpy $2 "$2$4" ;put the next character on the back - ${EndIf} - ${If} $5 == "." ;if we're at the end of the current required part - StrCpy $3 "0$3" ;put a zero on the front - ${Else} ;we have another character - StrCpy $3 "$3$5" ;put the next character on the back - ${EndIf} - ${Loop} - ;MessageBox MB_OKCANCEL "finished parts: installed $2,$4,$0 required $3,$5,$1" IDCANCEL GiveUpDotNET - - ${If} $0 != "" ;let's remove the leading period on installed part if it exists - StrCpy $0 $0 ${NSIS_MAX_STRLEN} 1 - ${EndIf} - ${If} $1 != "" ;let's remove the leading period on required part if it exists - StrCpy $1 $1 ${NSIS_MAX_STRLEN} 1 - ${EndIf} - - ;$2 has the installed part, $3 has the required part - ${If} $2 S< $3 - IntOp $0 0 - 1 ;$0 = -1, installed less than required - ${ExitDo} - ${ElseIf} $2 S> $3 - IntOp $0 0 + 1 ;$0 = 1, installed greater than required - ${ExitDo} - ${ElseIf} $2 == "" - ${AndIf} $3 == "" - IntOp $0 0 + 0 ;$0 = 0, the versions are identical - ${ExitDo} - ${EndIf} ;otherwise we just keep looping through the parts - ${Loop} - - ${If} $0 < 0 - DetailPrint ".NET Framework Version found: $6, but is older than the required version: $7" - Goto OldDotNET - ${Else} - DetailPrint ".NET Framework Version found: $6, equal or newer to required version: $7." - Goto NewDotNET - ${EndIf} - -NoDotNET: - MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ - ".NET Framework not installed.$\nRequired Version: $7 or greater.$\nDownload .NET Framework version from www.microsoft.com?" \ - /SD IDYES IDYES DownloadDotNET IDNO NewDotNET - goto GiveUpDotNET ;IDCANCEL -OldDotNET: - MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ - "Your .NET Framework version: $6.$\nRequired Version: $7 or greater.$\nDownload .NET Framework version from www.microsoft.com?" \ - /SD IDYES IDYES DownloadDotNET IDNO NewDotNET - goto GiveUpDotNET ;IDCANCEL - -DownloadDotNET: - DetailPrint "Beginning download of latest .NET Framework version." - NSISDL::download ${DOTNET_URL} "$TEMP\dotnetfx.exe" - DetailPrint "Completed download." - Pop $0 - ${If} $0 == "cancel" - MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "Download cancelled. Continue Installation?" \ - IDYES NewDotNET IDNO GiveUpDotNET - ${ElseIf} $0 != "success" - MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "Download failed:$\n$0$\n$\nContinue Installation?" \ - IDYES NewDotNET IDNO GiveUpDotNET - ${EndIf} - DetailPrint "Pausing installation while downloaded .NET Framework installer runs." - ExecWait '$TEMP\dotnetfx.exe /q /c:"install /q"' - DetailPrint "Completed .NET Framework install/update. Removing .NET Framework installer." - Delete "$TEMP\dotnetfx.exe" - DetailPrint ".NET Framework installer removed." - goto NewDotNet - -GiveUpDotNET: - Abort "Installation cancelled by user." - -NewDotNET: - DetailPrint "Proceeding with remainder of installation." - Pop $0 - Pop $1 - Pop $2 - Pop $3 - Pop $4 - Pop $5 - Pop $6 ;backup of intsalled ver - Pop $7 ;backup of DoNetReqVer -!macroend \ No newline at end of file diff --git a/InstallationScript/DotNetChecker.dll b/InstallationScript/DotNetChecker.dll new file mode 100644 index 0000000000000000000000000000000000000000..bf87a44bd361747937dd00b7af84999eb360e89c GIT binary patch literal 85504 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 ZS&mX*7Bck5z%OyUiq9_oZ~xFY@CQqX!9)N6 literal 0 HcmV?d00001 diff --git a/InstallationScript/DotNetChecker.nsh b/InstallationScript/DotNetChecker.nsh new file mode 100644 index 00000000..1bd70739 --- /dev/null +++ b/InstallationScript/DotNetChecker.nsh @@ -0,0 +1,129 @@ +!macro CheckNetFramework FrameworkVersion + Var /GLOBAL dotNetUrl${FrameworkVersion} + Var /GLOBAL dotNetReadableVersion${FrameworkVersion} + + !ifndef DOTNET462_URL + !define DOTNET462_URL "http://go.microsoft.com/fwlink/p/?LinkId=780601" + !define DOTNET461_URL "http://go.microsoft.com/fwlink/p/?LinkId=671744" + !define DOTNET46_URL "http://go.microsoft.com/fwlink/?LinkId=528232" + !define DOTNET452_URL "http://go.microsoft.com/fwlink/?LinkId=397708" + !define DOTNET451_URL "http://go.microsoft.com/fwlink/?LinkId=322116" + !define DOTNET45_URL "http://go.microsoft.com/fwlink/?LinkId=225702" + !define DOTNET40Full_URL "http://www.microsoft.com/downloads/info.aspx?na=41&srcfamilyid=0a391abd-25c1-4fc0-919f-b21f31ab88b7&srcdisplaylang=en&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f9%2f5%2fA%2f95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE%2fdotNetFx40_Full_x86_x64.exe" + !define DOTNET40Client_URL "http://www.microsoft.com/downloads/info.aspx?na=41&srcfamilyid=e5ad0459-cbcc-4b4f-97b6-fb17111cf544&srcdisplaylang=en&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f2%2f562A10F9-C9F4-4313-A044-9C94E0A8FAC8%2fdotNetFx40_Client_x86_x64.exe" + !define DOTNET35_URL "http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe" + !define DOTNET30_URL "http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe" + !define DOTNET20_URL "http://www.microsoft.com/downloads/info.aspx?na=41&srcfamilyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&srcdisplaylang=en&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" + !define DOTNET11_URL "http://www.microsoft.com/downloads/info.aspx?na=41&srcfamilyid=262d25e3-f589-4842-8157-034d1e7cf3a3&srcdisplaylang=en&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fa%2fa%2fc%2faac39226-8825-44ce-90e3-bf8203e74006%2fdotnetfx.exe" + !define DOTNET10_URL "http://www.microsoft.com/downloads/info.aspx?na=41&srcfamilyid=262d25e3-f589-4842-8157-034d1e7cf3a3&srcdisplaylang=en&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fa%2fa%2fc%2faac39226-8825-44ce-90e3-bf8203e74006%2fdotnetfx.exe" + !endif + + ${If} ${FrameworkVersion} == "462" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET462_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.6.2" + ${ElseIf} ${FrameworkVersion} == "461" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET461_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.6.1" + ${ElseIf} ${FrameworkVersion} == "46" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET46_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.6" + ${ElseIf} ${FrameworkVersion} == "452" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET452_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.52" + ${ElseIf} ${FrameworkVersion} == "451" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET451_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.51" + ${ElseIf} ${FrameworkVersion} == "45" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET45_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.5" + ${ElseIf} ${FrameworkVersion} == "40Full" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET40Full_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.0 Full" + ${ElseIf} ${FrameworkVersion} == "40Client" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET40Client_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "4.0 Client" + ${ElseIf} ${FrameworkVersion} == "35" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET35_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "3.5" + ${ElseIf} ${FrameworkVersion} == "30" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET30_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "3.0" + ${ElseIf} ${FrameworkVersion} == "20" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET20_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "2.0" + ${ElseIf} ${FrameworkVersion} == "11" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET11_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "1.1" + ${ElseIf} ${FrameworkVersion} == "10" + StrCpy $dotNetUrl${FrameworkVersion} ${DOTNET10_URL} + StrCpy $dotNetReadableVersion${FrameworkVersion} "1.0" + ${EndIf} + + DetailPrint "Checking .NET Framework version..." + + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + DotNetChecker::IsDotNet${FrameworkVersion}Installed + Pop $0 + + ${If} $0 == "false" +${OrIf} $0 == "f" ; if script is compiled in ANSI mode then we get only an "f" https://github.com/ReVolly/NsisDotNetChecker/issues/4 + DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} not found, download is required for program to run." + Goto NoDotNET${FrameworkVersion} + ${Else} + DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} found, no need to install." + Goto NewDotNET${FrameworkVersion} + ${EndIf} + +NoDotNET${FrameworkVersion}: + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ + ".NET Framework not installed. Required version: $dotNetReadableVersion${FrameworkVersion}.$\nDownload .NET Framework $dotNetReadableVersion${FrameworkVersion} from www.microsoft.com?" \ + /SD IDYES IDYES DownloadDotNET${FrameworkVersion} IDNO NewDotNET${FrameworkVersion} + goto GiveUpDotNET${FrameworkVersion} ;IDCANCEL + +DownloadDotNET${FrameworkVersion}: + DetailPrint "Beginning download of .NET Framework $dotNetReadableVersion${FrameworkVersion}." + NSISDL::download $dotNetUrl${FrameworkVersion} "$TEMP\dotnetfx.exe" + DetailPrint "Completed download." + + Pop $0 + ${If} $0 == "cancel" + MessageBox MB_YESNO|MB_ICONEXCLAMATION \ + "Download cancelled. Continue Installation?" \ + IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion} + ${ElseIf} $0 != "success" + MessageBox MB_YESNO|MB_ICONEXCLAMATION \ + "Download failed:$\n$0$\n$\nContinue Installation?" \ + IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion} + ${EndIf} + + DetailPrint "Pausing installation while downloaded .NET Framework installer runs." + ExecWait '$TEMP\dotnetfx.exe /q /c:"install /q"' + + DetailPrint "Completed .NET Framework install/update. Removing .NET Framework installer." + Delete "$TEMP\dotnetfx.exe" + DetailPrint ".NET Framework installer removed." + goto NewDotNet${FrameworkVersion} + +GiveUpDotNET${FrameworkVersion}: + Abort "Installation cancelled by user." + +NewDotNET${FrameworkVersion}: + DetailPrint "Proceeding with remainder of installation." + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + +!macroend \ No newline at end of file diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 82a5eda1..3302009d 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -1,9 +1,8 @@ -!define DOTNET_VERSION "4.5.2" -!include DotNET.nsh !include LogicLib.nsh !include MUI.nsh !include x64.nsh !include WinVer.nsh +!include DotNetChecker.nsh Name "Toastify Installer" OutFile "ToastifyInstaller.exe" @@ -20,41 +19,46 @@ Page components Page directory Page instfiles - # These indented statements modify settings for MUI_PAGE_FINISH - !define MUI_FINISHPAGE_AUTOCLOSE - !define MUI_FINISHPAGE_RUN - !define MUI_FINISHPAGE_RUN_CHECKED - !define MUI_FINISHPAGE_RUN_TEXT "Launch Toastify Now" - !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" - !insertmacro MUI_PAGE_FINISH - - ;Languages +# These statements modify settings for MUI_PAGE_FINISH +!define MUI_FINISHPAGE_AUTOCLOSE +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_CHECKED +!define MUI_FINISHPAGE_RUN_TEXT "Launch Toastify Now" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" +!insertmacro MUI_PAGE_FINISH + !insertmacro MUI_LANGUAGE "English" +UninstPage uninstConfirm +UninstPage instfiles + ;-------------------------------- +; Functions + Function LaunchLink ExecShell "" "$INSTDIR\Toastify.exe" FunctionEnd -UninstPage uninstConfirm -UninstPage instfiles - ;-------------------------------- +; Installer Section "Toastify (required)" SectionIn RO - ; Since process termination is non-destructive for Toastify, just kill it + # Since process termination is non-destructive for Toastify, just kill it DetailPrint "Shutting down Toastify..." KillProcWMI::KillProc "Toastify.exe" - ; Let the process shutdown + # Let the process shutdown Sleep 1000 + + # Check .NET Framework + !insertmacro CheckNetFramework 45 - ; Set output path to the installation directory. + # Set output path to the installation directory. SetOutPath $INSTDIR - ; Bundle the files + # Bundle the files ${If} ${IsWin10} File /oname=ToastifyAPI.dll "ToastifyAPI_UWP.dll" ${Else} @@ -71,7 +75,7 @@ Section "Toastify (required)" File "SpotifyAPI.dll" File "LICENSE" - ; Write the uninstall keys for Windows + # Write the uninstall keys for Windows WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayName" "Toastify" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" @@ -81,6 +85,7 @@ Section "Toastify (required)" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" + SectionEnd Section "Desktop icon" @@ -103,11 +108,11 @@ Section "Uninstall" # Remove Start Menu launcher Delete "$SMPROGRAMS\Toastify.lnk" - ; Remove registry keys + # Remove registry keys DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" - ; Remove files and uninstaller + # Remove files and uninstaller Delete "$INSTDIR\Toastify.exe" Delete "$INSTDIR\Toastify.config" Delete "$INSTDIR\ToastifyAPI.dll" @@ -120,15 +125,16 @@ Section "Uninstall" Delete "$INSTDIR\LICENSE" Delete "$INSTDIR\uninstall.exe" - ; remove the settings directory + # remove the settings directory Delete "$APPDATA\Toastify.xml" RMDir "$APPDATA\Toastify" - ; Remove shortcuts, if any + # Remove shortcuts, if any Delete "$DESKTOP\Toastify.lnk" - ; Remove directories used + # Remove directories used RMDir "$INSTDIR" + SectionEnd Function .onInit diff --git a/InstallationScript/README.txt b/InstallationScript/README.txt new file mode 100644 index 00000000..117a7efe --- /dev/null +++ b/InstallationScript/README.txt @@ -0,0 +1,2 @@ +Copy all *.dll files in this directory to: + [NSIS install directory]\Plugins \ No newline at end of file diff --git a/InstallationScript/killproc_README.txt b/InstallationScript/killproc_README.txt deleted file mode 100644 index 5b472a3f..00000000 --- a/InstallationScript/killproc_README.txt +++ /dev/null @@ -1,8 +0,0 @@ -Copy to [NSIS install]\Plugins to use - -KillProcWMI , is an NSIS plugin based on the original KillProc plugin. KillProcWMI uses WMI to acheive the same results, which avoids problems with 32bit processes not being able to kill 64 bit processes. - -All Code is freely provided, no guarantees or warranties about its quality, use at your own risk. - -Jared Allen. -ChironexSoftware.com \ No newline at end of file diff --git a/README.md b/README.md index d82bfe3b..ddde8edb 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This application uses [SpotifyAPI-NET](https://github.com/JohnnyCrazy/SpotifyAPI ## Requirements * Windows (7, 8/8.1, 10) -* .NET Framework 4.5.2 +* .NET Framework 4.5.* * Spotify ## Notice diff --git a/Toastify.sln b/Toastify.sln index 357e74b8..37e9b7f3 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 15.0.26430.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installation", "Installation", "{FCD4BE87-8354-47A1-85DE-709E35559000}" ProjectSection(SolutionItems) = preProject - InstallationScript\DotNET.nsh = InstallationScript\DotNET.nsh + InstallationScript\DotNetChecker.nsh = InstallationScript\DotNetChecker.nsh InstallationScript\Install.nsi = InstallationScript\Install.nsi EndProjectSection EndProject diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index c08ae4b5..c6feeaad 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -10,7 +10,7 @@ Properties Toastify Toastify - v4.5.2 + v4.5 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -44,6 +44,7 @@ false true true + D38DAF47B3CBFC190231922089F056B55D662088 diff --git a/Toastify/app.config b/Toastify/app.config index 2ae7c6d9..1f0a2a65 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,11 +1,11 @@ - + - + - - + + diff --git a/Toastify/packages.config b/Toastify/packages.config index 933f7ceb..f59dbc57 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,6 +1,6 @@  - - + + \ No newline at end of file diff --git a/Toastify/post-build.cmd b/Toastify/post-build.cmd index 91b81ee2..67cc0e23 100644 --- a/Toastify/post-build.cmd +++ b/Toastify/post-build.cmd @@ -19,6 +19,7 @@ IF "%ConfigurationName:~0,7%"=="Windows" IF NOT "x%ConfigurationName:Release=%"= ECHO - Copy install script COPY /Y "%SolutionDir%InstallationScript\Install.nsi" "%TargetDir%Install.nsi" + COPY /Y "%SolutionDir%InstallationScript\DotNetChecker.nsh" "%TargetDir%DotNetChecker.nsh" COPY /Y "%SolutionDir%InstallationScript\DotNET.nsh" "%TargetDir%DotNET.nsh" ) diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 85bb7225..ef883ce1 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -9,7 +9,7 @@ Properties ToastifyAPI ToastifyAPI - v4.5.2 + v4.5 512 From 746f1375a4571d74a25d2124d207f5909a0c6af4 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 2 Jul 2017 23:57:03 +0200 Subject: [PATCH 044/452] v1.9.3 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 4 ++-- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 4 ++-- update-version.cmd | 4 ++++ update-version.ps1 | 33 ++++++++++++++++++++++++++ 6 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 update-version.cmd create mode 100644 update-version.ps1 diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 3302009d..a5124011 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -80,8 +80,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.2" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.2" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.3" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.3" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index 1e555cba..d5e71216 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.2.*")] +[assembly: AssemblyVersion("1.9.3.*")] diff --git a/Toastify/version b/Toastify/version index 92f55ca7..7b0231f5 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.2 \ No newline at end of file +1.9.3 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index aaecdd60..ff288bf5 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.2.*")] +[assembly: AssemblyVersion("1.9.3.*")] diff --git a/update-version.cmd b/update-version.cmd new file mode 100644 index 00000000..4d9d70bf --- /dev/null +++ b/update-version.cmd @@ -0,0 +1,4 @@ +@ECHO OFF + +CD /D %~dp0 +powershell -File "update-version.ps1" \ No newline at end of file diff --git a/update-version.ps1 b/update-version.ps1 new file mode 100644 index 00000000..f7f3fa77 --- /dev/null +++ b/update-version.ps1 @@ -0,0 +1,33 @@ +$ScriptPath = $MyInvocation.MyCommand.Path | Split-Path +Set-Location "$ScriptPath" + +$AsciiEncoding = New-Object System.Text.ASCIIEncoding + +Write-Host -NoNewLine "Current version: " +Get-Content "Toastify\version" +$NewVersion = Read-Host -Prompt "New version" + +Write-Host + +Write-Host "Update: InstallationScript\Install.nsi" +$FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "InstallationScript\Install.nsi")) +$Lines = (Get-Content 'InstallationScript\Install.nsi') -replace '("(Display)?Version") ".*"', "`$1 `"$NewVersion`"" +[System.IO.File]::WriteAllLines($FilePath, $Lines) + +Write-Host "Update: Toastify\version" +$FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "Toastify\version")) +$Lines = "$NewVersion" +[System.IO.File]::WriteAllText($FilePath, $Lines, $AsciiEncoding) + +Write-Host "Update: Toastify\Properties\AssemblyInfo.cs" +$FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "Toastify\Properties\AssemblyInfo.cs")) +$Lines = (Get-Content 'Toastify\Properties\AssemblyInfo.cs') -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" +[System.IO.File]::WriteAllLines($FilePath, $Lines) + +Write-Host "Update: ToastifyAPI\Properties\AssemblyInfo.cs" +$FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "ToastifyAPI\Properties\AssemblyInfo.cs")) +$Lines = (Get-Content 'ToastifyAPI\Properties\AssemblyInfo.cs') -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" +[System.IO.File]::WriteAllLines($FilePath, $Lines) + +Write-Host "Press any key to continue ..." +$x = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") \ No newline at end of file From 3e3592177b314e494dd523f7d7d5b594c815ad76 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 4 Jul 2017 23:17:01 +0200 Subject: [PATCH 045/452] One more fix for #3 The same error happend once again with the desktop version of Spotify. Now it should be definitely fixed! --- Toastify/Properties/Resources.Designer.cs | 19 ++++++++++++ Toastify/Properties/Resources.resx | 7 +++++ Toastify/src/Core/SettingsXml.cs | 25 ++++++++++++++- Toastify/src/Core/Spotify.cs | 38 +++++++++++++++++++++-- 4 files changed, 86 insertions(+), 3 deletions(-) diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index d387d1c1..2dd6918d 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -101,6 +101,25 @@ internal static string ERROR_STARTUP_RESTART { } } + /// + /// Looks up a localized string similar to An error occurred when trying to start Spotify: Toastify was not able to connect with Spotify.. + /// + internal static string ERROR_STARTUP_SPOTIFY_API_CONNECT { + get { + return ResourceManager.GetString("ERROR_STARTUP_SPOTIFY_API_CONNECT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error occurred when trying to connect with Spotify: SpotifyAPI returned a null status. + ///Please open an issue at github.com/aleab/toastify.. + /// + internal static string ERROR_STARTUP_SPOTIFY_API_STATUS_NULL { + get { + return ResourceManager.GetString("ERROR_STARTUP_SPOTIFY_API_STATUS_NULL", resourceCulture); + } + } + /// /// Looks up a localized string similar to An unknown error occurred when trying to start Spotify.. /// diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index 6f5cc236..827f5eac 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -133,6 +133,13 @@ If Spotify is running, please open an issue at github.com/aleab/toastify. An error occurred when trying to start Spotify. Please restart the application. + + + An error occurred when trying to start Spotify: Toastify was not able to connect with Spotify. + + + An error occurred when trying to connect with Spotify: SpotifyAPI returned a null status. +Please open an issue at github.com/aleab/toastify. An unknown error occurred when trying to start Spotify. diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 78bc8d08..c4f244c9 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -68,6 +68,7 @@ private set private string _PreviousVersion; private bool _PreventSleepWhilePlaying; private int _startupWaitTimeout; + private int _spotifyConnectionAttempts; private List _HotKeys; public List Plugins { get; set; } @@ -664,6 +665,22 @@ public int StartupWaitTimeout } } + public int SpotifyConnectionAttempts + { + get + { + return this._spotifyConnectionAttempts; + } + set + { + if (this._spotifyConnectionAttempts != value) + { + this._spotifyConnectionAttempts = value; + this.NotifyPropertyChanged("SpotifyConnectionAttempts"); + } + } + } + private SettingsXml() { this.Default(); @@ -671,7 +688,6 @@ private SettingsXml() public void Default(bool setHotKeys = false) { - this.StartupWaitTimeout = 20000; this.AlwaysStartSpotify = true; this.DontPromptToStartSpotify = false; this.CloseSpotifyWithToastify = true; @@ -706,6 +722,9 @@ public void Default(bool setHotKeys = false) this.OptInToAnalytics = false; this.PreventSleepWhilePlaying = false; + this.StartupWaitTimeout = 20000; + this.SpotifyConnectionAttempts = 5; + Hotkey.ClearAll(); // only set hotkeys when it's requested (we don't set hotkeys when @@ -805,6 +824,10 @@ private void SanitizeSettingsFile() // Validate StartupWaitTimeout: it cannot be negative! this.StartupWaitTimeout = Math.Abs(this.StartupWaitTimeout); + // Validate SpotifyConnectionAttempts: it cannot be non-positive! + this.SpotifyConnectionAttempts = Math.Abs(this.SpotifyConnectionAttempts); + this.SpotifyConnectionAttempts += this.SpotifyConnectionAttempts == 0 ? 1 : 0; + this.Save(); } diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 3819ffaf..5c8ac40d 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -112,8 +112,7 @@ public void StartSpotify() this.spotifyProcess.EnableRaisingEvents = true; this.spotifyProcess.Exited += this.Spotify_Exited; - this.localAPI.Connect(); - this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); + this.ConnectWithSpotify(); } /// @@ -145,6 +144,41 @@ private Process LaunchSpotifyAndWaitForInputIdle(int timeoutMilliseconds = 10000 return spotifyProcess; } + /// + /// Connect with Spotify. + /// + /// + /// if Toastify was not able to connect with Spotify or + /// if Spotify returns a null status after connection. + /// + private void ConnectWithSpotify() + { + // Sometimes (specially with a lot of active processes), the WaitForInputIdle method (used in LaunchSpotifyAndWaitForInputIdle) + // does not seem to wait long enough to let us connect to Spotify successfully on the first try; so we wait and re-try. + + // Pre-emptive wait, in case some fool set SpotifyConnectionAttempts to 1! ;) + Thread.Sleep(500); + + int maxAttempts = SettingsXml.Instance.SpotifyConnectionAttempts; + bool connected; + int attempts = 1; + while (!(connected = this.localAPI.Connect()) && attempts < maxAttempts) + { + attempts++; + Thread.Sleep(1000); + } + + if (!connected) + throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECT); + Debug.WriteLine($"Connected with Spotify after {attempts} attempt(s)."); + + var status = this.localAPI.GetStatus(); + if (status == null) + throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_STATUS_NULL); + + this.Connected?.Invoke(this, new SpotifyStateEventArgs(status)); + } + private Process FindSpotifyProcess() { var processes = Process.GetProcessesByName("spotify"); From f620361c6b961545f126e458efcdd9082f090217 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 4 Jul 2017 23:36:09 +0200 Subject: [PATCH 046/452] Added some null checks Should fix occasional exceptions on exit (specially, if not solely, when closing Spotify). --- .../src/Core/ApplicationStartupException.cs | 3 +-- Toastify/src/Core/Spotify.cs | 5 ++-- Toastify/src/UI/Toast.xaml.cs | 26 +++++++++++-------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Toastify/src/Core/ApplicationStartupException.cs b/Toastify/src/Core/ApplicationStartupException.cs index 997ed5c1..b39f2275 100644 --- a/Toastify/src/Core/ApplicationStartupException.cs +++ b/Toastify/src/Core/ApplicationStartupException.cs @@ -1,8 +1,7 @@ using System; using System.Collections.Generic; -using Toastify.Core; -namespace Toastify.src.Core +namespace Toastify.Core { internal class ApplicationStartupException : ApplicationException { diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 5c8ac40d..1d2c7264 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -8,7 +8,6 @@ using Toastify.Events; using Toastify.Helpers; using Toastify.Services; -using Toastify.src.Core; namespace Toastify.Core { @@ -351,12 +350,12 @@ private void Spotify_Exited(object sender, EventArgs e) private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e) { this.CurrentSong = e.NewTrack; - this.SongChanged?.Invoke(this, new SpotifyTrackChangedEventArgs(e.OldTrack, this.CurrentSong, this.localAPI.GetStatus().Playing)); + this.SongChanged?.Invoke(this, new SpotifyTrackChangedEventArgs(e.OldTrack, this.CurrentSong, this.localAPI?.GetStatus()?.Playing ?? false)); } private void SpotifyLocalAPI_OnPlayStateChange(object sender, PlayStateEventArgs e) { - this.PlayStateChanged?.Invoke(this, new SpotifyPlayStateChangedEventArgs(e.Playing, this.localAPI.GetStatus().Track)); + this.PlayStateChanged?.Invoke(this, new SpotifyPlayStateChangedEventArgs(e.Playing, this.localAPI?.GetStatus()?.Track)); } private void SpotifyLocalAPI_OnTrackTimeChange(object sender, TrackTimeChangeEventArgs e) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index b65bc2fa..1f7daf56 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -20,7 +20,6 @@ using Toastify.Core; using Toastify.Events; using Toastify.Helpers; -using Toastify.src.Core; using Toastify.Services; using ToastifyAPI.Plugins; using Application = System.Windows.Application; @@ -322,15 +321,20 @@ private void UpdateCurrentSong(Song song) private void UpdateCoverArtUrl() { - if (string.IsNullOrWhiteSpace(this.currentSong.Track)) + if (this.currentSong == null) + this.toastIconURI = DEFAULT_ICON; + else { - this.currentSong.CoverArtUrl = AD_PLAYING_ICON; - this.currentSong.Track = "Spotify Ad"; - } - else if (string.IsNullOrWhiteSpace(this.currentSong.CoverArtUrl)) - this.currentSong.CoverArtUrl = DEFAULT_ICON; + if (string.IsNullOrWhiteSpace(this.currentSong.Track)) + { + this.currentSong.CoverArtUrl = AD_PLAYING_ICON; + this.currentSong.Track = "Spotify Ad"; + } + else if (string.IsNullOrWhiteSpace(this.currentSong?.CoverArtUrl)) + this.currentSong.CoverArtUrl = DEFAULT_ICON; - this.toastIconURI = this.currentSong.CoverArtUrl; + this.toastIconURI = this.currentSong.CoverArtUrl; + } } private void UpdateCoverArt() @@ -383,13 +387,13 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t string title1, title2; if (altTitle1 == null) { - title1 = this.paused ? "Paused" : song.Artist; - title2 = this.paused ? song.ToString() : song.Track; + title1 = (this.paused ? "Paused" : song?.Artist) ?? string.Empty; + title2 = (this.paused ? song?.ToString() : song?.Track) ?? string.Empty; } else { title1 = altTitle1; - title2 = song.ToString(); + title2 = song?.ToString() ?? string.Empty; } this.UpdateToastText(title1, title2, fadeIn, force); } From a06000713c0639251a197e63c630fb7034f29604 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 5 Jul 2017 04:02:44 +0200 Subject: [PATCH 047/452] Fixed AutoHotkeyAPI's entry points --- AutoHotkey.Interop/src/AutoHotkeyAPI.cs | 34 ++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/AutoHotkey.Interop/src/AutoHotkeyAPI.cs b/AutoHotkey.Interop/src/AutoHotkeyAPI.cs index 6abfaa60..058a0025 100644 --- a/AutoHotkey.Interop/src/AutoHotkeyAPI.cs +++ b/AutoHotkey.Interop/src/AutoHotkeyAPI.cs @@ -22,7 +22,7 @@ internal class AutoHotkeyAPI /// Parameters passed to dll. /// ahkdll returns a thread handle. /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkdll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern uint AhkDll( [MarshalAs(UnmanagedType.LPWStr)] string path, [MarshalAs(UnmanagedType.LPWStr)] string options, @@ -36,7 +36,7 @@ public static extern uint AhkDll( /// Parameters passed to dll. /// ahkdll returns a thread handle. /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahktextdll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern uint AhkTextDll( [MarshalAs(UnmanagedType.LPWStr)] string code, [MarshalAs(UnmanagedType.LPWStr)] string options, @@ -51,7 +51,7 @@ public static extern uint AhkTextDll( /// /// 1 if a thread is running or 0 otherwise. /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkReady", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool AhkReady(); #endregion Determine Thread's State @@ -64,20 +64,20 @@ public static extern uint AhkTextDll( /// Time in milliseconds to wait until thread exits. /// Returns always 0. /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkTerminate", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void AhkTerminate(uint timeout); /// /// AhkReload is used to terminate and start a running script again. /// - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkReload", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void AhkReload(); /// /// AhkPause will pause/un-pause a thread and run traditional AutoHotkey Sleep internally. /// /// Should be "On" or "Off" as a string - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkPause", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void AhkPause( [MarshalAs(UnmanagedType.LPWStr)] string strState); @@ -93,7 +93,7 @@ public static extern void AhkPause( /// Ignore if loading a file failed. /// addFile returns a pointer to the first line of new created code. /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "addFile", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern uint AddFile( [MarshalAs(UnmanagedType.LPWStr)] string filePath, byte allowDuplicateInclude, @@ -112,7 +112,7 @@ public struct Execute /// Determines whether the added script should be executed. /// addScript returns a pointer to the first line of new created code. /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "addScript", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern uint AddScript( [MarshalAs(UnmanagedType.LPWStr)] string code, byte execute); @@ -127,7 +127,7 @@ public static extern uint AddScript( /// Script as string/text or variable containing script that will be executed. /// Returns true if script was executed and false if there was an error. /// ahkExec will execute the code and delete it before it returns. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkExec", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool AhkExec( [MarshalAs(UnmanagedType.LPWStr)] string code); @@ -140,7 +140,7 @@ public static extern bool AhkExec( /// Do not to wait until execution finished. /// 1 if label exists 0 otherwise. /// Default is 0 = wait for code to finish execution. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkLabel", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool AhkLabel( [MarshalAs(UnmanagedType.LPWStr)] string labelName, bool noWait); @@ -161,7 +161,7 @@ public static extern bool AhkLabel( /// The 9th parameter, or null /// The 10th parameter, or null /// Return value is always a string/text, add 0 to make sure it resolves to digit if necessary. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkFunction", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr AhkFunction( [MarshalAs(UnmanagedType.LPWStr)] string functionName, [MarshalAs(UnmanagedType.LPWStr)] string parameter1, @@ -182,7 +182,7 @@ public static extern IntPtr AhkFunction( /// Name of function to call. /// Parameters to pass to function. /// 0 if function exists else -1. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkPostFunction", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool AhkPostFunction( [MarshalAs(UnmanagedType.LPWStr)] string functionName, [MarshalAs(UnmanagedType.LPWStr)] string parameters); @@ -198,7 +198,7 @@ public static extern bool AhkPostFunction( /// Value to assign to variable. /// Returns value is 0 on success and -1 on failure. /// AhkAssign will create the variable if it does not exist. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkassign", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool AhkAssign( [MarshalAs(UnmanagedType.LPWStr)] string variableName, [MarshalAs(UnmanagedType.LPWStr)] string newValue); @@ -210,7 +210,7 @@ public static extern bool AhkAssign( /// Get value or pointer. /// Returned value is always a string, add 0 to convert to integer if necessary, especially when using getPointer. /// AhkGetVar returns empty string if variable does not exist or is empty. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkgetvar", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr AhkGetVar( [MarshalAs(UnmanagedType.LPWStr)] string variableName, [MarshalAs(UnmanagedType.I4)] int getPointer); @@ -224,7 +224,7 @@ public static extern IntPtr AhkGetVar( ///
  • 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Ê=62)V(c5>;8xvS{dh*G{B6ZUH7m$#%+KD(L1zo%jxWsb#+ zr%bh&3BDv=IZQN(MUb)+r2G|Qkn$u7Ql9LKlsUfBt>FH;uPH-B^sbmGlrx{mopREK zQ!O3$Yv6Q~jUlAt1nJB`I{sd%Z)BZG(UG8UWSvF9NSIB*NSH&x$o!UqkvSLQkIaKo z=6Sv(9+}^n1S3<+;{@gTo-ruTLJG>W$i$7z#T1OpCB9&<)RC~1qIv1vHOnZ-YdHmZ z{Xjw8f25%9DoQ!bbspgc4=NXhUp*y<3akjY_6Rg)tSe{9T?S{(Hy@z^+F z5{sa}oS?r>G6wy1ih}++O+kO1p`gEhqoBXeQqW(&Q_x>A3i|6D1^soNg8sTdL4RGO zpuaAeM8n!&Bjqm2%M|Ue(IQtU+Fv^J|4GsQQu&Lb{iSl1qWz_EjiUXfa-E|6rE zt>SL_qI=Un7lRS*B=Scv!f!DqvxttUzyFiYZIf68={P|;cPu6v)^xNycbW3#ePUtE!QXoX>E23{n zO+xupL}!4clnEj_1H@70h-mx7Q&yQI^Cj^yH@QhHg4~@T_b_9SdxV1AQ<%sVV987C zm6D>ltE4hAC>$RZ6B26xu!JvKLcG(UBxPZhU_UKI!CMYWQ&Kz^#FU}j%N2~V zvXt?;11aZA;#!n9iA9jR6XafjG06RC3UaS#5)Eta+VYhsn!Cy~CT?G@{C`z2CnPlY zydY&29rG{5%QYE4FBKj08dHU$V_svPqv)8|nCB@v<~61&1!KM%1!KNC1tZ}F3P!?< z6dm(AC)A)|PI!r;V_suwQZOgHOu<-v#h1jrT+1Yw6SQ7V&_1;pgZ8OILHpFDpnd95 z&_1tH&_4AkXrBfYw9ji4v`<45Hz&MK!JN>DqV1z&>clJql{knUY%4(J|kJ^0-M?UlO-`HxpM=Cn)p#j6s>ZQ&8p) zC@6Ce3d-Em#I;y2ik4a1us21^tkTC9?bFsG>pjo=kkUs)`}8Bq7a{}Y9d~^xGez{R zcl{_oS~~qHJ1w07l#`auK*|+MXAtGSh_>@!O7?4k455@Y`Iu7AWT-ER`{EN5Ii^U; zT2m*e=`hBirk_$!)8Q1LJT zFNu3_ECuz7Qc$liDX7;t3hFhUf_hD$pk5OxsMl8%^xz~4dT=rYJ@_>RJvhae#639G z#Py&P)N~qSP}6THsOfYHYC400n$D!4rn4xh>1-3%gL5e8!EY((!MPOl;5=Uv&#Ut( zm?aiaFe80u>9~3IdlNU?I6*oKEym3fiD zoj0~KZpv+wUwlctFYhslMUcA_ z213~F(ZGVexEi$j!r7IT=g$zqOBw#f=j z}6PK)R{^)bpZ*-BgEIOV>{3CbPWN@Gs?lDK_NnZzO}vlEp0G-FWaGZd8hHwwyp zmVz?>ZW0Y^nYG1Y6fLvLIf|B9<-9N2s-w~e_hww6)R$jIbZlItv=Gsn{$c63(R;~6 zzJh1zI6*p>EhZY)bTs!XOc|@eKPi~&{-R*cylUyV+^?CqInxQ!xo$CT&b+~tk^4;w zwz@?@?tfc4F8A9eE_WwL=Z?j=-0%J;oqzs6i}shEUu==NCD=*@X94&8bX0H_aG!$n ziwFP7>!C?-exWHlLCW45S#Wv!G#pY6nMl3tEGdaEnmgvPq!i3!ag@F`x5QgIu2qwn zxcSft(n)SHZaxe%WxYZ*;4OJG3`NgIM~I}L=-H^oq@?KCsK%tC=-H^oBvABhRAW+8 zaNK!>g5yOR3feF&1#Os)(oa&>{VP2MXX_a#Q!FMU1xK_@6!datUlPwqSxkbnb*+~Z zv`<#XpnV>tpnbAY&_3BIXrCMuw9jJ{v`Wh{T zb5t=3=9Z@@n4^kYI&N<&VdCZ}CrGEH#ke`D6jMg-r775|3-i5TSkL#M;QXSe zrQ^m%FB4fK$!bu~Wt@% zJDT!^rSk=4wxu(MvdYpKOW9@VL@6gNoi8ajEuC?cl(&QOjHl!f(eg~76cf?eZzAPc z5uN?MqSUpRNtBirGnvxWV!oyfwU{ZCNh11Nz*NdA5&bP-8s)g9^9|*$r8AxK>z!bP z&!GHeGLsUy8^p|_7-I_=gE6*DJ4MHs$_|Q-F_oPZ9b+m#Q*?}}?4sxxQ`t??F{bj1FM7Pdh}uKJ zh}uiRi29X+5w(wk5w)L!5p{rq5p|G)5p{@y5p|e?5p{%u5p|S;5p|4$5p|q`5p{xs z5p|M+5p{}!5p|k^5p{-w5%n7dBkC*#BkFewMpTS~S?e4Hv(|YEW~~bp%vu*In6>_( zVAi@s!K`(ef?4Yd1+&(l6wF$GQ7~&=^(FDFb>;?s6>?Q?c>=p%M z>~9Lj*lh~N*c}SS*j)<7*gq7Ev3nGZvHKK^u?G~4v4<3lF>fudykU%mC>Uc&C>Uc& zDHvmM6pXQW3dUG63dUG+6E|yxDVVh)6wF#FD44ZUQZQ?!qF~lapkUTYO~I`72nDlN z8VY8uv=q!*>3q>yOP`diD{I>HkoZFR;{7*eWuV|&hZ!mP@5$FHWj*Eu-~4s*)4}-v zS4r z7)5i}t%_4L_dX&eA-sZDnu4>@G8CMRmZjiqv>XLzqva_$8?8V=nV+WM47wr(XV8^= zNj%1$F>z7rJ&4JC@AxD6qNaS6L$t(m4Y+qY80G7SNBEx6xRk{prC{= zQqD{7=s8FY%0m%72YHE-NuG(&n3|MAA{z5D1+DrDTP5mk#a(4@96iCeXfiEC9S zD05xLpv?6sDD$fnl({|yWo}^NTJ<%GmRa|~h7>Kc%Im&pt9Ck_!hgGRBg$YAecGZi zB!03;hozp^gc8>+>_1`jCM2QRso<=(86}rI@2OWRnp1v%n9TpxwFRZOY^5?AR4~ppg+{PDux3i|B&lfn+bUu=F-e!!Zqi=F<2k|tWgQ+~Py)V)l z@tx(HzxwQwla^BVE0WGTjL9$Zw@8P7N!)e0GmR;0%(oKLANr!d;vt=nC`hL-1?lvoAf5icBreYY z3ep)!sUW#)nFmp7S$PKglDIrWC`jjH3ep)$K{}uKlDIs>C`jj1N*627aLO<%&j?=< zmuDme>3l{(I-@8^=W}1QJcpl*_n%B0O-cS*@MPi_l&uAV-`~ejcK;Ui*H}pW5s|ND zL`8kU-178|kT?EcqIlmMUb)+q`a6hNO=h)gp`;1qV0@y zmQz}+344S3$vc!NNcl$!QeFXJnOFLfxXi0eT$!C9uhon}UTY}GYb}JeSm%q@Vwvns z8Dy+(uo!oxbR)KkASMvqYO`!rRJPj0boPmq5!w8&bX2zdOLS~(HHk%#juWJ_&5x11 z{HOC?kaV^~5_;E+_cm{kJEkb%8DZ~454lc4L2K-ypfz?=Zb_LnonI&)Uk%>7yT=!u zTaedY3iA4ug1q)okk@_+@;X34UI%^AR-JSynO9(nynULIwN9KrBORs;S|04DM=0@Y z!`?0#bw?=~L=K1?qo9PxDJbCy3dZwEUlNbQQzr7;mX**6N_d(vDB&3jO86TEB|J+( z34f=cgfR+Ac+Qu^Eq0!Q@?4;xJQpeDt;PPJpoEtwDB)!aN_d5W68=d+3IBq`cbBgo z=$OCiOX60AxK?$7T3oZOViDBhIt8`3K|w8UQc#Oq6x8Bx3Tknif?C{xgiwpSz9epW zC+XyZ*u}_5u%_L zNhqjAQVLouj)E48r=Z1>`I5N5lAE~xa)P>t8H2ha|D zpOUX99F%m*Qff&$XGO~UqQ`FJ^)v-}Riq%VN)+Vv3?ziSDpQbG6<@So7*WqtkaATD zQmzK!+ON7ViF@!x6Swwrf|P481}VP;;YzQjFNsU|3I*xZq9C2x5SFlxFNsT7&%~9` z2~vKQF-W;Sge7d?i(*KfRBT7FJjd_FesfeD#Hl|Dw z(ev&mlvD2p=ebQOH$*h%P0CW)DqlE>*Nn1Lq^L-9%5N6af^yqpT2c~nr1Z+lR;?(x zL@JBCMJXwwWo}J*QAEqrhSF3-%kws+lZck5Ev3K6iz4kPV@2wSw5QA*74|+_C|5-& zi$sQqyi1uQTj{rBI#8xbU+6Woj+B~@1@HIkM0wNXJ<5O%!B(9qy)C8-Wr9gp%5sx# zl)WbJQ~osRPKn6prL=?}P`>^wcvn>qh(CvSme%M=$+b?hQf=lPQO?H?bS$ldZb zGM!*#e#97z%)S(i%zhM%%>ERN%mEaP%z+e)%s~{4%)u0l%pnwv%#SG;nL{ZUnV(QF zGKWzxGC!qYWDcibWR9RWZZR_{cP(ZXB|+vo z-Q#9cvYX7I6f*giQo&@dFNu#S^GxJUIm_J%YC4}WsObU0*;;SZk`ivxK5GRar{WnyM_LXiZg?`=UMAYgViJoWcPGewD`SxRHVSgzZW0Y^?pm)M zP9%4goxW(xBd?z+$ZHn`dF`ekuU{yr=^iIm)4jeVuIaBPuBJ|q`##1X_x%*)e!#@l z^q>=~=^n+vnXXHrl7=J zp`4ePmnG&;%9#`quX0r0okjUYVya5aRmxt8DI+o0DDO;(_|KMJr}PuiXG?ETs!Q(r zCGMM)1|qtCzD1ciL)tKj=lxAtBBD=R-lm*y9sE9chjL3qWA0Mc%T^;pp7#%Bw}_VK z9_5(GvL$jwh;l__wa5d?&1P}l7LkXPB+cWz-6H<2xN=Qsb3(>h$-G=ri_m&pBg!qJ zUo%faX+JgMm6VoGO8G=YznmUNnJuDUPLHQ-645WGC!_SA8MI+?$|w(QyCp%@9 zNV27J7Yb#W$Ri?;QPzrN5y?r}C6Zet7v*=6f+D#oNoUDO5XnQyDpFD8aY_-9Y9dci zs)^JR$xC^~Bp;=rNJELqPiblLB&DNBbBQTH>19%oGQ^}1<#Ut5kc4p}EoCPtLYXI` z?+z^riC-(yPVy=SN%(tOu(~KtN%c)2B`A-Zl%!NJDMhJcQkv4%qzq-SNmE9{XsuJZztLZb8P9~Kpb#1F>DWy%SP;!_&M|s6^ zf1c9Lq$ZfeO%dJdWy*)v zs;^MKHmL=PUnla1l&3c3h{z3*x{!oNW(Rq_N+~R&dDW-Xu$TsvCKmG=rISb(8FdXQ z14Vj?yiWO2M4ysqM42U`PbIuTS#B|nDO)Y33FWZGG^L!gm^UdmEv6YIeol~Ab4o^$ zF_L==N&#kbxAeKn78;0vSxf3SV8B4(mBuc>wGzwNA-%zjunNGn9WCjH*keL*$ zKxR>}0+~(03SKo&qkSb=Mfz*Xtk7rqt!ABj#kSlI9mNc!O`kR3XWDQC^%ZJq~K`v69q@BRTLbpR#R}a zT0_CnYAppvt929{t=3a;wAw(y(P|?FN2^T~9IducaJ1S=!O?0vB!r{Y4wGnjh8(~A z>n)V+COav=oBT`($$CS#+C|A~vYS%E!00n zT;5O7_0J)ZgOISUzI3a@6kRQ=9HHoHS>-52SIa8LD7so!IZn~lvdRgHu9j6!QgpSf za*Cp>WtGzuT`jAeq3CK^!9>2 zJSSU4D5XSR5=mjQF;r7zdp5aFLg^y%yrh#rStwFh71+{WT&Lw8uUdDN=^~&i^nMCM6@q*QtFCqSuR&jD9uH7 zi{z$s643#dhcZ}1pMQUxGEt=I0=aTRStQb0Brj!~$RSBNALYErDUtk?ow%QH=7V zh@P<)r|cIQFX@z^TsJ92NxviL!7`LQBHzeXWhw1N7K)UoY!}fH{xrqg8I15slv*Nd zWUI<1u}C$^y|YLaNa)Dsh_~)1d9O9)lE`+Es+0#JA5D|*h*8qYi27AxUZlJ&DfgF@ zUowe?qmsMsO)paxn7l&SVp5B8-lR6=p-CM|j-P{+>ryJ3)T6XAd6hEMq&{VqNdt(t zT4dL*koOv8r^)LkZm)d9Bo=9ZF&G<8hKlI?+?X*lEv5-&wZ$~09I%)-DOW6}870{t zL0-)%Swu9i7Lt^9}H%sw0Tn@_Ild|LOpkBQwhefnry(!hN1TlRmtwl8E zL&_kF`G_*fV){~+Sxi650gLHRxn(f}C~5u-@)}4fD5CS>Aj%6CGnn$0#SEbgwwRA8 zGet_T3wc8+8$~LKd_p-RQe9*i<&KE1tcIJ&H z=akP)MpIUpd_hTdHOOlWrG&{?NYGfabT|2$GTLMcWrfL9$}y8^lshKhP&Ty<$}`=>&7w0*Vv*Rfcz@;Kt`n~whz_-OBi$dy;(=6wwy@iE>S3 zm~6F*a!*8CV-2O|y@)qSV%Abxip&sMN9ifDKx92-q{uRn4U}I!S+|I6q?{4iBC^RO z8qQ{Ss%)lIFxf(BXtI@Z`ki1LZlg5o8pw9aCX3lY>2yDc*-81ry56<=W|0m@G z+-hU7;F#;=si4Qv&22h0@<7 z?Ip(B7+k4{MUo^0F-a)7MEXihQc8J?iKk$;Nk+kJlbq5(wi+Ypgeg5mz7mO0CW*`t zNkLg{d8MM95m_NI36$#=^9Up~CbhiBY*WZf1BomaDJ_zgvO}bjNIH{fxOJLfUrtX+ zYm$M2*)Jmnb6qA1=DN%j%yn5PnCr4qFxNdwIrvCWo@|tN>>In;DSvCdWIoJ6No!j@ zMmZzDZfi_VN+FBMMX70$n}S(AkBOTzA2*3bMy3yrj8483(Iev%jH#VAc&9;LCzXOX z_2r{97tuSE@>9Br=sMv^N~~C}Va&bnQZV;+pkVIpNWt9OiGsQJJqqUD&J@hO zT_~7)yHdv5dbJw`tIGE&n4h~-Fh74l!Tj8Vg88{81@m(+3g+kD6wJ?kOx*nZp-C(< zq;jy9aPpamt|~ub4Aw|}DcIxsQLxALr(lm8Kp7_~x0LyLAZ4bAUNav=St6oW$Olul zi|EC>;1m=1oInf#x0zW$#gzq#ZL)&Pi+_v920)&NtO z`>2w^6NOVLGeq)7V`~dx5Z4SoE14JJvf7MUF4+5Op5kM zvngprwBNslgmMp!^ZR|S6N%B0;N-){gSXW|qT%IV1uH8jZDlL%_j#61G(6a3K4qH8 z0u$F?-)IjGq>q>#d?p7txqCChkk7 zYbnL#%B{BZI!ck}f|g%TX=<{8g72ShG;uAz>HmkgUmmelEHb&V{JtYkb~t(PMerQ! zW=lC18Er9JC@IDSF|CX3ll8DKFxDETaAC#6xbIKMnUQ;M#R^Pij8Mahvg z-ph7W-dIa{LquDCkIBYR8A&>iCeiQ$J5M=8nP765vfktfWq`?1 z$`O-eCa%AZo5Uhzd1T{BBho{XPN8% zpu8c{Q{)n*jiqy$(!2MQ&5DlDR{{O6D#FE17>NSjpTo ziH32czE8oC`T=E!2xhi8N==K2r@Uj5 zj55L`xrrNNVUt*7$(KQ2IN2cbp3DFd#{4RxGeAm8Or*EOq@vugnADVbdCqr;#5_XD zETZY8g@g)==s_mDxM17 z&XkE#;_ry}w)~EtnevQCCy^|amqc_0o0ZZ`#J}r<(oICykl837iD*r8m_)+^r93(| z9;1vm$w^skl8Z7;($TGQQ!tRxJfM1M1HO4D(fgGZ;SL6d4lP55z&y$epOGO${G9Qv>Fh$;=fBot9AR5iaD;6`!4dXtN}k=p{bOw@5;QI#Ry1m`;$;DiJ+4y+_&mANgJ6 zIVq2exhhgqq%*gQUl~YON@kPyDMd{_fJE*~%WExqQnDWoYSD}Gw8%fw7riO3i|9!B z5EAMkk}+Pc?LZ>UrB!wQ=}UP>M2~3wDBVT$noNJnCn9=HW&q_Y5xw7UAZ3w=_SYcF zF3COD8o9PZIU(|-$Pmh1k@6xRQxc8@bstJ8Dxy9338l73b=hhdrHzQzeK@6`NMnf^ zL78ANpHY^JyeBcED2FU&G$eFSWU$11LCJhHkTH4!OHww3RdQGDHmj9 zYQ5%}xK-19lUQWz=Rxl{nJuC{xPUP$E#^DQc9ZWZ=SB2bu#oaVM2`iFC>cfv``}_q z0TJEfmQeJ(^36qZ1%^^xVxCFodCMq`M0CvmKZO*zyCy;W3q}{ z;k;=z1+)4Z3TE}S6wK=DDEQ4~Jq5qHY@jTan*K9i?m40C5lJfdByXaukP_;?vzfA2 zM0;n8Ni=*}w$fhSO1UU8D%&U+E!!y=EjuXqbzmnY#TP+3KU4CW>@sm9YPU%&GG$>< zW+z)jw9LOSohu?*!ae^I`L%i1yBJlrtiFW_OlyMMU?w80Egj zoTH>1AH-asWEatNE>enG%q5eJp*KWyy>Zzj8h%rL(a^d(X(cf#S1iWW{m=g?vBlK|4=enUiTcynp#Y1N*{}Pgfh`$(ohy#Oj^ngi%Ca0Wija~H!UUuB~_20%o!<UZ8*YS%Up)?qKKBcEahzxEps`_$0Azh@|0O3TAm7&4I)~erzs~z zv^*6lcSN)eD^b$-3Ci;frKpIOr!u96h?eJBN^21}uy~H%4)DqE{#*ol4*-DQfO(=hf=>1Vm zO`_qV-GcRDGfFy>=9CU5Ehs1L&gzzwzfD?EUa_s-qO7%;)|7cBZ7AbR-lnv-v&goT zVJ7V;STVMzthShUC`V1+rQ9~@K*`ZBXpN4PswSN%Z<)MD>2K1RGR33|Wur+~%I_xK zDB=D=?(b9bnRKT-XYv81g-H)eKa-x6sV2QB8%=ss&Y1L}JTUo?l5Idx!jCBBP5M$A znDnE3XwskZjmZGYc9VgWYbJvznFa>A52lne8A54n@-d~a$xzBXlTRoIO@>jD4hr)6 zl=76xa7sgy5tKeABPsJuKBF8n8AXX39OU)6iCcA#Hi<>NdpW!0 zOlhx|5U_O-@m8b?!6;*YwU%Fx&h_>1FAh zrC=rVI|Zwq7zHb$a}=zs&Qq|mxCHi^kg*(UOYNIuFb5uN9sq}&xLCNTvl8CC=_g&?8gB2Ubax2!-S_$9pv z1;3;hrQnzJVif$6{uBkjq!*{)m-G@4{*qpjf?v{|;FokK_$9p*x56*!WhnS1y&MI< zq*pL;Ytf1n>;;u57*Wqqo?jV^=gJiPI{7RGzfM-6;Md9LOx(zP-bCIVT0P!d{kP{i zX*)8R_r!I%Cc~IvXCmHjYvuj4lqn*Uzm=z=C|{lq=G7M{%SCiveUZ}hM8v;0z6NEO zh~69j5(VG&s7b+hJzl0f5=ri_S6`uI7ty?GQ4U&pYE#ZzdFoIey%Fcdu6kZwNGSb9 zc}KLoU!tB#G(7yXpygksym}#!`jq^?1=4_mFLb;{dDmhZQhHlDuTzRj?mDwIGI9O& zhDj`PaZvCKxRa!VgSV+SW=wVwJvKF=lorurQ&S4o>Tgo8R&Pexx-IyHr8(t|BEfT! zEhue8^xUB(rN4;wMJvh#i+PK(%wk$oCVU*{Roo))!lld=(Yd89WslUNuEeyXTolom zcPMLQt2PqzE@iK!(~)vsq_@O$q9h#}q|=$QS4ucaV!BXnifCTlAfZ~4`-XC!_r6Iq z{C3gc7qRY?p(YdH%vQ|W|+zzDtYB7T-7c6El<)O$Hxkq{kC2e{6 z?wiQR6g{^(Br=qu=T@ggKB4IEO&3IlQ686c^f!)ADP=_TiJsw<8X{L^s}Yn&BHGKJ zQQj3vCQpElqV%?y(G;wRzMx=5G{(fOh{jUzG*gsvSyI*+;7iH_lW~-c6@r-Yl&4H4 zP->Y>q~J{9D+;c8PNKB6ttOkeG4{2ITgf=VN@faUu#%Zd!AfQtCGMHvnd@&TSwwV> znocP!qSr}gP@WahmCQ^^?S09-a(XR=QeR>+%2=IEX)3Zsp6;AO=^&!LJePtVoJTDPyY1 zUZ8vKGDeNx_-;DwB<&W|Hzx`8;nmrLD;tx0O8Ybw=)` zSxZ?ga#3U*Mfcq6BI_wbMD#kq2Fhp=?XOLgPSwJG%w|e&5sleuvN1H(%Cn6!*JL}l zLci~zpx<|zxPJeclGdK>+C{P=w8OG7tucb zm2y->`*a`WhRAw3;_s&&3Blcl_bClU^#0xlly)LIG9OYt6w#6CZN-(7&qZ`E2vKH<=w6V7 zvdUtTQubR+9ObfzK8X`gNj5Qf5+@lYr-;TRr&O?*Fr|Tr);&V`Kt$`Ff->G>Qc_k~ zOe)H05v_Xy<(`PvJvAlsS3%4plu{xZlZK*mW)CTIS_M@UQt3TFOH6g`4W zlbFmD96_>D>Pqg*CFW5|TM^wWvr`6GOb*IKi^&NI;fdy4lrPrAc{?R#h$T|`GqQOY5cVw4La`ZcttC`p$DQk;@WM8A(#f>JSg1lyXl+y!7%W-cpq6BHGJkC>3R^$0VjKrKX6+l&3TmDIhTwC|xY3B4wCJDT%2> znPM@OA)z|m!~R{1&r%xxN1m=PcaKOqE@rEwvtH(n=egBU5uG=xQgo{tvQ;%mYH1)ZLPEM#Gl{7|(GqqPdBr3et|D9MSgl2AXi}TvOv-~AK^Xf~fX)*mMtu3ZMrLV;dpiHosfs~~dGl;UwVg^&riCmP{7((%~ zrjYxi zP{x{kOPMF4C7erHE22*m%!5Ssi|Bspn^^`f5&PK|1i`hiEXfaz%qTxk_gDXp0DZeHOWE*9t#cZcMpDT#jLFr(! zlQP!iXUYnbU6kV{yD9ffexYQ|9ptr#Qqp8ErMAhhl>R3BD0nN*e##PyIY8NMa*%S# zeTrL;3SM(JmAoHEhm1jO4Uvh0|AwTBY-cnWWW$Z1G8uZXVw zeuH?gi0D>lDMM|m7$iK)wmJ{-c8KV+?H4EyM7oRo0SRY)BFO79#Cuvqx4J@UFQQxh z1qlzdt*$}5g|^jo%5B@~CM29AZ;;pD5U+-a=5?DgTtxG_3kiQ`Tit_rdu*%w6fa+} z)k8=)tBAH?Xj^a{AnH{V(Y%sSI@nfmknqR0RWgV-+qOzh*>77#AmPilRZ57LI)4gp zkMvh6%F`kzL{dY-uZn01(?Gl~wpCinMB6GoB)rhJ$_Vi`i(HbFGf|F;+!4tF37@mA z9))$N7Cro0IeR6fTqdX<* zxCrG55k009rBo4_AzKxrv=q_fU~!XZc!-F$SP9B3laiF3CZ#A>O-fT9iw5bGp;Ry_ zYvS6u-2ar|TxPkPSN=Dq{C~EB1Y2E_XUQQhuL`zRETT^@>XF)sKE0?d_O!*gX9Fw# zC$CCOCsVHAS7|2$qw+O#Srt6Pm@3ocxltJjl_~#7UV07oSqkpCtwO;)x6e_|>9u#+ z>Uqi?kxC*}DY!4U8U^>|R;S>;+!suu;aYYV?u!)Msau1BJ9S^8OtYJ;p--@ z4I5F=hHp^NhK(s`!zL88VN(j)@J$ofhRyzm=ojJj8->454S7L~ihiR|rMbVAihiR| zr3FR5QK-_AqTeV~X+_a*6so*M(Qg#0w5I4c3RT)rKEDz?iTpMt{q^8U0NqJ-bMmRNF$=TcckPu=>+k=Pdz`B#Cy+|#Ba{& zY9cd<4umP%JV)2<>_uB*ApanomYEMv^*+3ebK%^UcD&Dt2ZQmfNb@Hl)2Bp zWP`{@l#vosudCd{0AXtkq@Xnh`I6LgBWkdTtGg4FX9!|KD9^|L5-ras6qIL#iEE9K z6tu=?zDR4t&y!jlmUKo@PKm@s#@bdvne|DoiT{$vk|gmaVXK76=~H_3WveNa??sx3 zOr_-S7`%gP8l|+z2XZXHV@$U?Owlo~a)hE|Ugao7 z$GplhijH}eD;B@H`aR;+@*7$g5PQ%QgAPg zw_VSUwZCvLO%h0aj=$yig6Z=86bgQIjiapVlfqjhC8Q+i+l;kO;}MfEBNDJf?@iSv3$Oe#o1x&v|E3d#Ku${s0?&X8#+mqoNM(o%3I zMmh@a#7IwxNbZ_W2Fep6nodRvzM!3nf-h)irs!|$>!pNQDEMvtQC||TnzEV1A{Yry zFcPve1|uN{1tTFR1tTFB1tTF31tZ~c3PwU+NC+b#9|a>JzsbfBMgk-jLGL_?ts>~1 z0u=O4K?-`O5Cy$cn1bFZLP75orJ#3;QP4Y2QP4ZZDd?S&Ced(Z>35ykN>T6zr_z*G z7E^|TFN~L^;4RxRqyR6L-h26WsCp zEMwkT6kKnqLK!5Y*IS-5iSm2L&r>EzjF!2oiOanj)4?yHPPX3)@~Y05b0V783lM*d zEnO#Hj5U#Wr_21KdA;O|&QaPII=9rMXkVzjOwqnjd4+;AsallVCFP595>uO!u~Z;+ zD5Xs5QeH5rM`>d6sxSJzY)!e#*Yaitil(g6fTAg@yhhQKRT@$>WtG=`(YiM)7nHCO zrI*PYlu;&)DRWGkP_~#fr5rbTlXBan86{2mAou2!A|@>;&zZEOG&5;M(XY>I%fCe# zZPJ>u$fONryUE*>(MsGBjr<*PL$`Z z#onV_C>w0mnUd6Ex=^y3bfpwB=|)*#>AX+bV$z+G#pDA@ag!dDIwn0S@0#?Y3^M6W z8E4YR7aif6myXO2DVmqcM-u;rY7F|Ui-Q4Wxu_z z>+;X%`aaWlJ!?JBT5IopdRy2QrH_SUr}VXO?370=%roUt3-e5Q%)&fV9=9;hlztW- zK}vrM&p65x7M^jGCoMeVC{I~<#!;TO@QkB8W8oP`8DQZVM;U108Ao~6!ZVKYoP}o` zWsrqu9A&VDXB=gSg=ZY4*upc8GStE|jxx-`GmbLc!ZVIC!oo9-GSb2`jxx%^Gmi4S zg=ZXPw1sCJyj+<%u+KYsZ_&El*Z?F z-n1M7sR)@Z$?{mR)Z3C&9mFsjb1V%Y%*H%PmdA^w-j$@9g;MWXT82{dC0QO*mRcZ5 z-GZ1Z=+B3iyCF3oA4{@4$}F`=lKSQ9RNTW)EDwdYK9yv7+*xXgB=sm_PDRb1TLwcK zL6%9fCnKvYwL+4*0@55YD=qCIH$YZNvb+MY)EY_ZLB!mFn6;8DuQrTXCrPb78^4=@ zn6E4wA&*18mSlNFVySN>sXs%h?<{4|7EApg$?~ejQa?&kl@Y_XN-T$lQX3^%UfEb` zlO%O4VxC2*UnE&xR~fTKl6n;V8H<=-Ekhu$Lbgh>y!Nux?~>Gb#Bh%NVR;9_IksJr z<$A$VJ0+>P4RZ5&m*rCk=ks5ZEY}p4`bU!bDwO)y@_Q(?N0Q~b!%_u{!(DAE9eP;G zQYG}TP?F^piKWU&Qnf>=vX;i7R7R5JipEmqB&iz^^A1L_k0i@AjxpsWsXIf=zLG3g zJ;qd&q`HNeO0j6otLzX&N5;2D?b%=#IWT`_XY37in z4wppC;lqfjYGDrhLynZBnM0O3S`smbEOm^9Ib^A7k~DM3QZ*zIb2tbwH6>~0kTJ(g zBIb}WCrHxFA!BMwBIb}WbtGxddB)V0M4a>E5mV2?IX?q(vLwwp&r+vKBF=e^tGn6oUrN-Tn$ElKk#!BPz+5w8*~b*_b136^RkN%JbfQWr=f zUL{znv4vL&mbyri=2e2Fno1&GB~~D&nIz4tC}S>>M7)arh?q+)yo&w~xm=RwRg|T! zkVL$SMwsC(Bx&xf7;}{*;@ZuuUTxvp&8%J{NptOHsaBGRYd1?>XW`n-QrAn;T)SE7 zMoGlAo272DaP4NPHj*^gZkB2*iMV#N)U6h--7M8!lIGgYQnyPYuH8K2I#{@N^NhPg zlIGgYQg=xruH9^_lZ9(H+v+SybM0oSdnFOqZkFm|;o8koT_tI*-7M8j5^?RWgrn2l z!nM09q=zKUwVS0Ll0;m)*;Y>r*KW4;uq4g3o2B|lBCg%FP;*}k*X}bQkH*4%U88ez z_f3y0CQaequb*Q&hnW7BenFnFj0y6j<*gu3#lq_<>tW4LTUZa}84K&746v{s%D`CI z=flp+_4!%L89|V=$g>6w@v#>473=7+$yl!Dzls95wp0Bzf*ZNFLw;*p?Mg^H= znFHZxn`c`VhM2c3KL>f+Qm%2XtvRu9q->r2nQLL|lzA4mPImtqV{eQ03}A6sq?ve42y$RgLnQmp3_ z3rkTJTUd(nsq6VB)bp8RD2!R+n9>*J`t!Nvs31!%rv+JNxhlwV%RNC>SRM(o(lRW_ z7qRe|vUT=nm4&TSR$JIQWsQZcQ`TD8I^|0XTc@nEuyx8;vGABSXp$TIddqb|zIG|b zu+%pe#!$X>sfnS~cb4~qd~aD3g&Gq>w$50rv(J{A# zn4c~82iatKI>;}U7lUk$g-3_=u;wim)P0ciAjeE>9{$_Q?~z6E7d6B%{_7QS19U zMy*${sP&3LiqkF8AMX7sS#AqbITntTF}(BL&%zkW{*w4JW*6i)!3xMhl5E4v z@#*5R_{)Zt=8&$CLnWy;kY13(EIlFpAXP0RAR7m+r<`ax39Y||QgtooLHJI*o~1>QlPqn6oNOs5kloMG6;ZeTUF+W2-g|xE#1z8JeZRv3}{=&=n zg6IYdKZWuf`Y@-|Cf2*-81 zh0ju0b0U0h^ADthV+NrVuYMgZ&qFf!EX^GjK9Az3G4HbQSres`h0l>FcUv}~o`X)?2c*1-uDt%DOSS_faYXdRqn(K?uj*1^e+ z(K?uj*1@SEW);HF*1^{;S_j{-XdRqs(K`61MeE=! zi`K!}7OjJCS+owmZP7Y7$D(y`u0`wMJd4)BcPv^5-?eBRe9xkF@O_Kc!TA=ggCAJ5 z4lb~09sJOub?_sL*1<%y4lWEa8w#`zF0yDHT#JeQlK?% zsYPqta*Niu6&9^=iD->m=@_kXUs$xpt+Hs1TVv50x7MOH?n{f-xOG7m6ljfGZ_yg} zjYVtRcNVR2-&?fC{b11=x51({?#Cb{1zOQcELzciaw)B78!cMVes(FXXqzlr(SEUL zMceFpw4!aXXhr+gq805oi&nI)7OiOivuH*8JxFoH)%;AXgMV1K`)UN)7R%mu$2%;# zKiz2=ic;L=?y`)5a7XlKEPLM_|CJ|KqOHI4guAbQgCuvyiKzA6j#2A-ENVUa49kA} zJVAHI1(r$ZA@7$<#j^L^acK)s2_ro$Pkxw$H`jSm1;0mKHBa~p)koyXTaY939evq1ZawcZ)ad|Qc**HE=mOxI(lRc1H zc~S)#s~seFEE-~@b@F1afSi~oPeJPD$q-1rJUIt_J}FP0g`AuxJJ6p~@}vpsIW-o} z`CqTg-38RQly05dEuUuT(Jl9V;nOW^Q@LjsXIS{j^9ND$nU+gX&rI~^EJ^AH$UH~` zNwx=sd;YU6b+5^_evYLfSf#S_ARPOJmZc%)BFmZ}O)M3!&(+-2a%7NZl2mQT z5@hUR%j7MkL@n&-u2(3T{LxgsxSB1S4nVp`o>$SIn`7a8 zzB=TvjU?3$vIgV2#nKIO*2_`U*76ARjPFIZv%CP|9dvt1c0rxo_x^6P^uf8qw|KW( zo(s~!GCD{{%j6(;Sgx&87}s;BBy~JS%HQ_6D;6E)2&3o}q$H#M+-*^RI$PAAdo1eD zy%zPSi$(ppPg0=%bPbYQL4HK$@6VH3=wY`!xf9Yo7S4om`{kalJdhW|zd#`=iT^$| z_W(UqD%&3OhgXS2`tX{7{5 zbd19@hgfthPQ|z$4N{U(4=o)BK22gjm}U4)Dc z34*_d7D^RcRL@XJf$ABSSI-Pw>xSn^CA2jnPwGQPs-BEihfx--4$tS6+Jc%#=SgkU z^Fl1l>TFyS_#A1BB((s-k-lhI3t5kmzGT@9DS?cYWKY32e_79X%U_7uif_72u%vIu z$wbRx5SDt`^62$tVwq&AhZwF_lPzb5Qd1*dDXHt$ZL}9ZV1=P8I}q+;e`3#H>@FVSUUWfidsNs zT8_IZ6SaoSvNVNsg3Php1nCBuYx%n}e!B+pp5+AriSU^okJlHf zCwo=M>MBcn$U$g*wIs#!>j=miOCQ8g)>;NZYC^uWOoyBb`O2~`#C&Zjz(|`Q=39%N zIeah4_Q!tgTkOXysmVpTE7A{fjIJBkVU9^kGAgwp#9#*!O8uBuYAQ-el2RrADfLrc zsSzk8NlI<}PpO~tNM!xLCvDla;55Fhn5pw*~;9UyQ*)EVHIIq$D$ObYZ+dEFEG>GPAK~I~@DfLP>$@N#)hk z9LGz7-;oY0by=0lXl|q>o*Nm9=0+l#8qiR<~r0PNn$F;F`RX;;hMnRMI!Tp?B|%pLH4(-3vz(v7syszTMo2D zmteJm93)9S`FZY6>R?L+#6&nR5~&J#eJGxj#4(x)Pa|W81}VwtzVa|hf$l30x9Gmo z;@x{9nweEyio0&k%p)Wj<>yF?@^h3$`8nF6{2XIZevY*$Kh-1!%1?ER@{@@2QzOLW zW*vX=_&AmF75jLJuh=I@oI{IqSW7Vl%Av*CNJQDFtx_3fqmD({IMJeP)U_xZ^(4;5 zNfu=z5oP1#IEM3?pY7qVyPsdDWMs&gfGZosAvHX%-&$PpaTE6_&0OilT-; z;8}|0F-T*`Ig;!})l%`fbDrg_AdMuc6|ZKZrRdN3mLDN&A&o7&AiP30k$4nMEsw4# z6a9?exNBw^4&kr;Tp~%`x(44+Lk};NWd9hK`-O+gC8_!+mWf8K!!rlV-6M-)x!Tfg zY*F;@_xQ#^Eck3#M0p!>gJS%9AU9j|TOVyK4~Eunk;Kn(Yodp3E!QBcCqvpxvVTLE zjgFGI)SZaABNkl~xL(|y7xNQ(Xvx+t8SJB5U>mh^ix5oNeeu0dH^tb#8VSk>mRCuWJYZ|l%)ZL zZ9OfC^ZYw{_>3gm0x_)lS<9`V=I1Q;hnPW@Cqv9&%L|ZuQ1cMWEXV_p;#l^cnL~q= zWOTd|(eWDQ7#*+S79Fn<79FpV79Foq79FqWEjnJKEjnH=SaiI`SaiHzwCH%fWYO^& zYtiuX*XIkb3dDEh&g|jSLiDp~Iy@DsMJMfFy z7Or2Ewo$VZm>K|Z!DgRqASEnf#&WZ4Aa+WmISZ zO3LGi`Pwl%&=C9lz2!{QL)qX`jJc;<6qQ&QL)oZO+2dX>6Rmv>_qmePtsfUfeKzA; z&z8F(PeQg>dP9aowps=R`Q0)+$Tmys^{MD3l-dysKOfH4D{aF2Wl6-=4}tt;Ve3aj z{;{z2x{y53z`3C8eW+Y!sz~e3aokmo@m?c|}1= zGQGl1Z=YDW86YaVCf#}IneTKsOKQdq!4qkWkrZNBo_Wkp~h9kqH!H+(YOw?Xk3R|G_I-^ zjq3=D#&x7c<2u@+aUEmPxQ?}GT-7WZSM^wU1mCKgi7vor25MM7hFk)vY54+jHRL$U zPmmiR$6Nk_w1b>r$=1WuOGqutF%TY|I+ivU6h;pq=0rF6VWlf&@nou7g=;nn^<&An_6^Cn^|;BFR|#DUTV=Xz1*T>+T5aJ+CoyGV|rzf z1qC{$iRhSKxvYTT0^y zE`i)&IS{fMa-*dVH7Vc6w z_Ail*NfLagy(sz?GTFkhZ-Pv>aO^uEGb|i?sj~PrV++Tgfy}aS?3A}G96M!>g=448 zvvBMcAn#f@_Cp}^EgbtXkPj^!`-zZ+dBT{*v2d;A*bAEAvAQHR52dyvKc8DTt~-Wf zCv0Ks{~~5(EXv`-h*>R(SkGhWQqdX<>v;yU&cb?zK-R~?xjM2+xu`38_^l*fQ(l7n zXqktY$&ivzPx4gcryvUoRF5QgmFS65n?p=-n)N&e*`k``JG-HfU;k6{|ALeh%)*nv zQoHe;P)TMi-mt8|L+L*x1@Ge=EQgqFmJd+sAjo#hc?$}oqanL27X|st(j2lHHUDF& z`b=T8bw1vnSXv>5cO|flGW0V ziO0SNyKafco|5Foj+io*cEgE|Ti^iS^$9^hG zCBm_v3#sf<9D6g!enFD4@9!9n{pixAB8$g!osm%ikKrU8v9WejXe>Ly(LN|!m+o39P3gX`yG&KL6WgocMQiq05KMiy{2P0 z_F;%Q&cd;eha7L=*k6Uzws7o}6D=BhJqySFHeyb)XzV9jH1}w#W#lq|1Z4FZKXFN`~+ymKG2H&Q%^#3XMNw705gCTr>dY0v`bnZ938(1C=a&|0x zuifVaDaokyMAUji$EfvlEo%L|AjN66&QDD@vaof^`LS@MZ5v?M6qSlDuMtX%~G}0Cpjr2;3MtYS+BfZ+9k+!sGq}K!~PIII@ z7S~!hQc9~tLddB2dKM3kR99i#l*Wl?@QS(KlW}lg{CoJqU$YbMP6hn;?sL#VJ z>ho}m`aHs-K93AioMxYyu~8QGnex1aeWr|#g<0)Y26J^cKGkV?3eplX#?pRf+2|(7 zi3pYcKPOgOZjh+3cE7_~mpqSjvyQk-V%9M>cZ zTc=Epg(LkGF}=~}DVFt+{*bAbUm?#yUa{>ag4@3 z*P^k{vuNz^STy!`EgJiK7LEP=AjN5pokwTBg=43DVBy#)3oINv<-=HbOtqKz$fCW( z$CkQbXSL9BcGy`hvS|PFiKT1U5iO2o@7eol5PbVA)SQS~|I9IJeThY_e;%Ybtv$(7 z3tQ(%m&L-7YK2{H(F(i5q7{E-s3*C<_##NMQYWH%R)v^kWnAr=b)K%V=saC(nTuW1 z;n>rDX;}!V23cp(RpKklSBT+Rus)W(^Za#?zh=p@(V@0f68bu-+#lDWwC@NSqii#GE zqLM|Us2rp?%~9}7+0VjJQ1-WQ6qEykBs25CASIbim*hU7l*peDenROW#T2A3&3*RZ zU<>~`WZ5P79Bh!{^dX30TZhELWBM`f`d8y``Bky3hI|7#)G~Ws?(h8_X3^htt7_5T zhC9NdzYTYknFOt&AsHv@X}RXkD%+NlnLEIS~7wlVVXej>V^jPR$cOr#&r5 zvUVq;9-i(P_3#XfdU$4#WbHo7qP4q0EX>B|_^YXncH!-{(bj4B+)g43Ap7GvQWM9lf!u^XH?{l@ zxed}xlG^9DqNp?EV#{HWUXaTyCtX$;_4pH?XpM!VQ0rG%)OrhxTEEhw)~}KjsP(HY zYW>iB1Ik59 z@izf)4l&8q=9VBO1&T>TpCP|Bj$u7#<9pEj#gar$z_*9^ZLju@IXB2{lI%Z!mx(`l zb-QH*KF!N-x^=Kj3!m@pX!$V69hR>lRc04NcUttBvg(bdjX4f!sM0pXRl+gYeq~_gfx>@Yz>)%YYycSY8a$!}5BN2QB)n^+OiE ztNje01??rt)?JzVgzdwYv+>zxW}~;I7{aXfu{2$pdjr+iGCssSB8gYeOOTC6W6>4q zdB_t%N;0bXDT``;+M=4DiG^1ZeaduzMV~SqXn6*on&wEKwG4$YtIt`cK=|BvkmX$n zKes&C@)?AmTOMM0D(n-AE$a}&m1wACbC6+{H0Bs%hR338@M=6FNJ&QHN<`xt=@^Y` zlttru-lB1hwrE^0STwFNL5kBH7uT;BEgTo+B@4$z8EfIVDC1(`(RsI9QT+62yyf*$ zxu;JPEQ>?TM9aG&=4HzzxJL2&Uz04?LiiMGvZdWVxtJ-IE)d2{we$%wuUH0#m}!>L zA!fQ|YKVE&vKT#Ne_pe!3Voho`7Xq~ZrL1S-mu&n#x>J&cNo{3ma3(5ZOyXOhHzZ7 zEe%4hZGC9@KE!-v`7_AJmiI!bg|X~?ek}@8lF`geL^Jaf$7p6QwrFO4 zYSGO6%%YjO#G;w`xkWQ`sYNq$nME^mxkWQ`g+()SrA0II3yWsvDvM_3YKvy(8jEJ; zT8n1pmln;;br#LcuPmCG>n)m@Ut2UYzp-d$ejB7X&6&w-%Xb#eOv?8b&P>V=7S2q{ z1`B5<S8!aAs0A$HFV*mS(B=O0vb$ z<)GZz{i~%Xgjbv2EKh`(t(M{t^FPZ=A?A0>Gzib!KP>MB*=AW8WP2=opF2B(lw{QB zMAYYAjN6+nHl@X!ah^}wXn~W-LY^F`NhY%@8|BZ+>cM4 z)xziAE!m#q=w}m$VSNVmWmtk=`2WX%dwDB`0hYm%juAPAtzg!Lk@-1x7-S;4mrcp4RSK1 zK`i`C7mp5)X+ufGqcaXM=URAlUV}8U@aVh?xxm7sLuqW`(OC$&(88m$9MaUnqq81z ziG@dJBjj=mkIo;E78V|zXea(&l7&a79OPOHkIn&*))pR}BOy0hcyvyHw6XB$)Q8+^ z;n6t{a+`%m=Q2n~3y)4~$Xym5o!cRuEj&71AzdsyI=vzHTX=Myfjkfk&y-c~Wuj?w z@Qc2Qyq}YYExe2T7BPK8J;`0(Wqz_nnV(`&=BHYe`ByB;{4|R)Ki#6t zziLtDXIPZ^*DcEYOp7xArbU^bZBgdmvMBR&Bn8U+T#GXQPLSgC-0)`hJ&WGezHiwQ zV&+>4Kg`{uePB5@$O22_ARorU{RZ3Os`rsaZ>2xBur0=mfFDdclYhtSqiNnENGVwT0S_sm=wq$HzyB*kgg!}a0|)sx+d{yd3# zR=Jd9wPT7t%0wd(v&M2DgjayImbwsL0lsuSDz(m{QeRnAYJCv&5cRN!U&q2@L1D(e zk;G&F1!v{Ap;Yn=?FYqVtKtgD-wsXWGzj-38yxc(gf;&tiEG}0noIsu^Upy_GO9Td z)x0Uh6sK7;NAXKu%>~He=Ks|En_{xtQR*nfBvLRx6V-uibxan*UGD!ZM?iR=`@7|& z5c7wnafsPwxfZhTbbQ*`(hY98jbe{Qqli{;Z_3s+iUNy9QOcrGl(uLTg+cJ<=!4u5Oj%9~QpVCE zNLkBWLDH6fK{A$!L5gDG3};)Mhvh76i?WY}ZBeoownZs#VOx}aEo_TY!SWog0C!_X zRkVx>*Op3>_$+uBF_mN4``U6qkdln*krby{59j=WdG(CN*>uo<>ZzibY-!B-xrj-m zB4h#NP{-(uJItap?r_W9D8-Rhwdm|VLK2Vb3)FmMEPIdZm>?w?^(PVa=UB(6Kh-Si zPxTPERPw8diRf1o>pDii znpn@GUrjv8qF+rs*`i-fJVoMPO+3}2UrjtM7S87e)yv=;8@O|^ymcjhdjxW3D3y%# zEY*`ysYFz&f$LGs*%rl|^Pid<{-@?dRO;OSlseBfAAEUX{Mp?^+Ak{|9d%O_HFC`8 zmPOHkrTEPDf9km)NJ&QZB%*p6J4W?f=$cjPB8y5jv0T*=-yZq`cVwZSB&*GWB&{c+ zdMbb-bb%(s;7l(R_j+P+~OGirW|(# zZ7t)`!xJ!yTVvV#iqtMhNk%m%qMF+~Mm67NQO&o&oig5@$6LjlHvDH1>Ne z9DAwN_?yVF?48vvL6WQ{qMGk>jB4&`QO)pnPJ@iGaKCW~){6{hUIh! zTYo*4z5Dz|kdlo0oQV27(=qDvn-=wXmPM`4wy5>Df)uCwp+DT$y=~!0DRV3wDP?Xf zJmXl3W1nZyYW0pqGxOb0PjZcVFG#YUCZbaByPoxUs^11VoNw6z;V*!FV5$0aVRRwp z#sbT~hd)5!P;gqi}^~!^>sj zn3b085XO9Asc~RBT6z(lrAShTpq{Rn;j3d&Hdf+_v@S?VMy-EkQS0k1YW-`ATK~qP z*1wH~<9ercQM?cT&Qf>-zVVIzd~Z1v!Y8g9T#riqXi=#Wi%M+_QXHLvk*>$Me$JDP zkY6m#5VIZfo8=ZrsWtefcAjJ*e^|OA<`BrvJgElx%km;(PKNBslk*`3EBR!AS5fwG z3dWwwlQ$t{E$rb3ka8CGa4964C+i^lTG+#lkji+@NV zBV*BQ;r00##bkd(Jr^P-k!_I6AjdkUbf==|8b~!u7IG7$y5&H~?T{Ll;~s&?&^1jrBjeIExm)B zWf>Kufn|D-vn`(nImfawNJC4}J-OD;wP?*f&vI;tX=KqVe7+=Jg@@yqUSR2cH{Kya zF0xF5yaBn`@*QLmq`9R6diWirWh{Ho-W&3Sb2VSu;yk@EFXkS|&3V!n(l$s*MrXlo z7M%sRTXYt5u;?u4Xwg}4hec<>ofe%1cUg26bh79yxZ9$$ptD71!95n81@~HX7Id-b zEV$32v!JU*XTkjzodw-2It#j6bQU~d(OJ;LqO;&Zi_U_Ff)uBD7H~c7Y2jHw>1E+r zKzZ20vw+gu!n1(V$HKFK($~VXfbxiiX949=i}quWS$GyO=5dR5X#Ha0TB&_he@SY2 zm!hZ+R;wrSJb z`wa_Hl2NHdRBD9kiO=N$sClF$yAUy!$}tPaI!@`oMKTA zr&`p*X|Zruz%_RSMlszo6r&gqnIUlw-?XTQvn*`uHI$ldQCn}vvUfJ-ci z-SBUGe`;9*;rG@*v&?v;Fn&I^#Pazd{ALL5@jtiR(=NB7Ew#)VmAm6uW_cmREVt}N zTMe<-T4AYzJ^w|Jm6qn=KIMy8_C6M?f+Xj1BFe^U$0!?XEXu}Oi?Z>hMcG(qQ8vD^ zC>!f78rRnrjq95r#c7UM-ohMGeu#xvKmMBWIPCN`Somwk*CK~M zTHb^3Z|js;mO^+3^poXV2%iXTv}}X$NzTufH14)|ZP{cw7{Y7IFBbhBpUsxz5W}{% zSUN*^PyMTzD5ottrkPmwK7vI-k|UUiMp4c&8pS>qjUsE& zD9T$jihV5_MFopSQ87qzEGk))`O2{{^QG?1ofrFA4u>fWU&s)SwB5tip6RUt>k zq9ZsKd!*`lG8IxINJ&QdIl-d*)Uqf)wJpj|9gFgFqDA?sYf*mcS(KlXEXvQx7Uky@ zi}G`-Mfs^83y(X0>*J`K@Et=7f9r$Kx=*+8^J9EocZQ`BVy=XoX*mkg8giDU9)wrp z29`z;UX9PT=vntU7Cq~3Xt@%lc*Q=~ayx`G^E^vW3R-Vu83>t=i^%zwaS-lyF0jmo zu!oH;i-KHe`4Ym`FS6`{u=OSuJ&kW_+5f4+=uY&fnWZY^KFGzE1Mv2iHD6+>1!2vX zTF!@XZ*!UD8VL6`ms{?D^hC|gEj=NRL9Vdyy$na%!ZHvsJQi14^cMIkOS^$(@w+Ve ztgK}kN=<^aw7dg(6LO7ZDTMp*R+b+_%ypJsA?A8Z`D=3Z++e8=VLdll8bLlrTQ^%; zhL~F{cZHa?mWM)2JIjC&)86uYh`HS|4Z?ACu)G^$?y#%~F?U*i4KbZ8`&^r==Wff9 z5RU5}N$PaSS7_^AOLNF($bFXfke!hGEe}CTEyG(g%TP!;NDs>!kZO=#c~TG3J5SDs zJd!7EApIp-{j$&ii$0M!(6Xy-Zb$U2rNXT_dCpQZ$RJCDAcHNff()^A2~uns7-XpB z%^<@p3xf=|d>Lef<=hv&s*w*n9-ICgS=pA6=aM>_ZKfpQja5M z^GbZ;*D?sQ6EaSc)g8wKN$P#Xl*S%%qUB3SdB`M5_RQ;Y*On=kYaqO~Otst>VqUQf z3^CIzQy|+h6Q*0{L;i)lYFP^@vmCz~WcdS99x}s{#k&B;yly!b!k9NK4MNOJ%T*!f zP0O7SUNdJ|dIgzn84fuRHNRyU3#kfu+wuy8pAnj4(R+uvmd_DW1EuC!Hb72rt%t4S((Vs-B2U+Ww3xlk)Tp47&yO%&2m44*NyF#!69acWqOF&DM@_-nTob{#iBhn z=f+<_a=$Xioo6E2dH(Gf?L7anXy^H_MLW;k7VSLuShVwuR`I@)pVZaPv%sRAXDN$z zo~13?c@|o<^GsQ^^DJZ0&amk&a;L^JI|UH?L3dSXy zb~4vlw3BIV(N5-ii*_8nXVS?WbU_UC(~V0 zpq21+YrmsainMWmKWSE6}Ej~9MZsA^wGQz^W7GIyXzf75K;r%k@RSWNzDX&?0zf757;r%k@b&K95y&;Ks zzuX&7Zf9C}zx)(rmL#pWOK(Xc-Y*YB%-a^;FOP-HjfGD^IqUc~=N$`Y9pzoiqAj_- z@q3o7d$+tWNJ&PmC!*FDg_zMjV6&UVG5dP8`0 zcK)ZHKZ6vfSr7YTiC7Ou@t0yE*27W!qnfj?Z^!*0j>T@vYRFx)@b1r2Wk;@u(dyhi zS~7})ASD^qlZfgm6=I6htcN`;{hxXY|3AX~OdMSp4f+7TD-y?0>XpJTPE5upHvdzq zOpua{N+qIFWnIt6uJ}y@eBLi@84x7%pPGwYvq~kRQst6*!r%Db$MOP%?>MrS=^>`P z<^2$|ucg9kxhI?zEH#2ujD`2h142EOENZK=MQ!b8QCs^<3iP+j53uNOmmg%&-!88r z$>=Yz9~z`M%|7!eA7){nDTl|xBe-cvCi>}3d@IxPXOJU8sbr2F83ez!8e$SrsiXc= z>S)*eRfF8GQzo)8$T9yZb*$S`sYFz&nroi*ZSHT)SGVlxoIA=jESK{y)MJj-v<$vG z6P3r>be!ck{9Rx^+d1B{8^ZPL1WR^WE~b{{a0p{+Tk3?EI+k-n%!!ss5ca38WhR9E zsb_gV#GGXLEX15_X^B}^j3ao8r5%LNtm;cr-5^sCbDAVuyGw39pJ6%l-kh9iS&O!~ zew}668l-_GGd&k`wxwN=b1V-8X=u3&^~}d5>|D$B5T2FiSvrQ8MwT8S=6uVOA?5FWL)lBKUY}hLima37M5N!@pq{(qpq~v@?a^!Yl=N(krS^^$lVc1Fw%lB~Y5a+5{h zPr2E$Cwyb2jb&V~+^oCBQh8NQ+FEJ_xz*A*NIT0-LE2loJXIL)>u$45-j$B`b+=nq z?9N>QI#_;(@Cwk;QgKfv+6Qap9hRyPX5%hNoQ)$9(@B!$Uk~RQ*V)nxr6~7U3eV2H zwZGSL5QImki{-MFW#ZofzRz+cV)#42T`ea-_!;~AEe#=@QQa(4AzMDd`%}vt2uIOF z5|5(PV*CXhNp=ll*yo;>Z9#fjQs?Ai9=7n4dz_iQE&SvjzZKQTa>0n)ccA)OT0;08 zs7EZ{;i}H>Nj+-W24T!&7M)FxTXZ({v*>Ku&v>i zb3@EXi$2vk%CabY&hvT8jbXhQZP7XSf<@=x7|WU1F>-FaXt_MdOOn(*kZI`QSj&@; zIgs%dek!;hWTGTH2BYBonQWO3;ry9mc?ZI|G1c+~gmdE+%jQteG|NAsp6Ql-3Uc+l zYB>hNdS0`v2;-Vz*%ah;OQv)#8*f;S3^LR50BY`pk-lje4!IvP%Q73neamdiS_tRi zTe0kYXZLoHl8nx{M0Cc@ag5HmxfY#q^DH{!-m&P6d)J~f?mdgnxc4nOQc z!lK!`%A(o3+M?OJ#-iD~)}q<_rA4!Mokg?vD~o2`dW&Y=*A~sXZ!DU1-v%j8zkvD7 zJC5%x9|if|!ZU?2KUjFCP&Qb2rci#g@JykUSoAsSpDes;F=nHMS1roV7GAX|n=HI) zQGT)Tszups;Z=*WMH2C;rgD!@v0Nc-hZd2UXTR^YCRFPE-6my zns8DmRUEPPhw+^DWD8sG4>>hR^2Fn`ASD?+VMs(z7*2PLo-mwY(G!L}!e=0q zD=mBmLb=MqXCRcTEqn$-X=&jz5Xvp}j@V9B#Ad znZxZCJ#*+_(KCmR7Cm#g!=h&ncS+)z$!89of+W8|(b=M3oVdrrXAV4G_geVOfzrjI zox^<=?HsyV_{@Q&?zixn1EpJ#WF~YEQj*bAh(z=h;sM9#DMSy8o>f2==g#g-;0j$(j?&m|}WEqpFPc{UcV_Bj)cf@eN{&&Zc6E&ZeOjolV0mI-7=DCa%c+-q#4rObDObjI?|Z zVn$h(hnVLrx{{2x=t}Z}MR!tTEV`3=$x<65<-TsLWhlN;NEv6*lY#LTJsFr_IRQ@; zS!$x?ydW=I^lWfaEPUspqcho}qcg>#qchc_qw|VIM`xNvM`yZ4N9R?Gj?QZq9i15# z9i7)LIy!GybaZA~badXd=;+L{=;+M0=;*v1q&Ur^!}&bN!lOf(YteOVo<-NOcPu_5 zbKhG5``&LuOp?PN{=ZUEQ0|)C--%F6NoM%P_=|)u;hx%U%^aVOKY6~vGVMQ78TIU$ zg!^vAWZFZxpWkTFFPHvo(Jz;7vgnsff3fJ7OE+8e%cWZ+{^inNE&Aost&+^;*XH{3 zyQN)_KO_Y`A@|~~^ft@5{c`!)F3C(Al6!KSNS#)h=s}d)p_qck5Plwer{${u$i!b# zd&Tewwr-h;TE2`=2!v9(BgnVpf5yU?VTfsqn7{I3)* z=sp)%)aOLh=R`DrB)L8>LVqO5Z`hVn%^A&v(iY8xLW^cX%A%Q2#-f=}R^pkEwrD04 zNjwwwv1le_C7uc8W6{xRip=k8Dfzv0^uI$&MHMYej!Q?2_bC-s4)x@+ap%FM@O&qi z=j5zBFi39C)*Ug4aL;xU4 z?Wgz^EDQg}+}mjDI1B&A+B;b#tm9I?7tB%Wgz zTa=BQ@Ep`gFNtF)8tG+u!jU$&XrxzKG}5ar8tF9_jkJ|TBfZ|Dk=~Ri9BCU#RwKRD z!Wljo$E%$rRU6qD1!-?-0GR-}&2kxJ2IO{2JIFhb4wi0^g^-Sx{*Wb*J7d}V*160FQgviZpZ9*Lb>QnNM}n8NF&HSma`xOF~je*Tnd>F>0)W!sxZF( z+-JEP!s}00%S|ZtMRUAgwseB5XomO8mY$GiXuZ2-0Hg)v0n2^WQc-J256j@Q%0_J= z4_d~c)S-CT{E%fTq$m2*(=t26^s+1pF%L@$syLn-b+23pE) zC>@PMsYG;sJ*${Z!#d@n*87!;p0hNAw1o_^+yJ=)GT71?(giZa(iid|q}cLa^>Wdp zkfD}=KbMZ4h77X|L8&2-;TAp@<}FIoxDX4u7#Ihnp?R;TFrs$UOJhzgm_D`OOl2myTn$TAH3$7|Z`GUxre@ zTRPRt#r$E}5Ms8)qM6C7`t~3t8SeQx>vl+dly?RxPP5Mkq0hT4>@($03;Rs@%fdcW z{BkkXb* zAp;ur?xf0DbSJfsMR!tJi|(Y#TXZM2 zuSIuK6)d`wsu&BOI%@2dEE;=di^jg6MPuJz;^TfmEXw>9$i{&ZXX9XtvT=w-cUx5~ zy4yO`qPwlbEV|n|+@ia!sutaC9bwVk){z$7Z5?IN-PX|--EAFX(cRXu7Ts-ClcaRF zRXrAFzD`}N=D5<heyLOrKQyyBl~(TabXMJxW960Z&o zBwq2)wrIs~Xwiy)u0<>U`4+AC7g)67C!+PMaU8=LUVamPl@v4lLd%*n%0>4=npn0& zdO<*KYDt0a(OOz`k9Lhk_h{EzbdT1`qI8_y}2N2ubMs5 z4ib;FqeUaV!=jPiY0*gUvS_58EE;KNi$;2{MI+4#$29@R^hO-hE+Hm2F8-QSSC#T8 z?w5EJ-7FeKcZ){xfJLL|VbLfav}hDPEgHqc7L6h&90m7C8H}QLh{=s2jn%5JN_iBI zNIZ&1EgHpR7LDR@i$>AUqEYm>XcSLcG>WG!8bwYxit0EP)i8=@;uuO(NFB()P%1g& z2IUFwjtA!n?@x<^Bxjt(V;`!R0*!r`MPnas(bz{=H1?4ejs1Cx#{PokDl83r2Ac@4 zQD;HMI7az-F&1V+rCzeMM}AI6e#VAUNq)xX39~UFNRkbUvoTRI&c@3YWn+>>*_dom zHl|pVjaMwn#&nCul`l<@jaTzxT0mx4l(Cr>W$evZ_RiR>JYmhV^Mp0O?Rs?gH!n|k z_xG+vcYpIOy8HVe7POwNfv3bxvZbOAEvG}8Lq4)Jg|vcvY-tT?16gR%{%4UzJH1aV z+UYH}Xs7q7MLWIEB&nV~%f?S~mRR_gs;ZX5U8E%27*AKu!0zI6OKS-4E0e$`2e!Y()YpK4u7>}IHUvi^J^^s_9z?GJ)|I7 zYxx27@M+kWmOYTwkad=ExC7d7ZWMiGnGM+tS#RkSV!pNv2r=JSs?^A3>|09>2s8Fw zEZi|_ZhUXi-1xzwxv{~bx$$ExoMWe;X1*OLv78U#+ku}fEg*kDHd;DD{)YT)S=YU6 zRESx($+8E+x7(W~slF)1E6J8vbQig|lw>qp6jPGXZ22{mD#>WJ{AST?*=o^j`JY9z z<#&r_%O4iamTeZzmhBeJmK_$&mYo*OmR%OjmOm|;Eq_@wTmH6aw)|t!Z28xs*|OWB z*|JAcpmzb$I^N~-jjFDqr6d{6ghVtGN;^g~q0pk4kg{kdl(A?gq$LHK2^mR7*Qi8v zjVf}Cu2JPIx<>6|(KRY7DbO{lyhYcjobW8rTZVn(7>eF9RIunRLq&_;GE}nYEkk9C z-ZJcG(OZW7EqcpvfJJW^4z%bk!$B6kWjNTPw+x3^^p>HDMQ<4nwdlFlVHQ2tI^3eS z3{@?9%W#AwrMC=6T67OjHzik3Bs7; zEd4`0$6H2(dQPzDxnC{IFPlrp_0+aJbX>XUA6&=kSoj`^K(BS0QyJe&SIt zNOAP<{KDt}yv;euQu%|zs4C#){3}amN-8xByoO*;_r-HX<>eLqSRFu z<|nFDD!RtP{7_n1l%LiX=BG>Pg6MjS@^gbl`ALNNNu%aOn4gM}n_Y_eIT+H$qWs(v zB)3-|iCsb4JQ;#Hc59xDgtS*ZnOkb*-h_6rbPv+e(sXHV&fj5K_)YG;!=0985YFDa zBt8o|1<9QSFQN6jEj$aRK<){W+;QBedNN&W=dKA|Eqx$t>we3!diX2^t_j^NA3zw> z-J)~(0f~FqBS@}?|@cJ$G#T5d3?m8H;<26^aSrQ zi=N;;Zqb{^eil8`>u=FBy(cVs^Z2AiZyukr=*{EP7QK0V#-cZm11x&;IMAXukI!24 z=J7d;-aHPn=*{C`i{3mAvFOcXu|;nlhg$UJahOGK9*0}>=5d5YZyrZVync2NLj?ZYS9(xHH)rDiSUYa07@moE7FmWH(ZKWq~jqoExIDTX;FS=S(KmI7Ut(Y zT>0OYI6reGaefvdW}b!lSp|8=!u)&(dEdhPP(H9IKOb6{pI;F3kwy9W*rNO-!u)JQ zsYIBcJ&;daiuuXl%C^{|{CsLrem=7(KT9mk&!w0NOC`?Fa!H(@mWWwlVSd^|R$7>! zPLS0W=7+M@qWrA0FhAW9^OZ&US#ME(5@CM&pj0Bv&(n}^U5fb`3i-~W{CpoISqpy1 z6F!~Wpi&uK)k`c-Vb{d9;3vy%!*i>{Mv1TdKL^QO`A@|jV3UPc{&OIkRVuRz&r{2XmjevYv)Ki}dyR!!pk)R4sa`57@aEzHjj$Z;0trvPVDEerEQsbf)o>ROne za)_yCQGQOcC_jlXKl`CnBFs-!$f+*H{M3ZhwN!i|{G2U` z^YbiX&ap5*qah6~%+Dl9BMb9Gxxk|QTxel_UPsJD7UidjMfpjD`I(DSi7-DOLoRkH z=4Tn?5{vS4sYUs@%%c2UZef0I!&~4hB+k#3k~lw|5p$J=`RNI{+QR(whg@r6ekj*j zl%MM@%+Dai++b0DZnP*ri7-E-P%07TXCkDHOEEvML2j`qKW#0_&#e~ar=5lQDTB|v z-6nB5ur#hsQh54a$wkSXMT9}`@i0NWce(tjU0_ZQDtG=BzI zIDan1KKxmU=g%NXJbzjuX0V0xr!8cNh4ZHqWSE8Xhcd#V`7_GG`NQvVJa5tb8Ew)0 zNrdyK4@xD%`SUd7MVI3I847vHqWLq{qVsE2{*-+f1ZUq;TDj0W8s;ro$!2%cETT6v=d%n(N6e7 zi*~{vS+o=W*rJ{ALW_37izF${gikD*35#Rd`)TuMdBVGiB|(zU(=N5>vzN;(`t0R$ ziF3FjNO+Ef*}KvbKSzSBiUm1L@tN>DSV7iW7_$trE|f~{fWFQX_W7G2_>0WAFW@uk z?<~3l`re{DpdTde^M)X~K4&naezdSZl^{RG!aje6&ug*In=D%(A44`vvg*(OA?wb= zZ7Sb4fUk{x&e_za;$(+n(j5?Gd zbEWXRpS9on-q!Eyy8QFGp7oB;de^(xUVEKCC2Y?n3EOj-q8Yp*;S64t*oY0up31u} zu@+8%{3Wp#TFgy}weSr^Qli0{7W1Q1UtmLVX^uE~0+cP;%q-y;W|7z!UP3w9Bv#iy zkQ~0;-HTjKQX*%OWA>RkH$}b3<0RIL?D)iSpTtVOA9BAh?1j~ypAu!s1u5!9Aqjg? zSYo}%k2x(WvAQ0D6qDG9SxgB^l;19ulJMK5(h`2VR7S#Ym&!``?NT`jzg>D*!f%%z zk?`B4@)DjY6(sz2siK76E>)uVdH5Xq^{B-9{vzZtN!haLyz-E$k{Xbzkm{1gkUEej zDN%kGP+P+90_sTkT|iw4zYC}*;dcQ~Q~Wk}L|xBFtj&EO4Scyf>z)mWt#yr^#MkF0 z60XlpC0w7IQIxCCJBj7$QhYvbF0uBkgS7O;a?CCoa_O!Qz8QzDYx#;U8HW#h1yXYse7IuL2_l0v|y%->|x!3?1MA2M) zAYltXl(2;#N!Y@n6wS`Z63)&r3HKW#B#ik)Vl#LUEgU7We*F#^Trv-G0y3Qv zW$j-|SodWRnZ(+Y8?wTeyJu&0Kx}r_I7!jBlj|gG;d%*MxIw}eZj`Wvn{n{&G zzxGMkul*AC>wtv)Iw)bk4pEd*hb7FYpCmj7k4PAERAO0I82vgfvC*gmIVrJq-eOKm zY;7q8`HiBr<*bBj%kL7dEq_q_9D5SwoRe7X%^(+ixjV-$1;p0g%TD5J?^TKYuEh3Z z*C@(_>rPxI;1kCUiJu9OzkT7lYAyU%k_x}Veg<-jqP}~_Q6c_qiL&+(#qa4WI4YII z>goweo-{~DQBTu5iS=|pj*3dG_G6F?zF1H5 zpkLO)%o6KqCrDOGl(pxOu=bo3W#+vSW?e3cWnCJqV|gUjo*a<8zT7<;`2u2VOMWNu zU3WnV&z(XPjYeT7vC&AzuDgiDYM%;u&=(txL}a+Nu(%`#Bnl}>(ayY#gteEYXf(=6 zI2sR2Y&71(IG2}Ldp?3x^yTi+sO%*EsrE4m&$!1a>U$L@vA$Qq=ZmTmtE(2Ix-Zsu zyUJL5o}}pW;8POTRg0pY)|RlRbtIE&BzgxU_^XA!r1p|MlUs=)?-|DEY-%9k=Yock zDOqB_*li@qKP=IIn&nvuTi95__2)TXII8x0;U)pG=e3@95?@>5!uB**4BOK}!uGV3 zusttG*q#@Cv5_xTIh{8Vzb|M-iFV%=TgP6JtjiyJwx^9`C&bpewvyv6rk$j&E2q8W zd5As#(?N1@TWlriDA|JdBU#L=k{%n<`oDd9O>zl!*>B%EN&bU;nGW~fC0Prk^AmglyxqB|U2E^u~yOWd%Mqo0JM@h&CA(dh4sWkQ>(>AdTC@CzeKbVQa|CJdI0huG{4k-Ui+Y>~?I zK9IEE8~bJAhZ0_!K9blkF0GuQzHlx~J`RY@#V{u+5w<5TY|n7TustIrY|keWwr8Y- z?HMKEypNV}-p5Ed?_(vL_i+-=d$NS{K3>9k|5U$@DHP57 zXTI3H?|vNj;xO;iD4O>#Bpm1I68o!9wgSwMBs>+H)0vXf$fyH#@w+6+Imn5pJ#UsT zchCD*0V#1`DsOf`EEDEBiDyDw*ur^=VGHL=*un)8w(x5STlkHHneeTInXpj8Ojsmg zCM=dP6P8Gr2}>o+gk=(D!g2{SVTFX5uu{TISS4X5tfnXv*7#zXa22zY9V5R^a&NVC z-u;jblxRl$rpC_q&60m`1+mrmJ6|}bHiKINVli6-VspC9NqkP@!a3cp7|!Vq3FmaD zgmbz}!a3b7;hg>;;hgS~a87@ea8CD1IH&t0oYVah&glUO=k%b2b9zX^IXx`loc<)? zoc>JFoF1V>IA6ykoUh})*t{n`md@LPJ-`Xc1CafYQ{+ooK zJyRt7?0H7Ay;|&=a#nH#Vk`ge68rlgwzm8svA+*uG3O*)=g&*H&R>w6trFX%T$J2` zSUG?C!d$h?ycCd@$ll8Vv0T03BqhSphzm#KFU4>){+4hw{*iDrZb~>B|4KL-|4BF+ zwUgt_scgt<{n!rXXB!rUk>VQ!R=FgHp{m>Z=e%#G3#=0+I_bEB+; zxlxXy+<4d*%Z(YBWe+PrdC4Y71X7U_&Hg|vHy)D=Opfh;9+&VN%qo&Majmpjt}5vV zv9+$6WQdEY?#tb|@kBuEQ)G>RSZ+M!BqhQY#)U1cr5LubwuCLLBVh~cO4!1B66VI! z66VG;66QvI33H=?gt^gB!rW*iVQxGtVQw^*FgKo)FgKb=m>W$c%#CIg<;L^ASZ<8P z?99ZKv4vz2WC7#_O0*%ao@XJgB`xv!^g85a$qO##6^Xrl=u@meZ6x--ooSG^lJ9oJ zcHQkH2MWfnjO``kP_q4f&kmB=5c~U{9VKfZ51`~%C0Fq&z>a!N62`UCj_M@&9!J%- zPuY^akP;}Tv&7!gGaJ%HVsGjB7V?H92THbbx=IQ_tekEVyXslYn-aU~Sxk3HDI8^c z(H@ej5WAZ9lr(TLy(BH2yd`-ZV&~x7lAbQ+9ZL8HPA)rhdrOL9#O$+7A76N$+KSyb zAa+*vcY?oajS;ilhzoP$J;g9L-j{U7QK``P0g^tDw2*<4D*F@t(HJE82r)JqgC)$L zArj`#2NHX0eHN7bp@bRrk%SpFRKkqTuDH5)bpGmkvPL*(loF?H4`MHEE^r7*z-~Kajl#k5IYOz@hF`Iap74oUokuj7D%{4el6h&`Hh4b{;h-=zEHw^UL;{Y zFP1Q$mq@rmE|qYFTqa>YFPAW%S4g-*u9R?vTqWTOxmv;%a*c#JzgEJWUnk)Txn9B* za)X2`qn@Qo{4%7YWacQxdNHrzJd7ewFY{`AxzzB}KxO|BQqy|5*vo zl;0&hQ~r=}yZM>7% z;Nahu=n;s;giiVZS&pL~#WgOKWG}?tW|Nu{u7!8t*!RL|B%B6@hvnpxu$=r7mQz5&atccLIj)d|>vLfV*XJSU+jGE^*}oB)wKA1oMa5-T}U&@0>~&xbIE4Nmyni{!;lS-mn63!M<8t_*|F08 z3F#;)21$dt=p=apk{!}n($vMgA?X6K)wr84cdyt%v6weqOiGA7jSG9)Low`WFA014 zwuC+HD`8LHm$0XUCG6>k683bcggqT5VNXX;blr&yuREV8hS!~u5?*&kNqF5EE#Y-% zjD**nu@YW)#z}bHNtW=sGoGUB&ZiPycP9E`c~}f*Wo69!WJ>h-a{RjdNzeOC!skGy zQo`pEvj8#ED0&9wa|!Pfe<5Kx(ceC8u%J;_RNcN^%vl60%y7dSxtTjU)@iV%ACuxR`a4GA?GlWX7`C zXl#%ygV<|H4 zNxpM2+a>#4%nr#J7qe6HuZ!6wiLQ#(wOevO#K!ptNhOGl;T}n27xSZ}lZ)9a8R%m6 zNk+Mt{gSCJ=740ei#aIS2C=L=B>5R)xp7!>4r1f{lO*lx*f{?zc@T0HS$9NI4HBw} z_h(9)LTpZtN%}!-PLE4wKr-N{6OxsX`yeNM;gx9JQ+R)7Kx_<8J4uOfW&2ga73nuh zh$~x4pd7oRoncI5q+1i>vaeXI?`IWrc3o_IewW;YSRVc%NxweU_j8g5AlCQul7}HS z&KD%LAy&>s$qNvhuRkSSAvRx^B!eI}&X*@LsIG3|ann89a z;9GLZE0Ar7$tCFtIRwcQkl!KqNd_XuL$2O0vA^K9A0_9LjB#}p2#CcLluSWPMwC<7 z7p^u(Aw`{}M7U2VCgDEeAqn>h#UynU$$lr zl(6rEC8;*xZ5xRBK$0EO1@aNapRc}y&c>~&pyw4?7Aj2VFNS=k{-sE}HC2b)S5Hmy43o;Wj zQ!*Sf7xJYq)*jY1OTxOolCZAX64o_G!n)>4Sl2vX?9A=cEXm)&&XPLmUC1kpJ|FG z%8+Bn{-@;QI*KuI;TWD!49D;!OAcQ}X8v0v9C`2x}oQpgwk6{NLiOZ$*lEFcFV#U<9BGmugeYtKzcnSf;I5b_=l$b*oI z5^K*>kjDek8d62ILZ?xx{iK zp(EZBACT;jmn4=6g^?St1f&RJ+Da@pET)6R&WjpPguGV+@;Hv_B(XNvhja-@3rJUA zEDtRvS3CT5?0}Sj^a@B#Nbf*7KffCC`Um6!WI#Z|uZ6rJEGN2ROd9X=_SmyY9y%EI zWlk}2VhkVz+Yza{DL-r8;CgvStRL+qi#T!2IN1;@_;0Miand;T^yAKvMwOGAR7Ww z7_wP13`doNYz;^y$o7Cd3E3qXhoc%oehf%6$i9HIfgF@f$5CA&KL?~2@WrLC#86<0zY*^8uNUn2P~f4!JD(4o7WlCFgNeK1jxZ6oF(8NLffW$#oo6 z1#)jdYC>`cq!A>qB=v!?*9ww9AZ;N91M&u>h$M=m`am8E$N)%*fQ*2YmgK=vlOPWV z*fXstbk`%^K%OQ^kWF4exKz2Z$kUWB;?7bOJ1>`uSc0hiI)RR=jQP&|20`ecE zQ9zO=;xENW>f@+vkmm!E8`2^mg&{9Wp2tyTAuk7{5~NK)YC_seI^d{Zag}*3AkQM^ z^?k$i)rvO%T=E`5Lk%AgdwUBv*0NcF3-P?1TIekY6BsB_Zr&Es7jEt0jUo8BOvu57bJOc)C-Wy0ci)h8j$Xg8@}AVAG_%U_XhEo zv+Rl=7w!{+VppPnbrkmrw3lf_qJ3PodbIu1*yFrQp{okvorvy}am`BvfW!tnZx}aGVDQ#Kw7WKx~{p42X^MFkkFW7oYMPB{?u8 zmOrBda!nlH?j=IGZK0ciu75fIDpSx(~l^Ob~spDkhE=TJiI``mz7-{(o#_XPp5 zzJEiBu2kC~R5+!FLwn{`O{+f^t zvy;}ByGJa&llX{5DIvD-o`6^jGf3FNOcJ&*GbO?nW|6Rk*(f@fv-@HrX4$(DV;2|x z?l^~H?6-IplT%{9;k8V-SF&(W>>2x9k{|Fbl|3JxThcy~#+&m4c0`iykcE)@B+rjc z@V{HnD`^W^g_!#({y6V~Jm3q*`QAOaE9)f1U!$zeMI`K3Q3?C?poIM@CSkuGlCWRJ zCG1xT3Hw!2!hV&KuwSKpvAM{e5c`{(WhA%9BzWs1`1~%(iP11AM+v_TIf~JESTY>) zJLD0`mymxU6)4g5kSe%)SxIsjV)z@PjVSC zCeNrG`+ctEPXkG9#FWK1stqYRn;KCfEfLcM<;3M}h>dDvKgQbA6wd^XL(FqLD#R8x z4T!a;nS?EDPKhLbm)bjw7Pj=|?w-C75G&_J3Cnqj5@k6rOW5~UBICZ%9~sR|#wHCSmPwN?3b$32X1+i}l^!j$#?rQ!$iYE+*Nt z+}MjYza_EUI01PlAm<^yB{rufeSNV^uxs~Y8SqVni;4fX;=O>_Iru)0igx@x$!qvY z=q`B+VsDikpqNUKYKR#qIgBevfz+NiNMhF%J8H0`E{?KuXNWIcv90zGoTNl7$MPU1 zF3WyN@_%LXp<)jGn&jmj9`ZhtoPrdF4E4oknZG;!Si;{O50l)&QBUHi;goRN-;%sW zkP*Jvd|iJjHeVwpsanUbdZQ$)YqW%QjgibkF9tq?XCWw|3#h#U>Kf;Zwb_0WDoGg`eawG!sfItlYAlEHX(*XCj~C4BFhB=4W%_$x3$!8y1^QpsWnc3-e2gi=pSg2dD zc9pTKRTSl%P|Owd)W-Q2i9hn_`zZ;>`B#c|GAX`T$t>rLgyo!-u$(_A+R2=!ggIXq zB%H5{63&+-%K7?JF`TbU63*9U3FqsIg!6SZAU0puC7iFnC7iFI*nHjeW4J!syA5wS ziR~`zUGBFfyn5b|@Cxgl!O3CYpGIz%h&>x0lFY&9I6HSzIf?BYZsCfbS~0e7vAV*N z>3P!l*Y^YoYfqH0_9O{wk4RX1S_wb3rIYXzYkFTSTbR933A6Ve39~nYqyutw1u`>Z zKsG=!NrofFB#Xq>gzb=QzHm)A0LdX?j^&gv6M|xykV`Slg!?F3H)3KvwS2a^^7=6* ztm}RW>k5k1l}|COs~|-=ACtRttdJjL*}{1*Ea5B{k#LravgGhD*#Cq|guDj>vK#Fw zCP{@+H7PE!aZW%_OZvibK7^Rk6861}gnbW+^}U>8*!S|j*cjS6mI-ym#Oh+3E9xi{ zYhfh`+gzEVb?kAK%yOy(#LB5EVL8<)TE}Wo{CT&&KPh3~Yf9Mnpjh8)DTaNo>&xA< zOo`8OJr|P_;VeHb;VeI+k{9FZ5Wy_h4@f3R1BuOPW~?NQSWYP4hiSaLxSlqa^ecdG zMj+2obQUzBglsh~hH{!pY&AA%CP|A=9OWR-`(m@qx|&N^R||^Hf|isp>v}=Lx?Ys9 zu2#O>J*qD`iH~Y)2}kv12}ku6$)np-d+o6Dw~;i1*!_fdk`JCrNd&xM6#dMS` ze=ouN7%{I(4nQoXlZ31B>k_WUohA01u-*6TBC%(Q?RxQsWIR4e+5V@iq~|xW&-mRW zvk}u1XWW~TO^|+&?vjJ}g`<_+Lvk8owfA%qzc%#>NaDzl_qLAWs?}G*t5rWqJ=C5D zZGKnM3SysO`%8EwdQZYD(fbmP;Q$H8aG-=^I7q@V94z4&4v}ySKag+?Ka_9`Kay|^ zhe|kxANykG#SvWNE@I?|QKB5N5fbL=ClcoBND2EsO2WR6riAOFt_7%T3`KQ~ld!I2 z3F{h934e^0UXrb<}OGzrW3T*CA83klED z84{kSGbKDvXGwUTekI{~I>#5g3iA`tTnRq`&C^kwi}@1H#R3WQ@M{V4@EZy9@LLJ< zaG`{wu}H!ZTP)#ynOZ@Gl`ZB|f1yl=D87vyu4=f!FX&xE+JTKN!!pE=zj6klgm)wR-hHRoJTeeELwrrDdZP_m2+Ok8!wPmM-Ys)SP=XAG( zbNYjXbGk>uIsH+>Io&JaobHow4EIYoh6f}Z!-Eoz;UP-+A&giDjM!m{M(l`$BX(56 z{5d9Jjvbe9G)_o38Yd+j)n6nW)l-tKSOHRDpK#h2+xsO$>?-qXK#fWLjQx>(LX0kLv!Qlc#9KMBjZMG13MZwJIi?2d$^8aj*1KK^Y9 zn^;VmfY^v7NI0sA0kN34a8#2N!%>Y;qL)vl_O4)@(@9ohuVp)s^pZW0Gq^_`^~F{# z-ZQ^P!h7Z!B)n&yQNnxXnIx8(w%^Ds;XU&#PLh-CF6acrWR=)mP?KyDy9;WPU1E1Z zO>#)=E~rUPiQNS?xmRNMU`=vK?7pZ;Zi(F&HOV8f`=TcIN$kF;NnVNF7d5$GV)sQ& z9+235QImWUyDw^zUt;$~O$tctzNkq-iQN}9DI~G`q9%nUc3;$_h{W!TniQ4TeNmGK zC3aubq?p9+i<&$nvHPMX#U*xM)T9K(|Hh{(_Nyf&cBkv7;`p2!kf#w-Mq>BAOv*{@ zvsDwwBNF>mJ0E+b3KIJ?`U^^~6p)pOc~oMbMok`*Sjn3pRU~%jBoFGU7LbCF>Jqzi zVp2n5<&=QblvoS9Kx#>B9qR+BLrJo=We}t;#j_RZcl4rOK!zdaX^GV}4pQGqN`&`> z8%lV-H{oM(A(!yd#xd@Bp*XMLtdgpR^ZcdPe^OYj}ZGj z_zER-9x@a$Z6ry5Bzd1h+DVE)tfw6$k3#IbeoAtZwQxI*>gdPV7_x=0O4!2JC{ebs zlY}koObN4vT_kK_R|#AAri3k&L^I*7FS*c*?ut2xzbrN+5uZINQG3Q?$t-;KluWCc z#w(u%&s9>wRj!7;HHdl37rQ#Jnd_nC|mOMwolIKcT@;u2SWfQ!gm*JP%l6udEy;G0{ zzF1~5=4%OKzR^+kmr&Z^sBaZRS@=IOizH*qBzT>0)MCkWh-J%C$qyG(dwmhJOmYlj zF)Jj~o=osYA!emyA;e-<`(nLdd)7!;`&tQWUoTPjq1-%l07SD3R-wXV&$~WhF_`sVwuTuj!9U~ z2}y(63I3k;q~s-tT^)Xryy0R_N#1oarzOK7)mGvYnPeWMHsm+S4i}RmIqPE1NWyhu z<(!oigjhMhOKP~7KP0cYm~)iyD98c4CF8tg2E_VxL9)`tT$Jo^F@H)1YIMrFoCc%H_E z=jmgL;d%PFgy(4$Uo4+D;*8sf)v2mvyOU}XW?gj&v+fB=NBsWl1DusLByU1KfjsHU z-C0-DNlL`t*KPNR;$rXXwrjytim{R}VJlusVkKWoz%TE7v0kv8Iue#sSHg1YNm$O) zk{(!lTVU;dM)Dry6-a%_Fvte{3ZQ{xG~_!-L&>Kurjg_`7xSzycaKJ6Cn*tLiQ>X5 z(Q}I7m8gk?SE8m8UWuAXcqMw?7aOq*)$yJRtdPwm?_jO#2Wdg^?+mQO47POT#PZN) z=S3%YiW1o}4Kb}GpF(U-U-HH3VoYlZV_tSg#WVaBC-L8v#D!VcMlsB~wi0GtJ15CW zmf?1Xs=dTA+@ymqXrbTJW9UUk7ZdO4Yfe%kKjWxPi0LF@FJ5OkQO0zZFs2K|uWL9m z>J3*;ysmCe@Yl7FE!`3GriA5mmoQg*NSLcVeX)^eIlUw-=Ph?seB|F&IV?FYEcqS9 z@GR&p;aSi}!n2^Sgl9oNU#x|!>s<-!>QC`UYzZ>+Jy%YA#0EG?iM)pF?TVOz683bE zgc&|q@)eGnjH8A~)|7o#VSC2-V*TP#V^$GTuo_g#C(% zl{~&yg0~j6f2wl6gzSJ!kSv89hD?;~hWrMZBsm4S0+}q~4u6V-JN(Zi+~H4^Y(0_M z>x54V(V#RPS;=;LDq8QG_QVHi`nS^t( zT*A3nA>mxClyELqNjMj)C7g>j63)e13Fl&+gmbZ;65?EJkZ>+GO76oaM7x`@DIiVp ziFLE2Dq^l;2Db#{7UcVYq{j-dP14&PwbK_nD^swt*}i3$v3raY zA&D#}v=A{vAxS#QVn#zEI*KuAbrgSxn2s^g!cAiLwPJ$r6p~Cv;I4jp#)PkR!JKZz z-4#jV8wp+m$UQ7MQWTQ78FyDCwISJY|2d^KxPBzH}S59_G`mV9Ma!86ntgf7r+Aii^Njn#lOESR4A?tm}CT`G~^-40!SrDamj9o^{a#=1!8krQgYi# zDM^;@v6#}5Vou6Po^VoD(%eZoNf$_UwC7>ThY)MeBa&I}sPd96E~bLyqKm00$=)M& zZK@m#l>xf;=HP>dL7h`OB5_q$Klev2tok%0sN2rz9;P)}C6DZV+ovZOMnOoH~-P zTsd_mTU|NzB*$GjPfM=3a-NZ7=@e^EeMwn}wWopPS%|f#q2x`7jZY)VBv;O}lFhE1 z#*)*noaZE|UXPX2L{bc5vL-f*XNfdT%TW&aD8qg;riTG!u7eGgzIyA3D@Ti60Xl3 zC0w6hm2iE2O~UoLlZ5N@>k_Wdoh4kKyGXb`zaioJ+*QK$xtoOR^P3W`&)p?lpL+{qbhr){T;Its5=jS~o_*wQj70Yuz{r*Scg0*Shf%u63VExYkXO zaIKpt;aWFI!nJO)glpXt3D>&MBwXvJO1RcdlW?v3T*9^P3klb{=@PDWGkmdYC9m%@ zCA_|WDdF{fmW0>$uOz&_&zA7|K1agq`&cY*f(%>_*!Cn z?AwrUcvRSalhq2l?r#-ilK(rr5n3_j>%`tLyoeJ0XiI7jf0V|H3C^z&V-~w|QX-6r ziG3I|_g|UdrTYbc{h2Wl%2FrsCpwlni9OL#>L{LF;ZdQ#<|laPkKoxA zNvQ=1-gxZL)<|kWCPCIpS~yupiM#@_UFCYonuIjo6_mU|aspyc#cYyv#ZeZsSuzM> zF5F9x zXYiDSGx(c?GngXb44$DxIfG{3Gk96T8N4Fl3|^CP z2CqvvgMUdlgMUjngEuK*o5Al+;>i$+&EPJ`f0XEhdtz^$x-F>+u}tvJ*&PNu2cLH_ zAxTFUlUmZp#iWr8b1?~$X)Y#F@{Nm$NH)2cw36d4CcWf87Za7-^JA>d86*WD_BO4I zl8P=Sv!tPm$s&2x#blEVb}`u{lU+$t^kNV)96?xR|_>w0mQ1zF(3L zVsnvCQW=tfyFvLSbs=`Ay@2F-$VSXuK}mZTQ%KU&#T1qdg4ie4B9hS%TkDESra|69 z%!88okQRt3=8N6iv5dNidpi$FETilh&Jq&KD2pj6v5c~q(h|!kizy?qjIx+=63Zxy zd01i@WijO?mQfZ{L1GzYF_k2iQ5N&4#4^fa9+Ox`S*Mp;aKiDlHv3;0wk zv5Y!`Z)zG!ETbmizE&fNWt7D{E3u5Sn8p&zsL`nFIf-S|2uKr&Wz>4q-c({4b+s}+ z)%s%V&oaC{Cix$Hs-^h%a(ClKq>V3k-+OQ81i!3z zbxHiY-&R+9#)Mc`hk#gJot(t(KmP{lD!Gmp7Q2b>#C@?Vn#p)b4@xw1<3#_=?Il@M zD<*GI!i5l%JBr^^OR7T(K;H4iKHadK-V&D6hZ15reI+cXpD#A@_U^SJnL^&Xl1A5J zzrgA*`4cgl@a*M#lKyxy*4Cf*C0^TDF9t}`K`sr!_uZ86NJt~pHOLq11#2H7VeKDC zSo?<(*8Y)%wGWlB_Kztc);`P^o1KPD6TOzH@y)f1N%l-e=E67EjET>)*9<2q5st!qJ#3;b_d0a5UyqLL7|+5{|~#5{||<5{^b(`2B?>vgCSd|2h~GJ1-J3K6NlY z-}>d4ya9O=vQW|=Vpq>al5tKJOIY#}N_a|gqBp%Dp3L{fKDC*wEr2KU8RNep)^cpQ z#NH2JXWR;RRP1f57PC^qm{mH8zr9^8;gfP}bQELON*J?FNAX*#^>LXW>-z>B#h8t8 zaWR|XN8uNj){D(?aWUV;k8&|v;^Jby*HPAHTamU(>h6g>r?*WLNhOHAqkgZ1Z>!rU`Fm*W zolg5DHE~o^)OA489>3bK79RA)R#BFGNWzj2OIY$x5|;e4grjjp!qGS?;b`?EKm^BR0;bB;R1(t*56Y-#PhJvfs&Xk`zeelKAFY!oHu8{Dqj| z7}c{9*8aPMwf`aEQRgJjW{ABr|GY0Y7cA$3gyme6u$(_7Ea#Ghb8%V1xwsisuh+L`8t+$36k;mOaB|NH>glA=G z3D3$h5}uW1B|Iz3NqAO1Ea6%Ch%eSJjz)P&xo=`;Tm=cor=rT?QI#Y->QM=gs;qME zMaeckk4boCd|Wcp?Ki4OCLmYsx>Hrcb*!3XHGa`^3eUw=m+*S}goM|)8opSrvOP~q z*q)jaw&y7c+fz%z_SBZJJ#{2(PhAOTxt@fx{IrC#{EURNTwlUjZXn?-HxXOZvy$9y5H}b8JC$a zNSZl$QS!2rR+3ImUXt)_KdmJkpO<~H++ba=NLW`J3F~SrVO{MctgF3*Bi2E}5$h=7 zh`lP|h`lD^h;@>1#9o)MU!8riF&yLG4BSP+&na(6>LWMojO!|C?WCLJO($j;B|kaoC9z*LTkUW8VspVZzb#>#-;uD*y(MgO9|_ysSHd>;ld#S2O4#Q9 z61Mq03ETX>gtI(A!dV_D;Vci5aFz#4ILkvMoaGOEu{q_c^`V6C;{HgI??CJx^-xLr zzhd&S2&F2>VPBYd&hVeOwtSo=r`Yab(Gk!+_oO|sU>=aOAczK}GI#P+?@CC3oc1Urx!zSvx_a3@Dn12KDX)QW%{g{+b^axrTIVlnF_9T8(CZ<0)c zJcResd?#55v3`9|iLQg#U5KrcT@d>$vrTdYat?KEm)w9{gY2M$GkullWyD?modNj| zF}oxsUCa-X%1-tK#E$w=(!|B=leB}_*|eV$ecxgr2P9J=b`Bn-gqJ}cfE=Pk_d%?u zhb8Bn{3J;=I~MaZC7cuTAj&x+c>rSHz8#f3;pCX49V9RA;2oEI1i_2VypxhWklm&5 z9tKJJIk7vprzB+{*5596}QKGLxdO0grmPX3mB>f|5EA}2R}v3syq&XM%^CS79XnEWTPa!hVX ztQ?cu5}TbvkUNwlo1L^pLUHkIcI+tc0{-J}MskwPj(uwuqIfntIdD`eiOr5lYKhH` zefyS1VzZM6F=0xQ%}#zuBE_@WDF#WB*z8n*L?kvl*1~iWn;nz%5}TcxI4UZ!*=Y#L zAh9*vzA?-su{FE}Vlqo?4Sxlag_2}zcqd3!if3#1+mLJ$Tf+xKas*^3B&WpIaEr+m z5R1tzu{GRc?hD9RNM4Dp;S(Vb1Y`yzzr@yXizyTkizyqB({cIwv?9G8omNYm66yQz7bNE;@KL$9a1hJ`ydZXYz?=V@)BFaO)3P$ zj;biJHQZtzmDn170#cchWNY{t$YT;)!~cXlPVsCF{|i!ul4NVR^|Y$Q)^L+*5?jMf zs#82$!#!MOo{-oYZrNKyVr#g`lM-9Q$Ck%;^b%Xcn>WPM=@MJR?HsHvu{GSz_c{_= z!>v7Wu{Hc2w5Kj(k_Jvo^fna4+w**}9h%8u$TN)bPOgZRT%VG(5n?6B#EvqtRlNbr z3ENTjZD2zkHFRa{sF>JMCU#UK7Zd+Q*t1SjBJFp@euEH~-Vpl@U1P-zc{#S9e@AXTAFD8}= zGf|iA;@)Rnk@XP!d^$jK1Y*yj4V2u1SVj$Y5^K-jXwMK|EazGB2NIV2p@b!WBw@)P zOYB?D>{0w>X9-7sxTMSHv0jXjybH0v4fly8*~v)BNWASZ38OJeavU+kAfqKWAgv%{ zDB<*9U{{G}X~s$lK_(z(oaAZ9EXa6YY@FGP2@>{VqJ+JeBw;TmOW2Dk687RVNiu4; zHcypUOnb;QUuM z$XhP4qdMWJ)xOwn*^VlXm~|36stRPI#ExnK*&?xCbbxFN$UBgo66?iC$X z#7Z{VPf4=O%!ytckXU9Gf*hoHmYFY>#c#JImYF3Gb68@TSsC)PFSc%sMeR#a*HOs= z$QsBoN^~7$3*@-uBE(jJlajR9;U7ZGFTU71#*$A-Sn_E~geCtfVaX{HmVCxZY_&Oo zy3YDyy|9%n74|K^Q=(If#WMU4$!v&yB0DGP>|)MKdb^klk`G+WMagIv^QUBqi@7A( z>|!oU>bRIIl9n#!sxN#($@VtaoTNn9i@2~C*A>HF+>o#re@WPjza{L&KN9xhri8ut zSHfQWCt)vc`C@Aezw^Bm_$l=D8$|mkR-IOmpdobyOH&i7G59Ot|ej`RJL2*)`eCB$*gFX1>B z2#AeyK_|(cjp3h=!oFCJJ-#f_yMa+HDzWRb<=BG~{soF+68;5>hbZA%D97f#xWwMf zV7r16l2;J3A5zj6TMs8KO7xyV?WHA4os^Z7E|S4(a#I(dwxtGyB> za^YJ%my3*gloC3Qa=PNE%90SW&U*2<@iYIZ5{FLqWC`SHCn*umSA7ZRtAT{`)lkCuYD5WfzMhqE zz8Xt7U(Zo=el?Zw{AwoQ`SrYn=T~zH|o?k5`JilI$@cepF!t<+@gy+{w6rEqK zB|N`grs(`?L(%!wR>JeET|n&oYEOx99qTCJI`*nBcV7!$lW@d3NjN^QOE?;xCG2|_ z$$I3Wow;vF=HnN9CS4`_Tue7fdc1?(V&0Ve>SDS}t~u!;NmvrAtEVK3lU|a1PTrD~ zaq_mLs*`sljh*zC94#1YVIN6L7t>eL!AUK9byUGE@>?8k>ucCHb8U z^TqBq+m+Go$_|%U)|rfuSk{?*BC)J987Z->GZ`hZtTP!cv8*#0BeASA87r}@GZ`nb ztTRcLSk{@0msr-Bd@8Z5GnpWtTXvcVp(T0Rbp9Z zGEHJxXY#qkvd-iSiDjM1bcto1$qb2QoykmzWu3{F63aT1SrW@SldmL}btbbVmUSj` zB$jn1b0wB_Ci5hgbtdyAmUSizB$jn1U;AQLy+XLcX2pGyZzPXGa^lMPZ9s}a7D`?~ zOclryU+&)NEp?I-dALd%|Gjf@3FD|cSdEt{CKDtP zYz=4a>m;mwy@a)IpoF>G*(l*|XS0O6oh=gXcD4q@c01c7-0ke3M7i79NeOeevrEF= z&JPmqcJ}yUcWLaex2(XZ?v=3QeG=|K_Di?}IpB+B0(VUZCAMqYi(VWK$O*_#6#s8U zS?xz9to@jTwI7$T_7jxw6701qV;^-=avWlxWqy_X^GULe3d5c+(PvNB`7Sr-ceAh-vvVPgG z7t2sQ>sNKuRaRpCGASpqe$|IOEU|tS&w<~uN~~Y@-CqTX^~_T!M^dSF8S?F?6<&A=%}RCiQWa2Q$vy$V&&A7RB$m*N$R+m z+LBf-rjDeWi>W7Jd!ClCJlz|qT_5;jbNU&s7xs52KcqzY8GopR_t`#{e1+?mtv16b;n}&v{##^+OQzu58G^6r zM@VenV)BV(HOje+>)=Sq4v76?ca-FJ$Ule~BT0oen~as@hJ?_Iags-zBug4V>~E=$ zmvndXsV{f$JSR9wiEuRH!qJ$h7>>pyN{FK|S;EnnBH?I!<|Ns((fASlnkuo;uwN@r zlh|n3-!c3`VxwU)U1FnQf01y8#74tpro=|W{@&l05*rPZS-x0qWWJT?m3uPeeI?0w z2iM#hcs^5-0TN6a$G{@ZwR2C_mj39<>Y zDj@qHYa|8Ho)pM>Uu;in-?f!{BIJE1>56hJd$&kFMeTOxelM}3oYjgZJrOgCSl*N`-0ht zGUkSaF@H%|*WVJ>^$#WXR~RsZHznyqN!}F59bdR2^{wHVNC4UBdR{kd(rxTHkX@IA8Zl9z%>h2b)XsJj7Os+?4Pz zh&=cvaYNzwoBnV79OEQ zIL>k5IG0xp$GL)p<6O~6GTw@k+M9^FDg|U7MKVxKr(l9Yki z=kC@N&vML4epzBUX3|DtIcCq-wUbzmT|x`vVmbB?q=RBC$Lx8?S0$EXiBE;R*C#4^FwgrO441e0NusAYoP$r&NBOt3R|q{K48R+~{2|L^%$M_r=>(ioB~ zu@+j)q<~n=REeDh?IANLQI6^?2}kuSN|>WMo1&xU{Ey7_#qO@yPVXl6TJt2f(;Ei) zT4Fm!%fp2d+cBoYm3ooH_CGan)Dns9e;PoRNo@bq4zfyOwfBLnm9X{=65A(CLd<4~ zl`|KzMPhZWf@}@Q4#;+i?K6)xdJ&Nu@;6= z@^OjnWU@g{`eIkuE#X+UoRS=c*!AnQ!tBi?VfJR0FnhB|n7vsg%-(DgW^Z;0vo{AN#O%!} zVfNnZi_PgzIbyr_T#~a+a!c$Un*G(nJQBO}W^$k8GLEtq3&LP6|ubLpCChi%1SSDJnVR}-Ujlxqzc5w zu!^Lai>WH<>|&}(K6X-FGSkTuk`)kJ=W9r|IeAi2*5!OnNm0ny+V~V8If0`Jqs_G> zS0Q%Qt1SuVO7cn~rj9Q*r~I9GUCF6sc<&|JQ%{mNXOi~~>UvsI9I^)TjO6Okur~uz zU-B4YHbELtLeD_kYs|`Q7t9RjTa=$jTa@%jaCxo#!C|BMr#Rk<7EkR z;}r>Wqm6{Q(N@CTXeVKAw3je9I!Krs9VN_-SADVbg5|uX7)mF_OpPLYF@~>8mOyN! z?JU^}v6Zch%HdIONO)9N36JW=a>DOo24|qIHzgw=^C8_OOCWX??kTzGep3^d)rZ3W zFQ#wm*za!QF`NE>Infi4WvELr(VLKUkY21Snk{RRw-xf1q&Q>`8Y+WG&d6z^u?{VS0k7r#G&ikhl&ie!j=Y67t^FCR^d7mQTyib*I-ls`8?_Wqb z@6#om_n8vT`OrA;@CM zPcEaDO8$k|ioHydHGAxn-Et?%NhKh5_h|*is|l%wl2`g-YaQ!aC1G7_B&=(#gmtZ> zgstS(xWcZdM6Gsf;RXp;?2VGD?)tt-(g1#ICC30t^R!WQn5u!XxNY~c?Qws4PxE&Nf!7Ved>h5LN5`Qol% zzl6Jj0}}2E4obKyI3(e&;4sCX!FMr(Klx&#abQU7nUkL-+aPxL;0Wda*t-&V+o$UP zyXW5f20UbnkRembJf;kVkaM@S+~{|ccJiA)(XQ|39;GexHV z{{HsA``E62rAe_?sN#g zFY!;2dBP#M*1AuS*Bo-=3R!l4KqlwCI=l1dfgC~X^yfiA=+8q$hUw44L?+RnCPIH6 z5gGdPs37#`F(SjbX4}X4^SB_mW;@6sPZF8LtIB@~!mG-s1>sfYGlKA{@>xOHKmQhl zSC#)EGR&*WsYE96y6!nacwP6rAow=#an9!#1bKN;f0gp0Abfw_OM>t-@&5|)iDifL ztJ9YS;rsnw5oG*gUi1G1Im97%Z0eqh2!hYr9(KrUIfAaEhp!7l58n`k9=<6EJ8?r)&}>@*Asvbyv6=gz}nK{j;A1r8aPBd#-tzweN2 zGxv@Tkzu5>3BpJxan_{uLgr@|AudzJSax$m0&dH(nMHkv_QP2}K1=qy zTis`Nf-LC}T%E2e$Ojy9gOgcJke!0e8iIVzArCs4H3c~($gCyE#SVGN$-GyPJA%yG zIijBgt`iXV3vMolSnoud@2OZS#nN0+_BFJni$fFMVoRis1 zknwwZJzEI!Zik%cWVRG!vmmo|j_5pZ6Od+}i8N#1R%94^6JhMzi40@keuS+LiwyHj zq-kphk)f?7LR%jZ8QR)0N3e@Nbiz<}zl(jRAmcUv>dt{|XPL#G-$fAi{H}tq=XVo? zJ^yh**z9d*dKM*c+b_ zguU_E96_(LI-e7SwKzl&*5dPmuoj03LOq8GLOq8ILOov)gnGUx2=yEx2=yE(2=yE# z2=yE-2=yEz2=yE*2=#nP5bF7|AiFK=o@Q+6KJyi1KZoE>;W$C=JY^{RwEG6vSBVTC z?PRWUvyRUZoQbYn!k^Jj5QJ|~IZ+V4u6Hu~I)A7pcLHNd!9}DuYr~TjcpCbtK^AkZXahmb% zqjQPm-~0NHvvppMaL0zs`7H?Un|>CM$0pKx6QT8=iwv#*LJ(U2WsV>lYkb?^wf#zv zWtQ}r|35+22*|Gm*~}sM-o6(;g0O#nF9qibhalXe?i7Uixl0i4QFjv=<{ovAAl#$wZ9%X{{e#FP=J~!HK?Of^?O?w9-7mgr@{yC;UqgcEZzwuoIpUgsbUUK~{91GN9-GEePxWA3<36se-)b z_RNKyhtCPZDnBm>tNel>?2Q)%nd4plGnbbHS;QgBI?ewjGO)5kaJG6`5O%^VEeJZ{ ze?%sJ(9Oc?eoc@a9kR01{JJ1-apz^k{)QlzxV;z1n}V$AWS}Q|-u*9sF0qV5u!{}| zvSHBE5M+OMriPwDLGbk86?aY<5`^o0I7hH2u%pHa!d@LO2s>(mAnd4#g0Q1z5rmp& z6@EGG!BK$aJTS0F10 z!Yhy!1)e?*`vbqkDN!)GL6NJ0X`vu`{^8rD)+pI4L zcbg3a;cl~`Ak5eY1!2ZE5`-DsSP*7x6G51<4+(;O>=_r=rh@#?U1#F`hnorV3x}Xy zn+w9dZVN%UA8siKWws)czcX!;+cUQo|=r~>yQN?X*e4tc*r_7LRz4%yBjdkON7AhVAk&j*=L3bN-nhO&L!to;O8W9bRm7aektAUiqa zM28$K2>S2`4*6UQa-KszFUaX`*6$s1xFCOZ$lo0D1wjVgH4=~`1X;}?PdenNfcSUZ z9qCrnF@m5v$2sKK9C7Pw_(pe~Fwr4jrk;ts?mb=**8K#|n#7u(CYx;kJu%^Ejgf;!GAgt+yIil}(ekTa;cP~(^?;Z_r_Dz6u0K6k~quG`se5M*hGY~+x? z5UBaZ|<{_VJ!^{616^_U=>^*HqmFXA+Bysvu; zXpotl0a?i*Pf=#l7eD1Y;b}qe2JhA9cHg=e!+@!!-Ak*_@r-~AgC9R@q(aUKqd%+dI6az2IGyjK~OIsa|?oc0hvb-)CIeg4`Qq zmJsBbAhV<(Z#o3)bSXjR`Ivu3y>yQ7i8S`rWdicpM0(gn=;1p>h8`{}2t9n4AoTFv zg3!a|1fhq^3qlW9$Pt(M;V(F!|GTGqn`jF%ZZG#v9+|b5lfj+B8UdM{Vb<&WxO=n~ zWHz_H-b+1`IBQ)Z!|&YHeS6JmUQdt>9D@9OK=eRn=TEu!f(il|{GH|ooHc1%hamG! zPb5P&@J6Xa1wl4|93}{|0pxH&kPRST5Cqv+ z!CC*JAjk$}j>r-8#?KC%kU!ZzlF0BC4tZb|_cj|rZg$9Z?l;Sh7UUs^JiW2|^#nma z?T~l4Yht?eq4^=??xf>BPa7!K_G+7pFm^+{J~qfP9&1SpWnDyCkX<7E_TS* z1c5(SIOOCUL0o$s?!Ie%fctDT$UHWY$hSo19QQZH*E^YSiwu$PP$qv{)V)sTyMios zy#KcRDMTh+yYg`Mu#@o!u6vho)_>xV$)b5Jhv2&R`vLK9UOMPN_t~f*(2Skr2Sg@7 z^I=ZLBZ!Ndr{pp~sQGk3HgdmdyUt+)*$)NzqWgsxd_s4IApDNvnS#7*kQHQK_m3zyjAS(yt$AWC&khwQ;Z@Cm?yMX*ekUbp&TjvULfwKwH00a0uf1nIP*q1halF$PPi~7lQ2Vkdxi4UlPf`bMkJd`Byo@ zGviB#y6Uatk)j|VZHt+ z2rj_HxLARrnro4CskwFiC1@~exF z$}A!~2jrOfZ*!mC4!F;1cL~VV6VHEUFn><6>j)VlO_|+C$Pn=|bGW$n$YoHAUBBv| zyzME-`R*OISf_gla@=42yLtB(?~LpE^8euB*V1ONHO{(@ZVWZ?4wf-tKG3UZs1+1%+lNRTH2 z@)<$iaL7(h=3qf4g`MPcf-K^Yy`0P;f-E0o4i#jxUr)#mbTWqtva>_5BYlBLe&_p! zllfwf;I5XnI6@HC;z&VQi=zZ#Eshq1wKzr)*5X(}Sc@+S!diS;5Z2-=g0L3H3Bp=@ zRS?$VctKc;69i!`P85W-I7txJ;%kDi7AFhBT6{wg*5X@&uomAIgtho?K>V|U`Q5rW zB}d%47{20~S+WP*9rR>DZg&XwjqeNcv_sB)$~|EqGU;s&dFPn}+3A8T>yVWk@wp!qyOe(R9mJDDc(vO{il$S-mk^fR+@p&-o0MS?IJ zzY~PnxL6Qo;}SubjZ29PFdM%YgxUC`Aj}4l$r+-U>U?e@h+^Wu-0w4nS(7IqV<*q! zJ{J}Q8T+-Pyl>-P&n z>ks4z@=WUw3PS4-2?Fc84-aGyiyqE;L=et;R1nU3O!VCDVqeHT>3Up{e+T3VLFQc2 z%RDK_vH^KYkPQR!FG2PW$kT!x6_95HIXxiH3iA7a{5wZb3wrn;LFnOBLFnOgg3!a~ z1)+y82tp5E6oekWBnUnHuORgBqCOj`mi9hJ}yUamKo^i}$h8ic z!&#q0kjH||TLLmUgNI8vnYnTVKGVZ_1fhq5OrnQPgdWbvS(E7DTLqzq3kX6F-zEq> zTqsAbbZ;ZW(Wm`9^!uQ{4yx`0*$sZZOmXi@&JV+<^c?2CmxiMqI*_^V<-T0JPTSE- zf3$w+0e}1ppbhsI^dou9W1O^0-cmgdy?VUcy!K1mAr5=@Hr&mKJN9>V1Ha{Uo`S~_ zo7YX8`Q0{iPjlQqPaD}OZ+btzafkO~toz3}KIh(0SCk)J{~|f$UDs!d%TG!ka=K34 zcKu?-Cz#~ z`$_B7eM0&DU#+*^IM2qV@pkN&`P=UJHnU)#X=FP)TE(xrb`UoXQqGUrrTr>2)hF%Z zw~X`qE#~8(o>|7X;`ARBM;T8&_B_%q-YY+KJb7T@{CD|~?+g0-h~u$Nz~fkQ*z?Qg zw2`fxQ}->VoVsr=r)}_dLweBE4SEP%f|Kp2_Do zGVh1`4T_w1zt~rzudbi)5Al0@p5_ks^A)XYDqp+0^@fAg_8bkM(u+#b0AM$!1 zga6#udH$gv|6aUxKP7MHYrW{Js(L=+eya}$DCTYXId6~ru@N5oyq4=^KK-sk;pc~r z@axCZMz)XP7u%^h4*x8Fv5`M7oL_L?1^rLEaU6B)pOR-ir#HV}Kho!cboMX%yw2}v zeuR9zv5n`e*71oic|BJj<>ze?^nSR7HnOiM9`?%Yx9aipF|Vp$R?hlq$HxMXe${@E z2R-mBKF`Ot&_?#PDDS=r<#6T;^JDWcp6c@y4*%$v)=zva`APrAGQGjQBM-;X&o{3h z!KZNDACR;BQBGf~K9slP#A7to2ff7MANy#j<448=Ke_K?9LLNWH`kr+16yCs^Sn64 zeQt}R?)+}Z)2^l3&zK#`m&wh@<5lWcmM5DZ%BQH6w>;;iaE_B&Im>rTE~S_HHRW@9 zy^i#FtRGYQE#7TD<(IVsIUScCXCH0$b?mQ=Z0np3W*>Hx^B@l%^anxi+`wNKc+97~ zrl~w?e;}{r=pU&b*Yosvuj9~mWB$p37126&p+7%DpU@6**nz&s+}~f4#^Oy~&vJgs-^W+-dZ#){z4V`yxTdcLe_mR| z@4xJ4=FQq0ZU4Mq?l+x7T$;zaqQATjhaB;STc40`xX;A4PbHHS z>kmCe8jF z0)_wRU-B3~%IR;oev~O(@#wrV|Ls!5&vki8sOuG>uIvNw*uR-SZ6EXXegR(Z50eaq=kws=m5v!!xcP0s2s<6&R>tNG^+@#_-T z)i~Ck+pkYh$X)KniGyEvs^9n9nTPqmKiuon&pA^#?Ba9V7@hq?{`&T^Ej$IU>rNneIj>A-M4^`jcd8%!oE+ve^z`Ixl|n7&-6I-fk*y{7sOXPuTib;ZYyvahId~zPPueWp&ea&~>bW)1ID3 zd!$y6=Bvz4=^;+quHM-EqIk;WwI5@tZuGkjty&+-&2^;jH}13GalNv70^cd%8(rnk zH{9=ezO;3q9gAC@a=rE^W%pPA^6Qy?fJYuK|50;27S%z|gPi8Io*SO_=b2aC=bPv| zP#mO~hl76dIR|*%rzxECsE2+mc7~6G{APiV$-_S7%I0xCDd&CqJFR&m{%waN4*z}a zM)vZz!Ml6p93RT&QS)@X)DLR$GQJ!6)b@3LetSwh&P#si*U@#3YI%(#?r(;1>Svyy z7ky*LDQBskr{lG9Y5Z}!J6O-N9glSn9QC{~r$gDFO62C= zvQ-awt>^9E2k-s{-qD!7qw?{=jB+RE{BSlUBCqE|o_t+8BgNlIA0uy7=6BlfRqar& z6MNhL8vQnqu`f>w{P!HiL7shDCH`LcW$n_hB0muqzTb_5^q}?q^Bw-Z&~E4Y_&H8m zCO60YUJq#%dF>D9k;dl3Z{8<7ySukXKKr?^5BbzM^HwHTHV!@7|Drs>Z`zI1f$TK* zUZ~9NpJzJ?y}!$=7e_d|xN>alK8uspobnobi9&{oN^!_nQ3jJ`Hm2 zx7iZ@H~WosB~8`0*iN(l^oxEn553MyS)R+rFTcsxlXTg@Zyo3%j-vi22L3mOuPdMO z$Da3j|A#(?eegIiAACwrJD<-(-)Mc#*=swz{we!>Q0I^Fr#{EUxc=ORbs+6@KJ|~?d$8WTkcz=xDG>K>>mEUjOTmeXSlbU z;^6gK6&&~N&=0+-`J-(wtzy7+kk=>YI$F+_lue@&H^%n0Rn7^Og=g&Ku zhhKjx!13JWy2SW>cf|F*a*eOEwNn+}?0%dF8rhDH;-H?BoFBjsEx_ULSIqd#6gSq% z4!8Ps=xHOo=ZAPBJ2uZ_^Zh@R=lg&>KbZM^Te(4*&v~>%y~MKze7#cq(|Mf-vK4~d zN;w_OR>|p5wpvby^ZV6-Y+SZR&X3RDlhX;=dviK5TRW$-Wb5X1*6jT`ZTkJ6+|Hon zg>kmxLlReN+{ZH@_tT8;h}_;_c6?5UvhN1_@$sf#%nR*#zL{T(vmU<*`ti9R>W%wU ztP3ySj5Cfm<4lb+PSz9a2X@vEcF)XdBl~IKxzB*&di%a(egFM2P^@2kpOpNq4hLT* z=jEIGf1LN{VfbhDQa|=(jJMLJ-d5bpA&zA?_kOPEX!?1C+ox{!`O)Vg*u(P|)Wtr3 ziOI+G>-`@3TKDzV{U75o`EKfcBy!%-c2nbg?)0^1asNNk@7D1wy3 z+}}N7UuXO=T%RYZ?EPPa~+9mIQ8!XD$h!+l>L2PyrirzhptKz7*`K7LOd*?z7bIB1`gb|HsD^N1%k zkMoNt^1^ZbJw(_c9;2~&e2>D$;dvDM2|Nz0A5AH5@zng7AJ7LJ{_O64TbsP4W#d-9 z8$7>H!{?ka|8*W22jwt7Kf?DWsVDW^FNM>Ov%+&|YlrqMZFgQu5B*P#ALD*`p-SHA z7v;%+W+C@OO*lfnz+-(JR)Aw4n0;}`4P^^DYUgYIeYspC+tA2q9QyeFLHdyz$Mba5 z|KE7IyE~Yd|6T0YIoAhp+b3F{^J0|qNMrL-eUq}Al84{0lfB*NvB)3o2jk^@+Wn`} zWBu1W=i7Xi<&X1dPy4I&Yh3#s!#R&MCZEcm))$+fn#a89yxaMGzImQQo_n1STX$;@ zvkS_+SfEz2aZEO4$IT-AMQrqG_ohc zbw&)w{{NgAKi2V>=jRWOm>(O*`KXE>%DLZG&%T+kYyG7?;6?uGaoC}LzCUft`+ZzH zIm*1*{Pvpfm0jv3wQ;0yD_57Vs<(<9>x6pa&^-E)_0)Zw3x?|_UdQP5fOyV)(Cg## z&?^l8Qh5I|$HBwi+rs;$Kb^NjQ zP5)EtH#T0hE-7!reA~{Sik# zv|X+Xu0JiO`!t64^X}g77xq2ohjr#UAzqeu3ng?Rksm8%@jl0r3^B|J1nE8(oTqX2SAReA*VVE8jQO&Z`6T7|Xz;AtjIs}LUtnC@KU};&vG1)s^>Ccm zC;jI{KA+47&*%F3vFN&w^7gt<PfOc*e#G_Jr>)m( z%m?OZBemmIdCn)TI?u{+KB*likNd=;b;|jqoR^}MBTdPraLmj1 z^M2SXpy9x3V_o5%4Y8k^TEd#URK`qv-#b>#QBkq;cq5BsJp zPn0jCW%@YIKIQu?h?nW-IOS7%hVN|sySOjse}CfsPU0|pztw%dkn=;?4{|!3{UoR3 zvI}xLkd?`EpDvSozM{VQZt>r{wfcbLi0vD|XO=iw_cE&c0{Q7SUu56zd$3<5-|4uv z$8`XE-NNCY)?3Dx+2uHCnLdt#GLI>LPMoLp`}dUB6n3k~X?u3Q=2LRr!kH(~Ip+3% z_cXtw)X(vD_*5PlUpL0#S2y)gUyR25*7?zX)WvBpHP4Qx9zcN~ z^w!pXIY6xwjBB3rfuB=j9^@Y|^5psc0{WxtlVmoyq!lX$QS8hzUe3HNuGUU`P6kJ<@R5|*B89D-_K7o zA386#4w|Q2Rf=`0=Ywazyg%=o!EC#n#&OswtFP8?{enHNZ}vk>-pa-F#QI3fK`->M zuZ~sw9^`13a;d*-)N*>B?q6+}aUri3Cl9~y_s8T(Ee?K_@b}B~gZgzI^?ZvnKF+Vp z(;nxS@zfu?UZJ1eqR7wsvo-T*`Kop>uWEdVzt?)LKePwj)>r#u=UJY5s!}^2d^h)t zlpoe^N{%?>>#nD=KCUuO`=GXexc<2wZe7&(X=?xE{1mlyo_DdB^ z;_HST^by|^0e$3gJ%-<@>sDOUOMT?E9oq-7_%KiR8T9FS7`NxOm>&AU`Iu+Vo6JYq zeoOn5*Zx5-*8$};#dr~~{VS5QdaBN&T(_w8qt|@OZ)?}e*>THTdGc1y@{}XB<1zm6 zcli4k|9$s?td(#6UG5q0gIs)^IPAXhUcYX)U8PAeKI{8i`JKZ!`>N`FE99Z?>?OQD z^7uUr979Gg$N4>S^8Eb_{=MF9&Tk!u=CM!Q6XNpu8OSh>1Mywm;Qw^;|2 zgmW5=zY)VRgVc&k_Q zW2Fu{Z`wc92S@DwjB#5E`J%c~9&)hT=j)w^rggqpH%;5^lYagC{Xebyxo>~k?mv1T zNu7tL#Xe#ED(e#~-zi^auRlI*`*vFApZ#V1AWmw>El)X1t(@gMmFIlut@8J+MRNK+ zfqJV_8&?s}>ss7@;LtptbM)eVq{yGxzF0NxDsqgE&&l-jO3c^1eon^wH9jY^&nqoY zJAR&jkE8zk+0lA_NxxeCh(C`;{6)`EF^TNHkME7-!z{VmQ`6`+cMGq&PH^7BL0UFXpXc;E;`@D|b-ktZ(H?0^E``$`&U0mc@caZh=(D_? zPq`Fs=UYBCuLx(HjLW}oz9G-A`TMxvUf-Wb$#WiQs(*T|mvx{Yv}f_1r}}>5-`#;n z{)m&O9#EU#K3{y_h(5!44te6|`Q$gh-TxjAzkd_MvA=)B$>Gp-sKZn5w6fo>-_z5) zy6b@Tt2?jT^7Nw$<>yO9zt1@G_r99HQ`t^E>&DACisn^`1A6r5m(b^b->mib&a@oj zE3(^-amGh#?GYz!j*t9%_Jg*lc734h*3_3}du`sF4}9AXd7k@?=HX8f&hd6B>@OVR z;rWjCwg1p>>oB|X8}s@1&){*yaK?%IY3hL;@ShHPh-(Ucnune^-^i{B_Azeff$!(t zud`m{JzbaPdH#pn_*pp@trsE@}M|)op^G3-}M zjyj`%s4vE&kMbi>=Ii9}JBDj+?dOAs9^zH{hITcb-t&?Ay*2J*Jdbi8(|JOktIE}# zm(t7MolK2eJC>ih;vIRNi1$6=uz3N`zQ%af{Fce3#>?uMnm4`r&EI+c`zHSU2R=W- z^MsEEoaaHyKledDkK;#ww>e+yfgG-17g>H>4l`d%9q;$MDb5bZv2UN3^F!Hhg8d>n zD2$B*PsL~ZivGlK-G7YJ=E3rv=B3P!vhi3xx|vsdK4V_+yWXhdQ>t%JhtxRp-fexc z{J@PEuIo#GVia;ywhH~4(?)i_qgC}b$THjF0+>$9U+eA`d(B=K1zi+wZpj+F#n47L?Z+sqObzVx&;$=MRYvtejX-DVVxjvDHqIlRRvG-}PpD-WeP1@|UGW~VO=@0VLv_F_# zznixo!x48~JJY*7^R(#4e4gHw(}7I$GfQ3=r={rE`FHa9SuCf6;r*qpIOi3u6ZA_} zxo+u6*&}YLwaamfm+`52b#ZHl^GQ?V7Vjp{b<^&BOSkupi}v&T8YqsP?)UpOD2{H} zn;!MBPI~^UfHsx(IQ7-}duTnsO8wjMOZOkF<%m=GVHynG=>XkC5n$X8j9)<4+6yt4I~ zn%C}nP3h}&{aU@2uX}xA=a=!l)^F|i+Fq~q+jwF;`cvaYe9B*b|61$e{-gC(nXl!o zzS%eQf9J%{@!tsFzvc6I`@V}6gFNKuPl{^0DL+&ASoO>1uN_|JB{iS>9LH06O5vC{ zT6S#xQ+Dg%skl-&^OTA^H7|v0eKx)_-o{zRTYa6#^Y1#iJ~fZ;?_9KI>)!|Y_1?&C zj^OaC?)+H(%i;|T**E-qhobjpU>@X1VW;eU6Zm^L$no#C z$iKFn|2r=7RmU%N@!=q~^~2v)!`_@r`M)E#JmvK`^f3>l>?8g?FrFXddjkC2SdU{q zcpRM1zXK%SDWyK<>y~9u=SKF=oDOD>=hVGFET_ZS@H<=oP7d~w7d?;uS{!kv^wEz_ z+ueihp5eAo5skasuhguHym@w(p3v&NC~}^V`69nySC3cWZQYmp z%&^lklwF$B;p`me-#|7lJ3pu6vtKEHQ76V_bY@$C*!SH-%d{&8PfZdnfpJlIWY#^rUCm=%EE90#LHBVxd|CZ<-=DfywRNyc_?>6^t$En9eMr5RZj9@= zM)ogf2M6~*;5f7#c*e_h$#L>!^C@rbrus|AfxKuQ{@A!udb)*g?A~h!KlnZ=@Hl#n z^K->s+ezuCeVs?-;kEF-W{o2sRd~!l_hYT=ob@D)>1oGqk-n<_Qm$RUIlnH2J-Z*q z@=~N1@k7t`ySMIdRe0=b>okxQ`Q0ynOZsqNhzxf#KGmY$R28SGQKRzhqtL6AW z2EU-s(?+&wn7^kQ*Z$FtwLkeZzmL%$+9ghX#BDxk|D0eymM1*-w0XZZ_tX9EMNXUJ z^kb2&Tk}Nw7H3?@AMDt1&eM6s^G+*=c#&_5bG{#M>SvtH$6?N2)Z?qcZ;r?M5B5KM zx<9`#f4nZ^yjVYB-p_*m>w~?&2mU__*LA0UmdgZ{95kzU?Vrz@ zdGDXk`sXvOi`f2&b)xsr>77TIh^J~CkbCNN$TzYV9j!aR7xH|*S;a5dhdlitts4LI zBHxam%;TPK`1~+W#E(-r^7W$<{>~cX@YmY=$eT?+U{CX@_^1c+{CiFMKRv_+zf*sA z%6*6NFg}aN=Z}0}{}z**pU=TA^_1-g3oVS#CkC?XPW1O5n#aCyNBG<$hU31)KkxGM zsfY7M@?Jhw?>c^$#l`r~c+$uBbojiM{1f;2e$+htelFmh&d2!%@vOA;MEBoDHv8iK zdlz+a`jPrPJEjkHS#X)OJ&ZH{)O?KNzIKzKXYILtf2HI{(;oUK=0_1;C69Xkb%*)S z?M~g^-#^iw#*xR5yWfeaJ1-?)N8k3(`Soh|*)8^K`U5+RyNoivs(MrXSQjtzi{o|m zrsS!wD&_us*r)yXIza2>wW=K}N4wVqyPz?2dz11*v}$n^*ICD520{J{8}clmu2 z)XK&7=}A}me&l@3bAG$?^nCsv%14j&_ce2G>DQ_MzT{x|zT`j_$A_{dojmoG(U`xs zPKy4haq>7%!0!}}{XzS0=V4rbZ?s5{mc#p=t=LE?}T{dp(r{(D% z)~Ci}`w8r0-B6CSZd_KLdfKJX$M#mENd?Wi>&JSka%jr-yC8xvLSwW81(Ofs3 z=t;%ZEu8s*zNsf5&PFyq#J5<8Cx&xgJM;!;2glLRx8Ap>aP||=a|d48`aP;MuJAms zU+{ey#PO%^VILmM9(D5Q*OzlToXzqV@Z++19L2GD&b#kp2A+2Ky&KI#FYVK>b}989 z;QWW)!$Taz85jBcruzEu@6BzzpZv3rCw1KeJvgktR!^_<#=KfT$TME%nfz$wgML({ z^slUrWpNkTv+I3&`74f>Gx7#>?kR&ILa zmpI7pH~4!C?2rEMFNU(l>$oo%&bHdk-ycx!hp&Mj%>O2;6&d$s6aoGhq9mwj* zkI!ytnb+BM&9trq`;rv?w9}uR&bN7hzB>I4`33Vn@bv_5*WJ-iH`gJCWBRQhW1ZJ= z)am1P=M7}O|LuIs*FZJ_OFHh+6*nK1LfBvlboY1a^s(HpdK2PBH`N^lwtGcdZ-M^}N z7;U+B>qS2?f01AM&ly08*QK5MVeLWRCxTy~cAPxqe)^)n?*=7KigCV=&W=~@%TDIg z4@-5v?0b+bk97k1UcVPfuSe@Ics^g@`=H40px*aIxgyGVv^|}VBHYSZ9(If7R~=93 z)i~oX%SS9;>qi-{?H1{?a@3o`IS$&5c*^Y59WRov<1gb(>C<=}y?S1qx>TK4=6Bh+ zwUd&sD#!Vxsd=gKy7JUhm0JClr=Gev=ULi`9`sp$6j11|vcFirsJF^|_WSwk`tNaQ zzc8QgpV#{;^z;15zpn?6gL2f1?;Ya#lhzNtmXFEh3SEBM@q_k%F=y-Ndf?%YeP3Wz zIsVQM^%wE<-%`YrvUiE{m-8TRapt**Vjg}ElX^h4JjRzgzF9Z${625Ha-7fnKtJ+* zYyLf(!EA8VW}j*M?aF(-4bcm~Z5-MT#~C;6^7{jthu`zB((14OevZfSc?SDP=ga1q z`G+5!+JS%64}IJG$=8p5vmfaX@ypgue@~10xzTh(PJb+|D{tp_%F}*qJ?4oH z`w#aGy$+Foi(7xF|2^*e(bPwZ`P;4B+F#(&cY7D$=sWAj2@!c~ryF`>d4gW;kG5-Z zo1Ykuyx4sUdDMD4T}Lsy&`+Fo>(mbYhF-m1X@`{d&?m?z_Z8xn=X&P&@KLS%!2jHO zhn~6D@t?aseMIXx`lV=`^Pw00mYSa$=lZw(QU#Cox1LuvuKPsKOW|euV&gWh7;o1_ zmHmSKz$P={`aH>_dAU)#<*^{G}-K+G{&0 z`;1$UW4(34GoO}HFDT;0K85RQ?5pT^;GVkob1dKdzBu&YegfmXk9c@ff4$U-w~kXj zp6eZTt}em!&jX&(FLeXsfTYVjl8JRC6``)sH4 zeq#L6y!MN6Gf!6qzhb!dD>j}76z;#ZzSO*!yuF^J9^yJ*vHW$KH?1Fes#+(VU-+f@ z86n@Bgy&Jr4|pAy#ckdw4_x;{yYrY|`lWg87yFd z&H1*!iTCr}dcDNFFt4$E^E{&Kw_K5&kS{89@?escYB|k!eIyN?5h0v zLPI`pi{Usw-x5CGD;h_iJW)dq_Y1G&_FMh1e$jp!_jb$2y}i7V!#>CRDE)bBH^#s7 zg#R4NQl1Y-+iu;yO7%?&xB409jPg7*^?ccWUck65Zu1l4(Z8|JF?2un`Z*~4#{vJ~ z51;p1e;H@leY%}j#;5u#h0~8zee88dRXO`SqKIdGEJglO_H2JJ4vUxN3*)wLz>j91 z=zgjC9I~q1^!U6|=Y#8q^<^KiuG_fxS)pFMz9rAksmbfl@t~i0)p_g_+O^-Gwmju~ z^?hpQ1NVuzzN_>5w8&RK4u8MLJdn1V*KXgJQeU@!kC}R7_s>`t97jGz>p6h#N7${) z!|!i?z~5i}DNxoEIP~2UaLTo7r|!HJHfX)?t2@7nJmUXD5A4M9YV!&Iv|JT`ZGADn z?!0N0*B9M$BKXhq2KNizZ-e5fD#zzvQ^VgCk)P)!uZMhUeBkr5(zzk^9s1OY`u{&LiI~ihSZ= zUh%yx@}!7|c(?5K_4qvZ^U%#ajQqaZMhA>M-=MF7qp$sQ-bS{0khA!12^{ixj|)5JW#jcnPF zf6otOxF14(kPjR&9QiqTdH*~uHa-^TP0s7;`xX9Os(9TGF`WIteri(RMzKQ$lIWBr>JJp9ylEf2pjp29hc5Zt*V+C1!)fPH$DyNVo&SgDMt%meCv)nbA3%@AUvT3V2M>R#4|yJ%2m1UvYPkRB<7i}i+}wJf?LR-J z-GOY`d|o44t7ZOB=Iht2+wp&y;H(U08|QLOocT)CXO|%F-yhrv?^_ zB&y5+age6u ztKxhvMLTw0H^&h#{f@;m*2bCVvF2C1{@8gsKJ>Zfb)8apN+0D(t=x>r<2f?+*0!4Dme#W9P?sYmfTs&^rFpPwdxE1%LT`nBTMGbKO&z zTR%4-&+`QQ%8&5ep5u1DmPg$d+sS_p49b21-Pk>c$2iaP;OmUjPM@~st)Gv6KJ+^3 z_d~xQ#!^4VCS{ zIQ<>V{#98QI=#D31TE@2?AAbd)@3sxPUJ z^N!fSf1mpVM{#gGHNP7;))noL*44{-pwNf-LGRwMS{!=5j@#lfzheH|dE{gBwY}Il z^xwX*kLTZkvOaTfQZ2riUTqitwUf7$-a2@d{FU`5#&J-N{h#uK^&qV(M|n$A^Lai7 ztr92oru0=EryQyN9V+C>@|3GfJN0vVpI??Qo99%#DV+Ud^$>@B^ws*|{RZUuIUql0 zBp#DPKa4-duOCq8Wxv_;q@u)U9H}S8=GhIQdLi< zeWK?h?snEC;^8{e6zfsH&xLul^2CeQuhwhl$L#F>CBM$GUsIlT$di`g&3(Z41?Q2L z%`b}!^E>%I3H=})%ld4ePivm*EOlN_;bnfeqZf61#}wbURVeBm^8_$c^dp0%0BF9euVjx4e$MK)u-j3&-J)(uASbh z2lH^yZyi7V#CR&+6i$89TOO*^0q=)d-Q{s08<(w@)A4y9B2S!;`d}YKUus;}3H9}Q zhDONMna4WOUKtgzU3!TXQoyZW?as4$#ybDyeBWuVf1b~;3g`81`j0v+ zJ=y1d!<-Igd*pN|J0_v>-DdLKVh$(8jR{E5W}oZm;}`OyFU zjK|S8+CJsecyk`@)yX^c>o~jZ5By?2Ku4!et$)v2RIl5=>DTd8NAu%bp6B%l@#jwV z<6F9M9EU48@XUXTmVHkrHLouIm6q#u_xp6=I`%e&!{0X*kN#RU&%*3XSeEmaj5q#q5kx9H1n z`YdICddIQO(YNEnx*@-&S}&*r@t9ndI@QTj**enWSij)8E>r8J2rr8d`msOa7_I*A z);i|8Evw)37MIj@p0L7y5p9czoZ9$#Y(xj@-}3YQDIh zw0}i)kI8qV-YLB)T>IM%`+a@>yp%eB%&2(Xy3et$zb^a3pZ&gQdFm_rJRAKQ8^^lS zpA&b&che8+FZ_ajz6XJR;(QN0%{QOFA%4i&_a^A?6X?jV+WBudv1md9Dk21cSe!{NRS7smM_y5Jm_qd}mc^xmtHQ!16 z)WhdDnup%4O}_V!@LH~F9Nn^q^Ca>;?pmKW&BL!b9nSG4^*HiK`JKbxJCJ|!8q9O= zhjO%zTy~SUH|!{mw;EoLL;orfIgPWAIj?AcfIaRbn8)iGjqB?Z;-D!zw9DtbSKaR8 z1CE0{$0@%|`27arluO~%NB?!4utU7vxELSlT{rtU9(EK*;}%bsbQFEUzkgrX@OuY- z-u!*(4Uzjsz!~pv41Z7HY44@L(+>Tj9_DE^mq#4**Ww?~^E{A!GRU2MW3xW!qn|k* z2lOK@+UXTtFxY=*P8-?E!TuHre4l`SF36pvid4noHnu@ z9A*4fsqQ1@>Cm9}t1YyVX*}1j#=$=nc&uj}6K?bVUFmQfdOv_&y{_@RnD*Is9A6{o z(LD57d*rR0){A-6uklzO^f>2rLT843qTT%1{97J+`JNWMhZy^Sf8T8L{Vl{(avbM- zYIz=7{tn-#7%%dl=c9*bqVs1eAF=xM*Ng8Tef^6*<@Ijrd{wrO>wOn__xtkny&w1c z$E_@NpQQVwZvVv2XQ_4D2|lx&zhdWuSih#uGZwcz&s(YUQNNykAMN$}NY%ySmhaau zeE&u5U)Wdlz6HLU^@F<_xGV`vk!4! zWcU#MZCfAFJ|^tMa^$`$AQ{W%AH7TF(!e zM@?-U^tYRIX4(IAUTyyRd3G65*H4|?{|(;hpI^=5C=San6UJ9pG$v=~71a;(`{S+W zahnf(?-6~z%DuiWsqf!$UTVB94t;igS)TQ?xaCuFDcsIa@xbT%r_T%HPtj?WN80`J zecn&aW4)GrUq4m1*Mh!Lce;CI)c|6THipKGt2=t521L8*>F3jmrc12Eyv+EtL zT36_s>)}@UcKQo?bbiWs`d21r$2l)X%lcCLr{|Z=!#Mm%?Kiq^(3@Jfb#d!&uk287 zYM=6b+B^@zFXV&gCGrfQM<-`9R!4}|sI$Y^&1x88NVn3q^S;a6RGe1A{t zXT9MM4$Wi#fnPZ2hoy|0`wr)G-P`?(@*HnxUnug&`qxX|u2;*`Pm5bVC6~hO{4$<; zim0ty)%{k_)B4MByAM;|t}EjF-l^?h)>q5L{HQwL_hsvPkLg?BA-|46^*H_M7G+#^ zeSydN{8d=bS`PS$&-ry8!*L#s%|jekJ|T8c*YNMd2SuE$cWVCHb9=eF7x42m zulvQ~?5`M(^-a6*u4N53IjbAME*j>%L6>fE;gR$2!`}`PQ!|SMdIv^@_Kf+L!C%u!H^PtgsIW zAM98^QvBU>`F$*N`!|lagniuZv-F?)?jAuNIQ-x~m$GB=UgjlM-)>zW;JO9pvsXf% zsTX~gAK^O6%JF)Nc_pu}gJOO&Z@$$# zI=4LInI7Y;S_jB6?|knM^NzT6eu#IQJ~4m1J~8{H9L)uTN*3{bpudpM0*@?dN>FuIBSZt`k0Y$M*4| z$Nh7TNsi)pXW);2!RrH#^Ax_Xjibm8?Co7czDys-W3z0fBx^41}nu?q)*qC za+bpGY0vmPgWB;jJ{E_ztH;}U-d1Lx9o22LOs9wv|qQNu{xysT(3{et14Hvu6i+UC-Uz>3}igNw<~{@d#^G4 z^7l=iTEENqvbefEzsz3Qc$q&l+jv>NruXqq>Us9!@#hDreWwnNygrftJ{@Tz+vOeJ z9zVaqcz%S>iM+g*!~E|!d0a>O?|BW%`~Id^zwJJE+kyT(G3Qb~FP5jg9*@HAgW$30LS{+IE<&(yVeIkG~W&VHcsf* zcIbah4*9@1{9qh*KJyZrKN@zdUCXC_$Bg|_HV%Er1J^hCCl+q*zZmB}$?-b!$dmQE zS3J+V{qwP}E7m2B)cQ=}?4MYj&<}b)1Mi=gHZnZt#=bD$GR^a_9xuW%kLNd@uc(*v zVz{2i^A+b!Yk$h}x7%|5y21O|$iDL~pSKu}I8Srq`1`}3*O0^SL|@c~Jbs`2^4#9| zY^VEuKWRTv*H*sOzw&YKS9Q5of6&*l{ElUu>+P~F{Pic-C*vp^r<|o_^UB7pKJu@I z-_x2qd>#TG^&(D6`67yWy#Iq7d7OWb3;RV3N8kU@jW^}J9?omxUJvE#_5t*4`_9($ z9(dZJKFSfNy(aGUG{-IP5i#N<=s@Ym)$HjaIUd2bzWwL^W@eiQe4 zx*2DxPP-)P2b^`HAFP+FLcfo#{T{}Ll{D571Uxe!d;_%a7Cp7Zw1mHHlPUq`- zQ9mi{LCx{am4bM!n>VU#Bb}#I4*a7;vio|PRnDS=Bv!F>W|ht8g^)}Pp7~88r>hP zU)4UVDo4GRVt&lNm9xB^XZb4fGvazH%Y)4ec{|VYlKm>t6a<#V+;EC=~gbau=TOG_qCK zMZXSa@5yN#Z#V8~Y3D=h_;qOG1m2B!zM1PE%%&JS8t;ak3G21S0luzYT?d<&cJiV1 z{nYdg_;&nzCBz9@HXrskd_VHi$nO1{zfaYC*?c>m>kIZbtYDw>G4FF>9w_k{l_Fm5 z&)h%D_E*To=EZQx?G*ayphzF3^f2ET|E;P6_`fM$%h7(3JuP2Fua^JD=Dt7o$mu|q z;%_zMmS21ezy3Mj^1GUG@*9Qy{ik7^{Pm94ezK0tM<+b>k|O`qhvzHc-?N#|%TIGU zm|f(kmdCi}zo&SOQ*VrFyBP0;*M8G}<}{v`zrV1NogLm|NV#9tVRlh%@ow|AEyyx=%YGiY72|ow3x8-ywTQa8uS<$%l z7kSeC85?K4X`kz2EUz;g2l&*!*)5!T>XyEg9@?=qCEqQa_PV7nrH6JbP04o)r@e0J zOX;DV6iv8Jf}QyYJ~b;0jOGjBMb@I1NMrmgkr*Jb4Ml~|w6D0S&} zzfQ0EQtKLZ#(Kf;1L3~9YJ64quWrkw;^;MAH81VTu@3F-fA;*-?s=)M|MdGDv(GO4 zA%Fj}TuukF9Tnej_Y0qLyxy;Woxiux{ceN9W8)rgjF@+~(u+Q>YiCj8H|-El^_9*O z?2_lcNj^2d*EsEWn=(Guz1@E8^n9JlpN_X*m-^SY)4DFYezEHkjV=A}=oT_^YR)X!6Fzv=gd-xr_%u)ogh=cB()W|nn=>w#(2_g8Q2 z*BfcK*PXrYv7ZZDd;C5Rzi+dJ`+O)r!uNcLpQLc)?}ETn-_-EA5}&7*UH?xnej+}7 zpAzGdFC7ng%v*Pt*86DYjn}1znDMgwrSjTq+{VYc_i6vUfqw7zLB9{`_Cb|>HMZYY znWy(FEzk2E_um^n-nu_q{)|oi_b~_eXq8Ltgsi^fCY1e|)a}^g;f6J;Wz`#(zFJZ%zlZg>pKO#qptRsl@pDg}9wJ zkbO3nZ)C^h)V)72r$gDPIUUZ<&MD(+WQ$&c_y)5}gPiwcIJ+X}$BExQ59RXo*T>zE z`K|n*#7o@H^L$foGxt6^)M4R+eV#4PynEWO2kU3^%06V?J>SeTaXZh}qrWbEA5QCa zk*Y%q$NIpb*Gr0T7w5bxl>0FJts<}euPcxJL(ebcso%<#;T*3*yA?n6@Vy+GhyNei z+u#4`_^bG5<+WbS*Sxi3^H#>wA1haebG!_b2O1ikLC=5;*BNvq01{)I!E>w@!u&;B8Q9n1INfyco(>&{E*OX0MG z-@m0@_-Ffew}mPU{1GG5_cn^S$H=Bl8WvXy3|d zKV$lPk!ScrzqNhfRe8pvi9S zkzX;pb>`Ebm>$}<)au80Y<{PHx1*Qwl+l>KHqJ8M<^eqP@_Ll~FOF;WFUG;6ukn6v z99B=6-Bez!9@?+#Ps+a4pOPb<@{{A8(jtFi^-cNHEj^va)9!qJuERR>ew=Y}oPDTy z-G?#zb@Ishu#0)Cg!hosUZ?(9y|fpj?f8Ahi{9@Khx5)ZIUUF}ulE)Dv(WK=eaHOJ z@~QsA`>}9PAM-|i#JgpOdfTO~dGh&*`47Kw#O&0mPq*~M{7Cr+oOz!!)R%m$4zYM> zFI9Ky>y>`m?-qULIln%3f2v7~@<+S;eJb`1sGi3>O#No-I`HpFcIU}&w7$Q9`v~;g zyjxz|p+B*Cl(X~e@>TUvj?~&A4$A(q??+DIjI)!xYWvhjiuW?(;QN{Jc{UE()Aa$) zd8ClTLCQGzd=5O06h5u(r{Z8d9517k*A#uQ?OCns;M_I+_2Ll@$M+q+QDGeK7eCd= zQ7`?{c9HKG4}VY>I}W_te!+e(^des9W!&B7yX80ii`5~Pf7V6ML!2kw)2tVHT<1M> zN^4(1jyU@2nZ)=!lQA#;{x-}%$o(!34*EgLyl8)_$YFl3>jgjP-xhg%-v3_Ots2)s zmt&o~-)VA``5Fs;v949)=%zgLFjgq)p|4M{e!lyM)_Pf9%QFt>xjf8^-6vsuo=g4y zkKfnL4|jefZh5T7l$@>y?URm1JVo~D$Mi)1cd=imjZ6Id&?Y&G0~GlLjzh-{ob}PT zl>^_7{+J%x8SDD!=d_~T&X0|w9sPCsh5LuKYkA1wNL^o3zK$IHL2GHK!>rsnZ`6Z~Dzvim{m;rBGY_N+g@>F;TvzfQZtp9g>8C=SfCIL^bD zRT#(p(Je|2`leUEnZFs0R;@?bKE~^OejZ02eTnO(b^q%7DP@oHW%JpOu{!Aek@{Y} z+S?`1>jLr@2ESr@wLUw}`Q6fI^^XOf>z}kJA2EM9uN_*}Z?K0WCCB=({zd-TxS$vF zHBH$`;q-5`Xvz=ffqqy%HIMSWru1jWVgJ2HP#iJ4woYX{^_0okan1ux<)<#rIA6W4 zbw2`+{qdzmX70G(d85CdWBoOc{Jh7F8Bot9PqldEPvDoxvj(BKl;DV^Uptk^ZF!azf6DGIPF`C zd9mNq01iL3ysht9gFdg!<5{n?%E#i+`tF{~&(Ff=XJzuSaril-{JyJ>uWCKDTx^|T zJoWoUF?n5|lt0{G@p~#bz~e~CTb%utvQPc?J>w~PtDijm8tr+sUqp4?AZK~xlm2T8 zxtZZTUN#?=XTMpzjJJ8!^4#CpfA;-5mY-hU$D{jD$6JJ_ z#*6IHKKyUTu8rIB+7IntO3vbSdD<(RM>$d}PaKr{VY}a-(Vt(#j{e*n`ni5IUjBJ{ za~?l`=5^j^eBKAYSx@H2e*cE!y{0Mq%q#6%J~fZ>so(AW=&>WO+fdg(CUEKlh1{HX z`TIdo9MEU`&+?GddPalaW7`QZlaZ$EbDT6K*T+X*_tmK**Y|GcHt!>1^Q*|Azn+-i z_hBn-WOF_ad@!3or<8NgxgYiTv%8~Thq6`k@!@Q<9B<0u{sQy=yI`@ORr&#bdb^Fx z+Z_~p7T?eL(Qtkp>nIMc_n!woW)J#z&f{og2Rn)ba=`uXd-~5M!4rST(o@af@pj^&|D>t-IG&<9u6E+2UgnKFDe&PZd>-e>>0tJb zoDOAcr{*=?9?E0Jz zXLsgwT=q~-$7fS>Iw2c)67f#V-r}hCm-_$lMc+SLKLt9J$Lq3`|DBJvo09YXj0^sZ z5B^LD{!9%1%o6;WHTW~z2!HD4bu9Rg{OpkDtK(?Q9b#eJTJLY{_0p2medjSqR6 z5b`uJ+kyx02c*hRfk@+qAD zbKKs)r*O_AP06Kj&KoUy?SyeiPxe5dF9kZ=M328V%ecHRj=R?1hlAqiwSQ%PS^K!3 z!BK^xuP>a}$F;4ymc-EweOeFiuO?kN-Y!1y}u*l0j~W34}Tvtcq}eGuah{t>7VU~KHu5%nSTEI`NKNz_d&l8 z`hCz}2mO7ZzYp~Hf&M*DU_UiZJE`$@aq2yDxHW&^@qFZ%qy6(IEk_*R6ZlmwH*6|`euA`MYb%ul!1}Kgb*WIcL+R9C=dIy(s>&ap=K$3+E|+UK$Mh^iaOuo8xi0lzz<9 zeiiYIQ_Gj>g}(l}9eKaOJcIVvZR@_M_bZ*J>2ck1eIO2=ms9&J*H_UxZ&x4Y73tUG zT;G)M77snFr;daA%f`FykJUG`+h;!JShw~5D8=i#wNuZse0Qp!@o+u)`<&+a5j_32 zw39xK#ijMrFUHp^K2to&+BFV&b-+?TE5-9ZZ&7? z^B3?VpZg4C9w%*m&cStT*9UP@JKiZzy`aoTSw1@*Z>JuJbHBGV_tj40=6tP}@%#P9 z@8>!{jNA4J=jm}fkM?4DE}Ez1Q+bxsJ{%rVu;mbK~WaF;${sD(Q;P{>#a2&LU@tJ||=f|Jlit5ci=sg|zzV0Qi z_s>ICaa7yqI>$Q1{*Lv7qZJ>>^f;dT^ZnzL``TChdH}`2^}}&JALFffT0ix8I-|zb z%m=>js`JC|;qDOj5$3Jz^DWAi>1)mJ*!QE8xRF;IujOst{Cip4=QuY^}tn-0Bu=%pQmakH0JKyqseZ8%R&9~)s z{yV9^)oXd$sft5xzemuIjqH^0cOiP8vU)5}d!V{cQ*veYw7%t6_uo5NJEu+mc1YlS zueAN$@)XWEdu`|X-Te9B!j+r%e~9y`5XZn89@o6h-&o^yovQTnSo7cdgLsZ~^#OjO zsgtdr=B=Kw#+TKJQN^7}L2qZi8;^x}R3hm|Lun)l-^ z{Jt~!G=D#6dHT^S`mP;)e4wcFT7l>N(N-(8-lu}c^+HUJIG!7P=N-PTM+SYMRzLDZ zJ8x{$YA41+|38Di#!lXEP^~xh_sn(iy7|`mgP-F*>iuJUI&aJm-XCM-5VxMMh?ZFe&VFe7wDEB_WD3M zUYAl|Y97a}J>sc(7Ej3o=X;{t=?85mwZ5o#Eao5nqmLLzDo=JCa&_z9-)F=5+5OHa z@`rw5UaL}DAMkwdGS_XY4^#MP_vftP{6)L;J4P8VXsq9WkJh@H7Uws__t{;r&o;8d zb2^ym{hs+@|5%}mOK*za~cGqOHg5AvPXg?cQltJlu&2JiRl zfo%M4e&3!er-RwTj^e;L4qbQf?as4$%6NYs8OT=L)%&+*P6xB~aypc4<0y`p9PrW5 zU$#!IA7%1o0EhrC&yc0r4-&)SiT*|YX%c3$UoqpSSq6!!OV*zd9N zvixcN)Kf&YzEnS?aK2BQ`uV($yrr>m*yry*Qs0i>@cRLI>LJhPT*Nhf#}I=&ds z`j^Ssan92;RreSUeNWuy{qwYuJ?D6>k9CU8hg=M=qj&A_`%jko-yP^vDKc@OLg(IHSx?mnKo*(Y{OjF*kAMnT%?#HM6tMm0Vt^7nB&*Z-kK-$Rm zy*A!Is0ZcYujY}5qIp_=-W&Y&)PMe}sr!8b_d9<0JYcSCn)YFjc4Ga≈fTr|R+8 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̰Sm%;U_+9Eq2hC7f-J!a3&g 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

    /// Name of function to call. /// Function pointer. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkFindFunc", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr AhkFindFunc( [MarshalAs(UnmanagedType.LPWStr)] string funcName); @@ -233,7 +233,7 @@ public static extern IntPtr AhkFindFunc( ///
    /// Name of label. /// ahkFindLabel returns a pointer to a line where label points to. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + [DllImport(DLLPATH, EntryPoint = "ahkFindLabel", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr AhkFindLabel( [MarshalAs(UnmanagedType.LPWStr)] string labelName); @@ -242,7 +242,7 @@ public static extern IntPtr AhkFindLabel( ///
    /// the name of the variable /// The pointer to the variable. - [DllImport(DLLPATH, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl, EntryPoint = "getVar")] + [DllImport(DLLPATH, EntryPoint = "getVar", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr GetVar( [MarshalAs(UnmanagedType.LPWStr)] string variable); From 1dffd32891e47f217005a8fd718c3884490b23ad Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 5 Jul 2017 04:17:53 +0200 Subject: [PATCH 048/452] Add option to use Spotify's volume control (#4) This is currently garbage! AutoHotkey's ControlSend command releases used modifiers; so, for example, if I have the VolumeUp hotkey (Ctrl+Up in Spotify) set to Ctrl+Alt+Plus and I press Ctrl+Alt+Plus twice (i.e. hold down Ctrl+Alt and press Plus twice), Spotify will increase the volume only once, since the Ctrl key will be relesed, even if it is physically pressed. --- Toastify/src/Core/SettingsXml.cs | 35 ++++++++++++--- Toastify/src/Core/Spotify.cs | 45 ++++++++++--------- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 7 ++- Toastify/src/UI/Settings.xaml | 17 +++---- 4 files changed, 64 insertions(+), 40 deletions(-) diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index c4f244c9..bb22aabf 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -45,7 +45,8 @@ private set private bool _OnlyShowToastOnHotkey; private bool? _AlwaysStartSpotify; private bool _DontPromptToStartSpotify; - private bool _ChangeSpotifyVolumeOnly; + private bool _useSpotifyVolumeControl; + private float _windowsVolumeMixerIncrement; private int _FadeOutTime; private string _ToastColorTop; private string _ToastColorBottom; @@ -260,18 +261,34 @@ public bool DontPromptToStartSpotify } } - public bool ChangeSpotifyVolumeOnly + public bool UseSpotifyVolumeControl { get { - return this._ChangeSpotifyVolumeOnly; + return this._useSpotifyVolumeControl; } set { - if (this._ChangeSpotifyVolumeOnly != value) + if (this._useSpotifyVolumeControl != value) { - this._ChangeSpotifyVolumeOnly = value; - this.NotifyPropertyChanged("ChangeSpotifyVolumeOnly"); + this._useSpotifyVolumeControl = value; + this.NotifyPropertyChanged("UseSpotifyVolumeControl"); + } + } + } + + public float WindowsVolumeMixerIncrement + { + get + { + return this._windowsVolumeMixerIncrement; + } + set + { + if (Math.Abs(this._windowsVolumeMixerIncrement - value) > 0.000001f) + { + this._windowsVolumeMixerIncrement = value; + this.NotifyPropertyChanged("WindowsVolumeMixerIncrement"); } } } @@ -691,7 +708,8 @@ public void Default(bool setHotKeys = false) this.AlwaysStartSpotify = true; this.DontPromptToStartSpotify = false; this.CloseSpotifyWithToastify = true; - this.ChangeSpotifyVolumeOnly = false; + this.UseSpotifyVolumeControl = false; + this.WindowsVolumeMixerIncrement = 2.0f; this.FadeOutTime = 4000; this.GlobalHotKeys = true; @@ -821,6 +839,9 @@ private void SanitizeSettingsFile() this._HotKeys = toKeep; + // Validate WindowsVolumeMixerIncrement: must be positive! + this.WindowsVolumeMixerIncrement = Math.Abs(this.WindowsVolumeMixerIncrement); + // Validate StartupWaitTimeout: it cannot be negative! this.StartupWaitTimeout = Math.Abs(this.StartupWaitTimeout); diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 1d2c7264..e9f76f7e 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -255,27 +255,7 @@ public void SendAction(SpotifyAction action) if (!this.IsRunning) return; - // bah. Because control cannot fall through cases we need to special case volume - if (SettingsXml.Instance.ChangeSpotifyVolumeOnly) - { - switch (action) - { - case SpotifyAction.VolumeUp: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - this.localAPI.IncrementVolume(); - return; - - case SpotifyAction.VolumeDown: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - this.localAPI.DecrementVolume(); - return; - - case SpotifyAction.Mute: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - this.localAPI.ToggleMute(); - return; - } - } + Debug.WriteLine($"SendAction: {action}"); switch (action) { @@ -301,6 +281,27 @@ public void SendAction(SpotifyAction action) this.SendComplexKeys("+{Left}"); break; + case SpotifyAction.VolumeUp: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); + if (SettingsXml.Instance.UseSpotifyVolumeControl) + this.SendComplexKeys("^{Up}"); + else + this.localAPI.IncrementVolume(); + return; + + case SpotifyAction.VolumeDown: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); + if (SettingsXml.Instance.UseSpotifyVolumeControl) + this.SendComplexKeys("^{Down}"); + else + this.localAPI.DecrementVolume(); + return; + + case SpotifyAction.Mute: + Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); + this.localAPI.ToggleMute(); + return; + default: Telemetry.TrackEvent(TelemetryCategory.Action, $"{Telemetry.TelemetryEvent.Action.Default}{action}"); Win32API.SendMessage(this.GetMainWindowHandle(), Win32API.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)action)); @@ -318,6 +319,8 @@ public void SendAction(SpotifyAction action) /// private void SendComplexKeys(string keys) { + Debug.WriteLine($"Complex keys: {keys}"); + // only initialize AHK when needed as it can be expensive (dll copy etc) if not actually needed if (this.ahk == null) this.ahk = new AutoHotkeyEngine(); diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs index 9035f3eb..14639f80 100644 --- a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -1,22 +1,21 @@ using SpotifyAPI.Local; +using Toastify.Core; namespace Toastify.Helpers { internal static class SpotifyLocalAPIExtensions { - private const float DELTA_VOLUME = 5.0f; - public static void IncrementVolume(this SpotifyLocalAPI api) { float currentVolume = api.GetSpotifyVolume(); - float newVolume = currentVolume + DELTA_VOLUME; + float newVolume = currentVolume + SettingsXml.Instance.WindowsVolumeMixerIncrement; api.SetSpotifyVolume(newVolume >= 100.0f ? 100.0f : newVolume); } public static void DecrementVolume(this SpotifyLocalAPI api) { float currentVolume = api.GetSpotifyVolume(); - float newVolume = currentVolume - DELTA_VOLUME; + float newVolume = currentVolume - SettingsXml.Instance.WindowsVolumeMixerIncrement; api.SetSpotifyVolume(newVolume <= 0.0f ? 0.0f : newVolume); } diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index 9262ddfc..c6514896 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -21,16 +21,17 @@ Launch Toastify with Windows + Height="16" Grid.ColumnSpan="2">Launch Toastify with Windows Minimize Spotify on launch + Height="16" Grid.ColumnSpan="2" Grid.Column="0">Minimize Spotify on launch Close Spotify when you close Toastify - When changing volume, change volume only for Spotify - - - + Height="16" Grid.ColumnSpan="2" Grid.Column="0">Close Spotify when you close Toastify + Use Spotify volume control instead of the Windows volume mixer + + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. From d708170c20fea42b054d174f6dd7044727a6ece9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 5 Jul 2017 16:32:25 +0200 Subject: [PATCH 049/452] Cleaned and re-organized the settings class --- Toastify/src/App.xaml.cs | 9 + Toastify/src/Core/SettingsXml.cs | 593 ++++++++++++++----------------- Toastify/src/UI/Toast.xaml.cs | 4 +- 3 files changed, 285 insertions(+), 321 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 555d35e3..97f8a74a 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics.CodeAnalysis; +using System.IO; using System.Threading; using System.Windows; using Toastify.Core; @@ -37,6 +38,14 @@ public static void Main(string[] args) [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class App : Application { + public static string ApplicationData + { + get + { + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); + } + } + private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { Telemetry.TrackException(e.Exception); diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index bb22aabf..e9ebc96b 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -38,63 +38,8 @@ private set private const string REG_KEY_STARTUP = @"Software\Microsoft\Windows\CurrentVersion\Run"; private const string SETTINGS_FILE = "Toastify.xml"; - private bool _CloseSpotifyWithToastify; - private bool _MinimizeSpotifyOnStartup; - private bool _GlobalHotKeys; - private bool _DisableToast; - private bool _OnlyShowToastOnHotkey; - private bool? _AlwaysStartSpotify; - private bool _DontPromptToStartSpotify; - private bool _useSpotifyVolumeControl; - private float _windowsVolumeMixerIncrement; - private int _FadeOutTime; - private string _ToastColorTop; - private string _ToastColorBottom; - private string _ToastBorderColor; - private double _ToastBorderThickness; - private double _ToastBorderCornerRadiusTopLeft; - private double _ToastBorderCornerRadiusTopRight; - private double _ToastBorderCornerRadiusBottomRight; - private double _ToastBorderCornerRadiusBottomLeft; - private double _PositionLeft; - private double _PositionTop; - private double _ToastWidth; - private double _ToastHeight; - private string _ClipboardTemplate; - private bool _SaveTrackToFile; - private string _SaveTrackToFilePath; - private bool _optInToAnalytics; - private bool _FirstRun; - private string _PreviousOS; - private string _PreviousVersion; - private bool _PreventSleepWhilePlaying; - private int _startupWaitTimeout; - private int _spotifyConnectionAttempts; - private List _HotKeys; - public List Plugins { get; set; } - private string _settingsFile; - // used for both defaults and to synchronize the list of hotkeys when upgrading versions - // so that any newly added hotkeys are magically visible to the user (without them having to - // reset their settings) - private readonly List _defaultHotKeys = new List - { - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Down , Action = SpotifyAction.Stop }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind }, - }; - /// /// Returns the location of the settings file /// @@ -103,9 +48,9 @@ public string SettingsFile { get { - if (this._settingsFile == null) + if (string.IsNullOrWhiteSpace(this._settingsFile)) { - string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); + string settingsPath = App.ApplicationData; if (!Directory.Exists(settingsPath)) { @@ -129,20 +74,90 @@ public string SettingsFile } } + #region Settings + + #region Private fields + + private bool _minimizeSpotifyOnStartup; + private bool _closeSpotifyWithToastify; + private bool _useSpotifyVolumeControl; + private float _windowsVolumeMixerIncrement; + private string _clipboardTemplate; + private bool _saveTrackToFile; + private string _saveTrackToFilePath; + private bool _preventSleepWhilePlaying; + private bool _optInToAnalytics; + + private bool _globalHotKeys; + private List _hotKeys; + + private readonly List defaultHotKeys = new List + { + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Down , Action = SpotifyAction.Stop }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind }, + }; + + private bool _disableToast; + private bool _onlyShowToastOnHotkey; + private int _fadeOutTime; + private string _toastColorTop; + private string _toastColorBottom; + private string _toastBorderColor; + private double _toastBorderThickness; + private double _toastBorderCornerRadiusTopLeft; + private double _toastBorderCornerRadiusTopRight; + private double _toastBorderCornerRadiusBottomLeft; + private double _toastBorderCornerRadiusBottomRight; + private double _toastWidth; + private double _toastHeight; + private double _positionLeft; + private double _positionTop; + + private bool _firstRun; + private string _previousVersion; + private int _startupWaitTimeout; + private int _spotifyConnectionAttempts; + + #endregion Private fields + + #region [General] + // this is a dynamic setting depending on the existing registry key - // (which allows for it to be set reliably from the installer) - // so make sure to not include it in the XML file + // (which allows for it to be set reliably from the installer) so make sure to not include it in the XML file [XmlIgnore] public bool LaunchOnStartup { get { - return this.IsSetToLaunchOnStartup(); + bool launchOnStartup; + using (var key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, false)) + { + launchOnStartup = key?.GetValue("Toastify", null) != null; + } + return launchOnStartup; } set { + using (var key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, true)) + { + if (value) + key?.SetValue("Toastify", $"\"{System.Windows.Forms.Application.ExecutablePath}\""); + else + key?.DeleteValue("Toastify", false); + } + this.NotifyPropertyChanged("LaunchOnStartup"); - this.SetLaunchOnStartup(value); } } @@ -150,13 +165,13 @@ public bool MinimizeSpotifyOnStartup { get { - return this._MinimizeSpotifyOnStartup; + return this._minimizeSpotifyOnStartup; } set { - if (this._MinimizeSpotifyOnStartup != value) + if (this._minimizeSpotifyOnStartup != value) { - this._MinimizeSpotifyOnStartup = value; + this._minimizeSpotifyOnStartup = value; this.NotifyPropertyChanged("MinimizeSpotifyOnStartup"); } } @@ -166,470 +181,450 @@ public bool CloseSpotifyWithToastify { get { - return this._CloseSpotifyWithToastify; + return this._closeSpotifyWithToastify; } set { - if (this._CloseSpotifyWithToastify != value) + if (this._closeSpotifyWithToastify != value) { - this._CloseSpotifyWithToastify = value; + this._closeSpotifyWithToastify = value; this.NotifyPropertyChanged("CloseSpotifyWithToastify"); } } } - public bool GlobalHotKeys + public bool UseSpotifyVolumeControl { get { - return this._GlobalHotKeys; + return this._useSpotifyVolumeControl; } set { - if (this._GlobalHotKeys != value) + if (this._useSpotifyVolumeControl != value) { - this._GlobalHotKeys = value; - this.NotifyPropertyChanged("GlobalHotKeys"); + this._useSpotifyVolumeControl = value; + this.NotifyPropertyChanged("UseSpotifyVolumeControl"); } } } - /// - /// Only show the toast when the `` hotkey is pressed. - /// - public bool OnlyShowToastOnHotkey + public float WindowsVolumeMixerIncrement { get { - return this._OnlyShowToastOnHotkey; + return this._windowsVolumeMixerIncrement; } set { - if (this._OnlyShowToastOnHotkey != value) + if (Math.Abs(this._windowsVolumeMixerIncrement - value) > 0.000001f) { - this._OnlyShowToastOnHotkey = value; - this.NotifyPropertyChanged("OnlyShowToastOnHotkey"); + this._windowsVolumeMixerIncrement = value; + this.NotifyPropertyChanged("WindowsVolumeMixerIncrement"); } } } - public bool DisableToast + public string ClipboardTemplate { get { - return this._DisableToast; + return this._clipboardTemplate; } set { - if (this._DisableToast != value) + if (this._clipboardTemplate != value) { - this._DisableToast = value; - this.NotifyPropertyChanged("DisableToast"); + this._clipboardTemplate = value; + this.NotifyPropertyChanged("ClipboardTemplate"); } } } - public bool? AlwaysStartSpotify + public bool SaveTrackToFile { get { - return this._AlwaysStartSpotify; + return this._saveTrackToFile; } set { - if (this._AlwaysStartSpotify != value) + if (this._saveTrackToFile != value) { - this._AlwaysStartSpotify = value; - this.NotifyPropertyChanged("AlwaysStartSpotify"); + this._saveTrackToFile = value; + this.NotifyPropertyChanged("SaveTrackToFile"); } } } - public bool DontPromptToStartSpotify + public string SaveTrackToFilePath { get { - return this._DontPromptToStartSpotify; + return this._saveTrackToFilePath; } set { - if (this._DontPromptToStartSpotify != value) + if (this._saveTrackToFilePath != value) { - this._DontPromptToStartSpotify = value; - this.NotifyPropertyChanged("DontPromptToStartSpotify"); + this._saveTrackToFilePath = value; + this.NotifyPropertyChanged("SaveTrackToFilePath"); } } } - public bool UseSpotifyVolumeControl + public bool PreventSleepWhilePlaying { get { - return this._useSpotifyVolumeControl; + return this._preventSleepWhilePlaying; } set { - if (this._useSpotifyVolumeControl != value) + if (this._preventSleepWhilePlaying != value) { - this._useSpotifyVolumeControl = value; - this.NotifyPropertyChanged("UseSpotifyVolumeControl"); + this._preventSleepWhilePlaying = value; + this.NotifyPropertyChanged("PreventSleepWhilePlaying"); } } } - public float WindowsVolumeMixerIncrement + public bool OptInToAnalytics { get { - return this._windowsVolumeMixerIncrement; + return this._optInToAnalytics; } set { - if (Math.Abs(this._windowsVolumeMixerIncrement - value) > 0.000001f) + if (this._optInToAnalytics != value) { - this._windowsVolumeMixerIncrement = value; - this.NotifyPropertyChanged("WindowsVolumeMixerIncrement"); + this._optInToAnalytics = value; + this.NotifyPropertyChanged("OptInToAnalytics"); } } } - public int FadeOutTime + #endregion [General] + + #region [Hotkeys] + + public bool GlobalHotKeys { get { - return this._FadeOutTime; + return this._globalHotKeys; } set { - if (this._FadeOutTime != value) + if (this._globalHotKeys != value) { - this._FadeOutTime = value; - this.NotifyPropertyChanged("FadeOutTime"); + this._globalHotKeys = value; + this.NotifyPropertyChanged("GlobalHotKeys"); } } } - public string ToastColorTop + public List HotKeys { get { - return this._ToastColorTop; + return this._hotKeys; } set { - if (this._ToastColorTop != value) + if (this._hotKeys != value) { - this._ToastColorTop = value; - this.NotifyPropertyChanged("ToastColorTop"); + this._hotKeys = value; + this.NotifyPropertyChanged("HotKeys"); } } } - public string ToastColorBottom + #endregion [Hotkeys] + + #region [Toast] + + public bool DisableToast { get { - return this._ToastColorBottom; + return this._disableToast; } set { - if (this._ToastColorBottom != value) + if (this._disableToast != value) { - this._ToastColorBottom = value; - this.NotifyPropertyChanged("ToastColorBottom"); + this._disableToast = value; + this.NotifyPropertyChanged("DisableToast"); } } } - public string ToastBorderColor + /// + /// Only show the toast when the `` hotkey is pressed. + /// + public bool OnlyShowToastOnHotkey { get { - return this._ToastBorderColor; + return this._onlyShowToastOnHotkey; } set { - if (this._ToastBorderColor != value) + if (this._onlyShowToastOnHotkey != value) { - this._ToastBorderColor = value; - this.NotifyPropertyChanged("ToastBorderColor"); + this._onlyShowToastOnHotkey = value; + this.NotifyPropertyChanged("OnlyShowToastOnHotkey"); } } } - public double ToastBorderThickness + public int FadeOutTime { get { - return this._ToastBorderThickness; + return this._fadeOutTime; } set { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._ToastBorderThickness - value) > double.Epsilon) + if (this._fadeOutTime != value) { - this._ToastBorderThickness = value; - this.NotifyPropertyChanged("ToastBorderThickness"); + this._fadeOutTime = value; + this.NotifyPropertyChanged("FadeOutTime"); } } } - public double ToastBorderCornerRadiusTopLeft + public string ToastColorTop { get { - return this._ToastBorderCornerRadiusTopLeft; + return this._toastColorTop; } set { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._ToastBorderCornerRadiusTopLeft - value) > double.Epsilon) + if (this._toastColorTop != value) { - this._ToastBorderCornerRadiusTopLeft = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusTopLeft"); + this._toastColorTop = value; + this.NotifyPropertyChanged("ToastColorTop"); } } } - public double ToastBorderCornerRadiusTopRight + public string ToastColorBottom { get { - return this._ToastBorderCornerRadiusTopRight; + return this._toastColorBottom; } set { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._ToastBorderCornerRadiusTopRight - value) > double.Epsilon) + if (this._toastColorBottom != value) { - this._ToastBorderCornerRadiusTopRight = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusTopRight"); + this._toastColorBottom = value; + this.NotifyPropertyChanged("ToastColorBottom"); } } } - public double ToastBorderCornerRadiusBottomRight + public string ToastBorderColor { get { - return this._ToastBorderCornerRadiusBottomRight; + return this._toastBorderColor; } set { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._ToastBorderCornerRadiusBottomRight - value) > double.Epsilon) + if (this._toastBorderColor != value) { - this._ToastBorderCornerRadiusBottomRight = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomRight"); + this._toastBorderColor = value; + this.NotifyPropertyChanged("ToastBorderColor"); } } } - public double ToastBorderCornerRadiusBottomLeft + public double ToastBorderThickness { get { - return this._ToastBorderCornerRadiusBottomLeft; + return this._toastBorderThickness; } set { if (value < 0) throw new ArgumentException("Value must be a positive number"); - if (Math.Abs(this._ToastBorderCornerRadiusBottomLeft - value) > double.Epsilon) + if (Math.Abs(this._toastBorderThickness - value) > double.Epsilon) { - this._ToastBorderCornerRadiusBottomLeft = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomLeft"); + this._toastBorderThickness = value; + this.NotifyPropertyChanged("ToastBorderThickness"); } } } - public double ToastWidth + public double ToastBorderCornerRadiusTopLeft { get { - return this._ToastWidth; + return this._toastBorderCornerRadiusTopLeft; } set { if (value < 0) throw new ArgumentException("Value must be a positive number"); - if (Math.Abs(this._ToastWidth - value) > double.Epsilon) + if (Math.Abs(this._toastBorderCornerRadiusTopLeft - value) > double.Epsilon) { - this._ToastWidth = value; - this.NotifyPropertyChanged("ToastWidth"); + this._toastBorderCornerRadiusTopLeft = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusTopLeft"); } } } - public double ToastHeight + public double ToastBorderCornerRadiusTopRight { get { - return this._ToastHeight; + return this._toastBorderCornerRadiusTopRight; } set { if (value < 0) throw new ArgumentException("Value must be a positive number"); - if (Math.Abs(this._ToastHeight - value) > double.Epsilon) + if (Math.Abs(this._toastBorderCornerRadiusTopRight - value) > double.Epsilon) { - this._ToastHeight = value; - this.NotifyPropertyChanged("ToastHeight"); + this._toastBorderCornerRadiusTopRight = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusTopRight"); } } } - public double PositionLeft + public double ToastBorderCornerRadiusBottomLeft { get { - return this._PositionLeft; + return this._toastBorderCornerRadiusBottomLeft; } set { - if (Math.Abs(this._PositionLeft - value) > double.Epsilon) - { - this._PositionLeft = value; - this.NotifyPropertyChanged("PositionLeft"); - } - } - } + if (value < 0) + throw new ArgumentException("Value must be a positive number"); - public double PositionTop - { - get - { - return this._PositionTop; - } - set - { - if (Math.Abs(this._PositionTop - value) > double.Epsilon) + if (Math.Abs(this._toastBorderCornerRadiusBottomLeft - value) > double.Epsilon) { - this._PositionTop = value; - this.NotifyPropertyChanged("PositionTop"); + this._toastBorderCornerRadiusBottomLeft = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomLeft"); } } } - public string ClipboardTemplate + public double ToastBorderCornerRadiusBottomRight { get { - return this._ClipboardTemplate; + return this._toastBorderCornerRadiusBottomRight; } set { - if (this._ClipboardTemplate != value) - { - this._ClipboardTemplate = value; - this.NotifyPropertyChanged("ClipboardTemplate"); - } - } - } + if (value < 0) + throw new ArgumentException("Value must be a positive number"); - public bool SaveTrackToFile - { - get - { - return this._SaveTrackToFile; - } - set - { - if (this._SaveTrackToFile != value) + if (Math.Abs(this._toastBorderCornerRadiusBottomRight - value) > double.Epsilon) { - this._SaveTrackToFile = value; - this.NotifyPropertyChanged("SaveTrackToFile"); + this._toastBorderCornerRadiusBottomRight = value; + this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomRight"); } } } - public string SaveTrackToFilePath + public double ToastWidth { get { - return this._SaveTrackToFilePath; + return this._toastWidth; } set { - if (this._SaveTrackToFilePath != value) + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._toastWidth - value) > double.Epsilon) { - this._SaveTrackToFilePath = value; - this.NotifyPropertyChanged("SaveTrackToFilePath"); + this._toastWidth = value; + this.NotifyPropertyChanged("ToastWidth"); } } } - public bool OptInToAnalytics + public double ToastHeight { get { - return this._optInToAnalytics; + return this._toastHeight; } set { - if (this._optInToAnalytics != value) + if (value < 0) + throw new ArgumentException("Value must be a positive number"); + + if (Math.Abs(this._toastHeight - value) > double.Epsilon) { - this._optInToAnalytics = value; - this.NotifyPropertyChanged("OptInToAnalytics"); + this._toastHeight = value; + this.NotifyPropertyChanged("ToastHeight"); } } } - public bool FirstRun + public double PositionLeft { get { - return this._FirstRun; + return this._positionLeft; } set { - if (this._FirstRun != value) + if (Math.Abs(this._positionLeft - value) > double.Epsilon) { - this._FirstRun = value; - this.NotifyPropertyChanged("FirstRun"); + this._positionLeft = value; + this.NotifyPropertyChanged("PositionLeft"); } } } - public List HotKeys + public double PositionTop { get { - return this._HotKeys; + return this._positionTop; } set { - if (this._HotKeys != value) + if (Math.Abs(this._positionTop - value) > double.Epsilon) { - this._HotKeys = value; - this.NotifyPropertyChanged("HotKeys"); + this._positionTop = value; + this.NotifyPropertyChanged("PositionTop"); } } } - public string PreviousOS + #endregion [Toast] + + #region (hidden) + + public bool FirstRun { get { - return this._PreviousOS; + return this._firstRun; } set { - if (this._PreviousOS != value) + if (this._firstRun != value) { - this._PreviousOS = value; - this.NotifyPropertyChanged("PreviousOS"); + this._firstRun = value; + this.NotifyPropertyChanged("FirstRun"); } } } @@ -638,34 +633,18 @@ public string PreviousVersion { get { - return this._PreviousVersion; + return this._previousVersion; } set { - if (this._PreviousVersion != value) + if (this._previousVersion != value) { - this._PreviousVersion = value; + this._previousVersion = value; this.NotifyPropertyChanged("PreviousVersion"); } } } - public bool PreventSleepWhilePlaying - { - get - { - return this._PreventSleepWhilePlaying; - } - set - { - if (this._PreventSleepWhilePlaying != value) - { - this._PreventSleepWhilePlaying = value; - this.NotifyPropertyChanged("PreventSleepWhilePlaying"); - } - } - } - public int StartupWaitTimeout { get @@ -698,6 +677,12 @@ public int SpotifyConnectionAttempts } } + public List Plugins { get; set; } + + #endregion (hidden) + + #endregion Settings + private SettingsXml() { this.Default(); @@ -705,62 +690,62 @@ private SettingsXml() public void Default(bool setHotKeys = false) { - this.AlwaysStartSpotify = true; - this.DontPromptToStartSpotify = false; + // [General] + this.MinimizeSpotifyOnStartup = false; this.CloseSpotifyWithToastify = true; this.UseSpotifyVolumeControl = false; this.WindowsVolumeMixerIncrement = 2.0f; - this.FadeOutTime = 4000; + this.ClipboardTemplate = "I'm currently listening to {0}"; + this.SaveTrackToFile = false; + this.SaveTrackToFilePath = Path.Combine(App.ApplicationData, "current_song.txt"); + + this.PreventSleepWhilePlaying = false; + this.OptInToAnalytics = false; + + // [Hotkeys] + Hotkey.ClearAll(); this.GlobalHotKeys = true; + + // Only set hotkeys when it's requested (we don't set hotkeys when loading from XML since it will create duplicates) + if (setHotKeys) + this.HotKeys = this.defaultHotKeys; + + // [Toast] this.DisableToast = false; + this.OnlyShowToastOnHotkey = true; + this.FadeOutTime = 4000; this.ToastColorTop = "#FF000000"; this.ToastColorBottom = "#FF000000"; this.ToastBorderColor = "#FF000000"; - this.ToastBorderThickness = 1.0; - this.ToastWidth = 300; - this.ToastHeight = 75; - this.ToastBorderCornerRadiusTopLeft = 0; this.ToastBorderCornerRadiusTopRight = 0; this.ToastBorderCornerRadiusBottomRight = 0; this.ToastBorderCornerRadiusBottomLeft = 0; + this.ToastWidth = 300; + this.ToastHeight = 75; + var position = ScreenHelper.GetDefaultToastPosition(this.ToastWidth, this.ToastHeight); this.PositionLeft = position.X; this.PositionTop = position.Y; - this.ClipboardTemplate = "I'm currently listening to {0}"; - - this.SaveTrackToFile = false; - this.OptInToAnalytics = false; - this.PreventSleepWhilePlaying = false; - + // (hidden) this.StartupWaitTimeout = 20000; this.SpotifyConnectionAttempts = 5; - - Hotkey.ClearAll(); - - // only set hotkeys when it's requested (we don't set hotkeys when - // loading from XML since it will create duplicates) - if (setHotKeys) - this.HotKeys = this._defaultHotKeys; - this.Plugins = new List(); - // there are a few settings that we don't really want to override when + // There are a few settings that we don't really want to override when // clearing settings (in fact these are more properties that we store - // alongside settings for convenience), so don't reset them if they have - // values + // alongside settings for convenience), so don't reset them if they have values if (_instance != null) { this.FirstRun = _instance.FirstRun; this.PreviousVersion = _instance.PreviousVersion; - this.PreviousOS = _instance.PreviousOS; } } @@ -776,11 +761,6 @@ public void Save(bool replaceCurrent = false) Instance = this; } - public void Update() - { - this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(string.Empty)); - } - public SettingsXml Load() { if (!File.Exists(this.SettingsFile)) @@ -811,17 +791,17 @@ public SettingsXml Load() ///
    private void SanitizeSettingsFile() { - if (this._HotKeys == null) + if (this._hotKeys == null) return; - // let's collapse duplicate hotkeys + // Let's collapse duplicate hotkeys var toKeep = new List(); - foreach (Hotkey current in this._defaultHotKeys) + foreach (Hotkey current in this.defaultHotKeys) { Hotkey keep = current; - foreach (Hotkey compare in this._HotKeys) + foreach (Hotkey compare in this._hotKeys) { if (current.Action == compare.Action && compare.Enabled) keep = compare; @@ -830,14 +810,14 @@ private void SanitizeSettingsFile() toKeep.Add(keep); } - // deactivate all of the old hotkeys, especially duplicate ones that are active - foreach (Hotkey hotkey in this._HotKeys) + // Deactivate all of the old hotkeys, especially duplicate ones that are active + foreach (Hotkey hotkey in this._hotKeys) { if (!toKeep.Contains(hotkey)) hotkey.Deactivate(); } - this._HotKeys = toKeep; + this._hotKeys = toKeep; // Validate WindowsVolumeMixerIncrement: must be positive! this.WindowsVolumeMixerIncrement = Math.Abs(this.WindowsVolumeMixerIncrement); @@ -858,7 +838,7 @@ private void SanitizeSettingsFile() ///
    private void CheckForNewSettings() { - foreach (Hotkey defaultHotkey in this._defaultHotKeys) + foreach (Hotkey defaultHotkey in this.defaultHotKeys) { bool found = this.HotKeys.Any(hotkey => hotkey.Action == defaultHotkey.Action); @@ -875,31 +855,10 @@ private void ApplySettings() if (this.GlobalHotKeys) { foreach (Hotkey hotkey in this.HotKeys) - { hotkey.Activate(); - } } } - private bool IsSetToLaunchOnStartup() - { - RegistryKey key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, false); - - return key?.GetValue("Toastify", null) != null; - } - - private void SetLaunchOnStartup(bool enabled) - { - RegistryKey key = Registry.CurrentUser.OpenSubKey(REG_KEY_STARTUP, true); - - if (enabled) - key?.SetValue("Toastify", "\"" + System.Windows.Forms.Application.ExecutablePath + "\""); - else - key?.DeleteValue("Toastify", false); - - key?.Close(); - } - /// /// Any active settings (such as hotkeys) should be unloaded here /// @@ -908,9 +867,7 @@ private void UnloadSettings() if (this.HotKeys != null) { foreach (Hotkey hotkey in this.HotKeys) - { hotkey.Deactivate(); - } } } @@ -923,9 +880,7 @@ public SettingsXml Clone() clone.HotKeys = new List(); foreach (Hotkey key in this.HotKeys) - { clone.HotKeys.Add(key.Clone()); - } } return clone; diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1f7daf56..c515d394 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -122,10 +122,10 @@ private void LoadSettings() Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); - if (SettingsXml.Instance.PreviousOS != version) + if (SettingsXml.Instance.PreviousVersion != version) { Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - SettingsXml.Instance.PreviousOS = version; + SettingsXml.Instance.PreviousVersion = version; } } From aed88ffa943717d6a11d33c621a2bb64328bc1e9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 5 Jul 2017 18:18:20 +0200 Subject: [PATCH 050/452] Fixed SendComplexKey releasing key modifiers after execution That behaviour (of AutoHotkey's ControlSend command) caused consecutive key presses of the VolumeUp, VolumeDown, FastForward or Rewind hotkeys to be ignored. See also the description of commit 1dffd32. --- AutoHotkey.Interop/src/AutoHotkeyEngine.cs | 3 +- Toastify/src/Core/Spotify.cs | 61 +++++++++++++++++++++- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/AutoHotkey.Interop/src/AutoHotkeyEngine.cs b/AutoHotkey.Interop/src/AutoHotkeyEngine.cs index 164792f0..8cb3d549 100644 --- a/AutoHotkey.Interop/src/AutoHotkeyEngine.cs +++ b/AutoHotkey.Interop/src/AutoHotkeyEngine.cs @@ -67,7 +67,8 @@ public void Load(string filePath) /// The code to execute public void ExecRaw(string code) { - AutoHotkeyAPI.AhkExec(code); + if (!string.IsNullOrWhiteSpace(code)) + AutoHotkeyAPI.AhkExec(code); } /// diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index e9f76f7e..3e8999cd 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Linq; using System.Threading; +using System.Windows.Input; using Toastify.Events; using Toastify.Helpers; using Toastify.Services; @@ -182,6 +183,10 @@ private Process FindSpotifyProcess() { var processes = Process.GetProcessesByName("spotify"); return processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); + + // TODO: Check windows directly with EnumThreadWindows. + // If none of the Spotify processes found has a valid MainWindowHandle, + // then Spotify has probably been minimized to the tray. } private void Minimize(int delay = 0) @@ -319,18 +324,70 @@ public void SendAction(SpotifyAction action) /// private void SendComplexKeys(string keys) { + // TODO: Currently, SendComplexKeys doesn't work if Spotify is minimized to the tray. + // We should first showw the main window (minimized to the taskbar directly, if possible). + Debug.WriteLine($"Complex keys: {keys}"); - // only initialize AHK when needed as it can be expensive (dll copy etc) if not actually needed + // Only initialize AHK when needed as it can be expensive if not actually needed. if (this.ahk == null) this.ahk = new AutoHotkeyEngine(); - this.ahk.ExecRaw("SetTitleMatchMode 2"); + // The ControlSend command releases any modifier key after execution, + // even if they are still physically pressed. It's awful, but we need to + // send the keystrokes of those modifiers after execution manually. + // + // Key modifiers: + // Alt ! + // Shift + + // Ctrl ^ + // Win # + bool altPressed = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); + bool shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); + bool ctrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); + bool winPressed = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin); + Debug.WriteLine($"[ComplexKeys] (BEFORE) Alt: {altPressed}, Shift: {shiftPressed}, Ctrl: {ctrlPressed}, Win: {winPressed}"); + + string releaseModifiers = string.Empty; + string holdModifiers = string.Empty; + + if (altPressed) + { + releaseModifiers += "{Alt up}"; + holdModifiers += "{Alt down}"; + } + if (shiftPressed) + { + releaseModifiers += "{Shift up}"; + holdModifiers += "{Shift down}"; + } + if (ctrlPressed) + { + releaseModifiers += "{Ctrl up}"; + holdModifiers += "{Ctrl down}"; + } + if (winPressed) + { + releaseModifiers += "{LWin up}"; + holdModifiers += "{LWin down}"; + } + this.ahk.ExecRaw("SetTitleMatchMode 2"); this.ahk.ExecRaw("DetectHiddenWindows, On"); + + this.ahk.ExecRaw(string.IsNullOrWhiteSpace(releaseModifiers) ? string.Empty : $"Send, {releaseModifiers}"); this.ahk.ExecRaw($"ControlSend, ahk_parent, {keys}, ahk_class SpotifyMainWindow"); + this.ahk.ExecRaw(string.IsNullOrWhiteSpace(holdModifiers) ? string.Empty : $"Send, {holdModifiers}"); this.ahk.ExecRaw("DetectHiddenWindows, Off"); + +#if DEBUG + altPressed = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); + shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); + ctrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); + winPressed = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin); + Debug.WriteLine($"[ComplexKeys] (AFTER) Alt: {altPressed}, Shift: {shiftPressed}, Ctrl: {ctrlPressed}, Win: {winPressed}"); +#endif } private string GetSpotifyPath() From d72f15b707d23539ed9b99734ba3e0649b42df33 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 5 Jul 2017 19:23:28 +0200 Subject: [PATCH 051/452] Fixed startup error when Spotify is minimized to the tray --- Toastify/src/Core/Spotify.cs | 25 +++++++++++++++++----- Toastify/src/Win32API.cs | 41 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 3e8999cd..d37351e9 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -182,11 +182,25 @@ private void ConnectWithSpotify() private Process FindSpotifyProcess() { var processes = Process.GetProcessesByName("spotify"); - return processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); + var process = processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); - // TODO: Check windows directly with EnumThreadWindows. - // If none of the Spotify processes found has a valid MainWindowHandle, - // then Spotify has probably been minimized to the tray. + // If none of the Spotify processes found has a valid MainWindowHandle, + // then Spotify has probably been minimized to the tray: we need to check every thread's window. + if (process == null && processes.Length > 0) + { + foreach (var p in processes) + { + // ReSharper disable once LoopCanBeConvertedToQuery + foreach (ProcessThread t in p.Threads) + { + IntPtr hWnd = Win32API.FindThreadWindowByClassName((uint)t.Id, "SpotifyMainWindow"); + if (hWnd != IntPtr.Zero) + return p; + } + } + } + + return process; } private void Minimize(int delay = 0) @@ -252,7 +266,8 @@ private void ShowSpotify() private IntPtr GetMainWindowHandle() { - return this.spotifyProcess?.MainWindowHandle ?? Win32API.FindWindow("SpotifyMainWindow", null); + IntPtr spotifyWindow = this.spotifyProcess?.MainWindowHandle ?? IntPtr.Zero; + return spotifyWindow != IntPtr.Zero ? spotifyWindow : Win32API.FindWindow("SpotifyMainWindow", null); } public void SendAction(SpotifyAction action) diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index ea406d5d..3ce8a4ab 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -20,11 +20,17 @@ internal static class Win32API internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); + internal delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); + #region DLL imports [DllImport("user32.dll")] internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); + [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); @@ -40,6 +46,9 @@ internal static class Win32API [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern int GetWindowTextLength(IntPtr hWnd); + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); + [DllImport("user32.dll")] private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex); @@ -84,6 +93,38 @@ internal static class Win32API #endregion DLL imports + /// + /// Finds a thread's window by its class name. + /// + /// The id of the thread. + /// The class name. + /// A handle to the window. + public static IntPtr FindThreadWindowByClassName(uint dwThreadId, string lpClassName) + { + IntPtr searchedHWnd = IntPtr.Zero; + + EnumThreadWindows( + dwThreadId, + (hWnd, lParam) => + { + if (hWnd == IntPtr.Zero) + return true; + + StringBuilder sb = new StringBuilder(256); + GetClassName(hWnd, sb, 256); + string className = sb.ToString(); + if (className == lpClassName) + { + searchedHWnd = hWnd; + return false; + } + return true; + }, + IntPtr.Zero); + + return searchedHWnd; + } + public static void KillProc(string name) { // let's play nice and try to gracefully clear out all Sync processes From 6f405ba5a552911494b2de01b85a3aaae965a76d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 6 Jul 2017 03:51:16 +0200 Subject: [PATCH 052/452] Replaced AutoHotkey's ControlSend with native messages After analysing Spotify's messages with Spy++, I managed to perfectly simulate a keyboard shortcut inside Spotify using the SendMessage and PostMessage native methods. Contrary to AutoHotkey-based SendComplexKeys, the new SendShortcut method also works when Spotify is minimized (normally or to the tray). This makes the AutoHotkey dependence useless. --- Toastify/Toastify.csproj | 4 - Toastify/src/Core/Spotify.cs | 176 ++++++++++++----------- Toastify/src/Helpers/WindowExtensions.cs | 40 ++++++ Toastify/src/UI/Toast.xaml.cs | 2 +- Toastify/src/Win32API.cs | 123 +++++++++++++--- 5 files changed, 243 insertions(+), 102 deletions(-) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index c6feeaad..0e248fc5 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -207,10 +207,6 @@ - - {2869dbfe-7762-4930-95ea-2b0c111cf353} - AutoHotkey.Interop - {5d68931f-528f-4d95-89be-3eb26832af8c} ToastifyAPI diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index d37351e9..c0981823 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -1,7 +1,7 @@ -using AutoHotkey.Interop; using SpotifyAPI.Local; using SpotifyAPI.Local.Models; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; @@ -27,8 +27,6 @@ public static Spotify Instance #region Private fields - private AutoHotkeyEngine ahk; - private readonly SpotifyLocalAPI localAPI; private readonly string spotifyPath; @@ -51,12 +49,7 @@ public bool IsMinimized return false; var hWnd = this.GetMainWindowHandle(); - - // check Spotify's current window state - var placement = new Win32API.WindowPlacement(); - Win32API.GetWindowPlacement(hWnd, ref placement); - - return placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED; + return Win32API.IsWindowMinimized(hWnd); } } @@ -270,6 +263,19 @@ private IntPtr GetMainWindowHandle() return spotifyWindow != IntPtr.Zero ? spotifyWindow : Win32API.FindWindow("SpotifyMainWindow", null); } + /// + /// Returns the handle to the only visible windows whose class is "Chrome_WidgetWin_0". + /// (This window is child of "CefBrowserWindow", who in turn is child of "SpotifyMainWindow") + /// + /// + private IntPtr GetCefWidgetWindowHandle() + { + IntPtr mainHWnd = this.GetMainWindowHandle(); + IntPtr cefHWnd = Win32API.FindWindowEx(mainHWnd, IntPtr.Zero, "CefBrowserWindow", null); + IntPtr wdgtHWnd = Win32API.FindWindowEx(cefHWnd, IntPtr.Zero, "Chrome_WidgetWin_0", null); + return wdgtHWnd; + } + public void SendAction(SpotifyAction action) { if (!this.IsRunning) @@ -293,18 +299,18 @@ public void SendAction(SpotifyAction action) case SpotifyAction.FastForward: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.FastForward); - this.SendComplexKeys("+{Right}"); + this.SendShortcut(action); break; case SpotifyAction.Rewind: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Rewind); - this.SendComplexKeys("+{Left}"); + this.SendShortcut(action); break; case SpotifyAction.VolumeUp: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); if (SettingsXml.Instance.UseSpotifyVolumeControl) - this.SendComplexKeys("^{Up}"); + this.SendShortcut(action); else this.localAPI.IncrementVolume(); return; @@ -312,7 +318,7 @@ public void SendAction(SpotifyAction action) case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); if (SettingsXml.Instance.UseSpotifyVolumeControl) - this.SendComplexKeys("^{Down}"); + this.SendShortcut(action); else this.localAPI.DecrementVolume(); return; @@ -324,85 +330,95 @@ public void SendAction(SpotifyAction action) default: Telemetry.TrackEvent(TelemetryCategory.Action, $"{Telemetry.TelemetryEvent.Action.Default}{action}"); - Win32API.SendMessage(this.GetMainWindowHandle(), Win32API.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)action)); + Win32API.SendMessage(this.GetMainWindowHandle(), (uint)Win32API.WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)action)); break; } } /// - /// Some commands require sending keys directly to Spotify (for example, Fast Forward and Rewind which - /// are not handled by Spotify). We can't inject keys directly with WM_KEYDOWN/UP since we need a keyboard - /// hook to actually change the state of various modifier keys (for example, Shift + Right for Fast Forward). - /// - /// AutoHotKey has that hook and can modify the state for us, so let's take advantge of it. + /// Sends a series of messages to the Spotify process to simulate a keyboard shortcut inside the app itself. + /// Works also if Spotify is minimized (normally or to the tray). + /// See https://gist.github.com/aleab/9efa67e5b1a885c2c72cfbe7cf012249 for details. /// - /// - private void SendComplexKeys(string keys) + /// The action to simulate. + private void SendShortcut(SpotifyAction action) { - // TODO: Currently, SendComplexKeys doesn't work if Spotify is minimized to the tray. - // We should first showw the main window (minimized to the taskbar directly, if possible). - - Debug.WriteLine($"Complex keys: {keys}"); - - // Only initialize AHK when needed as it can be expensive if not actually needed. - if (this.ahk == null) - this.ahk = new AutoHotkeyEngine(); - - // The ControlSend command releases any modifier key after execution, - // even if they are still physically pressed. It's awful, but we need to - // send the keystrokes of those modifiers after execution manually. - // - // Key modifiers: - // Alt ! - // Shift + - // Ctrl ^ - // Win # - bool altPressed = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); - bool shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); - bool ctrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); - bool winPressed = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin); - Debug.WriteLine($"[ComplexKeys] (BEFORE) Alt: {altPressed}, Shift: {shiftPressed}, Ctrl: {ctrlPressed}, Win: {winPressed}"); - - string releaseModifiers = string.Empty; - string holdModifiers = string.Empty; - - if (altPressed) - { - releaseModifiers += "{Alt up}"; - holdModifiers += "{Alt down}"; - } - if (shiftPressed) - { - releaseModifiers += "{Shift up}"; - holdModifiers += "{Shift down}"; - } - if (ctrlPressed) - { - releaseModifiers += "{Ctrl up}"; - holdModifiers += "{Ctrl down}"; - } - if (winPressed) + IntPtr mainWindow = this.GetMainWindowHandle(); + IntPtr cefWidgetWindow = this.GetCefWidgetWindowHandle(); + + if (mainWindow == IntPtr.Zero || cefWidgetWindow == IntPtr.Zero) + Debug.WriteLine($"[Spotify.SendShortcut]: {mainWindow}, {cefWidgetWindow}"); + else { - releaseModifiers += "{LWin up}"; - holdModifiers += "{LWin down}"; - } + // The 'Playback' sub-menu + const int subMenuPos = 3; + // The base accelerator id: each item's id is obtained adding its zero-based position in the drop-down menu. + const uint baseAcceleratorId = 0x00000072; - this.ahk.ExecRaw("SetTitleMatchMode 2"); - this.ahk.ExecRaw("DetectHiddenWindows, On"); + List modifierKeys; + Key key; + int menuItemPos; - this.ahk.ExecRaw(string.IsNullOrWhiteSpace(releaseModifiers) ? string.Empty : $"Send, {releaseModifiers}"); - this.ahk.ExecRaw($"ControlSend, ahk_parent, {keys}, ahk_class SpotifyMainWindow"); - this.ahk.ExecRaw(string.IsNullOrWhiteSpace(holdModifiers) ? string.Empty : $"Send, {holdModifiers}"); + switch (action) + { + case SpotifyAction.FastForward: + modifierKeys = new List { Key.LeftShift }; + key = Key.Right; + menuItemPos = 3; + break; + + case SpotifyAction.Rewind: + modifierKeys = new List { Key.LeftShift }; + key = Key.Left; + menuItemPos = 4; + break; + + case SpotifyAction.VolumeUp: + modifierKeys = new List { Key.LeftCtrl }; + key = Key.Up; + menuItemPos = 7; + break; + + case SpotifyAction.VolumeDown: + modifierKeys = new List { Key.LeftCtrl }; + key = Key.Down; + menuItemPos = 8; + break; + + default: + return; + } - this.ahk.ExecRaw("DetectHiddenWindows, Off"); + // WM_KEYDOWN: hold down the keys + foreach (var k in modifierKeys) + Win32API.SendKeyDown(cefWidgetWindow, k, true); + Win32API.SendKeyDown(cefWidgetWindow, key, true, true); + Thread.Sleep(30); -#if DEBUG - altPressed = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); - shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); - ctrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); - winPressed = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin); - Debug.WriteLine($"[ComplexKeys] (AFTER) Alt: {altPressed}, Shift: {shiftPressed}, Ctrl: {ctrlPressed}, Win: {winPressed}"); -#endif + // WM_INITMENU: select menu + IntPtr hMenu = Win32API.GetMenu(mainWindow); + Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_INITMENU, hMenu, IntPtr.Zero); + + // WM_INITMENUPOPUP: select sub-menu ('Playback') + IntPtr hSubMenu = Win32API.GetSubMenu(hMenu, subMenuPos); + Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_INITMENUPOPUP, hSubMenu, (IntPtr)subMenuPos); + + // WM_COMMAND: accelerator keystroke (shortcut) + Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_COMMAND, (IntPtr)(0x00010000 | (baseAcceleratorId + menuItemPos)), IntPtr.Zero); + + // WM_UNINITMENUPOPUP: destroy the sub-menu + Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_UNINITMENUPOPUP, hSubMenu, IntPtr.Zero); + + // The following message is not needed: it will be sent automatically by to the main window to notify the event (to change the UI?). + // WM_COMMAND: notification that the keystroke has been translated + //Win32API.PostMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_COMMAND, (IntPtr)0x00007D01, IntPtr.Zero); + + // WM_KEYUP: release the keys + Win32API.SendKeyUp(cefWidgetWindow, key, true, true); + Thread.Sleep(30); + foreach (var k in modifierKeys) + Win32API.SendKeyDown(cefWidgetWindow, k, true); + } } private string GetSpotifyPath() diff --git a/Toastify/src/Helpers/WindowExtensions.cs b/Toastify/src/Helpers/WindowExtensions.cs index f8148c9e..8113c417 100644 --- a/Toastify/src/Helpers/WindowExtensions.cs +++ b/Toastify/src/Helpers/WindowExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Windows; +using System.Windows.Input; using System.Windows.Interop; namespace Toastify.Helpers @@ -11,5 +12,44 @@ public static IntPtr GetHandle(this Window window) WindowInteropHelper wndHelper = new WindowInteropHelper(window); return wndHelper.Handle; } + + public static uint GetLParam(this Key key, short repeatCount = 1, byte extended = 0, byte contextCode = 0, byte previousState = 0, byte transitionState = 0) + { + uint lParam = (uint)repeatCount; + uint scanCode = key.GetScanCode(); + lParam += scanCode * 0x00010000; + lParam += (uint)(extended * 0x01000000); + lParam += (uint)(contextCode * 2 * 0x10000000); + lParam += (uint)(previousState * 4 * 0x10000000); + lParam += (uint)(transitionState * 8 * 0x10000000); + return lParam; + } + + public static uint GetVirtualKey(this Key key, bool preferLeftOrRight = false) + { + if (!preferLeftOrRight) + { + switch (key) + { + case Key.LeftShift: + case Key.RightShift: + return 0x10; + + case Key.LeftCtrl: + case Key.RightCtrl: + return 0x11; + + case Key.LeftAlt: + case Key.RightAlt: + return 0x12; + } + } + return (uint)KeyInterop.VirtualKeyFromKey(key); + } + + public static uint GetScanCode(this Key key) + { + return Win32API.MapVirtualKey(key.GetVirtualKey(), Win32API.MapVirtualKeyType.MAPVK_VK_TO_VSC); + } } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index c515d394..dd806439 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -441,7 +441,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) #if DEBUG var rv = #endif - Win32API.SetThreadExecutionState(Win32API.ExecutionState.ES_SYSTEM_REQUIRED); + Win32API.SetThreadExecutionState(Win32API.ExecutionStateFlags.ES_SYSTEM_REQUIRED); #if DEBUG Debug.WriteLine("** SetThreadExecutionState returned: " + rv); #endif diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 3ce8a4ab..08cad950 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading; using System.Windows.Forms; +using System.Windows.Input; using Toastify.Helpers; // ReSharper disable InconsistentNaming @@ -34,9 +35,18 @@ internal static class Win32API [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + [DllImport("user32.dll", SetLastError = true)] + internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); + [DllImport("user32.dll")] internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + [DllImport("user32.dll")] + internal static extern IntPtr GetMenu(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos); + [DllImport("user32.dll")] internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); @@ -79,17 +89,25 @@ internal static class Win32API [DllImport("user32.dll")] internal static extern IntPtr SetFocus(IntPtr hWnd); - [DllImport("user32.dll", CharSet = CharSet.Auto)] - internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] - internal static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("user32.dll", CharSet = CharSet.Auto)] + internal static extern bool SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", EntryPoint = "SetLastError")] public static extern void SetLastError(int dwErrorCode); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); + public static extern ExecutionStateFlags SetThreadExecutionState(ExecutionStateFlags esFlags); + + [DllImport("user32.dll")] + internal static extern uint MapVirtualKey(uint uCode, MapVirtualKeyType uMapType); + + [DllImport("user32.dll")] + internal static extern uint MapVirtualKeyEx(uint uCode, MapVirtualKeyType uMapType, IntPtr dwhkl); #endregion DLL imports @@ -140,8 +158,8 @@ public static void KillProc(string name) // Essentially: Find every hWnd associated with this process and ask it to go away if (processId == (uint)lParam) { - SendMessage(hWnd, Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); - SendMessage(hWnd, Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); + SendMessage(hWnd, (uint)Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + SendMessage(hWnd, (uint)Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); } return true; @@ -177,7 +195,7 @@ public static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) public static void AddToolWindowStyle(System.Windows.Window window) { - AddWindowLongPtr(window.GetHandle(), GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStyles.WS_EX_TOOLWINDOW); + AddWindowLongPtr(window.GetHandle(), GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); } public static bool IsForegroundAppRunningInFullscreen() @@ -193,12 +211,12 @@ public static bool IsForegroundAppRunningInFullscreen() GetWindowRect(hWnd, out Rect appBounds); // Determine if window is fullscreen. - WindowStyles windowStyles = (WindowStyles)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); + WindowStylesFlags windowStyles = (WindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); Rectangle screenBounds = Screen.FromHandle(hWnd).Bounds; // - 'fullscreen' applications have WS_MAXIMIZE style; // - 'windowed borderless' applications (e.g. videogames) don't (they have WS_POPUP, though). - bool isMaximized = (windowStyles & WindowStyles.WS_MAXIMIZE) > 0L; + bool isMaximized = (windowStyles & WindowStylesFlags.WS_MAXIMIZE) > 0L; bool windowFillsWholeScreen = appBounds.bottom - appBounds.top == screenBounds.Height && appBounds.right - appBounds.left == screenBounds.Width; if (windowFillsWholeScreen && isMaximized) @@ -208,6 +226,49 @@ public static bool IsForegroundAppRunningInFullscreen() return false; } + /// + /// Checks if a window is minimized. + /// + /// The window handle. + /// + /// Whether to check if the window is minimized to the tray or not. + /// If this parameter is true and the window is minimized to the taskbar, then it returns false; + /// if this parameter is false and the window is minimized to the tray, then it returns true. + /// + /// Whether the window is minimized or not. + public static bool IsWindowMinimized(IntPtr hWnd, bool toTray = false) + { + if (hWnd == IntPtr.Zero) + return false; + + WindowStylesFlags windowStyles = (WindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); + if ((windowStyles & WindowStylesFlags.WS_MINIMIZE) > 0L) + { + // If a window is minimized to the taskbar, it is still WS_VISIBLE; + // if it is minimized to the tray, it is not. + return !toTray || (windowStyles & WindowStylesFlags.WS_VISIBLE) == 0L; + } + return false; + } + + public static bool SendKeyDown(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) + { + const uint msg = (uint)WindowsMessagesFlags.WM_KEYDOWN; + IntPtr wParam = (IntPtr)key.GetVirtualKey(); + IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0)); + + return postMessage ? PostMessage(hWnd, msg, wParam, lParam) : SendMessage(hWnd, msg, wParam, lParam); + } + + public static bool SendKeyUp(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) + { + const uint msg = (uint)WindowsMessagesFlags.WM_KEYUP; + IntPtr wParam = (IntPtr)key.GetVirtualKey(); + IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0), previousState: 1, transitionState: 1); + + return postMessage ? PostMessage(hWnd, msg, wParam, lParam) : SendMessage(hWnd, msg, wParam, lParam); + } + public static void SendPasteKey() { var shiftKey = new ManagedWinapi.KeyboardKey(Keys.ShiftKey); @@ -329,13 +390,12 @@ internal enum GWL GWL_USERDATA = -21, GWL_WNDPROC = -4 } - - + /// /// Window styles (). /// [Flags] - internal enum WindowStyles : long + internal enum WindowStylesFlags : long { WS_BORDER = 0x00800000L, WS_CAPTION = 0x00C00000L, @@ -370,7 +430,7 @@ internal enum WindowStyles : long /// Extended window styles (). /// [Flags] - internal enum ExtendedWindowStyles : long + internal enum ExtendedWindowStylesFlags : long { WS_EX_ACCEPTFILES = 0x00000010L, WS_EX_APPWINDOW = 0x00040000L, @@ -402,7 +462,7 @@ internal enum ExtendedWindowStyles : long } [Flags] - public enum ExecutionState : uint + internal enum ExecutionStateFlags : uint { ES_AWAYMODE_REQUIRED = 0x00000040, ES_CONTINUOUS = 0x80000000, @@ -411,6 +471,37 @@ public enum ExecutionState : uint ES_USER_PRESENT = 0x00000004 // Legacy flag, should not be used. } + [Flags] + internal enum WindowsMessagesFlags + { + // Keyboard Input Messages & Notifications + WM_KEYDOWN = 0x0100, + WM_KEYUP = 0x0101, + WM_CHAR = 0x0102, + WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105, + WM_SYSCHAR = 0x0106, + + WM_APPCOMMAND = 0x0319, + + // Menu Messages & Notifications + WM_COMMAND = 0x0111, + WM_UNINITMENUPOPUP = 0x0125, + + // Keyboard Accelerator Messages & Notifications + WM_INITMENU = 0x0116, + WM_INITMENUPOPUP = 0x0117, + } + + internal enum MapVirtualKeyType : uint + { + MAPVK_VK_TO_VSC = 0, + MAPVK_VSC_TO_VK = 1, + MAPVK_VK_TO_CHAR = 2, + MAPVK_VSC_TO_VK_EX = 3, + MAPVK_VK_TO_VSC_EX = 4 + } + #endregion Enums #region Internal classes and structs @@ -430,8 +521,6 @@ internal struct WindowPlacement // See: SendMessage function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx) internal class Constants { - internal const uint WM_APPCOMMAND = 0x0319; - internal const int SW_SHOWMINIMIZED = 2; internal const int SW_SHOWNOACTIVATE = 4; internal const int SW_SHOWMINNOACTIVE = 7; From bd27594e3fa62090902fb99200ac3438ed6108fe Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 6 Jul 2017 03:52:15 +0200 Subject: [PATCH 053/452] Removed the AutoHotkey.Interop project --- AutoHotkey.Interop/AutoHotkey.Interop.csproj | 91 ------- .../AutoHotkey.Interop.csproj.vspscc | 10 - AutoHotkey.Interop/Properties/AssemblyInfo.cs | 36 --- AutoHotkey.Interop/src/AutoHotkeyAPI.cs | 251 ------------------ AutoHotkey.Interop/src/AutoHotkeyEngine.cs | 161 ----------- AutoHotkey.Interop/src/SafeLibraryHandle.cs | 34 --- AutoHotkey.Interop/src/Util.cs | 102 ------- AutoHotkey.Interop/x64/AutoHotkey.dll | Bin 1409536 -> 0 bytes AutoHotkey.Interop/x86/AutoHotkey.dll | Bin 1037312 -> 0 bytes InstallationScript/Install.nsi | 2 - Toastify.sln | 13 - Toastify/post-build.cmd | 1 - 12 files changed, 701 deletions(-) delete mode 100644 AutoHotkey.Interop/AutoHotkey.Interop.csproj delete mode 100644 AutoHotkey.Interop/AutoHotkey.Interop.csproj.vspscc delete mode 100644 AutoHotkey.Interop/Properties/AssemblyInfo.cs delete mode 100644 AutoHotkey.Interop/src/AutoHotkeyAPI.cs delete mode 100644 AutoHotkey.Interop/src/AutoHotkeyEngine.cs delete mode 100644 AutoHotkey.Interop/src/SafeLibraryHandle.cs delete mode 100644 AutoHotkey.Interop/src/Util.cs delete mode 100644 AutoHotkey.Interop/x64/AutoHotkey.dll delete mode 100644 AutoHotkey.Interop/x86/AutoHotkey.dll diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj b/AutoHotkey.Interop/AutoHotkey.Interop.csproj deleted file mode 100644 index db58b4fb..00000000 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - - Debug - AnyCPU - {2869DBFE-7762-4930-95EA-2B0C111CF353} - Library - Properties - AutoHotkey.Interop - AutoHotkey.Interop - v4.5 - 512 - SAK - SAK - SAK - SAK - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x64\Release\ - TRACE - true - none - x64 - prompt - MinimumRecommendedRules.ruleset - false - - - - - - - - - - - - - - - Always - - - Always - - - - - \ No newline at end of file diff --git a/AutoHotkey.Interop/AutoHotkey.Interop.csproj.vspscc b/AutoHotkey.Interop/AutoHotkey.Interop.csproj.vspscc deleted file mode 100644 index feffdeca..00000000 --- a/AutoHotkey.Interop/AutoHotkey.Interop.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/AutoHotkey.Interop/Properties/AssemblyInfo.cs b/AutoHotkey.Interop/Properties/AssemblyInfo.cs deleted file mode 100644 index a953b5b3..00000000 --- a/AutoHotkey.Interop/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("AutoHotkey.Interop")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AutoHotkey.Interop")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("8a7cbbfe-ccb2-42ef-b90f-d937ae6ed741")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AutoHotkey.Interop/src/AutoHotkeyAPI.cs b/AutoHotkey.Interop/src/AutoHotkeyAPI.cs deleted file mode 100644 index 058a0025..00000000 --- a/AutoHotkey.Interop/src/AutoHotkeyAPI.cs +++ /dev/null @@ -1,251 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace AutoHotkey.Interop -{ - /// - /// These functions serve as a flat wrapper for AutoHotkey.dll. - /// They assume AutoHotkey.dll is in the same directory as your - /// executable. - /// - internal class AutoHotkeyAPI - { - private const string DLLPATH = "AutoHotkey.dll"; - - #region Create Thread - - /// - /// Start new thread from ahk file. - /// - /// This parameter must be a path to existing ahk file. - /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). - /// Parameters passed to dll. - /// ahkdll returns a thread handle. - /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, EntryPoint = "ahkdll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint AhkDll( - [MarshalAs(UnmanagedType.LPWStr)] string path, - [MarshalAs(UnmanagedType.LPWStr)] string options, - [MarshalAs(UnmanagedType.LPWStr)] string parameters); - - /// - /// AhkTextDll is used to launch a script in a separate thread from text/variable. - /// - /// This parameter must be a string with ahk script. - /// Additional parameter passed to AutoHotkey.dll (not available in Version 2 alpha). - /// Parameters passed to dll. - /// ahkdll returns a thread handle. - /// AhkTextDll is available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, EntryPoint = "ahktextdll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint AhkTextDll( - [MarshalAs(UnmanagedType.LPWStr)] string code, - [MarshalAs(UnmanagedType.LPWStr)] string options, - [MarshalAs(UnmanagedType.LPWStr)] string parameters); - - #endregion Create Thread - - #region Determine Thread's State - - /// - /// AhkReady is used to check if a dll script is running or not. - /// - /// 1 if a thread is running or 0 otherwise. - /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, EntryPoint = "ahkReady", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool AhkReady(); - - #endregion Determine Thread's State - - #region Control Thread - - /// - /// AhkTerminate is used to stop and exit a running script. - /// - /// Time in milliseconds to wait until thread exits. - /// Returns always 0. - /// Available in AutoHotkey[Mini].dll only, not in AutoHotkey.exe. - [DllImport(DLLPATH, EntryPoint = "ahkTerminate", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void AhkTerminate(uint timeout); - - /// - /// AhkReload is used to terminate and start a running script again. - /// - [DllImport(DLLPATH, EntryPoint = "ahkReload", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void AhkReload(); - - /// - /// AhkPause will pause/un-pause a thread and run traditional AutoHotkey Sleep internally. - /// - /// Should be "On" or "Off" as a string - [DllImport(DLLPATH, EntryPoint = "ahkPause", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern void AhkPause( - [MarshalAs(UnmanagedType.LPWStr)] string strState); - - #endregion Control Thread - - #region Add New Code - - /// - /// addFile includes additional script from a file to the running script. - /// - /// Path to a file that will be added to a running script. - /// Allow duplicate includes. - /// Ignore if loading a file failed. - /// addFile returns a pointer to the first line of new created code. - /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. - [DllImport(DLLPATH, EntryPoint = "addFile", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint AddFile( - [MarshalAs(UnmanagedType.LPWStr)] string filePath, - byte allowDuplicateInclude, - byte ignoreLoadFailure); - - // Constant values for the execute parameter of addScript - public struct Execute - { - public const byte Add = 0, Run = 1, RunWait = 2; - } - - /// - /// addScript includes additional script from a string to the running script. - /// - /// cript that will be added to a running script. - /// Determines whether the added script should be executed. - /// addScript returns a pointer to the first line of new created code. - /// pointerLine can be used in ahkExecuteLine to execute one line only or until a return is encountered. - [DllImport(DLLPATH, EntryPoint = "addScript", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern uint AddScript( - [MarshalAs(UnmanagedType.LPWStr)] string code, - byte execute); - - #endregion Add New Code - - #region Execute Some Code - - /// - /// Execute a script from a string that contains ahk script. - /// - /// Script as string/text or variable containing script that will be executed. - /// Returns true if script was executed and false if there was an error. - /// ahkExec will execute the code and delete it before it returns. - [DllImport(DLLPATH, EntryPoint = "ahkExec", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool AhkExec( - [MarshalAs(UnmanagedType.LPWStr)] string code); - - //TODO: ahkExecuteLine - - /// - /// ahkLabel is used to launch a Goto/GoSub routine in script. - /// - /// Name of label to execute. - /// Do not to wait until execution finished. - /// 1 if label exists 0 otherwise. - /// Default is 0 = wait for code to finish execution. - [DllImport(DLLPATH, EntryPoint = "ahkLabel", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool AhkLabel( - [MarshalAs(UnmanagedType.LPWStr)] string labelName, - bool noWait); - - - /// - /// ahkFunction is used to launch a function in script. - /// - /// Name of function to call. - /// The 1st parameter, or null - /// The 2nd parameter, or null - /// The 3rd parameter, or null - /// The 4th parameter, or null - /// The 5th parameter, or null - /// The 6th parameter, or null - /// The 7th parameter, or null - /// The 8th parameter, or null - /// The 9th parameter, or null - /// The 10th parameter, or null - /// Return value is always a string/text, add 0 to make sure it resolves to digit if necessary. - [DllImport(DLLPATH, EntryPoint = "ahkFunction", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr AhkFunction( - [MarshalAs(UnmanagedType.LPWStr)] string functionName, - [MarshalAs(UnmanagedType.LPWStr)] string parameter1, - [MarshalAs(UnmanagedType.LPWStr)] string parameter2, - [MarshalAs(UnmanagedType.LPWStr)] string parameter3, - [MarshalAs(UnmanagedType.LPWStr)] string parameter4, - [MarshalAs(UnmanagedType.LPWStr)] string parameter5, - [MarshalAs(UnmanagedType.LPWStr)] string parameter6, - [MarshalAs(UnmanagedType.LPWStr)] string parameter7, - [MarshalAs(UnmanagedType.LPWStr)] string parameter8, - [MarshalAs(UnmanagedType.LPWStr)] string parameter9, - [MarshalAs(UnmanagedType.LPWStr)] string parameter10); - - - /// - /// ahkFunction is used to launch a function in script. - /// - /// Name of function to call. - /// Parameters to pass to function. - /// 0 if function exists else -1. - [DllImport(DLLPATH, EntryPoint = "ahkPostFunction", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool AhkPostFunction( - [MarshalAs(UnmanagedType.LPWStr)] string functionName, - [MarshalAs(UnmanagedType.LPWStr)] string parameters); - - #endregion Execute Some Code - - #region Working With Variables - - /// - /// AhkAssign is used to assign a string to a variable in script. - /// - /// Name of a variable. - /// Value to assign to variable. - /// Returns value is 0 on success and -1 on failure. - /// AhkAssign will create the variable if it does not exist. - [DllImport(DLLPATH, EntryPoint = "ahkassign", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern bool AhkAssign( - [MarshalAs(UnmanagedType.LPWStr)] string variableName, - [MarshalAs(UnmanagedType.LPWStr)] string newValue); - - /// - /// AhkGetVar is used to get a value from a variable in script. - /// - /// Name of variable to get value from. - /// Get value or pointer. - /// Returned value is always a string, add 0 to convert to integer if necessary, especially when using getPointer. - /// AhkGetVar returns empty string if variable does not exist or is empty. - [DllImport(DLLPATH, EntryPoint = "ahkgetvar", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr AhkGetVar( - [MarshalAs(UnmanagedType.LPWStr)] string variableName, - [MarshalAs(UnmanagedType.I4)] int getPointer); - - #endregion Working With Variables - - #region Advanced - - /// - /// ahkFundFunc is used to get function its pointer - /// - /// Name of function to call. - /// Function pointer. - [DllImport(DLLPATH, EntryPoint = "ahkFindFunc", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr AhkFindFunc( - [MarshalAs(UnmanagedType.LPWStr)] string funcName); - - /// - /// ahkFindLabel is used to get a pointer to the label. - /// - /// Name of label. - /// ahkFindLabel returns a pointer to a line where label points to. - [DllImport(DLLPATH, EntryPoint = "ahkFindLabel", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr AhkFindLabel( - [MarshalAs(UnmanagedType.LPWStr)] string labelName); - - /// - /// Build in function to get a pointer to the structure of a user-defined variable. - /// - /// the name of the variable - /// The pointer to the variable. - [DllImport(DLLPATH, EntryPoint = "getVar", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr GetVar( - [MarshalAs(UnmanagedType.LPWStr)] string variable); - - #endregion Advanced - } -} \ No newline at end of file diff --git a/AutoHotkey.Interop/src/AutoHotkeyEngine.cs b/AutoHotkey.Interop/src/AutoHotkeyEngine.cs deleted file mode 100644 index 8cb3d549..00000000 --- a/AutoHotkey.Interop/src/AutoHotkeyEngine.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace AutoHotkey.Interop -{ - /// - /// This class expects an AutoHotkey.dll to be available on the machine. (UNICODE) version. - /// - public class AutoHotkeyEngine - { - public AutoHotkeyEngine() - { - Util.EnsureAutoHotkeyLoaded(); - - //ensure that a thread is started - AutoHotkeyAPI.AhkTextDll("", "", ""); - } - - /// - /// Gets the value for a varible or an empty string if the variable does not exist. - /// - /// Name of the variable. - /// Returns the value of the variable, or an empty string if the variable does not exist. - public string GetVar(string variableName) - { - var p = AutoHotkeyAPI.AhkGetVar(variableName, 0); - return Marshal.PtrToStringUni(p); - } - - /// - /// Sets the value of a variable. - /// - /// Name of the variable. - /// The value to set. - public void SetVar(string variableName, string value) - { - if (value == null) - value = ""; - - AutoHotkeyAPI.AhkAssign(variableName, value); - } - - /// - /// Evaulates an expression or function and returns the results - /// - /// The code to execute - /// Returns the result of an expression - public string Eval(string code) - { - var codeToRun = "A__EVAL:=" + code; - AutoHotkeyAPI.AhkExec(codeToRun); - return this.GetVar("A__EVAL"); - } - - /// - /// Loads a file into the running script - /// - /// The filepath of the script - public void Load(string filePath) - { - AutoHotkeyAPI.AddFile(filePath, 1, 1); - } - - /// - /// Executes raw ahk code. - /// - /// The code to execute - public void ExecRaw(string code) - { - if (!string.IsNullOrWhiteSpace(code)) - AutoHotkeyAPI.AhkExec(code); - } - - /// - /// Terminates the running scripts - /// - public void Terminate() - { - AutoHotkeyAPI.AhkTerminate(1000); - } - - /// - /// Suspends the scripts - /// - public void Suspend() - { - this.ExecRaw("Suspend, On"); - } - - /// - /// Unsuspends the scripts - /// - public void UnSuspend() - { - this.ExecRaw("Suspend, Off"); - } - - /// - /// Executes an already defined function. - /// - /// The name of the function to execute. - /// The 1st parameter - /// The 2nd parameter - /// The 3rd parameter - /// The 4th parameter - /// The 5th parameter - /// The 6th parameter - /// The 7th parameter - /// The 8th parameter - /// The 9th parameter - /// The 10 parameter - public string ExecFunction(string functionName, - string param1 = null, - string param2 = null, - string param3 = null, - string param4 = null, - string param5 = null, - string param6 = null, - string param7 = null, - string param8 = null, - string param9 = null, - string param10 = null) - { - IntPtr ret = AutoHotkeyAPI.AhkFunction(functionName, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); - - return ret == IntPtr.Zero ? null : Marshal.PtrToStringUni(ret); - } - - - /// - /// Determines if the function exists. - /// - /// Name of the function. - /// Returns true if the function exists, otherwise false. - public bool FunctionExists(string functionName) - { - IntPtr funcptr = AutoHotkeyAPI.AhkFindFunc(functionName); - return funcptr != IntPtr.Zero; - } - - /// - /// Executes a label - /// - /// Name of the label. - public void ExecLabel(string labelName) - { - AutoHotkeyAPI.AhkLabel(labelName, false); - } - - /// - /// Determines if the label exists. - /// - /// Name of the label. - /// Returns true if the label exists, otherwise false - public bool LabelExists(string labelName) - { - IntPtr labelptr = AutoHotkeyAPI.AhkFindLabel(labelName); - return labelptr != IntPtr.Zero; - } - } -} \ No newline at end of file diff --git a/AutoHotkey.Interop/src/SafeLibraryHandle.cs b/AutoHotkey.Interop/src/SafeLibraryHandle.cs deleted file mode 100644 index 48f2f2c7..00000000 --- a/AutoHotkey.Interop/src/SafeLibraryHandle.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Microsoft.Win32.SafeHandles; -using System; -using System.Runtime.ConstrainedExecution; -using System.Runtime.InteropServices; -using System.Security; -using System.Security.Permissions; - -namespace AutoHotkey.Interop -{ - [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] - internal sealed class SafeLibraryHandle : SafeHandleZeroOrMinusOneIsInvalid - { - #region Native Calls - - [DllImport("kernel32.dll", SetLastError = true)] - public static extern SafeLibraryHandle LoadLibrary(string lpFileName); - - [SuppressUnmanagedCodeSecurity] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] - [DllImport("kernel32.dll", SetLastError = true)] - private static extern bool FreeLibrary(IntPtr hModule); - - #endregion Native Calls - - private SafeLibraryHandle() : base(true) - { - } - - protected override bool ReleaseHandle() - { - return FreeLibrary(this.handle); - } - } -} \ No newline at end of file diff --git a/AutoHotkey.Interop/src/Util.cs b/AutoHotkey.Interop/src/Util.cs deleted file mode 100644 index e014a1a2..00000000 --- a/AutoHotkey.Interop/src/Util.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.RegularExpressions; - -namespace AutoHotkey.Interop -{ - internal static class Util - { - public static string FindEmbededResourceName(Assembly assembly, string path) - { - path = Regex.Replace(path, @"[/\\]", "."); - - if (!path.StartsWith(".")) - path = "." + path; - - var names = assembly.GetManifestResourceNames(); - - return names.FirstOrDefault(name => name.EndsWith(path)); - } - - public static void ExtractEmbeddedResourceToFile(Assembly assembly, string embededResourcePath, string targetFileName) - { - //ensure directory exists - FileInfo fi = new FileInfo(targetFileName); - if (!fi.Exists) - return; - - var dir = Path.GetDirectoryName(targetFileName); - if (dir != null) - { - DirectoryInfo di = new DirectoryInfo(dir); - if (!di.Exists) - di.Create(); - - using (var readStream = assembly.GetManifestResourceStream(embededResourcePath)) - { - using (var writeStream = File.Open(targetFileName, FileMode.Create)) - { - readStream?.CopyTo(writeStream); - readStream?.Flush(); - } - } - } - } - - public static bool Is64Bit() - { - return IntPtr.Size == 8; - } - - public static bool Is32Bit() - { - return IntPtr.Size == 4; - } - - - - public static void EnsureAutoHotkeyLoaded() - { - if (dllHandle.IsValueCreated) - return; - - var dummy = dllHandle.Value; - } - - private static readonly Lazy dllHandle = new Lazy(LoadAutoHotKeyDll); - - private static SafeLibraryHandle LoadAutoHotKeyDll() - { - //Locate and Load 32bit or 64bit version of AutoHotkey.dll - string tempFolderPath = Path.Combine(Path.GetTempPath(), "AutoHotkey.Interop"); - const string path32 = @"x86\AutoHotkey.dll"; - const string path64 = @"x64\AutoHotkey.dll"; - - var loadDllFromFileOrResource = new Func(relativePath => - { - if (File.Exists(relativePath)) - return SafeLibraryHandle.LoadLibrary(relativePath); - - var assembly = typeof(AutoHotkeyEngine).Assembly; - var resource = FindEmbededResourceName(assembly, relativePath); - - if (resource != null) - { - var target = Path.Combine(tempFolderPath, relativePath); - ExtractEmbeddedResourceToFile(assembly, resource, target); - return SafeLibraryHandle.LoadLibrary(target); - } - - return null; - }); - - return Is32Bit() - ? loadDllFromFileOrResource(path32) - : Is64Bit() - ? loadDllFromFileOrResource(path64) - : null; - } - } -} \ No newline at end of file diff --git a/AutoHotkey.Interop/x64/AutoHotkey.dll b/AutoHotkey.Interop/x64/AutoHotkey.dll deleted file mode 100644 index 25f88191524975ed904b7e0c1049f8b71758aabb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1409536 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%0Du)Nbj4A+_|0 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⪻s}%IW{r8)ZGdpZ3yEbq?>t-1{NdKOe=^ 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 MMqrG<|0M$d0yCor#{d8T diff --git a/AutoHotkey.Interop/x86/AutoHotkey.dll b/AutoHotkey.Interop/x86/AutoHotkey.dll deleted file mode 100644 index 6bac9a52239a99c18e80e045f56041a377a0d63e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037312 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 z 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

    (s(8%=xg=0$ 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ž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

    }07$?LVApA#Zv$2G5yLnLry8{BgLgkP*~7 zC+A>)P3Tr{$Y&sc6pA58ynw}G*LU)U&?t5 zwJXr=qxi0s-bxS~KCwf?3@h~)swN~r-V1q8rgs)-RId7k#{9V^Hu9czT$``PSkoP@n9^xFx6})O8B*ti180HiC!C|tGvw<-8nWh zSkb2ju_)6|B2YFlLqSS<-L#C_0S!_K+7j{k6Uoqx5Ex#>ZW~GP_Rkgt8c=;&4;k zdD)~PVbKM62%!l%UqurjH{|UD!i+9$VN@!M&-PEnb{}$lrr#Dkpm_1B=4ldzwtGo* zbc=+KAyQjYv%O|Tnx8bXBeIF@wd@NPvE?3eHljlvk+ZUiNmvT*9gAWd_kICa?@+jhxbl)OuCfDm+=Mi=W z*WY-~<2r-5XK}CPn##40>yKOyac$&!mhTQ{Q4u>tMMHmCMOj5fIUINy3i^tt94p*Y zRFqegUr?0o^5*1>umis$$^X0HktCCRHQ%VwMPmxLQpaE0^?#N7GhFMquH!PfcEzM# z)G7zPwOpmUri4&m`Gd<5cSZuitB-cb<7y-?l^^PCWSQ;C&R%~NVI5r8b6w8$1FoOZ zMsi8JrJjGs`yE{ObKT8#D_1Z5^L{RaOX51RozB#`i7&lp$+3#8^}qWG`h8qXsiHq8 zDs)PRZb+L-^w$cR_Dc#;U~3D1i`BtI2%VZMta))0+*V<1ixnat5S7_3- zswX->gbkR?*q;QcD3?WkIbPYt8JHTF_o;z-5y#&O5je0f{;Z`k*@nubH7y;h4>0Og zVfG%F{bj|k6=`8Y>V>+5H$qi5C~|!Rl8@5xT2}RwAZtGHWu;i$nTo|NY~o$GKtzs; zNwv$)tZ#b%^5r)6T0f||h}pgj%FF&;-1UoSXP4IzFYHS3@giMo$IqxkG!3MpBuq>28+5vrOKZh2JZqr@4}Bd+iTiE*NKm+(iActT#am_94IYm&C*h+4IU zynz;Lfp+0OW+ZaeTU^?fX9E3i`3m+mD_#z=F3Z{!VCxTVbo+kH^;@p(T<>z73>I>@ zMss<&&f>y$4n2=fna8O(ITokLn@2TE*M5>Eu>6=V{`^SNk&im2pN!9A2d#1g7$@UeB%WG zVAErP+Wk%=VHidfexv(6&FCBsV#(voSJp1{Ygh;ieM?TV44xR`M0!~$KRUQ5d`#rY ztb`}>q%)Bnd6IUYktN$H>;n8*(#QtNZdzX3LUQb`JrC>{;bz;o3Mo<8ecuREZ7(n# zhg7uPdVjy+sZNHyk;6EeKC{oi2B-y(VMa`X{s_!1@fg$k5<`~xcwaq&&?tk60s9-zf$CII&tlFa)8Lmg|)ayH1 z!BLz3@!igl_kl7&DaOQbw}B30!Gnv``&g7z#d-GwC#u(x^6CjSHUq;7V1VuxH~qn> zZ5cF{@G7mk)1&WJ0EM&kXAbo%(2j3M!JTeu`CNX{sPxmPcDgQJq(64if*k;aUY7Ok zX=7dL8(#!qyZ`K^*Lef_2V(B0*jU4QMP?0W_*6j&V8~&G=#K1WhFl|t%|&DHev2^! zB1R_!MFbkYie%OH6{Y$WqLC1vb%SetWJ)fpxF|N8wlDt>rI^BqUVSsMi*=78mLE`Y zx|K+mQIja{IKcEI$_@x#oG9zb>wHD=1=$qTb#=A4EWNJ0>*`7;`@WqgM;7N?$3e_W zZOaAKY-kkVO_gyT{2}}#1WhvDfi0_u-dL?)P|3H(;AI(~dU4GldUH8j3xOos$0ElU z9)GakgDOet>{hf-xL4Um+s=khpXX?gKZL5bmml4YwuThSP9RXoA^{x?&QQsln9I-) zl%ZPFn0!8a*P;cPDXlD;^}Ug8H_+jrgX)Zas8pX`DMk&@S0}kx8ECFX`w#0ImQLc;Z~|_c@|kT z4Bp72QY8C(s!=Jf9y1rx7_t>3`OH|1v?o-eR?T5gy0ozp=Xl~!gUk%!Pni9>Rsn@0 z3EhV1%vfwKx$#c}EoBR-#2GqUKRx)+k+hFh*8L%W@F@b&ow9wbj<7b7MULH)+(Wo> zt~#UAf)sL=8@;aD5t>G>t4^Z?r(@+Q`rK+%aaN6&14_J))wc9&Tjo}>cq`}^fTe?S zNM&v{b{cYdMrkkkyp4j4x~m>W-LJEb$t6R_BD@NntB*xnF6b;(l}>RHu$;wsx0p4U7TeNDVfmd*Z&(3`CgFX&Zy86tP6(Zn*5vm<&dgWPGq z+k;$D$XN-W3txe>A(iv0JK?X6h-8iQ$=hEa|LeZjUO%`q=b8e=j$RCns@}m0SKTi@ zvrpZRu1}@Xu&WgfyIFd!=oea2N4lTT4H!N@O@`1H-j4Bn0BD6E>g=o>*Z=ntzw_X8 zOlZgGb*{*p&cIrrO!@24ZrXwS99+`N86$DpgE(fKlYyEe4|0I2*b%;*+cA!C2e)~S zkhm9|=SX~ybR3)RlyZbspJi#Z4Joq~r&bLa%4{gPtvFe)OG%bo>%&EqHLABE7t{q* z#^+qUiYBO(Lu}GYOt9l9mc>3>5d0U|2&m{I>9HaJDVvPYU#^!JZ5wy*%?kd_63970l7&eNM6+>j;hNeg*%y5Mdf%5)dbfsG+hGM5R@L3z(*>j>-0zZGne=D1A^r{vmp0 zlXTG84K};}o3-B!P#ML;mebxI0ljZs?U%$8M25z@4J7Fd#esN8hI zk9CBK>2yLvi9DGPGM1w|E4O|YEE`yG>7K6rC2S(KsIll$I{>QAy3z9H|;=*?tiHE3tA>C_55gqA$<%&LLtb>++EchUMFeD*St^R<76A`O7Iu4Ha*o zRqasNYz!S@K8k#tIfEUQZUJ3IAK%wrH7Y#5ogKuYcAW!ERgGC;E!yXb_PYoS|Fxno zaXkLm_a+m<-xiB%o$EU^V{se#E`+He-@^K;k2|{;4F^ewK^dy1O~&*_pMd%t?9l~i z+U8bHbB1#&j|n^L;qfjEA0W{%{NfK4vrsJz{NjxMF6X^v4422o#b&tlMwfzxj-y6~ zM`9L3A~H@(=z9-dP8i#+8&lGQy!K_T4qHk)FZQ+sBbmdYwHO5^zDip)% zIWD6WXJBbfD{2m>ksFj=B-{w}GMq0$Pg(5y*u}%MTM>KgAbq60BG+FuHb2gq+_LFm zZ9qLQyg&gEmvAbK7ChB@98*&@(0N=%AGFA?b;}{=#E6Eg^ZDp^gl>t?K;d6lH!p=V zaZ`=bKx>P!RxEu}Fh{vbp^t2=c*Pb4D^2AU%WNXPaJ@HPxIUaKdz_&K+UE0JX<^8f z6>N6wy+=q%d?&YUvg4c>ufz;zJemiub(ECh?cLO;R#8N z@3%thEcRKougFwVM;+A4R1O$nTtpeyfl)|YnT|fBu_7lULW|T{B#A0Y8cmc|EFu?@ z)TWaRDPO!qtCrg-V2fSC{y|)eiC$#)YZOc+vdkv9PRP9bJ#l@?>2co9((Nx>Hss>x+Mb4`r@vxORWZbq`^g zJ=i+G$cdKdes6QD9_DQM#Sv;4U$n?xfW#J+i!Z`?@j1nEvTr7Mh}D-gB~I7p%xgt1 z(o8@j#(2fGaS8VA+;TK>OkxzD(hA$Vy)@C3q(|NgQO(?`g!rzV&VJ+B$_v}YCcqhRZ3)Fb`e^gg@uRu@&GY~5+;_BOyBW8qN#NjO+B~ScoPNlzp%)bB8@-G z3r)WFS=Ot<98L=t{AHi&@PFBx@V#tGSnV|~#M;=)e0giCip}qDdhj(Z#Dec5E z9Ewpui@VC`05YR;DIBD%SB8cHy|GX& zw&Je48{zh{6;mPN{ORx5X8#fs#Q53LArs(#K);J5gZ1 z4!E4aK1*Pix(Jq%FL5+|slPhB9D6F02%RW3 zu5%+~wX#{CA$*dzwK<^w$rzx6Brt>1kry!Dyf!6)oCt~cUJx&w*@T9O(M&S>A^jBE zj(Z?a+*Q*an>F2)%+;?eg)8{gq6HUUWDVjBf=qoW=ct+vq2sAWb;KQ=Be9`7C^mF= zVMABjGE&sfbI$Br^qn0kpUn_K(9s@i$lB#_+~?$r*xX_f*im-oD}h~ZC!*iujFW($ z^8lPue-HmM03EM8Qnl-fkjjXC&SMD#{_3R+3oNd9yrE>QF{A&aQoSz8i zh=BQY&h4u3Z)S$O5@XwfvsC!#bok|wCw&M+wJk^2M^2uFnsK__Q5G;F#7{xkvq-k< zsROW&Q5EfQgwIMzuSYiOdy#_(=lCS2zQ-6hjIso|oNZ{2wPhvBF20C_1q&3OtW=!l z+uebe5p?S|`H-=0?gJO?u^Cxn6E-`dc`%$Sci+JsKDoP;V4SXvnkOjLi~Pv+;fGJP z&r_Z6qW#9`4L-!rIa4k#rTJ@0!OeSmQwi+&YuF6PXzr)F_Lo9roAulL<=lmY%RTb& z1^jaEN&i6qBs5m-L=4-8_#-=4#^RZuh(0yFJls~9>pv z5SQfc5d)Ui_5-8WWnM~7t-%dp0{>(@eTg~(VCR4_zg%bb$@^l%WqP zsJTODR4u*=^8bPuw*?OXAdnXx4Y?c@3Y`;uxDdrUM;Hro;KKON`=D7p5~Tl8e%a4E zrQnmH!WE?*iClc`yE_O=trR zBtU>DK{FRzwRKjD*e;;u(hK*bwJn=K-R4+N=e#BYgBCFDk=K_v&JON(JiB^!J?CuG zvpMf`K(PgN3SLpX;O5-Zg-yH+%0%-2e4qDCnikxDJI5_FdEe*yeZJ54`Q9Ii9O(JU z7*R$gMm=!N8N`)gSo-DXDB7axtTs14wveCAmCtk(*o|i<&4L!44kF&}&qK9u>+vx* zR2Wmd_dCTfu>s;*LnEt+KAdR2qki;0#v$U@x9{3=hZMC3*EcFG{wj%cxS0Fu_1yhk zKvLMU4S%(g#|*(3;BWes)B`Sv4pSWDTaluU(-ut*o}cJiorFvz*1!wsaWHcRazve# z9mvitDQVD5x%d~%kC=D3`PQg5EMUL(c=#@HN-jeeFjDdocESoxlFp4(fJds6VV?>Z zx}C-J<;Y+c6sS+UCbSiT%)M_A^O2+4@}3Qz?5MWu>Z_BVa-fWPSGDtA+^-V0`|WJW zFGa8)2L*x57iV6Kc3i|iO={U+q@MtLOrq|~r3h}Ju?~+EDbYpBDMHZp?f?{Bt`8A6 zz^iD^-of#zA+Z1dp|;-T^yM0Oaclv%mF|Fx0JA@}dc>YIHS}T@tku*80E`k4;3j`1 zaCR8Kl0`7|0vNv(uqONuxPhO#8(XxY7lY}u8JJUMSN$K#+=$kfEMEj6ZqO8DEh+SrY%>pC;32yS4q$>l$-6 zeSQSyHml!2E9n&C-gEFDKC~u@L0*I7zA@6xo7M(7V`Mj}I;bO;4!z5w;J#avgjAs2BJS06RD~2(3csO z{2ylcB2FS^NvwUb)lJpNZt$0PVIY=nzJDwS$iJ8O8Jf^_(vLIRzQyWi-&G@~GYpR3 zXW1(=kcqt$MqtFI^&GmyXW)3c1kD>{vzTHNCZCQXNLf(tiN1LR*kw*z1T>P?hB5}d*2>}onEyKll7?-3B(BsvWZjBWc%aIGf>Y|*pW{hJfTN(Z<`o9~%dhM)*@J!`;sA(dh`T3tOQF@=J%8@RAST%rFHQ$4vz=+kZst=6p?2@wgI0V zgp$gMsA-VJ_s9Qt`}4b_q}M^KSLeuH)y_AyxBx4YXt5dZf0*{n)?LW$DA1knt{gEj zIY@p1Xi-{)o$=3AeM`$E|Hx#tmzI`Go<-?v6V%4`#cAE)g(EvOCw;REudrWjXK!qwe?yOE7!iTo6Qde#=HMFfe4F z1mf}-lt`dJw6P_o_JbKhaxQu=OLDy3{|!<2`{;MxVLk}ERc8-(^T{)wG5$ z^Z$xx{2qJf?tpRomYV`Nzz+@)~0N^lv zQ6My*SJ0mKlncG}(8M_wMQ37)vk@ABR{IPnem4uLfBcktwov5KL)LI-o-$mLBQlD! zIMs%a!g}8F5zo6$c^;>o4^-brJRgTP>9p;i^4x0YXQw;|Ze||`LmcE8-qKbLOv!VO zlgdR_l3Om^dq?ek3#Q~=P4T1Zk)a=~fj??K1>yf9=Z0Y7kBA<&ck(}e_}z%Ja7$Lm zc>dEPFa;fp0Qk#95e^$RKXl3u(J-*;+qV6p*!K{hC-23F`Tk;G!2{$P;*;ic>4VsD ztSm#hf3*vCk(v4AL-=R&>3*cxcMqRu`K;t~EuTpb_vQz@$v5Bt_wbw^J(RC9iQt#-0bI8`}cS9o;(|!3_77#rh&++_ zi{uxcEoR}Hiv@Bh9tjREY>BEjujgPtg4h;$FTT-y!R#-4k-4F7%jT1y_B$OF>Mlbo zv?IOo=z}!lFe;4YE@QddSnk=f+}B^DMGs?nz*rtMmWPanu(7SmC++Vjh=1%O9meoI*Q+4ryJLc$^-Kbd1uTG=4#~1+DfY!Sm@RsEPk|84{3m9 z;+2sPNnW|eRe2EToehrO9IE~&U!nwp@S<7=s*sB7C7}0vY6r}XL4@Vsn78Q4lK!9} z82L@S$lS@v^j_q@q{~E+af|!~@NRQS&}ay9;MWEXT?gT1l!*PcrMxaiwfl$!?kpiq z-ehY!&1%XffD82oyqPUBdGJ=VO4{W*PXTxJT>whld$0U8!ADmc)8(h0AIU`H5Wl|G zq4ngL(CaBid|6WOt(z$gt8#v7{!|i{jHi212Dreg4)aB`uk3}q^_2V|h#Cj*_3bEC zkKbx9KVI7*9qAW{9EnTNzc_bGRTD^Le zJ1FbB+JGgtb}QQ0T>(e3(?#AVqt=x!GMnATTp{E$GPMDN^mR}jNdmf4T_b>m_KPZe z$`_#Xs(@r?xG>?bo+d$q?8(|tR2~16jwWndY4%-tiatGN=};qU+zF>qFLQI7 zOW7qMfYK5&T3yv^Jc&xP9)2%Ay~7cieJ|?V#02ks%Y4UPn!0!M841` z7BH$-U!xbWMSZce(2-dtDFKrknc$@4Y?+{gmg||}6nlmmgHbwXfzMydeoH$}BmQAr&{N-PZU#RJsaN6qYvbICR7}#JBa%lo$^Ou=7pLj3q{+h)?dG!LqYMd==E? zub*IJxh?^U5rUNur^OB!=9#vJf|#&)des_2u~zjm%L#efS-H1*sV~KO4cZaU8`6vR z9E(QLORRM+(;Q}VF9<|i3WodCC2%~JD3%=$Pup@)Dl$N8(PW)QQJM^*C!deI zB%It|X*Mf$TOidAX4cmyH9hp0kF~HgvfuLJ#f1|vkHkM6S>w9#qSXAE92ke%S>Xe6 zU>r;oVY!hbxHv~08hFdQI^%5ip*h9;jph%qA{63=PljtT4ZNK_*QBbq@|jgDR~zGv zR(EP{f%Y!%tD9D!Nfj;?7OAQUMO&5J!G2m&mE4Q73)E^BI&3}5;oJR5+8aUobbEJv zRC^;E+tfA9AvcoLP1B>2fa9U9xGdL73tm1;r&%Z@6jW$w@(s5*_qT@r=J@J^1<5W* z^FrHV%a#RW{sNk5Trij6F+P$s*D%>+*KoR92i^V742=o-aOkTK;>1P!ONO<7$49lF z-0RdJ_^2*sjp$-iSI~k_P{U{WF!)?(^}+$uqPJJ&-p#)i=u|BY%2}Cw!#M;X-Qj7@ zk|!#M&8fPJJRY}zxWdHO ziL0Zh^mbtlCTjxJ3I)>aOc#!O#YmvrL4CMp2Dg(PpspKs;3-DMc+K|J7*R%M;-5PH)tUS&@&L@lh z;iQnlttz#u6kh!}3J%B^6x5HH)yl0LU|6Z`Uy$4gm*WTBQp-z|JIbS!-)oh(yd++4 z)4Odt=b%5PK1si)!=R%T8mWbX+IdN{NTl~}@^G+QLoX2?t^fWVuww}pm@TCmaxTCl zAQH|&VgUq_BtHOVHjf8tB=^eI*RGUD5{3zliHVz$TUH>mFS$D?z~Mi(SznzGr+jbs zpLm6jouEN`gRG^Wvr@a0Q>gt4c_OE$^<*iSfWwSnA+B^Z-+q-8n5+w+MU^UR<;j%1 zD(&BuCjtG$s+DVmD)w%jBCeqc-0A2+4*^6He1lDH-!1je$gAJ3KHsI37N8D9r z&aQ%5r;Ba;xl3mY@!W$Cu}rBp6rWNT(M31BDbhh^lA<+fA6^)@?OrqC>aPs}dI&*$ z`ZjB?a`}T$0k7^8GPBgDKF?;hHsmYjZ1M5XX|TZD3p8O4A??z@8StsN5E9>__db_& z9JDI^!IE-`Y9VW2p36D@&=QJm-S>i$WkzyiK=jRi?lEO6c)KrR=SdHVDe$>Zs}mUf z82uRdH|>V($%-g7-up(KFCnoAPnXDPE&1eV)-SR$jrBv>{te(7& zhpQgu)h6^0MI<+$l_+7amqKl}(^}-c#29&KT_vIeUA_0+BPg4E%USuS%7YNL_!8@S z9UU?k6$34^^jawIVhek&kJH6+v{?Wg5HW2@-Zg(0_+RRD0e^O|tLxdP20kU$Ek zl1Qjc@gk>!BQ52@tn33ZRF>P_UEmVeZ4CJFNtoo(obfYaU6|v#_+Yx>uIKQ!i~gcO zcvdbNV87~najM7aJ9UW8=oq7(o2}DDq}?4{Q!F>=n3JSdqjd!j2Z|%}yl#i;<%qN- z86}wyo0`8?;tE}6(qXV`D3OINK29>nN@KFwbV!6mRi~E`EwP9(*V}gzjglgX>Xyv& zA~EM({WB>yOozH4H%vlwWtczVnr2R0%P%{hbf|@05P`Fgd+Q>{HvE}=BasRa);1jxz!&?sbhG)e2ZR;B zCDB7!TiK47kQWrr>+XOUfx70Jvp3M4?JuZYQLceFu*Tg)3|+Xn4(JMwfq(5eow zcX1;aXYJfKS6M|@-BTbn^4hZI>w=|dvKSF>_fsHBOREmUuU;Sa_DIU&%1pJE-o3Z~ zj9*-FDn5(ZeDF5CdO*`FeLGrYUMR89dOYI+%l(f;EYJ5_PL3kBNP4e8W0Q7ol=H-) z>RyC6A@Bka?cXTLnr#2Z`iSm)!`D{=B+J>c*SthKsU3}nwpDk96BB7l{f@W^oD+-r zTB=E%XgA*&s$-m|Q<23l1UpL$5`iZ5gO_P@H<`|r=|q zTZb`-i9qatUxx)mtz*fc7K5^ThAn5&8Am8k?WS=(+J!VaqEk8-xzxe1Ji?;4s!4xW zUs<@HX)X;Dfgo_|uM0~{xlx!cVNL*n*2p&&LYQL(l^CTcAYgsZu?%W{lB;R@A%-;( z8=$Zf0G!l^;^ap z95&upTV%jt2E2-aO}9pTmbolQj<*h{MboXrKyK}wgQbjTbe zfnM%CSpmO`Nso^o&u8?~+~SDOw@{=|V+)UGsq^1CDTL$`)ot#?IaRA-iD{;Hb@dr> z@qmuD1k>tBUF7z>m1OK z%igzD&e3qR)>FXg5+9vSD%IN&Qa5U|3jB#Sto+_w;(17x1I2WIkzSEiZex|lSOql@ z#k8?17JC0GjK3QT79DBjyztaSz) zxQ-|L-8AKi)Ot4DDwr+lta4Z*`5NRn$NIuKL$c5KC_-Y>g_TE{`^{p15Oq?7%Zzt1 z;Qo0QE;{wh*Sn4N9%H@FSnoI12aNSWQ?8@%raldT%APWhn~OYV|IR~P;9wAVrq+Xf z;P3OhF~*`mWPhjASQO-{yW`&5F)uoH zzU2a%zSLTG_WYAco7a1Y;q^tn6x>iwme-g%$JFyTxYaySNi;$zeStX<7&T?~L5{JS zF$j*0$d>{eyzCaEScA}&*_R$geS>En!U&UURQ&7)3AZ&`2gz4q)SpPl%$dfTL6$1! zYRNpq_22q2`}%z6j;Q)Jr8Mb2zG)aG!5(1}-GAovmBS=)(*?1X~rX+-vq%k0V{fMALtp z;hRIyX=L1ncZg$^G`<1zdGwVA=`smL^({>N#fTJq5@={*gBi}R0aCf6x#wutbn{Dr z%4bAh8hNZU03IecjQ5O!l6b}&o?B}K7=6fdm>!KnU4JDc5NR%t5NhZOKPtXHD2v{y zJXpPo%!UX%WELWCgB&lx#s#tVZ>A(_;d>!DKfOJ#%lol2NGk-Vwv}~8B;O(?x&q3V zv-!jP4L72SEpYH{zU=VjtU}nBCdG_tQU|2uT}bGfz2!^U_Cn{PHbrURcMaR6$|T6o zEXeG`09J9Av;Ya18dWPAH7ahNEzLO`HIAE$GGn(%2YNJy9-3^Pwv`smD6=Yndp?V< zxUZ=!W(#ER%v|Hk zbcsNxN|FR4etGigOhK2V)ezjJu?7-TkHP@5*5%+}c0|=&8m8T}H+j4$F~)QZO%t!X z-ECJgf~cBCA#E4qe8AY5JX}sjerV*eUb#3VzRq0eGkXavGH3LZvef3>V5;+Q>w;KI zqmekF{@+>5G!Zmv-v;5QwHm zv-wEWtbISVv_S2|B$XU2PIyya*ke&`?4&enK4JDH-zcDUW66>Dbi7mfDg!HU#HZk0 zoS4vGD>AyHzjkmAe=0NS3dZpcU2y!QmT;ePgDcfMNM8Z7FqT?*LaoLDg!zf!?d{RG ztkk;A8nJHbLhhDE^I2F;dazaKjt?`NcX6kUqvTmi`1p7%G?e7UIyq~y^L?RVOHL3A zO7g|QRP$kV_awR*w1(>K*$FNsI|m*3ck_*KY&I7(-t0Vq14SEpQ7%JU8E6koBVr`k z>sqQF#9Ii;4N*Un{%E(QsZsqm%H(_iwI8}eB1}@bvL8pY;QgwXE&zbUTh+Q%AI!?I zN`bFSrRDjRh%J0shQlG-={BE;sT)WFI;@gQSNeFa(%EQ{dwwW&mdNPT4lFyvDqOEC zygM&D4P7B26}Z8z)2+UP!FO1N<+{SoTm|OBu;vX7>)A$i=EzDly3*EMrKz&;OWe%7 zPyK1+kV9! z0n%1k4QtNpM+_glVTwP{t)6I)x;?&_+A-IL7&UoOU3-LEJ3-!sF6CKrQpaAfw~IjQ zmdt*__~-I>AG7YSacgo}AuDJb>usJGW3(px`Qv5Hl54qv7Z`Z@=jf_t)NPDsCkT;n z!AhS}2egfINwc?`JZ>NuZX+H>))bB5w9>Cm@^E+$?@OG`?Q#)4s=o!vjUICS!J#_L z%cYUu%Qq(GUD}e|<&s^s`FEMjiA+L>`!pbXDzVsX zwxHLjZkdzCw@ZOTb-g?B34!1_FnD)p4-FUl+^fEZ8zLSJ=HS4M@E~}Q@O`6u;0wZ# zbRKcU7gPQVx$>8(&rx1$>MG6J6KrsE-?jD|6Q%Stapk5MM8FLxU5)DI!nql4iTwEU@Sn;_~2{i*WLTZ=^ zL`Nmg1%F{Cdi(3NP@>i>IGHhuPFXuytA6zmHBWgZi?Lj0F3r72b9Pha*&>CURJDsv ziW;@QzbGf~Nj3O()PIMNtF8WDTe2_8s5iWT7v09FKTsD`8{KivYZ|kQEQwBaoAoV_SqNw8L0@Cm`CF^&e2MbZEZ7|ES5n$snq~0S zw^wGjXt&@X9v4QJUv7muTSOEwUR(D6k@jmvmPQV1^Z3p`xSU;{$ezxLWjjS?NVQ5n zzS*_XtS3_!$kh2VbwRT(0AAuU!`Ub<8S`pW^Dp2~|HA?)=Ms(|CmOiRRQv)*ODw7m zzs>PFg(f7_X#T|~jqAu`cTa&D4(~Md~pbL3&s5c9w3F^IBL23SxWVDNTu?l9-?9IS!g)jGKWK`FgQ8G(P` z>-=Jkg^><4LLcCu16rA2qTOAAOmR}(f$y45yoyNcPc(uR9#fTF>)H9CWJ+*}xI_!( z$>W7xmmvlO7l?aYIVo;pjm>JgrOFg%<*>2VZB(Ixp-b*Hu!Juk-Z#k)3pc(k&5-h_ z6at!cIH*P~kqFgBt_^gaY5oRz34XKS3b#8o z-|cq(5#aG=Lt1yu*@Hi(g_c=4CrMh4{Qa3c%(WEZFfN9oKuc7aZD>ci4hi)FqYE!G z-$TrEuJHiMfUK&ByGRu>P9z9F-z%((Vy?j~QR~v069z3>*Pw88z_VP5hnlvJj47-4 z>>PB-D$wf;PO`hDO_DT-OamZiuog2=N4R3L5K8==0YiyZE!AG2K_8}riU<;2q7GUZ zpTl7M5w)Q@u_k%EfCyO3$(1{JAM$>4M|vu)%5WKtdf-#G1_2r3-?W!be7>}$QKOnE zd3(+l4uh-4rwE6^99CD4@%D_7AJ%MVq^HZ=<(I%m=Fgb;CG#otrgqDGXcFahgN)|m z<`a>&KxdHMZ$2ygzuuEsT*zt_S~B&rz=p##SPrW}O|*2m^T5KD0IMZ3jmUm;-J((m zG??RzF$hPf4(7Vj)%~nLHPaRSb9EDlTaNh0%_5`FnCnTk54%DBvHgS8>95l`!H7`- zm2jJlusm*Id4O5!O9dP%!N{wfONfGbOoaSiW*N>(@CfRQD?HA=e5r`ApmI&NP9qid z`4HB_iGJw~T{-QZOS`X1yFhK52>vJwxKddY85h$1qQoCHc(3K z_B!|TqtUrDsy=_YrtGp9W$E*-6M3=zyzAu7>BQydT_;FgQGg~RaWQQL=_)i2Q_pl% z27dDeXzo-7AoPaj&s#ChomxE3J(s>Ct*nPEWdZ6Bv9vvQC!CzX*C;SzE{!Nd3nTPs zZGg~YyNp?b`rCcyP|;rN{TbQ!QEr0pIJx$8-{7!PLfNeUgsh_zm1%t5Y!TAr*F?dT zi;q1qp-%yIjD=>tEy=ZT7g1OXy)$cs4?7cY?vqB5y~NgdwYp0569y<_u`!Yo(2ceN z!h>Sns$cKF6Ro6C)TV3M1%~*K7W04%>;p8xl8mM2UOE-wX8yNNz~!bEW|GHU-dn%T zQ*tuh^FFZ}yV9j521oV4vE!NaG?AbaIOXWP0R@$N)yHa1X4K*DLcVdPL#Y3}G)QY5 z1yS|O%T5a4VIC3x58d5i)}ZH^jpN7yLpg+iTO`jOEVo5+kVr*eD{K)WsQ~F2@e(3Y zC0kGqAVDv7-CdzsXX#?Shb-D}NFPTN7qk#*@OjzuwQlw$-LNm^Kbx4^ zSfEcOQq8`w|BuPH3Xvb=)B`3^E}N6CA|KKc9y3+CnTnS8RiD1X60(bS(F53hqW z2j`}0Je;IeB;G7GIqt;iy2aWt;F8ByjbRV?;L(xxfLKe1Pc8T~oYoPUT0AVim*U#P zYQ#&yWxWL2CSi2BA$V}s8Lk9waJ6Rk_s_G0v`UuPlF714dhn|EZ;tNa5P5j>)xMV*j6NNr_x3oRj#BN_&91^;7sc_Pemi z*ayAc?Mzd?Jf{`8Qr-bSw!$#GAT&58O{nVi7 zr;4)rsnq%cASZlpGUK~x%&!H$1NZRH=8V9XC-P_D+xm%PQ=#LgS*YCu2O+RMnRP|4 zj9N>Y(O1Uq;op~d?!BKEV;vmOoDQCs;PPK5H56)C`5s7rW;2S;GaNU$H}^YgIGq;C z@2fwe%^iPVn?1wVS_)%zw+tq^8O$jMp+-mC22Q#>DzXzkl z0<76U;M(@VV%#}dpK}lw#l^+ukjtdIW!?XZ}Zp{_$SJzn0iHMA8;Zhk3tbwh{u-mMm|7G?k#b5aZ_-@N_7TqU#$H!_R5g#Nj zg+v$G86@|39U{2GW+a2=uESAl0-PUD9%pDGs1~U6&j6sKO$S%I2yfJW_`fCZ{hunN zSJCDDB-!U$hFv=Wns#~2B2+N0gv<0ngr7;G%O#;2v(nG-t0y*vGYhI{A9~f8zR8iX z4{FtxC0F+Fwk>B6EAl>z_%6?ecE2s3@5s#YnEZbMiryJm03&mJ-V`1LVy-if2m^fs zHweUQB69+rIJUX(>%Hb*92dv1MNW(ekJ zdR&^5W^M*|8$jMQUzVWAzXGTts}y$k3n(?>coHj8j0Vo3$>FbFErR;I8Vt9pnWwxn zXJ(P8h2hkl@?Phzmt}N2w*3oZ_z9nv?N6M)d-w>PTFiHeGYXJ@s71?2zF5?(394Um zIExWkSma4&gSI_+DxX=1uNvL}!&W2t%{7abp~PkY2U%lsYJ6|5GxbdV9VBP}+Z@Texwkh0SaR!XQaHvvFNwo;lBjBZ@kHvEEf! zkXy~CAcb8;o7Oc-07SC~5mk0tWR8F1g_^Z0G#0vGt#Tj}{=LsGWj4q?%!#5+YpK0o zlP;LCg)ZCVnyb@(^}h<351wxW!rSvwZdl&0{)X?Hx?)TL3m3bxF!3d`iE%cnSazJ= z+y7k#Rp;v(v#F~QHL@x7heliH+jtIYCFc%qG2V$)YEpJAGWy&wPCuVcPvt>;TV&RR z&9u3QlpsjxS^S1!Kz6vc5muO(JV)%{+;5amo&)F=b*;9n)S2BAC93!$(H?udpT^4y z%T{Iynm3#$Jox0jpl*9bt88=QGBdyUu-JEh-sf|CmuD7zen)NjEmtegw|#uRtTm>t ztdCE={Fm^xYPD^3m)qO(9|9we?0{`!S#e$t{I}{?dY3wpcaPRg8k4x0pr@#ZfG2Yo zbf;ZA@S0ohr6j&kpEl=6LaRp0WH?*cPIH0B9FJxjqQ%^h>(JCS`!_REEQcI&1*qyQ zWw&iOjP!eZUZA<*FeFx2>>*eZI>n?G8ybH=1tC4&?r-o-n-Eic5wpQ) zb=QRgWn!V10S$E%Fi&>5UFHE)(%>W{$PM#!+rmj{=WPv>j_xc-6sxBq9OzTc-jCE* zvpvStDG)EhgA&o;LTX$6p@4e#0rE9Eif-aW6UIj${yhq}U@_?l7i{ z03@%-5h12^(mTufn=Oy|-8)$$52S#LT2zWh4;gYzgRqTmSxyc}y6d>pkL0)2M1cVWY*mQK{=P=}}#iQ*8xg z|Lo^z2(_&;0y+pCEiVX1w1nM@?rNw%F?$?0-;EsGSY|Hwq+FLtmwWaf=hmM?E@!X# zd|A{@`|C34VpP)J)C~oZV_gRTN5Htq^7FKm@w6x>5@5eblq#^1ABKe^5JUAifgZB5 zocTsUFRw-R=ZCG68^+H*;NOCRyW%#dxCo09)N?2Q%&*+b&nuchTDcQ3#Ni+rjKR}c z_}y8my;iMN7B>#GY!bU6kuO%b%Qy-~9|%eR8+4l52026d-p*$^RmxWz-C>c~R7-_M z&H3zkW1ZU^r)qg%9;oj0qqb@xd%22VU@1`cnD3@tm3z6PXkPG6mZ;X_JU;OSqY7<< zMIn0G9Ff<%J^`1kmX+&fr}AA0c?E4S5C5G&h`(1cgsaiT;GbRRRv)*@l2+N>8dIaJ z?kE+2a}?2Ml=s#~bk?w_-yO%HJ#$kRJH~0=?8zP2|KiCW*pr7H*aOq_ft~hqTo%*GkUMD$}F?qY+7bVVMM`3&L&qDq$M125%0&)4&!^__QiTl-#O9$CvW`BIN z`XygE>nEKWpqiRhFZmX{-QS_Thr_f*&3~qNWH8~zg7jO)=SLsoot-WRh|2|q#3fmik8_!L1Sz8HgLATyW1hMJ^!iKr|XfX))o%zfU#tH zo!*`#Z>ZukySEO4SCEBZq_3+;YuJJd1PK$>dK-^1`|dn;9FyP}b7$Eur)c0L+VmoF zAQZrir_W*p9;?K}vd0S;MY_b?x^)YK5R?XFS!JlJuDIVAoP}2y}n|G>y8Ix?T@7Af|H3h$Fr-)vdps21B~%Po_W1KbQK+u z#IdBJP5(~Rd(p!5g#1EQx=wo}9alE0IpG{0$zJa8)3MC4UeY`yx9xcRs95Okx3f99L|>UVV_>L7QNZ4ZmyK-ipV3oXEU1mfw* zcG;-9TJxDM5P!ic%Lw7n#pT8iQCl%am_D;u+v)YGanb-mp7;^(W4E-b$H?mnjkRe5kx;t=b-^VmsEgZiLB`Z+ZMkqYna zsOiWI>FOHwC?FvF%m8>SpwOGCR4y!T;JHJ+6v|;|7)II(KQsSbSk4Xst$b5)8cKq)bgP!k*eC=P@;XJ0-in#?Vkn*IV~TJ|J^-#H)we&U3o> zTa6wn{XqDI8kou&M`F%L*DuHoYP%j(qs0<`*RC&czFd}!A)T z4p(0|L|3lkb(XFy<~el5XVaCNKc{P^bM?xtdj57{A6iw5^**(szA!!Ibf;OCJ?WW9 zVoA+AGBczTfen(=*z95LDtp}djtKL>YMt9Q^oYcW!?$s#tf>C6ZPh5Z?{hF@+0PVy z%d;%U4VZ~_73I|eboqYMtNu9M_K=%`JYadq2^%46qOD22aywq5a(-Njf!3VgY|I-! znJtYPll6!;s{K!C!A2WOe9{m6HFTXV+_p;iZC~3khTAfgSn_8}E6!u3SbQ;uvDmK2 zvH0a^YjTz$9Zt~YCSibN`04T+T>+yj80n9f;jZb6a{s&PMJy($?o9E$$JYG}oG`u_ z7E`Vj(!D%sGb-#si4Is;eo?mht;>+Upp(^`p8HL4NH0RiJUTrcF*32pEU;BlQBg_l zJ34n#VSI8<{x#h!)FXK4MUz%J}aLGGfVuEk^rGi*i2@PhFkWrS&?- zEGfzHfUd^d{VG#1JN*q-wD3vjBpl`K{qhu_r$XCg(1vdCnhANj!L>4(!K3wBH`q^n z9im3P=myW=84z!^C{EXSL=F5DJN@a8A#IFN-#U3LBflo{k0o>DSsuihG^%dm00zxD zyylB}p+cNC7l-}JS^;lV2vfMxnieNfmEbpjEA%w)`7;4{m#{ASX^}ijpDPxdM97@F zX}w;Bc{1=`3oUF-!Am{{iEC+9-qdq;b`S<72Zqr zeN4npaU2pGCVO>5guOagxkL8qptrk`r>KPa7p<1wto35hGPp>y-fz_7lNU5gz^W#& zYPg>*-5PCJL7@8O1}Q#VQ62dpB9sQT09O+cLNWPXBl8fz`@V`GS7H{l5VIo;E|?W> zM1M2PB#I6W>4P=B_G7Z9IL2VkyeyFl?pIennVuyz#!wV->S=UC`gp_7 zUyhS|rFoPWX1{13oIBB3Bo3K$w&WF~_DQ38ALA0|rP{+;`?gstQBy>(-GvXA=2NjI zh+3cVNtN1H*wfC8Gb4c%lb#1ZS+4h6Nyg*ulOO)nk|zz%r9>QPKfB~^k8@Y@_^kNq z>ZOf=@XQePn6S7VaypebfdROeZZ4ZX@=VD4LCFI(59aJ4%mWcY^kwjbabPB)cj zoyQTGu|+NKk?{oU>Tj@65*doIYfH%YgL1LVdMyV3t4 z2;6EkZ@_Ce#3734MNm5n9S zZ)j2H9+dXv7!~IhIpagpaH#dPjV^Iyf%+O)8CCy{#35-F{hW>SXtf+`YysMnI^j*j zas-HZ7iUOf)6^my@B#nd@{zF|$~^j1r#X~{%<;4%ac2k8tOs(A7U5-ebv~K}iLsnSb$ED|V+ z3<+)XOS6B=K?v3ZK4o9NgAj=Whaz|d;{V|KpQ+a$OH+1yib$i~aa0FfWCTm<9-3litI##&U% zZpgdDI-uGWWn&3O*=)?J5wQUTA+qqpbi>M#C`4U2MUHjh=|6Dza1jz8W&bcHUFv8# zfvaI|EIQW54d|J~gpR@%_4$j0Qb=dcE45g=)wBVy7+mA;Ad{1$P?=-pVi5=#0r`ZjseeCOWUYlNGih5>uVxbcDUL-A4)iBXs(_=>hC`EEp_gPmp_X-;b$Q&wN7V>BsL)p7}J+) zC8v|);7z`pj|mEH-YtFf^8OL)Jy|Iboqo%-E$>b8J~iT?_WAlP2W#on~^T>lMsn)?%JU40@$zZpL6r5Tyvruy5#KXdQxd^k}s@p- zd`cA@mF&ww+NFqkevqjQYt)9}=EDI2UaQ_%dRyg#jfLY#a_CLQpGyQfdOPW~aW4RF z*<04MGB5OGxC%iw0K%pBzWt5r^5Y*ciOsvE3p+|7D}T%<50`8{O$DAX2T|mds<-zZ z&!A1d7?cRKvOKK1IDX?dqP2ER3WKvTr^0*RE-uDnN*1pr4lh=Le|eHxdQ1ran;$>J zQOG4f4%rzqNaz7t$>jt$AtU+BOZ<}JBg&LZV^OmIzQD5aKC&~>K(`@SfFkd$k1=p8 zUWd+ci`CCB8miK0OkzVqt)iJM7nNn^1-oIn+c!*p5xG0V^$vok0EZMLbR@GNl(r0V znwfMBXg(0;n-tLP#$vJ7D3Vuswk-k{pa#6>u=aLy=?xoozY@(~A>eLOlfEx3eF3*5 z3-Ph~$Y!Yk9I~&;PWWpEq1)F>#3;*UYGh}6L8_TYBpV;MyUPFp`(;*l@tM2~?pNBk zc}^j_Zw{jm6(>Gn?ld!blNoRLjXFQ+Ah1zS9M5R+ z*lAwr;Y(p6oSeOzv@g)v2Or?CI(LfDHE+*jY}ecxZ~FYCe;)XS__zoy9{3*LSPwkF zV=+J{K_o0n7J!MD?b&cG8g$1mc+jL?`;RQxhL+}3ux&ZQ+8vOsT|%S&lxvZ5=id!R zZ;y|GJt*wZquZc{oIvI8{Q!&YGpm14O=~w-FtDKaK34&rgvynC%e&f)$IFw4_&a|- zCgFG!Fn2YPp`nnN7ypg>C{LO|sBBYJ!xT)eH6Bz^g^7<>j}@3@LH6Dx3uJrnAsGVM zRec2i4^x&xAy1eoD;sf`{K^J4htt zcK#+aCvmLd3p*$fv-TfADs43NCIoQg>)rf#k+lVFViaRL_`o);Tj(*Qc0HaO?6fcQ zot-u~9i>kkJna(|IPn}K@F#VJqp-0Bq4XNuWR;D)%M$jLt@VO>MVF44Q^FqKB7<`rt^RZ)jSHOLmy+EHvJa;$My4YUd+04ACvC{ZtW4~kaar?XD$lM_JbMmntUk`9dhk~zqRO28r{Ac>gt$8PFyghF*WMX7wt44*Ysc$m~&7?yhG#K_$qViy6hAbSPj&Oi?Ho=Z9 z%;g_rVamPtyVfQLD{dT<9IRe5D!F4{8jrF$^0Q8U?oE$P4u1B=%aVhu*HkBW{HOQs zoz8vr$pP=WU0eK>^CBN^_z@tH?0n&-7RiVtw^qw!h*(kE3ET%L>Dm@$@KvVHPn!Zh ztPc(D%oH0BY%Ev)7;`J^8;#WeyekKWq&f89mtvI_`Oc=$A7m1{E!qrnWN!Mn+jkG2 zzOdVOE1#D@O#R_m9{WK)5Me$z%;qydiMg{*KnRmuO)dXpe}qJaoB;)r>%=QyL>-xD zXLFy5!@e>70y&*V9ASQxs`mLsW96`$&x@u#@j0eUrqXUXJ`hZqe4{WF<+Q-t`IIGJ zS7wr1T9on^>-`z!q$6%l4zL+8IwOXWNLpSsn|I4(dM)1_`$zs{`7W}xxbF-~fPtE-FS7q{=$mXufE zzO}qTY_S$9A@!11&?OTS5M*baz5zJ+8`X_+G8_SG1SS-;A=0EJwC+(W6xk5NqxIkR zd+DP6$(Ki_wp~scQrpTOdo>JUD9~M;3BO8W_!#5f$96cGNldYEWxPy9pq>81qZs)#px2#sBf z5r!}Rz8bQQt_>P%L;W@3f&wxLtSvRxmK$p;VD$XyBAW4=ucHMw-4BImcC~?h6>L(A zODtE&|Kg#jkV$xiVS-|<KxavgQnwPW!dU8H{R##Uw0*DC4=D*yX5x4C z9C5c<9Z!vTmW-ix6Wjhd76!j7-^CgcwBOZ=eLPFoSk5q~<(F*dt2gMCCZxED^A-M3 zu%jaKiopAhI9ruvN@o4_FU@xUst2e)*U9~3Ssx?2{A$GY0k}x|iJ(h~A zW9qRY`3V7$!7`Ro%Q@?ca9o^w-elCd0jq2EfXOV9x>tin&3x#1ChM6b5KzAyCkvjq zHtU(BAAZ+*_-VG&9oARNGpPXwmux=kJpUx2xAqba;Jak4m-xR(W8(jE6(%CPfEp0P ztqs2RM{X3YL&uyPrip;>z4c+FiY%tdq$HICmmFMJ=y)(hZGqU<73cC0YQLgXdf)9C zHmldiYBc_mjYaBdexFK^W>2N6_tqu!HmvqtlxDcBqYS)kpUxLL0#ya3kLdTR@Bu=L z#^`;ZA7EHxegc%3nrYC(uQ3U@*odG(w*s!| za+4ju`3-TXTQ_P!a_@;bXmi=qEUV>3Wx3Ps_ujp)0HdyU8?T1D>6D!xNS{wx+%_}l zqoAKlPP91pIQV#}piT<*AG3_eTQ!(?UQ1>SDK44ZR%P<&+IzHvC^q3ySI|7EfX z-8hEX*lD>9v=03B6vr^d5Gr?Qf3P!YK=y;|i|l^LZUu2Ti>Wr+g|xj)0XozvOosV` zAguu|Fw&&e2Eu9S=?K@Y?y#hsidr+8?##Km zi9eVIM!Lb`Op^}{IfThzhVQVy)#}sSH4XCRIfQ*g{UL|2t$I|pL(Et0`ho|yLozfT z*g_`<-s$|M!~@bkxu$9Bm9Q}5R#$iHJ?rfz1CAB~K_h(jwO1KFWng1DbU0u=DIex% zw%qnJE8J(?!*T^GAf>rev5e@~e-R zDdN5!c`;sOxv$Fui5?mysA1o<2)ju0U9KkB zCrcJnV>iNMh(P917wfK{lmTVCmM|whvg`vr7Vf<|%EhHaV@Y;;3XFNdt}sVD;8In` z^|U8hku_)j^+PFZ%p?17dHQ4Q22YFn(T95R2riT7Ht|2sxgznz$n#p$& zP*3#LPbuiDn^Lf)ZPJ!ilZ-a9So`|w{e^vX{z7xfbNbAt2Z`A?YJXxRzHh9&$Ebb8 z=)Bihxx-kZ`fInc0~|(kcZbs+ee-jTsh+FxM2MiCdSrq=QWz1^l1ztlGoszgSI`_zaYH zx8w-eVeXNq+mGs%xk>8|fMN5KjR3Z}yU_+Ekjw15t!@$t3%udkTk0m^-fHjt+v>AV z>nD+v#D0o9k_FBQAK2i0A8<|P=)st>%Aa!^=+>ki0dX+C8M$C_@?`aOf#oLXn1)c{I=A4#YE&TNOs*gDU{FZ2)jNPCpm#ef9oLUzG0JJn@Sf5;LpYeE1jC)7=cayD!pR8#$?UcOx1_ z#iIKj@p#+%YPU~5_wd=s=Qcjc_2rI!r>KY6G4uRU_3UvAeCtW98MCgUs*%jUJ(;za zwxnicoJXBU#kY0CxB!_!#&wmL*hIf=RWj$fNiG$NsoU*F{v2Mm?wM6>W|O;7eT8SA z?oF->p^ZIY&M8Gl8HYtheaNZIz1%^VWpjbw9KWc|dv~uf1DEG3dry6DzvYy}d*aC_ zJ7%a&6GYmBlt*^O7c^;>m>Y6!ofkRT$hZ;p8Bzb1XuyaDjc88g6)iQQP~Zx4DY^Mc z`Hs(4i;L(ON~O6mOp+pyDx@KJTZ?Z?Gz^+>ZRl#VWdcD*=iat-{Fa94at9Pnl0mr! zY71BJMk|bla!b)C#Do8^&os9($b(|8P?j_G+jesHTFXJR*3! zt?$c0iXz#lKVmKoa$b6jWjuD(B>Tg{SViV}Hhc}{E+|=y$rjPTX!hrg1}uEc9;~%8 z*1uVM_ti};=mBQ6a_}*?S>`f7XVq2QfFR>v;(t_dly0hszBl)M{3*1ga!p#h$Z;5H zCA+tu-!sG&pTA-}&TLr`_VO7ATO~oKp?GlvEl|DZ8E<#j*=ST=AQG767^8mpu24g7 zPdiV|+JNa$Gpr}w|0aj=%0M-SVDIh!Ellttms(@L{D#HPh8*^#EX>~7S!b4ry7hOI zVc($;rPKN9Ir(`6u+4`IbFWlfjE*dE!2>cgJJmax-)+jo?ZMnZ1q+J+NmMw@2qX>m zkhz4-woySk{Tx4tN0$r>@w10;r1&K?roKlqq@G-X7)Y^QzZW zXb00P7`Iq1%hQu-%8E6z|)LCpJHcY8}pTPH4^^^C9fv;-#RE2&E_=HRl3uTU8*q9{yaTMTS z9$nFh<#c~G!ew|(0Uvo^b*RViHw^Z5l^D!hbs^S$^TXo`5~DRyab^~U6EMkQ=dG&o$RJpK}zgo7Dc+_@zWzEGpVXP*ije*w(U8zT%k9_ zVs$rpMYMq`@}9R_+?`nK*OVavikx2N0W_~djtV(0uE%IWRv=0 zV#KsH5m`hY4zP}}I>RkYk}J{|4~qw((Ew}6zr!wff*rHCe{hX zEwBT-I9*Z!S<7tFrxAf&OIWAVk(eJGv`EZUeZKVXVKsdt!s~y4C=^w~7LRK~&@qVz~rq9mpMWd-k6GkPFEmIOKeK5OZY^qpYk`63`sP3!*Ji zjOJE;km+8waJyXbu(ZiY1XamzMevb0v(K zK`$y1e+R!AU=iiv4OkOPg95rUKs>PpF7(ku9 zf<&7-F`q0(Lp~fvEXEFIc)G<1yqv!npX&d}#n?F6S`0|ETcEKNIG{dhmm4XXkS#T9 zsLijox43%ikPRen&wE1LWEBqr275w3mI(1j0T z%2nbT#I3sW2=%kA3DHUeZYYX zJ+V=J#_HOtGMy4pwNpRx==^vWTU9+W&xv}P^8)JjFELGo?h@!+7>loHQ)*<^1EUZ? z`scCPa3sv&d87N8V3x$}hbldgH`CEg>i4!{;Z!^yKGAl$fuu>j`kIXhiSuQjpwb>i zQmJ&2H3AL4JApfbUH1;Uj}82sf7=gXD{4}AW$Su-?h+trB#IX?kvr3$29TeTRduL~ zelLKGFE&@Y&3UDGBB3kLa##){GL$%#*C+8#KCl1y24F-NdNkI;GToz=hC;8ax0`G} z;)0pm+9RfXL=XFquV$w_)t<7OB$NX_AT7GNxgibob{D#oCiSaaVYz@d@Q{Qb0HjIY z`{ztp9oa?BG+C5AnSuS%buB*XHRtN*JMHHW^0z&p+qxm!mhI|*Tn{W(0I4qlo9cO? z_~)zVl@c1I!S>hRX|P=)98J7fv*2X05umK+Ovu5m_f25O$Qr;*IBe7JHl~n!QOkSj zF=Uw5Up<9}*WUXYbl&cFMR0`UZyY$pxAqD>!lz%cLF4WDDP*CV5qf(%_$E{?B7{N` z3#vA2Xce475-~H%?84PZFlMbJPBvpf(}{mQg`%zM7wuXZKOlB!eKwPm(0l9K;0sjo zs=q-M|Eu@(RI%`Riz-@aj>5a3in%mLIsnAm{V#%z*|Dv%$F^M9s$mD@+P~3z`A78L z{aijx{^8Ek(qyn`VbFWO4>3Xg;){Cz>9X8_>g)m4*uWCcd9~Fp=8|F-c8_J{0#W7H z<|3hd=m3MD(Bb-_;Zr?C-mBJFY!vWEb8ZJRP@j& zD}SD-??NjDpZs3O?-n)j51EXm zY!Jp335hPh^T$j^k0Jig(sPzY9#|(NuSC^QQP2(|-KgzD1tMABp}p; z%BMT}ueXTGKS%26IaQ}cT~hby(><_wy+$-w*cy_P!*cG;p?M~Dfvqh#6K}*6SGAw z5<#jzzb2^W?HX#Pl6Z9(Q(PC?O}WR+cS%T|+H|R#WJ&;gSr+ zre`xNW|Z{L6FhJX{D^<@6kb^gMwX__?Ho+a5j~U#e{tM$QAAyiY7IFMI_2LiSnw9( zGKy)@ZZEx@9T!ag)!7-+k`bFNUTErliJ`)|C)aWMBD+`X91ugj$aP%#Lri#b*GY6= zl3ioeLUU*0FLxSEF2ku|?d^UUsjFq+N&dAkMpTDG0xnIET6&pc8IbL{ol|dkOTup= zCjs*7X@z{d@omz$n)~i))=q<+?$MJb*Q5Nc6DTZjsqb0a;?n%l*vNvE_@3$o-v#~{ zVx1x+5~&Z1fDzR-5R>#68$*CrqMQ7VM8NEqn_+wyGbx&QkBrCiJZ|M1mdlRgV}}($ zJrm$6Do4C6zk8c;r2AuPzSTWG;F+Z%Nr~Yv5c#x7#8a{5>inCQkcxaN`BO*+Lmm|? zFKZ4fAps8wYq7ezb%MA1ucC@zTabc!o=aT>5(r(^*|H+I(J%M#@nw(@hV;D+_}XkUG*2qexhIL^Rm1? zhi_Nyuh+gDVr;qC6!z!h&(LO*+vN6trI~s9o8FpnuAqGv-BdkOD~huSfyk~d@}@p$ z4RzTBqDj2lcg@8j6xr3elJ|seCZ@o+jOP02G*Xl6$ZNs*$Y-cW}rfQ3%Br^|4SLpQ-dy!Y2ncu4mf*_F7IHNeo?X(<7QU{VB3 z`q;>!lxM2kQoExY;wtVwyFCNHw^l1;Ub2T6Kr6C=h^kn-SR@E2gJDcq9`Ume<2j`- z=?Ho6Up66E6q!Oo=B}V2Lgpx6t0#v#X;=iZEW(3-&R_UytU`L>?d>&u;gcI(g)-gw z;c(YzIrmM^n6z9v%bZ(v@1m41mzcfzT*F78pVa7*{Iq^NdBdIKsBP67-{&HdaEV8c zYuG(8178+RmRtc`=>p(Q zi2C5A|BtqJfsd*>7rtjQlVk{!%m5RJ5;f|m(S$aVsKfycLPAuClZ0ecB-m3;r>V6R zW&o8-;v~SZoz}L}>iMkIqu+UHPcPb9!AmhAkU+fwwgLsz)*ica2HSXpfSP&#&)Rz? zlSuoXp6~tOH<>+auj{kcde*a^>nDl$JUA42`lDNscn<0Vl5&~Bs2J1_%dd;T&4c=0 zc`Q^uHTbnde&ums%MCJ@-E!4ZX zjRqTkNx%W-0SO*0w8kq17HxQ223igJ6BIRJ6}9KY15(JUe}N*0Zt>1Mgc!wqd#EtS zXcycgpi@<6k?-i)k)3X1f4n9Hl;Ny;{z$!8(V0bMf1B@1RhNx&Mwh><3X7d(*WXyV zm2(PRU9SkDQy6**cMZ?~3_;@|Ip7RcgJQ-U{0c!ojvs*p?7ZaS%Zb)PcOx(}eb$a% z<+78uDMU=XW_9D)X6$Bu?UvCQJ6epXy)s%hHC&E>amkwLj%O3P(IzT(+~Z|OHi$of zME(}B_ZFAd%>TWA5LzQ#2%(Z3klg{IQ$0BK@5cy?J2Xv@R$(x((<%<*;pX}mR2)!ik5<#IXBvtGwiplDpz^}?VPFI&C zmme2_AIn9_3Aw?DfB+;~rT_MTy53x53I(3$CqjV--lDJRDR5&RT&P8t#Y}OBU0!kj&TV{E=JVI zl|&LPa?JVq@!!&0(N**fhicevZ$T05e^b̿z7ys5^|P_)_<;}rxvh*^#f5ja(g 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

    muT@Nmu%Sv>lh%oVETF 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 Date: Thu, 6 Jul 2017 04:02:09 +0200 Subject: [PATCH 054/452] v1.9.4 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 2 +- update-version.ps1 | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index c09fea25..a793d3c7 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -79,8 +79,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.3" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.3" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.4" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.4" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index d5e71216..7c646a00 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.3.*")] +[assembly: AssemblyVersion("1.9.4.*")] diff --git a/Toastify/version b/Toastify/version index 7b0231f5..70b02ffc 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.3 \ No newline at end of file +1.9.4 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index ff288bf5..1cec6c60 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.3.*")] +[assembly: AssemblyVersion("1.9.4.*")] diff --git a/update-version.ps1 b/update-version.ps1 index f7f3fa77..e6e389cf 100644 --- a/update-version.ps1 +++ b/update-version.ps1 @@ -21,12 +21,12 @@ $Lines = "$NewVersion" Write-Host "Update: Toastify\Properties\AssemblyInfo.cs" $FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "Toastify\Properties\AssemblyInfo.cs")) -$Lines = (Get-Content 'Toastify\Properties\AssemblyInfo.cs') -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" +$Lines = (Get-Content 'Toastify\Properties\AssemblyInfo.cs' -Encoding UTF8) -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" [System.IO.File]::WriteAllLines($FilePath, $Lines) Write-Host "Update: ToastifyAPI\Properties\AssemblyInfo.cs" $FilePath = [System.IO.Path]::GetFullPath((Join-Path (pwd) "ToastifyAPI\Properties\AssemblyInfo.cs")) -$Lines = (Get-Content 'ToastifyAPI\Properties\AssemblyInfo.cs') -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" +$Lines = (Get-Content 'ToastifyAPI\Properties\AssemblyInfo.cs' -Encoding UTF8) -replace '^\[(assembly: AssemblyVersion)\(".*"\)\]$', "[`$1(`"$NewVersion.*`")]" [System.IO.File]::WriteAllLines($FilePath, $Lines) Write-Host "Press any key to continue ..." From c456a2464f9302510684668a8f24746856ba7f57 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 6 Jul 2017 16:31:30 +0200 Subject: [PATCH 055/452] Removed Stop action --- Toastify/src/Core/HotKey.cs | 3 --- Toastify/src/Core/SettingsXml.cs | 1 - Toastify/src/Core/SpotifyAction.cs | 35 ++++++++++++++++-------------- Toastify/src/UI/Toast.xaml.cs | 6 ----- 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Core/HotKey.cs index 98e240de..9658361e 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -196,9 +196,6 @@ public string HumanReadableAction case SpotifyAction.ShowToast: return "Show Toast"; - case SpotifyAction.Stop: - return "Stop"; - case SpotifyAction.VolumeDown: return "Volume Down"; diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index e9ebc96b..293bd2f3 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -94,7 +94,6 @@ public string SettingsFile private readonly List defaultHotKeys = new List { new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Down , Action = SpotifyAction.Stop }, new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, diff --git a/Toastify/src/Core/SpotifyAction.cs b/Toastify/src/Core/SpotifyAction.cs index df3983c0..30d22fa2 100644 --- a/Toastify/src/Core/SpotifyAction.cs +++ b/Toastify/src/Core/SpotifyAction.cs @@ -2,22 +2,25 @@ namespace Toastify.Core { public enum SpotifyAction : long { - None = 0, - ShowToast = 1, - ShowSpotify = 2, - CopyTrackInfo = 3, - SettingsSaved = 4, + // (Some of) these values are the lParam of a WM_APPCOMMAND message. + // Used simulate a keyboard multimedia key press on the desktop in Spotify.SendAction(-)? + // See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx. + + None = 0, + ShowToast = 1, + ShowSpotify = 2, + CopyTrackInfo = 3, + SettingsSaved = 4, PasteTrackInfo = 5, - ThumbsUp = 6, // not usable, left in for future (hopefully!) - ThumbsDown = 7, // not usable, left in for future (hopefully!) - PlayPause = 917504, - Mute = 524288, - VolumeDown = 589824, - VolumeUp = 655360, - Stop = 851968, - PreviousTrack = 786432, - NextTrack = 720896, - FastForward = 49 << 16, - Rewind = 50 << 16, + ThumbsUp = 6, // not usable, left in for future (hopefully!) + ThumbsDown = 7, // not usable, left in for future (hopefully!) + PlayPause = 0x000E0000L, + Mute = 0x00080000L, + VolumeDown = 0x00090000L, + VolumeUp = 0x000A0000L, + PreviousTrack = 0x000C0000L, + NextTrack = 0x000B0000L, + FastForward = 0x00310000L, + Rewind = 0x00320000L, } } \ No newline at end of file diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index dd806439..a403625e 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -549,12 +549,6 @@ public void DisplayAction(SpotifyAction action) this.UpdateToastText("Settings saved", "Here is a preview of your settings!"); break; - // TODO: Is Stop really possible on Spotify? - case SpotifyAction.Stop: - this.UpdateToastText(this.currentSong, "Stopped"); - this.currentSong = null; - break; - case SpotifyAction.VolumeUp: this.UpdateToastText(this.currentSong, "Volume ++"); break; From f9121bf23eeca885886a40065425e68d82644564 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 6 Jul 2017 19:33:04 +0200 Subject: [PATCH 056/452] HotKey implements IXmlSerializable This change lets us remove/rename SpotifyActions that have an hotkey without Toastify going crazy when it doens't find an enum value. Now, that hotkey will just be removed/set to default with the new name. --- Toastify/src/Core/HotKey.cs | 386 +++++++++++++++++++++++++----------- 1 file changed, 268 insertions(+), 118 deletions(-) diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Core/HotKey.cs index 9658361e..63e8f755 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -6,14 +6,55 @@ using System.Text; using System.Windows.Forms; using System.Windows.Input; +using System.Xml; +using System.Xml.Schema; using System.Xml.Serialization; using Toastify.UI; namespace Toastify.Core { - public class Hotkey : INotifyPropertyChanged + [Serializable] + [XmlRoot("Hotkey")] + public class Hotkey : INotifyPropertyChanged, IXmlSerializable { + private static readonly List hotkeys = new List(); + + #region Private fields + + private SpotifyAction _action; private bool _enabled; + private bool _shift; + private bool _ctrl; + private bool _alt; + private bool _windowsKey; + private Key _key; + + private bool _isValid; + private string _invalidReason; + + private bool _active; + private ManagedWinapi.Hotkey _globalKey; + private readonly ManagedWinapi.Hotkey key = new ManagedWinapi.Hotkey(); + + #endregion Private fields + + #region Public properties + + public SpotifyAction Action + { + get + { + return this._action; + } + set + { + if (this._action != value) + { + this._action = value; + this.NotifyPropertyChanged("Action", false); + } + } + } ///

    /// Specifies whether or not the hotkey is enabled or disabled from a user's @@ -35,35 +76,27 @@ public bool Enabled if (this._enabled != value) { this._enabled = value; - this.NotifyPropertyChanged("Enabled"); + this.NotifyPropertyChanged("Enabled", false); } } } - private bool _windowsKey; - - public bool WindowsKey + public bool Shift { get { - return this._windowsKey; + return this._shift; } set { - if (this._windowsKey != value) + if (this._shift != value) { - this._windowsKey = value; - - this.NotifyPropertyChanged("WindowsKey"); - - this.CheckIfValid(); + this._shift = value; + this.NotifyPropertyChanged("Shift"); } } } - - private bool _ctrl; - public bool Ctrl { get @@ -75,16 +108,11 @@ public bool Ctrl if (this._ctrl != value) { this._ctrl = value; - - this.NotifyPropertyChanged("Notify"); - - this.CheckIfValid(); + this.NotifyPropertyChanged("Ctrl"); } } } - private bool _alt; - public bool Alt { get @@ -97,33 +125,26 @@ public bool Alt { this._alt = value; this.NotifyPropertyChanged("Alt"); - this.CheckIfValid(); } } } - private bool _shift; - - public bool Shift + public bool WindowsKey { get { - return this._shift; + return this._windowsKey; } set { - if (this._shift != value) + if (this._windowsKey != value) { - this._shift = value; - this.NotifyPropertyChanged("Shift"); - this.CheckIfValid(); + this._windowsKey = value; + this.NotifyPropertyChanged("WindowsKey"); } } } - - private Key _key; - public Key Key { get @@ -136,26 +157,22 @@ public Key Key { this._key = value; this.NotifyPropertyChanged("Key"); - this.CheckIfValid(); } } } - private SpotifyAction _action; - - public SpotifyAction Action + [XmlIgnore] + public string HumanReadableKey { get { - return this._action; - } - set - { - if (this._action != value) - { - this._action = value; - this.NotifyPropertyChanged("Action"); - } + StringBuilder sb = new StringBuilder(); + if (this.Shift) sb.Append("Shift+"); + if (this.Ctrl) sb.Append("Ctrl+"); + if (this.Alt) sb.Append("Alt+"); + if (this.WindowsKey) sb.Append("Win+"); + sb.Append(this.Key); + return sb.ToString(); } } @@ -219,8 +236,6 @@ public string HumanReadableAction } } - private bool _isValid; - [XmlIgnore] public bool IsValid { @@ -233,13 +248,11 @@ public bool IsValid if (this._isValid != value) { this._isValid = value; - this.NotifyPropertyChanged("IsValid"); + this.NotifyPropertyChanged("IsValid", false); } } } - private string _invalidReason; - [XmlIgnore] public string InvalidReason { @@ -252,20 +265,49 @@ public string InvalidReason if (this._invalidReason != value) { this._invalidReason = value; - this.NotifyPropertyChanged("InvalidReason"); + this.NotifyPropertyChanged("InvalidReason", false); } } } - private bool _active; - private ManagedWinapi.Hotkey _globalKey; + [XmlIgnore] + public bool Active + { + get + { + return this._active; + } + private set + { + if (this._active != value) + { + this._active = value; + this.InitGlobalKey(); + } + } + } + + #endregion Public properties + + public event PropertyChangedEventHandler PropertyChanged; + + public Hotkey() + { + hotkeys.Add(this); + } + + ~Hotkey() + { + if (this.key != null) + this.key.Enabled = false; + } public Hotkey Clone() { Hotkey clone = this.MemberwiseClone() as Hotkey; - // regardless of whether or not the original hotkey was active - // the cloned one should not start in an active state + // Regardless of whether or not the original hotkey was active, + // the cloned one should not start in an active state. if (clone != null) clone._active = false; @@ -273,11 +315,11 @@ public Hotkey Clone() } /// - /// Turn this HotKey off + /// Turn this HotKey off. /// public void Deactivate() { - this.SetActive(false); + this.Active = false; } /// @@ -285,23 +327,13 @@ public void Deactivate() /// public void Activate() { - this.SetActive(true); - } - - private void SetActive(bool value) - { - if (this._active != value) - { - this._active = value; - - this.InitGlobalKey(); - } + this.Active = true; } private void InitGlobalKey() { - // If we're not enabled shut everything done asap - if (!this.Enabled || !this._active) + // If we're not enabled shut everything down asap + if (!this.Enabled || !this.Active) { if (this._globalKey != null) { @@ -309,7 +341,7 @@ private void InitGlobalKey() this._globalKey = null; // may as well collect the memory } - // may not be false if !Enabled + // May not be false if !Enabled this._active = false; return; @@ -318,15 +350,14 @@ private void InitGlobalKey() if (this._globalKey == null) this._globalKey = new ManagedWinapi.Hotkey(); - // make sure that we don't try to reregister the key midway updating - // the combination + // Make sure that we don't try to reregister the key midway updating the combination. if (this._globalKey.Enabled) this._globalKey.Enabled = false; - this._globalKey.WindowsKey = this.WindowsKey; - this._globalKey.Alt = this.Alt; - this._globalKey.Ctrl = this.Ctrl; this._globalKey.Shift = this.Shift; + this._globalKey.Ctrl = this.Ctrl; + this._globalKey.Alt = this.Alt; + this._globalKey.WindowsKey = this.WindowsKey; this._globalKey.KeyCode = ConvertInputKeyToFormsKeys(this.Key); this._globalKey.HotkeyPressed += (s, e) => { Toast.HotkeyActionCallback(this); }; @@ -354,77 +385,196 @@ private void CheckIfValid() { this.IsValid = false; this.InvalidReason = "You must select a valid key for your hotkey combination"; - - return; } + else if (this.Shift == false && this.Ctrl == false && this.Alt == false) + { + this.IsValid = false; + this.InvalidReason = "At least one modifier key must be selected"; + } + else + { + this.IsValid = true; + this.InvalidReason = ""; + } + } - this.IsValid = true; - this.InvalidReason = ""; + #region INotifyPropertyChanged + + private void NotifyPropertyChanged(string info, bool checkIfValid = true) + { + if (checkIfValid) + this.CheckIfValid(); + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); } - #region Static Functions + #endregion INotifyPropertyChanged - private static readonly List hotkeys = new List(); + #region IXmlSerializable - public static void ClearAll() + private enum Attribute { - // disable will be called by the destructors, but we want to force a disable - // now so that we don't wait for the GC to clean up the objects - foreach (Hotkey hotkey in hotkeys) - { - hotkey.Deactivate(); - } + Null = 0, + Enabled, + Shift, + Ctrl, + Alt, + WindowsKey, + Key, + Action + } - hotkeys.Clear(); + private static readonly Dictionary> nodeNames = new Dictionary> + { + { Attribute.Enabled, new List { "Enabled" } }, + { Attribute.Shift, new List { "Shift" } }, + { Attribute.Ctrl, new List { "Ctrl" } }, + { Attribute.Alt, new List { "Alt" } }, + { Attribute.WindowsKey, new List { "WindowsKey", "Win", "WinKey" } }, + { Attribute.Key, new List { "Key" } }, + { Attribute.Action, new List { "Action" } } + }; + + public XmlSchema GetSchema() + { + return null; } - private static Keys ConvertInputKeyToFormsKeys(Key key) + public void ReadXml(XmlReader reader) { - if (Enum.GetNames(typeof(Keys)).Contains(key.ToString())) - return (Keys)Enum.Parse(typeof(Keys), key.ToString()); + if (reader.IsEmptyElement && !reader.HasAttributes) + return; - return Keys.None; - } + try + { + Dictionary deserializedFlags = new Dictionary(); - #endregion Static Functions + // First, try to read the attributes of the 'Hotkey' node. + if (reader.MoveToFirstAttribute()) + { + do + { + string name = reader.LocalName; + string value = reader.Value; + this.ParseNode(name, value, deserializedFlags); + } while (reader.MoveToNextAttribute()); + + reader.MoveToElement(); + } - private readonly ManagedWinapi.Hotkey key = new ManagedWinapi.Hotkey(); + // Then, try to read the child nodes (for compatibility with the old settings file). + if (!reader.IsEmptyElement) + { + reader.Read(); + while (reader.NodeType != XmlNodeType.EndElement) + { + string name = reader.LocalName; + string value = reader.ReadElementContentAsString(); + this.ParseNode(name, value, deserializedFlags); + } + } + } + finally + { + if (!reader.IsEmptyElement) + reader.ReadEndElement(); + else + reader.Skip(); + } + } - public Hotkey() + public void WriteXml(XmlWriter writer) { - hotkeys.Add(this); + writer.WriteAttributeString(nodeNames[Attribute.Action].First(), this.Action.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.Enabled].First(), this.Enabled.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.Shift].First(), this.Shift.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.Ctrl].First(), this.Ctrl.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.Alt].First(), this.Alt.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.WindowsKey].First(), this.WindowsKey.ToString()); + writer.WriteAttributeString(nodeNames[Attribute.Key].First(), this.Key.ToString()); } - ~Hotkey() + private void ParseNode(string localName, string value, IDictionary deserializedFlags) { - if (this.key != null) - this.key.Enabled = false; + Attribute hotkeyAttribute = nodeNames + .FirstOrDefault(kvp => kvp.Value.Contains(localName, StringComparer.InvariantCultureIgnoreCase)) + .Key; + + // The current node name does not match any of the known names. + if (hotkeyAttribute == Attribute.Null) + return; + + // The current node is a duplicate. + if (deserializedFlags.ContainsKey(hotkeyAttribute) && deserializedFlags[hotkeyAttribute]) + return; + + // Parse the value. + this.ParseNodeValue(hotkeyAttribute, value, deserializedFlags); } - [XmlIgnore] - public string HumanReadableKey + private void ParseNodeValue(Attribute attribute, string value, IDictionary deserializedFlags) { - get + if (deserializedFlags.ContainsKey(attribute)) + deserializedFlags[attribute] = true; + + switch (attribute) { - StringBuilder sb = new StringBuilder(); - if (this.WindowsKey) sb.Append("Win+"); - if (this.Ctrl) sb.Append("Ctrl+"); - if (this.Alt) sb.Append("Alt+"); - if (this.Shift) sb.Append("Shift+"); - sb.Append(this.Key); - return sb.ToString(); + case Attribute.Enabled: + this.Enabled = bool.Parse(value); + break; + + case Attribute.Shift: + this.Shift = bool.Parse(value); + break; + + case Attribute.Ctrl: + this.Ctrl = bool.Parse(value); + break; + + case Attribute.Alt: + this.Alt = bool.Parse(value); + break; + + case Attribute.WindowsKey: + this.WindowsKey = bool.Parse(value); + break; + + case Attribute.Key: + this.Key = (Key)Enum.Parse(typeof(Key), value); + break; + + case Attribute.Action: + SpotifyAction action; + if (!Enum.TryParse(value, true, out action)) + action = SpotifyAction.None; + this.Action = action; + break; + + default: + return; } } - #region INotifyPropertyChanged + #endregion IXmlSerializable - public event PropertyChangedEventHandler PropertyChanged; + #region Static functions - private void NotifyPropertyChanged(string info) + public static void ClearAll() { - this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); + // Disable will be called by the destructors, but we want to force a disable + // now so that we don't wait for the GC to clean up the objects + foreach (Hotkey hotkey in hotkeys) + hotkey.Deactivate(); + hotkeys.Clear(); } - #endregion INotifyPropertyChanged + private static Keys ConvertInputKeyToFormsKeys(Key key) + { + if (Enum.GetNames(typeof(Keys)).Contains(key.ToString())) + return (Keys)Enum.Parse(typeof(Keys), key.ToString()); + + return Keys.None; + } + + #endregion Static functions } } \ No newline at end of file From 4d42795a88dac0200be5abc2944ab72d22407922 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 7 Jul 2017 22:30:24 +0200 Subject: [PATCH 057/452] Minor changes to the Settings window --- Toastify/src/UI/Settings.xaml | 118 ++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 50 deletions(-) diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index c6514896..acaaf7cd 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -1,11 +1,12 @@ - + x:Class="Toastify.UI.Settings" + Title="Toastify - Settings" Height="560" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> @@ -30,20 +31,20 @@ Height="16" Grid.ColumnSpan="2" Grid.Column="0">Use Spotify volume control instead of the Windows volume mixer - + - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. Save Artist and Album to file when song changes (uses the clipboard template) + Height="16" Grid.ColumnSpan="2" Grid.Column="0">Save Artist and Album to file when song changes (uses the clipboard template) - + Prevent the computer from sleeping while Spotify is playing + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. - Prevent the computer from sleeping while Spotify is playing @@ -54,7 +55,7 @@ Enable Global Hotkeys + Height="16" Grid.Column="2">Enable Global Hotkeys @@ -75,13 +76,13 @@ - - - - + + + + - - + + @@ -94,63 +95,80 @@ - Disable Toast + Disable Toast - Only Show Toast when Hotkey is pressed + Only Show Toast when Hotkey is pressed - + + - + - + - + - + - + - + - + - - - - - - - - - - - - - The best way to tweak the position of the toast is to hold down Control and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + The best way to tweak the position of the toast is to hold down Ctrl and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. + + + + + + + + + + + + + + + + - + From 02009aadb714bd06ed0a754fd0de0345c3ccf3b9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 7 Jul 2017 22:31:34 +0200 Subject: [PATCH 058/452] Save the location of the Settings window on closing --- Toastify/Toastify.csproj | 1 + Toastify/src/Common/WindowPosition.cs | 64 +++++++++++++++++++++++++++ Toastify/src/Core/SettingsXml.cs | 3 ++ Toastify/src/UI/Settings.xaml.cs | 42 ++++++++++++++---- 4 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 Toastify/src/Common/WindowPosition.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 0e248fc5..5ae02b0b 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -121,6 +121,7 @@ MSBuild:Compile Designer + diff --git a/Toastify/src/Common/WindowPosition.cs b/Toastify/src/Common/WindowPosition.cs new file mode 100644 index 00000000..27f78802 --- /dev/null +++ b/Toastify/src/Common/WindowPosition.cs @@ -0,0 +1,64 @@ +// ReSharper disable NonReadonlyMemberInGetHashCode + +using System; +using System.Xml.Serialization; + +namespace Toastify.Common +{ + [Serializable] + public struct WindowPosition + { + [XmlAttribute] + public int Left { get; set; } + + [XmlAttribute] + public int Top { get; set; } + + public static readonly WindowPosition Zero = new WindowPosition(0, 0); + + public WindowPosition(int left, int top) + { + this.Left = left; + this.Top = top; + } + + public override bool Equals(object obj) + { + if (!(obj is WindowPosition)) + return false; + + WindowPosition w = (WindowPosition)obj; + return this.Left == w.Left && this.Top == w.Top; + } + + public bool Equals(WindowPosition other) + { + return this.Left == other.Left && this.Top == other.Top; + } + + public override int GetHashCode() + { + return unchecked((this.Left * 397) ^ this.Top); + } + + public static WindowPosition operator *(WindowPosition w1, int n) + { + return new WindowPosition(w1.Left * n, w1.Top * n); + } + + public static WindowPosition operator /(WindowPosition w1, int n) + { + return new WindowPosition(w1.Left / n, w1.Top / n); + } + + public static bool operator ==(WindowPosition w1, WindowPosition w2) + { + return w1.Left == w2.Left && w1.Top == w2.Top; + } + + public static bool operator !=(WindowPosition w1, WindowPosition w2) + { + return !(w1 == w2); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 293bd2f3..ec02220d 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Xml.Serialization; +using Toastify.Common; using Toastify.Helpers; namespace Toastify.Core @@ -676,6 +677,8 @@ public int SpotifyConnectionAttempts } } + public WindowPosition SettingsWindowLastLocation { get; set; } + public List Plugins { get; set; } #endregion (hidden) diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/UI/Settings.xaml.cs index 512f4b84..a5757469 100644 --- a/Toastify/src/UI/Settings.xaml.cs +++ b/Toastify/src/UI/Settings.xaml.cs @@ -7,6 +7,7 @@ using System.Windows.Controls; using System.Windows.Forms; using System.Windows.Input; +using Toastify.Common; using Toastify.Core; using Toastify.Services; @@ -15,19 +16,29 @@ namespace Toastify.UI [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class Settings : Window { + private static Settings _current; + public SettingsXml settings; private readonly Toast toast; private List modifierKeys = new List { Key.LeftCtrl, Key.RightCtrl, Key.LeftAlt, Key.Right, Key.LeftShift, Key.RightShift, Key.LWin, Key.RWin, Key.System }; - private static Settings _current; - - public static void Launch(Toast toast) + public WindowStartupLocation StartupLocation { - if (_current != null) - _current.Activate(); - else - new Settings(toast).ShowDialog(); + get + { + WindowStartupLocation location; + + if (this.settings.FirstRun || this.settings.SettingsWindowLastLocation == WindowPosition.Zero) + location = WindowStartupLocation.CenterScreen; + else + { + this.Left = this.settings.SettingsWindowLastLocation.Left; + this.Top = this.settings.SettingsWindowLastLocation.Top; + location = WindowStartupLocation.Manual; + } + return location; + } } private Settings(Toast toast) @@ -39,10 +50,12 @@ private Settings(Toast toast) this.InitializeComponent(); - //Data context initialisation + this.WindowStartupLocation = this.StartupLocation; + + // Data context initialisation this.GeneralGrid.DataContext = this.settings; - //Slider initialisation + // Slider initialisation try { this.SlTopColor.Value = byte.Parse(this.settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); @@ -66,6 +79,14 @@ private void SaveAndApplySettings() this.toast.DisplayAction(SpotifyAction.SettingsSaved); } + public static void Launch(Toast toast) + { + if (_current != null) + _current.Activate(); + else + new Settings(toast).ShowDialog(); + } + /// /// Hexadecimal to converter. /// @@ -98,6 +119,9 @@ public static Color HexToColor(string hexColor) private void Window_Closed(object sender, EventArgs e) { + SettingsXml.Instance.SettingsWindowLastLocation = new WindowPosition((int)this.Left, (int)this.Top); + SettingsXml.Instance.Save(true); + if (ReferenceEquals(_current, this)) _current = null; } From b7bf01f5103a6bbabd7e6896602918b4fc26a5d7 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 8 Jul 2017 21:37:11 +0200 Subject: [PATCH 059/452] Fixed hotkeys being triggered multiple times on a single key-press --- Toastify/src/Core/HotKey.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Core/HotKey.cs index 63e8f755..946b2d7c 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -360,7 +360,9 @@ private void InitGlobalKey() this._globalKey.WindowsKey = this.WindowsKey; this._globalKey.KeyCode = ConvertInputKeyToFormsKeys(this.Key); - this._globalKey.HotkeyPressed += (s, e) => { Toast.HotkeyActionCallback(this); }; + // Un-subscribe from the event first, in case it was already subscribed. + this._globalKey.HotkeyPressed -= this.GlobalKey_HotkeyPressed; + this._globalKey.HotkeyPressed += this.GlobalKey_HotkeyPressed; try { @@ -398,6 +400,11 @@ private void CheckIfValid() } } + private void GlobalKey_HotkeyPressed(object sender, EventArgs e) + { + Toast.HotkeyActionCallback(this); + } + #region INotifyPropertyChanged private void NotifyPropertyChanged(string info, bool checkIfValid = true) From a4a6c94e4bcd555c6a2d241576db10764312a11e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 9 Jul 2017 00:25:50 +0200 Subject: [PATCH 060/452] Removed annoying debug messages --- Toastify/src/Core/Spotify.cs | 2 -- Toastify/src/LastInputDebug.cs | 3 ++- Toastify/src/UI/Toast.xaml.cs | 4 +++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index c0981823..016ad6e5 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -281,8 +281,6 @@ public void SendAction(SpotifyAction action) if (!this.IsRunning) return; - Debug.WriteLine($"SendAction: {action}"); - switch (action) { case SpotifyAction.CopyTrackInfo: diff --git a/Toastify/src/LastInputDebug.cs b/Toastify/src/LastInputDebug.cs index 71fdfa9f..96df4cee 100644 --- a/Toastify/src/LastInputDebug.cs +++ b/Toastify/src/LastInputDebug.cs @@ -1,6 +1,7 @@ #if DEBUG using System; +using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; // ReSharper disable BuiltInTypeReferenceStyle @@ -42,7 +43,7 @@ private static void LastInputCheck() var idleTime = (uint)Environment.TickCount - lastInputInfo.dwTime; - System.Diagnostics.Debug.WriteLine("Idle Time: " + ((idleTime > 0) ? (idleTime / 1000) : 0) + "secs (dwTime: " + lastInputInfo.dwTime + ")"); + //Debug.WriteLine($"Idle Time: {(idleTime > 0 ? idleTime / 1000 : 0)} secs (dwTime: {lastInputInfo.dwTime})"); Thread.Sleep(10000); } diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index a403625e..f1d1ef30 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -498,7 +498,7 @@ private void FadeOut(bool now = false) { this.visible = false; this.WindowState = WindowState.Minimized; - Debug.WriteLine("Minimized"); + //Debug.WriteLine("Minimized"); }; this.BeginAnimation(OpacityProperty, anim); }); @@ -637,6 +637,8 @@ internal static void HotkeyActionCallback(Hotkey hotkey) _lastHotkey = hotkey; _lastHotkeyPressTime = DateTime.Now; + Debug.WriteLine($"HotkeyActionCallback: {hotkey.Action}"); + try { if (hotkey.Action == SpotifyAction.CopyTrackInfo && Current.currentSong != null) From 1c527ba0e2480ac07785187f78ca0e8319a60c7f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 9 Jul 2017 01:14:39 +0200 Subject: [PATCH 061/452] Changed IsForegroundAppRunningInFullscreen Checking for WS_MAXIMIZE and WS_POPUP was not enough, and more importantly not correct. For the moment, if a window is WS_EX_TOPMOST and its size is equal to the screen size, then it is considered fullscreen (as in 'exclusive fullscreen' and not 'windowed borderless') and the toast will not fade-in, causing the app window to lose focus and go to the background/minimize. --- Toastify/src/Win32API.cs | 66 ++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 9 deletions(-) diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 08cad950..32ac2b25 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; @@ -80,6 +80,9 @@ internal static class Win32API [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowRect(IntPtr hwnd, out Rect rc); + [DllImport("user32.dll")] + private static extern bool GetClientRect(IntPtr hWnd, out Rect lpRect); + [DllImport("user32.dll")] internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl); @@ -208,19 +211,55 @@ public static bool IsForegroundAppRunningInFullscreen() // Check we haven't picked up the desktop or the shell. if (!hWnd.Equals(desktopHandle) && !hWnd.Equals(shellHandle)) { - GetWindowRect(hWnd, out Rect appBounds); + GetWindowRect(hWnd, out Rect windowRect); + GetClientRect(hWnd, out Rect clientRect); // Determine if window is fullscreen. WindowStylesFlags windowStyles = (WindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); + ExtendedWindowStylesFlags extendedWindowStyles = (ExtendedWindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_EXSTYLE); Rectangle screenBounds = Screen.FromHandle(hWnd).Bounds; - // - 'fullscreen' applications have WS_MAXIMIZE style; - // - 'windowed borderless' applications (e.g. videogames) don't (they have WS_POPUP, though). - bool isMaximized = (windowStyles & WindowStylesFlags.WS_MAXIMIZE) > 0L; - bool windowFillsWholeScreen = appBounds.bottom - appBounds.top == screenBounds.Height && - appBounds.right - appBounds.left == screenBounds.Width; - if (windowFillsWholeScreen && isMaximized) - return true; + // - Fullscreen applications (i.e. applications which have a window that occupies the entire screen size) + // do not have WS_BORDER or WS_CAPTION; they can have WS_MAXIMIZE, WS_POPUP and WS_EX_TOPMOST. + // - 90% of the times, if an application's window size is the same as the screen size AND it has WS_EX_TOPMOST, then is is fullscreen. + // - Videogames are a special case, because they can either be '[exclusive] fullscreen' or 'windowed borderless'; + // both the modes make the window occupy the entire screen size, but the latter generally allows (because of its 'windowed' nature) + // other windows to overlap. + // We might need to use (if it's even possible) D3D or OpenGL specific functions. + + /* examples of videogames' windows styles (only relevant styles are shown): + * +———————————————————————+——————————————————————————+———————————————————————————————++————————————————————————————+——————————————————+ + * | NAME | FULLSCREEN WS | FULLSCREEN WS_EX || BORDERLESS WS | BORDERLESS WS_EX | + * +———————————————————————+——————————————————————————+———————————————————————————————++————————————————————————————+——————————————————+ + * | Quake Champions | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | - | + * | Mass Effect Andromeda | WS_OVERLAPPED | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST | + * | Overwatch | WS_OVERLAPPED | WS_EX_TOPMOST|WS_EX_APPWINDOW || WS_OVERLAPPED | WS_EX_APPWINDOW | + * | Half-Life 2 | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | - | + * | Dishonored | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST|WS_EX_APPWINDOW || N/A | N/A | + * | Cities: Skylines | WS_OVERLAPPED|WS_POPUP | - || WS_OVERLAPPED|WS_POPUP | - | + * | Civilization V | WS_OVERLAPPED | WS_EX_TOPMOST|WS_EX_APPWINDOW || N/A | N/A | + */ + bool isTopMost = (extendedWindowStyles & ExtendedWindowStylesFlags.WS_EX_TOPMOST) > 0L; + bool windowFillsWholeScreen = clientRect.Height == screenBounds.Height && + clientRect.Width == screenBounds.Width; + + // TODO: WIP isFullScreen: ATM we just check for WS_EX_TOPMOST + bool isFullScreen = windowFillsWholeScreen && isTopMost; + +#if DEBUG + StringBuilder sbText = new StringBuilder(256); + StringBuilder sbClass = new StringBuilder(256); + GetWindowText(hWnd, sbText, 256); + GetClassName(hWnd, sbClass, 256); + + Debug.WriteLine($"IsForegroundAppRunningInFullscreen: \"{sbText}\", \"{sbClass}\""); + Debug.WriteLine($" Styles: {windowStyles}"); + Debug.WriteLine($" Extended Styles: {extendedWindowStyles}"); + Debug.WriteLine($" Screen: {screenBounds} | Window: {windowRect} | Client area: {clientRect}"); + Debug.WriteLine($" => {isFullScreen}"); +#endif + + return isFullScreen; } } return false; @@ -538,6 +577,15 @@ internal struct Rect public int top; public int right; public int bottom; + + public int Width { get { return this.right - this.left; } } + + public int Height { get { return this.bottom - this.top; } } + + public override string ToString() + { + return $"{{X={this.left},Y={this.top},Width={this.Width},Height={this.Height}}}"; + } } #endregion Internal classes and structs From e38ed7c4d68cc5c6de61f19947f696a8280f1580 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Mon, 10 Jul 2017 01:12:41 +0200 Subject: [PATCH 062/452] Fixed Toast behaviour with fullscreen apps (specially videogames) The problem of the Toast stealing the focus from fullscreen videogames should be definitely fixed. The problem happened at the end of the fade-out event. Previously, this was fixed by preventing the fade-in in case one of these apps was detected; however, recent tests with several videogames showed that it was unreliable, because every application can implement its 'fullscreen' and 'borderless windowed' modes differently (see previous commit). Now, we just prevent the Toast to became 'active' and stealing the focus when it is minimized at the end of the fade-out event (see the new ShowToast method in Toast.xaml.cs). --- Toastify/src/Core/Spotify.cs | 8 +- Toastify/src/UI/Toast.xaml.cs | 58 ++++++----- Toastify/src/Win32API.cs | 187 +++++++++++++++++++++++----------- 3 files changed, 162 insertions(+), 91 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 016ad6e5..689a02cd 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -215,7 +215,7 @@ private void Minimize(int delay = 0) // We also need to wait a little more before minimizing the window; // if we don't, the toast will not show the current track until 'something' happens (track change, play state change...). Thread.Sleep(delay); - Win32API.ShowWindow(hWnd, Win32API.Constants.SW_SHOWMINIMIZED); + Win32API.ShowWindow(hWnd, Win32API.ShowWindowCmd.SW_SHOWMINIMIZED); } } @@ -241,14 +241,14 @@ private void ShowSpotify() var placement = new Win32API.WindowPlacement(); Win32API.GetWindowPlacement(hWnd, ref placement); - int showCommand = Win32API.Constants.SW_SHOW; + var showCommand = Win32API.ShowWindowCmd.SW_SHOW; // if Spotify is minimzed we need to send a restore so that the window // will come back exactly like it was before being minimized (i.e. maximized // or otherwise) otherwise if we call SW_RESTORE on a currently maximized window // then instead of staying maximized it will return to normal size. - if (placement.showCmd == Win32API.Constants.SW_SHOWMINIMIZED) - showCommand = Win32API.Constants.SW_RESTORE; + if (placement.showCmd == Win32API.ShowWindowCmd.SW_SHOWMINIMIZED) + showCommand = Win32API.ShowWindowCmd.SW_RESTORE; Win32API.ShowWindow(hWnd, showCommand); diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index f1d1ef30..1264f3bf 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -56,11 +56,12 @@ public partial class Toast : Window private bool isUpdateToast; private bool dragging; - private bool visible; private bool paused; #endregion Private fields + public bool IsToastVisible { get; private set; } + internal List Plugins { get; set; } #region Events @@ -131,6 +132,8 @@ private void LoadSettings() public void InitToast() { + this.ShowToast(false); + //If we find any invalid settings in the xml we skip it and use default. //User notification of bad settings will be implemented with the settings dialog. @@ -419,24 +422,34 @@ private void UpdateToastText(string title1, string title2 = "", bool fadeIn = tr })); } - private void FadeIn(bool force = false, bool isUpdate = false) + private void ShowToast(bool shallBeVisible) { - // If a full screen application is running (e.g. a videogame), do not fade in. - if (Win32API.IsForegroundAppRunningInFullscreen()) - return; + this.Topmost = shallBeVisible; + this.Visibility = shallBeVisible ? Visibility.Visible : Visibility.Collapsed; + Win32API.ShowWindow(this.GetHandle(), shallBeVisible ? Win32API.ShowWindowCmd.SW_RESTORE : Win32API.ShowWindowCmd.SW_SHOWMINNOACTIVE); + + if (shallBeVisible) + { + this.UpdateCoverArt(); + this.Left = SettingsXml.Instance.PositionLeft; + this.Top = SettingsXml.Instance.PositionTop; + this.ResetPositionIfOffScreen(); + } + } + private void FadeIn(bool force = false, bool isUpdate = false) + { this.minimizeTimer?.Stop(); - if (this.dragging) + bool doNotFadeIn = this.dragging || SettingsXml.Instance.DisableToast || (SettingsXml.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible); + if (doNotFadeIn) return; - SettingsXml settings = SettingsXml.Instance; - // this is a convenient place to reset the idle timer (if so asked) // as this will be triggered when a song is played. The primary problem is if there is a // particularly long song then this will not work. That said, this is the safest (in terms of // not causing a user's computer from never sleeping). - if (settings.PreventSleepWhilePlaying) + if (SettingsXml.Instance.PreventSleepWhilePlaying) { #if DEBUG var rv = @@ -447,24 +460,16 @@ private void FadeIn(bool force = false, bool isUpdate = false) #endif } - if (settings.DisableToast || (settings.OnlyShowToastOnHotkey && !force && !this.visible)) - return; - this.isUpdateToast = isUpdate; - this.WindowState = WindowState.Normal; - this.Topmost = true; - - this.UpdateCoverArt(); - this.Left = settings.PositionLeft; - this.Top = settings.PositionTop; - this.ResetPositionIfOffScreen(); - - if (!this.visible) + + if (!this.IsToastVisible) { + this.ShowToast(true); + DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); anim.Completed += (s, e) => { - this.visible = true; + this.IsToastVisible = true; this.FadeOut(); }; this.BeginAnimation(OpacityProperty, anim); @@ -496,9 +501,8 @@ private void FadeOut(bool now = false) DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); anim.Completed += (ss, ee) => { - this.visible = false; - this.WindowState = WindowState.Minimized; - //Debug.WriteLine("Minimized"); + this.ShowToast(false); + this.IsToastVisible = false; }; this.BeginAnimation(OpacityProperty, anim); }); @@ -572,7 +576,7 @@ public void DisplayAction(SpotifyAction action) this.toastIconURI = this.currentSong.CoverArtUrl; this.UpdateToastText(this.currentSong, null, false); } - if (!this.visible) + if (!this.IsVisible) this.FadeIn(true); else this.FadeOut(true); @@ -676,7 +680,7 @@ private void Window_Loaded(object sender, RoutedEventArgs e) this.Init(); // Remove from ALT+TAB. - Win32API.AddToolWindowStyle(this); + Win32API.AddToolWindowStyle(this.GetHandle()); } /// diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 32ac2b25..8b5cfda6 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -1,9 +1,12 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; +using System.Linq; using System.Runtime.InteropServices; using System.Text; +using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; using System.Windows.Input; @@ -39,7 +42,7 @@ internal static class Win32API internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] - internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + internal static extern bool ShowWindow(IntPtr hWnd, ShowWindowCmd nCmdShow); [DllImport("user32.dll")] internal static extern IntPtr GetMenu(IntPtr hWnd); @@ -196,12 +199,12 @@ public static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); } - public static void AddToolWindowStyle(System.Windows.Window window) + public static void AddToolWindowStyle(IntPtr hWnd) { - AddWindowLongPtr(window.GetHandle(), GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); + AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); } - public static bool IsForegroundAppRunningInFullscreen() + public static bool IsForegroundAppAFullscreenVideogame() { // Get the dimensions of the active window. IntPtr hWnd = GetForegroundWindow(); @@ -211,60 +214,55 @@ public static bool IsForegroundAppRunningInFullscreen() // Check we haven't picked up the desktop or the shell. if (!hWnd.Equals(desktopHandle) && !hWnd.Equals(shellHandle)) { - GetWindowRect(hWnd, out Rect windowRect); + Rectangle screenRect = Screen.FromHandle(hWnd).Bounds; GetClientRect(hWnd, out Rect clientRect); - // Determine if window is fullscreen. - WindowStylesFlags windowStyles = (WindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_STYLE); - ExtendedWindowStylesFlags extendedWindowStyles = (ExtendedWindowStylesFlags)GetWindowLongPtr(hWnd, GWL.GWL_EXSTYLE); - Rectangle screenBounds = Screen.FromHandle(hWnd).Bounds; - - // - Fullscreen applications (i.e. applications which have a window that occupies the entire screen size) - // do not have WS_BORDER or WS_CAPTION; they can have WS_MAXIMIZE, WS_POPUP and WS_EX_TOPMOST. - // - 90% of the times, if an application's window size is the same as the screen size AND it has WS_EX_TOPMOST, then is is fullscreen. - // - Videogames are a special case, because they can either be '[exclusive] fullscreen' or 'windowed borderless'; - // both the modes make the window occupy the entire screen size, but the latter generally allows (because of its 'windowed' nature) - // other windows to overlap. - // We might need to use (if it's even possible) D3D or OpenGL specific functions. - - /* examples of videogames' windows styles (only relevant styles are shown): - * +———————————————————————+——————————————————————————+———————————————————————————————++————————————————————————————+——————————————————+ - * | NAME | FULLSCREEN WS | FULLSCREEN WS_EX || BORDERLESS WS | BORDERLESS WS_EX | - * +———————————————————————+——————————————————————————+———————————————————————————————++————————————————————————————+——————————————————+ - * | Quake Champions | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | - | - * | Mass Effect Andromeda | WS_OVERLAPPED | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST | - * | Overwatch | WS_OVERLAPPED | WS_EX_TOPMOST|WS_EX_APPWINDOW || WS_OVERLAPPED | WS_EX_APPWINDOW | - * | Half-Life 2 | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST || WS_OVERLAPPED|WS_POPUP | - | - * | Dishonored | WS_OVERLAPPED|WS_POPUP | WS_EX_TOPMOST|WS_EX_APPWINDOW || N/A | N/A | - * | Cities: Skylines | WS_OVERLAPPED|WS_POPUP | - || WS_OVERLAPPED|WS_POPUP | - | - * | Civilization V | WS_OVERLAPPED | WS_EX_TOPMOST|WS_EX_APPWINDOW || N/A | N/A | - */ - bool isTopMost = (extendedWindowStyles & ExtendedWindowStylesFlags.WS_EX_TOPMOST) > 0L; - bool windowFillsWholeScreen = clientRect.Height == screenBounds.Height && - clientRect.Width == screenBounds.Width; - - // TODO: WIP isFullScreen: ATM we just check for WS_EX_TOPMOST - bool isFullScreen = windowFillsWholeScreen && isTopMost; - -#if DEBUG - StringBuilder sbText = new StringBuilder(256); - StringBuilder sbClass = new StringBuilder(256); - GetWindowText(hWnd, sbText, 256); - GetClassName(hWnd, sbClass, 256); - - Debug.WriteLine($"IsForegroundAppRunningInFullscreen: \"{sbText}\", \"{sbClass}\""); - Debug.WriteLine($" Styles: {windowStyles}"); - Debug.WriteLine($" Extended Styles: {extendedWindowStyles}"); - Debug.WriteLine($" Screen: {screenBounds} | Window: {windowRect} | Client area: {clientRect}"); - Debug.WriteLine($" => {isFullScreen}"); -#endif - - return isFullScreen; + bool isFullScreen = clientRect.Height == screenRect.Height && clientRect.Width == screenRect.Width; + bool isAVideogame = false; + + if (isFullScreen) + { + var processId = GetProcessFromWindowHandle(hWnd); + var modules = GetProcessModules(processId); + if (modules != null) + { + Regex regex_d3d = new Regex(@"(?:(?:d3d[0-9]+)|(?:dxgi))\.dll", RegexOptions.IgnoreCase); + + // ReSharper disable once LoopCanBeConvertedToQuery + foreach (var module in modules) + { + bool isDirectX = regex_d3d.Match(module.ModuleName).Success; + bool isOpenGL = module.ModuleName.Equals("opengl32.dll", StringComparison.InvariantCultureIgnoreCase); + if (isDirectX || isOpenGL) + { + isAVideogame = true; + break; + } + } + } + } + + return isFullScreen && isAVideogame; } } return false; } + private static uint GetProcessFromWindowHandle(IntPtr hWnd) + { + GetWindowThreadProcessId(hWnd, out uint pid); + return pid; + } + + private static IEnumerable GetProcessModules(uint processId) + { + if (processId == 0) + return null; + + var process = Process.GetProcessById((int)processId); + return process.Modules.Cast(); + } + /// /// Checks if a window is minimized. /// @@ -341,6 +339,82 @@ public static void SendPasteKey() #region Enums + internal enum ShowWindowCmd + { + /// + /// Hides the window and activates another window. + /// + SW_HIDE = 0, + + /// + /// Activates and displays a window. + /// If the window is minimized or maximized, the system restores it to its original size and position. + /// An application should specify this flag when displaying the window for the first time. + /// + SW_SHOWNORMAL = 1, + + /// + /// Activates the window and displays it as a minimized window. + /// + SW_SHOWMINIMIZED = 2, + + /// + /// Maximizes the specified window. + /// + SW_MAXIMIZE = 3, + + /// + /// Activates the window and displays it as a maximized window. + /// + SW_SHOWMAXIMIZED = SW_MAXIMIZE, + + /// + /// Displays a window in its most recent size and position. + /// This value is similar to , except that the window is not activated. + /// + SW_SHOWNOACTIVATE = 4, + + /// + /// Activates the window and displays it in its current size and position. + /// + SW_SHOW = 5, + + /// + /// Minimizes the specified window and activates the next top-level window in the Z order. + /// + SW_MINIMIZE = 6, + + /// + /// Displays the window as a minimized window. + /// This value is similar to , except the window is not activated. + /// + SW_SHOWMINNOACTIVE = 7, + + /// + /// Displays the window in its current size and position. + /// This value is similar to , except that the window is not activated. + /// + SW_SHOWNA = 8, + + /// + /// Activates and displays the window. + /// If the window is minimized or maximized, the system restores it to its original size and position. + /// An application should specify this flag when restoring a minimized window. + /// + SW_RESTORE = 9, + + /// + /// Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. + /// + SW_SHOWDEFAULT = 10, + + /// + /// Minimizes a window, even if the thread that owns the window is not responding. + /// This flag should only be used when minimizing windows from a different thread. + /// + SW_FORCEMINIMIZE = 11 + } + [Flags] internal enum SetWindowPosFlags : uint { @@ -549,23 +623,16 @@ internal struct WindowPlacement { public int length; public int flags; - public int showCmd; + public ShowWindowCmd showCmd; public Point ptMinPosition; public Point ptMaxPosition; public Rectangle rcNormalPosition; } // TODO: Create an enum out of these constants. - // See: ShowWindow function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx) // See: SendMessage function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx) internal class Constants { - internal const int SW_SHOWMINIMIZED = 2; - internal const int SW_SHOWNOACTIVATE = 4; - internal const int SW_SHOWMINNOACTIVE = 7; - internal const int SW_SHOW = 5; - internal const int SW_RESTORE = 9; - internal const int WM_CLOSE = 0x10; internal const int WM_QUIT = 0x12; } @@ -581,7 +648,7 @@ internal struct Rect public int Width { get { return this.right - this.left; } } public int Height { get { return this.bottom - this.top; } } - + public override string ToString() { return $"{{X={this.left},Y={this.top},Width={this.Width},Height={this.Height}}}"; From 6c8abf1ed3d5ab8f6a19f5ef2ae5a8eec8e35466 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Mon, 10 Jul 2017 01:52:55 +0200 Subject: [PATCH 063/452] Added option to disable Toast when running fullscreen videogames --- Toastify/src/Core/SettingsXml.cs | 18 ++++++++++ Toastify/src/UI/Settings.xaml | 58 +++++++++++++++++--------------- Toastify/src/UI/Toast.xaml.cs | 4 ++- 3 files changed, 51 insertions(+), 29 deletions(-) diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index ec02220d..109021b4 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -110,6 +110,7 @@ public string SettingsFile private bool _disableToast; private bool _onlyShowToastOnHotkey; + private bool _disableToastWithFullscreenVideogames; private int _fadeOutTime; private string _toastColorTop; private string _toastColorBottom; @@ -380,6 +381,22 @@ public bool OnlyShowToastOnHotkey } } + public bool DisableToastWithFullscreenVideogames + { + get + { + return this._disableToastWithFullscreenVideogames; + } + set + { + if (this._disableToastWithFullscreenVideogames != value) + { + this._disableToastWithFullscreenVideogames = value; + this.NotifyPropertyChanged("DisableToastWithFullscreenVideogames"); + } + } + } + public int FadeOutTime { get @@ -716,6 +733,7 @@ public void Default(bool setHotKeys = false) // [Toast] this.DisableToast = false; this.OnlyShowToastOnHotkey = true; + this.DisableToastWithFullscreenVideogames = true; this.FadeOutTime = 4000; this.ToastColorTop = "#FF000000"; diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index acaaf7cd..f197b308 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -98,34 +98,36 @@ Disable Toast Only Show Toast when Hotkey is pressed - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Disable Toast when a fullscreen videogame is running + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 1264f3bf..d9623302 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -441,7 +441,9 @@ private void FadeIn(bool force = false, bool isUpdate = false) { this.minimizeTimer?.Stop(); - bool doNotFadeIn = this.dragging || SettingsXml.Instance.DisableToast || (SettingsXml.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible); + bool doNotFadeIn = this.dragging || + (SettingsXml.Instance.DisableToast || (SettingsXml.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || + (SettingsXml.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); if (doNotFadeIn) return; From 591fa5c532107ea256f4c25736ad19857777ac8a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Mon, 10 Jul 2017 18:01:50 +0200 Subject: [PATCH 064/452] Re-added option to change system volume instead of just Spotify's (#5) --- Toastify/Toastify.csproj | 1 + Toastify/src/Core/SettingsXml.cs | 18 ++++++++++++ Toastify/src/Core/Spotify.cs | 26 ++++++++++++----- Toastify/src/Helpers/BoolAndConverter.cs | 20 +++++++++++++ Toastify/src/UI/Settings.xaml | 37 ++++++++++++++++-------- Toastify/src/Win32API.cs | 5 ++++ 6 files changed, 88 insertions(+), 19 deletions(-) create mode 100644 Toastify/src/Helpers/BoolAndConverter.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 5ae02b0b..e2cc0be3 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -130,6 +130,7 @@ + diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 109021b4..59acdd45 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -82,6 +82,7 @@ public string SettingsFile private bool _minimizeSpotifyOnStartup; private bool _closeSpotifyWithToastify; private bool _useSpotifyVolumeControl; + private bool _onlyChangeSpotifyVolumeInWindowsMixer; private float _windowsVolumeMixerIncrement; private string _clipboardTemplate; private bool _saveTrackToFile; @@ -210,6 +211,22 @@ public bool UseSpotifyVolumeControl } } + public bool OnlyChangeSpotifyVolumeInWindowsMixer + { + get + { + return this._onlyChangeSpotifyVolumeInWindowsMixer; + } + set + { + if (this._onlyChangeSpotifyVolumeInWindowsMixer != value) + { + this._onlyChangeSpotifyVolumeInWindowsMixer = value; + this.NotifyPropertyChanged("OnlyChangeSpotifyVolumeInWindowsMixer"); + } + } + } + public float WindowsVolumeMixerIncrement { get @@ -713,6 +730,7 @@ public void Default(bool setHotKeys = false) this.MinimizeSpotifyOnStartup = false; this.CloseSpotifyWithToastify = true; this.UseSpotifyVolumeControl = false; + this.OnlyChangeSpotifyVolumeInWindowsMixer = true; this.WindowsVolumeMixerIncrement = 2.0f; this.ClipboardTemplate = "I'm currently listening to {0}"; diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 689a02cd..dcf570b6 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -281,6 +281,8 @@ public void SendAction(SpotifyAction action) if (!this.IsRunning) return; + bool sendAppCommandMessage = false; + switch (action) { case SpotifyAction.CopyTrackInfo: @@ -309,28 +311,38 @@ public void SendAction(SpotifyAction action) Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); if (SettingsXml.Instance.UseSpotifyVolumeControl) this.SendShortcut(action); - else + else if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) this.localAPI.IncrementVolume(); - return; + else + sendAppCommandMessage = true; + break; case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); if (SettingsXml.Instance.UseSpotifyVolumeControl) this.SendShortcut(action); - else + else if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) this.localAPI.DecrementVolume(); - return; + else + sendAppCommandMessage = true; + break; case SpotifyAction.Mute: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - this.localAPI.ToggleMute(); - return; + if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) + this.localAPI.ToggleMute(); + else + sendAppCommandMessage = true; + break; default: Telemetry.TrackEvent(TelemetryCategory.Action, $"{Telemetry.TelemetryEvent.Action.Default}{action}"); - Win32API.SendMessage(this.GetMainWindowHandle(), (uint)Win32API.WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)action)); + sendAppCommandMessage = true; break; } + + if (sendAppCommandMessage) + Win32API.SendAppCommandMessage(this.GetMainWindowHandle(), (IntPtr)action); } /// diff --git a/Toastify/src/Helpers/BoolAndConverter.cs b/Toastify/src/Helpers/BoolAndConverter.cs new file mode 100644 index 00000000..4e8150cc --- /dev/null +++ b/Toastify/src/Helpers/BoolAndConverter.cs @@ -0,0 +1,20 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Windows.Data; + +namespace Toastify.Helpers +{ + public class BoolAndConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + return values.Aggregate(true, (current, value) => current && (bool)value); + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index f197b308..ffae9743 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -9,6 +9,7 @@ Title="Toastify - Settings" Height="560" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> + @@ -26,22 +27,34 @@ Minimize Spotify on launch Close Spotify when you close Toastify - Use Spotify volume control instead of the Windows volume mixer - - - - - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + Height="16" Grid.ColumnSpan="2" Grid.Column="0">Close Spotify when Toastify is closed + + Only change volume for Spotify in the Windows Volume Mixer + + + + + + + + + + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - Save Artist and Album to file when song changes (uses the clipboard template) - - Select File + Prevent the computer from sleeping while Spotify is playing - + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 8b5cfda6..8c3de21f 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -288,6 +288,11 @@ public static bool IsWindowMinimized(IntPtr hWnd, bool toTray = false) return false; } + public static bool SendAppCommandMessage(IntPtr hWnd, IntPtr lParam) + { + return SendMessage(hWnd, (uint) WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, lParam); + } + public static bool SendKeyDown(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) { const uint msg = (uint)WindowsMessagesFlags.WM_KEYDOWN; From 795999c992a17b7b2a4d033114be9ffbd011e85d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 01:19:00 +0200 Subject: [PATCH 065/452] Changed volume related settings All the volume control alternative options are now controlled by an enum value. --- Toastify/Toastify.csproj | 4 +- Toastify/src/Common/ComboBoxItemAttribute.cs | 24 +++++ Toastify/src/Common/EnumComboBoxItem.cs | 16 +++ Toastify/src/Core/SettingsXml.cs | 104 +++++++++++++++---- Toastify/src/Core/Spotify.cs | 54 +++++++--- Toastify/src/Helpers/BoolAndConverter.cs | 20 ---- Toastify/src/Helpers/Markup/EnumExtension.cs | 63 +++++++++++ Toastify/src/UI/Settings.xaml | 59 ++++------- Toastify/src/UI/Settings.xaml.cs | 15 ++- 9 files changed, 265 insertions(+), 94 deletions(-) create mode 100644 Toastify/src/Common/ComboBoxItemAttribute.cs create mode 100644 Toastify/src/Common/EnumComboBoxItem.cs delete mode 100644 Toastify/src/Helpers/BoolAndConverter.cs create mode 100644 Toastify/src/Helpers/Markup/EnumExtension.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index e2cc0be3..ac1c7701 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -121,6 +121,7 @@ MSBuild:Compile Designer + @@ -130,7 +131,8 @@ - + + diff --git a/Toastify/src/Common/ComboBoxItemAttribute.cs b/Toastify/src/Common/ComboBoxItemAttribute.cs new file mode 100644 index 00000000..12f652e9 --- /dev/null +++ b/Toastify/src/Common/ComboBoxItemAttribute.cs @@ -0,0 +1,24 @@ +using System; + +namespace Toastify.Common +{ + [AttributeUsage(AttributeTargets.Field)] + public class ComboBoxItemAttribute : Attribute + { + public static readonly ComboBoxItemAttribute Default = new ComboBoxItemAttribute(); + + public string Content { get; } + + public string Tooltip { get; } + + public ComboBoxItemAttribute() : this(null) + { + } + + public ComboBoxItemAttribute(string content, string tooltip = null) + { + this.Content = content; + this.Tooltip = tooltip; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Common/EnumComboBoxItem.cs b/Toastify/src/Common/EnumComboBoxItem.cs new file mode 100644 index 00000000..ef151b37 --- /dev/null +++ b/Toastify/src/Common/EnumComboBoxItem.cs @@ -0,0 +1,16 @@ +namespace Toastify.Common +{ + public class EnumComboBoxItem + { + public object Value { get; set; } + public string Description { get; set; } + public string Tooltip { get; set; } + + public EnumComboBoxItem(object value, string description, string tooltip = null) + { + this.Value = value; + this.Description = string.IsNullOrWhiteSpace(description) ? value.ToString() : description; + this.Tooltip = tooltip; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 59acdd45..11ecd93f 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -2,8 +2,10 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.IO; using System.Linq; +using System.Xml; using System.Xml.Serialization; using Toastify.Common; using Toastify.Helpers; @@ -39,8 +41,25 @@ private set private const string REG_KEY_STARTUP = @"Software\Microsoft\Windows\CurrentVersion\Run"; private const string SETTINGS_FILE = "Toastify.xml"; + private XmlSerializer _xmlSerializer; private string _settingsFile; + [XmlIgnore] + public XmlSerializer XmlSerializer + { + get + { + if (this._xmlSerializer == null) + { + this._xmlSerializer = new XmlSerializer(typeof(SettingsXml)); + this._xmlSerializer.UnknownAttribute += this.XmlSerializer_UnknownAttribute; + this._xmlSerializer.UnknownElement += this.XmlSerializer_UnknownElement; + this._xmlSerializer.UnknownNode += this.XmlSerializer_UnknownNode; + } + return this._xmlSerializer; + } + } + /// /// Returns the location of the settings file /// @@ -61,7 +80,7 @@ public string SettingsFile } catch (Exception ex) { - System.Diagnostics.Debug.WriteLine("Exception creating user settings directory (" + settingsPath + "). Exception: " + ex); + Debug.WriteLine("Exception creating user settings directory (" + settingsPath + "). Exception: " + ex); // No messagebox as this should not happen (and there will be a MessageBox later on when // settings fail to load) @@ -81,8 +100,8 @@ public string SettingsFile private bool _minimizeSpotifyOnStartup; private bool _closeSpotifyWithToastify; + private ToastifyVolumeControlMode _volumeControlMode; private bool _useSpotifyVolumeControl; - private bool _onlyChangeSpotifyVolumeInWindowsMixer; private float _windowsVolumeMixerIncrement; private string _clipboardTemplate; private bool _saveTrackToFile; @@ -195,34 +214,35 @@ public bool CloseSpotifyWithToastify } } - public bool UseSpotifyVolumeControl + public ToastifyVolumeControlMode VolumeControlMode { get { - return this._useSpotifyVolumeControl; + return this._volumeControlMode; } set { - if (this._useSpotifyVolumeControl != value) + if (this._volumeControlMode != value) { - this._useSpotifyVolumeControl = value; - this.NotifyPropertyChanged("UseSpotifyVolumeControl"); + this._volumeControlMode = value; + this.NotifyPropertyChanged("VolumeControlMode"); } } } - public bool OnlyChangeSpotifyVolumeInWindowsMixer + [Obsolete("UseSpotifyVolumeControl is obsolete and will be removed in the future. Use VolumeControlMode instead.")] + public bool UseSpotifyVolumeControl { get { - return this._onlyChangeSpotifyVolumeInWindowsMixer; + return this._useSpotifyVolumeControl; } set { - if (this._onlyChangeSpotifyVolumeInWindowsMixer != value) + if (this._useSpotifyVolumeControl != value) { - this._onlyChangeSpotifyVolumeInWindowsMixer = value; - this.NotifyPropertyChanged("OnlyChangeSpotifyVolumeInWindowsMixer"); + this._useSpotifyVolumeControl = value; + this.NotifyPropertyChanged("UseSpotifyVolumeControl"); } } } @@ -729,8 +749,7 @@ public void Default(bool setHotKeys = false) // [General] this.MinimizeSpotifyOnStartup = false; this.CloseSpotifyWithToastify = true; - this.UseSpotifyVolumeControl = false; - this.OnlyChangeSpotifyVolumeInWindowsMixer = true; + this.VolumeControlMode = ToastifyVolumeControlMode.SystemSpotifyOnly; this.WindowsVolumeMixerIncrement = 2.0f; this.ClipboardTemplate = "I'm currently listening to {0}"; @@ -791,8 +810,7 @@ public void Save(bool replaceCurrent = false) { using (StreamWriter sw = new StreamWriter(this.SettingsFile, false)) { - XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); - xmlSerializer.Serialize(sw, this); + this.XmlSerializer.Serialize(sw, this); } if (replaceCurrent) @@ -810,8 +828,7 @@ public SettingsXml Load() { using (StreamReader sr = new StreamReader(this.SettingsFile)) { - XmlSerializer xmlSerializer = new XmlSerializer(typeof(SettingsXml)); - SettingsXml xml = xmlSerializer.Deserialize(sr) as SettingsXml; + SettingsXml xml = this.XmlSerializer.Deserialize(sr) as SettingsXml; xml?.CheckForNewSettings(); @@ -934,6 +951,35 @@ private void NotifyPropertyChanged(string info) } #endregion INotifyPropertyChanged + + #region XmlSerializer event handlers + + private void XmlSerializer_UnknownAttribute(object sender, XmlAttributeEventArgs e) + { + Debug.WriteLine($"XmlSerializer_UnknownAttribute: {e.Attr.LocalName} = \"{e.Attr.Value}\""); + } + + private void XmlSerializer_UnknownElement(object sender, XmlElementEventArgs e) + { + switch (e.Element.LocalName) + { + case "UseSpotifyVolumeControl": + bool value; + bool.TryParse(e.Element.InnerText, out value); + this.VolumeControlMode = value ? ToastifyVolumeControlMode.Spotify : ToastifyVolumeControlMode.SystemSpotifyOnly; + break; + } + } + + private void XmlSerializer_UnknownNode(object sender, XmlNodeEventArgs e) + { + if (e.NodeType == XmlNodeType.Attribute || e.NodeType == XmlNodeType.Element) + return; + + Debug.WriteLine($"XmlSerializer_UnknownNode: {e.LocalName} = \"{e.Text}\""); + } + + #endregion XmlSerializer event handlers } [Serializable] @@ -943,4 +989,26 @@ public class PluginDetails public string TypeName { get; set; } public string Settings { get; set; } } + + [Flags] + public enum ToastifyVolumeControlMode + { + /// + /// The volume will changed only inside Spotify. + /// + [ComboBoxItem("Spotify", "Use Spotify's volume control.")] + Spotify = 1, + + /// + /// The volume will be changed in the WindowsVolumeMixer and will affect system volume. + /// + [ComboBoxItem("Windows Volume Mixer (device)", "Use the Windows Volume Mixer.\nThis affects the global system volume.")] + SystemGlobal = 1 << 1, + + /// + /// The volume will be changed in the WindowsVolumeMixer and will affect just Spotify. + /// + [ComboBoxItem("Windows Volume Mixer (Spotify)", "Use the Windows Volume Mixer.\nThis only affects Spotify's volume.")] + SystemSpotifyOnly = SystemGlobal | Spotify + } } \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index dcf570b6..d7b788a9 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -309,30 +309,52 @@ public void SendAction(SpotifyAction action) case SpotifyAction.VolumeUp: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - if (SettingsXml.Instance.UseSpotifyVolumeControl) - this.SendShortcut(action); - else if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) - this.localAPI.IncrementVolume(); - else - sendAppCommandMessage = true; + switch (SettingsXml.Instance.VolumeControlMode) + { + case ToastifyVolumeControlMode.Spotify: + this.SendShortcut(action); + break; + + case ToastifyVolumeControlMode.SystemSpotifyOnly: + this.localAPI.IncrementVolume(); + break; + + default: + sendAppCommandMessage = true; + break; + } break; case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - if (SettingsXml.Instance.UseSpotifyVolumeControl) - this.SendShortcut(action); - else if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) - this.localAPI.DecrementVolume(); - else - sendAppCommandMessage = true; + switch (SettingsXml.Instance.VolumeControlMode) + { + case ToastifyVolumeControlMode.Spotify: + this.SendShortcut(action); + break; + + case ToastifyVolumeControlMode.SystemSpotifyOnly: + this.localAPI.DecrementVolume(); + break; + + default: + sendAppCommandMessage = true; + break; + } break; case SpotifyAction.Mute: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - if (SettingsXml.Instance.OnlyChangeSpotifyVolumeInWindowsMixer) - this.localAPI.ToggleMute(); - else - sendAppCommandMessage = true; + switch (SettingsXml.Instance.VolumeControlMode) + { + case ToastifyVolumeControlMode.SystemSpotifyOnly: + this.localAPI.ToggleMute(); + break; + + default: + sendAppCommandMessage = true; + break; + } break; default: diff --git a/Toastify/src/Helpers/BoolAndConverter.cs b/Toastify/src/Helpers/BoolAndConverter.cs deleted file mode 100644 index 4e8150cc..00000000 --- a/Toastify/src/Helpers/BoolAndConverter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Globalization; -using System.Linq; -using System.Windows.Data; - -namespace Toastify.Helpers -{ - public class BoolAndConverter : IMultiValueConverter - { - public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) - { - return values.Aggregate(true, (current, value) => current && (bool)value); - } - - public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) - { - throw new NotSupportedException(); - } - } -} \ No newline at end of file diff --git a/Toastify/src/Helpers/Markup/EnumExtension.cs b/Toastify/src/Helpers/Markup/EnumExtension.cs new file mode 100644 index 00000000..f7b862c8 --- /dev/null +++ b/Toastify/src/Helpers/Markup/EnumExtension.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Data; +using System.Windows.Markup; +using Toastify.Common; + +namespace Toastify.Helpers.Markup +{ + [ValueConversion(typeof(Type), typeof(IEnumerable))] + public class EnumExtension : MarkupExtension + { + private Type _enumType; + + public Type EnumType + { + get + { + return this._enumType; + } + private set + { + if (this._enumType == value) + return; + + var enumType = Nullable.GetUnderlyingType(value) ?? value; + + if (enumType.IsEnum == false) + throw new ArgumentException("Type must be an Enum."); + + this._enumType = value; + } + } + + public EnumExtension(Type enumType) + { + this.EnumType = enumType ?? throw new ArgumentNullException(nameof(enumType)); + } + + public override object ProvideValue(IServiceProvider serviceProvider) + { + var enumValues = Enum.GetValues(this.EnumType); + var enumMembers = from object enumValue in enumValues + let tuple = this.GetDescriptionAndTooltip(enumValue) + select new EnumComboBoxItem(enumValue, tuple.Item1, tuple.Item2); + + return enumMembers; + } + + private Tuple GetDescriptionAndTooltip(object enumValue) + { + Type tEnum = enumValue.GetType(); + string sEnum = enumValue.ToString(); + var comboBoxItemAttributes = tEnum.GetField(sEnum).GetCustomAttributes(typeof(ComboBoxItemAttribute), false); + + var attribute = comboBoxItemAttributes.Any() + ? (ComboBoxItemAttribute)comboBoxItemAttributes.First() + : new ComboBoxItemAttribute(sEnum); + + return new Tuple(attribute.Content, attribute.Tooltip); + } + } +} \ No newline at end of file diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index ffae9743..de52e01a 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -2,14 +2,15 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:common="clr-namespace:Toastify.Common" xmlns:core="clr-namespace:Toastify.Core" xmlns:helpers="clr-namespace:Toastify.Helpers" + xmlns:markup="clr-namespace:Toastify.Helpers.Markup" mc:Ignorable="d" x:Class="Toastify.UI.Settings" Title="Toastify - Settings" Height="560" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> - @@ -28,33 +29,34 @@ Height="16" Grid.ColumnSpan="2" Grid.Column="0">Minimize Spotify on launch Close Spotify when Toastify is closed - - Only change volume for Spotify in the Windows Volume Mixer - - - - - - - + + + + + + + + + + + - - - - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - Save Artist and Album to file when song changes (uses the clipboard template) - - Select File + Prevent the computer from sleeping while Spotify is playing - + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. @@ -187,18 +189,3 @@ - - - - - - - - - - - - - - - diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/UI/Settings.xaml.cs index a5757469..180db970 100644 --- a/Toastify/src/UI/Settings.xaml.cs +++ b/Toastify/src/UI/Settings.xaml.cs @@ -1,8 +1,8 @@ using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Globalization; +using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Forms; @@ -21,8 +21,6 @@ public partial class Settings : Window public SettingsXml settings; private readonly Toast toast; - private List modifierKeys = new List { Key.LeftCtrl, Key.RightCtrl, Key.LeftAlt, Key.Right, Key.LeftShift, Key.RightShift, Key.LWin, Key.RWin, Key.System }; - public WindowStartupLocation StartupLocation { get @@ -139,6 +137,17 @@ private void BtnSave_Click(object sender, RoutedEventArgs e) #region "General" tab + private void ComboVolumeControlMode_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + var currentItems = e.AddedItems.Cast() + .Select(it => (ToastifyVolumeControlMode)it.Value).ToList(); + if (!currentItems.Any()) + return; + + var current = currentItems.First(); + this.PanelWindowsMixerIncrement.IsEnabled = current == ToastifyVolumeControlMode.SystemSpotifyOnly; + } + private void BtnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog(); From cc881c6ad1f971a59c5841429b95aad77183c378 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 02:28:38 +0200 Subject: [PATCH 066/452] Modified Settings window layout --- Toastify/src/UI/Settings.xaml | 148 ++++++++++++++++++---------------- 1 file changed, 77 insertions(+), 71 deletions(-) diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/UI/Settings.xaml index de52e01a..08d61102 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/UI/Settings.xaml @@ -19,21 +19,14 @@ - - - - - Launch Toastify with Windows - Minimize Spotify on launch - Close Spotify when Toastify is closed - + Launch Toastify with Windows + Minimize Spotify on launch + Close Spotify when Toastify is closed + + SelectedValue="{Binding Path=VolumeControlMode, Mode=TwoWay}" SelectedValuePath="Value" Width="210"> @@ -41,77 +34,91 @@ - + - - - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - - - Save Artist and Album to file when song changes (uses the clipboard template) - - Prevent the computer from sleeping while Spotify is playing - + + + + + + + + + + + + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + + + Save Artist and Album to file when song changes (uses the clipboard template) + + Prevent the computer from sleeping while Spotify is playing + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. + + + + + + - - - - - - Enable Global Hotkeys - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Enable Global Hotkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disable Toast - + Only Show Toast when Hotkey is pressed Disable Toast when a fullscreen videogame is running @@ -184,8 +191,7 @@ - - - + + From 5211f55d1238d53b91fbae141381c6916f30336a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 02:43:47 +0200 Subject: [PATCH 067/452] Minor changes in Win32API --- Toastify/src/Core/Spotify.cs | 8 ++++---- Toastify/src/Win32API.cs | 38 +++++++++++++++++------------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index d7b788a9..6e596c82 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -429,17 +429,17 @@ private void SendShortcut(SpotifyAction action) // WM_INITMENU: select menu IntPtr hMenu = Win32API.GetMenu(mainWindow); - Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_INITMENU, hMenu, IntPtr.Zero); + Win32API.SendWindowMessage(mainWindow, Win32API.WindowsMessagesFlags.WM_INITMENU, hMenu, IntPtr.Zero); // WM_INITMENUPOPUP: select sub-menu ('Playback') IntPtr hSubMenu = Win32API.GetSubMenu(hMenu, subMenuPos); - Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_INITMENUPOPUP, hSubMenu, (IntPtr)subMenuPos); + Win32API.SendWindowMessage(mainWindow, Win32API.WindowsMessagesFlags.WM_INITMENUPOPUP, hSubMenu, (IntPtr)subMenuPos); // WM_COMMAND: accelerator keystroke (shortcut) - Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_COMMAND, (IntPtr)(0x00010000 | (baseAcceleratorId + menuItemPos)), IntPtr.Zero); + Win32API.SendWindowMessage(mainWindow, Win32API.WindowsMessagesFlags.WM_COMMAND, (IntPtr)(0x00010000 | (baseAcceleratorId + menuItemPos)), IntPtr.Zero); // WM_UNINITMENUPOPUP: destroy the sub-menu - Win32API.SendMessage(mainWindow, (uint)Win32API.WindowsMessagesFlags.WM_UNINITMENUPOPUP, hSubMenu, IntPtr.Zero); + Win32API.SendWindowMessage(mainWindow, Win32API.WindowsMessagesFlags.WM_UNINITMENUPOPUP, hSubMenu, IntPtr.Zero); // The following message is not needed: it will be sent automatically by to the main window to notify the event (to change the UI?). // WM_COMMAND: notification that the keystroke has been translated diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 8c3de21f..edb4bc08 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -80,9 +80,6 @@ internal static class Win32API [DllImport("user32.dll")] private static extern IntPtr GetShellWindow(); - [DllImport("user32.dll", SetLastError = true)] - private static extern int GetWindowRect(IntPtr hwnd, out Rect rc); - [DllImport("user32.dll")] private static extern bool GetClientRect(IntPtr hWnd, out Rect lpRect); @@ -164,8 +161,8 @@ public static void KillProc(string name) // Essentially: Find every hWnd associated with this process and ask it to go away if (processId == (uint)lParam) { - SendMessage(hWnd, (uint)Constants.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); - SendMessage(hWnd, (uint)Constants.WM_QUIT, IntPtr.Zero, IntPtr.Zero); + SendWindowMessage(hWnd, WindowsMessagesFlags.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + SendWindowMessage(hWnd, WindowsMessagesFlags.WM_QUIT, IntPtr.Zero, IntPtr.Zero); } return true; @@ -288,27 +285,32 @@ public static bool IsWindowMinimized(IntPtr hWnd, bool toTray = false) return false; } - public static bool SendAppCommandMessage(IntPtr hWnd, IntPtr lParam) + public static bool SendWindowMessage(IntPtr hWnd, WindowsMessagesFlags msg, IntPtr wParam, IntPtr lParam, bool postMessage = false) + { + return postMessage ? PostMessage(hWnd, (uint)msg, wParam, lParam) : SendMessage(hWnd, (uint)msg, wParam, lParam); + } + + public static bool SendAppCommandMessage(IntPtr hWnd, IntPtr lParam, bool postMessage = false) { - return SendMessage(hWnd, (uint) WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, lParam); + return SendWindowMessage(hWnd, WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, lParam, postMessage); } public static bool SendKeyDown(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) { - const uint msg = (uint)WindowsMessagesFlags.WM_KEYDOWN; + const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYDOWN; IntPtr wParam = (IntPtr)key.GetVirtualKey(); IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0)); - return postMessage ? PostMessage(hWnd, msg, wParam, lParam) : SendMessage(hWnd, msg, wParam, lParam); + return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); } public static bool SendKeyUp(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) { - const uint msg = (uint)WindowsMessagesFlags.WM_KEYUP; + const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYUP; IntPtr wParam = (IntPtr)key.GetVirtualKey(); IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0), previousState: 1, transitionState: 1); - return postMessage ? PostMessage(hWnd, msg, wParam, lParam) : SendMessage(hWnd, msg, wParam, lParam); + return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); } public static void SendPasteKey() @@ -590,8 +592,12 @@ internal enum ExecutionStateFlags : uint } [Flags] - internal enum WindowsMessagesFlags + internal enum WindowsMessagesFlags : uint { + // Window Messages & Notifications + WM_CLOSE = 0x0010, + WM_QUIT = 0x0012, + // Keyboard Input Messages & Notifications WM_KEYDOWN = 0x0100, WM_KEYUP = 0x0101, @@ -634,14 +640,6 @@ internal struct WindowPlacement public Rectangle rcNormalPosition; } - // TODO: Create an enum out of these constants. - // See: SendMessage function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx) - internal class Constants - { - internal const int WM_CLOSE = 0x10; - internal const int WM_QUIT = 0x12; - } - [StructLayout(LayoutKind.Sequential)] internal struct Rect { From b07eac87e3f1831d9b6a063da18d916d7b55f53f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 13:38:42 +0200 Subject: [PATCH 068/452] Minor changes to the Toast window --- Toastify/src/UI/Toast.xaml | 43 ++++++++++++++++++++--------------- Toastify/src/UI/Toast.xaml.cs | 7 ++---- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/UI/Toast.xaml index 7bfd7d6d..5cda2131 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -1,51 +1,58 @@ - + - - + + - - + - - + + + + - + - - + + + + + Paramore - Si Begg + Let The Flames Begin diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index d9623302..661fe358 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -141,11 +141,8 @@ public void InitToast() //This method is UGLY but we'll keep it until the settings dialog is implemented. SettingsXml settings = SettingsXml.Instance; - double minWidth = this.MinWidth > 0.0 ? this.MinWidth : 200.0; - double minHeight = this.MinHeight > 0.0 ? this.MinHeight : 65.0; - - this.Width = settings.ToastWidth >= minWidth ? settings.ToastWidth : minWidth; - this.Height = settings.ToastHeight >= minHeight ? settings.ToastHeight : minHeight; + this.Width = settings.ToastWidth >= this.MinWidth ? settings.ToastWidth : this.MinWidth; + this.Height = settings.ToastHeight >= this.MinHeight ? settings.ToastHeight : this.MinHeight; this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); ColorConverter cc = new ColorConverter(); From 7a0624b46b799d53d51d570d5f92c3f639187e7c Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 15:09:00 +0200 Subject: [PATCH 069/452] Use nameof operator in NotifyPropertyChanged --- Toastify/src/Core/HotKey.cs | 18 ++++----- Toastify/src/Core/SettingsXml.cs | 66 ++++++++++++++++---------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Core/HotKey.cs index 946b2d7c..fe309a43 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Core/HotKey.cs @@ -51,7 +51,7 @@ public SpotifyAction Action if (this._action != value) { this._action = value; - this.NotifyPropertyChanged("Action", false); + this.NotifyPropertyChanged(nameof(this.Action), false); } } } @@ -76,7 +76,7 @@ public bool Enabled if (this._enabled != value) { this._enabled = value; - this.NotifyPropertyChanged("Enabled", false); + this.NotifyPropertyChanged(nameof(this.Enabled), false); } } } @@ -92,7 +92,7 @@ public bool Shift if (this._shift != value) { this._shift = value; - this.NotifyPropertyChanged("Shift"); + this.NotifyPropertyChanged(nameof(this.Shift)); } } } @@ -108,7 +108,7 @@ public bool Ctrl if (this._ctrl != value) { this._ctrl = value; - this.NotifyPropertyChanged("Ctrl"); + this.NotifyPropertyChanged(nameof(this.Ctrl)); } } } @@ -124,7 +124,7 @@ public bool Alt if (this._alt != value) { this._alt = value; - this.NotifyPropertyChanged("Alt"); + this.NotifyPropertyChanged(nameof(this.Alt)); } } } @@ -140,7 +140,7 @@ public bool WindowsKey if (this._windowsKey != value) { this._windowsKey = value; - this.NotifyPropertyChanged("WindowsKey"); + this.NotifyPropertyChanged(nameof(this.WindowsKey)); } } } @@ -156,7 +156,7 @@ public Key Key if (this._key != value) { this._key = value; - this.NotifyPropertyChanged("Key"); + this.NotifyPropertyChanged(nameof(this.Key)); } } } @@ -248,7 +248,7 @@ public bool IsValid if (this._isValid != value) { this._isValid = value; - this.NotifyPropertyChanged("IsValid", false); + this.NotifyPropertyChanged(nameof(this.IsValid), false); } } } @@ -265,7 +265,7 @@ public string InvalidReason if (this._invalidReason != value) { this._invalidReason = value; - this.NotifyPropertyChanged("InvalidReason", false); + this.NotifyPropertyChanged(nameof(this.InvalidReason), false); } } } diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Core/SettingsXml.cs index 11ecd93f..c9aef2c6 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Core/SettingsXml.cs @@ -178,7 +178,7 @@ public bool LaunchOnStartup key?.DeleteValue("Toastify", false); } - this.NotifyPropertyChanged("LaunchOnStartup"); + this.NotifyPropertyChanged(nameof(this.LaunchOnStartup)); } } @@ -193,7 +193,7 @@ public bool MinimizeSpotifyOnStartup if (this._minimizeSpotifyOnStartup != value) { this._minimizeSpotifyOnStartup = value; - this.NotifyPropertyChanged("MinimizeSpotifyOnStartup"); + this.NotifyPropertyChanged(nameof(this.MinimizeSpotifyOnStartup)); } } } @@ -209,7 +209,7 @@ public bool CloseSpotifyWithToastify if (this._closeSpotifyWithToastify != value) { this._closeSpotifyWithToastify = value; - this.NotifyPropertyChanged("CloseSpotifyWithToastify"); + this.NotifyPropertyChanged(nameof(this.CloseSpotifyWithToastify)); } } } @@ -225,7 +225,7 @@ public ToastifyVolumeControlMode VolumeControlMode if (this._volumeControlMode != value) { this._volumeControlMode = value; - this.NotifyPropertyChanged("VolumeControlMode"); + this.NotifyPropertyChanged(nameof(this.VolumeControlMode)); } } } @@ -242,7 +242,7 @@ public bool UseSpotifyVolumeControl if (this._useSpotifyVolumeControl != value) { this._useSpotifyVolumeControl = value; - this.NotifyPropertyChanged("UseSpotifyVolumeControl"); + this.NotifyPropertyChanged(nameof(this.UseSpotifyVolumeControl)); } } } @@ -258,7 +258,7 @@ public float WindowsVolumeMixerIncrement if (Math.Abs(this._windowsVolumeMixerIncrement - value) > 0.000001f) { this._windowsVolumeMixerIncrement = value; - this.NotifyPropertyChanged("WindowsVolumeMixerIncrement"); + this.NotifyPropertyChanged(nameof(this.WindowsVolumeMixerIncrement)); } } } @@ -274,7 +274,7 @@ public string ClipboardTemplate if (this._clipboardTemplate != value) { this._clipboardTemplate = value; - this.NotifyPropertyChanged("ClipboardTemplate"); + this.NotifyPropertyChanged(nameof(this.ClipboardTemplate)); } } } @@ -290,7 +290,7 @@ public bool SaveTrackToFile if (this._saveTrackToFile != value) { this._saveTrackToFile = value; - this.NotifyPropertyChanged("SaveTrackToFile"); + this.NotifyPropertyChanged(nameof(this.SaveTrackToFile)); } } } @@ -306,7 +306,7 @@ public string SaveTrackToFilePath if (this._saveTrackToFilePath != value) { this._saveTrackToFilePath = value; - this.NotifyPropertyChanged("SaveTrackToFilePath"); + this.NotifyPropertyChanged(nameof(this.SaveTrackToFilePath)); } } } @@ -322,7 +322,7 @@ public bool PreventSleepWhilePlaying if (this._preventSleepWhilePlaying != value) { this._preventSleepWhilePlaying = value; - this.NotifyPropertyChanged("PreventSleepWhilePlaying"); + this.NotifyPropertyChanged(nameof(this.PreventSleepWhilePlaying)); } } } @@ -338,7 +338,7 @@ public bool OptInToAnalytics if (this._optInToAnalytics != value) { this._optInToAnalytics = value; - this.NotifyPropertyChanged("OptInToAnalytics"); + this.NotifyPropertyChanged(nameof(this.OptInToAnalytics)); } } } @@ -358,7 +358,7 @@ public bool GlobalHotKeys if (this._globalHotKeys != value) { this._globalHotKeys = value; - this.NotifyPropertyChanged("GlobalHotKeys"); + this.NotifyPropertyChanged(nameof(this.GlobalHotKeys)); } } } @@ -374,7 +374,7 @@ public List HotKeys if (this._hotKeys != value) { this._hotKeys = value; - this.NotifyPropertyChanged("HotKeys"); + this.NotifyPropertyChanged(nameof(this.HotKeys)); } } } @@ -394,7 +394,7 @@ public bool DisableToast if (this._disableToast != value) { this._disableToast = value; - this.NotifyPropertyChanged("DisableToast"); + this.NotifyPropertyChanged(nameof(this.DisableToast)); } } } @@ -413,7 +413,7 @@ public bool OnlyShowToastOnHotkey if (this._onlyShowToastOnHotkey != value) { this._onlyShowToastOnHotkey = value; - this.NotifyPropertyChanged("OnlyShowToastOnHotkey"); + this.NotifyPropertyChanged(nameof(this.OnlyShowToastOnHotkey)); } } } @@ -429,7 +429,7 @@ public bool DisableToastWithFullscreenVideogames if (this._disableToastWithFullscreenVideogames != value) { this._disableToastWithFullscreenVideogames = value; - this.NotifyPropertyChanged("DisableToastWithFullscreenVideogames"); + this.NotifyPropertyChanged(nameof(this.DisableToastWithFullscreenVideogames)); } } } @@ -445,7 +445,7 @@ public int FadeOutTime if (this._fadeOutTime != value) { this._fadeOutTime = value; - this.NotifyPropertyChanged("FadeOutTime"); + this.NotifyPropertyChanged(nameof(this.FadeOutTime)); } } } @@ -461,7 +461,7 @@ public string ToastColorTop if (this._toastColorTop != value) { this._toastColorTop = value; - this.NotifyPropertyChanged("ToastColorTop"); + this.NotifyPropertyChanged(nameof(this.ToastColorTop)); } } } @@ -477,7 +477,7 @@ public string ToastColorBottom if (this._toastColorBottom != value) { this._toastColorBottom = value; - this.NotifyPropertyChanged("ToastColorBottom"); + this.NotifyPropertyChanged(nameof(this.ToastColorBottom)); } } } @@ -493,7 +493,7 @@ public string ToastBorderColor if (this._toastBorderColor != value) { this._toastBorderColor = value; - this.NotifyPropertyChanged("ToastBorderColor"); + this.NotifyPropertyChanged(nameof(this.ToastBorderColor)); } } } @@ -512,7 +512,7 @@ public double ToastBorderThickness if (Math.Abs(this._toastBorderThickness - value) > double.Epsilon) { this._toastBorderThickness = value; - this.NotifyPropertyChanged("ToastBorderThickness"); + this.NotifyPropertyChanged(nameof(this.ToastBorderThickness)); } } } @@ -531,7 +531,7 @@ public double ToastBorderCornerRadiusTopLeft if (Math.Abs(this._toastBorderCornerRadiusTopLeft - value) > double.Epsilon) { this._toastBorderCornerRadiusTopLeft = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusTopLeft"); + this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusTopLeft)); } } } @@ -550,7 +550,7 @@ public double ToastBorderCornerRadiusTopRight if (Math.Abs(this._toastBorderCornerRadiusTopRight - value) > double.Epsilon) { this._toastBorderCornerRadiusTopRight = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusTopRight"); + this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusTopRight)); } } } @@ -569,7 +569,7 @@ public double ToastBorderCornerRadiusBottomLeft if (Math.Abs(this._toastBorderCornerRadiusBottomLeft - value) > double.Epsilon) { this._toastBorderCornerRadiusBottomLeft = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomLeft"); + this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusBottomLeft)); } } } @@ -588,7 +588,7 @@ public double ToastBorderCornerRadiusBottomRight if (Math.Abs(this._toastBorderCornerRadiusBottomRight - value) > double.Epsilon) { this._toastBorderCornerRadiusBottomRight = value; - this.NotifyPropertyChanged("ToastBorderCornerRadiusBottomRight"); + this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusBottomRight)); } } } @@ -607,7 +607,7 @@ public double ToastWidth if (Math.Abs(this._toastWidth - value) > double.Epsilon) { this._toastWidth = value; - this.NotifyPropertyChanged("ToastWidth"); + this.NotifyPropertyChanged(nameof(this.ToastWidth)); } } } @@ -626,7 +626,7 @@ public double ToastHeight if (Math.Abs(this._toastHeight - value) > double.Epsilon) { this._toastHeight = value; - this.NotifyPropertyChanged("ToastHeight"); + this.NotifyPropertyChanged(nameof(this.ToastHeight)); } } } @@ -642,7 +642,7 @@ public double PositionLeft if (Math.Abs(this._positionLeft - value) > double.Epsilon) { this._positionLeft = value; - this.NotifyPropertyChanged("PositionLeft"); + this.NotifyPropertyChanged(nameof(this.PositionLeft)); } } } @@ -658,7 +658,7 @@ public double PositionTop if (Math.Abs(this._positionTop - value) > double.Epsilon) { this._positionTop = value; - this.NotifyPropertyChanged("PositionTop"); + this.NotifyPropertyChanged(nameof(this.PositionTop)); } } } @@ -678,7 +678,7 @@ public bool FirstRun if (this._firstRun != value) { this._firstRun = value; - this.NotifyPropertyChanged("FirstRun"); + this.NotifyPropertyChanged(nameof(this.FirstRun)); } } } @@ -694,7 +694,7 @@ public string PreviousVersion if (this._previousVersion != value) { this._previousVersion = value; - this.NotifyPropertyChanged("PreviousVersion"); + this.NotifyPropertyChanged(nameof(this.PreviousVersion)); } } } @@ -710,7 +710,7 @@ public int StartupWaitTimeout if (this._startupWaitTimeout != value) { this._startupWaitTimeout = value; - this.NotifyPropertyChanged("StartupWaitTimeout"); + this.NotifyPropertyChanged(nameof(this.StartupWaitTimeout)); } } } @@ -726,7 +726,7 @@ public int SpotifyConnectionAttempts if (this._spotifyConnectionAttempts != value) { this._spotifyConnectionAttempts = value; - this.NotifyPropertyChanged("SpotifyConnectionAttempts"); + this.NotifyPropertyChanged(nameof(this.SpotifyConnectionAttempts)); } } } From b603d52e35dc5195a1b3bfb76831502991b2c145 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 16:53:25 +0200 Subject: [PATCH 070/452] Fixed cover art not updating --- Toastify/src/UI/Toast.xaml.cs | 67 +++++++++++++++++------------------ 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 661fe358..749b953e 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -298,7 +298,7 @@ private void UpdateCurrentSong(Song song) { this.currentSong = song; - this.UpdateCoverArtUrl(); + this.UpdateCoverArt(); this.UpdateToastText(this.currentSong); // Save track info to file. @@ -319,59 +319,58 @@ private void UpdateCurrentSong(Song song) } } - private void UpdateCoverArtUrl() + private void UpdateCoverArt(bool forceUpdate = false) { - if (this.currentSong == null) - this.toastIconURI = DEFAULT_ICON; - else - { - if (string.IsNullOrWhiteSpace(this.currentSong.Track)) - { - this.currentSong.CoverArtUrl = AD_PLAYING_ICON; - this.currentSong.Track = "Spotify Ad"; - } - else if (string.IsNullOrWhiteSpace(this.currentSong?.CoverArtUrl)) - this.currentSong.CoverArtUrl = DEFAULT_ICON; - - this.toastIconURI = this.currentSong.CoverArtUrl; - } - } + // Get new CoverArtUrl. + string previousURI = this.toastIconURI; + this.UpdateCoverArtUrl(); - private void UpdateCoverArt() - { - if (!string.IsNullOrEmpty(this.toastIconURI)) + // Update the cover art only if the url has changed. + if (!string.IsNullOrEmpty(this.toastIconURI) && (forceUpdate || this.toastIconURI != previousURI)) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); try { - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); this.cover.UriSource = new Uri(this.toastIconURI, UriKind.RelativeOrAbsolute); - this.cover.EndInit(); } - catch (Exception e) + catch (UriFormatException e) { Debug.WriteLine(e.Message); - - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); - this.cover.EndInit(); } finally { + this.cover.EndInit(); this.LogoToast.Source = this.cover; } })); } } + private void UpdateCoverArtUrl() + { + if (this.currentSong == null) + this.toastIconURI = DEFAULT_ICON; + else + { + if (string.IsNullOrWhiteSpace(this.currentSong.Track)) + { + this.currentSong.CoverArtUrl = AD_PLAYING_ICON; + this.currentSong.Track = "Spotify Ad"; + } + else if (string.IsNullOrWhiteSpace(this.currentSong?.CoverArtUrl)) + this.currentSong.CoverArtUrl = DEFAULT_ICON; + + this.toastIconURI = this.currentSong.CoverArtUrl; + } + } + /// /// Update the toast's text using the songs' information. /// @@ -427,7 +426,7 @@ private void ShowToast(bool shallBeVisible) if (shallBeVisible) { - this.UpdateCoverArt(); + this.UpdateCoverArt(true); this.Left = SettingsXml.Instance.PositionLeft; this.Top = SettingsXml.Instance.PositionTop; this.ResetPositionIfOffScreen(); @@ -460,7 +459,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) } this.isUpdateToast = isUpdate; - + if (!this.IsToastVisible) { this.ShowToast(true); From 673d3d1c6d41fb3946b88ab3f007e14117b6afc4 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 11 Jul 2017 16:55:07 +0200 Subject: [PATCH 071/452] v1.9.5 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index a793d3c7..cb3d6848 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -79,8 +79,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.4" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.4" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.5" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.5" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index 7c646a00..c20b133b 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.4.*")] +[assembly: AssemblyVersion("1.9.5.*")] diff --git a/Toastify/version b/Toastify/version index 70b02ffc..6ecac681 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.4 \ No newline at end of file +1.9.5 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index 1cec6c60..8abe14c6 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.4.*")] +[assembly: AssemblyVersion("1.9.5.*")] From b222551018e07f4f4e745cc9780e4b0286cace2a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 12 Jul 2017 18:22:21 +0200 Subject: [PATCH 072/452] Update cover art only when the song changes There's no need to update the cover art also when showing the toast. This, for some reason, caused the cover art to not be displayed if the OnlyShowToastOnHotkey option was off. --- Toastify/src/UI/Toast.xaml.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 749b953e..398befb2 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -426,7 +426,6 @@ private void ShowToast(bool shallBeVisible) if (shallBeVisible) { - this.UpdateCoverArt(true); this.Left = SettingsXml.Instance.PositionLeft; this.Top = SettingsXml.Instance.PositionTop; this.ResetPositionIfOffScreen(); From a7d46da9b7f1e95b7fb07db572da665c9ffe2ac3 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 18 Jul 2017 02:39:42 +0200 Subject: [PATCH 073/452] Added a song progress bar to the Toast --- Toastify/src/Core/Song.cs | 15 +++++++++++---- Toastify/src/UI/Toast.xaml | 18 +++++++++++++++--- Toastify/src/UI/Toast.xaml.cs | 16 +++++++++++++++- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Core/Song.cs index 1f184c27..e28312c5 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Core/Song.cs @@ -11,14 +11,20 @@ public class Song public string Artist { get; } public string Track { get; set; } public string Album { get; } + public int Length { get; } public string CoverArtUrl { get; set; } - public Song(string artist, string title, string album = null) + internal Song() : this(string.Empty, string.Empty, -1) + { + } + + public Song(string artist, string title, int length, string album = null) { this.Artist = artist; this.Track = title; this.Album = album; + this.Length = length; } internal bool IsValid() @@ -68,12 +74,13 @@ public static implicit operator Song(Track spotifyTrack) return null; if (spotifyTrack.IsAd()) - return new Song("", ""); + return new Song(); string artist = spotifyTrack.ArtistResource?.Name; string title = spotifyTrack.TrackResource?.Name; string album = spotifyTrack.AlbumResource?.Name; - string coverArtUrl = ""; + int length = spotifyTrack.Length; + string coverArtUrl = string.Empty; // Take the smallest image possible. foreach (var size in albumArtSizes) @@ -83,7 +90,7 @@ public static implicit operator Song(Track spotifyTrack) break; } - return new Song(artist, title, album) { CoverArtUrl = coverArtUrl }; + return new Song(artist, title, length, album) { CoverArtUrl = coverArtUrl }; } public static bool Equal(Song s1, Song s2) diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/UI/Toast.xaml index 5cda2131..f2dd96b7 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/UI/Toast.xaml @@ -41,10 +41,11 @@ - + - - + + + @@ -53,6 +54,17 @@ Paramore Let The Flames Begin + + + + + + + + + + + diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/UI/Toast.xaml.cs index 398befb2..156eafc7 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/UI/Toast.xaml.cs @@ -35,6 +35,8 @@ namespace Toastify.UI [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class Toast : Window { + // TODO: Actually implement the MVVM pattern: create ViewModels for every View. + private const string DEFAULT_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyLogo.png"; private const string AD_PLAYING_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyAdPlaying.png"; private const string ALBUM_ACCESS_DENIED_ICON = "pack://application:,,,/Toastify;component/Resources/ToastifyAccessDenied.png"; @@ -300,6 +302,7 @@ private void UpdateCurrentSong(Song song) this.UpdateCoverArt(); this.UpdateToastText(this.currentSong); + this.UpdateSongProgressBar(0.0); // Save track info to file. if (SettingsXml.Instance.SaveTrackToFile) @@ -591,6 +594,17 @@ public void DisplayAction(SpotifyAction action) } } + private void UpdateSongProgressBar(double trackTime) + { + this.Dispatcher.Invoke( + DispatcherPriority.Normal, + new Action(() => + { + double timePercentage = trackTime / this.currentSong?.Length ?? trackTime; + this.SongProgressBar.Width = this.SongProgressBarContainer.ActualWidth * timePercentage; + })); + } + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { // Close Spotify first. @@ -775,7 +789,7 @@ private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEven private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEventArgs e) { - // TODO: TrackTimeChanged + this.UpdateSongProgressBar(e.TrackTime); } #endregion Event handlers [Spotify] From 31574c106f8148bedea9ee96b4d09399aa221e36 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 5 Aug 2017 16:49:25 +0200 Subject: [PATCH 074/452] Started proper implementation of the MVVM pattern Only the Settings view has been converted --- Toastify/Toastify.csproj | 32 +- Toastify/src/App.xaml | 2 +- Toastify/src/Common/DelegateCommand.cs | 110 ++++ Toastify/src/Common/ObservableObject.cs | 47 ++ Toastify/src/Core/Spotify.cs | 13 +- Toastify/src/Core/SpotifyAction.cs | 3 + .../src/Core/ToastifyVolumeControlMode.cs | 27 + .../SpotifyPlayStateChangedEventArgs.cs | 1 + Toastify/src/Events/SpotifyStateEventArgs.cs | 1 + .../Events/SpotifyTrackChangedEventArgs.cs | 1 + Toastify/src/Helpers/ColorHelper.cs | 36 ++ .../Helpers/HexColorToAlphaValueConverter.cs | 20 + Toastify/src/Helpers/ScreenHelper.cs | 17 +- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 5 +- Toastify/src/LastInputDebug.cs | 2 +- Toastify/src/{Core => Model}/HotKey.cs | 11 +- .../SettingsXml.cs => Model/Settings.cs} | 558 +++--------------- Toastify/src/{Core => Model}/Song.cs | 2 +- Toastify/src/Services/Telemetry.cs | 7 +- .../{UI/About.xaml => View/AboutView.xaml} | 2 +- .../About.xaml.cs => View/AboutView.xaml.cs} | 8 +- .../Settings.xaml => View/SettingsView.xaml} | 96 +-- .../SettingsView.xaml.cs} | 159 ++--- .../{UI/Toast.xaml => View/ToastView.xaml} | 2 +- .../Toast.xaml.cs => View/ToastView.xaml.cs} | 59 +- Toastify/src/ViewModel/SettingsViewModel.cs | 107 ++++ 26 files changed, 608 insertions(+), 720 deletions(-) create mode 100644 Toastify/src/Common/DelegateCommand.cs create mode 100644 Toastify/src/Common/ObservableObject.cs create mode 100644 Toastify/src/Core/ToastifyVolumeControlMode.cs create mode 100644 Toastify/src/Helpers/ColorHelper.cs create mode 100644 Toastify/src/Helpers/HexColorToAlphaValueConverter.cs rename Toastify/src/{Core => Model}/HotKey.cs (99%) rename Toastify/src/{Core/SettingsXml.cs => Model/Settings.cs} (51%) rename Toastify/src/{Core => Model}/Song.cs (99%) rename Toastify/src/{UI/About.xaml => View/AboutView.xaml} (98%) rename Toastify/src/{UI/About.xaml.cs => View/AboutView.xaml.cs} (93%) rename Toastify/src/{UI/Settings.xaml => View/SettingsView.xaml} (59%) rename Toastify/src/{UI/Settings.xaml.cs => View/SettingsView.xaml.cs} (52%) rename Toastify/src/{UI/Toast.xaml => View/ToastView.xaml} (99%) rename Toastify/src/{UI/Toast.xaml.cs => View/ToastView.xaml.cs} (94%) create mode 100644 Toastify/src/ViewModel/SettingsViewModel.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index ac1c7701..621dca7b 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -124,7 +124,10 @@ - + + + + @@ -136,18 +139,21 @@ + + + - + Designer MSBuild:Compile MSBuild:Compile Designer - + Designer MSBuild:Compile - + MSBuild:Compile Designer MSBuild:Compile @@ -163,18 +169,18 @@ - - Settings.xaml + + SettingsView.xaml - - Toast.xaml + + ToastView.xaml Code - - About.xaml + + AboutView.xaml Code @@ -189,9 +195,9 @@ Settings.settings True - + - + @@ -251,7 +257,7 @@ - + diff --git a/Toastify/src/App.xaml b/Toastify/src/App.xaml index 0fa601fa..f08aa706 100644 --- a/Toastify/src/App.xaml +++ b/Toastify/src/App.xaml @@ -1,7 +1,7 @@  diff --git a/Toastify/src/Common/DelegateCommand.cs b/Toastify/src/Common/DelegateCommand.cs new file mode 100644 index 00000000..0676a930 --- /dev/null +++ b/Toastify/src/Common/DelegateCommand.cs @@ -0,0 +1,110 @@ +using System; +using System.Windows.Input; + +namespace Toastify.Common +{ + public class DelegateCommand : ICommand + { + private readonly Action action; + + private readonly Func canExecuteMethod; + + /// + /// Occurs when changes occur that affect whether or not the command should execute. + /// + public event EventHandler CanExecuteChanged; + + public DelegateCommand(Action action) : this(action, null) + { + } + + public DelegateCommand(Action action, Func canExecuteMethod) + { + this.action = action ?? throw new ArgumentNullException(nameof(action)); + this.canExecuteMethod = canExecuteMethod; + } + + /// + /// Defines the method that determines whether the command can execute in its current state. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// true if this command can be executed; otherwise, false. + public bool CanExecute(object parameter = null) + { + return this.canExecuteMethod == null || this.canExecuteMethod(); + } + + /// + /// Defines the method to be called when the command is invoked. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + public void Execute(object parameter = null) + { + this.action(); + } + } + + public class DelegateCommand : ICommand + { + private readonly Action action; + + private readonly Func canExecuteMethod; + + /// + /// Occurs when changes occur that affect whether or not the command should execute. + /// + public event EventHandler CanExecuteChanged; + + public DelegateCommand(Action action) : this(action, null) + { + } + + public DelegateCommand(Action action, Func canExecuteMethod) + { + this.action = action ?? throw new ArgumentNullException(nameof(action)); + this.canExecuteMethod = canExecuteMethod; + } + + /// + /// Defines the method that determines whether the command can execute in its current state. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// + /// true if this command can be executed; otherwise, false. + public bool CanExecute(T parameter) + { + return this.canExecuteMethod == null || this.canExecuteMethod(parameter); + } + + /// + /// Defines the method that determines whether the command can execute in its current state. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// true if this command can be executed; otherwise, false. + public bool CanExecute(object parameter = null) + { + T p = (parameter?.GetType().IsAssignableFrom(typeof(T)) ?? false) ? (T)parameter : default(T); + return this.canExecuteMethod == null || this.canExecuteMethod(p); + } + + /// + /// Defines the method to be called when the command is invoked. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// + public void Execute(T parameter) + { + this.action(parameter); + } + + /// + /// Defines the method to be called when the command is invoked. + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + public void Execute(object parameter = null) + { + T p = (parameter?.GetType().IsAssignableFrom(typeof(T)) ?? false) ? (T)parameter : default(T); + this.action(p); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Common/ObservableObject.cs b/Toastify/src/Common/ObservableObject.cs new file mode 100644 index 00000000..930707af --- /dev/null +++ b/Toastify/src/Common/ObservableObject.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq.Expressions; +using System.Runtime.CompilerServices; + +namespace Toastify.Common +{ + public class ObservableObject : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + /// + /// Sets the new value of a field if it has changed and notifies the change. + /// + /// The type of the field. + /// A reference to the field. + /// The new value. + /// The name of the property; automatically provided through the CallerMemberName attribute. + protected void RaiseAndSetIfChanged(ref T field, T newValue, [CallerMemberName] string propertyName = null) + { + if (!EqualityComparer.Default.Equals(field, newValue)) + { + field = newValue; + this.NotifyPropertyChanged(propertyName); + } + } + + protected void RaiseAndSetIfChangedWithConstraint(ref T field, T newValue, Expression> constraint, [CallerMemberName] string propertyName = null) + { + if (!constraint.Compile()()) + throw new ArgumentException($"Constraint failed:\n{constraint}\n"); + + if (!EqualityComparer.Default.Equals(field, newValue)) + { + field = newValue; + this.NotifyPropertyChanged(propertyName); + } + } + + protected void NotifyPropertyChanged(string propertyName = null, [CallerMemberName] string callerMemberName = null) + { + var handler = this.PropertyChanged; + handler?.Invoke(this, new PropertyChangedEventArgs(propertyName ?? callerMemberName)); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 6e596c82..f1f93240 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -8,6 +8,7 @@ using System.Windows.Input; using Toastify.Events; using Toastify.Helpers; +using Toastify.Model; using Toastify.Services; namespace Toastify.Core @@ -96,7 +97,7 @@ protected Spotify() public void StartSpotify() { - int timeout = SettingsXml.Instance.StartupWaitTimeout; + int timeout = Settings.Instance.StartupWaitTimeout; this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(timeout) : this.FindSpotifyProcess(); if (this.spotifyProcess == null) @@ -131,7 +132,7 @@ private Process LaunchSpotifyAndWaitForInputIdle(int timeoutMilliseconds = 10000 // We need to let Spotify start-up before interacting with it. spotifyProcess?.WaitForInputIdle(maxWait); - if (SettingsXml.Instance.MinimizeSpotifyOnStartup) + if (Settings.Instance.MinimizeSpotifyOnStartup) this.Minimize(1000); return spotifyProcess; @@ -152,7 +153,7 @@ private void ConnectWithSpotify() // Pre-emptive wait, in case some fool set SpotifyConnectionAttempts to 1! ;) Thread.Sleep(500); - int maxAttempts = SettingsXml.Instance.SpotifyConnectionAttempts; + int maxAttempts = Settings.Instance.SpotifyConnectionAttempts; bool connected; int attempts = 1; while (!(connected = this.localAPI.Connect()) && attempts < maxAttempts) @@ -309,7 +310,7 @@ public void SendAction(SpotifyAction action) case SpotifyAction.VolumeUp: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); - switch (SettingsXml.Instance.VolumeControlMode) + switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.Spotify: this.SendShortcut(action); @@ -327,7 +328,7 @@ public void SendAction(SpotifyAction action) case SpotifyAction.VolumeDown: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); - switch (SettingsXml.Instance.VolumeControlMode) + switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.Spotify: this.SendShortcut(action); @@ -345,7 +346,7 @@ public void SendAction(SpotifyAction action) case SpotifyAction.Mute: Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); - switch (SettingsXml.Instance.VolumeControlMode) + switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.SystemSpotifyOnly: this.localAPI.ToggleMute(); diff --git a/Toastify/src/Core/SpotifyAction.cs b/Toastify/src/Core/SpotifyAction.cs index 30d22fa2..72d54860 100644 --- a/Toastify/src/Core/SpotifyAction.cs +++ b/Toastify/src/Core/SpotifyAction.cs @@ -1,5 +1,8 @@ namespace Toastify.Core { + // TODO: Apply the 'Polymorphism' pattern. + // When related alternatives or behaviours vary by type, assign responsibilities for the + // behaviour, using polymorphic operations, to the types for which the behaviour varies. public enum SpotifyAction : long { // (Some of) these values are the lParam of a WM_APPCOMMAND message. diff --git a/Toastify/src/Core/ToastifyVolumeControlMode.cs b/Toastify/src/Core/ToastifyVolumeControlMode.cs new file mode 100644 index 00000000..46653ce7 --- /dev/null +++ b/Toastify/src/Core/ToastifyVolumeControlMode.cs @@ -0,0 +1,27 @@ +using System; +using Toastify.Common; + +namespace Toastify.Core +{ + [Flags] + public enum ToastifyVolumeControlMode + { + /// + /// The volume will changed only inside Spotify. + /// + [ComboBoxItem("Spotify", "Use Spotify's volume control.")] + Spotify = 1, + + /// + /// The volume will be changed in the WindowsVolumeMixer and will affect system volume. + /// + [ComboBoxItem("Windows Volume Mixer (device)", "Use the Windows Volume Mixer.\nThis affects the global system volume.")] + SystemGlobal = 1 << 1, + + /// + /// The volume will be changed in the WindowsVolumeMixer and will affect just Spotify. + /// + [ComboBoxItem("Windows Volume Mixer (Spotify)", "Use the Windows Volume Mixer.\nThis only affects Spotify's volume.")] + SystemSpotifyOnly = SystemGlobal | Spotify + } +} \ No newline at end of file diff --git a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs index c3be84f7..e4c46847 100644 --- a/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyPlayStateChangedEventArgs.cs @@ -1,5 +1,6 @@ using System; using Toastify.Core; +using Toastify.Model; namespace Toastify.Events { diff --git a/Toastify/src/Events/SpotifyStateEventArgs.cs b/Toastify/src/Events/SpotifyStateEventArgs.cs index 0db990b0..3057a62c 100644 --- a/Toastify/src/Events/SpotifyStateEventArgs.cs +++ b/Toastify/src/Events/SpotifyStateEventArgs.cs @@ -1,6 +1,7 @@ using SpotifyAPI.Local.Models; using System; using Toastify.Core; +using Toastify.Model; namespace Toastify.Events { diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs index 6198badc..b011d59c 100644 --- a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -1,4 +1,5 @@ using System; +using Toastify.Model; namespace Toastify.Core { diff --git a/Toastify/src/Helpers/ColorHelper.cs b/Toastify/src/Helpers/ColorHelper.cs new file mode 100644 index 00000000..d5f4ebd0 --- /dev/null +++ b/Toastify/src/Helpers/ColorHelper.cs @@ -0,0 +1,36 @@ +using System.Drawing; +using System.Globalization; + +namespace Toastify.Helpers +{ + internal static class ColorHelper + { + /// + /// Hexadecimal to converter. + /// + /// Hex color. + /// A . + public static Color HexToColor(string hexColor) + { + //Remove # if present + if (hexColor.IndexOf('#') != -1) + hexColor = hexColor.Replace("#", ""); + + byte alpha = 0; + byte red = 0; + byte green = 0; + byte blue = 0; + + if (hexColor.Length == 8) + { + //#RRGGBB + alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); + red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); + green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); + blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); + } + + return Color.FromArgb(alpha, red, green, blue); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Helpers/HexColorToAlphaValueConverter.cs b/Toastify/src/Helpers/HexColorToAlphaValueConverter.cs new file mode 100644 index 00000000..8823a47a --- /dev/null +++ b/Toastify/src/Helpers/HexColorToAlphaValueConverter.cs @@ -0,0 +1,20 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace Toastify.Helpers +{ + public class HexColorToAlphaValueConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + string hexColor = (string)value ?? string.Empty; + return byte.Parse(hexColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Helpers/ScreenHelper.cs b/Toastify/src/Helpers/ScreenHelper.cs index 45141c73..c411bbdf 100644 --- a/Toastify/src/Helpers/ScreenHelper.cs +++ b/Toastify/src/Helpers/ScreenHelper.cs @@ -1,7 +1,8 @@ -using System.Diagnostics; +using System; +using System.Diagnostics; using System.Windows; using System.Windows.Forms; -using Toastify.UI; +using Toastify.View; namespace Toastify.Helpers { @@ -12,7 +13,7 @@ internal static class ScreenHelper public static Point GetDPIRatios() { - var presentationSource = PresentationSource.FromVisual(Toast.Current); + var presentationSource = PresentationSource.FromVisual(ToastView.Current); // if we hit this then Settings were loaded before the Toast window was Debug.Assert(presentationSource != null); @@ -25,7 +26,15 @@ public static Point GetDefaultToastPosition(double width, double height) { var screenRect = Screen.PrimaryScreen.WorkingArea; - var dpiRatio = GetDPIRatios(); + Point dpiRatio; + try + { + dpiRatio = GetDPIRatios(); + } + catch (Exception) + { + dpiRatio = new Point(1.0, 1.0); + } return new Point(screenRect.Width / dpiRatio.X - width - SCREEN_RIGHT_MARGIN, screenRect.Height / dpiRatio.Y - height - SCREEN_TOP_MARGIN); diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs index 14639f80..f1318859 100644 --- a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -1,5 +1,6 @@ using SpotifyAPI.Local; using Toastify.Core; +using Toastify.Model; namespace Toastify.Helpers { @@ -8,14 +9,14 @@ internal static class SpotifyLocalAPIExtensions public static void IncrementVolume(this SpotifyLocalAPI api) { float currentVolume = api.GetSpotifyVolume(); - float newVolume = currentVolume + SettingsXml.Instance.WindowsVolumeMixerIncrement; + float newVolume = currentVolume + Settings.Instance.WindowsVolumeMixerIncrement; api.SetSpotifyVolume(newVolume >= 100.0f ? 100.0f : newVolume); } public static void DecrementVolume(this SpotifyLocalAPI api) { float currentVolume = api.GetSpotifyVolume(); - float newVolume = currentVolume - SettingsXml.Instance.WindowsVolumeMixerIncrement; + float newVolume = currentVolume - Settings.Instance.WindowsVolumeMixerIncrement; api.SetSpotifyVolume(newVolume <= 0.0f ? 0.0f : newVolume); } diff --git a/Toastify/src/LastInputDebug.cs b/Toastify/src/LastInputDebug.cs index 96df4cee..4cb4c621 100644 --- a/Toastify/src/LastInputDebug.cs +++ b/Toastify/src/LastInputDebug.cs @@ -1,9 +1,9 @@ #if DEBUG using System; -using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; + // ReSharper disable BuiltInTypeReferenceStyle namespace Toastify diff --git a/Toastify/src/Core/HotKey.cs b/Toastify/src/Model/HotKey.cs similarity index 99% rename from Toastify/src/Core/HotKey.cs rename to Toastify/src/Model/HotKey.cs index fe309a43..094577d2 100644 --- a/Toastify/src/Core/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -1,5 +1,4 @@ -using ManagedWinapi; -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -9,9 +8,11 @@ using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; -using Toastify.UI; +using ManagedWinapi; +using Toastify.Core; +using Toastify.View; -namespace Toastify.Core +namespace Toastify.Model { [Serializable] [XmlRoot("Hotkey")] @@ -402,7 +403,7 @@ private void CheckIfValid() private void GlobalKey_HotkeyPressed(object sender, EventArgs e) { - Toast.HotkeyActionCallback(this); + ToastView.HotkeyActionCallback(this); } #region INotifyPropertyChanged diff --git a/Toastify/src/Core/SettingsXml.cs b/Toastify/src/Model/Settings.cs similarity index 51% rename from Toastify/src/Core/SettingsXml.cs rename to Toastify/src/Model/Settings.cs index c9aef2c6..2e38102d 100644 --- a/Toastify/src/Core/SettingsXml.cs +++ b/Toastify/src/Model/Settings.cs @@ -1,29 +1,30 @@ using Microsoft.Win32; using System; using System.Collections.Generic; -using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Xml; using System.Xml.Serialization; using Toastify.Common; +using Toastify.Core; using Toastify.Helpers; -namespace Toastify.Core +namespace Toastify.Model { [Serializable] - public class SettingsXml : INotifyPropertyChanged + [XmlRoot("SettingsXml")] + public class Settings : ObservableObject { #region Singleton - private static SettingsXml _instance; + private static Settings _instance; - public static SettingsXml Instance + public static Settings Instance { get { - return _instance ?? (_instance = new SettingsXml()); + return _instance ?? (_instance = new Settings()); } private set { @@ -39,7 +40,7 @@ private set #endregion Singleton private const string REG_KEY_STARTUP = @"Software\Microsoft\Windows\CurrentVersion\Run"; - private const string SETTINGS_FILE = "Toastify.xml"; + private const string SETTINGS_FILENAME = "Toastify.xml"; private XmlSerializer _xmlSerializer; private string _settingsFile; @@ -51,7 +52,7 @@ public XmlSerializer XmlSerializer { if (this._xmlSerializer == null) { - this._xmlSerializer = new XmlSerializer(typeof(SettingsXml)); + this._xmlSerializer = new XmlSerializer(typeof(Settings)); this._xmlSerializer.UnknownAttribute += this.XmlSerializer_UnknownAttribute; this._xmlSerializer.UnknownElement += this.XmlSerializer_UnknownElement; this._xmlSerializer.UnknownNode += this.XmlSerializer_UnknownNode; @@ -64,7 +65,7 @@ public XmlSerializer XmlSerializer /// Returns the location of the settings file /// [XmlIgnore] - public string SettingsFile + public string SettingsFilePath { get { @@ -87,7 +88,7 @@ public string SettingsFile } } - this._settingsFile = Path.Combine(settingsPath, SETTINGS_FILE); + this._settingsFile = Path.Combine(settingsPath, SETTINGS_FILENAME); } return this._settingsFile; @@ -145,11 +146,6 @@ public string SettingsFile private double _positionLeft; private double _positionTop; - private bool _firstRun; - private string _previousVersion; - private int _startupWaitTimeout; - private int _spotifyConnectionAttempts; - #endregion Private fields #region [General] @@ -178,169 +174,69 @@ public bool LaunchOnStartup key?.DeleteValue("Toastify", false); } - this.NotifyPropertyChanged(nameof(this.LaunchOnStartup)); + this.NotifyPropertyChanged(); } } public bool MinimizeSpotifyOnStartup { - get - { - return this._minimizeSpotifyOnStartup; - } - set - { - if (this._minimizeSpotifyOnStartup != value) - { - this._minimizeSpotifyOnStartup = value; - this.NotifyPropertyChanged(nameof(this.MinimizeSpotifyOnStartup)); - } - } + get { return this._minimizeSpotifyOnStartup; } + set { this.RaiseAndSetIfChanged(ref this._minimizeSpotifyOnStartup, value); } } public bool CloseSpotifyWithToastify { - get - { - return this._closeSpotifyWithToastify; - } - set - { - if (this._closeSpotifyWithToastify != value) - { - this._closeSpotifyWithToastify = value; - this.NotifyPropertyChanged(nameof(this.CloseSpotifyWithToastify)); - } - } + get { return this._closeSpotifyWithToastify; } + set { this.RaiseAndSetIfChanged(ref this._closeSpotifyWithToastify, value); } } public ToastifyVolumeControlMode VolumeControlMode { - get - { - return this._volumeControlMode; - } - set - { - if (this._volumeControlMode != value) - { - this._volumeControlMode = value; - this.NotifyPropertyChanged(nameof(this.VolumeControlMode)); - } - } + get { return this._volumeControlMode; } + set { this.RaiseAndSetIfChanged(ref this._volumeControlMode, value); } } [Obsolete("UseSpotifyVolumeControl is obsolete and will be removed in the future. Use VolumeControlMode instead.")] public bool UseSpotifyVolumeControl { - get - { - return this._useSpotifyVolumeControl; - } - set - { - if (this._useSpotifyVolumeControl != value) - { - this._useSpotifyVolumeControl = value; - this.NotifyPropertyChanged(nameof(this.UseSpotifyVolumeControl)); - } - } + get { return this._useSpotifyVolumeControl; } + set { this.RaiseAndSetIfChanged(ref this._useSpotifyVolumeControl, value); } } public float WindowsVolumeMixerIncrement { - get - { - return this._windowsVolumeMixerIncrement; - } - set - { - if (Math.Abs(this._windowsVolumeMixerIncrement - value) > 0.000001f) - { - this._windowsVolumeMixerIncrement = value; - this.NotifyPropertyChanged(nameof(this.WindowsVolumeMixerIncrement)); - } - } + get { return this._windowsVolumeMixerIncrement; } + set { this.RaiseAndSetIfChanged(ref this._windowsVolumeMixerIncrement, value); } } public string ClipboardTemplate { - get - { - return this._clipboardTemplate; - } - set - { - if (this._clipboardTemplate != value) - { - this._clipboardTemplate = value; - this.NotifyPropertyChanged(nameof(this.ClipboardTemplate)); - } - } + get { return this._clipboardTemplate; } + set { this.RaiseAndSetIfChanged(ref this._clipboardTemplate, value); } } public bool SaveTrackToFile { - get - { - return this._saveTrackToFile; - } - set - { - if (this._saveTrackToFile != value) - { - this._saveTrackToFile = value; - this.NotifyPropertyChanged(nameof(this.SaveTrackToFile)); - } - } + get { return this._saveTrackToFile; } + set { this.RaiseAndSetIfChanged(ref this._saveTrackToFile, value); } } public string SaveTrackToFilePath { - get - { - return this._saveTrackToFilePath; - } - set - { - if (this._saveTrackToFilePath != value) - { - this._saveTrackToFilePath = value; - this.NotifyPropertyChanged(nameof(this.SaveTrackToFilePath)); - } - } + get { return this._saveTrackToFilePath; } + set { this.RaiseAndSetIfChanged(ref this._saveTrackToFilePath, value); } } public bool PreventSleepWhilePlaying { - get - { - return this._preventSleepWhilePlaying; - } - set - { - if (this._preventSleepWhilePlaying != value) - { - this._preventSleepWhilePlaying = value; - this.NotifyPropertyChanged(nameof(this.PreventSleepWhilePlaying)); - } - } + get { return this._preventSleepWhilePlaying; } + set { this.RaiseAndSetIfChanged(ref this._preventSleepWhilePlaying, value); } } public bool OptInToAnalytics { - get - { - return this._optInToAnalytics; - } - set - { - if (this._optInToAnalytics != value) - { - this._optInToAnalytics = value; - this.NotifyPropertyChanged(nameof(this.OptInToAnalytics)); - } - } + get { return this._optInToAnalytics; } + set { this.RaiseAndSetIfChanged(ref this._optInToAnalytics, value); } } #endregion [General] @@ -349,34 +245,14 @@ public bool OptInToAnalytics public bool GlobalHotKeys { - get - { - return this._globalHotKeys; - } - set - { - if (this._globalHotKeys != value) - { - this._globalHotKeys = value; - this.NotifyPropertyChanged(nameof(this.GlobalHotKeys)); - } - } + get { return this._globalHotKeys; } + set { this.RaiseAndSetIfChanged(ref this._globalHotKeys, value); } } public List HotKeys { - get - { - return this._hotKeys; - } - set - { - if (this._hotKeys != value) - { - this._hotKeys = value; - this.NotifyPropertyChanged(nameof(this.HotKeys)); - } - } + get { return this._hotKeys; } + set { this.RaiseAndSetIfChanged(ref this._hotKeys, value); } } #endregion [Hotkeys] @@ -385,18 +261,8 @@ public List HotKeys public bool DisableToast { - get - { - return this._disableToast; - } - set - { - if (this._disableToast != value) - { - this._disableToast = value; - this.NotifyPropertyChanged(nameof(this.DisableToast)); - } - } + get { return this._disableToast; } + set { this.RaiseAndSetIfChanged(ref this._disableToast, value); } } /// @@ -404,332 +270,105 @@ public bool DisableToast /// public bool OnlyShowToastOnHotkey { - get - { - return this._onlyShowToastOnHotkey; - } - set - { - if (this._onlyShowToastOnHotkey != value) - { - this._onlyShowToastOnHotkey = value; - this.NotifyPropertyChanged(nameof(this.OnlyShowToastOnHotkey)); - } - } + get { return this._onlyShowToastOnHotkey; } + set { this.RaiseAndSetIfChanged(ref this._onlyShowToastOnHotkey, value); } } public bool DisableToastWithFullscreenVideogames { - get - { - return this._disableToastWithFullscreenVideogames; - } - set - { - if (this._disableToastWithFullscreenVideogames != value) - { - this._disableToastWithFullscreenVideogames = value; - this.NotifyPropertyChanged(nameof(this.DisableToastWithFullscreenVideogames)); - } - } + get { return this._disableToastWithFullscreenVideogames; } + set { this.RaiseAndSetIfChanged(ref this._disableToastWithFullscreenVideogames, value); } } public int FadeOutTime { - get - { - return this._fadeOutTime; - } - set - { - if (this._fadeOutTime != value) - { - this._fadeOutTime = value; - this.NotifyPropertyChanged(nameof(this.FadeOutTime)); - } - } + get { return this._fadeOutTime; } + set { this.RaiseAndSetIfChanged(ref this._fadeOutTime, value); } } public string ToastColorTop { - get - { - return this._toastColorTop; - } - set - { - if (this._toastColorTop != value) - { - this._toastColorTop = value; - this.NotifyPropertyChanged(nameof(this.ToastColorTop)); - } - } + get { return this._toastColorTop; } + set { this.RaiseAndSetIfChanged(ref this._toastColorTop, value); } } public string ToastColorBottom { - get - { - return this._toastColorBottom; - } - set - { - if (this._toastColorBottom != value) - { - this._toastColorBottom = value; - this.NotifyPropertyChanged(nameof(this.ToastColorBottom)); - } - } + get { return this._toastColorBottom; } + set { this.RaiseAndSetIfChanged(ref this._toastColorBottom, value); } } public string ToastBorderColor { - get - { - return this._toastBorderColor; - } - set - { - if (this._toastBorderColor != value) - { - this._toastBorderColor = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderColor)); - } - } + get { return this._toastBorderColor; } + set { this.RaiseAndSetIfChanged(ref this._toastBorderColor, value); } } public double ToastBorderThickness { - get - { - return this._toastBorderThickness; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastBorderThickness - value) > double.Epsilon) - { - this._toastBorderThickness = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderThickness)); - } - } + get { return this._toastBorderThickness; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastBorderThickness, value, () => value >= 0.0); } } public double ToastBorderCornerRadiusTopLeft { - get - { - return this._toastBorderCornerRadiusTopLeft; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastBorderCornerRadiusTopLeft - value) > double.Epsilon) - { - this._toastBorderCornerRadiusTopLeft = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusTopLeft)); - } - } + get { return this._toastBorderCornerRadiusTopLeft; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastBorderCornerRadiusTopLeft, value, () => value >= 0.0); } } public double ToastBorderCornerRadiusTopRight { - get - { - return this._toastBorderCornerRadiusTopRight; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastBorderCornerRadiusTopRight - value) > double.Epsilon) - { - this._toastBorderCornerRadiusTopRight = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusTopRight)); - } - } + get { return this._toastBorderCornerRadiusTopRight; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastBorderCornerRadiusTopRight, value, () => value >= 0.0); } } public double ToastBorderCornerRadiusBottomLeft { - get - { - return this._toastBorderCornerRadiusBottomLeft; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastBorderCornerRadiusBottomLeft - value) > double.Epsilon) - { - this._toastBorderCornerRadiusBottomLeft = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusBottomLeft)); - } - } + get { return this._toastBorderCornerRadiusBottomLeft; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastBorderCornerRadiusBottomLeft, value, () => value >= 0.0); } } public double ToastBorderCornerRadiusBottomRight { - get - { - return this._toastBorderCornerRadiusBottomRight; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastBorderCornerRadiusBottomRight - value) > double.Epsilon) - { - this._toastBorderCornerRadiusBottomRight = value; - this.NotifyPropertyChanged(nameof(this.ToastBorderCornerRadiusBottomRight)); - } - } + get { return this._toastBorderCornerRadiusBottomRight; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastBorderCornerRadiusBottomRight, value, () => value >= 0.0); } } public double ToastWidth { - get - { - return this._toastWidth; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastWidth - value) > double.Epsilon) - { - this._toastWidth = value; - this.NotifyPropertyChanged(nameof(this.ToastWidth)); - } - } + get { return this._toastWidth; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastWidth, value, () => value >= 0.0); } } public double ToastHeight { - get - { - return this._toastHeight; - } - set - { - if (value < 0) - throw new ArgumentException("Value must be a positive number"); - - if (Math.Abs(this._toastHeight - value) > double.Epsilon) - { - this._toastHeight = value; - this.NotifyPropertyChanged(nameof(this.ToastHeight)); - } - } + get { return this._toastHeight; } + set { this.RaiseAndSetIfChangedWithConstraint(ref this._toastHeight, value, () => value >= 0.0); } } public double PositionLeft { - get - { - return this._positionLeft; - } - set - { - if (Math.Abs(this._positionLeft - value) > double.Epsilon) - { - this._positionLeft = value; - this.NotifyPropertyChanged(nameof(this.PositionLeft)); - } - } + get { return this._positionLeft; } + set { this.RaiseAndSetIfChanged(ref this._positionLeft, value); } } public double PositionTop { - get - { - return this._positionTop; - } - set - { - if (Math.Abs(this._positionTop - value) > double.Epsilon) - { - this._positionTop = value; - this.NotifyPropertyChanged(nameof(this.PositionTop)); - } - } + get { return this._positionTop; } + set { this.RaiseAndSetIfChanged(ref this._positionTop, value); } } #endregion [Toast] #region (hidden) - public bool FirstRun - { - get - { - return this._firstRun; - } - set - { - if (this._firstRun != value) - { - this._firstRun = value; - this.NotifyPropertyChanged(nameof(this.FirstRun)); - } - } - } + public bool FirstRun { get; set; } - public string PreviousVersion - { - get - { - return this._previousVersion; - } - set - { - if (this._previousVersion != value) - { - this._previousVersion = value; - this.NotifyPropertyChanged(nameof(this.PreviousVersion)); - } - } - } + public string PreviousVersion { get; set; } - public int StartupWaitTimeout - { - get - { - return this._startupWaitTimeout; - } - set - { - if (this._startupWaitTimeout != value) - { - this._startupWaitTimeout = value; - this.NotifyPropertyChanged(nameof(this.StartupWaitTimeout)); - } - } - } + public int StartupWaitTimeout { get; set; } - public int SpotifyConnectionAttempts - { - get - { - return this._spotifyConnectionAttempts; - } - set - { - if (this._spotifyConnectionAttempts != value) - { - this._spotifyConnectionAttempts = value; - this.NotifyPropertyChanged(nameof(this.SpotifyConnectionAttempts)); - } - } - } + public int SpotifyConnectionAttempts { get; set; } public WindowPosition SettingsWindowLastLocation { get; set; } @@ -739,7 +378,7 @@ public int SpotifyConnectionAttempts #endregion Settings - private SettingsXml() + private Settings() { this.Default(); } @@ -808,7 +447,7 @@ public void Default(bool setHotKeys = false) public void Save(bool replaceCurrent = false) { - using (StreamWriter sw = new StreamWriter(this.SettingsFile, false)) + using (StreamWriter sw = new StreamWriter(this.SettingsFilePath, false)) { this.XmlSerializer.Serialize(sw, this); } @@ -817,22 +456,22 @@ public void Save(bool replaceCurrent = false) Instance = this; } - public SettingsXml Load() + public Settings Load() { - if (!File.Exists(this.SettingsFile)) + if (!File.Exists(this.SettingsFilePath)) { Instance.Default(true); Instance.Save(); } else { - using (StreamReader sr = new StreamReader(this.SettingsFile)) + using (StreamReader sr = new StreamReader(this.SettingsFilePath)) { - SettingsXml xml = this.XmlSerializer.Deserialize(sr) as SettingsXml; + Settings file = this.XmlSerializer.Deserialize(sr) as Settings; - xml?.CheckForNewSettings(); + file?.CheckForNewSettings(); - Instance = xml; + Instance = file; } } @@ -926,9 +565,9 @@ private void UnloadSettings() } } - public SettingsXml Clone() + public Settings Clone() { - SettingsXml clone = this.MemberwiseClone() as SettingsXml; + Settings clone = this.MemberwiseClone() as Settings; if (clone != null) { @@ -941,17 +580,6 @@ public SettingsXml Clone() return clone; } - #region INotifyPropertyChanged - - public event PropertyChangedEventHandler PropertyChanged; - - private void NotifyPropertyChanged(string info) - { - this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); - } - - #endregion INotifyPropertyChanged - #region XmlSerializer event handlers private void XmlSerializer_UnknownAttribute(object sender, XmlAttributeEventArgs e) @@ -989,26 +617,4 @@ public class PluginDetails public string TypeName { get; set; } public string Settings { get; set; } } - - [Flags] - public enum ToastifyVolumeControlMode - { - /// - /// The volume will changed only inside Spotify. - /// - [ComboBoxItem("Spotify", "Use Spotify's volume control.")] - Spotify = 1, - - /// - /// The volume will be changed in the WindowsVolumeMixer and will affect system volume. - /// - [ComboBoxItem("Windows Volume Mixer (device)", "Use the Windows Volume Mixer.\nThis affects the global system volume.")] - SystemGlobal = 1 << 1, - - /// - /// The volume will be changed in the WindowsVolumeMixer and will affect just Spotify. - /// - [ComboBoxItem("Windows Volume Mixer (Spotify)", "Use the Windows Volume Mixer.\nThis only affects Spotify's volume.")] - SystemSpotifyOnly = SystemGlobal | Spotify - } } \ No newline at end of file diff --git a/Toastify/src/Core/Song.cs b/Toastify/src/Model/Song.cs similarity index 99% rename from Toastify/src/Core/Song.cs rename to Toastify/src/Model/Song.cs index e28312c5..0368a0ec 100644 --- a/Toastify/src/Core/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -2,7 +2,7 @@ using SpotifyAPI.Local.Models; using System.Diagnostics.CodeAnalysis; -namespace Toastify.Core +namespace Toastify.Model { public class Song { diff --git a/Toastify/src/Services/Telemetry.cs b/Toastify/src/Services/Telemetry.cs index 6e63b62d..2ca26280 100644 --- a/Toastify/src/Services/Telemetry.cs +++ b/Toastify/src/Services/Telemetry.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Management; using Toastify.Core; +using Toastify.Model; namespace Toastify.Services { @@ -20,7 +21,7 @@ private static void Init() { _session = new AnalyticsSession("http://toastify.nachmore.com/app", "UA-61123985-2"); - var settings = SettingsXml.Instance; + var settings = Settings.Instance; // abort asap if we are surpressing analytics if (settings.OptInToAnalytics) @@ -30,11 +31,11 @@ private static void Init() _client = _session.CreatePageViewRequest("/", "Global"); - if (SettingsXml.Instance.FirstRun) + if (Settings.Instance.FirstRun) { TrackEvent(TelemetryCategory.General, "Install", GetOS()); - SettingsXml.Instance.FirstRun = false; + Settings.Instance.FirstRun = false; } } diff --git a/Toastify/src/UI/About.xaml b/Toastify/src/View/AboutView.xaml similarity index 98% rename from Toastify/src/UI/About.xaml rename to Toastify/src/View/AboutView.xaml index ef14e4b5..d6fecb22 100644 --- a/Toastify/src/UI/About.xaml +++ b/Toastify/src/View/AboutView.xaml @@ -1,4 +1,4 @@ - - /// Interaction logic for About.xaml + /// Interaction logic for AboutView.xaml /// [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] - public partial class About : Window + public partial class AboutView : Window { private readonly VersionChecker versionChecker; - public About() + public AboutView() { this.InitializeComponent(); diff --git a/Toastify/src/UI/Settings.xaml b/Toastify/src/View/SettingsView.xaml similarity index 59% rename from Toastify/src/UI/Settings.xaml rename to Toastify/src/View/SettingsView.xaml index 08d61102..7786160d 100644 --- a/Toastify/src/UI/Settings.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -2,31 +2,33 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:common="clr-namespace:Toastify.Common" xmlns:core="clr-namespace:Toastify.Core" + xmlns:common="clr-namespace:Toastify.Common" xmlns:helpers="clr-namespace:Toastify.Helpers" xmlns:markup="clr-namespace:Toastify.Helpers.Markup" + xmlns:viewmodel="clr-namespace:Toastify.ViewModel" mc:Ignorable="d" - x:Class="Toastify.UI.Settings" + x:Class="Toastify.View.SettingsView" Title="Toastify - Settings" Height="560" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> + - + - Launch Toastify with Windows - Minimize Spotify on launch - Close Spotify when Toastify is closed + Launch Toastify with Windows + Minimize Spotify on launch + Close Spotify when Toastify is closed + SelectedValue="{Binding Path=Settings.VolumeControlMode, Mode=TwoWay}" SelectedValuePath="Value" Width="210"> @@ -36,7 +38,7 @@ @@ -49,14 +51,14 @@ - + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - Save Artist and Album to file when song changes (uses the clipboard template) - - Prevent the computer from sleeping while Spotify is playing - + Save Artist and Album to file when song changes (uses the clipboard template) + + Prevent the computer from sleeping while Spotify is playing + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. @@ -71,9 +73,9 @@ - Enable Global Hotkeys + Enable Global Hotkeys - + @@ -107,7 +109,7 @@ - + @@ -117,36 +119,36 @@ - Disable Toast - - Only Show Toast when Hotkey is pressed + Disable Toast + + Only Show Toast when Hotkey is pressed Disable Toast when a fullscreen videogame is running + IsChecked="{Binding Path=Settings.DisableToastWithFullscreenVideogames, Mode=TwoWay}" Name="CbDisableToastWithFullscreenVideogames" VerticalAlignment="Top" HorizontalAlignment="Left" Height="21" Margin="12,58,0,0" VerticalContentAlignment="Center">Disable Toast when a fullscreen videogame is running - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + @@ -155,12 +157,12 @@ - - + + - - + + @@ -178,20 +180,20 @@ - + - + - + - + - - + + diff --git a/Toastify/src/UI/Settings.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs similarity index 52% rename from Toastify/src/UI/Settings.xaml.cs rename to Toastify/src/View/SettingsView.xaml.cs index 180db970..bbb8f286 100644 --- a/Toastify/src/UI/Settings.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -1,25 +1,26 @@ using System; using System.Diagnostics.CodeAnalysis; -using System.Drawing; -using System.Globalization; using System.Linq; using System.Windows; using System.Windows.Controls; -using System.Windows.Forms; using System.Windows.Input; using Toastify.Common; using Toastify.Core; +using Toastify.Model; using Toastify.Services; +using Toastify.ViewModel; -namespace Toastify.UI +// ReSharper disable PrivateFieldCanBeConvertedToLocalVariable +namespace Toastify.View { [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] - public partial class Settings : Window + public partial class SettingsView : Window { - private static Settings _current; + private static SettingsView _current; - public SettingsXml settings; - private readonly Toast toast; + private readonly ToastView toastView; + private readonly SettingsViewModel settingsViewModel; + private readonly Settings settings; public WindowStartupLocation StartupLocation { @@ -39,100 +40,48 @@ public WindowStartupLocation StartupLocation } } - private Settings(Toast toast) + private SettingsView(ToastView toastView) { Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.SettingsLaunched); - this.settings = SettingsXml.Instance.Clone(); - this.toast = toast; + this.settingsViewModel = new SettingsViewModel(); + this.settingsViewModel.SettingsSaved += this.SettingsViewModel_SettingsSaved; + + this.toastView = toastView; + this.settings = this.settingsViewModel.Settings; this.InitializeComponent(); + this.DataContext = this.settingsViewModel; this.WindowStartupLocation = this.StartupLocation; - // Data context initialisation - this.GeneralGrid.DataContext = this.settings; - - // Slider initialisation - try - { - this.SlTopColor.Value = byte.Parse(this.settings.ToastColorTop.Substring(1, 2), NumberStyles.AllowHexSpecifier); - this.SlBottomColor.Value = byte.Parse(this.settings.ToastColorBottom.Substring(1, 2), NumberStyles.AllowHexSpecifier); - this.SlBorderColor.Value = byte.Parse(this.settings.ToastBorderColor.Substring(1, 2), NumberStyles.AllowHexSpecifier); - } - catch - { - // ignored - } - if (_current == null) _current = this; } - private void SaveAndApplySettings() - { - this.settings.Save(true); - - this.toast.InitToast(); - this.toast.DisplayAction(SpotifyAction.SettingsSaved); - } - - public static void Launch(Toast toast) + public static void Launch(ToastView toastView) { if (_current != null) _current.Activate(); else - new Settings(toast).ShowDialog(); - } - - /// - /// Hexadecimal to converter. - /// - /// Hex color. - /// A . - public static Color HexToColor(string hexColor) - { - //Remove # if present - if (hexColor.IndexOf('#') != -1) - hexColor = hexColor.Replace("#", ""); - - byte alpha = 0; - byte red = 0; - byte green = 0; - byte blue = 0; - - if (hexColor.Length == 8) - { - //#RRGGBB - alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); - red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); - green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); - } - - return Color.FromArgb(alpha, red, green, blue); + new SettingsView(toastView).ShowDialog(); } #region Event handlers private void Window_Closed(object sender, EventArgs e) { - SettingsXml.Instance.SettingsWindowLastLocation = new WindowPosition((int)this.Left, (int)this.Top); - SettingsXml.Instance.Save(true); + Settings.Instance.SettingsWindowLastLocation = new WindowPosition((int)this.Left, (int)this.Top); + Settings.Instance.Save(true); if (ReferenceEquals(_current, this)) _current = null; } - private void BtnDefault_Click(object sender, RoutedEventArgs e) + private void SettingsViewModel_SettingsSaved(object sender, EventArgs e) { - this.settings.Default(); - this.SaveAndApplySettings(); - } - - private void BtnSave_Click(object sender, RoutedEventArgs e) - { - this.SaveAndApplySettings(); + this.toastView.InitToast(); + this.toastView.DisplayAction(SpotifyAction.SettingsSaved); } #region "General" tab @@ -148,21 +97,6 @@ private void ComboVolumeControlMode_OnSelectionChanged(object sender, SelectionC this.PanelWindowsMixerIncrement.IsEnabled = current == ToastifyVolumeControlMode.SystemSpotifyOnly; } - private void BtnSaveTrackToFilePath_Click(object sender, RoutedEventArgs e) - { - var dialog = new OpenFileDialog(); - - if (SettingsXml.Instance.SaveTrackToFilePath != null) - dialog.FileName = SettingsXml.Instance.SaveTrackToFilePath; - - dialog.CheckPathExists = true; - dialog.CheckFileExists = false; - dialog.ShowReadOnly = false; - - if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) - this.settings.SaveTrackToFilePath = dialog.FileName; - } - #endregion "General" tab #region "Hotkeys" tab @@ -173,7 +107,7 @@ private void LstHotKeys_SelectionChanged(object sender, SelectionChangedEventArg this.TxtSingleKey.Text = hotkey.Key.ToString(); } - private void TxtSingleKey_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) + private void TxtSingleKey_PreviewKeyDown(object sender, KeyEventArgs e) { e.Handled = true; @@ -201,49 +135,22 @@ private void FadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) #region Change colors - private void ChangeColorTop_Click(object sender, RoutedEventArgs e) - { - ColorDialog MyDialog = new ColorDialog(); - string alpha = this.settings.ToastColorTop.Substring(1, 2); - MyDialog.Color = HexToColor(this.settings.ToastColorTop); - MyDialog.ShowDialog(); - this.settings.ToastColorTop = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); - } - - private void TopColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - string transparency = Convert.ToByte(this.SlTopColor.Value).ToString("X2"); - this.settings.ToastColorTop = "#" + transparency + this.settings.ToastColorTop.Substring(3); - } - - private void ChangeColorBottom_Click(object sender, RoutedEventArgs e) - { - ColorDialog MyDialog = new ColorDialog(); - string alpha = this.settings.ToastColorBottom.Substring(1, 2); - MyDialog.Color = HexToColor(this.settings.ToastColorBottom); - MyDialog.ShowDialog(); - this.settings.ToastColorBottom = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); - } - - private void BottomColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + private void TopColorAlpha_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { - string transparency = Convert.ToByte(this.SlBottomColor.Value).ToString("X2"); - this.settings.ToastColorBottom = "#" + transparency + this.settings.ToastColorBottom.Substring(3); + string alpha = Convert.ToByte(e.NewValue).ToString("X2"); + this.settings.ToastColorTop = $"#{alpha}{this.settings.ToastColorTop.Substring(3)}"; } - private void ChangeBorderColor_Click(object sender, RoutedEventArgs e) + private void BottomColorAlpha_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { - ColorDialog MyDialog = new ColorDialog(); - string alpha = this.settings.ToastBorderColor.Substring(1, 2); - MyDialog.Color = HexToColor(this.settings.ToastBorderColor); - MyDialog.ShowDialog(); - this.settings.ToastBorderColor = "#" + alpha + MyDialog.Color.R.ToString("X2") + MyDialog.Color.G.ToString("X2") + MyDialog.Color.B.ToString("X2"); + string alpha = Convert.ToByte(e.NewValue).ToString("X2"); + this.settings.ToastColorBottom = $"#{alpha}{this.settings.ToastColorBottom.Substring(3)}"; } - private void BorderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + private void BorderColorAlpha_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { - string transparency = Convert.ToByte(this.SlBorderColor.Value).ToString("X2"); - this.settings.ToastBorderColor = "#" + transparency + this.settings.ToastBorderColor.Substring(3); + string alpha = Convert.ToByte(e.NewValue).ToString("X2"); + this.settings.ToastBorderColor = $"#{alpha}{this.settings.ToastBorderColor.Substring(3)}"; } #endregion Change colors diff --git a/Toastify/src/UI/Toast.xaml b/Toastify/src/View/ToastView.xaml similarity index 99% rename from Toastify/src/UI/Toast.xaml rename to Toastify/src/View/ToastView.xaml index f2dd96b7..62265fd1 100644 --- a/Toastify/src/UI/Toast.xaml +++ b/Toastify/src/View/ToastView.xaml @@ -3,7 +3,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" - x:Class="Toastify.UI.Toast" + x:Class="Toastify.View.ToastView" Width="250" Height="70" MinWidth="250" MinHeight="70" AllowsTransparency="True" Background="#00000000" Opacity="1" Title="Toastify" WindowStyle="None" ResizeMode="NoResize" ShowInTaskbar="False" Cursor="Hand" Topmost="True" WindowState="Minimized" ShowActivated="False" Loaded="Window_Loaded" MouseEnter="Window_MouseEnter" MouseLeave="Window_MouseLeave" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp"> diff --git a/Toastify/src/UI/Toast.xaml.cs b/Toastify/src/View/ToastView.xaml.cs similarity index 94% rename from Toastify/src/UI/Toast.xaml.cs rename to Toastify/src/View/ToastView.xaml.cs index 156eafc7..ec7dddce 100644 --- a/Toastify/src/UI/Toast.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -20,6 +20,7 @@ using Toastify.Core; using Toastify.Events; using Toastify.Helpers; +using Toastify.Model; using Toastify.Services; using ToastifyAPI.Plugins; using Application = System.Windows.Application; @@ -30,10 +31,10 @@ using MouseEventArgs = System.Windows.Input.MouseEventArgs; using Timer = System.Timers.Timer; -namespace Toastify.UI +namespace Toastify.View { [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] - public partial class Toast : Window + public partial class ToastView : Window { // TODO: Actually implement the MVVM pattern: create ViewModels for every View. @@ -42,7 +43,7 @@ public partial class Toast : Window private const string ALBUM_ACCESS_DENIED_ICON = "pack://application:,,,/Toastify;component/Resources/ToastifyAccessDenied.png"; private const string UPDATE_LOGO_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyUpdateLogo.png"; - internal static Toast Current { get; private set; } + internal static ToastView Current { get; private set; } #region Private fields @@ -74,7 +75,7 @@ public partial class Toast : Window #endregion Events - public Toast() + public ToastView() { this.InitializeComponent(); @@ -109,26 +110,26 @@ private void LoadSettings() { try { - SettingsXml.Instance.Load(); + Settings.Instance.Load(); } catch (Exception ex) { Debug.WriteLine("Exception loading settings:\n" + ex); - string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, SettingsXml.Instance.SettingsFile); + string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - SettingsXml.Instance.Default(true); + Settings.Instance.Default(true); } string version = VersionChecker.CurrentVersion; Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); - if (SettingsXml.Instance.PreviousVersion != version) + if (Settings.Instance.PreviousVersion != version) { Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - SettingsXml.Instance.PreviousVersion = version; + Settings.Instance.PreviousVersion = version; } } @@ -141,7 +142,7 @@ public void InitToast() // TODO: Refactor InitToast method. //This method is UGLY but we'll keep it until the settings dialog is implemented. - SettingsXml settings = SettingsXml.Instance; + Settings settings = Settings.Instance; this.Width = settings.ToastWidth >= this.MinWidth ? settings.ToastWidth : this.MinWidth; this.Height = settings.ToastHeight >= this.MinHeight ? settings.ToastHeight : this.MinHeight; @@ -183,10 +184,10 @@ private void InitTrayIcon() //Init tray icon menu MenuItem menuSettings = new MenuItem { Text = @"Settings" }; - menuSettings.Click += (s, ev) => { Settings.Launch(this); }; + menuSettings.Click += (s, ev) => { SettingsView.Launch(this); }; MenuItem menuAbout = new MenuItem { Text = @"About Toastify..." }; - menuAbout.Click += (s, ev) => { new About().ShowDialog(); }; + menuAbout.Click += (s, ev) => { new AboutView().ShowDialog(); }; MenuItem menuExit = new MenuItem { Text = @"Exit" }; menuExit.Click += this.Application_Shutdown; @@ -244,7 +245,7 @@ private void LoadPlugins() { string applicationPath = new FileInfo(assembly.Location).DirectoryName; - foreach (var p in SettingsXml.Instance.Plugins) + foreach (var p in Settings.Instance.Plugins) { try { @@ -305,14 +306,14 @@ private void UpdateCurrentSong(Song song) this.UpdateSongProgressBar(0.0); // Save track info to file. - if (SettingsXml.Instance.SaveTrackToFile) + if (Settings.Instance.SaveTrackToFile) { - if (!string.IsNullOrEmpty(SettingsXml.Instance.SaveTrackToFilePath)) + if (!string.IsNullOrEmpty(Settings.Instance.SaveTrackToFilePath)) { try { - string trackText = this.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate); - File.WriteAllText(SettingsXml.Instance.SaveTrackToFilePath, trackText); + string trackText = this.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate); + File.WriteAllText(Settings.Instance.SaveTrackToFilePath, trackText); } catch { @@ -429,8 +430,8 @@ private void ShowToast(bool shallBeVisible) if (shallBeVisible) { - this.Left = SettingsXml.Instance.PositionLeft; - this.Top = SettingsXml.Instance.PositionTop; + this.Left = Settings.Instance.PositionLeft; + this.Top = Settings.Instance.PositionTop; this.ResetPositionIfOffScreen(); } } @@ -440,8 +441,8 @@ private void FadeIn(bool force = false, bool isUpdate = false) this.minimizeTimer?.Stop(); bool doNotFadeIn = this.dragging || - (SettingsXml.Instance.DisableToast || (SettingsXml.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || - (SettingsXml.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); + (Settings.Instance.DisableToast || (Settings.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || + (Settings.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); if (doNotFadeIn) return; @@ -449,7 +450,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) // as this will be triggered when a song is played. The primary problem is if there is a // particularly long song then this will not work. That said, this is the safest (in terms of // not causing a user's computer from never sleeping). - if (SettingsXml.Instance.PreventSleepWhilePlaying) + if (Settings.Instance.PreventSleepWhilePlaying) { #if DEBUG var rv = @@ -479,7 +480,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) // Reset the timer's Interval so that the toast does not fade out while pressing the hotkeys. this.BeginAnimation(OpacityProperty, null); this.Opacity = 1.0; - this.minimizeTimer.Interval = SettingsXml.Instance.FadeOutTime; + this.minimizeTimer.Interval = Settings.Instance.FadeOutTime; this.minimizeTimer.Start(); } } @@ -487,7 +488,7 @@ private void FadeIn(bool force = false, bool isUpdate = false) private void FadeOut(bool now = false) { // 16 == one frame (0 is not a valid interval) - var interval = now ? 16 : SettingsXml.Instance.FadeOutTime; + var interval = now ? 16 : Settings.Instance.FadeOutTime; if (this.minimizeTimer == null) { @@ -608,7 +609,7 @@ private void UpdateSongProgressBar(double trackTime) protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { // Close Spotify first. - if (SettingsXml.Instance.CloseSpotifyWithToastify) + if (Settings.Instance.CloseSpotifyWithToastify) Spotify.Instance.Kill(); // Dispose the timer. @@ -659,12 +660,12 @@ internal static void HotkeyActionCallback(Hotkey hotkey) if (hotkey.Action == SpotifyAction.CopyTrackInfo && Current.currentSong != null) { Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); - Clipboard.SetText(Current.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + Clipboard.SetText(Current.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate)); } else if (hotkey.Action == SpotifyAction.PasteTrackInfo && Current.currentSong != null) { Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); - Clipboard.SetText(Current.currentSong.GetClipboardText(SettingsXml.Instance.ClipboardTemplate)); + Clipboard.SetText(Current.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate)); Win32API.SendPasteKey(); } else @@ -735,7 +736,7 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) this.dragging = false; // Save the new window position - SettingsXml settings = SettingsXml.Instance; + Settings settings = Settings.Instance; settings.PositionLeft = this.Left; settings.PositionTop = this.Top; @@ -817,7 +818,7 @@ private void TrayIcon_MouseClick(object s, System.Windows.Forms.MouseEventArgs e private void TrayIcon_DoubleClick(object s, EventArgs ev) { - Settings.Launch(this); + SettingsView.Launch(this); } private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs new file mode 100644 index 00000000..9b216b87 --- /dev/null +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -0,0 +1,107 @@ +using System; +using System.Windows.Forms; +using Toastify.Common; +using Toastify.Helpers; +using Toastify.Model; + +namespace Toastify.ViewModel +{ + public class SettingsViewModel : ObservableObject + { + public Settings Settings { get; } + + #region Commands + + public DelegateCommand SaveCommand { get; } + + public DelegateCommand DefaultCommand { get; } + + public DelegateCommand SelectFileForSavingTrackCommand { get; } + + public DelegateCommand ChangeToastColorTopCommand { get; } + + public DelegateCommand ChangeToastColorBottomCommand { get; } + + public DelegateCommand ChangeToastBorderColorCommand { get; } + + #endregion Commands + + /// + /// Occurs when after a Save command. + /// + public event EventHandler SettingsSaved; + + public SettingsViewModel() + { + this.Settings = Settings.Instance.Clone(); + + this.SaveCommand = new DelegateCommand(this.Save); + this.DefaultCommand = new DelegateCommand(this.Default); + this.SelectFileForSavingTrackCommand = new DelegateCommand(this.SelectFileForSavingTrack); + this.ChangeToastColorTopCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastTop, hex)); + this.ChangeToastColorBottomCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastBottom, hex)); + this.ChangeToastBorderColorCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastBorder, hex)); + } + + private void Save() + { + this.Settings.Save(true); + this.SettingsSaved?.Invoke(this, EventArgs.Empty); + } + + private void Default() + { + this.Settings.Default(); + this.Save(); + } + + private void SelectFileForSavingTrack() + { + var dialog = new OpenFileDialog() + { + FileName = Settings.Instance.SaveTrackToFilePath ?? string.Empty, + CheckPathExists = true, + CheckFileExists = false, + ShowReadOnly = false + }; + + if (dialog.ShowDialog() == DialogResult.OK) + this.Settings.SaveTrackToFilePath = dialog.FileName; + } + + private void ChangeToastColor(ColorChangeTarget target, string hexColor) + { + string alpha = hexColor.Substring(1, 2); + ColorDialog dialog = new ColorDialog + { + Color = ColorHelper.HexToColor(hexColor) + }; + dialog.ShowDialog(); + + var color = dialog.Color; + string newHexColor = $"#{alpha}{color.R:X2}{color.G:X2}{color.B:X2}"; + + switch (target) + { + case ColorChangeTarget.ToastTop: + this.Settings.ToastColorTop = newHexColor; + break; + + case ColorChangeTarget.ToastBottom: + this.Settings.ToastColorBottom = newHexColor; + break; + + case ColorChangeTarget.ToastBorder: + this.Settings.ToastBorderColor = newHexColor; + break; + } + } + + private enum ColorChangeTarget + { + ToastTop, + ToastBottom, + ToastBorder + } + } +} \ No newline at end of file From fb288c58c81bab811f465f3c3301df73b17f205c Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 23 Aug 2017 00:57:10 +0200 Subject: [PATCH 075/452] Apply MVVM pattern to AboutView --- Toastify/Toastify.csproj | 1 + Toastify/src/Services/VersionChecker.cs | 6 ++--- Toastify/src/View/AboutView.xaml | 30 +++++++++++++++--------- Toastify/src/View/AboutView.xaml.cs | 10 +------- Toastify/src/View/ToastView.xaml.cs | 2 +- Toastify/src/ViewModel/AboutViewModel.cs | 21 +++++++++++++++++ 6 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 Toastify/src/ViewModel/AboutViewModel.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 621dca7b..2d02f282 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -141,6 +141,7 @@ + diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 45d8e489..eaa92bf5 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -36,9 +36,9 @@ public static string CurrentVersion } } - public string UpdateUrl { get { return "https://github.com/aleab/toastify/releases"; } } + public static string UpdateUrl { get { return "https://github.com/aleab/toastify/releases"; } } - public string VersionUrl { get { return "https://raw.githubusercontent.com/aleab/toastify/master/Toastify/version"; } } + public static string VersionUrl { get { return "https://raw.githubusercontent.com/aleab/toastify/master/Toastify/version"; } } private readonly WebClient wc; @@ -59,7 +59,7 @@ public void BeginCheckVersion() private void ThreadedBeginCheckVersion() { //WebClients XXXAsync isn't as async as I wanted... - this.wc.DownloadStringAsync(new Uri(this.VersionUrl)); + this.wc.DownloadStringAsync(new Uri(VersionUrl)); } private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) diff --git a/Toastify/src/View/AboutView.xaml b/Toastify/src/View/AboutView.xaml index d6fecb22..be9c84c1 100644 --- a/Toastify/src/View/AboutView.xaml +++ b/Toastify/src/View/AboutView.xaml @@ -1,10 +1,13 @@  + Title="About" Height="180" Width="340" AllowsTransparency="True" Background="Transparent" + ShowInTaskbar="False" WindowStartupLocation="CenterOwner" WindowStyle="None" Loaded="Window_Loaded" Topmost="True"> + @@ -14,7 +17,7 @@ - + @@ -41,22 +44,27 @@ Toastify - + + {version} - + + - + - github.com/aleab/toastify + + github.com/aleab/toastify + - Checking for updates... - Credits to: Linus, Maaaackan, Aqualize, ncahmore, aleab... + + Checking for updates... + + Credits to: Linus, Maaaackan, Aqualize, nachmore, aleab... Created by Jesper Palm 2009, licensed under GPLv2. diff --git a/Toastify/src/View/AboutView.xaml.cs b/Toastify/src/View/AboutView.xaml.cs index dac20786..67390833 100644 --- a/Toastify/src/View/AboutView.xaml.cs +++ b/Toastify/src/View/AboutView.xaml.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Windows; using System.Windows.Documents; @@ -23,8 +22,6 @@ public AboutView() this.versionChecker = new VersionChecker(); this.versionChecker.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; - - this.DataContext = this.versionChecker; } private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) @@ -46,11 +43,6 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp }, System.Windows.Threading.DispatcherPriority.Normal); } - private void Link_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) - { - Process.Start("https://github.com/aleab/toastify"); - } - private void Border_MouseUp(object sender, MouseButtonEventArgs e) { this.Close(); diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index ec7dddce..914a7068 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -724,7 +724,7 @@ private void Window_MouseDown(object sender, MouseButtonEventArgs e) this.FadeOut(true); if (this.isUpdateToast) - Process.Start(new ProcessStartInfo(this.versionChecker.UpdateUrl)); + Process.Start(new ProcessStartInfo(VersionChecker.UpdateUrl)); else Spotify.Instance.SendAction(SpotifyAction.ShowSpotify); } diff --git a/Toastify/src/ViewModel/AboutViewModel.cs b/Toastify/src/ViewModel/AboutViewModel.cs new file mode 100644 index 00000000..b9aebea7 --- /dev/null +++ b/Toastify/src/ViewModel/AboutViewModel.cs @@ -0,0 +1,21 @@ +using System; +using Toastify.Common; +using Toastify.Services; + +namespace Toastify.ViewModel +{ + public class AboutViewModel : ObservableObject + { + public const string HOMEPAGE_URL = "http://github.com/aleab/toastify"; + + private readonly Uri homepageUri = new Uri(HOMEPAGE_URL); + + public string ToastifyVersion { get { return VersionChecker.CurrentVersion; } } + + public string HomepageUrl { get { return HOMEPAGE_URL; } } + + public string HomepageUrlNoScheme { get { return $"{this.homepageUri.Host}{this.homepageUri.PathAndQuery}"; } } + + public string UpdateUrl { get { return VersionChecker.UpdateUrl; } } + } +} \ No newline at end of file From 7f03d20151d08b04b079802727c219c9b59801b8 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 17:01:17 +0200 Subject: [PATCH 076/452] Apply MVVM pattern to ToastView --- Toastify/Toastify.csproj | 1 + Toastify/src/View/ToastView.xaml | 14 +- Toastify/src/View/ToastView.xaml.cs | 158 ++++++++++++----------- Toastify/src/ViewModel/ToastViewModel.cs | 35 +++++ 4 files changed, 125 insertions(+), 83 deletions(-) create mode 100644 Toastify/src/ViewModel/ToastViewModel.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 2d02f282..769cf0a7 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -143,6 +143,7 @@ + Designer diff --git a/Toastify/src/View/ToastView.xaml b/Toastify/src/View/ToastView.xaml index 62265fd1..4b2dc3e6 100644 --- a/Toastify/src/View/ToastView.xaml +++ b/Toastify/src/View/ToastView.xaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:viewmodel="clr-namespace:Toastify.ViewModel" mc:Ignorable="d" x:Class="Toastify.View.ToastView" Width="250" Height="70" MinWidth="250" MinHeight="70" AllowsTransparency="True" Background="#00000000" Opacity="1" @@ -23,7 +24,7 @@ --> - + @@ -35,7 +36,7 @@ - @@ -47,20 +48,19 @@ - + - Paramore - Let The Flames Begin - + + - + diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 914a7068..98d86d52 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -22,6 +22,7 @@ using Toastify.Helpers; using Toastify.Model; using Toastify.Services; +using Toastify.ViewModel; using ToastifyAPI.Plugins; using Application = System.Windows.Application; using Clipboard = System.Windows.Clipboard; @@ -47,6 +48,8 @@ public partial class ToastView : Window #region Private fields + private readonly ToastViewModel toastViewModel; + private Timer minimizeTimer; private NotifyIcon trayIcon; @@ -79,6 +82,9 @@ public ToastView() { this.InitializeComponent(); + this.toastViewModel = new ToastViewModel(); + this.DataContext = this.toastViewModel; + // Set a static reference back to ourselves, useful for callbacks. Current = this; } @@ -351,7 +357,7 @@ private void UpdateCoverArt(bool forceUpdate = false) finally { this.cover.EndInit(); - this.LogoToast.Source = this.cover; + this.AlbumArt.Source = this.cover; } })); } @@ -411,15 +417,10 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t /// Whethere or not this update is caused by . private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false, bool isUpdate = false) { - this.Dispatcher.Invoke( - DispatcherPriority.Normal, - new Action(() => - { - this.Title1.Text = title1; - this.Title2.Text = title2; - if (fadeIn) - this.FadeIn(force, isUpdate); - })); + this.toastViewModel.Title1 = title1; + this.toastViewModel.Title2 = title2; + if (fadeIn) + this.FadeIn(force, isUpdate); } private void ShowToast(bool shallBeVisible) @@ -438,84 +439,94 @@ private void ShowToast(bool shallBeVisible) private void FadeIn(bool force = false, bool isUpdate = false) { - this.minimizeTimer?.Stop(); - - bool doNotFadeIn = this.dragging || - (Settings.Instance.DisableToast || (Settings.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || - (Settings.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); - if (doNotFadeIn) - return; - - // this is a convenient place to reset the idle timer (if so asked) - // as this will be triggered when a song is played. The primary problem is if there is a - // particularly long song then this will not work. That said, this is the safest (in terms of - // not causing a user's computer from never sleeping). - if (Settings.Instance.PreventSleepWhilePlaying) - { + this.Dispatcher.Invoke( + DispatcherPriority.Normal, + new Action(() => + { + this.minimizeTimer?.Stop(); + + bool doNotFadeIn = this.dragging || + (Settings.Instance.DisableToast || (Settings.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || + (Settings.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); + if (doNotFadeIn) + return; + + // this is a convenient place to reset the idle timer (if so asked) + // as this will be triggered when a song is played. The primary problem is if there is a + // particularly long song then this will not work. That said, this is the safest (in terms of + // not causing a user's computer from never sleeping). + if (Settings.Instance.PreventSleepWhilePlaying) + { #if DEBUG - var rv = + var rv = #endif Win32API.SetThreadExecutionState(Win32API.ExecutionStateFlags.ES_SYSTEM_REQUIRED); #if DEBUG - Debug.WriteLine("** SetThreadExecutionState returned: " + rv); + Debug.WriteLine("** SetThreadExecutionState returned: " + rv); #endif - } + } - this.isUpdateToast = isUpdate; + this.isUpdateToast = isUpdate; - if (!this.IsToastVisible) - { - this.ShowToast(true); + if (!this.IsToastVisible) + { + this.ShowToast(true); - DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); - anim.Completed += (s, e) => - { - this.IsToastVisible = true; - this.FadeOut(); - }; - this.BeginAnimation(OpacityProperty, anim); - } - else if (this.minimizeTimer != null) - { - // Reset the timer's Interval so that the toast does not fade out while pressing the hotkeys. - this.BeginAnimation(OpacityProperty, null); - this.Opacity = 1.0; - this.minimizeTimer.Interval = Settings.Instance.FadeOutTime; - this.minimizeTimer.Start(); - } + DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); + anim.Completed += (s, e) => + { + this.IsToastVisible = true; + this.FadeOut(); + }; + this.BeginAnimation(OpacityProperty, anim); + } + else if (this.minimizeTimer != null) + { + // Reset the timer's Interval so that the toast does not fade out while pressing the hotkeys. + this.BeginAnimation(OpacityProperty, null); + this.Opacity = 1.0; + this.minimizeTimer.Interval = Settings.Instance.FadeOutTime; + this.minimizeTimer.Start(); + } + })); } private void FadeOut(bool now = false) { - // 16 == one frame (0 is not a valid interval) - var interval = now ? 16 : Settings.Instance.FadeOutTime; - - if (this.minimizeTimer == null) - { - this.minimizeTimer = new Timer { AutoReset = false }; - this.minimizeTimer.Elapsed += (s, e) => + this.Dispatcher.Invoke( + DispatcherPriority.Normal, + new Action(() => { - try + // 16 == one frame (0 is not a valid interval) + var interval = now ? 16 : Settings.Instance.FadeOutTime; + + if (this.minimizeTimer == null) { - this.Dispatcher.Invoke(() => + this.minimizeTimer = new Timer { AutoReset = false }; + this.minimizeTimer.Elapsed += (s, e) => { - DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); - anim.Completed += (ss, ee) => + try { - this.ShowToast(false); - this.IsToastVisible = false; - }; - this.BeginAnimation(OpacityProperty, anim); - }); + this.Dispatcher.Invoke(() => + { + DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); + anim.Completed += (ss, ee) => + { + this.ShowToast(false); + this.IsToastVisible = false; + }; + this.BeginAnimation(OpacityProperty, anim); + }); + } + catch (TaskCanceledException) { } + }; } - catch (TaskCanceledException) { } - }; - } - this.minimizeTimer.Interval = interval; + this.minimizeTimer.Interval = interval; - this.minimizeTimer.Stop(); - this.minimizeTimer.Start(); + this.minimizeTimer.Stop(); + this.minimizeTimer.Start(); + })); } private void ResetPositionIfOffScreen() @@ -597,13 +608,8 @@ public void DisplayAction(SpotifyAction action) private void UpdateSongProgressBar(double trackTime) { - this.Dispatcher.Invoke( - DispatcherPriority.Normal, - new Action(() => - { - double timePercentage = trackTime / this.currentSong?.Length ?? trackTime; - this.SongProgressBar.Width = this.SongProgressBarContainer.ActualWidth * timePercentage; - })); + double timePercentage = trackTime / this.currentSong?.Length ?? trackTime; + this.toastViewModel.SongProgressBarWidth = this.SongProgressBarContainer.ActualWidth * timePercentage; } protected override void OnClosing(System.ComponentModel.CancelEventArgs e) diff --git a/Toastify/src/ViewModel/ToastViewModel.cs b/Toastify/src/ViewModel/ToastViewModel.cs new file mode 100644 index 00000000..d28598cc --- /dev/null +++ b/Toastify/src/ViewModel/ToastViewModel.cs @@ -0,0 +1,35 @@ +using System.Windows; +using Toastify.Common; + +namespace Toastify.ViewModel +{ + public class ToastViewModel : ObservableObject + { + private string _title1; + private string _title2; + private double _songProgressBarWidth; + + public string Title1 + { + get { return this._title1; } + set { this.RaiseAndSetIfChanged(ref this._title1, value); } + } + + public string Title2 + { + get { return this._title2; } + set { this.RaiseAndSetIfChanged(ref this._title2, value); } + } + + public Visibility SongProgressBarVisibility + { + get { return Visibility.Hidden; /*Settings.Instance.ShowSongProgressBar ? SongProgressBarVisibility.Visible : SongProgressBarVisibility.Hidden;*/ } + } + + public double SongProgressBarWidth + { + get { return this._songProgressBarWidth; } + set { this.RaiseAndSetIfChanged(ref this._songProgressBarWidth, value); } + } + } +} \ No newline at end of file From f303924d5ebed52e630730b88c2e4c2ab1852518 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 18:12:36 +0200 Subject: [PATCH 077/452] Fix connection issue with newest version of Spotify (1.0.62) (#8) --- Toastify/Toastify.csproj | 2 +- Toastify/app.config | 8 ++++---- Toastify/packages.config | 2 +- Toastify/src/Core/Spotify.cs | 22 +++++++++++++++++++--- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 769cf0a7..d13927b4 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -99,7 +99,7 @@ ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\packages\SpotifyAPI-NET.2.14.2\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.16.0\lib\SpotifyAPI.dll diff --git a/Toastify/app.config b/Toastify/app.config index 1f0a2a65..7609e97c 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,11 +1,11 @@ - + - + - - + + diff --git a/Toastify/packages.config b/Toastify/packages.config index f59dbc57..28cf61b8 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index f1f93240..2236a277 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -30,6 +30,8 @@ public static Spotify Instance private readonly SpotifyLocalAPI localAPI; + private readonly SpotifyLocalAPIConfig localAPIConfig; + private readonly string spotifyPath; private Process spotifyProcess; @@ -84,8 +86,9 @@ protected Spotify() { this.spotifyPath = this.GetSpotifyPath(); - // Connect with Spotify to use the local API. - this.localAPI = new SpotifyLocalAPI(); + // SpotifyLocalAPI + this.localAPIConfig = new SpotifyLocalAPIConfig(); + this.localAPI = new SpotifyLocalAPI(this.localAPIConfig); // Subscribe to SpotifyLocalAPI's events. this.localAPI.OnTrackChange += this.SpotifyLocalAPI_OnTrackChange; @@ -153,6 +156,19 @@ private void ConnectWithSpotify() // Pre-emptive wait, in case some fool set SpotifyConnectionAttempts to 1! ;) Thread.Sleep(500); + // TODO: Remove the following lines once Spotify version > 1.0.62 comes out + FileVersionInfo spotifyVersionInfo = this.spotifyProcess.MainModule.FileVersionInfo; + Version spotifyVersion = new Version( + spotifyVersionInfo.ProductMajorPart, + spotifyVersionInfo.ProductMinorPart, + spotifyVersionInfo.ProductBuildPart, + spotifyVersionInfo.ProductPrivatePart); + if (spotifyVersion < new Version(1, 0, 62)) + { + this.localAPIConfig.HostUrl = "https://127.0.0.1"; + this.localAPIConfig.Port = 4371; + } + int maxAttempts = Settings.Instance.SpotifyConnectionAttempts; bool connected; int attempts = 1; @@ -164,7 +180,7 @@ private void ConnectWithSpotify() if (!connected) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECT); - Debug.WriteLine($"Connected with Spotify after {attempts} attempt(s)."); + Debug.WriteLine($"Connected with Spotify after {attempts} attempt(s) on \"{this.localAPIConfig.HostUrl}:{this.localAPIConfig.Port}/\"."); var status = this.localAPI.GetStatus(); if (status == null) From ab11aacc9a14e223ffd48e850f0bfe568520468d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 18:13:26 +0200 Subject: [PATCH 078/452] Remove unnecessary null checks --- Toastify/src/Services/VersionChecker.cs | 7 ++-- Toastify/src/View/ToastView.xaml.cs | 44 ++++++++++--------------- 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index eaa92bf5..ca921643 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -19,11 +19,8 @@ public static string CurrentVersion if (_version == null) { var assembly = Assembly.GetExecutingAssembly(); - if (assembly.Location != null) - { - var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); - _version = fileVersionInfo.FileVersion; - } + var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); + _version = fileVersionInfo.FileVersion; if (_version != null) { diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 98d86d52..d4388198 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -247,38 +247,30 @@ private void LoadPlugins() { this.Plugins = new List(); Assembly assembly = Assembly.GetExecutingAssembly(); - if (assembly.Location != null) - { - string applicationPath = new FileInfo(assembly.Location).DirectoryName; + string applicationPath = new FileInfo(assembly.Location).DirectoryName; - foreach (var p in Settings.Instance.Plugins) + foreach (var p in Settings.Instance.Plugins) + { + try { - try + string pluginFilePath = Path.Combine(applicationPath, p.FileName); + if (Activator.CreateInstanceFrom(pluginFilePath, p.TypeName).Unwrap() is IPluginBase plugin) { - if (applicationPath != null) - { - string pluginFilePath = Path.Combine(applicationPath, p.FileName); - if (Activator.CreateInstanceFrom(pluginFilePath, p.TypeName).Unwrap() is IPluginBase plugin) - { - plugin.Init(p.Settings); - this.Plugins.Add(plugin); + plugin.Init(p.Settings); + this.Plugins.Add(plugin); - this.Started += plugin.Started; - this.ToastClosing += plugin.Closing; - Spotify.Instance.SongChanged += (sender, e) => plugin.TrackChanged(sender, e); - } - else - Debug.WriteLine("'plugin' is not of type IPluginBase (?)"); - } - else - Debug.WriteLine("'applicationPath' is null"); - } - catch (Exception) - { - // TODO: Handle plugins' errors. + this.Started += plugin.Started; + this.ToastClosing += plugin.Closing; + Spotify.Instance.SongChanged += (sender, e) => plugin.TrackChanged(sender, e); } - Console.WriteLine(@"Loaded " + p.TypeName); + else + Debug.WriteLine("'plugin' is not of type IPluginBase (?)"); + } + catch (Exception) + { + // TODO: Handle plugins' errors. } + Console.WriteLine(@"Loaded " + p.TypeName); } } From 572219b253aa8a3fdca25ba3de31b5c94d5d9b69 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 18:49:01 +0200 Subject: [PATCH 079/452] Changed solution and projects build configurations --- ExamplePlugin/ExamplePlugin.csproj | 40 +----------------- Toastify.sln | 14 ++++++- Toastify/Toastify.csproj | 52 ++++------------------- Toastify/post-build.cmd | 67 ++++++++++++++++++++++-------- ToastifyAPI/ToastifyAPI.csproj | 1 + 5 files changed, 73 insertions(+), 101 deletions(-) diff --git a/ExamplePlugin/ExamplePlugin.csproj b/ExamplePlugin/ExamplePlugin.csproj index 78ae32ed..92ca219a 100644 --- a/ExamplePlugin/ExamplePlugin.csproj +++ b/ExamplePlugin/ExamplePlugin.csproj @@ -1,10 +1,9 @@  - + Debug AnyCPU - 9.0.30729 - 2.0 + 7 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40} Library Properties @@ -12,25 +11,7 @@ ExamplePlugin v4.5 512 - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true SAK SAK SAK @@ -87,23 +68,6 @@ - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - {5d68931f-528f-4d95-89be-3eb26832af8c} diff --git a/Toastify.sln b/Toastify.sln index a73f1c7f..c9702f90 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -1,8 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.14 -MinimumVisualStudioVersion = 10.0.40219.1 +VisualStudioVersion = 15.0.26430.16 +MinimumVisualStudioVersion = 15.0.26430.14 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installation", "Installation", "{FCD4BE87-8354-47A1-85DE-709E35559000}" ProjectSection(SolutionItems) = preProject InstallationScript\DotNetChecker.nsh = InstallationScript\DotNetChecker.nsh @@ -15,6 +15,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExamplePlugin", "ExamplePlu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToastifyAPI", "ToastifyAPI\ToastifyAPI.csproj", "{5D68931F-528F-4D95-89BE-3EB26832AF8C}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Files", "Solution Files", "{39A4F7F1-FC00-4249-832A-47B4AF287F80}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + LICENSE = LICENSE + LICENSE-3RD-PARTY = LICENSE-3RD-PARTY + README.md = README.md + update-version.cmd = update-version.cmd + update-version.ps1 = update-version.ps1 + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Windows (Debug)|Any CPU = Windows (Debug)|Any CPU diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index d13927b4..807cd342 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -1,10 +1,9 @@  - + Windows (Debug) x64 - 9.0.30729 - 2.0 + 7 {CCC4A761-56D2-4188-807F-F7A547DFB031} WinExe Properties @@ -17,8 +16,6 @@ app.manifest Resources\spotify.ico Toastify.EntryPoint - - 3.5 true @@ -26,32 +23,10 @@ SAK SAK SAK - publish\ true - Web - true - Foreground - 7 - Days - false - false true - http://toastify.codeplex.com/ - true - publish.htm - 1 - 1.0.0.%2a - false - true - true - - D38DAF47B3CBFC190231922089F056B55D662088 - Toastify_TemporaryKey.pfx - true - false - true bin\Debug\Windows\ @@ -207,11 +182,17 @@ Resources.Designer.cs + LICENSE + Always + + + LICENSE-3RD-PARTY Always + SettingsSingleFileGenerator Settings.Designer.cs @@ -224,23 +205,6 @@ ToastifyAPI - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - diff --git a/Toastify/post-build.cmd b/Toastify/post-build.cmd index f9214ebc..cb656248 100644 --- a/Toastify/post-build.cmd +++ b/Toastify/post-build.cmd @@ -1,25 +1,58 @@ @ECHO OFF - SetLocal EnableExtensions EnableDelayedExpansion -SET ConfigurationName=%~1 -SET DevEnvDir=%~2 -SET SolutionDir=%~3 -SET TargetDir=%~4 -SET TargetFileName=%~5 +SET nsisInstallerFileName=ToastifyInstaller.exe +SET sfxArchiveName=ToastifyInstaller + + +:: ----------[ POST_BUILD ]-------------------------------- +:: [in]ConfigurationName [in]DevEnvDir [in]SolutionDir [in]TargetDir [in]TargetFileName + +SET "ConfigurationName=%~1" +SET "DevEnvDir=%~2" +SET "SolutionDir=%~3" +SET "TargetDir=%~4" +SET "TargetFileName=%~5" + +IF NOT ["%ConfigurationName:~0,7%"]==["Windows"] ( + GOTO :EOF +) +IF ["%ConfigurationName:Release=%"]==["%ConfigurationName%"] ( + GOTO :EOF +) + +:: It's a Windows Release configuration -IF "%ConfigurationName:~0,7%"=="Windows" IF NOT "x%ConfigurationName:Release=%"=="x%ConfigurationName%" ( - :: It's a Windows Release configuration - ECHO - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" +:: CALL VsDevCmd +ECHO; +ECHO - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" +CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" - ECHO - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" - DEL "%TargetDir%%TargetFileName%.manifest" +:: Manifest +ECHO; +ECHO - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" +mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" +DEL "%TargetDir%%TargetFileName%.manifest" - ECHO - Copy install script - COPY /Y "%SolutionDir%InstallationScript\Install.nsi" "%TargetDir%Install.nsi" - COPY /Y "%SolutionDir%InstallationScript\DotNetChecker.nsh" "%TargetDir%DotNetChecker.nsh" +:: Copy installation scripts +ECHO; +ECHO - Copy install script +COPY /Y "%SolutionDir%InstallationScript\Install.nsi" "%TargetDir%Install.nsi" +COPY /Y "%SolutionDir%InstallationScript\DotNetChecker.nsh" "%TargetDir%DotNetChecker.nsh" + +:: Check if makensis.exe is in the PATH +makensis /VERSION 1>NUL 2>&1 +IF ERRORLEVEL 9009 ( + ECHO; + ECHO ERROR: Couldn't find 'makensis' in the PATH! + ECHO Make sure NSIS is installed in your system and its 'Bin' directory is in the PATH environment variable. + ECHO; + GOTO :EOF ) -EndLocal \ No newline at end of file +CD "%TargetDir%" + +:: Compile NSIS installer +ECHO; +ECHO - Compile NSIS installer +makensis Install.nsi || GOTO :EOF diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index ef883ce1..abc0c0c3 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -4,6 +4,7 @@ Windows (Debug) x64 + 7 {5D68931F-528F-4D95-89BE-3EB26832AF8C} Library Properties From 719cf02ce0ef0a37a56341eaaa3db6dc183b67b4 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 18:49:11 +0200 Subject: [PATCH 080/452] Update README.md --- README.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ddde8edb..cf250b4a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Toastify -Toastify +![toastify-showcase][toastify-showcase] Toastify adds global hotkeys and toast notifications to Spotify. @@ -16,11 +16,23 @@ This application uses [SpotifyAPI-NET](https://github.com/JohnnyCrazy/SpotifyAPI * .NET Framework 4.5.* * Spotify -## Notice -Toastify is **not** a Spotify **replacement**. You need both running at the same time. +## Notices +* Toastify is **not** a Spotify **replacement**. You need both running at the same time. +* **Windows 10**: In the latest versions of Windows, SmartScreen will probably prevent the installer from starting, because it is not signed. + You have two options: either *Don't run* the installer and forget about Toastify, or click on *More info* and *Run anyway*. + Whatever is your choice, I strongly advise you to **not** disable Windows SmartScreen — its warnings are meaningful. + + If you have any concerns, feel free to take a look at the code (it's free :wink:) and ask questions in the [issues](https://github.com/aleab/toastify/issues) section. + +## Information for contributors +* The language version used to build the projects is C# 7 +* The solution requires Visual Studio 2017 (or Visual Studio Code, alternatively) ## License This software is licensed under the GNU GPL-2.0; the complete license text can be found [here](/LICENSE). See also the [original project](https://github.com/nachmore/toastify) this repository is a fork of, and its old [codeplex page](http://toastify.codeplex.com/). This project uses third-party libraries; their verbatim licenses can be found [here](/LICENSE-3RD-PARTY). + + +[toastify-showcase]: https://raw.githubusercontent.com/aleab/toastify/gh-pages/images/toastify-showcase.png "Toastify" From 280c40d8ab83fa1ad7f053ac233a2d9eb075c051 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 19:10:45 +0200 Subject: [PATCH 081/452] Update post-build.cmd --- Toastify/post-build.cmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Toastify/post-build.cmd b/Toastify/post-build.cmd index cb656248..16a2b0f8 100644 --- a/Toastify/post-build.cmd +++ b/Toastify/post-build.cmd @@ -29,10 +29,10 @@ ECHO - CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" CALL "%DevEnvDir%..\Tools\VsDevCmd.bat" :: Manifest -ECHO; -ECHO - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" -mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" -DEL "%TargetDir%%TargetFileName%.manifest" +::ECHO; +::ECHO - mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" +::mt.exe -nologo -manifest "%TargetDir%%TargetFileName%.manifest" -outputresource:"%TargetDir%%TargetFileName%;#1" +::DEL "%TargetDir%%TargetFileName%.manifest" :: Copy installation scripts ECHO; From 364b5dd3583a14a288b09c1298254b170c11aca8 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 19:18:27 +0200 Subject: [PATCH 082/452] Add LICENSE-3RD-PARTY to the installed files --- InstallationScript/Install.nsi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index cb3d6848..ca15aca1 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -73,6 +73,7 @@ Section "Toastify (required)" File "Newtonsoft.Json.dll" File "SpotifyAPI.dll" File "LICENSE" + File "LICENSE-3RD-PARTY" # Write the uninstall keys for Windows WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayName" "Toastify" @@ -121,6 +122,7 @@ Section "Uninstall" Delete "$INSTDIR\Newtonsoft.Json.dll" Delete "$INSTDIR\SpotifyAPI.dll" Delete "$INSTDIR\LICENSE" + Delete "$INSTDIR\LICENSE-3RD-PARTY" Delete "$INSTDIR\uninstall.exe" # remove the settings directory From 1b044db9ae63978964b655e3111811c8d7f11ea6 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 3 Sep 2017 19:18:58 +0200 Subject: [PATCH 083/452] v1.9.6 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index ca15aca1..ef689692 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -80,8 +80,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.5" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.5" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.6" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.6" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index c20b133b..19a1d954 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.5.*")] +[assembly: AssemblyVersion("1.9.6.*")] diff --git a/Toastify/version b/Toastify/version index 6ecac681..b4cac6fa 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.5 \ No newline at end of file +1.9.6 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index 8abe14c6..599b277d 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.5.*")] +[assembly: AssemblyVersion("1.9.6.*")] From adb9beaa2b38fdfe79b3c07b5082ec1cc10bac3d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Mon, 4 Sep 2017 16:33:23 +0200 Subject: [PATCH 084/452] Fix version and homepage url not showing up in the about view --- Toastify/src/View/AboutView.xaml | 5 ++--- Toastify/src/View/AboutView.xaml.cs | 3 +++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Toastify/src/View/AboutView.xaml b/Toastify/src/View/AboutView.xaml index be9c84c1..24fcbc63 100644 --- a/Toastify/src/View/AboutView.xaml +++ b/Toastify/src/View/AboutView.xaml @@ -44,11 +44,10 @@ Toastify - + - {version} @@ -57,7 +56,7 @@ - github.com/aleab/toastify + diff --git a/Toastify/src/View/AboutView.xaml.cs b/Toastify/src/View/AboutView.xaml.cs index 67390833..dbc358a9 100644 --- a/Toastify/src/View/AboutView.xaml.cs +++ b/Toastify/src/View/AboutView.xaml.cs @@ -5,6 +5,7 @@ using System.Windows.Input; using Toastify.Events; using Toastify.Services; +using Toastify.ViewModel; namespace Toastify.View { @@ -21,6 +22,8 @@ public AboutView() this.InitializeComponent(); this.versionChecker = new VersionChecker(); + this.DataContext = new AboutViewModel(); + this.versionChecker.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; } From 9d878e6c1425ad3d0fff292fb9aa270f548dbe2c Mon Sep 17 00:00:00 2001 From: Vankog Date: Tue, 5 Sep 2017 15:56:17 +0200 Subject: [PATCH 085/452] Wrapping artist and song title in visual clues Switched the order of artist and track name and made them unambiguous (#11) --- Toastify/src/View/ToastView.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index d4388198..c425b1f1 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -388,8 +388,8 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t string title1, title2; if (altTitle1 == null) { - title1 = (this.paused ? "Paused" : song?.Artist) ?? string.Empty; - title2 = (this.paused ? song?.ToString() : song?.Track) ?? string.Empty; + title1 = (this.paused ? "Paused" : song?.Track) ?? string.Empty; + title2 = (this.paused ? song?.ToString() : $"by {song?.Artist}") ?? string.Empty; } else { @@ -833,4 +833,4 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp #endregion Event handlers } -} \ No newline at end of file +} From 283beefb8f9aa9978ba552575543cc16952f1392 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Thu, 14 Sep 2017 12:03:55 +0200 Subject: [PATCH 086/452] Load Settings before the Toast --- Toastify/src/App.xaml.cs | 31 +++++++++++++++++++++++++++++ Toastify/src/View/ToastView.xaml.cs | 28 -------------------------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 97f8a74a..b9a87b62 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,9 +1,11 @@ using System; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Threading; using System.Windows; using Toastify.Core; +using Toastify.Model; using Toastify.Services; namespace Toastify @@ -19,6 +21,8 @@ public static void Main(string[] args) { if (exclusive) { + LoadSettings(); + App app = new App(); app.InitializeComponent(); @@ -30,6 +34,33 @@ public static void Main(string[] args) MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); } } + + private static void LoadSettings() + { + try + { + Settings.Instance.Load(); + } + catch (Exception ex) + { + Debug.WriteLine("Exception loading settings:\n" + ex); + + string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); + MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + + Settings.Instance.Default(true); + } + + string version = VersionChecker.CurrentVersion; + + Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); + + if (Settings.Instance.PreviousVersion != version) + { + Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); + Settings.Instance.PreviousVersion = version; + } + } } /// /// The song to set as current. - private void ChangeCurrentSong(Song song) + private void ChangeCurrentSong([CanBeNull] Song song) { if (logger.IsDebugEnabled) logger.Debug($"{nameof(this.ChangeCurrentSong)} has been called"); @@ -464,7 +465,7 @@ private async Task UpdateAlbumArt(string albumArtUri) } } - private static async Task GetAlbumArtAsStream(HttpClient http, Uri uri, Action ifTooLong = null) + private static async Task GetAlbumArtAsStream([NotNull] HttpClient http, [NotNull] Uri uri, Action ifTooLong = null) { Task downloader = http.GetStreamAsync(uri); @@ -500,7 +501,7 @@ private static async Task GetAlbumArtAsStream(HttpClient http, Uri uri, /// NOTE: This method needs to be called from the UI thread (see ). /// diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index c425b1f1..1cbbb97d 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -93,7 +93,6 @@ public ToastView() private void Init() { - this.LoadSettings(); this.InitToast(); this.InitTrayIcon(); this.StartSpotifyOrAskUser(); @@ -112,33 +111,6 @@ private void Init() this.InitVersionChecker(); } - private void LoadSettings() - { - try - { - Settings.Instance.Load(); - } - catch (Exception ex) - { - Debug.WriteLine("Exception loading settings:\n" + ex); - - string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); - MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - - Settings.Instance.Default(true); - } - - string version = VersionChecker.CurrentVersion; - - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); - - if (Settings.Instance.PreviousVersion != version) - { - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - Settings.Instance.PreviousVersion = version; - } - } - public void InitToast() { this.ShowToast(false); From 76b96029bde27f133ac732b645fbd6c4e73b1b74 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 15 Sep 2017 02:04:39 +0200 Subject: [PATCH 087/452] Redesign Toast settings to allow further customization (#9) --- InstallationScript/Install.nsi | 2 + Toastify/Toastify.csproj | 3 + Toastify/packages.config | 1 + Toastify/src/Helpers/ColorHelper.cs | 27 +- Toastify/src/Model/Settings.cs | 122 ++++++++ Toastify/src/View/SettingsView.xaml | 314 ++++++++++++++------ Toastify/src/View/SettingsView.xaml.cs | 16 +- Toastify/src/View/ToastView.xaml | 9 +- Toastify/src/View/ToastView.xaml.cs | 70 +++-- Toastify/src/ViewModel/SettingsViewModel.cs | 140 ++++++--- Toastify/src/ViewModel/ToastViewModel.cs | 6 +- 11 files changed, 531 insertions(+), 179 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index ef689692..83ac53e3 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -72,6 +72,7 @@ Section "Toastify (required)" File "Garlic.dll" File "Newtonsoft.Json.dll" File "SpotifyAPI.dll" + File "Xceed.Wpf.Toolkit.dll" File "LICENSE" File "LICENSE-3RD-PARTY" @@ -121,6 +122,7 @@ Section "Uninstall" Delete "$INSTDIR\Garlic.dll" Delete "$INSTDIR\Newtonsoft.Json.dll" Delete "$INSTDIR\SpotifyAPI.dll" + Delete "$INSTDIR\Xceed.Wpf.Toolkit.dll" Delete "$INSTDIR\LICENSE" Delete "$INSTDIR\LICENSE-3RD-PARTY" Delete "$INSTDIR\uninstall.exe" diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 807cd342..1400d79f 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -88,6 +88,9 @@ + + ..\packages\Extended.Wpf.Toolkit.3.1\lib\net40\Xceed.Wpf.Toolkit.dll + diff --git a/Toastify/packages.config b/Toastify/packages.config index 28cf61b8..3b3b02e8 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,5 +1,6 @@  + diff --git a/Toastify/src/Helpers/ColorHelper.cs b/Toastify/src/Helpers/ColorHelper.cs index d5f4ebd0..9b2199c5 100644 --- a/Toastify/src/Helpers/ColorHelper.cs +++ b/Toastify/src/Helpers/ColorHelper.cs @@ -1,5 +1,6 @@ -using System.Drawing; +using System; using System.Globalization; +using System.Windows.Media; namespace Toastify.Helpers { @@ -21,16 +22,28 @@ public static Color HexToColor(string hexColor) byte green = 0; byte blue = 0; - if (hexColor.Length == 8) + try { - //#RRGGBB - alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); - red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); - green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); + if (hexColor.Length == 8) + { + // #AARRGGBB + alpha = byte.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); + red = byte.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); + green = byte.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); + blue = byte.Parse(hexColor.Substring(6, 2), NumberStyles.AllowHexSpecifier); + } + } + catch (Exception) + { + // ignored } return Color.FromArgb(alpha, red, green, blue); } + + public static string ColorToHex(Color color) + { + return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}"; + } } } \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 2e38102d..264d6c25 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -132,9 +132,12 @@ public string SettingsFilePath private bool _disableToast; private bool _onlyShowToastOnHotkey; private bool _disableToastWithFullscreenVideogames; + private bool _showSongProgressBar; private int _fadeOutTime; private string _toastColorTop; private string _toastColorBottom; + private double _toastColorTopOffset; + private double _toastColorBottomOffset; private string _toastBorderColor; private double _toastBorderThickness; private double _toastBorderCornerRadiusTopLeft; @@ -145,6 +148,18 @@ public string SettingsFilePath private double _toastHeight; private double _positionLeft; private double _positionTop; + private string _toastTitle1Color; + private string _toastTitle2Color; + private double _toastTitle1FontSize; + private double _toastTitle2FontSize; + private bool _toastTitle1DropShadow; + private double _toastTitle1ShadowDepth; + private double _toastTitle1ShadowBlur; + private bool _toastTitle2DropShadow; + private double _toastTitle2ShadowDepth; + private double _toastTitle2ShadowBlur; + private string _songProgressBarBackgroundColor; + private string _songProgressBarForegroundColor; #endregion Private fields @@ -280,6 +295,12 @@ public bool DisableToastWithFullscreenVideogames set { this.RaiseAndSetIfChanged(ref this._disableToastWithFullscreenVideogames, value); } } + public bool ShowSongProgressBar + { + get { return this._showSongProgressBar; } + set { this.RaiseAndSetIfChanged(ref this._showSongProgressBar, value); } + } + public int FadeOutTime { get { return this._fadeOutTime; } @@ -298,6 +319,18 @@ public string ToastColorBottom set { this.RaiseAndSetIfChanged(ref this._toastColorBottom, value); } } + public double ToastColorTopOffset + { + get { return this._toastColorTopOffset; } + set { this.RaiseAndSetIfChanged(ref this._toastColorTopOffset, value); } + } + + public double ToastColorBottomOffset + { + get { return this._toastColorBottomOffset; } + set { this.RaiseAndSetIfChanged(ref this._toastColorBottomOffset, value); } + } + public string ToastBorderColor { get { return this._toastBorderColor; } @@ -358,6 +391,78 @@ public double PositionTop set { this.RaiseAndSetIfChanged(ref this._positionTop, value); } } + public string ToastTitle1Color + { + get { return this._toastTitle1Color; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle1Color, value); } + } + + public string ToastTitle2Color + { + get { return this._toastTitle2Color; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle2Color, value); } + } + + public double ToastTitle1FontSize + { + get { return this._toastTitle1FontSize; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle1FontSize, value); } + } + + public double ToastTitle2FontSize + { + get { return this._toastTitle2FontSize; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle2FontSize, value); } + } + + public bool ToastTitle1DropShadow + { + get { return this._toastTitle1DropShadow; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle1DropShadow, value); } + } + + public double ToastTitle1ShadowDepth + { + get { return this._toastTitle1ShadowDepth; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle1ShadowDepth, value); } + } + + public double ToastTitle1ShadowBlur + { + get { return this._toastTitle1ShadowBlur; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle1ShadowBlur, value); } + } + + public bool ToastTitle2DropShadow + { + get { return this._toastTitle2DropShadow; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle2DropShadow, value); } + } + + public double ToastTitle2ShadowDepth + { + get { return this._toastTitle2ShadowDepth; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle2ShadowDepth, value); } + } + + public double ToastTitle2ShadowBlur + { + get { return this._toastTitle2ShadowBlur; } + set { this.RaiseAndSetIfChanged(ref this._toastTitle2ShadowBlur, value); } + } + + public string SongProgressBarBackgroundColor + { + get { return this._songProgressBarBackgroundColor; } + set { this.RaiseAndSetIfChanged(ref this._songProgressBarBackgroundColor, value); } + } + + public string SongProgressBarForegroundColor + { + get { return this._songProgressBarForegroundColor; } + set { this.RaiseAndSetIfChanged(ref this._songProgressBarForegroundColor, value); } + } + #endregion [Toast] #region (hidden) @@ -410,10 +515,13 @@ public void Default(bool setHotKeys = false) this.DisableToast = false; this.OnlyShowToastOnHotkey = true; this.DisableToastWithFullscreenVideogames = true; + this.ShowSongProgressBar = true; this.FadeOutTime = 4000; this.ToastColorTop = "#FF000000"; this.ToastColorBottom = "#FF000000"; + this.ToastColorTopOffset = 0.0; + this.ToastColorBottomOffset = 1.0; this.ToastBorderColor = "#FF000000"; this.ToastBorderThickness = 1.0; @@ -430,6 +538,20 @@ public void Default(bool setHotKeys = false) this.PositionLeft = position.X; this.PositionTop = position.Y; + this.ToastTitle1Color = "#FFFFFFFF"; + this.ToastTitle2Color = "#FFF0F0F0"; + this.ToastTitle1FontSize = 16; + this.ToastTitle2FontSize = 12; + this.ToastTitle1DropShadow = true; + this.ToastTitle1ShadowDepth = 3; + this.ToastTitle1ShadowBlur = 2; + this.ToastTitle2DropShadow = false; + this.ToastTitle2ShadowDepth = 0; + this.ToastTitle2ShadowBlur = 0; + + this.SongProgressBarBackgroundColor = "FF333333"; + this.SongProgressBarForegroundColor = "FFA0A0A0"; + // (hidden) this.StartupWaitTimeout = 20000; this.SpotifyConnectionAttempts = 5; diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 7786160d..3dc3e716 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:wpft="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:core="clr-namespace:Toastify.Core" xmlns:common="clr-namespace:Toastify.Common" xmlns:helpers="clr-namespace:Toastify.Helpers" @@ -15,6 +16,10 @@ + + + + @@ -31,27 +36,27 @@ SelectedValue="{Binding Path=Settings.VolumeControlMode, Mode=TwoWay}" SelectedValuePath="Value" Width="210"> - + - - - + + - - + + - + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. @@ -59,14 +64,14 @@ Prevent the computer from sleeping while Spotify is playing - Opt in to anonymous data collection. + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. + HorizontalAlignment="Right" VerticalAlignment="Bottom" Height="144" Width="145" Stretch="Fill" Opacity="0.8"> - + @@ -77,8 +82,8 @@ - - + + @@ -98,97 +103,226 @@ - - - - + + + + - + - + - - Disable Toast - - Only Show Toast when Hotkey is pressed - Disable Toast when a fullscreen videogame is running - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The best way to tweak the position of the toast is to hold down Ctrl and then drag the toast around. The raw numbers are still accessible below. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. - - - - - - - - - - - - - - - - - + Disable Toast + + + + + + + + + + Only Show Toast when Hotkey is pressed + Disable Toast when a fullscreen videogame is running + Show song progress bar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The best way to tweak the position of the toast is to hold down Ctrl and then drag the toast around. The raw numbers are still accessible above. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Drop Shadow + + + + + + + + + + + + + + + + + + Drop Shadow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -196,4 +330,4 @@ - + \ No newline at end of file diff --git a/Toastify/src/View/SettingsView.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs index bbb8f286..48a79f54 100644 --- a/Toastify/src/View/SettingsView.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -133,6 +133,14 @@ private void FadeOutTime_MouseWheel(object sender, MouseWheelEventArgs e) this.settings.FadeOutTime -= 10; } + private void BorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) + { + if (e.Delta > 0) + this.settings.ToastBorderThickness++; + else if (this.settings.ToastBorderThickness >= 1) + this.settings.ToastBorderThickness--; + } + #region Change colors private void TopColorAlpha_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) @@ -155,14 +163,6 @@ private void BorderColorAlpha_ValueChanged(object sender, RoutedPropertyChangedE #endregion Change colors - private void BorderThickness_MouseWheel(object sender, MouseWheelEventArgs e) - { - if (e.Delta > 0) - this.settings.ToastBorderThickness++; - else if (this.settings.ToastBorderThickness >= 1) - this.settings.ToastBorderThickness--; - } - #region Corner radius private void CornerTopLeft_MouseWheel(object sender, MouseWheelEventArgs e) diff --git a/Toastify/src/View/ToastView.xaml b/Toastify/src/View/ToastView.xaml index 4b2dc3e6..4639e318 100644 --- a/Toastify/src/View/ToastView.xaml +++ b/Toastify/src/View/ToastView.xaml @@ -54,15 +54,16 @@ - + + - - - + + + diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 1cbbb97d..4fb2c37f 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Drawing; using System.IO; using System.Linq; using System.Net; @@ -15,6 +14,7 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; +using System.Windows.Media.Effects; using System.Windows.Media.Imaging; using System.Windows.Threading; using Toastify.Core; @@ -119,35 +119,63 @@ public void InitToast() //User notification of bad settings will be implemented with the settings dialog. // TODO: Refactor InitToast method. - //This method is UGLY but we'll keep it until the settings dialog is implemented. + // This method is UGLY! Settings settings = Settings.Instance; + ColorConverter cc = new ColorConverter(); + // [ DIMENSIONS ] this.Width = settings.ToastWidth >= this.MinWidth ? settings.ToastWidth : this.MinWidth; this.Height = settings.ToastHeight >= this.MinHeight ? settings.ToastHeight : this.MinHeight; - this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); - ColorConverter cc = new ColorConverter(); + // [ BORDERS ] + this.ToastBorder.BorderThickness = new Thickness(settings.ToastBorderThickness); + this.ToastBorder.BorderBrush = new SolidColorBrush(ColorHelper.HexToColor(settings.ToastBorderColor)); + this.ToastBorder.CornerRadius = new CornerRadius( + settings.ToastBorderCornerRadiusTopLeft, + settings.ToastBorderCornerRadiusTopRight, + settings.ToastBorderCornerRadiusBottomRight, + settings.ToastBorderCornerRadiusBottomLeft); + + // [ BACKGROUND COLOR ] + Color top = ColorHelper.HexToColor(settings.ToastColorTop); + Color bottom = ColorHelper.HexToColor(settings.ToastColorBottom); + + GradientStopCollection stops = new GradientStopCollection(2) + { + new GradientStop(top, settings.ToastColorTopOffset), + new GradientStop(bottom, settings.ToastColorBottomOffset) + }; + this.ToastBorder.Background = new LinearGradientBrush(stops, new Point(0, 0), new Point(0, 1)); - // Borders - if (!string.IsNullOrEmpty(settings.ToastBorderColor) && cc.IsValid(settings.ToastBorderColor)) + // [ TEXT COLOR ] + this.Title1.Foreground = new SolidColorBrush(ColorHelper.HexToColor(settings.ToastTitle1Color)); + this.Title2.Foreground = new SolidColorBrush(ColorHelper.HexToColor(settings.ToastTitle2Color)); + if (settings.ToastTitle1DropShadow) { - object borderBrush = cc.ConvertFrom(settings.ToastBorderColor); - if (borderBrush != null) - this.ToastBorder.BorderBrush = new SolidColorBrush((Color)borderBrush); + this.Title1.Effect = new DropShadowEffect + { + ShadowDepth = settings.ToastTitle1ShadowDepth, + BlurRadius = settings.ToastTitle1ShadowBlur + }; } - - // Top & Bottom - if (!string.IsNullOrEmpty(settings.ToastColorTop) && cc.IsValid(settings.ToastColorTop) && - !string.IsNullOrEmpty(settings.ToastColorBottom) && cc.IsValid(settings.ToastColorBottom)) + if (settings.ToastTitle2DropShadow) { - object top = cc.ConvertFrom(settings.ToastColorTop); - object bottom = cc.ConvertFrom(settings.ToastColorBottom); - - if (top != null && bottom != null) - this.ToastBorder.Background = new LinearGradientBrush((Color)top, (Color)bottom, 90.0); + this.Title1.Effect = new DropShadowEffect + { + ShadowDepth = settings.ToastTitle2ShadowDepth, + BlurRadius = settings.ToastTitle2ShadowBlur + }; } - this.ToastBorder.CornerRadius = new CornerRadius(settings.ToastBorderCornerRadiusTopLeft, settings.ToastBorderCornerRadiusTopRight, settings.ToastBorderCornerRadiusBottomRight, settings.ToastBorderCornerRadiusBottomLeft); + // [ TEXT FONT SIZE ] + this.Title1.FontSize = settings.ToastTitle1FontSize; + this.Title2.FontSize = settings.ToastTitle2FontSize; + + // [ SONG PROGRESS BAR ] + this.SongProgressBar.Visibility = Settings.Instance.ShowSongProgressBar ? Visibility.Visible : Visibility.Hidden; + this.SongProgressBarContainer.Background = new SolidColorBrush(ColorHelper.HexToColor(settings.SongProgressBarBackgroundColor)); + this.SongProgressBarLine.Background = new SolidColorBrush(ColorHelper.HexToColor(settings.SongProgressBarForegroundColor)); + this.SongProgressBarLineEllipse.Fill = new SolidColorBrush(ColorHelper.HexToColor(settings.SongProgressBarForegroundColor)); } private void InitTrayIcon() @@ -495,7 +523,7 @@ private void FadeOut(bool now = false) private void ResetPositionIfOffScreen() { - var rect = new Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); + var rect = new System.Drawing.Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height); if (!Screen.AllScreens.Any(s => s.WorkingArea.Contains(rect))) { @@ -805,4 +833,4 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp #endregion Event handlers } -} +} \ No newline at end of file diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 9b216b87..94fd1004 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -1,5 +1,6 @@ using System; using System.Windows.Forms; +using System.Windows.Media; using Toastify.Common; using Toastify.Helpers; using Toastify.Model; @@ -10,6 +11,101 @@ public class SettingsViewModel : ObservableObject { public Settings Settings { get; } + #region Toast + + public Color ToastColorTop + { + get + { + return ColorHelper.HexToColor(this.Settings.ToastColorTop); + } + set + { + this.Settings.ToastColorTop = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color ToastColorBottom + { + get + { + return ColorHelper.HexToColor(this.Settings.ToastColorBottom); + } + set + { + this.Settings.ToastColorBottom = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color ToastBorderColor + { + get + { + return ColorHelper.HexToColor(this.Settings.ToastBorderColor); + } + set + { + this.Settings.ToastBorderColor = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color ToastTitle1Color + { + get + { + return ColorHelper.HexToColor(this.Settings.ToastTitle1Color); + } + set + { + this.Settings.ToastTitle1Color = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color ToastTitle2Color + { + get + { + return ColorHelper.HexToColor(this.Settings.ToastTitle2Color); + } + set + { + this.Settings.ToastTitle2Color = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color SongProgressBarBackgroundColor + { + get + { + return ColorHelper.HexToColor(this.Settings.SongProgressBarBackgroundColor); + } + set + { + this.Settings.SongProgressBarBackgroundColor = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + public Color SongProgressBarForegroundColor + { + get + { + return ColorHelper.HexToColor(this.Settings.SongProgressBarForegroundColor); + } + set + { + this.Settings.SongProgressBarForegroundColor = ColorHelper.ColorToHex(value); + this.NotifyPropertyChanged(); + } + } + + #endregion Toast + #region Commands public DelegateCommand SaveCommand { get; } @@ -18,12 +114,6 @@ public class SettingsViewModel : ObservableObject public DelegateCommand SelectFileForSavingTrackCommand { get; } - public DelegateCommand ChangeToastColorTopCommand { get; } - - public DelegateCommand ChangeToastColorBottomCommand { get; } - - public DelegateCommand ChangeToastBorderColorCommand { get; } - #endregion Commands /// @@ -38,9 +128,6 @@ public SettingsViewModel() this.SaveCommand = new DelegateCommand(this.Save); this.DefaultCommand = new DelegateCommand(this.Default); this.SelectFileForSavingTrackCommand = new DelegateCommand(this.SelectFileForSavingTrack); - this.ChangeToastColorTopCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastTop, hex)); - this.ChangeToastColorBottomCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastBottom, hex)); - this.ChangeToastBorderColorCommand = new DelegateCommand(hex => this.ChangeToastColor(ColorChangeTarget.ToastBorder, hex)); } private void Save() @@ -68,40 +155,5 @@ private void SelectFileForSavingTrack() if (dialog.ShowDialog() == DialogResult.OK) this.Settings.SaveTrackToFilePath = dialog.FileName; } - - private void ChangeToastColor(ColorChangeTarget target, string hexColor) - { - string alpha = hexColor.Substring(1, 2); - ColorDialog dialog = new ColorDialog - { - Color = ColorHelper.HexToColor(hexColor) - }; - dialog.ShowDialog(); - - var color = dialog.Color; - string newHexColor = $"#{alpha}{color.R:X2}{color.G:X2}{color.B:X2}"; - - switch (target) - { - case ColorChangeTarget.ToastTop: - this.Settings.ToastColorTop = newHexColor; - break; - - case ColorChangeTarget.ToastBottom: - this.Settings.ToastColorBottom = newHexColor; - break; - - case ColorChangeTarget.ToastBorder: - this.Settings.ToastBorderColor = newHexColor; - break; - } - } - - private enum ColorChangeTarget - { - ToastTop, - ToastBottom, - ToastBorder - } } } \ No newline at end of file diff --git a/Toastify/src/ViewModel/ToastViewModel.cs b/Toastify/src/ViewModel/ToastViewModel.cs index d28598cc..bc6e66b3 100644 --- a/Toastify/src/ViewModel/ToastViewModel.cs +++ b/Toastify/src/ViewModel/ToastViewModel.cs @@ -1,5 +1,6 @@ using System.Windows; using Toastify.Common; +using Toastify.Model; namespace Toastify.ViewModel { @@ -21,11 +22,6 @@ public string Title2 set { this.RaiseAndSetIfChanged(ref this._title2, value); } } - public Visibility SongProgressBarVisibility - { - get { return Visibility.Hidden; /*Settings.Instance.ShowSongProgressBar ? SongProgressBarVisibility.Visible : SongProgressBarVisibility.Hidden;*/ } - } - public double SongProgressBarWidth { get { return this._songProgressBarWidth; } From 253d29da241eda8131928ef2ce5978c2f5d6109e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 15 Sep 2017 16:21:22 +0200 Subject: [PATCH 088/452] Let the order of Track and Artist be customizable (#11) --- Toastify/Toastify.csproj | 1 + Toastify/src/Core/ToastTitlesOrder.cs | 13 ++++++++ Toastify/src/Model/Settings.cs | 8 +++++ Toastify/src/Model/Song.cs | 8 ++++- Toastify/src/View/SettingsView.xaml | 18 +++++++++-- Toastify/src/View/ToastView.xaml.cs | 19 ++++++------ Toastify/src/ViewModel/ToastViewModel.cs | 39 ++++++++++++++++++++++-- 7 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 Toastify/src/Core/ToastTitlesOrder.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 1400d79f..2be7f655 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -103,6 +103,7 @@ + diff --git a/Toastify/src/Core/ToastTitlesOrder.cs b/Toastify/src/Core/ToastTitlesOrder.cs new file mode 100644 index 00000000..6c0604c2 --- /dev/null +++ b/Toastify/src/Core/ToastTitlesOrder.cs @@ -0,0 +1,13 @@ +using Toastify.Common; + +namespace Toastify.Core +{ + public enum ToastTitlesOrder + { + [ComboBoxItem("Track by Artist", "Show the Artist name below the Track name.")] + TrackByArtist, + + [ComboBoxItem("Artist: \x201CTrack\x201D", "Show The Track name below the Artist name, inside double quotes.")] + ArtistOfTrack + } +} \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 264d6c25..14e07afb 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -134,6 +134,7 @@ public string SettingsFilePath private bool _disableToastWithFullscreenVideogames; private bool _showSongProgressBar; private int _fadeOutTime; + private ToastTitlesOrder _toastTitlesOrder; private string _toastColorTop; private string _toastColorBottom; private double _toastColorTopOffset; @@ -307,6 +308,12 @@ public int FadeOutTime set { this.RaiseAndSetIfChanged(ref this._fadeOutTime, value); } } + public ToastTitlesOrder ToastTitlesOrder + { + get { return this._toastTitlesOrder; } + set { this.RaiseAndSetIfChanged(ref this._toastTitlesOrder, value); } + } + public string ToastColorTop { get { return this._toastColorTop; } @@ -517,6 +524,7 @@ public void Default(bool setHotKeys = false) this.DisableToastWithFullscreenVideogames = true; this.ShowSongProgressBar = true; this.FadeOutTime = 4000; + this.ToastTitlesOrder = ToastTitlesOrder.TrackByArtist; this.ToastColorTop = "#FF000000"; this.ToastColorBottom = "#FF000000"; diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index 0368a0ec..bbe7d5f5 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -1,6 +1,7 @@ using SpotifyAPI.Local.Enums; using SpotifyAPI.Local.Models; using System.Diagnostics.CodeAnalysis; +using Toastify.Core; namespace Toastify.Model { @@ -50,7 +51,12 @@ public string GetClipboardText(string template) public override string ToString() { - return this.Artist == null ? this.Track : $"{this.Artist} – {this.Track}"; + if (this.Artist == null) + return this.Track; + + return Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.TrackByArtist ? + $"\x201C{this.Track}\x201D by {this.Artist}" : + $"{this.Artist}: \x201C{this.Track}\x201D"; } public override bool Equals(object obj) diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 3dc3e716..2ea939df 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -151,8 +151,22 @@ + + + + + + + + + + + + - + @@ -180,7 +194,7 @@ - + diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 4fb2c37f..029523ae 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -382,21 +382,20 @@ private void UpdateCoverArtUrl() /// song's information to be displayed on one line as the second title. /// /// Whether or not to start the toast fade-in animation. - /// Whether or no0t to force the toast to show up. + /// Whether or not to force the toast to show up. private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = true, bool force = false) { - string title1, title2; - if (altTitle1 == null) - { - title1 = (this.paused ? "Paused" : song?.Track) ?? string.Empty; - title2 = (this.paused ? song?.ToString() : $"by {song?.Artist}") ?? string.Empty; - } + if (altTitle1 != null) + this.UpdateToastText(altTitle1, song?.ToString() ?? string.Empty, fadeIn, force); + else if (this.paused) + this.UpdateToastText("Paused", song?.ToString() ?? string.Empty, fadeIn, force); else { - title1 = altTitle1; - title2 = song?.ToString() ?? string.Empty; + this.toastViewModel.TrackName = song?.Track ?? string.Empty; + this.toastViewModel.ArtistName = song?.Artist ?? string.Empty; + if (fadeIn) + this.FadeIn(force); } - this.UpdateToastText(title1, title2, fadeIn, force); } /// diff --git a/Toastify/src/ViewModel/ToastViewModel.cs b/Toastify/src/ViewModel/ToastViewModel.cs index bc6e66b3..079a5d51 100644 --- a/Toastify/src/ViewModel/ToastViewModel.cs +++ b/Toastify/src/ViewModel/ToastViewModel.cs @@ -1,11 +1,14 @@ -using System.Windows; -using Toastify.Common; +using Toastify.Common; +using Toastify.Core; using Toastify.Model; namespace Toastify.ViewModel { public class ToastViewModel : ObservableObject { + private string _trackName; + private string _artistName; + private string _title1; private string _title2; private double _songProgressBarWidth; @@ -22,6 +25,38 @@ public string Title2 set { this.RaiseAndSetIfChanged(ref this._title2, value); } } + public string TrackName + { + get + { + return this._trackName; + } + set + { + this._trackName = value; + if (Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.TrackByArtist) + this.Title1 = $"{value}"; + else + this.Title2 = $"\x201C{value}\x201D"; + } + } + + public string ArtistName + { + get + { + return this._artistName; + } + set + { + this._artistName = value; + if (Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.ArtistOfTrack) + this.Title1 = $"{value}:"; + else + this.Title2 = $"by {value}"; + } + } + public double SongProgressBarWidth { get { return this._songProgressBarWidth; } From 89739b24b0db9e23c1ea02011b7e1a713017a2ad Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 15 Sep 2017 20:55:36 +0200 Subject: [PATCH 089/452] Re-implemented Analytics --- .gitignore | 10 + Toastify/Toastify.csproj | 20 +- Toastify/app.config | 8 +- Toastify/packages.config | 2 +- Toastify/src/App.xaml | 2 +- Toastify/src/App.xaml.cs | 31 ++- Toastify/src/Core/Spotify.cs | 14 +- Toastify/src/Services/Analytics.cs | 245 +++++++++++++++++++++ Toastify/src/Services/Analytics.g.tt | 39 ++++ Toastify/src/Services/Telemetry.cs | 108 --------- Toastify/src/Services/TelemetryCategory.cs | 9 - Toastify/src/View/SettingsView.xaml.cs | 2 +- Toastify/src/View/ToastView.xaml.cs | 43 +--- 13 files changed, 366 insertions(+), 167 deletions(-) create mode 100644 Toastify/src/Services/Analytics.cs create mode 100644 Toastify/src/Services/Analytics.g.tt delete mode 100644 Toastify/src/Services/Telemetry.cs delete mode 100644 Toastify/src/Services/TelemetryCategory.cs diff --git a/.gitignore b/.gitignore index d63852d6..632cb60c 100644 --- a/.gitignore +++ b/.gitignore @@ -179,7 +179,17 @@ UpgradeLog*.htm *.bim.layout *.bim_*.settings +# ================================= + +# Auto-generated files +*.g.cs + +# File containing the Google Analytics Tracking id +ga-code + *.user + +# InstallationScript files InstallationScript/*.exe* InstallationScript/*/*.exe* InstallationScript/AutoHotkey.Interop.dll diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 2d02f282..90c9a68a 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -89,8 +89,8 @@ AllRules.ruleset - - ..\packages\Garlic.2.1.0.0\lib\net35\Garlic.dll + + ..\packages\GoogleMeasurementProtocol.1.4.0\lib\net45\GoogleMeasurementProtocol.dll .\ManagedWinapi.dll @@ -138,9 +138,13 @@ - + + True + True + Analytics.g.tt + @@ -173,7 +177,7 @@ SettingsView.xaml - + ToastView.xaml Code @@ -210,6 +214,7 @@ + SettingsSingleFileGenerator @@ -241,6 +246,10 @@ + + TextTemplatingFileGenerator + Analytics.g.cs + @@ -257,6 +266,9 @@ Always + + + diff --git a/Toastify/app.config b/Toastify/app.config index 1f0a2a65..7609e97c 100644 --- a/Toastify/app.config +++ b/Toastify/app.config @@ -1,11 +1,11 @@ - + - + - - + + diff --git a/Toastify/packages.config b/Toastify/packages.config index f59dbc57..071b6ea9 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/Toastify/src/App.xaml b/Toastify/src/App.xaml index f08aa706..b6343bd5 100644 --- a/Toastify/src/App.xaml +++ b/Toastify/src/App.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="src/View/ToastView.xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" - Exit="App_OnExit"> + Startup="App_OnStartup" Exit="App_OnExit"> diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 97f8a74a..0f84cc45 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,9 +1,11 @@ using System; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Threading; using System.Windows; using Toastify.Core; +using Toastify.Model; using Toastify.Services; namespace Toastify @@ -19,6 +21,11 @@ public static void Main(string[] args) { if (exclusive) { + // Load Settings > Initialize Analytics > Update PreviousVersion + LoadSettings(); + Analytics.Init(); + Settings.Instance.PreviousVersion = VersionChecker.CurrentVersion; + App app = new App(); app.InitializeComponent(); @@ -30,6 +37,22 @@ public static void Main(string[] args) MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); } } + private static void LoadSettings() + { + try + { + Settings.Instance.Load(); + } + catch (Exception ex) + { + Debug.WriteLine("Exception loading settings:\n" + ex); + + string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); + MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); + + Settings.Instance.Default(true); + } + } } /// @@ -48,11 +71,17 @@ public static string ApplicationData private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { - Telemetry.TrackException(e.Exception); + Analytics.TrackException(e.Exception); + } + + private void App_OnStartup(object sender, StartupEventArgs e) + { + Analytics.TrackEvent(Analytics.ToastifyEventCategory.General, Analytics.ToastifyEvent.AppLaunch); } private void App_OnExit(object sender, ExitEventArgs e) { + Analytics.TrackEvent(Analytics.ToastifyEventCategory.General, Analytics.ToastifyEvent.AppTermination); Spotify.Instance?.Dispose(); } } diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index f1f93240..9c510443 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -291,7 +291,7 @@ public void SendAction(SpotifyAction action) break; case SpotifyAction.ShowSpotify: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.ShowSpotify); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.ShowSpotify); if (this.IsMinimized) this.ShowSpotify(); else @@ -299,17 +299,17 @@ public void SendAction(SpotifyAction action) break; case SpotifyAction.FastForward: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.FastForward); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.FastForward); this.SendShortcut(action); break; case SpotifyAction.Rewind: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Rewind); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.Rewind); this.SendShortcut(action); break; case SpotifyAction.VolumeUp: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeUp); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.VolumeUp); switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.Spotify: @@ -327,7 +327,7 @@ public void SendAction(SpotifyAction action) break; case SpotifyAction.VolumeDown: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.VolumeDown); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.VolumeDown); switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.Spotify: @@ -345,7 +345,7 @@ public void SendAction(SpotifyAction action) break; case SpotifyAction.Mute: - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.Mute); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.Mute); switch (Settings.Instance.VolumeControlMode) { case ToastifyVolumeControlMode.SystemSpotifyOnly: @@ -359,7 +359,7 @@ public void SendAction(SpotifyAction action) break; default: - Telemetry.TrackEvent(TelemetryCategory.Action, $"{Telemetry.TelemetryEvent.Action.Default}{action}"); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, action.ToString()); sendAppCommandMessage = true; break; } diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs new file mode 100644 index 00000000..a554c1e5 --- /dev/null +++ b/Toastify/src/Services/Analytics.cs @@ -0,0 +1,245 @@ +using GoogleMeasurementProtocol; +using GoogleMeasurementProtocol.Parameters; +using GoogleMeasurementProtocol.Parameters.AppTracking; +using GoogleMeasurementProtocol.Parameters.ContentInformation; +using GoogleMeasurementProtocol.Parameters.EventTracking; +using GoogleMeasurementProtocol.Parameters.Exceptions; +using GoogleMeasurementProtocol.Parameters.Hit; +using GoogleMeasurementProtocol.Parameters.SystemInfo; +using GoogleMeasurementProtocol.Parameters.User; +using GoogleMeasurementProtocol.Requests; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Management; +using Toastify.Core; +using Toastify.Model; + +namespace Toastify.Services +{ + // ReSharper disable once PartialTypeWithSinglePart + public static partial class Analytics + { + // ReSharper disable once UnusedAutoPropertyAccessor.Local + private static string TrackingId { get; set; } + + private static GoogleAnalyticsRequestFactory requestFactory; + + internal static void Init() + { + // ReSharper disable once InvocationIsSkipped + SetTrackingId(); + + if (string.IsNullOrWhiteSpace(TrackingId)) + return; + + requestFactory = new GoogleAnalyticsRequestFactory(TrackingId); + bool wasOnNoAnalyticsVersion = new Version(Settings.Instance.PreviousVersion) < new Version("1.9.7"); + bool appHasBeenJustUpdated = new Version(Settings.Instance.PreviousVersion) < new Version(VersionChecker.CurrentVersion); + + // Install Event + if (Settings.Instance.FirstRun || wasOnNoAnalyticsVersion) + { + TrackInstallEvent(); + Settings.Instance.FirstRun = false; + } + + // Always send the install event; disable analytics afterwards, if the user prefers that way. + if (!Settings.Instance.OptInToAnalytics) + { + requestFactory = null; + return; + } + + // Collect Preferences every at every update + if (appHasBeenJustUpdated) + CollectPreferences(); + } + + public static void TrackPageHit(string documentPath, string title = null, bool interactive = true) + { + if (requestFactory == null) + return; + + var request = requestFactory.CreateRequest(HitTypes.PageView); + + request.Parameters.AddRange(GetCommonParameters()); + request.Parameters.Add(new DocumentHostName("github.com/aleab/toastify")); + request.Parameters.Add(new DocumentPath(documentPath)); + if (title != null) + request.Parameters.Add(new DocumentTitle(title)); + request.Parameters.Add(new NonInteractionHit(!interactive)); + } + + public static void TrackEvent(ToastifyEventCategory eventCategory, string eventAction, string eventLabel = null, int eventValue = -1) + { + TrackEvent(null, eventCategory, eventAction, eventLabel, eventValue); + } + + private static void TrackEvent(IEnumerable extraParameters, ToastifyEventCategory eventCategory, string eventAction, string eventLabel = null, int eventValue = -1) + { + if (requestFactory == null) + return; + + var request = requestFactory.CreateRequest(HitTypes.Event); + + request.Parameters.AddRange(GetCommonParameters()); + request.Parameters.Add(new EventCategory(eventCategory.ToString())); + request.Parameters.Add(new EventAction(eventAction)); + if (eventLabel != null) + request.Parameters.Add(new EventLabel(eventLabel)); + if (eventValue >= 0) + request.Parameters.Add(new EventValue(eventValue)); + if (extraParameters != null) + request.Parameters.AddRange(extraParameters); + + PostRequest(request); + } + + public static void TrackException(Exception exception, bool fatal = false) + { + if (requestFactory == null) + return; + + // The exception will be truncated to 150 bytes; at some point it may be better to extract more pertinant information. + var request = requestFactory.CreateRequest(HitTypes.Exception, GetCommonParameters()); + + request.Parameters.AddRange(GetCommonParameters()); + request.Parameters.Add(new ExceptionDescription($"{exception.Message}\n{exception.StackTrace}")); + request.Parameters.Add(new IsExceptionFatal(fatal)); + + PostRequest(request); + } + + private static void PostRequest(IGoogleAnalyticsRequest request) + { + request?.Post(new ClientId(GetMachineID())); + } + + private static IEnumerable GetCommonParameters() + { + var parameters = new List + { + new ApplicationName("Toastify"), + new ApplicationVersion(VersionChecker.CurrentVersion) + }; + return parameters; + } + + private static void TrackInstallEvent() + { + IEnumerable extraParameters = new List + { + new UserLanguage(CultureInfo.CurrentUICulture.Name) + }; + TrackEvent(extraParameters, ToastifyEventCategory.General, "Install", GetOS()); + } + + private static void TrackSettingBinaryHit(string settingName, bool track) + { + if (track) + TrackPageHit($"/{VersionChecker.CurrentVersion}/Settings/{settingName}", null, false); + } + + private static void CollectPreferences() + { + // General + TrackSettingBinaryHit(nameof(Settings.Instance.LaunchOnStartup), Settings.Instance.LaunchOnStartup); + TrackSettingBinaryHit(nameof(Settings.Instance.MinimizeSpotifyOnStartup), Settings.Instance.MinimizeSpotifyOnStartup); + TrackSettingBinaryHit(nameof(Settings.Instance.CloseSpotifyWithToastify), Settings.Instance.CloseSpotifyWithToastify); + + TrackSettingBinaryHit($"{nameof(Settings.Instance.VolumeControlMode)}/{ToastifyVolumeControlMode.Spotify}", Settings.Instance.VolumeControlMode == ToastifyVolumeControlMode.Spotify); + TrackSettingBinaryHit($"{nameof(Settings.Instance.VolumeControlMode)}/{ToastifyVolumeControlMode.SystemGlobal}", Settings.Instance.VolumeControlMode == ToastifyVolumeControlMode.SystemGlobal); + TrackSettingBinaryHit($"{nameof(Settings.Instance.VolumeControlMode)}/{ToastifyVolumeControlMode.SystemSpotifyOnly}", Settings.Instance.VolumeControlMode == ToastifyVolumeControlMode.SystemSpotifyOnly); + + TrackSettingBinaryHit(nameof(Settings.Instance.SaveTrackToFile), Settings.Instance.SaveTrackToFile); + TrackSettingBinaryHit(nameof(Settings.Instance.PreventSleepWhilePlaying), Settings.Instance.PreventSleepWhilePlaying); + + // Hotkeys + TrackSettingBinaryHit(nameof(Settings.Instance.GlobalHotKeys), Settings.Instance.GlobalHotKeys); + foreach (var hotkey in Settings.Instance.HotKeys) + TrackSettingBinaryHit($"HotKeys/{hotkey.Action}", hotkey.Enabled); + + // Toast + TrackSettingBinaryHit(nameof(Settings.Instance.DisableToast), Settings.Instance.DisableToast); + TrackSettingBinaryHit(nameof(Settings.Instance.OnlyShowToastOnHotkey), Settings.Instance.OnlyShowToastOnHotkey); + TrackSettingBinaryHit(nameof(Settings.Instance.DisableToastWithFullscreenVideogames), Settings.Instance.DisableToastWithFullscreenVideogames); + } + + private static string GetOS() + { + return Environment.OSVersion.VersionString + + " (" + GetFriendlyOS() + ")" + + " (" + (Environment.Is64BitOperatingSystem ? "x64" : "x86") + ")"; + } + + private static string GetFriendlyOS() + { + object name = null; + try + { + var managementObjects = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem") + .Get() + .OfType(); + name = (from x in managementObjects select x.GetPropertyValue("Caption")).FirstOrDefault(); + } + catch (Exception) + { + // ignored + } + return name?.ToString() ?? "Unknown"; + } + + private static string GetMachineID() + { + // HKLM\SOFTWARE\Microsoft\Cryptography > MachineGuid + string machineGuid = Registry.LocalMachine + ?.OpenSubKey("SOFTWARE") + ?.OpenSubKey("Microsoft") + ?.OpenSubKey("Cryptography") + ?.GetValue("MachineGuid") as string; + + return machineGuid ?? "00000000-0000-0000-0000-000000000000"; + } + + // ReSharper disable once PartialMethodWithSinglePart + static partial void SetTrackingId(); + + public enum ToastifyEventCategory + { + General, + Action + } + + /// + /// Poor mans enum -> expanded string. + /// + /// Once I've been using this for a while I may change this to a pure enum if + /// spaces in names prove to be annoying for querying / sorting the data + /// + public static class ToastifyEvent + { + public const string Exception = "Exception"; + + public const string AppLaunch = "Toastify.AppLaunched"; + public const string AppTermination = "Toastify.AppTermination"; + public const string SettingsLaunched = "Toastify.SettingsLaunched"; + + public static class Action + { + public const string Mute = "Toastify.Action.Mute"; + public const string VolumeDown = "Toastify.Action.VolumeDown"; + public const string VolumeUp = "Toasitfy.Action.VolumeUp"; + public const string ShowToast = "Toastify.Action.ShowToast"; + public const string ShowSpotify = "Toastify.Action.ShowSpotify"; + public const string CopyTrackInfo = "Toastify.Action.CopyTrackInfo"; + public const string PasteTrackInfo = "Toastify.Action.PasteTrackInfo"; + public const string FastForward = "Toastify.Action.FastForward"; + public const string Rewind = "Toastify.Action.Rewind"; + public const string Default = "Toastify.Action."; + } + } + } +} \ No newline at end of file diff --git a/Toastify/src/Services/Analytics.g.tt b/Toastify/src/Services/Analytics.g.tt new file mode 100644 index 00000000..22e47b70 --- /dev/null +++ b/Toastify/src/Services/Analytics.g.tt @@ -0,0 +1,39 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ import namespace="System.IO" #> +<#@ output extension=".cs" #> +<# + /* To use your own Google Analytics Tracking ID, create a file named "ga-code" in the + * project directory ($(ProjectDir)) with the tracking id as its content. + * Optionally, if you have a separate tracking id you want to use when debugging, + * you can add it on a separate line in the file. + * NOTE: if no debugging tracking id is provided, then TrackingId will be null when a debugger is attached. + */ + string gaCodeProduction = "null"; + string gaCodeDebugging = "null"; + try + { + string projectPath = this.Host.ResolveAssemblyReference("$(ProjectDir)"); + string gaCodeFilePath = Path.Combine(projectPath, "ga-code"); + string[] lines = File.ReadAllLines(gaCodeFilePath); + if (lines != null && lines[0] != null) + { + gaCodeProduction = $"\"{lines[0]}\""; + if (lines.Length > 1) + gaCodeDebugging = $"\"{lines[1]}\""; + } + } + catch (Exception) {} +#> +/* + * This is an auto-generated file. DO NOT MODIFY IT MANUALLY! + */ +namespace Toastify.Services +{ + public static partial class Analytics + { + static partial void SetTrackingId() + { + TrackingId = System.Diagnostics.Debugger.IsAttached ? <#= gaCodeDebugging #> : <#= gaCodeProduction #>; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Services/Telemetry.cs b/Toastify/src/Services/Telemetry.cs deleted file mode 100644 index 2ca26280..00000000 --- a/Toastify/src/Services/Telemetry.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Garlic; -using System; -using System.Linq; -using System.Management; -using Toastify.Core; -using Toastify.Model; - -namespace Toastify.Services -{ - public static class Telemetry - { - private static AnalyticsSession _session; - private static IAnalyticsPageViewRequest _client; - - static Telemetry() - { - Init(); - } - - private static void Init() - { - _session = new AnalyticsSession("http://toastify.nachmore.com/app", "UA-61123985-2"); - - var settings = Settings.Instance; - - // abort asap if we are surpressing analytics - if (settings.OptInToAnalytics) - return; - - _session.SetCustomVariable(1, "OS Version", GetOS()); - - _client = _session.CreatePageViewRequest("/", "Global"); - - if (Settings.Instance.FirstRun) - { - TrackEvent(TelemetryCategory.General, "Install", GetOS()); - - Settings.Instance.FirstRun = false; - } - } - - public static void TrackEvent(TelemetryCategory category, string action, object label = null, int value = 0) - { - _client?.SendEvent(category.ToString(), action, label?.ToString(), value.ToString()); - } - - internal static void TrackException(Exception exception) - { - // The exception will be truncated to 500bytes (GA limit for Labels), at some point it may be better to extract more pertinant information - TrackEvent(TelemetryCategory.General, TelemetryEvent.Exception, exception.ToString()); - } - - internal static void TrackEvent(TelemetryCategory general, object settingsLaunched) - { - throw new NotImplementedException(); - } - - public static string GetOS() - { - return Environment.OSVersion.VersionString + - " (" + GetFriendlyOS() + ")" + - " (" + (Environment.Is64BitOperatingSystem ? "x64" : "x86") + ")"; - } - - private static string GetFriendlyOS() - { - var name = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().OfType() - select x.GetPropertyValue("Caption")).FirstOrDefault(); - return name?.ToString() ?? "Unknown"; - } - - /// - /// Poor mans enum -> expanded string. - /// - /// Once I've been using this for a while I may change this to a pure enum if - /// spaces in names prove to be annoying for querying / sorting the data - /// - public static class TelemetryEvent - { - public const string Exception = "Toastify.General.Exception"; - - public const string AppLaunch = "Toastify.General.AppLaunched"; - public const string AppUpgraded = "Toastify.General.AppUpgraded"; - - public const string SettingsLaunched = "Toastify.General.SettingsLaunched"; - - public static class SpotifyWebService - { - public const string NetworkError = "Toastify.SpotifyWebService.NetworkError"; - public const string ResponseError = "Toastify.SpotifyWebService.ResponseError"; - } - - public static class Action - { - public const string Mute = "Toastify.Action.Mute"; - public const string VolumeDown = "Toastify.Action.VolumeDown"; - public const string VolumeUp = "Toasitfy.Action.VolumeUp"; - public const string ShowToast = "Toastify.Action.ShowToast"; - public const string ShowSpotify = "Toastify.Action.ShowSpotify"; - public const string CopyTrackInfo = "Toastify.Action.CopyTrackInfo"; - public const string PasteTrackInfo = "Toastify.Action.PasteTrackInfo"; - public const string FastForward = "Toastify.Action.FastForward"; - public const string Rewind = "Toastify.Action.Rewind"; - public const string Default = "Toastify.Action."; - } - } - } -} \ No newline at end of file diff --git a/Toastify/src/Services/TelemetryCategory.cs b/Toastify/src/Services/TelemetryCategory.cs deleted file mode 100644 index c868cec8..00000000 --- a/Toastify/src/Services/TelemetryCategory.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Toastify.Services -{ - public enum TelemetryCategory - { - General, - Action, - SpotifyWebService, - } -} \ No newline at end of file diff --git a/Toastify/src/View/SettingsView.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs index bbb8f286..be6ebbc7 100644 --- a/Toastify/src/View/SettingsView.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -42,7 +42,7 @@ public WindowStartupLocation StartupLocation private SettingsView(ToastView toastView) { - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.SettingsLaunched); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.General, Analytics.ToastifyEvent.SettingsLaunched); this.settingsViewModel = new SettingsViewModel(); this.settingsViewModel.SettingsSaved += this.SettingsViewModel_SettingsSaved; diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 914a7068..fe8ebf31 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -87,7 +87,6 @@ public ToastView() private void Init() { - this.LoadSettings(); this.InitToast(); this.InitTrayIcon(); this.StartSpotifyOrAskUser(); @@ -106,33 +105,6 @@ private void Init() this.InitVersionChecker(); } - private void LoadSettings() - { - try - { - Settings.Instance.Load(); - } - catch (Exception ex) - { - Debug.WriteLine("Exception loading settings:\n" + ex); - - string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); - MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); - - Settings.Instance.Default(true); - } - - string version = VersionChecker.CurrentVersion; - - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppLaunch, version); - - if (Settings.Instance.PreviousVersion != version) - { - Telemetry.TrackEvent(TelemetryCategory.General, Telemetry.TelemetryEvent.AppUpgraded, version); - Settings.Instance.PreviousVersion = version; - } - } - public void InitToast() { this.ShowToast(false); @@ -215,6 +187,8 @@ private void StartSpotifyOrAskUser() string errorMsg = Properties.Resources.ERROR_STARTUP; string techDetails = $"Technical details\n{e.Message}"; MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + + Analytics.TrackException(e, true); } catch (WebException e) { @@ -226,6 +200,8 @@ private void StartSpotifyOrAskUser() status += $" ({(e.Response as HttpWebResponse)?.StatusCode}, \"{(e.Response as HttpWebResponse)?.StatusDescription}\")"; string techDetails = $"Technical details: {e.Message}\n{e.HResult}, {status}"; MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + + Analytics.TrackException(e, true); } catch (Exception e) { @@ -234,6 +210,8 @@ private void StartSpotifyOrAskUser() string errorMsg = Properties.Resources.ERROR_UNKNOWN; string techDetails = $"Technical Details: {e.Message}\n{e.StackTrace}"; MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + + Analytics.TrackException(e, true); } } @@ -267,9 +245,10 @@ private void LoadPlugins() else Debug.WriteLine("'applicationPath' is null"); } - catch (Exception) + catch (Exception e) { // TODO: Handle plugins' errors. + Analytics.TrackException(e); } Console.WriteLine(@"Loaded " + p.TypeName); } @@ -659,12 +638,12 @@ internal static void HotkeyActionCallback(Hotkey hotkey) { if (hotkey.Action == SpotifyAction.CopyTrackInfo && Current.currentSong != null) { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.CopyTrackInfo); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.CopyTrackInfo); Clipboard.SetText(Current.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate)); } else if (hotkey.Action == SpotifyAction.PasteTrackInfo && Current.currentSong != null) { - Telemetry.TrackEvent(TelemetryCategory.Action, Telemetry.TelemetryEvent.Action.PasteTrackInfo); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.PasteTrackInfo); Clipboard.SetText(Current.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate)); Win32API.SendPasteKey(); } @@ -680,6 +659,8 @@ internal static void HotkeyActionCallback(Hotkey hotkey) Debug.WriteLine("Exception with hooked key! " + ex); Current.UpdateToastText("Unable to communicate with Spotify"); + + Analytics.TrackException(ex); } } From 21dbd12ae18c52a1c41bfb051c9c41fa1fb1e777 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 09:57:56 +0200 Subject: [PATCH 090/452] Minor changes to Analytics Added information when debugging, fetch enabled state from Settings everytime, collect new preferences added in master --- Toastify/src/Core/Spotify.cs | 2 +- Toastify/src/Services/Analytics.cs | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 039b2cdd..dc6d7ad7 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -375,7 +375,7 @@ public void SendAction(SpotifyAction action) break; default: - Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, action.ToString()); + Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, $"{Analytics.ToastifyEvent.Action.Default}{action}"); sendAppCommandMessage = true; break; } diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index a554c1e5..4b79ae8b 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -11,6 +11,7 @@ using Microsoft.Win32; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Globalization; using System.Linq; using System.Management; @@ -25,6 +26,8 @@ public static partial class Analytics // ReSharper disable once UnusedAutoPropertyAccessor.Local private static string TrackingId { get; set; } + public static bool AnalyticsEnabled { get { return Settings.Instance.OptInToAnalytics; } } + private static GoogleAnalyticsRequestFactory requestFactory; internal static void Init() @@ -46,12 +49,9 @@ internal static void Init() Settings.Instance.FirstRun = false; } - // Always send the install event; disable analytics afterwards, if the user prefers that way. - if (!Settings.Instance.OptInToAnalytics) - { - requestFactory = null; + // NOTE: The install event should always be sent + if (!AnalyticsEnabled) return; - } // Collect Preferences every at every update if (appHasBeenJustUpdated) @@ -60,7 +60,7 @@ internal static void Init() public static void TrackPageHit(string documentPath, string title = null, bool interactive = true) { - if (requestFactory == null) + if (!AnalyticsEnabled) return; var request = requestFactory.CreateRequest(HitTypes.PageView); @@ -71,6 +71,10 @@ public static void TrackPageHit(string documentPath, string title = null, bool i if (title != null) request.Parameters.Add(new DocumentTitle(title)); request.Parameters.Add(new NonInteractionHit(!interactive)); + + PostRequest(request); + + Debug.WriteLine($"[Analytics] PageHit: ni={!interactive}, dp=\"{documentPath}\", dt=\"{title}\""); } public static void TrackEvent(ToastifyEventCategory eventCategory, string eventAction, string eventLabel = null, int eventValue = -1) @@ -80,7 +84,7 @@ public static void TrackEvent(ToastifyEventCategory eventCategory, string eventA private static void TrackEvent(IEnumerable extraParameters, ToastifyEventCategory eventCategory, string eventAction, string eventLabel = null, int eventValue = -1) { - if (requestFactory == null) + if (!AnalyticsEnabled) return; var request = requestFactory.CreateRequest(HitTypes.Event); @@ -96,11 +100,13 @@ private static void TrackEvent(IEnumerable extraParameters, ToastifyE request.Parameters.AddRange(extraParameters); PostRequest(request); + + Debug.WriteLine($"[Analytics] Event: ec=\"{eventCategory}\", ea=\"{eventAction}\", el=\"{eventLabel}\", ev=\"{eventValue}\""); } public static void TrackException(Exception exception, bool fatal = false) { - if (requestFactory == null) + if (!AnalyticsEnabled) return; // The exception will be truncated to 150 bytes; at some point it may be better to extract more pertinant information. @@ -145,6 +151,8 @@ private static void TrackSettingBinaryHit(string settingName, bool track) private static void CollectPreferences() { + Debug.WriteLine($"[Analytics] CollectPreferences"); + // General TrackSettingBinaryHit(nameof(Settings.Instance.LaunchOnStartup), Settings.Instance.LaunchOnStartup); TrackSettingBinaryHit(nameof(Settings.Instance.MinimizeSpotifyOnStartup), Settings.Instance.MinimizeSpotifyOnStartup); @@ -166,6 +174,10 @@ private static void CollectPreferences() TrackSettingBinaryHit(nameof(Settings.Instance.DisableToast), Settings.Instance.DisableToast); TrackSettingBinaryHit(nameof(Settings.Instance.OnlyShowToastOnHotkey), Settings.Instance.OnlyShowToastOnHotkey); TrackSettingBinaryHit(nameof(Settings.Instance.DisableToastWithFullscreenVideogames), Settings.Instance.DisableToastWithFullscreenVideogames); + TrackSettingBinaryHit(nameof(Settings.Instance.ShowSongProgressBar), Settings.Instance.ShowSongProgressBar); + + TrackSettingBinaryHit($"{nameof(Settings.Instance.ToastTitlesOrder)}/{ToastTitlesOrder.ArtistOfTrack}", Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.ArtistOfTrack); + TrackSettingBinaryHit($"{nameof(Settings.Instance.ToastTitlesOrder)}/{ToastTitlesOrder.TrackByArtist}", Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.TrackByArtist); } private static string GetOS() From fa7920a379fb6f32690807bafcd7fddd5ca62f24 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 10:04:34 +0200 Subject: [PATCH 091/452] Updated LICENSE-3RD-PARTY --- LICENSE-3RD-PARTY | 62 ++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/LICENSE-3RD-PARTY b/LICENSE-3RD-PARTY index 7af9de3d..aa21d15d 100644 --- a/LICENSE-3RD-PARTY +++ b/LICENSE-3RD-PARTY @@ -5,8 +5,8 @@ August 8, 2011, the same date as the binaries. 1. Toastify (http://toastify.codeplex.com) 2. Managed Windows API (http://mwinapi.sourceforge.net/) -3. WPF Toolkit (http://wpf.codeplex.com/) -4. SpotifyAPI-NET (https://github.com/JohnnyCrazy/SpotifyAPI-NET) +3. SpotifyAPI-NET (https://github.com/JohnnyCrazy/SpotifyAPI-NET) +4. Extended WPF Toolkit (https://github.com/xceedsoftware/wpftoolkit) Toastify License - GNU General Public License version 2 (GPLv2) @@ -163,42 +163,6 @@ Each version is given a distinguishing version number. If the Library as you rec If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. -WPF Toolkit - Ms-PL -=================== - -Microsoft Public License (Ms-PL) - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. - -A "contribution" is the original software, or any additions or changes to the software. - -A "contributor" is any person that distributes its contribution under this license. - -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. - -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. - -(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. - -(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. - -(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. - -(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - - SpotifyAPI-NET - GNU Lesser General Public License v3.0 (LGPLv3) ================================================================ @@ -367,3 +331,25 @@ whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. + + +Extended WPF Toolkit - MS-PL +============================ + +1. Definitions +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the +same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. From 8d16731f2172958bd34006cf7299070789935e00 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 10:07:55 +0200 Subject: [PATCH 092/452] Updated install script --- InstallationScript/Install.nsi | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 83ac53e3..ea4c67ae 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -64,12 +64,15 @@ Section "Toastify (required)" ${Else} File /oname=ToastifyAPI.dll "ToastifyAPI_Win32.dll" ${EndIf} + + # Remove files belonging to old versions + Delete "$INSTDIR\Garlic.dll" - File "Toastify.exe" - File "Toastify.exe.config" + File "GoogleMeasurementProtocol.dll" + File "Toastify.exe" + File "Toastify.exe.config" File "ManagedWinapi.dll" File "Resources\ManagedWinapiNativeHelper.dll" - File "Garlic.dll" File "Newtonsoft.Json.dll" File "SpotifyAPI.dll" File "Xceed.Wpf.Toolkit.dll" @@ -114,12 +117,12 @@ Section "Uninstall" DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" # Remove files and uninstaller + Delete "$INSTDIR\GoogleMeasurementProtocol.dll" Delete "$INSTDIR\Toastify.exe" Delete "$INSTDIR\Toastify.config" Delete "$INSTDIR\ToastifyAPI.dll" Delete "$INSTDIR\ManagedWinapi.dll" Delete "$INSTDIR\ManagedWinapiNativeHelper.dll" - Delete "$INSTDIR\Garlic.dll" Delete "$INSTDIR\Newtonsoft.Json.dll" Delete "$INSTDIR\SpotifyAPI.dll" Delete "$INSTDIR\Xceed.Wpf.Toolkit.dll" From c7502be31d9eec4fd0491e39f31acfee96871559 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 10:38:07 +0200 Subject: [PATCH 093/452] Log exceptions in App --- Toastify/src/App.xaml.cs | 42 +++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 0f84cc45..d5d70b5d 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -16,27 +16,36 @@ public class EntryPoint [STAThread] public static void Main(string[] args) { - const string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; - using (Mutex unused = new Mutex(true, appSpecificGuid, out bool exclusive)) + try { - if (exclusive) + const string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; + using (Mutex unused = new Mutex(true, appSpecificGuid, out bool exclusive)) { - // Load Settings > Initialize Analytics > Update PreviousVersion - LoadSettings(); - Analytics.Init(); - Settings.Instance.PreviousVersion = VersionChecker.CurrentVersion; - - App app = new App(); - app.InitializeComponent(); + if (exclusive) + { + // Load Settings > Initialize Analytics > Update PreviousVersion + LoadSettings(); + Analytics.Init(); + Settings.Instance.PreviousVersion = VersionChecker.CurrentVersion; + + App app = new App(); + app.InitializeComponent(); - LastInputDebug.Start(); + LastInputDebug.Start(); - app.Run(); + app.Run(); + } + else + MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); } - else - MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); + } + catch (Exception e) + { + // ReSharper disable once LocalizableElement + File.AppendAllText(Path.Combine(App.ApplicationData, "Toastify.log"), $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.Message}\n"); } } + private static void LoadSettings() { try @@ -63,10 +72,7 @@ public partial class App : Application { public static string ApplicationData { - get - { - return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); - } + get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); } } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) From 36d6c445e6a5d4bae73aba0332bf79e6ef5cfbe4 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 14:51:05 +0200 Subject: [PATCH 094/452] StartupTask --- Toastify/src/App.xaml.cs | 47 ++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index d5d70b5d..50db7a93 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -23,17 +23,8 @@ public static void Main(string[] args) { if (exclusive) { - // Load Settings > Initialize Analytics > Update PreviousVersion - LoadSettings(); - Analytics.Init(); - Settings.Instance.PreviousVersion = VersionChecker.CurrentVersion; - - App app = new App(); - app.InitializeComponent(); - - LastInputDebug.Start(); - - app.Run(); + PrepareToRun(); + RunApp(); } else MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); @@ -46,6 +37,40 @@ public static void Main(string[] args) } } + private static void PrepareToRun() + { + // Load Settings > [StartupTask] > Initialize Analytics > Update PreviousVersion to this one + LoadSettings(); + StartupTask(); + Analytics.Init(); + Settings.Instance.PreviousVersion = VersionChecker.CurrentVersion; + Settings.Instance.Save(); + } + + private static void RunApp() + { + App app = new App(); + app.InitializeComponent(); + LastInputDebug.Start(); + app.Run(); + } + + private static void StartupTask() + { + if (!string.IsNullOrWhiteSpace(Settings.Instance.PreviousVersion)) + { + Version previous = new Version(Settings.Instance.PreviousVersion); + Version current = new Version(VersionChecker.CurrentVersion); + + if (previous < new Version("1.9.7")) + { + // Re-enable Analytics by default + Settings.Instance.OptInToAnalytics = true; + Settings.Instance.Save(); + } + } + } + private static void LoadSettings() { try From b261522fc72e8f4257f1f1ed1d5c1cd162e2848b Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 16 Sep 2017 15:30:41 +0200 Subject: [PATCH 095/452] Fix Settings window size and the position of some elements --- Toastify/src/View/SettingsView.xaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 2ea939df..a0583bb6 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -10,7 +10,7 @@ xmlns:viewmodel="clr-namespace:Toastify.ViewModel" mc:Ignorable="d" x:Class="Toastify.View.SettingsView" - Title="Toastify - Settings" Height="560" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> + Title="Toastify - Settings" Height="570" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> @@ -61,7 +61,7 @@ Save Artist and Album to file when song changes (uses the clipboard template) - + Prevent the computer from sleeping while Spotify is playing Opt in to anonymous data collection. @@ -125,7 +125,7 @@ Disable Toast - + + + + + \ No newline at end of file diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 94fd1004..c97628ca 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -11,6 +11,10 @@ public class SettingsViewModel : ObservableObject { public Settings Settings { get; } + public int CurrentTabIndex { get; set; } + + public int CurrentToastTabIndex { get; set; } + #region Toast public Color ToastColorTop @@ -112,6 +116,8 @@ public Color SongProgressBarForegroundColor public DelegateCommand DefaultCommand { get; } + public DelegateCommand DefaultAllCommand { get; } + public DelegateCommand SelectFileForSavingTrackCommand { get; } #endregion Commands @@ -127,7 +133,44 @@ public SettingsViewModel() this.SaveCommand = new DelegateCommand(this.Save); this.DefaultCommand = new DelegateCommand(this.Default); + this.DefaultAllCommand = new DelegateCommand(this.DefaultAll); this.SelectFileForSavingTrackCommand = new DelegateCommand(this.SelectFileForSavingTrack); + + this.Settings.PropertyChanged += this.Settings_PropertyChanged; + } + + private void Settings_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + switch (e.PropertyName) + { + case nameof(this.Settings.ToastColorTop): + this.NotifyPropertyChanged(nameof(this.ToastColorTop)); + break; + + case nameof(this.Settings.ToastColorBottom): + this.NotifyPropertyChanged(nameof(this.ToastColorBottom)); + break; + + case nameof(this.Settings.ToastBorderColor): + this.NotifyPropertyChanged(nameof(this.ToastBorderColor)); + break; + + case nameof(this.Settings.ToastTitle1Color): + this.NotifyPropertyChanged(nameof(this.ToastTitle1Color)); + break; + + case nameof(this.Settings.ToastTitle2Color): + this.NotifyPropertyChanged(nameof(this.ToastTitle2Color)); + break; + + case nameof(this.Settings.SongProgressBarBackgroundColor): + this.NotifyPropertyChanged(nameof(this.SongProgressBarBackgroundColor)); + break; + + case nameof(this.Settings.SongProgressBarForegroundColor): + this.NotifyPropertyChanged(nameof(this.SongProgressBarForegroundColor)); + break; + } } private void Save() @@ -137,6 +180,34 @@ private void Save() } private void Default() + { + switch (this.CurrentTabIndex) + { + case 0: + this.Settings.SetDefaultGeneral(); + break; + + case 1: + this.Settings.SetDefaultHotkeys(true); + break; + + case 2: + switch (this.CurrentToastTabIndex) + { + case 0: + this.Settings.SetDefaultToastGeneral(); + break; + + case 1: + this.Settings.SetDefaultToastColors(); + break; + } + break; + } + this.Save(); + } + + private void DefaultAll() { this.Settings.Default(); this.Save(); From ecdd7a16c8a832c838d8b57aa8985f7280cda90d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Tue, 10 Oct 2017 22:05:10 +0200 Subject: [PATCH 102/452] Fix startup error preventing Toastify to start (#16) Only happened if it was the first installation and no PreviousVersion was found. --- Toastify/src/App.xaml.cs | 32 +++++++++++++++--------------- Toastify/src/Services/Analytics.cs | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 50db7a93..b587c8c8 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -55,22 +55,6 @@ private static void RunApp() app.Run(); } - private static void StartupTask() - { - if (!string.IsNullOrWhiteSpace(Settings.Instance.PreviousVersion)) - { - Version previous = new Version(Settings.Instance.PreviousVersion); - Version current = new Version(VersionChecker.CurrentVersion); - - if (previous < new Version("1.9.7")) - { - // Re-enable Analytics by default - Settings.Instance.OptInToAnalytics = true; - Settings.Instance.Save(); - } - } - } - private static void LoadSettings() { try @@ -87,6 +71,22 @@ private static void LoadSettings() Settings.Instance.Default(true); } } + + private static void StartupTask() + { + if (!string.IsNullOrWhiteSpace(Settings.Instance.PreviousVersion)) + { + Version previous = new Version(Settings.Instance.PreviousVersion); + Version current = new Version(VersionChecker.CurrentVersion); + + if (previous < new Version("1.9.7")) + { + // Re-enable Analytics by default + Settings.Instance.OptInToAnalytics = true; + Settings.Instance.Save(); + } + } + } } /// diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index 4b79ae8b..fd45ef6b 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -39,8 +39,8 @@ internal static void Init() return; requestFactory = new GoogleAnalyticsRequestFactory(TrackingId); - bool wasOnNoAnalyticsVersion = new Version(Settings.Instance.PreviousVersion) < new Version("1.9.7"); - bool appHasBeenJustUpdated = new Version(Settings.Instance.PreviousVersion) < new Version(VersionChecker.CurrentVersion); + bool wasOnNoAnalyticsVersion = new Version(Settings.Instance.PreviousVersion ?? "0.0.0") < new Version("1.9.7"); + bool appHasBeenJustUpdated = new Version(Settings.Instance.PreviousVersion ?? "0.0.0") < new Version(VersionChecker.CurrentVersion); // Install Event if (Settings.Instance.FirstRun || wasOnNoAnalyticsVersion) From 14051be87017e4a8ff40796b278647993d690925 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Wed, 11 Oct 2017 00:34:42 +0200 Subject: [PATCH 103/452] Log un-localized exception message --- Toastify/src/App.xaml.cs | 3 ++- Toastify/src/Helpers/Extensions.cs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index b587c8c8..eb647b93 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Windows; using Toastify.Core; +using Toastify.Helpers; using Toastify.Model; using Toastify.Services; @@ -33,7 +34,7 @@ public static void Main(string[] args) catch (Exception e) { // ReSharper disable once LocalizableElement - File.AppendAllText(Path.Combine(App.ApplicationData, "Toastify.log"), $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.Message}\n"); + File.AppendAllText(Path.Combine(App.ApplicationData, "Toastify.log"), $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.ToStringInvariantCulture()}\n"); } } diff --git a/Toastify/src/Helpers/Extensions.cs b/Toastify/src/Helpers/Extensions.cs index adb51ad9..9b8f8e1e 100644 --- a/Toastify/src/Helpers/Extensions.cs +++ b/Toastify/src/Helpers/Extensions.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; +using System.Threading; namespace Toastify.Helpers { @@ -10,5 +12,16 @@ public static IList Clone(this IList listToClone) where T : ICloneable { return listToClone.Select(item => (T)item.Clone()).ToList(); } + + public static string ToStringInvariantCulture(this Exception exception) + { + CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture; + Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; + + string message = exception.ToString(); + + Thread.CurrentThread.CurrentUICulture = currentUICulture; + return message; + } } } \ No newline at end of file From 0feee6f703bea2806958e0850c57b6405e7c9354 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Fri, 13 Oct 2017 16:13:27 +0200 Subject: [PATCH 104/452] Minor changes --- Toastify/src/Model/Song.cs | 10 +++++- Toastify/src/View/ToastView.xaml.cs | 55 ++++++++++++++++------------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index bbe7d5f5..2e14815e 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -1,5 +1,6 @@ using SpotifyAPI.Local.Enums; using SpotifyAPI.Local.Models; +using System; using System.Diagnostics.CodeAnalysis; using Toastify.Core; @@ -91,7 +92,14 @@ public static implicit operator Song(Track spotifyTrack) // Take the smallest image possible. foreach (var size in albumArtSizes) { - coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); + try + { + coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); + } + catch (Exception) + { + // TODO: Log + } if (!string.IsNullOrWhiteSpace(coverArtUrl)) break; } diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index a8960a2e..a95fca36 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -60,7 +60,7 @@ public partial class ToastView : Window private VersionChecker versionChecker; private bool isUpdateToast; - private bool isPreviewForSettingsToast; + private bool isPreviewForSettings; private bool dragging; private bool paused; @@ -118,8 +118,8 @@ private void Init() public void InitToast() { - if (!this.isPreviewForSettingsToast) - this.ShowToast(false); + if (!this.isPreviewForSettings) + this.SetToastVisibility(false); //If we find any invalid settings in the xml we skip it and use default. //User notification of bad settings will be implemented with the settings dialog. @@ -420,7 +420,7 @@ private void UpdateToastText(string title1, string title2 = "", bool fadeIn = tr this.FadeIn(force, isUpdate); } - private void ShowToast(bool shallBeVisible) + private void SetToastVisibility(bool shallBeVisible) { this.Topmost = shallBeVisible; this.Visibility = shallBeVisible ? Visibility.Visible : Visibility.Collapsed; @@ -434,6 +434,23 @@ private void ShowToast(bool shallBeVisible) } } + private void ShowToast(bool force = false, bool isUpdate = false, bool permanent = false) + { + // Update the toast's text and image with the current, most recent song information. + if (this.currentSong == null || !this.currentSong.IsValid()) + { + this.toastIconURI = DEFAULT_ICON; + this.UpdateToastText("Nothing's playing", string.Empty, false); + } + else if (this.currentSong.IsValid()) + { + this.toastIconURI = this.currentSong.CoverArtUrl; + this.UpdateToastText(this.currentSong, null, false); + } + + this.FadeIn(force, isUpdate, permanent); + } + private void FadeIn(bool force = false, bool isUpdate = false, bool permanent = false) { this.Dispatcher.Invoke( @@ -443,7 +460,7 @@ private void FadeIn(bool force = false, bool isUpdate = false, bool permanent = this.minimizeTimer?.Stop(); bool doNotFadeIn = this.dragging || - this.isPreviewForSettingsToast || + this.isPreviewForSettings || (Settings.Instance.DisableToast || (Settings.Instance.OnlyShowToastOnHotkey && !force && !this.IsToastVisible)) || (Settings.Instance.DisableToastWithFullscreenVideogames && Win32API.IsForegroundAppAFullscreenVideogame()); if (doNotFadeIn) @@ -468,7 +485,7 @@ private void FadeIn(bool force = false, bool isUpdate = false, bool permanent = if (!this.IsToastVisible) { - this.ShowToast(true); + this.SetToastVisibility(true); DoubleAnimation anim = new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(250)); anim.Completed += (s, e) => @@ -514,7 +531,7 @@ private void FadeOut(bool now = false) DoubleAnimation anim = new DoubleAnimation(0.0, TimeSpan.FromMilliseconds(500)); anim.Completed += (ss, ee) => { - this.ShowToast(false); + this.SetToastVisibility(false); this.IsToastVisible = false; }; this.BeginAnimation(OpacityProperty, anim); @@ -576,19 +593,9 @@ public void DisplayAction(SpotifyAction action) break; case SpotifyAction.ShowToast: - if (this.currentSong == null || !this.currentSong.IsValid()) - { - this.toastIconURI = DEFAULT_ICON; - this.UpdateToastText("Nothing's playing", string.Empty, false); - } - else if (this.currentSong.IsValid()) - { - this.toastIconURI = this.currentSong.CoverArtUrl; - this.UpdateToastText(this.currentSong, null, false); - } if (!this.IsVisible) - this.FadeIn(true); - else if (!this.isPreviewForSettingsToast) + this.ShowToast(true); + else if (!this.isPreviewForSettings) this.FadeOut(true); break; @@ -805,16 +812,16 @@ private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEven private void SettingsView_Launched(object sender, EventArgs e) { - this.isPreviewForSettingsToast = false; - this.FadeIn(true, false, true); - this.isPreviewForSettingsToast = true; + this.isPreviewForSettings = false; + this.ShowToast(true, false, true); + this.isPreviewForSettings = true; } private void SettingsView_Closed(object sender, EventArgs e) { - this.isPreviewForSettingsToast = true; + this.isPreviewForSettings = true; this.FadeOut(true); - this.isPreviewForSettingsToast = false; + this.isPreviewForSettings = false; } private void Application_Shutdown(object sender, EventArgs e) From e49d361de5d5c5a5b26fdeed7393df866c238f75 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 14 Oct 2017 00:11:26 +0200 Subject: [PATCH 105/452] Now StartSpotify runs in a background thread If an exception is fired or Toastify is not able to connect with Spotify within a time limit (1 minute), the background worker terminates Toastify with an error message, asking the user to restart Toastify after having started Spotify manually. Also, while StartSpotify is running, the default tray icon is replaced by a *loading* animated icon; while loading, the Settings window will be unaccessible and the hotkeys won't work. This should fix #13. --- Toastify/Properties/Resources.Designer.cs | 265 ++++++++++++++++- Toastify/Properties/Resources.resx | 81 +++++- .../toastify_loading_spotify_0.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_1.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_10.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_11.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_12.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_13.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_14.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_15.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_16.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_17.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_18.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_19.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_2.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_20.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_21.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_22.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_23.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_3.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_4.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_5.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_6.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_7.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_8.ico | Bin 0 -> 4286 bytes .../toastify_loading_spotify_9.ico | Bin 0 -> 4286 bytes .../{spotify.ico => ToastifyIcon.ico} | Bin Toastify/Toastify.csproj | 49 +++- Toastify/src/Common/SystemTray.cs | 270 ++++++++++++++++++ Toastify/src/Core/Spotify.cs | 153 ++++++++-- Toastify/src/Helpers/Extensions.cs | 8 + Toastify/src/Model/Settings.cs | 9 +- Toastify/src/View/SettingsView.xaml | 2 +- Toastify/src/View/ToastView.xaml.cs | 134 +++++---- 34 files changed, 851 insertions(+), 120 deletions(-) create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_0.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_1.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_10.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_11.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_12.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_13.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_14.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_15.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_16.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_17.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_18.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_19.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_2.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_20.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_21.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_22.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_23.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_3.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_4.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_5.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_6.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_7.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_8.ico create mode 100644 Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_9.ico rename Toastify/Resources/{spotify.ico => ToastifyIcon.ico} (100%) create mode 100644 Toastify/src/Common/SystemTray.cs diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index 2dd6918d..7a262a14 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Toastify.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -72,15 +72,6 @@ internal static string ERROR_SETTINGS_UNABLE_TO_LOAD { } } - /// - /// Looks up a localized string similar to An error occurred when trying to start Spotify.. - /// - internal static string ERROR_STARTUP { - get { - return ResourceManager.GetString("ERROR_STARTUP", resourceCulture); - } - } - /// /// Looks up a localized string similar to Could not find Spotify process! ///If Spotify is running, please open an issue at github.com/aleab/toastify.. @@ -101,6 +92,16 @@ internal static string ERROR_STARTUP_RESTART { } } + /// + /// Looks up a localized string similar to An error occurred when trying to start Spotify. + ///Please, start it manually and then restart the application.. + /// + internal static string ERROR_STARTUP_SPOTIFY { + get { + return ResourceManager.GetString("ERROR_STARTUP_SPOTIFY", resourceCulture); + } + } + /// /// Looks up a localized string similar to An error occurred when trying to start Spotify: Toastify was not able to connect with Spotify.. /// @@ -142,9 +143,249 @@ internal static string INFO_TOASTIFY_ALREADY_RUNNING { /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// - internal static System.Drawing.Icon spotifyicon { + internal static System.Drawing.Icon toastify_loading_spotify_0 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_0", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_1 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_1", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_10 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_10", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_11 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_11", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_12 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_12", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_13 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_13", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_14 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_14", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_15 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_15", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_16 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_16", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_17 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_17", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_18 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_18", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_19 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_19", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_2 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_2", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_20 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_20", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_21 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_21", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_22 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_22", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_23 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_23", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_3 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_3", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_4 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_4", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_5 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_5", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_6 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_6", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_7 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_7", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_8 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_8", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon toastify_loading_spotify_9 { + get { + object obj = ResourceManager.GetObject("toastify_loading_spotify_9", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon ToastifyIcon { get { - object obj = ResourceManager.GetObject("spotifyicon", resourceCulture); + object obj = ResourceManager.GetObject("ToastifyIcon", resourceCulture); return ((System.Drawing.Icon)(obj)); } } diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index 827f5eac..83c283e6 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -123,8 +123,9 @@ Delete the "{0}" file and restart the application to recreate the settings file. The application will be started with default settings. - - An error occurred when trying to start Spotify. + + An error occurred when trying to start Spotify. +Please, start it manually and then restart the application. Could not find Spotify process! @@ -149,7 +150,79 @@ Please open an issue at github.com/aleab/toastify. Look for the blue icon in your system tray. - - ..\Resources\spotify.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ToastifyIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_0.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_10.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_11.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_12.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_13.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_14.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_15.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_16.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_17.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_18.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_19.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_20.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_21.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_22.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_23.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_3.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_4.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_5.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_6.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_7.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_8.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SystemTrayAnimation\toastify_loading_spotify_9.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_0.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_0.ico new file mode 100644 index 0000000000000000000000000000000000000000..86ae1209e9bbff9158d7e36f2d0cacbb77f77fae GIT binary patch literal 4286 zcmb_fTTffr6+Q-x$wUdp+=;=)HW=I31da{Hjxm>j4Ivm~V{8l5Nm zs(oo6`r7uPmHN=CnwM!_^3s1WnwiI_s#MKXm1fjdnl_DA*V^_zIb0G(qn_wv@3Z&u z{=T!;x7XPb1O@)n>jnBN{6;MZHG&|tA#h0ON6om9qU&Gp@)M3)jB$&$@0L>edS=uOa})R8;-MGj5L`=S*vYtw zpChlMv%W7cy;J<3$~DjN4402d0Nz;BlDNuhT&D zzAp2RId2teAn^NlwlXbTLjq%yKz_M~Zo4sruc>@T5Q=+j#{R`AKM<&?ioxTwKp)z!rxc;2KV{jfAW0GZezOycu$-mCgtOQZTW z%;Nr#d|L45MGYg}?XOHG&Fu^PB}3iTlcnfDfqMY5$S=o3e*>!Gt3|wsum2>Fr{CgL;X9i(8J|rQF z_gqgVM)ApOrQf8Z{UFznMD9RuJIe##r=)>_zhG+?-kI~#JJWj* z#``)T8t7&@o~IaNylDSVV%;0=u`*ub9&%b>5cz42Y6bIy^2ug>0w6-3Zumo$)$5x4CvdThvTgZtf9hJdG?ak5;X7swBnHRSVf z-_`b8 zH$Vt;yq3(z;wl}KrTQSd@&KztJnnp7UM`PRn#C>(CY z;8`vOX9r761L?46YZ%N8)xd$DRNyexR)T~Y4H$^KfV+k}n1l2Cl6!$-FgfV@QWOQH z$z)QkCW8OjUyH!$?i}WTVn7;}U?($0^%C0dyyYhyoS#}bzXM|x9qDFuLhgk{s!uX6 z5`SpG`4Re$&IU!9nZWOIt5YoZ&-PPH!`VR^&JNR(mfXrD^I#J9RGd7BIV3+)KDZYo zA7BmP{C%CR>`X%E0bUzZVLy7eKZ)Gz8V~lmcC#UPj5&CMF?g0+0Mc=Gu*fvXb&x+d z7J}!zDfc63pgmz}td)38-kZ>5xq&s|9^{s%VI>{}hrvL{RCbxomA5uiV?a4L-i|X3 zcB2-WYc*i3tAuWw5u&3$*hqzNK8c$0`8nR6g{9aq1icQh>FS_Dsl;Px(GEsLLMzm{>cu4pin?<|c&ZZ(XxC zR`4V4dpdB;155EyINnKO-AKVx+{2u+)~N#IV7TKggT$Y3Ps(y~fuC+mFsFaq%}y{4 zM_V!G2hzcST9}?fOI{^BMZZ4To5%h<9Q^1ZYROgd(m7V_r_^3y(`xR9RHM@fbgjKSfDVQKx)@9V&I zsD_@?3W$7M&&G#;UJc$KIja9TL*?j8L#xIHMJy*%bd}! zU_Hukh%N1xgY{|D7)9?!U~f4L*%uZm2J(E%`QZOlL#_n4gTd|#WE2)<>9axyd4XTfjeuhD1!K0!Y` z#&@R}oM7yq>@IwLv^o1zUsqQ>{U4c@UHn{|J;(d0_KVCX-|oGykyS+Bt{{H9=nUca z3nlpcr8E6CYp`jc>l+=w%VI#oz<&kd>>EMwe1r>Z%UXIN0KQuIw)Bpeg literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_1.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_1.ico new file mode 100644 index 0000000000000000000000000000000000000000..24c7641b678758c7b88b5e228b8c5a4114d57cd4 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_11.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_11.ico new file mode 100644 index 0000000000000000000000000000000000000000..5eee61d57da3c9b4b36cb6d3fcb36483b60fc157 GIT binary patch literal 4286 zcmbVPYfPfq8U7elbVf(A(Ki zWdAj3)1?2}^w(}SO}9-p*}vU1yY0V8n>1;Yrkm_GneNQa+xI>2A>%sEWSG33^PTT} z=XuWaUd|bg6W~9Ef}_9OuWC3>!f{*&8V+#|G#Y2We3N^4>%Rj0vUE@;s~8wi-?ewk zYlgLTRd%_&+-~Pe-g?!WKNQGu{bXQfdv_-UCp*~B+tKzC9BnV+93Nyi z79gEOu5mX!%0~ZAK6%Y?AKMIZ$#FPEJs#|#9>|6CINVxfTA**fA0IMOdS3gp^{5+?f$?YQq?cjG z{ZnAlDnMRW4Xw48CaPAt2xnC0w&Ct$ei<|?Z^yl;{L5h4b+sDF%x53Ur`QCRd=8Tc`$5=nBgn1RW{b< zjKTri9=%1{#tzEKt?h5-cbVce+kT5 zCDVraCeLTW*2Cg4i}fnI?)@C`g~Y+!rD_RHTi`nUxNigk(}Um|&_Tae4o1a2Fvy#s zS1p5Kg9@f?Mu;L$(qemc61A9u$HxhHj6BY>QNVa-8jubF_kHw5h{ZuV>3(i%ZoWIC^<59=f48^Q}5y_yrkr}$$UAU?%lds7|AG2VH673LdZ z=v$hgQ`T6(r+GXF?Y#ydGboy2C+>lZlN^Wl4&(6XkZQ&X*0cbNftfLj4)Jd}O`4ws zr!26H9C#m)2CMTnSa9}141JJTbUAa$x zJla}Uyqx&q6oo`D93`#%6ACsf6MjK=AHt`*j|Xc(At&;A8J@L*63;^( zpW3{(Y`=nA90-ItAK=0uZZBo;V_&xX>jr#!B`~(NNu>2P`_kI#|MBM&ozZ-K8mT@`arHDpvBx^3Ox1o1vb=QQ!Ss>Mi8JKh;f zp|Z5(N$iW3Z?0lqKFbnsf?YhPvy&^+>y?dtTA5)`uL_KsbRSF%>OP(x?E2%xkp8z$ zv+l=uj?Ei8l$vfi`~Ox+{4cWgOH8aqU&{Wu_UAX-cQN)gec_Z^Eu#8uG&bIm;a!&a z;XJ;cUh~QILqNZ;MF5`)00ZXn3y!lt=Q#OOj;sEf<3vw#Cj1oh0!>hC7x+w8JVyN| eIF}5+CllaW0$fvoYYX6l6T%Zt1kdHw1pR-2Ta!cp literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_12.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_12.ico new file mode 100644 index 0000000000000000000000000000000000000000..e74e3e05a6b1267a9f79a72e4ce8308ab4d2b86a GIT binary patch literal 4286 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 Is3i3N04N=z&j0`b literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_15.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_15.ico new file mode 100644 index 0000000000000000000000000000000000000000..7c3160367ca2c6f3bf50e66fe11dcd648a73400f GIT binary patch literal 4286 zcmbuC*-zWq6~}+Z0|Y|iU}IK;u`!#?Vlaz?**6C;*m&O;Y!>qHA+TFPS3gabv(`_8Kp*F-`{e5K4-i4_d^gw z_}APl(6{jE9YLrT1fc_kmxM_aU1y){kU9CFZxQ~gSgVy+EE#(nLXMffxO0BUxiZpj zXltu7DimdSU;IIq-~A)8b$+bzK|1{DgMII_^!f^<;>(aqWQE83YZlmzSze|S_CJMe zvlBf%H8;^D`TPHTME<22^`lhqYsN#)!G;wMH&@{(>40M1omJBaE zjX3ALhPt})4{<=N6-v(b{GSk)Vmny3G5aUmPB`6h!Tnt~ob7o~UO3)%))1x-RP=oFPn4fC(1R&e71)%V?K$kYr=fX?_^`Igb9NdS;$4^)yW!Mos!}io#2SN zJc^+WKlYFve9L2>eP2)3VV|BP9pCP+t+0AiKjm|&ww+D2nObLa9(B&M7&FW@aNILN zuet#y`#T^RGQ(DI9ySAWu<4(Lb?;18vtaC14HeemV8eN`8(BghSK$=Qdl;{S!5|c$ zY`ULP?8jTqY}^4L+tgDgefxLneSa?i_pvS%BihQb$%m1imN#NAlFsmGC>!nKqRLDX%|)EfItT`PtCxE<}^WARxg`=G6^D#wpHCtt^nd8c#A zeLjE9H3c!eK0Bg2M?TxDQ*mc9F^xmxvKw9cN6==3KfTw2m?^u@^^sUdQgq)SmObmXUAU&;aJ3=xEFNk5t?S z_ji2oFqL7)Jqw_eAsgeDm6R|$tdFsmG&QoEC~n^4F6;&3&Kq^$Ss2d6P5H?5-Zb-l z9_RG8Hoh{pDrjF8AFR8+Nn`CP-xq1xx1!J_l|YkB0+q;iqb;f-sashG8mtBR5W`w> zwqt&fafwa!}RKj_U&rRfGzau;1G&8=mv;^vI z--HC_j_gr<>Z(d;!G2gA>tVe`IU)auJ2$Lj_2uyroBDur`N;VOt-6WwpN_45mdU@L z@u}D3dWPvs3 z44V^1b_CZsX%%x%Y*N%d&U|vr4Z`$52P|P9G9Q_r;~+09V>Pa>EQ8pWO>Zdrt5&d0 z_dV(AVzsC6*+;L}$Yajgm%(Kdt0nmvwq^KKZ(`Hh<37y{bi%ZugU!ud8`Qp&&Hah| zx$!>;EzY9(P~@{rUiz2r0`noy5Avl@ll|@ZoNY%R$aud&t4iO9nR87aOLO<4 zUp8)XFdrxInYcP-_=o|X4~7E?EdIP27JgO@y~*3m z55@S6oDccj{9}4wwvP8b^J08H(xQ?1;$IrU@%uG}y+C}Wt~_Vo`pa4vJh=nI=au02 zO&z;F_lX=#Kg!f0pILZ3s8!aQjop9r+#3c`&KK@e!D#AkVb2QMv$DBm@rsHB5Q#H2 zKn7H{7PI@2FB<<@$Sgb`X_wu?_ZiR1MBj5a)!U4|pvV{Q6CIPN7l}<;{zYvr2fX(R z$N1L@X(8_|=VHC4R(`iz?OV93`^r9Tc;&*iPyXa)P EKX-Yk4*&oF literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_16.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_16.ico new file mode 100644 index 0000000000000000000000000000000000000000..4e6c8d36efc9d21cbaa88753763bdbb959382a0a GIT binary patch literal 4286 zcmbW4+f!Qm6~{M5CCN!tKv5J$BM4$Z6h)MX;x#HF2yzkR>RnJ#QDb6ar+w*P(DT?i z=b?RTJJV^W?Mq)eoxZd)ozs)fv=2^SPTPmhNi&`FlH=-HKiJz#%w-PF*B|@0x4+Nt zyVm-x>~Ne2e;OM(`ptd6g5%^I$LUZw#SNlpo_z{K{^D!>7U}g|X}d~Q;db;j&$}Jw zuyeTE<>=FzOf^+TWA#V4>W#0p^1J`2I5cI~9AzRu%B{`5-ddc7&D1n(FS=lhlyX5P z;e_>t$^S0;$A3Q6Z?MZQ7`IvI+ zb3mf&-BmB_EPL2~mP2FzoUofF3Nd*v=;{M%H77pWUibmyqDSK9)_t(QF$V|f0AyFZ zaF_`K?hTH%Bk(x8fZrpiFy0Ts-l`AxF#{3L(C<2R4GLWUgJaRB)!seMF8nokYc%5k4?bJ{0JqR%?g>ocXZ!po{7J|F%RYz74)_>!P>$&tb|9eHm2#WVR) zuh-w%U77ug&JvD{O?5{3rW)%ts4?Fa7;_1OUE^EszFpMyiJ;loS_`SWldcM06XoKtO)?@ZFknA+MZASE%*#3n6c z{3!<)<4^t*-a(jgn0{@nX1$8pSF6?H+}d2;JIi^VO}?=fp#}Z%^%itF7@K^Wn(G*s z*a_cY-Z#eHJJt>3z4syR9mw+o`TXgO+rBise1GPC3uVoY?84 z2b!?fcs<>VvmATJEzqKt z;cutoPV8N?aIitOj=r&Lso9e$? ztAa}8l89d+7XQYYufw88naJ-qlP=b?^4_tZVUG9K0z$pFV2t_PKC~GG@5>>~bD`dO zcF5T)#GTk`x$F{~_;*T5{$(&UNGJyTtNs_%D|2hqXTq$HKHiRk)t~`YCDuIlIp<&p zSCHu1|#O24AMJiu|qyQ{ue+ly{IbJWkt zdlX|IgGOXipRKujo7FP;3{3ShHu0(EsK!YY^U@!0`zoBbB=6u|VEh`lxzvRqf zP%F`Y@!pF6<#vkrRCf!EpI!Dd@612$gL)Zp+M5&@Pbp{>RqUGPXGgji+cRty*i`F0 zn=y%7VAEa$S_YERQb=N)7qPaZo_=VOVLhOTLwkyO1{iw+Ym#SEUM|JE;GMWkxQ9tw`)>>H zC|txl+LMksvHtxSf6P7d8>Hn>c@xh`Nhw>G)}DM|geLS(;=Rr|Iv78Qb;0@zvYmEQ zKGuB9anviT1@=5XYd2|j&1S9y{d4q=vL1DwWtY5wXOZ#iC1s2)#af|tNjRrQ?!-v{xp+t zVGcr=gBaA7eZ=@Oi~;p*Qd>g}G-B*ozh!d+Fx=G&LtQ$E&Dt>+c~RWtl3S2?-tdNE zKT%U0|D@B^%6K@9BYhpUtKkWJU-4o8UBK9j8NaT)jCrD7uEUxjzP`R%;0>8|;6U;0 zsJkEJ6}abX*!*1V5A`n*dG$T{##+er-HqrpzHbG<|F9RjuxIk?(r7cPL4|c;Gc>b# zVhwg`nHFaHS$?U$dCt|*_D!j9FaErK<)VN3uGd%HS)3btk&d~5*5k$RA?mgZb9^m( zN4vo{W?{Ld{E~QXb(a`$S*AMMO$hy}PPj+UT;c zbU%dWiA3j$RERC}D=OkZbR(YwTo)vo5_UiKdHvtt!DqLq99e(kr70sQwb zFx~@xtcB>0n}rzgwQzMz{Y5E#AHQ(F$lTIW`Ji35Ae(8N0uRrJm^f?s+oQU9zQNKhEuM_0FP5d)7o)&~_h;Tg-t}DXzMR3C1fYV|GJ}W2m{{aGf Bu4DiJ literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_17.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_17.ico new file mode 100644 index 0000000000000000000000000000000000000000..b30598901f1ab22496d9b75a7610ea3c75ce80b2 GIT binary patch literal 4286 zcmbW4$y4Lk5yyXm86X(5i&Y>HVg#CD6(EoVk`O!EKtlU2Hi0A%`{MCTRh)w>|3J?1 zB?r4|?1~R5`;Z)R$ti~^JC({|Dy~W@v0X`=s$^0V)9HTF?}sdACX_`rzg6$^y8GMx zo;Xf~e;pkh{pWsG&2bGJ$MvA$EzW>O_t__R$Xcy=G#fS8AKp4BF?^ zD&0t*tY0Q;&?ppd>N)Pt_Zs;%Us7^hiDhnFp4o7Ikd9mbor;-ZFK&VTbsHY7%#sl^ zZ20D$`|SFU4C;QhLQ(f74k>!gu(x?s9A29pJlS!7osOGff5Qd`TdQ!CaKQ1-8l3F9 z;WX)CM(4)~7aVM^LON=N$g1hjQ=>f-s^;eM+kgt+Q8jbr=PB=poo><8ejgAlWahY@&qKo*9}{UDs~dSE-S05PWlmW@MC)DJovar|4yLM4+`ou_nQ957huCm8*0HaJqizr zeH?|yCo!}*#%Kk${Ijs-n}JQQiOqrdWKoQRdqMrTf$SV!83)qY!%Xl`jE#Qt?2A1g zbT-y9Ht{!ni&>wMo!N9jA~=unp1Z+ccU{LI>M(#~R`q+TlR}?!*P@ez??-9WHs$+x z$BBMtbDfM>v%cdTx|{2B@s5GdYJgrz13Zv6UC$xU|NInm^TEsBc+adUmxrTsEC*&X- zgK031^g>-}8Pwb@fkAmYhWa}n5$f&zRCJl;k!p+AIq^Hh)y)5{#yTPHrmXA)+HitLLp5)ghogZUOQ+-pNo$R9TSYyQYTBaCVhIyaY z4Kd$$LJI<0)7K^VzC1a=*a53fr~x`Bc0RxAZppVfEwUgaBP-L%$TIeh73?ie=KEO+ zYn)==g|SCA8P)mWmIHz-Q;dHPwLtYny5IE9F!tQ|ea7Z}Zz?ap!LKbT0eP#~fpAuj z=V|{F(jE0S<~y>_(?0Aa0YP`9f66(VF&9Tr{e1-_s@PO+zcihU2+evH3At2<=(%iCZ#yu^5vb7E@;N{KLS2v|6v{?wsv<{a1*=Id z_)6^VraJJLHM!WE7+c`y>b@}V^<`xc#M&UfeP-mJ)C*K9?(Wg{+Kauo4Qrlij`Hqj z{DsLOL3>_{hVeJBx5=>%$YR*rsNY2#dYDt+2eW<%_@3jK8~cvtNcURQDzO6=EjVU| zUuYCd^3JpU7`GLJ>iMWr+C=$3-SK{%j#=6IiCSdr%S;I5E%mJSTdFEpKOvUg zqyjnC0vYvrGMjM-X2z5dv`?~nh&hd*Y-<$ioz;DgPi)_^1}u|S{#>QX?hSTAE6!xt%=l+1KgK`Hr??ZJdM4k`EQTTIL_Qgx>*dLQFpc&?2>p+u z7Dx}IbAgY(Q~YraMBgXCgU5-!PAB@#_G)8e^2%g{_8F^Kf2jRE+*joMZ?CO_8tfNw z>@&n$!!@L{4mE)mLrqZs!CGQ`8k=Ge#{NV-f|z6qZ3Re`<T0a02<%;0pn9Wk*k!&>24x*>E4ktUb280B@ z0(&;)m5lP;h4n{uA0&UNr{wwy>6>RZj+6op%dAyf2Hsz{3eV`BLOxyFO}cyA{w3Vg zl-GQ_W@fq6Q@ptM@}T8n%ls7;aUd$r<^acqn(n*o zdHA!ozrKdg9x0XL3XjG3j(cJJTk`FiiGJcW@pvY2slT}A)e!o)ONarlg~DU}kCNK| z$Im@48kEb$OWMIRS~EPj&k&dkS*8nXlgu$Q0!zC7uXF?5myxHEe-tvWuO-o2vh!aP zQNN}&OWS`>H#vN7*Eppx-$~Z5nb?ayll&$A z^wxgovtM>jzhkI}6z7hw{9W_1FZ1_+KF>-49*f|L;~xE&}ZR7L3j0Y8$fX8-^I literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_18.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_18.ico new file mode 100644 index 0000000000000000000000000000000000000000..e77056ca4724c0ea4947929b4b7a666fc42c4470 GIT binary patch literal 4286 zcmbW4Nl=^F5ywA)Sq3kF*jIs&K@uPqEr>;c*f&WQLP8P}S`fx;Laeqi*shvf<~ms_ z=gFih$6Rtq&1F)lR8G0MW>S?(#Wj^na+)|fI8_dv?iTMGA!a<($klvWzhD2m|F7S( zBq{J;QHD zYjqytp7H!k1F*lo2npX9toiH^^^Aaf-1HZ-uAyCp^|}ct`#XlJs@n%!{?CZJ|L_4EZ7#v% z?PYkH48pTi7|su)@cbyov4^!-_m4wjIn9rI?GRtGL&QA{ll|=f#M!l*7S zKHl`c-Ag#&V8hLNN$0bD;zpSH0@*K**I+lc02{#xco-N@=WtmA$|2?%h3Mi4bT-$0 zrPr$)Z<516TiM;CP0#;Q>n=EaAe)=p@uEaf2WtQ*;9Sc}c@G&~AT zUCBZ8A?<}RC`UH&Dee{Izq0D;bL;`hd71xCY2C$;$_ zzqjUK?T>fTJwMr6PV(Mcvdf!%C!Qq{?%JnDql(k*vuc800u&D>g4>^Ybm-I)O zH82`$iVo4|q@UN>4z05Qta>JZ>QDU-I7ZobJJC6rFSIB8W31gd+9R*S$-ee${61Y1 z^Sx7+3+w&*I#Gj-fNO3SXWBl_7n&_kcKz@aYww)sgQkiS?)`4u&7P0rd=dKD`{@7h z0~_h8-y@_(my+3_|u49f5&K)@*d-iA^s80 z8=A2+>&W}|z7A%S2grBC%j7@AxkoivMjsMC=opasow!ECx)a`~+7mxGKLGPX-T$`Y zK02e(6ddDhr+rL#k7sRa1*UDi>_6fkZ1|WT^NzB9O;s5%A9J9(Podwa|Fr+m?6n)U z*Z7W+Zq^>0?+2H?_rhpwEyuk)pL$MvoA4fKr&;fvvoT+d{IGkJ`BVd9Q;69c!~Kr@ z?ilHj`K##3%-+-5t0??H<~wcOZ_Qe58TLOHXD+Ti(x3MJDQc%#zY%uG{u{IC(>$y< z^U;&u8H+scCh&6#vF}h$G9TH*r};P3rGWtUYo@>buSTP~nAX7ALG*8Qo;Z4ha}W3O z)4dhee|8Xort%V8gQcLUM!nQ;3=Ohd@I4F8U*UIRkDGP8=MkIs-uA|7<_b3POY`%= z)Y=H6y=|Y+Sqk~meq!l(C%S+=M*rct;%O53xW}LEM?ghuVN37UslXH zDDk(Xm15P6z9`3ai4j{G<(fwphhf~LgE91-V3Xg?Z7OITyaOtIk<7k_T6(VT0lBB! zf&Zj?K>Hr*-%INsFtjqC^7c%bSubfO?G%RQ+VnXCYd&t$vhQin4=oKq?90Y$;rL}W z+|JMcqh4QehqQ}F$ZhZ1#xvx>L+U{gYmnxr)_u^ZEau$nitn<&X^jncw?Y&0Dd@bH z);vUgg}JegYuwCSR$n!|L2mYW?ADW=;NPhR$D6eO;dv(&f%AhX^UDegdG8cwJ33nl zeh2zY)O-c!OC~Gx`QV32`LpPk4I4tcxLP#Id&#&9*P}1CYV*G0>FE7)D0Fw;16{&pS~lwnb)P+;ZEv9DuHL9En17{ z!~H1Km)vDOoge5-NqR+OvcsufW-NVH3&#ConEOQ~%zjb{U7PnfkNV+4IfqPc#&bo; zGc~Xkp2wMtXWva)k71a#nV4Tu^nuJ3H5a;RUkN2l^8H=Et_JgQ3G|(og6Fq2{Ql(6 zD`4A?0PwA?fBV*MfX#?QFmtUyg!U{w9%r`+{1hE|AC`_ zu1|c!#98!3{Xf=T-B|bcr9|_Cf@XO3Ecw3Q%AW&0UKaqoRKSHKy?7@{BX1>1^|d4w uzfMQN=cq@-OJsdli0{z#^=06F6nH-c-dBP5SD-0#;qzMs@a{!1q5ltIT%bk( literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_19.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_19.ico new file mode 100644 index 0000000000000000000000000000000000000000..2098713bea6dee92f64a6070eabb235364d91097 GIT binary patch literal 4286 zcmbW4Nl;_w5yzik*k%DF5UUo1BqJUO5JGGMB!s|hLLdZ4Lc3sCg%Ha?0NYeKw;X(O zl^x%bOL9r2Vmp;oF0LfL>PZUO68F8#aSwqq&%k6{Ymd3!PJSDX2IRgbZ$ z#bVIBX6Bn!T{@k-qoei#KDF>WJ^2-1(&=<1BVDa}-`w!~@s;s^ZHH$d8JmOM$SlN{ z>=0eFLBM7GW^vr|g|m-8G4TprM=kS3@`}ga<)eGHfp){1f8wvnm|TXsNVc@+H^h1jBrO|9li?*h7c4=8SIAOv_rKHY^O$QdV_zJEksXD%jxziWjGg!|_rU@3(o(2KHu0IE z58B46KX&Sw4>waSo+}iJGF;#1`|ECzeVz`%8;6k$`$-&5l0MiBP5|>E>&MMJ5c?*7 z)ing;z5Gv&MwL_q=D#U8+Fp4#wKm6cezLp5YE9%H$KWlrv0fh5{Z8fs`7t?Ygx3e! z#ac+<`rqW&KX?GaxgiM54nnU{>*hJGI3LY%PLru&e{JrH)!NQ744GP>sYVLTbye`@ z5#}D*^Ui)~Rn$P6s!q%SvA>P4sg^N*&}9XWv-|757Io7Ne&J~<@G0f}c$?PT2fF%d z(A3D75&!Zy4if{NU}%&BudEgMQ&uBP^tXxeQyt!nUs3T$pP_AYVl9Tpy18syA`8kimFVtl3rs0XA4HDzV_>yPz7 z`KR~;*qbhU*H_&JRlSgd!*y>cm2lyDFQTqcpZlR*(*PP|H=_^d`(Ysd^hoC|K58E0 z2i-$VkBHx@sLkhN{nLE{-#6I@J*{dJ@<|g4&h~?Uz_o`X%stf|@g05bjIY5O*h_fW z`bRt?jF0j!)_)YQQU2YIZczgkCwg!3DJQEK|0>p?f2tp>o%&syjk|~Zd#A~j|D>~P zFYtpN2Qk6W=ZH-fMlPLG?-73-Emwo``j2z~b6{+$7x|9f)?d-Qn#9?1 zytQ~mT1U0V_^ANCUl#eDdKJ@vt&;a%rXquntIrsOGF4Iu^gKwo2stv8Kn7@3NUh zehg=#9CI${pTL(E7Xw*&QPFdr=Vdmvx)kFFLGy@DdQbcgtwQ9Vq5cz}>PwHBKzu*0 zC28=w&%yXk)TWr%#%3VRZ$A=UrI{_2-|IA?SD z=le8kLn2>`J`kH~Zo%0DI?{$}Dc1C0rteU9oxQCvW@&{b>@VWuK7jT8yu-}aK9?_h zRQf~AKhxpU-M|OQ*bJl}lm2AmM?TFxsy)(S4c3AOV-)6|R*w9tO6CV?KF$5m{4h9r z4B)`p^G^?mnnOKDx~IW@A|EP?ia@8To~78)xRv=y?QV3M)gaY9>F-%K{?xh`)YX;D z2N`~s@=Zo-tHJomhOj0x`yU(A8LEAIcMH=S(wtzb8&(r$@Zop77z3}W`=&F02A~E6 zzTQjV?AxFk@MZQosUTe7eus2`dZG5geViXX;-1H(Q-TI_(1b=grkbO?(>+t8?GXE1 zb<4sZX~AJ?`8c~jr104*8D8-2MrUAuZ61!dNP`2|13|Xm+6uc_4wSNTmcMJAv19xh zKKZaPX3nhplJyoh*O%~9`^Vxce#@cVj(xasTf}KSH=3 z5wNss8K3qZEat4v2z{Q-EsIxDz=5PNvj&I&slJH$5&2B{Wj^xu*^tpFJ>K;Feuw?u za-%*hVm?-wFGrg`QQugP3$uN?A0i*?#2g5i$Zpr_|hwdwqBzm8S#9$6`Xpp z6`X;cunT|t&B111nrVy>w;$PVd-wmwEc_3mPZj^T$-F*S#9m5z^~D0(FHG1>x|nw| z5%WxZ5b-#F8F1NuF=scwg}s{pu^z!lcV3y!n>m*dob=eUYz87ujOi_@% literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_2.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_2.ico new file mode 100644 index 0000000000000000000000000000000000000000..1ca41b60ca95e12ed269cc808ce05cd1b18a46c7 GIT binary patch literal 4286 zcmb`KNlYWz8OO`)I~ZeDgBQGE8r!s4%nrr|v)b6$*cgL1py_7cLU%*cN^*&E$uUus zLy}80r@4-1G?^SCmhG(Yce&aSo(M>`Ea?z_|K?b5Yq zOeT5R|H+G_+t?`UZc`0U_TBl-{AlOvs{8_w7Gx{n>W1J%50ih~29v$*zw0upMr;~s zCHj!u9@@=Ul}fItQ?E9=``bTUa`!@b$_~yR(=|4E3E?#o-M2K^%Y2Zh348k=x{Yc* z67p}R+&tQEkd^nC)PY5p?ThfV9hPVMn3UC3*Z3{fl|c89Ka$uB<;3T(y&kyJ8dNA0 z#W&NkM-2u;dB0hEkLHQY_6rJPT-61I*EBz3MQ{BX^?=pe|6~ejsoY>pdfX|C;FPIzh;d6HX z%hu3P!so!!+T2dP{Z&k2%ZrM^i_exsU`!Bs81HUlni;a7pAn`Zs}7X7E=jx}As^_0 zdSb||S7-P+jWy+mJe!YGd>rZ2Lozs)r3A8Fy(acda`$%#o>n}AppsQFSut09jmQV@ zA?|lzpNw5l4QMavYE!*$Y^sG8X(f}fQ4YgaJy0!ELB};kYM=uq zkW2l(i0f%1e080CtC6q9_yf3xXg->^L)8ehZ;%exgRqzMK{7P)T&v{@XLWbvXpQ!W`d;(|>S`PSCSKwDc4t#T<)uh93Y zZqy^RKM}vNq6}PpR(QA@#T+1idFquN_XLy4R2H1-{g1$>yl40`LsrK2IBbx_apH;P z9_&c7iH{fEcZu>3ei#+pe zag6s?CP1tR_PC+32Jn%|q^p-fc&m}ohV(0l{?iBWVo1#|W65pn8h7Dx$_r-Ay)R&ilN{-x`Dxm%O^g#s9 z_t)U@{wkh_VK?Ey90Y$v>kq{ZSap`&_&n_4IOR^v-il5#rU83ftoD|Ah~k>&xpbf3 z-H&;$MmDZNWUKLbwjF_!@6W^Ow|#K76M>_90eG-B3!yoOnb`EQX*89okn`p7RshZq z*Wk%<0(}NyCou;+pW-$)$#MTuLIP`be{Bl(*S+v)KLVF0acEaJf(GlLu0wvU6m%*X z#6M}druFwsxcqWAHB%8MSuaB&#JITK7zPm}OyZv{^7hv4aH;!1e^ z;wT2L0V`t?m)D?Oe~p{v<(cw%I`XS`+J85f-Jc(CEi&E{ocqafoW(}*UGnF6q&yCF z8d-|CDg?(Ky4E7=3zsTQuqK55>(qO&u}^k~n_F6R8?et>znz*<}!rFDL|3eG+= zv|^4m6f3fb$ArD+uy?RpJjQzPvDS4J0?y3TG*ATLU*p~>s>vIC`dF~K;P}a2(!)GF z++D^s6UCm0g0tTu#L42#)Va^1$7fmy9_}sUvn33N-OI=Zs2p~y1LR-X!2M4DG&ClALm}ed6!|;H!j4h#dSx$eug}rOKkFSbU7!? z?|Hi(x=*U0_mLF*?=-M+*AL||@ZEGBZsOCJt${1qiq5>Xmz;ycO&`kzt%sBQL99K- zN?fK8`%E55r&u?t9pxCOVUpxvDq*7Q}gI! z0gku)87~1`pJ@?~M7bib2OC~Uz1Jq>KwNL}dGb$+>RZ_SB?UQUTO}X zTOQ_x{P3bN^0=Frh3)t>9HEcIM=dYKyzFyDoCkc(V-EGjMr3yU(QfGd)9v7YkMH?j zA8w!*jF-;Ow!<$k4x+!@UR#*4*=+RNP7?dQB9+DcSn-eKv#%BRZMNu{olpO(*lZ0Y z^gGgxdl-(Z95?cU literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_20.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_20.ico new file mode 100644 index 0000000000000000000000000000000000000000..c8945e75a76f2276248c0278f7e50b97f357f42f GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_22.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_22.ico new file mode 100644 index 0000000000000000000000000000000000000000..91fb18958bc83eac07cd6568367a7464de62a517 GIT binary patch literal 4286 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 Mb5i)GvJ%PgKMJgV)Bpeg literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_4.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_4.ico new file mode 100644 index 0000000000000000000000000000000000000000..c56f472e14cfb519f1c8b8850272149ec2acc248 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_7.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_7.ico new file mode 100644 index 0000000000000000000000000000000000000000..ddf25bcbdcb667eab2bc3fa209bdeaf620656e65 GIT binary patch literal 4286 zcmbuCTTJ5l703U0A7@lhQB)LA1XMsqP*G771n+WDxhN=jo$;>YeP-9)bkn3yeQ27t z4}EF-FiBsU^rcO+$s}#xd&^AUx@nUp+ccZayo}k*&gnTn{QX6oHKvO>@aGTwKIeST z<@Zw%B>1OR3-l~JmkL6KAP5FDye0Ib(S7!~d`Z3eR?peZf{^D_sS50N<-O)+ArDu} zL6dx|Rd4w*F^on{Ww)uZchu4PJm|LmBQ$J(lL!uewKU^-y%HIExf&V&L1^67X056! z#HF%sS?OFutIbeXHE3)4^^CUzA|rO-Y~nJTbRfSMR>EF5*^I&Q#w;8> z3d7#Y6l|d{n~4eZE4V|sx^uv(FXlWnYRu!#*4N>o&NOx^=GY~d*wg5nG&c_v4+@bR zg0r1@IN6H9;o~sut^{FYVH~d`e>Iyc@88jf99v6WcVM9Hoyf-6XUDFy7Xp1i*4L(I zeDXmlErO@J3-D|&!TdPdh{FCVX)yr@YoY(%!G|oHq2BmDHp};A+?>4-?1RLV6BI@F znGcnyfks}6eDneRINOQC@#d8eC!5jFwOS$nn{;Sb$rU4A<}a?teN}6u`z+R-rd$e+ zRxKovot)~2=Yt*1phAYaObUG#9W2faz*1-c=CCGZd3jJPD+co62y5}_?mXk4Zed+M z4#Ccn59?tJbLp;sS#s7u;>@*+p9A@n~#U2^PK4bNEr8~tuU^TFM zV>u5xp`oG_G|1PK%NTzp;)a!o3rbM~b%l)iu)h`}7HTkuJrP9>W-t$a*hU{>(_Ss- zTeMpFgS_0=r~%VH)#u&fjPZ1~FuvQ?1PNqQzR8G9J{ap1uo`tUbG0{tN-hO8YG7-w zho^gSv>2RhM^S???61+R8i%8;*mKTrZK`c4&dFu@qa30ZBAe^(>1Y9$%>W}kCNbwj zT}G%!em(jT$K0&V4#FxL>90Y3NQYtrRYrfA0Sesg1NWaJa&n>5!Vhs;n@0c&#}cog$OkGT;vm6#v2SkR69 zl>Wz?Va&la>@NFoR{4SEfzv7EC`yaZIh*s#&abS;_H<1pOoJ#5Va@$iCvao zz--FX!Rn3pRDV>D!`&v4-)(9D>Pa%v{|VNZ-K-O9V0+OIr#rKh^GkjJXEO3f96HQ@ zuEWxJM*G`@)53Dk*lB#l{X$rrPR$w0yVu^rjOvZzUkbZK{xar;a=aFwfcncC9P77= z{G$!hKfv_&beZX>l+|Hu@bjLJj&`MDPve)P4iVh*Y0eQp=&>dMoqQIC;j)=0$6`OFjuDb#5TRs6dvjj&lObT>G~62UtJ;cX$Fx7<9!y9Z>W*u zcjQ31c(xyh^MfSgr}{v4#i#g@eY_ohV@2(02GF_6*Jrs9&ovlVCZBxZ@l)*+f4JKy z@;jQ;jBmzR&kvK=_z#E5;pk%@<{$fSo%(MQ&h}!zL^L}a(HYBW(SMJ$=liSymb_;^WVRNC?Z*Jf7JQvlIF)`*{x9-N!@n%!nl*>M)UqkL!bY5!jd z(>|M;y{!K)X8`f3uTQ=oV2tVCRfBb}1V(>e0V6-FfY!&w%nxN>f#^dTSG-iIgaT7T ztxuYpdxKB&kNTf$!1r7}ht3Zd;q<#R;`+W{DWLsO3Y}*%nEGuMyYKn29C|)UU(QWBzFLiX-Y!SI7s(m-zvujYznK`Y z1?fD8i{&K#u3WyxeX0C>>2G(6`!-*)>8#$Z*B6=a|4TBfwZ6n^ttxb;{s+J9w>Lfm zdR&wMypRAE4B%jLz7+)3g&>rCDG2$Wr7Rm?vtQu6PPdQnJz4s_%WL-i&+s?6h6LA= U;F=O#TY`*icp>B?6QKbA1GKe*x&QzG literal 0 HcmV?d00001 diff --git a/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_8.ico b/Toastify/Resources/SystemTrayAnimation/toastify_loading_spotify_8.ico new file mode 100644 index 0000000000000000000000000000000000000000..9037ddea0fef3da6cdb7e829af64dbcfa8aea88f GIT binary patch literal 4286 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 4 app.manifest - Resources\spotify.ico + Resources\ToastifyIcon.ico Toastify.EntryPoint 3.5 @@ -99,6 +99,12 @@ MSBuild:Compile Designer + + True + True + Resources.resx + + @@ -120,6 +126,10 @@ + + TextTemplatingFileGenerator + Analytics.g.cs + True True @@ -171,11 +181,6 @@ Code - - True - True - Resources.resx - True Settings.settings @@ -189,6 +194,7 @@ ResXFileCodeGenerator Resources.Designer.cs + Designer LICENSE @@ -216,11 +222,7 @@ - - TextTemplatingFileGenerator - Analytics.g.cs - - + @@ -231,6 +233,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + Always @@ -239,6 +265,7 @@ + diff --git a/Toastify/src/Common/SystemTray.cs b/Toastify/src/Common/SystemTray.cs new file mode 100644 index 00000000..55668a38 --- /dev/null +++ b/Toastify/src/Common/SystemTray.cs @@ -0,0 +1,270 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Toastify.Common +{ + internal class SystemTray + { + private readonly NotifyIcon sysTrayIcon; + + private int timeOut; + private bool isTimeOut; + private int _animationStepMilliseconds = 175; + private int animationStep; + private readonly Timer animationTimer; + private Icon[] animationIcons; + + #region Events + + public event MouseEventHandler MouseMove; + + public event MouseEventHandler MouseUp; + + public event MouseEventHandler MouseDown; + + public event MouseEventHandler MouseClick; + + public event MouseEventHandler MouseDoubleClick; + + public event EventHandler Click; + + public event EventHandler DoubleClick; + + public event EventHandler BalloonTipShown; + + public event EventHandler BalloonTipClosed; + + public event EventHandler BalloonTipClicked; + + #endregion Events + + #region Properties + + public Icon Icon + { + get { return this.sysTrayIcon.Icon; } + set { this.sysTrayIcon.Icon = value; } + } + + public bool Visible + { + get { return this.sysTrayIcon.Visible; } + set { this.sysTrayIcon.Visible = value; } + } + + public string Text + { + get { return this.sysTrayIcon.Text; } + set { this.sysTrayIcon.Text = value; } + } + + public bool Animate { get; set; } + + public int AnimationStepMilliseconds + { + get + { + return this._animationStepMilliseconds; + } + set + { + this._animationStepMilliseconds = value; + if (this.animationTimer != null) + this.animationTimer.Interval = value; + } + } + + public string BalloonTipText + { + get { return this.sysTrayIcon.BalloonTipText; } + set { this.sysTrayIcon.BalloonTipText = value; } + } + + public string BalloonTipTitle + { + get { return this.sysTrayIcon.BalloonTipTitle; } + set { this.sysTrayIcon.BalloonTipTitle = value; } + } + + public ToolTipIcon BalloonTipIcon + { + get { return this.sysTrayIcon.BalloonTipIcon; } + set { this.sysTrayIcon.BalloonTipIcon = value; } + } + + public ContextMenu ContextMenu + { + get { return this.sysTrayIcon.ContextMenu; } + set { this.sysTrayIcon.ContextMenu = value; } + } + + public ContextMenuStrip ContextMenuStrip + { + get { return this.sysTrayIcon.ContextMenuStrip; } + set { this.sysTrayIcon.ContextMenuStrip = value; } + } + + #endregion Properties + + public SystemTray(string tooltipText = null, Icon icon = null, bool animate = false) + { + this.sysTrayIcon = new NotifyIcon(); + + this.animationTimer = new Timer() + { + Interval = this.AnimationStepMilliseconds + }; + this.sysTrayIcon.Visible = true; + this.sysTrayIcon.Text = tooltipText; + this.sysTrayIcon.Icon = icon; + this.Animate = animate; + + this.sysTrayIcon.MouseMove += this.SysTrayIcon_MouseMove; + this.sysTrayIcon.MouseUp += this.SysTrayIcon_MouseUp; + this.sysTrayIcon.MouseDown += this.SysTrayIcon_MouseDown; + this.sysTrayIcon.MouseClick += this.SysTrayIcon_MouseClick; + this.sysTrayIcon.MouseDoubleClick += this.SysTrayIcon_MouseDoubleClick; + this.sysTrayIcon.Click += this.SysTrayIcon_Click; + this.sysTrayIcon.DoubleClick += this.SysTrayIcon_DoubleClick; + this.sysTrayIcon.BalloonTipShown += this.SysTrayIcon_BalloonTipShown; + this.sysTrayIcon.BalloonTipClosed += this.SysTrayIcon_BalloonTipClosed; + this.sysTrayIcon.BalloonTipClicked += this.SysTrayIcon_BalloonTipClicked; + + this.animationTimer.Tick += this.PerformAnimationStep; + } + + public void Dispose() + { + this.sysTrayIcon.Dispose(); + this.animationTimer.Dispose(); + } + + public void SetContextMenuOrStrip(object value) + { + if (value.GetType() == typeof(ContextMenu)) + this.sysTrayIcon.ContextMenu = (ContextMenu)value; + if (value.GetType() == typeof(ContextMenuStrip)) + this.sysTrayIcon.ContextMenuStrip = (ContextMenuStrip)value; + } + + public void StartAnimation() + { + if (this.Animate) + this.animationTimer.Start(); + } + + public void StartAnimation(int timeOut) + { + if (this.Animate) + { + this.isTimeOut = true; + this.timeOut = timeOut; + this.animationTimer.Start(); + } + } + + public void StopAnimation() + { + if (this.Animate) + this.animationTimer.Stop(); + } + + public void ShowBaloonTrayTip(int timeout) + { + this.sysTrayIcon.ShowBalloonTip(timeout); + } + + public void ShowBaloonTrayTip(int timeOut, string tipTitle, string tipText, ToolTipIcon tipIcon) + { + this.sysTrayIcon.ShowBalloonTip(timeOut, tipTitle, tipText, tipIcon); + } + + public void SetIconRange(object[] icons) + { + Type tp = icons[0].GetType(); + if (tp == typeof(string)) + { + this.animationIcons = new Icon[icons.Length]; + for (int i = 0; i < icons.Length; ++i) + this.animationIcons[i] = new Icon(icons[i].ToString()); + } + if (tp == typeof(Icon)) + { + this.animationIcons = new Icon[icons.Length]; + for (int i = 0; i < icons.Length; ++i) + this.animationIcons[i] = (Icon)icons[i]; + } + if (icons.Length > 0) + this.Icon = this.animationIcons[0]; + } + + private void PerformAnimationStep(object sender, EventArgs e) + { + this.sysTrayIcon.Icon = this.animationIcons[this.animationStep++]; + this.timeOut -= this.AnimationStepMilliseconds; + + if (this.animationStep >= this.animationIcons.Length) + this.animationStep = 0; + if (this.isTimeOut && this.timeOut < this.AnimationStepMilliseconds) + { + this.animationTimer.Stop(); + this.isTimeOut = false; + } + } + + #region Event Handlers + + private void SysTrayIcon_MouseMove(object sender, MouseEventArgs e) + { + this.MouseMove?.Invoke(sender, e); + } + + private void SysTrayIcon_MouseUp(object sender, MouseEventArgs e) + { + this.MouseUp?.Invoke(sender, e); + } + + private void SysTrayIcon_MouseDown(object sender, MouseEventArgs e) + { + this.MouseDown?.Invoke(sender, e); + } + + private void SysTrayIcon_MouseClick(object sender, MouseEventArgs e) + { + this.MouseClick?.Invoke(sender, e); + } + + private void SysTrayIcon_MouseDoubleClick(object sender, MouseEventArgs e) + { + this.MouseDoubleClick?.Invoke(sender, e); + } + + private void SysTrayIcon_Click(object sender, EventArgs e) + { + this.Click?.Invoke(sender, e); + } + + private void SysTrayIcon_DoubleClick(object sender, EventArgs e) + { + this.DoubleClick?.Invoke(sender, e); + } + + private void SysTrayIcon_BalloonTipShown(object sender, EventArgs e) + { + this.BalloonTipShown?.Invoke(sender, e); + } + + private void SysTrayIcon_BalloonTipClosed(object sender, EventArgs e) + { + this.BalloonTipClosed?.Invoke(sender, e); + } + + private void SysTrayIcon_BalloonTipClicked(object sender, EventArgs e) + { + this.BalloonTipClicked?.Invoke(sender, e); + } + + #endregion Event Handlers + } +} \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index dc6d7ad7..9acd92c0 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -2,14 +2,19 @@ using SpotifyAPI.Local.Models; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Diagnostics; using System.Linq; +using System.Net; using System.Threading; +using System.Windows; using System.Windows.Input; +using System.Windows.Threading; using Toastify.Events; using Toastify.Helpers; using Toastify.Model; using Toastify.Services; +using Timer = System.Timers.Timer; namespace Toastify.Core { @@ -28,6 +33,10 @@ public static Spotify Instance #region Private fields + private readonly BackgroundWorker spotifyLauncher = new BackgroundWorker { WorkerSupportsCancellation = true }; + + private readonly EventWaitHandle spotifyLauncherWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, "Toastify_SpotifyLauncherWaitHandle"); + private readonly SpotifyLocalAPI localAPI; private readonly SpotifyLocalAPIConfig localAPIConfig; @@ -100,45 +109,124 @@ protected Spotify() public void StartSpotify() { - int timeout = Settings.Instance.StartupWaitTimeout; - this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(timeout) : this.FindSpotifyProcess(); + this.spotifyLauncher.DoWork += this.StartSpotify_WorkerTask; + this.spotifyLauncher.RunWorkerCompleted += this.StartSpotify_WorkerTaskCompleted; + + if (Settings.Instance.StartupWaitTimeout < 60000) + Settings.Instance.StartupWaitTimeout = 60000; + Timer timeoutTimer = new Timer(Settings.Instance.StartupWaitTimeout) { AutoReset = false }; + timeoutTimer.Elapsed += (sender, e) => this.spotifyLauncher.CancelAsync(); + + this.spotifyLauncher.RunWorkerAsync(); + timeoutTimer.Start(); + } + + #region StartSpotify background worker + private void StartSpotify_WorkerTask(object sender, DoWorkEventArgs e) + { + this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(e) : this.FindSpotifyProcess(); + if (e.Cancel) + return; if (this.spotifyProcess == null) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_PROCESS); this.spotifyProcess.EnableRaisingEvents = true; this.spotifyProcess.Exited += this.Spotify_Exited; - this.ConnectWithSpotify(); + this.ConnectWithSpotify(e); + } + + private void StartSpotify_WorkerTaskCompleted(object sender, RunWorkerCompletedEventArgs e) + { + if (e.Error != null || e.Cancelled) + { + if (e.Error != null) + { + if (e.Error is ApplicationStartupException applicationStartupException) + { + Debug.WriteLine(applicationStartupException.StackTrace); + + string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY; + string techDetails = $"Technical details\n{applicationStartupException.Message}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, + MessageBoxImage.Error); + + Analytics.TrackException(applicationStartupException, true); + } + else if (e.Error is WebException webException) + { + Debug.WriteLine(webException.StackTrace); + + string errorMsg = Properties.Resources.ERROR_STARTUP_RESTART; + string status = $"{webException.Status}"; + if (webException.Status == WebExceptionStatus.ProtocolError) + status += + $" ({(webException.Response as HttpWebResponse)?.StatusCode}, \"{(webException.Response as HttpWebResponse)?.StatusDescription}\")"; + string techDetails = + $"Technical details: {webException.Message}\n{webException.HResult}, {status}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, + MessageBoxImage.Error); + + Analytics.TrackException(webException, true); + } + else + { + Debug.WriteLine(e.Error.StackTrace); + + string errorMsg = Properties.Resources.ERROR_UNKNOWN; + string techDetails = $"Technical Details: {e.Error.Message}\n{e.Error.StackTrace}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, + MessageBoxImage.Error); + + Analytics.TrackException(e.Error, true); + } + } + else // e.Cancelled + { + Debug.WriteLine("ERROR: Toastify was not able to find Spotify within the timeout interval."); + + string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY; + const string techDetails = "Technical Details: timeout"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + } + + // Terminate Toastify + Application.Current.Dispatcher.BeginInvoke( + DispatcherPriority.Normal, + new Action(() => Application.Current.Shutdown())); + } + else + this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); + + this.spotifyLauncherWaitHandle.Close(); } /// /// Starts the Spotify process and waits for it to enter an idle state. /// - /// Specifies the maximum amount of time to wait for the process to enter an idle state. /// The started process. - private Process LaunchSpotifyAndWaitForInputIdle(int timeoutMilliseconds = 10000) + private Process LaunchSpotifyAndWaitForInputIdle(DoWorkEventArgs e) { - int maxWait = timeoutMilliseconds; - // Launch Spotify. - Process spotifyProcess = Process.Start(this.spotifyPath); + this.spotifyProcess = Process.Start(this.spotifyPath); // If it is an UWP app, then Process.Start should return null: we need to look for the process. - while (spotifyProcess == null && timeoutMilliseconds > 0) + bool signaled = false; + while ((this.spotifyProcess = this.FindSpotifyProcess()) == null && !signaled) { - spotifyProcess = this.FindSpotifyProcess(); - timeoutMilliseconds -= 250; - Thread.Sleep(250); + signaled = this.spotifyLauncherWaitHandle.WaitOne(1000); + if (this.spotifyLauncher.CheckCancellation(e)) + return this.spotifyProcess; } // We need to let Spotify start-up before interacting with it. - spotifyProcess?.WaitForInputIdle(maxWait); + this.spotifyProcess?.WaitForInputIdle(); if (Settings.Instance.MinimizeSpotifyOnStartup) this.Minimize(1000); - return spotifyProcess; + return this.spotifyProcess; } /// /// The rectangular area of the primary screen. - public static Rect GetScreenRect() + public static System.Windows.Rect GetScreenRect() { Screen screen = Screen.PrimaryScreen; - return new Rect( + return new System.Windows.Rect( new Point(screen.WorkingArea.X, screen.WorkingArea.Y), new Size(screen.WorkingArea.Width / GetScaleFactor(), screen.WorkingArea.Height / GetScaleFactor())); } @@ -151,11 +151,11 @@ public static double GetScreenHeight() /// Get the rectangular area of the screen that contains the given point. /// @@ -148,14 +236,11 @@ private Process LaunchSpotifyAndWaitForInputIdle(int timeoutMilliseconds = 10000 /// if Toastify was not able to connect with Spotify or /// if Spotify returns a null status after connection. /// - private void ConnectWithSpotify() + private void ConnectWithSpotify(DoWorkEventArgs e) { // Sometimes (specially with a lot of active processes), the WaitForInputIdle method (used in LaunchSpotifyAndWaitForInputIdle) // does not seem to wait long enough to let us connect to Spotify successfully on the first try; so we wait and re-try. - // Pre-emptive wait, in case some fool set SpotifyConnectionAttempts to 1! ;) - Thread.Sleep(500); - // TODO: Remove the following lines once Spotify version > 1.0.62 comes out FileVersionInfo spotifyVersionInfo = this.spotifyProcess.MainModule.FileVersionInfo; Version spotifyVersion = new Version( @@ -169,26 +254,38 @@ private void ConnectWithSpotify() this.localAPIConfig.Port = 4371; } - int maxAttempts = Settings.Instance.SpotifyConnectionAttempts; - bool connected; - int attempts = 1; - while (!(connected = this.localAPI.Connect()) && attempts < maxAttempts) + this.spotifyLauncherWaitHandle.Reset(); + bool signaled; + + bool connected = false; + do { - attempts++; - Thread.Sleep(1000); - } + signaled = this.spotifyLauncherWaitHandle.WaitOne(500); + if (this.spotifyLauncher.CheckCancellation(e)) + return; + + try + { + connected = this.localAPI.Connect(); + } + catch (WebException) + { + // ignored + } + } while (!connected && !signaled); if (!connected) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECT); - Debug.WriteLine($"Connected with Spotify after {attempts} attempt(s) on \"{this.localAPIConfig.HostUrl}:{this.localAPIConfig.Port}/\"."); + Debug.WriteLine($"Connected with Spotify on \"{this.localAPIConfig.HostUrl}:{this.localAPIConfig.Port}/\"."); + // Try to get a status report from Spotify var status = this.localAPI.GetStatus(); if (status == null) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_STATUS_NULL); - - this.Connected?.Invoke(this, new SpotifyStateEventArgs(status)); } + #endregion StartSpotify background worker + private Process FindSpotifyProcess() { var processes = Process.GetProcessesByName("spotify"); diff --git a/Toastify/src/Helpers/Extensions.cs b/Toastify/src/Helpers/Extensions.cs index 9b8f8e1e..34ae8367 100644 --- a/Toastify/src/Helpers/Extensions.cs +++ b/Toastify/src/Helpers/Extensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Globalization; using System.Linq; using System.Threading; @@ -23,5 +24,12 @@ public static string ToStringInvariantCulture(this Exception exception) Thread.CurrentThread.CurrentUICulture = currentUICulture; return message; } + + public static bool CheckCancellation(this BackgroundWorker backgroundWorker, DoWorkEventArgs doWorkEventArgs) + { + if (backgroundWorker.CancellationPending) + doWorkEventArgs.Cancel = true; + return doWorkEventArgs.Cancel; + } } } \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 26e6a0f7..9f848b93 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -480,8 +480,6 @@ public string SongProgressBarForegroundColor public int StartupWaitTimeout { get; set; } - public int SpotifyConnectionAttempts { get; set; } - public WindowPosition SettingsWindowLastLocation { get; set; } public List Plugins { get; set; } @@ -503,8 +501,7 @@ public void Default(bool setHotKeys = false) this.SetDefaultToastColors(); // (hidden) - this.StartupWaitTimeout = 20000; - this.SpotifyConnectionAttempts = 5; + this.StartupWaitTimeout = 60000; this.Plugins = new List(); // There are a few settings that we don't really want to override when @@ -666,10 +663,6 @@ private void SanitizeSettingsFile() // Validate StartupWaitTimeout: it cannot be negative! this.StartupWaitTimeout = Math.Abs(this.StartupWaitTimeout); - // Validate SpotifyConnectionAttempts: it cannot be non-positive! - this.SpotifyConnectionAttempts = Math.Abs(this.SpotifyConnectionAttempts); - this.SpotifyConnectionAttempts += this.SpotifyConnectionAttempts == 0 ? 1 : 0; - this.Save(); } diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 309e8a57..446a935e 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -10,7 +10,7 @@ xmlns:viewmodel="clr-namespace:Toastify.ViewModel" mc:Ignorable="d" x:Class="Toastify.View.SettingsView" - Title="Toastify - Settings" Height="570" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/spotify.ico" Closed="Window_Closed"> + Title="Toastify - Settings" Height="570" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/ToastifyIcon.ico" Closed="Window_Closed"> diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index a95fca36..ef10872d 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -4,7 +4,6 @@ using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; -using System.Net; using System.Net.Cache; using System.Reflection; using System.Threading; @@ -17,6 +16,7 @@ using System.Windows.Media.Effects; using System.Windows.Media.Imaging; using System.Windows.Threading; +using Toastify.Common; using Toastify.Core; using Toastify.Events; using Toastify.Helpers; @@ -28,8 +28,8 @@ using Clipboard = System.Windows.Clipboard; using Color = System.Windows.Media.Color; using ColorConverter = System.Windows.Media.ColorConverter; -using MessageBox = System.Windows.MessageBox; using MouseEventArgs = System.Windows.Input.MouseEventArgs; +using Point = System.Windows.Point; using Timer = System.Timers.Timer; namespace Toastify.View @@ -52,7 +52,7 @@ public partial class ToastView : Window private Timer minimizeTimer; - private NotifyIcon trayIcon; + private SystemTray trayIcon; private Song currentSong; private BitmapImage cover; @@ -62,6 +62,7 @@ public partial class ToastView : Window private bool isUpdateToast; private bool isPreviewForSettings; + private bool initialized; private bool dragging; private bool paused; @@ -96,15 +97,18 @@ private void Init() { this.InitToast(); this.InitTrayIcon(); - this.StartSpotifyOrAskUser(); + this.StartSpotify(); + } + private void FinalizeInit() + { // Subscribe to Spotify's events (i.e. SpotifyLocalAPI's). Spotify.Instance.Exited += this.Application_Shutdown; Spotify.Instance.SongChanged += this.Spotify_SongChanged; Spotify.Instance.PlayStateChanged += this.Spotify_PlayStateChanged; Spotify.Instance.TrackTimeChanged += this.Spotify_TrackTimeChanged; - // Subscribe to the Settings view events + // Subscribe to SettingsView's events SettingsView.SettingsLaunched += this.SettingsView_Launched; SettingsView.SettingsClosed += this.SettingsView_Closed; @@ -114,6 +118,8 @@ private void Init() this.Started?.Invoke(this, EventArgs.Empty); this.InitVersionChecker(); + + this.initialized = true; } public void InitToast() @@ -180,19 +186,52 @@ public void InitToast() private void InitTrayIcon() { - this.trayIcon = new NotifyIcon + this.trayIcon = new SystemTray(@"Toastify – Waiting for Spotify...", null, true) { - Icon = Properties.Resources.spotifyicon, - Text = @"Toastify", + AnimationStepMilliseconds = 75, Visible = true, ContextMenu = new ContextMenu() }; - //Init tray icon menu - MenuItem menuSettings = new MenuItem { Text = @"Settings" }; + object[] animationIcons = { + Properties.Resources.toastify_loading_spotify_0, + Properties.Resources.toastify_loading_spotify_0, + Properties.Resources.toastify_loading_spotify_0, + Properties.Resources.toastify_loading_spotify_1, + Properties.Resources.toastify_loading_spotify_2, + Properties.Resources.toastify_loading_spotify_3, + Properties.Resources.toastify_loading_spotify_4, + Properties.Resources.toastify_loading_spotify_5, + Properties.Resources.toastify_loading_spotify_6, + Properties.Resources.toastify_loading_spotify_7, + Properties.Resources.toastify_loading_spotify_8, + Properties.Resources.toastify_loading_spotify_9, + Properties.Resources.toastify_loading_spotify_10, + Properties.Resources.toastify_loading_spotify_11, + Properties.Resources.toastify_loading_spotify_12, + Properties.Resources.toastify_loading_spotify_13, + Properties.Resources.toastify_loading_spotify_14, + Properties.Resources.toastify_loading_spotify_15, + Properties.Resources.toastify_loading_spotify_16, + Properties.Resources.toastify_loading_spotify_17, + Properties.Resources.toastify_loading_spotify_18, + Properties.Resources.toastify_loading_spotify_19, + Properties.Resources.toastify_loading_spotify_20, + Properties.Resources.toastify_loading_spotify_21, + Properties.Resources.toastify_loading_spotify_22, + Properties.Resources.toastify_loading_spotify_23, + Properties.Resources.toastify_loading_spotify_0, + Properties.Resources.toastify_loading_spotify_0, + Properties.Resources.toastify_loading_spotify_0 + }; + this.trayIcon.SetIconRange(animationIcons); + this.trayIcon.StartAnimation(); + + // Init tray icon menu + MenuItem menuSettings = new MenuItem { Text = @"Settings", Enabled = false }; menuSettings.Click += (s, ev) => { SettingsView.Launch(this); }; - MenuItem menuAbout = new MenuItem { Text = @"About Toastify..." }; + MenuItem menuAbout = new MenuItem { Text = @"About Toastify" }; menuAbout.Click += (s, ev) => { new AboutView().ShowDialog(); }; MenuItem menuExit = new MenuItem { Text = @"Exit" }; @@ -202,50 +241,22 @@ private void InitTrayIcon() this.trayIcon.ContextMenu.MenuItems.Add(menuAbout); this.trayIcon.ContextMenu.MenuItems.Add("-"); this.trayIcon.ContextMenu.MenuItems.Add(menuExit); + } + private void FinalizeTrayIconInitialization() + { + this.trayIcon.StopAnimation(); + this.trayIcon.Animate = false; + this.trayIcon.Text = @"Toastify"; + this.trayIcon.Icon = Properties.Resources.ToastifyIcon; + this.trayIcon.ContextMenu.MenuItems[0].Enabled = true; this.trayIcon.DoubleClick += this.TrayIcon_DoubleClick; } - private void StartSpotifyOrAskUser() + private void StartSpotify() { - try - { - Spotify.Instance.Connected += this.Spotify_Connected; - Spotify.Instance.StartSpotify(); - } - catch (ApplicationStartupException e) - { - Debug.WriteLine(e.StackTrace); - - string errorMsg = Properties.Resources.ERROR_STARTUP; - string techDetails = $"Technical details\n{e.Message}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); - - Analytics.TrackException(e, true); - } - catch (WebException e) - { - Debug.WriteLine(e.StackTrace); - - string errorMsg = Properties.Resources.ERROR_STARTUP_RESTART; - string status = $"{e.Status}"; - if (e.Status == WebExceptionStatus.ProtocolError) - status += $" ({(e.Response as HttpWebResponse)?.StatusCode}, \"{(e.Response as HttpWebResponse)?.StatusDescription}\")"; - string techDetails = $"Technical details: {e.Message}\n{e.HResult}, {status}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); - - Analytics.TrackException(e, true); - } - catch (Exception e) - { - Debug.WriteLine(e.StackTrace); - - string errorMsg = Properties.Resources.ERROR_UNKNOWN; - string techDetails = $"Technical Details: {e.Message}\n{e.StackTrace}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); - - Analytics.TrackException(e, true); - } + Spotify.Instance.Connected += this.Spotify_Connected; + Spotify.Instance.StartSpotify(); } private void LoadPlugins() @@ -627,13 +638,16 @@ protected override void OnClosing(System.ComponentModel.CancelEventArgs e) this.minimizeTimer?.Stop(); this.minimizeTimer?.Dispose(); - // Ensure trayicon is removed on exit. (Thx Linus) - this.trayIcon.Visible = false; - this.trayIcon.Dispose(); - this.trayIcon = null; + // Ensure trayicon is removed on exit. + if (this.trayIcon != null) + { + this.trayIcon.Visible = false; + this.trayIcon.Dispose(); + this.trayIcon = null; + } this.ToastClosing?.Invoke(this, EventArgs.Empty); - this.Plugins.Clear(); + this.Plugins?.Clear(); base.OnClosing(e); } @@ -653,6 +667,9 @@ protected override void OnClosing(System.ComponentModel.CancelEventArgs e) internal static void HotkeyActionCallback(Hotkey hotkey) { + if (!Current.initialized) + return; + // Bug 9421: ignore this keypress if it is the same as the previous one and it's been less than // WAIT_BETWEEN_HOTKEY_PRESS since the last press. Note that we do not update // _lastHotkeyPressTime in this case to avoid being trapped in a never ending cycle of @@ -764,12 +781,17 @@ private void Window_MouseUp(object sender, MouseButtonEventArgs e) /// /// This event is received only once, at the start of the application. - /// Here, we set up the initial state of the toast based on the current state of Spotify. + /// Here, we finalize the initialization of Toastify and set up the initial state of the toast based on the current state of Spotify. /// /// . /// private void Spotify_Connected(object sender, SpotifyStateEventArgs e) { + // Finalize initialization + this.FinalizeTrayIconInitialization(); + this.FinalizeInit(); + + // Update current song if (e.CurrentSong == null || !e.CurrentSong.IsValid()) return; From 0cd5b5fa812f794936e22cbad1f25776324f4247 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 14 Oct 2017 00:16:07 +0200 Subject: [PATCH 106/452] Removed deprecated code and useless comments --- Toastify/src/Core/Spotify.cs | 13 ------------- Toastify/src/View/ToastView.xaml.cs | 7 ------- 2 files changed, 20 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 9acd92c0..71a646f7 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -241,19 +241,6 @@ private void ConnectWithSpotify(DoWorkEventArgs e) // Sometimes (specially with a lot of active processes), the WaitForInputIdle method (used in LaunchSpotifyAndWaitForInputIdle) // does not seem to wait long enough to let us connect to Spotify successfully on the first try; so we wait and re-try. - // TODO: Remove the following lines once Spotify version > 1.0.62 comes out - FileVersionInfo spotifyVersionInfo = this.spotifyProcess.MainModule.FileVersionInfo; - Version spotifyVersion = new Version( - spotifyVersionInfo.ProductMajorPart, - spotifyVersionInfo.ProductMinorPart, - spotifyVersionInfo.ProductBuildPart, - spotifyVersionInfo.ProductPrivatePart); - if (spotifyVersion < new Version(1, 0, 62)) - { - this.localAPIConfig.HostUrl = "https://127.0.0.1"; - this.localAPIConfig.Port = 4371; - } - this.spotifyLauncherWaitHandle.Reset(); bool signaled; diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index ef10872d..87e5efc6 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -37,8 +37,6 @@ namespace Toastify.View [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class ToastView : Window { - // TODO: Actually implement the MVVM pattern: create ViewModels for every View. - private const string DEFAULT_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyLogo.png"; private const string AD_PLAYING_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyAdPlaying.png"; private const string ALBUM_ACCESS_DENIED_ICON = "pack://application:,,,/Toastify;component/Resources/ToastifyAccessDenied.png"; @@ -127,11 +125,6 @@ public void InitToast() if (!this.isPreviewForSettings) this.SetToastVisibility(false); - //If we find any invalid settings in the xml we skip it and use default. - //User notification of bad settings will be implemented with the settings dialog. - - // TODO: Refactor InitToast method. - // This method is UGLY! Settings settings = Settings.Instance; ColorConverter cc = new ColorConverter(); From 535ef1a59188157302fbd36de9e27e7d5f1bf39c Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 14 Oct 2017 00:28:13 +0200 Subject: [PATCH 107/452] Update TrackTime on connection as well --- Toastify/src/View/ToastView.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 87e5efc6..47695334 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -790,6 +790,7 @@ private void Spotify_Connected(object sender, SpotifyStateEventArgs e) this.paused = !e.Playing; this.UpdateCurrentSong(e.CurrentSong); + this.UpdateSongProgressBar(e.TrackTime); } private void Spotify_SongChanged(object sender, SpotifyTrackChangedEventArgs e) From 52a30f5e05a5867355cf51d3214398c7e0a7f3ee Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sat, 14 Oct 2017 00:32:08 +0200 Subject: [PATCH 108/452] v1.10.0 --- InstallationScript/Install.nsi | 4 ++-- Toastify/Properties/AssemblyInfo.cs | 2 +- Toastify/version | 2 +- ToastifyAPI/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 47991fe6..d5ce8e61 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -84,8 +84,8 @@ Section "Toastify (required)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayIcon" "$INSTDIR\Toastify.exe,0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.9.8" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.9.8" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "Version" "1.10.0" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayVersion" "1.10.0" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "NoRepair" 1 WriteUninstaller "uninstall.exe" diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index aeb7181f..4c289c0e 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -51,4 +51,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.8.*")] +[assembly: AssemblyVersion("1.10.0.*")] diff --git a/Toastify/version b/Toastify/version index f5f0aa63..ed21137e 100644 --- a/Toastify/version +++ b/Toastify/version @@ -1 +1 @@ -1.9.8 \ No newline at end of file +1.10.0 \ No newline at end of file diff --git a/ToastifyAPI/Properties/AssemblyInfo.cs b/ToastifyAPI/Properties/AssemblyInfo.cs index 58e17b1a..266d72a3 100644 --- a/ToastifyAPI/Properties/AssemblyInfo.cs +++ b/ToastifyAPI/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.9.8.*")] +[assembly: AssemblyVersion("1.10.0.*")] From 4753ad56907ba34e0273bd7f495b79abf63b4612 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini Date: Sun, 15 Oct 2017 14:49:37 +0200 Subject: [PATCH 109/452] Fix "Default All" --- Toastify/src/ViewModel/SettingsViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index c97628ca..6a263681 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -209,7 +209,7 @@ private void Default() private void DefaultAll() { - this.Settings.Default(); + this.Settings.Default(true); this.Save(); } From 4b7885867d906d6155457963bf822c886db4ff9a Mon Sep 17 00:00:00 2001 From: Alessandro Date: Wed, 15 Nov 2017 18:55:57 +0100 Subject: [PATCH 110/452] Add type information to Song to handle 'other' type (e.g. podcasts) Waiting for Spotify to implement podcast APIs. --- Toastify/Resources/SpotifyAdPlaying.png | Bin 1740 -> 32504 bytes Toastify/Toastify.csproj | 1 + Toastify/src/Core/SpotifyTrackType.cs | 9 +++ Toastify/src/Model/Song.cs | 69 +++++++++++++++++------ Toastify/src/View/ToastView.xaml.cs | 15 ++++- Toastify/src/ViewModel/ToastViewModel.cs | 8 +-- 6 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 Toastify/src/Core/SpotifyTrackType.cs diff --git a/Toastify/Resources/SpotifyAdPlaying.png b/Toastify/Resources/SpotifyAdPlaying.png index ff1f833f97d1847209dd39da725b51b629f1ce33..7240a37a235a0979699b301ba4146133378dc149 100644 GIT binary patch literal 32504 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

    =Z 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 Tcreao00000NkvXXu0mjf1_@$F literal 1740 zcmZuydpy(o8~=Pax6N&&Q=Cy>tuk`k4pvFC-{jh2U9dA6tCUM8Bnu}yUOJiMCypIV zlf*aUw}P^tSNF$OCTcJHu#=uWl6&pCF6EQI;rH#-C|u3*I{O zt9?`+Y;W?jW4MlMi52W;M)hfTxBY2IjmoB)NnElp{2#Ic$R`804V2v+e{=70?PTw2 zXI?d2s#~j=nUVJ^ZRK_Hk=n7POT;{4?Itxi6+_YbR^eRkSC|2IhB48OPU8)ds*wA? zN0T8f^^HbcUqJbv$My2)zg8bJZJg@r>sQX<$LaWSLzvo#d67HUjeM7iX``f7%9?Dx zXVZ+?vKRG@?V6mA zVod7;CcyznPJkjSk#uok0hga``MhC92NZ#28C4DVgEyHm!=cxwRGs>wg|;HTlN;f_ zK`@gpE8(&`GaV3v^2d*BZ2#)oy4Jjq<^(Nw4M13pLsu@0jgGeXd)2q_myFp=xE*Hq zw!ZM4VG;yQq(k!J;$o?a)H7f9#$(HyNvE0Sskire)n^^7`4tQXg@(QPQ<~5p(EL6o zyn6PNDPvj&VG&oRSM+=@nzn>_d#rM$3G=!$=rvvilV`P|B=kma$kHb{Ia!mihe1<_B>j#*ArecF+c*ljrg3x_~W8AID3DQF7b-0fs^*lQE52MIdK*4*57D zJ1I3}*#l+TmOgwdwtg53iXaQS#GL*QyN?BaTFN64@}ImtGvcGRJ##+wDCG`2j#msQ zX=`)i)5io-4!UMACP3PGvtvJ~3~ruoaOpSM2Ngu3#bWV;5XMV9H)6j8RRS08 z>APFv6XC4xp)mTL-ZCtgcRhU={hx^Dryt-f=|=~}qj98g2dvYk>CHit41axYiNNd9A^YjDJ8w0fF9@!cL{tJsScB564t?+LvYj*gDvxWuD2eJ$Ww$wsZ*{oIc; z+EoDKbE^5vW-xZV`mhKr%8i-=U;WYKRk1EL}28jj=T3cIB zWSl#V;~0?3x)se7Z~-d4YnPOtLv!euZ#n}K!*45R&AIx!9=#0y#Ux(OAF*r%k}>Xdmca-$*BYOQ&wAX$mCaFD38WCcDn&1-2JNmLvqF4M zTe1Xf4!EXhx6F=pOu6$T9d|aO4TU{N2(?#DkeAmJ9#$PL_MP&;8R~oD{ZX)49^Ixu z68|O+J9+j{eHxlYT#Hp}jR6Xh{N7e5|qV$*-OgR#mOxZbgS{$F_FV0^AnVLI&!!*s+Y5!JO*dRV+J{xeqN1W=t$!=SlXX0C zhPNiwgr&f~Jz6NvEjd4CK^7RTW1sXc@89d!=!hTJ`0XF7v8AQj2L5iTS>fKDmHdQ+ z8@ua<1!U1cLqef?l{a(^b=)7HtQClY2!h^iV5_yV>3#6A>j)m=lrLUfJnWV~j`sEW z;@2~zv?d0?&^5(s{VuJPMk{MBJsipH$?Z}q;zk6$tn=!(ZKlGYq+cHBXt&*;Y&F&woMb1w==()JqVyBb0 zBQrLSAH(Cvh%upJ{*8*%*+t+i8yw_t5d*$llc4E?)r&+P)%<;rgkMUp6YsOH@jKjR%QY0JPk#nyq6MUOM{v`(%ut zY);NKFiP5$$Y<;=Egh%h;v7_)NseAKrSI6;%@>>kB#2c`507G=QFg>c1Z>F>Jbm)y zMsKw69=%&}9#e;gC$!-Sqr?5F7*Cj*!@m(Cbo}fNx4W@>&$4@YNiNAr6TJe#?R)8o v$WG(nJu8whJtXS?!SA<#{4JCp>7Lslo%(d*PT<9C)!hM}ZZzsO3M=JbSh4;k diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 4b400cf8..2f51722f 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -108,6 +108,7 @@ + diff --git a/Toastify/src/Core/SpotifyTrackType.cs b/Toastify/src/Core/SpotifyTrackType.cs new file mode 100644 index 00000000..795ce4d1 --- /dev/null +++ b/Toastify/src/Core/SpotifyTrackType.cs @@ -0,0 +1,9 @@ +namespace Toastify.Core +{ + internal static class SpotifyTrackType + { + public const string NORMAL = "normal"; + public const string AD = "ad"; + public const string OTHER = "other"; + } +} \ No newline at end of file diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index 2e14815e..ecdf0750 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -14,24 +14,49 @@ public class Song public string Track { get; set; } public string Album { get; } public int Length { get; } + public string Type { get; } public string CoverArtUrl { get; set; } - internal Song() : this(string.Empty, string.Empty, -1) + internal Song() : this(string.Empty, string.Empty, -1, null) { } - public Song(string artist, string title, int length, string album = null) + public Song(string artist, string title, int length, string type, string album = null) { this.Artist = artist; this.Track = title; this.Album = album; this.Length = length; + this.Type = type; + } + + public bool IsAd() + { + return this.Type == SpotifyTrackType.AD || this.Length == 0; + } + + public bool IsOtherTrackType() + { + return this.Type == SpotifyTrackType.OTHER; } internal bool IsValid() { - return !string.IsNullOrEmpty(this.Artist) || !string.IsNullOrEmpty(this.Track); + if (string.IsNullOrEmpty(this.Type)) + return false; + + switch (this.Type) + { + case SpotifyTrackType.NORMAL: + return !string.IsNullOrEmpty(this.Artist) && !string.IsNullOrEmpty(this.Track); + + case SpotifyTrackType.OTHER: + return this.Length > 0; + + default: + return this.Length >= 0; + } } public string GetClipboardText(string template) @@ -66,13 +91,21 @@ public override bool Equals(object obj) if (target == null) return false; - return target.Artist == this.Artist && target.Track == this.Track; + return target.Type == this.Type && + target.Artist == this.Artist && + target.Track == this.Track && + target.Album == this.Album; } [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode")] public override int GetHashCode() { - return this.Artist.GetHashCode() ^ this.Track.GetHashCode(); + int result = 17; + result += result * 31 + this.Type?.GetHashCode() ?? 0; + result += result * 31 + this.Artist?.GetHashCode() ?? 0; + result += result * 31 + this.Track?.GetHashCode() ?? 0; + result += result * 31 + this.Album?.GetHashCode() ?? 0; + return result; } public static implicit operator Song(Track spotifyTrack) @@ -87,24 +120,28 @@ public static implicit operator Song(Track spotifyTrack) string title = spotifyTrack.TrackResource?.Name; string album = spotifyTrack.AlbumResource?.Name; int length = spotifyTrack.Length; + string type = spotifyTrack.TrackType; string coverArtUrl = string.Empty; - // Take the smallest image possible. - foreach (var size in albumArtSizes) + if (spotifyTrack.AlbumResource != null) { - try - { - coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); - } - catch (Exception) + // Take the smallest image possible. + foreach (var size in albumArtSizes) { - // TODO: Log + try + { + coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); + } + catch (Exception) + { + // TODO: Log + } + if (!string.IsNullOrWhiteSpace(coverArtUrl)) + break; } - if (!string.IsNullOrWhiteSpace(coverArtUrl)) - break; } - return new Song(artist, title, length, album) { CoverArtUrl = coverArtUrl }; + return new Song(artist, title, length, type, album) { CoverArtUrl = coverArtUrl }; } public static bool Equal(Song s1, Song s2) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 47695334..3484760c 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -300,6 +300,8 @@ private void InitVersionChecker() #endregion Initialization + #region Toast update + ///

    /// Update current song's cover art url and toast's text. /// Also, save track info to file, if settings say so. @@ -309,6 +311,9 @@ private void UpdateCurrentSong(Song song) { this.currentSong = song; + if (this.currentSong.IsOtherTrackType()) + this.FetchOtherTrackInfo(); + this.UpdateCoverArt(); this.UpdateToastText(this.currentSong); this.UpdateSongProgressBar(0.0); @@ -371,7 +376,7 @@ private void UpdateCoverArtUrl() this.toastIconURI = DEFAULT_ICON; else { - if (string.IsNullOrWhiteSpace(this.currentSong.Track)) + if (this.currentSong.IsAd()) { this.currentSong.CoverArtUrl = AD_PLAYING_ICON; this.currentSong.Track = "Spotify Ad"; @@ -424,6 +429,14 @@ private void UpdateToastText(string title1, string title2 = "", bool fadeIn = tr this.FadeIn(force, isUpdate); } + private void FetchOtherTrackInfo() + { + // TODO: Podcast? Try to fetch track info using Spotify Web API? (Podcast specific APIs are not yet available) + this.currentSong.Track = "[Unknown Track Type]"; + } + + #endregion Toast update + private void SetToastVisibility(bool shallBeVisible) { this.Topmost = shallBeVisible; diff --git a/Toastify/src/ViewModel/ToastViewModel.cs b/Toastify/src/ViewModel/ToastViewModel.cs index 079a5d51..efc86d2e 100644 --- a/Toastify/src/ViewModel/ToastViewModel.cs +++ b/Toastify/src/ViewModel/ToastViewModel.cs @@ -35,9 +35,9 @@ public string TrackName { this._trackName = value; if (Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.TrackByArtist) - this.Title1 = $"{value}"; + this.Title1 = $"{(string.IsNullOrWhiteSpace(value) ? "???": value)}"; else - this.Title2 = $"\x201C{value}\x201D"; + this.Title2 = string.IsNullOrWhiteSpace(value) ? string.Empty : $"\x201C{value}\x201D"; } } @@ -51,9 +51,9 @@ public string ArtistName { this._artistName = value; if (Settings.Instance.ToastTitlesOrder == ToastTitlesOrder.ArtistOfTrack) - this.Title1 = $"{value}:"; + this.Title1 = $"{(string.IsNullOrWhiteSpace(value) ? "???" : value)}:"; else - this.Title2 = $"by {value}"; + this.Title2 = string.IsNullOrWhiteSpace(value) ? string.Empty : $"by {value}"; } } From 68c9342d5cfe4f9d30ad68eb637349d1e6ef5b07 Mon Sep 17 00:00:00 2001 From: Alessandro Date: Wed, 15 Nov 2017 19:28:54 +0100 Subject: [PATCH 111/452] Update currently playing podcast on its first TrackTimeChange event This ugly cheat is needed because currently there is no public podcast-specific API and the TrackChange event doesn't cover changes of podcast episodes. --- Toastify/src/Core/Spotify.cs | 2 +- Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs | 7 ++++++- Toastify/src/View/ToastView.xaml.cs | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 71a646f7..70b90b6c 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -584,7 +584,7 @@ private void SpotifyLocalAPI_OnPlayStateChange(object sender, PlayStateEventArgs private void SpotifyLocalAPI_OnTrackTimeChange(object sender, TrackTimeChangeEventArgs e) { - this.TrackTimeChanged?.Invoke(this, new SpotifyTrackTimeChangedEventArgs(e.TrackTime)); + this.TrackTimeChanged?.Invoke(this, new SpotifyTrackTimeChangedEventArgs(e.TrackTime, this.Status?.Track, this.Status?.Playing ?? true)); } private void SpotifyLocalAPI_OnVolumeChange(object sender, VolumeChangeEventArgs e) diff --git a/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs index 400fa044..994fce30 100644 --- a/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackTimeChangedEventArgs.cs @@ -1,14 +1,19 @@ using System; +using Toastify.Model; namespace Toastify.Events { public class SpotifyTrackTimeChangedEventArgs : EventArgs { public double TrackTime { get; } + public Song CurrentSong { get; } + public bool Playing { get; } - public SpotifyTrackTimeChangedEventArgs(double trackTime) + public SpotifyTrackTimeChangedEventArgs(double trackTime, Song currentSong, bool playing) { this.TrackTime = trackTime; + this.CurrentSong = currentSong; + this.Playing = playing; } } } \ No newline at end of file diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 3484760c..cc987b22 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -832,6 +832,12 @@ private void Spotify_PlayStateChanged(object sender, SpotifyPlayStateChangedEven private void Spotify_TrackTimeChanged(object sender, SpotifyTrackTimeChangedEventArgs e) { + // TODO: Remove when podcast-specific APIs are implemented and an episode change can be notified by SpotifyAPI + // If we are going through a podcast collection and we change episode, the SongChanged event doesn't get triggered; + // the only place we can change the episode's total length is here. + if (e.CurrentSong.IsOtherTrackType() && this.currentSong.Length != e.CurrentSong.Length) + this.Spotify_SongChanged(this, new SpotifyTrackChangedEventArgs(this.currentSong, e.CurrentSong, e.Playing)); + this.UpdateSongProgressBar(e.TrackTime); } From c713a30758ec495c17494518ea1a04a5121d6f82 Mon Sep 17 00:00:00 2001 From: Alessandro Date: Fri, 17 Nov 2017 18:09:39 +0100 Subject: [PATCH 112/452] Fix Toast's MouseOver event --- Toastify/src/View/ToastView.xaml.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index cc987b22..25eea9ad 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -732,8 +732,7 @@ private void Window_Loaded(object sender, RoutedEventArgs e) } /// - /// Mouse is over the window, halt any fade out animations and keep - /// the toast active. + /// Mouse is over the window, halt any fade out animations and keep the toast active. /// /// /// @@ -741,6 +740,11 @@ private void Window_MouseEnter(object sender, MouseEventArgs e) { this.BeginAnimation(OpacityProperty, null); this.Opacity = 1.0; + if (this.minimizeTimer != null) + { + this.minimizeTimer.Stop(); + this.minimizeTimer = null; + } } private void Window_MouseLeave(object sender, MouseEventArgs e) From cdbd79e7f2a78e33b93c5fd67bf7c13998af8f8a Mon Sep 17 00:00:00 2001 From: Alessandro Date: Fri, 17 Nov 2017 18:44:25 +0100 Subject: [PATCH 113/452] Fix Toast not appearing in some cases If the `DisableToastWithFullscreenVideogames` option was enabled and the desktop was focused, the Toast wouldn't show up. --- Toastify/src/Win32API.cs | 106 +++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 16 deletions(-) diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index edb4bc08..4f1ce9d0 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -19,8 +19,9 @@ namespace Toastify [SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")] internal static class Win32API { - private static readonly IntPtr desktopHandle = GetDesktopWindow(); - private static readonly IntPtr shellHandle = GetShellWindow(); + private static readonly IntPtr hDesktop = GetDesktopWindow(); + private static readonly IntPtr hProgman = GetShellWindow(); + private static readonly IntPtr hShellDll = GetShellDllDefViewWindow(); internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); @@ -35,6 +36,10 @@ internal static class Win32API [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); + [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); @@ -114,6 +119,67 @@ internal static class Win32API #endregion DLL imports + #region Native methods' wrappers + + public static List GetChildWindows(IntPtr parent) + { + List result = new List(); + GCHandle listHandle = GCHandle.Alloc(result); + try + { + EnumChildWindows( + parent, + (hWnd, lParam) => + { + GCHandle gch = GCHandle.FromIntPtr(lParam); + List list = gch.Target as List; + if (list == null) + throw new InvalidCastException("GCHandle Target could not be cast as List"); + list.Add(hWnd); + return true; + }, + GCHandle.ToIntPtr(listHandle)); + } + finally + { + if (listHandle.IsAllocated) + listHandle.Free(); + } + return result; + } + + public static string GetClassName(IntPtr hWnd) + { + StringBuilder sb = new StringBuilder(256); + GetClassName(hWnd, sb, 256); + return sb.ToString(); + } + + #endregion + + internal static IntPtr GetShellDllDefViewWindow() + { + IntPtr _SHELLDLL_DefView = FindWindowEx(hProgman, IntPtr.Zero, "SHELLDLL_DefView", null); + + if (_SHELLDLL_DefView.Equals(IntPtr.Zero)) + { + EnumWindows((hWnd, lParam) => + { + if (GetClassName(hWnd) == "WorkerW") + { + IntPtr child = FindWindowEx(hWnd, IntPtr.Zero, "SHELLDLL_DefView", null); + if (child != IntPtr.Zero) + { + _SHELLDLL_DefView = child; + return false; + } + } + return true; + }, IntPtr.Zero); + } + return _SHELLDLL_DefView; + } + /// /// Finds a thread's window by its class name. /// @@ -131,9 +197,7 @@ public static IntPtr FindThreadWindowByClassName(uint dwThreadId, string lpClass if (hWnd == IntPtr.Zero) return true; - StringBuilder sb = new StringBuilder(256); - GetClassName(hWnd, sb, 256); - string className = sb.ToString(); + string className = GetClassName(hWnd); if (className == lpClassName) { searchedHWnd = hWnd; @@ -189,7 +253,7 @@ public static void KillProc(string name) } } - public static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) + private static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) { long longPtr = (long)GetWindowLongPtr(hWnd, nIndex); longPtr |= (long)dwLong; @@ -206,18 +270,19 @@ public static bool IsForegroundAppAFullscreenVideogame() // Get the dimensions of the active window. IntPtr hWnd = GetForegroundWindow(); + Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] hWnd=0x{hWnd.ToInt64():X8}, className=\"{GetClassName(hWnd)}\""); + if (!hWnd.Equals(IntPtr.Zero)) { - // Check we haven't picked up the desktop or the shell. - if (!hWnd.Equals(desktopHandle) && !hWnd.Equals(shellHandle)) + // Check we haven't picked up the desktop or the shell or the parent of one of them (Progman, WorkerW) + List childWindows = GetChildWindows(hWnd); + if (!hWnd.Equals(hDesktop) && !hWnd.Equals(hProgman) && !hWnd.Equals(hShellDll) && + !childWindows.Contains(hDesktop) && !childWindows.Contains(hProgman) && !childWindows.Contains(hShellDll)) { Rectangle screenRect = Screen.FromHandle(hWnd).Bounds; GetClientRect(hWnd, out Rect clientRect); - - bool isFullScreen = clientRect.Height == screenRect.Height && clientRect.Width == screenRect.Width; - bool isAVideogame = false; - - if (isFullScreen) + + if (clientRect.Height == screenRect.Height && clientRect.Width == screenRect.Width) { var processId = GetProcessFromWindowHandle(hWnd); var modules = GetProcessModules(processId); @@ -232,14 +297,14 @@ public static bool IsForegroundAppAFullscreenVideogame() bool isOpenGL = module.ModuleName.Equals("opengl32.dll", StringComparison.InvariantCultureIgnoreCase); if (isDirectX || isOpenGL) { - isAVideogame = true; - break; + Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] Fullscreen videogame: \"{GetProcessName(processId)}\", module found: \"{module.ModuleName}\""); + return true; } } } } - return isFullScreen && isAVideogame; + return false; } } return false; @@ -251,6 +316,15 @@ private static uint GetProcessFromWindowHandle(IntPtr hWnd) return pid; } + private static string GetProcessName(uint processId) + { + if (processId == 0) + return null; + + var process = Process.GetProcessById((int)processId); + return process.ProcessName; + } + private static IEnumerable GetProcessModules(uint processId) { if (processId == 0) From b704df922a20873fc1d98a9f02a48f4d1b20203f Mon Sep 17 00:00:00 2001 From: Alessandro Date: Fri, 17 Nov 2017 23:59:22 +0100 Subject: [PATCH 114/452] Update NuGet packages --- Toastify/Toastify.csproj | 10 +++++----- Toastify/packages.config | 6 +++--- Toastify/src/View/SettingsView.xaml | 14 +++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 2f51722f..f64a4ae5 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -64,8 +64,8 @@ AllRules.ruleset - - ..\packages\GoogleMeasurementProtocol.1.4.0\lib\net45\GoogleMeasurementProtocol.dll + + ..\packages\GoogleMeasurementProtocol.1.4.2\lib\net45\GoogleMeasurementProtocol.dll .\ManagedWinapi.dll @@ -74,7 +74,7 @@ ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\packages\SpotifyAPI-NET.2.16.0\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.16.1\lib\SpotifyAPI.dll @@ -88,8 +88,8 @@ - - ..\packages\Extended.Wpf.Toolkit.3.1\lib\net40\Xceed.Wpf.Toolkit.dll + + ..\packages\Extended.Wpf.Toolkit.3.2.0\lib\net40\Xceed.Wpf.Toolkit.dll diff --git a/Toastify/packages.config b/Toastify/packages.config index 7d3e7cfb..9bba43f2 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -1,7 +1,7 @@  - - + + - + \ No newline at end of file diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 446a935e..6a887a41 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -237,7 +237,7 @@ + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Bottom color : + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Border color : + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> @@ -268,7 +268,7 @@ + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Background color : + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> + ShowDropDownButton="True" ShowTabHeaders="True" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> From 5de20be4a8fd7f60ca350cf6161e1e4b200e5493 Mon Sep 17 00:00:00 2001 From: Alessandro Date: Sat, 18 Nov 2017 00:07:00 +0100 Subject: [PATCH 115/452] Setup logging system --- Toastify/Toastify.csproj | 4 +++ Toastify/log4net.config | 37 ++++++++++++++++++++++++++++ Toastify/packages.config | 1 + Toastify/src/App.xaml.cs | 53 ++++++++++++++++++++++++++++++++-------- 4 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 Toastify/log4net.config diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index f64a4ae5..9dea2eed 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -67,6 +67,9 @@ ..\packages\GoogleMeasurementProtocol.1.4.2\lib\net45\GoogleMeasurementProtocol.dll + + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + .\ManagedWinapi.dll @@ -208,6 +211,7 @@ + diff --git a/Toastify/log4net.config b/Toastify/log4net.config new file mode 100644 index 00000000..977afb79 --- /dev/null +++ b/Toastify/log4net.config @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Toastify/packages.config b/Toastify/packages.config index 9bba43f2..cc48c807 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -2,6 +2,7 @@ + \ No newline at end of file diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index eb647b93..e90124e5 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -1,7 +1,13 @@ -using System; +using log4net; +using log4net.Appender; +using log4net.Config; +using log4net.Repository; +using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; +using System.Linq; +using System.Reflection; using System.Threading; using System.Windows; using Toastify.Core; @@ -14,27 +20,54 @@ namespace Toastify //Special entry point to allow for single instance check public class EntryPoint { + private static readonly ILog logger = LogManager.GetLogger(typeof(EntryPoint)); + [STAThread] public static void Main(string[] args) { - try + const string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; + using (Mutex unused = new Mutex(true, appSpecificGuid, out bool exclusive)) { - const string appSpecificGuid = "{B8F3CA50-CE27-4ffa-A812-BBE1435C9485}"; - using (Mutex unused = new Mutex(true, appSpecificGuid, out bool exclusive)) + if (exclusive) { - if (exclusive) + try + { + SetupLogger(); + } + catch (Exception e) + { + Debug.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.ToStringInvariantCulture()}\n"); + File.AppendAllText(Path.Combine(App.ApplicationData, "log.log"), $@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.ToStringInvariantCulture()}\n"); + } + + try { PrepareToRun(); RunApp(); } - else - MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); + catch (Exception e) + { + logger.Error("Uncaught top-level exception.", e); + } } + else + MessageBox.Show(Properties.Resources.INFO_TOASTIFY_ALREADY_RUNNING, "Toastify Already Running", MessageBoxButton.OK, MessageBoxImage.Information); } - catch (Exception e) + } + + private static void SetupLogger() + { + using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Toastify.log4net.config")) { - // ReSharper disable once LocalizableElement - File.AppendAllText(Path.Combine(App.ApplicationData, "Toastify.log"), $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.ToStringInvariantCulture()}\n"); + XmlConfigurator.Configure(stream); + ILoggerRepository loggerRepository = LogManager.GetRepository(); + + // Modify RollingFileAppender's destination + var rollingFileAppender = (RollingFileAppender)loggerRepository.GetAppenders().FirstOrDefault(appender => appender.Name == "RollingFileAppender"); + if (rollingFileAppender == null) + throw new Exception("RollingFileAppender not found"); + rollingFileAppender.File = Path.Combine(App.ApplicationData, "Toastify.log"); + rollingFileAppender.ActivateOptions(); } } From e3005e861bfeb98c52a1260979745e144ed4dbbb Mon Sep 17 00:00:00 2001 From: Alessandro Date: Sat, 18 Nov 2017 18:03:43 +0100 Subject: [PATCH 116/452] Log messages --- Toastify/Toastify.csproj | 1 + Toastify/src/App.xaml.cs | 10 ++- .../src/Common/ConstraintFailedException.cs | 12 ++++ Toastify/src/Common/ObservableObject.cs | 2 +- Toastify/src/Core/Spotify.cs | 69 +++++++++++++------ Toastify/src/Helpers/ScreenHelper.cs | 40 ++++++----- Toastify/src/Model/Settings.cs | 10 +-- Toastify/src/Model/Song.cs | 7 +- Toastify/src/Services/Analytics.cs | 25 +++++-- Toastify/src/View/ToastView.xaml.cs | 18 +++-- 10 files changed, 134 insertions(+), 60 deletions(-) create mode 100644 Toastify/src/Common/ConstraintFailedException.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 9dea2eed..398c2982 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -107,6 +107,7 @@ True Resources.resx + diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index e90124e5..dabdb7aa 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -47,7 +47,9 @@ public static void Main(string[] args) } catch (Exception e) { - logger.Error("Uncaught top-level exception.", e); + logger.Error("Unhandled top-level exception.", e); + Analytics.TrackException(e); + MessageBox.Show($"Unhandled top-level exception.\n{e.Message}", "Unhandled exception", MessageBoxButton.OK, MessageBoxImage.Error); } } else @@ -97,7 +99,7 @@ private static void LoadSettings() } catch (Exception ex) { - Debug.WriteLine("Exception loading settings:\n" + ex); + logger.Warn("Exception loading settings from file. Using defaults.", ex); string msg = string.Format(Properties.Resources.ERROR_SETTINGS_UNABLE_TO_LOAD, Settings.Instance.SettingsFilePath); MessageBox.Show(msg, "Toastify", MessageBoxButton.OK, MessageBoxImage.Information); @@ -129,6 +131,8 @@ private static void StartupTask() [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class App : Application { + private static readonly ILog logger = LogManager.GetLogger(typeof(App)); + public static string ApplicationData { get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); } @@ -136,7 +140,9 @@ public static string ApplicationData private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { + logger.Error("Unhandled Dispatcher exception.", e.Exception); Analytics.TrackException(e.Exception); + MessageBox.Show($"Unhandled Dispatcher exception.\n{e.Exception.Message}", "Unhandled exception", MessageBoxButton.OK, MessageBoxImage.Error); } private void App_OnStartup(object sender, StartupEventArgs e) diff --git a/Toastify/src/Common/ConstraintFailedException.cs b/Toastify/src/Common/ConstraintFailedException.cs new file mode 100644 index 00000000..88af5cc5 --- /dev/null +++ b/Toastify/src/Common/ConstraintFailedException.cs @@ -0,0 +1,12 @@ +using System; +using System.Linq.Expressions; + +namespace Toastify.Common +{ + public class ConstraintFailedException : ApplicationException + { + public ConstraintFailedException(Expression constraint) : base($"Constraint failed:\n {constraint}\n") + { + } + } +} \ No newline at end of file diff --git a/Toastify/src/Common/ObservableObject.cs b/Toastify/src/Common/ObservableObject.cs index 930707af..1ef57dbe 100644 --- a/Toastify/src/Common/ObservableObject.cs +++ b/Toastify/src/Common/ObservableObject.cs @@ -29,7 +29,7 @@ protected void RaiseAndSetIfChanged(ref T field, T newValue, [CallerMemberNam protected void RaiseAndSetIfChangedWithConstraint(ref T field, T newValue, Expression> constraint, [CallerMemberName] string propertyName = null) { if (!constraint.Compile()()) - throw new ArgumentException($"Constraint failed:\n{constraint}\n"); + throw new ConstraintFailedException(constraint); if (!EqualityComparer.Default.Equals(field, newValue)) { diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 70b90b6c..904cabff 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -10,6 +10,7 @@ using System.Windows; using System.Windows.Input; using System.Windows.Threading; +using log4net; using Toastify.Events; using Toastify.Helpers; using Toastify.Model; @@ -20,6 +21,8 @@ namespace Toastify.Core { internal class Spotify : IDisposable { + private static readonly ILog logger = LogManager.GetLogger(typeof(Spotify)); + #region Singleton private static Spotify _instance; @@ -145,46 +148,41 @@ private void StartSpotify_WorkerTaskCompleted(object sender, RunWorkerCompletedE { if (e.Error is ApplicationStartupException applicationStartupException) { - Debug.WriteLine(applicationStartupException.StackTrace); + logger.Error("Error while starting Spotify.", applicationStartupException); string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY; string techDetails = $"Technical details\n{applicationStartupException.Message}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, - MessageBoxImage.Error); + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); Analytics.TrackException(applicationStartupException, true); } else if (e.Error is WebException webException) { - Debug.WriteLine(webException.StackTrace); + logger.Error("Web exception while starting Spotify.", webException); string errorMsg = Properties.Resources.ERROR_STARTUP_RESTART; string status = $"{webException.Status}"; if (webException.Status == WebExceptionStatus.ProtocolError) - status += - $" ({(webException.Response as HttpWebResponse)?.StatusCode}, \"{(webException.Response as HttpWebResponse)?.StatusDescription}\")"; - string techDetails = - $"Technical details: {webException.Message}\n{webException.HResult}, {status}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, - MessageBoxImage.Error); + status += $" ({(webException.Response as HttpWebResponse)?.StatusCode}, \"{(webException.Response as HttpWebResponse)?.StatusDescription}\")"; + string techDetails = $"Technical details: {webException.Message}\n{webException.HResult}, {status}"; + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); Analytics.TrackException(webException, true); } else { - Debug.WriteLine(e.Error.StackTrace); + logger.Error("Unknown error while starting Spotify.", e.Error); string errorMsg = Properties.Resources.ERROR_UNKNOWN; string techDetails = $"Technical Details: {e.Error.Message}\n{e.Error.StackTrace}"; - MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, - MessageBoxImage.Error); + MessageBox.Show($"{errorMsg}\n\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); Analytics.TrackException(e.Error, true); } } else // e.Cancelled { - Debug.WriteLine("ERROR: Toastify was not able to find Spotify within the timeout interval."); + logger.Error("Toastify was not able to find Spotify within the timeout interval."); string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY; const string techDetails = "Technical Details: timeout"; @@ -197,7 +195,7 @@ private void StartSpotify_WorkerTaskCompleted(object sender, RunWorkerCompletedE new Action(() => Application.Current.Shutdown())); } else - this.Connected?.Invoke(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); + this.Spotify_Connected(this, new SpotifyStateEventArgs(this.localAPI.GetStatus())); this.spotifyLauncherWaitHandle.Close(); } @@ -208,18 +206,23 @@ private void StartSpotify_WorkerTaskCompleted(object sender, RunWorkerCompletedE /// The started process. private Process LaunchSpotifyAndWaitForInputIdle(DoWorkEventArgs e) { + logger.Info("Launching Spotify..."); + // Launch Spotify. this.spotifyProcess = Process.Start(this.spotifyPath); // If it is an UWP app, then Process.Start should return null: we need to look for the process. bool signaled = false; - while ((this.spotifyProcess = this.FindSpotifyProcess()) == null && !signaled) + while (this.spotifyProcess == null && !signaled) { + this.spotifyProcess = this.FindSpotifyProcess(); signaled = this.spotifyLauncherWaitHandle.WaitOne(1000); if (this.spotifyLauncher.CheckCancellation(e)) return this.spotifyProcess; } + logger.Info($"Spotify process started: {this.spotifyProcess}"); + // We need to let Spotify start-up before interacting with it. this.spotifyProcess?.WaitForInputIdle(); @@ -241,6 +244,8 @@ private void ConnectWithSpotify(DoWorkEventArgs e) // Sometimes (specially with a lot of active processes), the WaitForInputIdle method (used in LaunchSpotifyAndWaitForInputIdle) // does not seem to wait long enough to let us connect to Spotify successfully on the first try; so we wait and re-try. + logger.Info("Connecting to Spotify's local APIs endpoint..."); + this.spotifyLauncherWaitHandle.Reset(); bool signaled; @@ -255,15 +260,16 @@ private void ConnectWithSpotify(DoWorkEventArgs e) { connected = this.localAPI.Connect(); } - catch (WebException) + catch (WebException ex) { - // ignored + logger.Warn("WebException while connecting to Spotify.", ex); } } while (!connected && !signaled); if (!connected) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECT); - Debug.WriteLine($"Connected with Spotify on \"{this.localAPIConfig.HostUrl}:{this.localAPIConfig.Port}/\"."); + if (logger.IsDebugEnabled) + logger.Debug($"Connected with Spotify on \"{this.localAPIConfig.HostUrl}:{this.localAPIConfig.Port}/\"."); // Try to get a status report from Spotify var status = this.localAPI.GetStatus(); @@ -275,6 +281,9 @@ private void ConnectWithSpotify(DoWorkEventArgs e) private Process FindSpotifyProcess() { + if (logger.IsDebugEnabled) + logger.Debug("Looking for Spotify process..."); + var processes = Process.GetProcessesByName("spotify"); var process = processes.FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero && p.MainWindowHandle == this.GetMainWindowHandle()); @@ -479,8 +488,10 @@ private void SendShortcut(SpotifyAction action) IntPtr mainWindow = this.GetMainWindowHandle(); IntPtr cefWidgetWindow = this.GetCefWidgetWindowHandle(); - if (mainWindow == IntPtr.Zero || cefWidgetWindow == IntPtr.Zero) - Debug.WriteLine($"[Spotify.SendShortcut]: {mainWindow}, {cefWidgetWindow}"); + if (mainWindow == IntPtr.Zero) + logger.Error("Main window is null."); + else if (cefWidgetWindow == IntPtr.Zero) + logger.Error("CefWidget window is null."); else { // The 'Playback' sub-menu @@ -556,7 +567,16 @@ private void SendShortcut(SpotifyAction action) private string GetSpotifyPath() { - return ToastifyAPI.Spotify.GetSpotifyPath(); + string spotifyPath = null; + try + { + spotifyPath = ToastifyAPI.Spotify.GetSpotifyPath(); + } + catch (Exception e) + { + logger.Error("Error while getting Spotify executable path.", e); + } + return spotifyPath; } public void Dispose() @@ -571,6 +591,11 @@ private void Spotify_Exited(object sender, EventArgs e) this.Exited?.Invoke(sender, e); } + private void Spotify_Connected(object sender, SpotifyStateEventArgs e) + { + this.Connected?.Invoke(sender, e); + } + private void SpotifyLocalAPI_OnTrackChange(object sender, TrackChangeEventArgs e) { this.CurrentSong = e.NewTrack; diff --git a/Toastify/src/Helpers/ScreenHelper.cs b/Toastify/src/Helpers/ScreenHelper.cs index c411bbdf..504359cb 100644 --- a/Toastify/src/Helpers/ScreenHelper.cs +++ b/Toastify/src/Helpers/ScreenHelper.cs @@ -1,41 +1,47 @@ using System; -using System.Diagnostics; using System.Windows; using System.Windows.Forms; +using log4net; using Toastify.View; namespace Toastify.Helpers { internal static class ScreenHelper { + private static readonly ILog logger = LogManager.GetLogger(typeof(ScreenHelper)); + private const int SCREEN_RIGHT_MARGIN = 0; private const int SCREEN_TOP_MARGIN = 5; public static Point GetDPIRatios() { - var presentationSource = PresentationSource.FromVisual(ToastView.Current); - - // if we hit this then Settings were loaded before the Toast window was - Debug.Assert(presentationSource != null); + Point p = new Point(1.0, 1.0); + try + { + var presentationSource = PresentationSource.FromVisual(ToastView.Current); - return new Point(presentationSource.CompositionTarget?.TransformToDevice.M11 ?? 1.0, - presentationSource.CompositionTarget?.TransformToDevice.M22 ?? 1.0); - } + if (presentationSource == null) + throw new ApplicationException("presentationSource is null"); - public static Point GetDefaultToastPosition(double width, double height) - { - var screenRect = Screen.PrimaryScreen.WorkingArea; - - Point dpiRatio; - try + p = new Point( + presentationSource.CompositionTarget?.TransformToDevice.M11 ?? 1.0, + presentationSource.CompositionTarget?.TransformToDevice.M22 ?? 1.0); + } + catch (ArgumentNullException e) { - dpiRatio = GetDPIRatios(); + logger.Error("Couldn't get PresentationSource, current ToastView is null.", e); } - catch (Exception) + catch (ApplicationException e) { - dpiRatio = new Point(1.0, 1.0); + logger.Error("Couldn't get PresentationSource, current ToastView has been disposed.", e); } + return p; + } + public static Point GetDefaultToastPosition(double width, double height) + { + var screenRect = Screen.PrimaryScreen.WorkingArea; + Point dpiRatio = GetDPIRatios(); return new Point(screenRect.Width / dpiRatio.X - width - SCREEN_RIGHT_MARGIN, screenRect.Height / dpiRatio.Y - height - SCREEN_TOP_MARGIN); } diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 9f848b93..6a997e99 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -1,11 +1,11 @@ using Microsoft.Win32; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Xml; using System.Xml.Serialization; +using log4net; using Toastify.Common; using Toastify.Core; using Toastify.Helpers; @@ -16,6 +16,8 @@ namespace Toastify.Model [XmlRoot("SettingsXml")] public class Settings : ObservableObject { + private static readonly ILog logger = LogManager.GetLogger(typeof(Settings)); + #region Singleton private static Settings _instance; @@ -81,7 +83,7 @@ public string SettingsFilePath } catch (Exception ex) { - Debug.WriteLine("Exception creating user settings directory (" + settingsPath + "). Exception: " + ex); + logger.Error($"Error creating user settings directory (\"{settingsPath}\")", ex); // No messagebox as this should not happen (and there will be a MessageBox later on when // settings fail to load) @@ -724,7 +726,7 @@ public Settings Clone() private void XmlSerializer_UnknownAttribute(object sender, XmlAttributeEventArgs e) { - Debug.WriteLine($"XmlSerializer_UnknownAttribute: {e.Attr.LocalName} = \"{e.Attr.Value}\""); + logger.Warn($"XmlSerializer: unknown attribute found [{e.Attr.LocalName} = \"{e.Attr.Value}\"]"); } private void XmlSerializer_UnknownElement(object sender, XmlElementEventArgs e) @@ -744,7 +746,7 @@ private void XmlSerializer_UnknownNode(object sender, XmlNodeEventArgs e) if (e.NodeType == XmlNodeType.Attribute || e.NodeType == XmlNodeType.Element) return; - Debug.WriteLine($"XmlSerializer_UnknownNode: {e.LocalName} = \"{e.Text}\""); + logger.Warn($"XmlSerializer: unknown node found [{e.LocalName} = \"{e.Text}\"]"); } #endregion XmlSerializer event handlers diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index ecdf0750..796da7e5 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -2,12 +2,15 @@ using SpotifyAPI.Local.Models; using System; using System.Diagnostics.CodeAnalysis; +using log4net; using Toastify.Core; namespace Toastify.Model { public class Song { + private static readonly ILog logger = LogManager.GetLogger(typeof(Song)); + private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size160, AlbumArtSize.Size320, AlbumArtSize.Size640 }; public string Artist { get; } @@ -132,9 +135,9 @@ public static implicit operator Song(Track spotifyTrack) { coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); } - catch (Exception) + catch (Exception e) { - // TODO: Log + logger.Error("Error while getting album art url (GetAlbumArtUrl).", e); } if (!string.IsNullOrWhiteSpace(coverArtUrl)) break; diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index fd45ef6b..fe8b6335 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -11,10 +11,10 @@ using Microsoft.Win32; using System; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.Linq; using System.Management; +using log4net; using Toastify.Core; using Toastify.Model; @@ -23,20 +23,28 @@ namespace Toastify.Services // ReSharper disable once PartialTypeWithSinglePart public static partial class Analytics { + private static readonly ILog logger = LogManager.GetLogger(typeof(Analytics)); + // ReSharper disable once UnusedAutoPropertyAccessor.Local private static string TrackingId { get; set; } - public static bool AnalyticsEnabled { get { return Settings.Instance.OptInToAnalytics; } } + public static bool AnalyticsEnabled { get { return requestFactory != null && Settings.Instance.OptInToAnalytics; } } private static GoogleAnalyticsRequestFactory requestFactory; internal static void Init() { + if (logger.IsDebugEnabled) + logger.Debug("Initializing Analytics class..."); + // ReSharper disable once InvocationIsSkipped SetTrackingId(); if (string.IsNullOrWhiteSpace(TrackingId)) + { + logger.Error("No TrackingId set."); return; + } requestFactory = new GoogleAnalyticsRequestFactory(TrackingId); bool wasOnNoAnalyticsVersion = new Version(Settings.Instance.PreviousVersion ?? "0.0.0") < new Version("1.9.7"); @@ -74,7 +82,8 @@ public static void TrackPageHit(string documentPath, string title = null, bool i PostRequest(request); - Debug.WriteLine($"[Analytics] PageHit: ni={!interactive}, dp=\"{documentPath}\", dt=\"{title}\""); + if (logger.IsDebugEnabled) + logger.Debug($"[Analytics] PageHit: ni={!interactive}, dp=\"{documentPath}\", dt=\"{title}\""); } public static void TrackEvent(ToastifyEventCategory eventCategory, string eventAction, string eventLabel = null, int eventValue = -1) @@ -101,7 +110,8 @@ private static void TrackEvent(IEnumerable extraParameters, ToastifyE PostRequest(request); - Debug.WriteLine($"[Analytics] Event: ec=\"{eventCategory}\", ea=\"{eventAction}\", el=\"{eventLabel}\", ev=\"{eventValue}\""); + if (logger.IsDebugEnabled) + logger.Debug($"[Analytics] Event: ec=\"{eventCategory}\", ea=\"{eventAction}\", el=\"{eventLabel}\", ev=\"{eventValue}\""); } public static void TrackException(Exception exception, bool fatal = false) @@ -151,7 +161,8 @@ private static void TrackSettingBinaryHit(string settingName, bool track) private static void CollectPreferences() { - Debug.WriteLine($"[Analytics] CollectPreferences"); + if (logger.IsDebugEnabled) + logger.Debug($"Collecting preferences..."); // General TrackSettingBinaryHit(nameof(Settings.Instance.LaunchOnStartup), Settings.Instance.LaunchOnStartup); @@ -197,9 +208,9 @@ private static string GetFriendlyOS() .OfType(); name = (from x in managementObjects select x.GetPropertyValue("Caption")).FirstOrDefault(); } - catch (Exception) + catch (Exception e) { - // ignored + logger.Error("Error while getting FriendlyOS.", e); } return name?.ToString() ?? "Unknown"; } diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 25eea9ad..9c6d492b 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -16,6 +16,7 @@ using System.Windows.Media.Effects; using System.Windows.Media.Imaging; using System.Windows.Threading; +using log4net; using Toastify.Common; using Toastify.Core; using Toastify.Events; @@ -37,6 +38,8 @@ namespace Toastify.View [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class ToastView : Window { + private static readonly ILog logger = LogManager.GetLogger(typeof(ToastView)); + private const string DEFAULT_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyToastifyLogo.png"; private const string AD_PLAYING_ICON = "pack://application:,,,/Toastify;component/Resources/SpotifyAdPlaying.png"; private const string ALBUM_ACCESS_DENIED_ICON = "pack://application:,,,/Toastify;component/Resources/ToastifyAccessDenied.png"; @@ -278,6 +281,7 @@ private void LoadPlugins() catch (Exception e) { // TODO: Handle plugins' errors. + logger.Error("Error while loading plugins.", e); Analytics.TrackException(e); } Console.WriteLine(@"Loaded " + p.TypeName); @@ -328,9 +332,9 @@ private void UpdateCurrentSong(Song song) string trackText = this.currentSong.GetClipboardText(Settings.Instance.ClipboardTemplate); File.WriteAllText(Settings.Instance.SaveTrackToFilePath, trackText); } - catch + catch (Exception e) { - // Ignore errors writing out the album. + logger.Error("Error while saving track to file.", e); } } } @@ -358,7 +362,7 @@ private void UpdateCoverArt(bool forceUpdate = false) } catch (UriFormatException e) { - Debug.WriteLine(e.Message); + logger.Error($"UriFormatException with URI=[{this.toastIconURI}]", e); this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); } finally @@ -494,7 +498,8 @@ private void FadeIn(bool force = false, bool isUpdate = false, bool permanent = #endif Win32API.SetThreadExecutionState(Win32API.ExecutionStateFlags.ES_SYSTEM_REQUIRED); #if DEBUG - Debug.WriteLine("** SetThreadExecutionState returned: " + rv); + if (logger.IsDebugEnabled) + logger.Debug($"SetThreadExecutionState returned: {rv}"); #endif } @@ -554,7 +559,10 @@ private void FadeOut(bool now = false) this.BeginAnimation(OpacityProperty, anim); }); } - catch (TaskCanceledException) { } + catch (TaskCanceledException ex) + { + logger.Warn("FadeOut animation canceled.", ex); + } }; } From 85effb00be11858dce7d388c6829c59f3685486c Mon Sep 17 00:00:00 2001 From: Alessandro Date: Sun, 19 Nov 2017 13:54:27 +0100 Subject: [PATCH 117/452] Add DebugView --- Toastify/Toastify.csproj | 7 +++++++ Toastify/src/App.xaml.cs | 14 ++++++++++++++ Toastify/src/View/DebugView.xaml | 14 ++++++++++++++ Toastify/src/View/DebugView.xaml.cs | 28 ++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 Toastify/src/View/DebugView.xaml create mode 100644 Toastify/src/View/DebugView.xaml.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 398c2982..b3520a13 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -143,6 +143,9 @@ + + DebugView.xaml + Designer @@ -150,6 +153,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index dabdb7aa..fe57f60b 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -87,7 +87,21 @@ private static void RunApp() { App app = new App(); app.InitializeComponent(); + +#if DEBUG LastInputDebug.Start(); + + Thread th = new Thread(() => + { + DebugView debugView = new DebugView(); + debugView.Show(); + System.Windows.Threading.Dispatcher.Run(); + }); + th.SetApartmentState(ApartmentState.STA); + th.IsBackground = true; + th.Start(); +#endif + app.Run(); } diff --git a/Toastify/src/View/DebugView.xaml b/Toastify/src/View/DebugView.xaml new file mode 100644 index 00000000..e04e8a39 --- /dev/null +++ b/Toastify/src/View/DebugView.xaml @@ -0,0 +1,14 @@ + + + - [XmlIgnore] - public string SettingsFilePath + public static string SettingsFilePath { get { - if (string.IsNullOrWhiteSpace(this._settingsFile)) + if (string.IsNullOrWhiteSpace(_settingsFilePath)) { string settingsPath = App.ApplicationData; @@ -101,10 +100,10 @@ public string SettingsFilePath } } - this._settingsFile = Path.Combine(settingsPath, SETTINGS_FILENAME); + _settingsFilePath = Path.Combine(settingsPath, SETTINGS_FILENAME); } - return this._settingsFile; + return _settingsFilePath; } } @@ -128,18 +127,18 @@ public string SettingsFilePath private readonly List defaultHotKeys = new List { - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward }, - new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Up , Action = SpotifyAction.PlayPause , Enabled = true }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Left , Action = SpotifyAction.PreviousTrack , Enabled = true }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Right , Action = SpotifyAction.NextTrack , Enabled = true }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.M , Action = SpotifyAction.Mute , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageDown, Action = SpotifyAction.VolumeDown , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.PageUp , Action = SpotifyAction.VolumeUp , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.Space , Action = SpotifyAction.ShowToast , Enabled = true }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.S , Action = SpotifyAction.ShowSpotify , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.C , Action = SpotifyAction.CopyTrackInfo , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.V , Action = SpotifyAction.PasteTrackInfo, Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemPlus , Action = SpotifyAction.FastForward , Enabled = false }, + new Hotkey { Ctrl = true, Alt = true, Key = System.Windows.Input.Key.OemMinus, Action = SpotifyAction.Rewind , Enabled = false }, }; private bool _disableToast; @@ -503,13 +502,22 @@ public string SongProgressBarForegroundColor private Settings() { - this.Default(); } - public void Default(bool setHotKeys = false) + ~Settings() + { + this.Unload(); + } + + #region Default + + public void Default() { + if (logger.IsDebugEnabled) + logger.Debug($"Default()\n{new System.Diagnostics.StackTrace()}"); + this.SetDefaultGeneral(); - this.SetDefaultHotkeys(setHotKeys); + this.SetDefaultHotkeys(); this.SetDefaultToastGeneral(); this.SetDefaultToastColors(); @@ -520,10 +528,10 @@ public void Default(bool setHotKeys = false) // There are a few settings that we don't really want to override when // clearing settings (in fact these are more properties that we store // alongside settings for convenience), so don't reset them if they have values - if (_instance != null) + if (_current != null) { - this.FirstRun = _instance.FirstRun; - this.PreviousVersion = _instance.PreviousVersion; + this.FirstRun = _current.FirstRun; + this.PreviousVersion = _current.PreviousVersion; } } @@ -543,14 +551,23 @@ public void SetDefaultGeneral() this.OptInToAnalytics = true; } - public void SetDefaultHotkeys(bool setHotKeys = false) + public void SetDefaultHotkeys() { - Hotkey.ClearAll(); this.GlobalHotKeys = true; - // Only set hotkeys when it's requested (we don't set hotkeys when loading from XML since it will create duplicates) - if (setHotKeys) - this.HotKeys = (List)this.defaultHotKeys.Clone(); + if (this.HotKeys != null) + { + foreach (Hotkey hotkey in this.HotKeys) + hotkey.Deactivate(); + } + + this.HotKeys = (List)this.defaultHotKeys.Clone(); + + if (this == _current && this.HotKeys != null) + { + foreach (Hotkey hotkey in this.HotKeys) + hotkey.Activate(); + } } public void SetDefaultToastGeneral() @@ -602,39 +619,71 @@ public void SetDefaultToastColors() this.SongProgressBarForegroundColor = "FFA0A0A0"; } - public void Save(bool replaceCurrent = false) + #endregion Default + + /// + /// Save the current Settings instance to the file system. + /// + /// if this instance is not . Call , instead. + public void Save() { - using (StreamWriter sw = new StreamWriter(this.SettingsFilePath, false)) + if (this != Current) + throw new InvalidOperationException("Cannot save non-Current instance of Settings"); + + using (StreamWriter sw = new StreamWriter(SettingsFilePath, false)) { this.XmlSerializer.Serialize(sw, this); } + } + + /// + /// Loads the Settings instance from the file system onto the Current Settings. + /// + /// if this instance is not . + /// if the serialized settings file was not found. + public void Load() + { + if (this != Current) + throw new InvalidOperationException("Cannot load settings onto non-Current instance"); - if (replaceCurrent) - Current = this; + Settings file; + using (StreamReader sr = new StreamReader(SettingsFilePath)) + { + file = this.XmlSerializer.Deserialize(sr) as Settings; + } + Current = file; + Current?.CheckForNewSettings(); + Current?.SanitizeSettingsFile(); } - public Settings Load() + /// + /// Loads the Settings instance from the file system onto the Current Settings or use default settings. + /// + /// if this instance is not . + public void LoadSafe() { - if (!File.Exists(this.SettingsFilePath)) + try { - Current.Default(true); - Current.Save(); + this.Load(); } - else + catch (InvalidOperationException) { - using (StreamReader sr = new StreamReader(this.SettingsFilePath)) - { - Settings file = this.XmlSerializer.Deserialize(sr) as Settings; - - file?.CheckForNewSettings(); - - Current = file; - } + throw; } + catch (Exception) + { + Current.Default(); + Current.Save(); + } + } - Current?.SanitizeSettingsFile(); - - return Current; + /// + /// Saves this instance of Settings as Current to the file system. + /// + public void SetAsCurrentAndSave() + { + Current = this; + this.Save(); } /// @@ -749,6 +798,10 @@ private void XmlSerializer_UnknownElement(object sender, XmlElementEventArgs e) bool.TryParse(e.Element.InnerText, out value); this.VolumeControlMode = value ? ToastifyVolumeControlMode.Spotify : ToastifyVolumeControlMode.SystemSpotifyOnly; break; + + default: + logger.Warn($"XmlSerializer: unknown element found [{e.Element.LocalName}]"); + break; } } diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 6a887a41..f536b9cd 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -237,7 +237,7 @@ + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Bottom color : + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Border color : + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> @@ -268,7 +268,7 @@ + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> Background color : + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> + ShowDropDownButton="True" ShowTabHeaders="False" ColorMode="ColorCanvas" AvailableColorsSortingMode="HueSaturationBrightness" UsingAlphaChannel="True" /> @@ -346,8 +346,8 @@ Content="Default" Command="{Binding Path=DefaultCommand}" ToolTip="Reset the current tab's settings to their default values"> - - + + - - + + + + + + + + + + + + + + + + + + - - + + Bypass proxy for local addresses + + + + + + + + + Entered values are saved automatically! + + + + + + \ No newline at end of file diff --git a/Toastify/src/View/ConfigProxyDialog.xaml.cs b/Toastify/src/View/ConfigProxyDialog.xaml.cs index db69e7d6..b40afe26 100644 --- a/Toastify/src/View/ConfigProxyDialog.xaml.cs +++ b/Toastify/src/View/ConfigProxyDialog.xaml.cs @@ -1,5 +1,9 @@ using System; +using System.Text; using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Interop; using Toastify.Helpers; using Toastify.Model; using Toastify.ViewModel; @@ -8,20 +12,93 @@ namespace Toastify.View { public partial class ConfigProxyDialog : Window { + private readonly ConfigProxyDialogViewModel viewModel; + + public bool AllowClosing { get; set; } + public ConfigProxyDialog() { this.InitializeComponent(); - this.DataContext = new ConfigProxyDialogViewModel(); + + this.viewModel = new ConfigProxyDialogViewModel(); + this.DataContext = this.viewModel; + } + + protected override void OnSourceInitialized(EventArgs e) + { + base.OnSourceInitialized(e); + + HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; + hwndSource?.AddHook(this.HwndSourceHook); + } + + private IntPtr HwndSourceHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) + { + var wm = unchecked((Win32API.WindowsMessagesFlags)(uint)msg); + + switch (wm) + { + // When the window is shown, disable the system CLOSE button + case Win32API.WindowsMessagesFlags.WM_SHOWWINDOW: + IntPtr hMenu = Win32API.GetSystemMenu(hwnd, false); + if (hMenu != IntPtr.Zero) + Win32API.EnableMenuItem(hMenu, Win32API.SysCommands.SC_CLOSE, Win32API.MenuFlags.MF_BYCOMMAND | Win32API.MenuFlags.MF_GRAYED); + break; + + // Intercept any WM_CLOSE event and cancel it if the window is not meant to be clos + case Win32API.WindowsMessagesFlags.WM_CLOSE: + if (!this.AllowClosing) + handled = true; + break; + } + return IntPtr.Zero; + } + + private void BtnReset_OnClick(object sender, RoutedEventArgs e) + { + App.ProxyConfig = null; + + // Update the binding context + this.DataContext = null; + this.DataContext = this.viewModel; + + // Clear the password + this.PasswordBox.Password = string.Empty; + } + + private void BtnClose_OnClick(object sender, RoutedEventArgs e) + { + this.AllowClosing = true; + this.Close(); + } + + private void ConfigProxyDialog_OnLoaded(object sender, RoutedEventArgs e) + { + Settings.Current.UseProxy = true; } private void ConfigProxyDialog_OnClosed(object sender, EventArgs e) { + string pwd = this.PasswordBox.Password; + Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(pwd)); + App.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; + if (App.ProxyConfig.IsValid()) - { Settings.Current.UseProxy = true; - Settings.Current.ProxyConfig.Set(App.ProxyConfig); - Settings.Current.Save(); + else + { + Settings.Current.UseProxy = false; + App.ProxyConfig = null; } + + Settings.Current.ProxyConfig.Set(App.ProxyConfig); + Settings.Current.Save(); + } + + private void TextBox_OnGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) + { + if (sender is TextBox textBox && !textBox.IsReadOnly && e.KeyboardDevice.IsKeyDown(Key.Tab)) + textBox.SelectAll(); } } } \ No newline at end of file diff --git a/Toastify/src/View/CustomMessageBoxWindow.xaml b/Toastify/src/View/CustomMessageBoxWindow.xaml new file mode 100644 index 00000000..d4988d51 --- /dev/null +++ b/Toastify/src/View/CustomMessageBoxWindow.xaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Toastify/src/View/CustomMessageBoxWindow.xaml.cs b/Toastify/src/View/CustomMessageBoxWindow.xaml.cs new file mode 100644 index 00000000..be195080 --- /dev/null +++ b/Toastify/src/View/CustomMessageBoxWindow.xaml.cs @@ -0,0 +1,246 @@ +using System.Drawing; +using System.Media; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace Toastify.View +{ + public partial class CustomMessageBoxWindow : Window + { + private SystemSound sound; + + internal string Caption + { + get { return this.Title; } + set { this.Title = value; } + } + + internal string Message + { + get { return this.TextBlockMessage.Text; } + set { this.TextBlockMessage.Text = value; } + } + + internal string OkButtonText + { + get { return this.LabelOk.Content.ToString(); } + set { this.LabelOk.Content = TryAddKeyboardAccellerator(value); } + } + + internal string CancelButtonText + { + get { return this.LabelCancel.Content.ToString(); } + set { this.LabelCancel.Content = TryAddKeyboardAccellerator(value); } + } + + internal string YesButtonText + { + get { return this.LabelYes.Content.ToString(); } + set { this.LabelYes.Content = TryAddKeyboardAccellerator(value); } + } + + internal string NoButtonText + { + get { return this.LabelNo.Content.ToString(); } + set { this.LabelNo.Content = TryAddKeyboardAccellerator(value); } + } + + public MessageBoxResult Result { get; set; } + + internal CustomMessageBoxWindow(string message) : this(message, null) + { + } + + internal CustomMessageBoxWindow(string message, string caption) : this(message, caption, MessageBoxButton.OK) + { + } + + internal CustomMessageBoxWindow(string message, string caption, MessageBoxButton button) : this(message, caption, button, MessageBoxImage.None) + { + } + + internal CustomMessageBoxWindow(string message, string caption, MessageBoxImage image) : this(message, caption, MessageBoxButton.OK, image) + { + } + + internal CustomMessageBoxWindow(string message, string caption, MessageBoxButton button, MessageBoxImage image) + { + this.InitializeComponent(); + + this.Message = message; + this.Caption = caption; + this.ImageMessageBox.Visibility = Visibility.Collapsed; + + this.DisplayButtons(button); + this.DisplayImage(image); + this.SetSound(image); + } + + private void DisplayButtons(MessageBoxButton button) + { + switch (button) + { + case MessageBoxButton.OKCancel: + // Hide all but OK, Cancel + this.ButtonOk.Visibility = Visibility.Visible; + this.ButtonOk.Focus(); + this.ButtonCancel.Visibility = Visibility.Visible; + + this.ButtonYes.Visibility = Visibility.Collapsed; + this.ButtonNo.Visibility = Visibility.Collapsed; + break; + + case MessageBoxButton.YesNo: + // Hide all but Yes, No + this.ButtonYes.Visibility = Visibility.Visible; + this.ButtonYes.Focus(); + this.ButtonNo.Visibility = Visibility.Visible; + + this.ButtonOk.Visibility = Visibility.Collapsed; + this.ButtonCancel.Visibility = Visibility.Collapsed; + break; + + case MessageBoxButton.YesNoCancel: + // Hide only OK + this.ButtonYes.Visibility = Visibility.Visible; + this.ButtonYes.Focus(); + this.ButtonNo.Visibility = Visibility.Visible; + this.ButtonCancel.Visibility = Visibility.Visible; + + this.ButtonOk.Visibility = Visibility.Collapsed; + break; + + default: + // Hide all but OK + this.ButtonOk.Visibility = Visibility.Visible; + this.ButtonOk.Focus(); + + this.ButtonYes.Visibility = Visibility.Collapsed; + this.ButtonNo.Visibility = Visibility.Collapsed; + this.ButtonCancel.Visibility = Visibility.Collapsed; + break; + } + } + + private void DisplayImage(MessageBoxImage image) + { + Icon icon; + + switch (image) + { + case MessageBoxImage.None: + return; + + case MessageBoxImage.Exclamation: // Enumeration value 48 - also covers "Warning" + icon = SystemIcons.Exclamation; + break; + + case MessageBoxImage.Error: // Enumeration value 16, also covers "Hand" and "Stop" + icon = SystemIcons.Hand; + break; + + case MessageBoxImage.Information: // Enumeration value 64 - also covers "Asterisk" + icon = SystemIcons.Information; + break; + + case MessageBoxImage.Question: + icon = SystemIcons.Question; + break; + + default: + icon = SystemIcons.Information; + break; + } + + this.ImageMessageBox.Source = ToImageSource(icon); + this.ImageMessageBox.Visibility = Visibility.Visible; + } + + private void SetSound(MessageBoxImage image) + { + switch (image) + { + case MessageBoxImage.Exclamation: // Enumeration value 48 - also covers "Warning" + this.sound = SystemSounds.Exclamation; + break; + + case MessageBoxImage.Error: // Enumeration value 16, also covers "Hand" and "Stop" + this.sound = SystemSounds.Hand; + break; + + case MessageBoxImage.Information: // Enumeration value 64 - also covers "Asterisk" + this.sound = SystemSounds.Asterisk; + break; + + case MessageBoxImage.Question: + this.sound = SystemSounds.Question; + break; + + default: + break; + } + } + + private void Button_OK_Click(object sender, RoutedEventArgs e) + { + this.Result = MessageBoxResult.OK; + this.Close(); + } + + private void Button_Cancel_Click(object sender, RoutedEventArgs e) + { + this.Result = MessageBoxResult.Cancel; + this.Close(); + } + + private void Button_Yes_Click(object sender, RoutedEventArgs e) + { + this.Result = MessageBoxResult.Yes; + this.Close(); + } + + private void Button_No_Click(object sender, RoutedEventArgs e) + { + this.Result = MessageBoxResult.No; + this.Close(); + } + + private void CustomMessageBoxWindow_OnLoaded(object sender, RoutedEventArgs e) + { + this.sound?.Play(); + } + + #region Util + + /// + /// Keyboard Accellerators are used in Windows to allow easy shortcuts to controls like Buttons and + /// MenuItems. These allow users to press the Alt key, and a shortcut key will be highlighted on the + /// control. If the user presses that key, that control will be activated. + /// This method checks a string if it contains a keyboard accellerator. If it doesn't, it adds one to the + /// beginning of the string. If there are two strings with the same accellerator, Windows handles it. + /// The keyboard accellerator character for WPF is underscore (_). It will not be visible. + /// + /// + /// + private static string TryAddKeyboardAccellerator(string input) + { + const string accellerator = "_"; // This is the default WPF accellerator symbol - used to be & in WinForms + + // If it already contains an accellerator, do nothing + if (input.Contains(accellerator)) + return input; + + return accellerator + input; + } + + private static ImageSource ToImageSource(Icon icon) + { + ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + return imageSource; + } + + #endregion Util + } +} \ No newline at end of file diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 59788898..49203d31 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -63,7 +63,7 @@ - This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. + This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. Save Artist and Album to file when song changes (uses the clipboard template) @@ -209,10 +209,7 @@ - - - - + The best way to tweak the position of the toast is to hold down Ctrl and then drag the toast around. The raw numbers are still accessible above. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. diff --git a/Toastify/src/ViewModel/ConfigProxyDialogViewModel.cs b/Toastify/src/ViewModel/ConfigProxyDialogViewModel.cs index 8b5679a5..93179e9a 100644 --- a/Toastify/src/ViewModel/ConfigProxyDialogViewModel.cs +++ b/Toastify/src/ViewModel/ConfigProxyDialogViewModel.cs @@ -1,4 +1,5 @@ using System; +using System.Windows.Media; using Toastify.Common; using Toastify.Helpers; @@ -46,19 +47,6 @@ public string Username } } - public string Password - { - get { return App.ProxyConfig.Password; } - set - { - if (App.ProxyConfig.Password != value) - { - App.ProxyConfig.Password = value; - this.NotifyPropertyChanged(); - } - } - } - public bool BypassProxyOnLocal { get { return App.ProxyConfig.BypassProxyOnLocal; } @@ -71,5 +59,10 @@ public bool BypassProxyOnLocal } } } + + public ImageSource InfoIcon + { + get { return Win32API.GetStockIconImage(Win32API.ShStockIconId.SIID_INFO, true); } + } } } \ No newline at end of file diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 41f45619..4155a698 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -10,10 +10,15 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading; +using System.Windows; using System.Windows.Forms; using System.Windows.Input; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; using Toastify.Core; using Toastify.Helpers; +using Point = System.Drawing.Point; // ReSharper disable InconsistentNaming namespace Toastify @@ -65,6 +70,16 @@ internal static class Win32API [DllImport("user32.dll")] internal static extern bool UpdateWindow(IntPtr hWnd); + [DllImport("user32.dll")] + internal static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); + + [DllImport("user32.dll")] + internal static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, MenuFlags uEnable); + + // Overload for system menu items + [DllImport("user32.dll")] + internal static extern bool EnableMenuItem(IntPtr hMenu, SysCommands uIDEnableItem, MenuFlags uEnable); + [DllImport("user32.dll")] internal static extern IntPtr GetMenu(IntPtr hWnd); @@ -272,6 +287,12 @@ internal static class Win32API [DllImport("user32.dll")] internal static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC); + [DllImport("user32.dll", SetLastError = true)] + private static extern bool DestroyIcon(IntPtr hIcon); + + [DllImport("shell32.dll", SetLastError = false)] + private static extern Int32 SHGetStockIconInfo(ShStockIconId siid, ShGSI uFlags, ref ShStockIconInfo psii); + #endregion DLL imports internal static IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex) @@ -400,6 +421,13 @@ private static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); } + private static void RemoveWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) + { + long longPtr = (long)GetWindowLongPtr(hWnd, nIndex); + longPtr &= ~(long)dwLong; + SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); + } + public static void AddToolWindowStyle(IntPtr hWnd) { AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); @@ -410,6 +438,11 @@ public static void AddVisibleWindowStyle(IntPtr hWnd) AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)WindowStylesFlags.WS_VISIBLE); } + public static void HideWindowCloseButton(IntPtr hWnd) + { + RemoveWindowLongPtr(hWnd, GWL.GWL_STYLE, (IntPtr)WindowStylesFlags.WS_SYSMENU); + } + public static bool IsForegroundAppAFullscreenVideogame() { // Get the dimensions of the active window. @@ -612,6 +645,59 @@ public static IntPtr SetLowLevelMouseHook(ref LowLevelMouseHookProc mouseHookPro return hHook; } + public static ImageSource GetStockIconImage(ShStockIconId iconId, bool large) + { + BitmapSource imageSource; + + if (Environment.OSVersion.Version.Major >= 6) + { + ShStockIconInfo sii = new ShStockIconInfo { cbSize = (UInt32)Marshal.SizeOf(typeof(ShStockIconInfo)) }; + + int errCode = SHGetStockIconInfo(iconId, ShGSI.SHGSI_ICON | (large ? ShGSI.SHGSI_LARGEICON : ShGSI.SHGSI_SMALLICON), ref sii); + Marshal.ThrowExceptionForHR(errCode); + + imageSource = Imaging.CreateBitmapSourceFromHIcon(sii.hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + DestroyIcon(sii.hIcon); + } + else + { + Icon icon; + switch (iconId) + { + case ShStockIconId.SIID_APPLICATION: + icon = SystemIcons.Application; + break; + + case ShStockIconId.SIID_HELP: + icon = SystemIcons.Question; + break; + + case ShStockIconId.SIID_ERROR: + icon = SystemIcons.Error; + break; + + case ShStockIconId.SIID_INFO: + icon = SystemIcons.Information; + break; + + case ShStockIconId.SIID_WARNING: + icon = SystemIcons.Warning; + break; + + case ShStockIconId.SIID_SHIELD: + icon = SystemIcons.Shield; + break; + + default: + throw new ArgumentException($@"No system icon available for {iconId}", nameof(iconId)); + } + + imageSource = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + } + + return imageSource; + } + #region Enums internal enum ShowWindowCmd @@ -885,6 +971,7 @@ internal enum WindowsMessagesFlags : uint WM_CLOSE = 0x0010, WM_QUIT = 0x0012, WM_ERASEBKGND = 0x0014, + WM_SHOWWINDOW = 0x0018, WM_CHILDACTIVATE = 0x0022, WM_GETICON = 0x007F, @@ -972,6 +1059,157 @@ internal enum ResourceType RT_MANIFEST = 24 } + internal enum SysCommands : uint + { + SC_SIZE = 0xF000, + SC_MOVE = 0xF010, + SC_MINIMIZE = 0xF020, + SC_MAXIMIZE = 0xF030, + SC_NEXTWINDOW = 0xF040, + SC_PREVWINDOW = 0xF050, + SC_CLOSE = 0xF060, + SC_VSCROLL = 0xF070, + SC_HSCROLL = 0xF080, + SC_MOUSEMENU = 0xF090, + SC_KEYMENU = 0xF100, + SC_ARRANGE = 0xF110, + SC_RESTORE = 0xF120, + SC_TASKLIST = 0xF130, + SC_SCREENSAVE = 0xF140, + SC_HOTKEY = 0xF150, + SC_DEFAULT = 0xF160, + SC_MONITORPOWER = 0xF170, + SC_CONTEXTHELP = 0xF180, + SC_SEPARATOR = 0xF00F, + + SCF_ISSECURE = 0x00000001, + + // Obsolete names + SC_ICON = SC_MINIMIZE, + SC_ZOOM = SC_MAXIMIZE, + } + + [Flags] + internal enum MenuFlags : long + { + MF_BYCOMMAND = 0x0000L, + MF_ENABLED = 0x0000L, + MF_GRAYED = 0x0001L, + MF_DISABLED = 0x0002L, + MF_BYPOSITION = 0x0400L + } + + internal enum ShStockIconId : uint + { + SIID_DOCNOASSOC = 0, + SIID_DOCASSOC = 1, + SIID_APPLICATION = 2, + SIID_FOLDER = 3, + SIID_FOLDEROPEN = 4, + SIID_DRIVE525 = 5, + SIID_DRIVE35 = 6, + SIID_DRIVEREMOVE = 7, + SIID_DRIVEFIXED = 8, + SIID_DRIVENET = 9, + SIID_DRIVENETDISABLED = 10, + SIID_DRIVECD = 11, + SIID_DRIVERAM = 12, + SIID_WORLD = 13, + SIID_SERVER = 15, + SIID_PRINTER = 16, + SIID_MYNETWORK = 17, + SIID_FIND = 22, + SIID_HELP = 23, + SIID_SHARE = 28, + SIID_LINK = 29, + SIID_SLOWFILE = 30, + SIID_RECYCLER = 31, + SIID_RECYCLERFULL = 32, + SIID_MEDIACDAUDIO = 40, + SIID_LOCK = 47, + SIID_AUTOLIST = 49, + SIID_PRINTERNET = 50, + SIID_SERVERSHARE = 51, + SIID_PRINTERFAX = 52, + SIID_PRINTERFAXNET = 53, + SIID_PRINTERFILE = 54, + SIID_STACK = 55, + SIID_MEDIASVCD = 56, + SIID_STUFFEDFOLDER = 57, + SIID_DRIVEUNKNOWN = 58, + SIID_DRIVEDVD = 59, + SIID_MEDIADVD = 60, + SIID_MEDIADVDRAM = 61, + SIID_MEDIADVDRW = 62, + SIID_MEDIADVDR = 63, + SIID_MEDIADVDROM = 64, + SIID_MEDIACDAUDIOPLUS = 65, + SIID_MEDIACDRW = 66, + SIID_MEDIACDR = 67, + SIID_MEDIACDBURN = 68, + SIID_MEDIABLANKCD = 69, + SIID_MEDIACDROM = 70, + SIID_AUDIOFILES = 71, + SIID_IMAGEFILES = 72, + SIID_VIDEOFILES = 73, + SIID_MIXEDFILES = 74, + SIID_FOLDERBACK = 75, + SIID_FOLDERFRONT = 76, + SIID_SHIELD = 77, + SIID_WARNING = 78, + SIID_INFO = 79, + SIID_ERROR = 80, + SIID_KEY = 81, + SIID_SOFTWARE = 82, + SIID_RENAME = 83, + SIID_DELETE = 84, + SIID_MEDIAAUDIODVD = 85, + SIID_MEDIAMOVIEDVD = 86, + SIID_MEDIAENHANCEDCD = 87, + SIID_MEDIAENHANCEDDVD = 88, + SIID_MEDIAHDDVD = 89, + SIID_MEDIABLURAY = 90, + SIID_MEDIAVCD = 91, + SIID_MEDIADVDPLUSR = 92, + SIID_MEDIADVDPLUSRW = 93, + SIID_DESKTOPPC = 94, + SIID_MOBILEPC = 95, + SIID_USERS = 96, + SIID_MEDIASMARTMEDIA = 97, + SIID_MEDIACOMPACTFLASH = 98, + SIID_DEVICECELLPHONE = 99, + SIID_DEVICECAMERA = 100, + SIID_DEVICEVIDEOCAMERA = 101, + SIID_DEVICEAUDIOPLAYER = 102, + SIID_NETWORKCONNECT = 103, + SIID_INTERNET = 104, + SIID_ZIPFILE = 105, + SIID_SETTINGS = 106, + SIID_DRIVEHDDVD = 132, + SIID_DRIVEBD = 133, + SIID_MEDIAHDDVDROM = 134, + SIID_MEDIAHDDVDR = 135, + SIID_MEDIAHDDVDRAM = 136, + SIID_MEDIABDROM = 137, + SIID_MEDIABDR = 138, + SIID_MEDIABDRE = 139, + SIID_CLUSTEREDDRIVE = 140, + SIID_MAX_ICONS = 175 + } + + [Flags] + public enum ShGSI : uint + { + SHGSI_ICONLOCATION = 0, + SHGSI_ICON = 0x000000100, + SHGSI_SYSICONINDEX = 0x000004000, + SHGSI_LINKOVERLAY = 0x000008000, + SHGSI_SELECTED = 0x000010000, + SHGSI_LARGEICON = 0x000000000, + SHGSI_SMALLICON = 0x000000001, + SHGSI_SHELLICONSIZE = 0x000000004 + } + #endregion Enums #region Internal classes and structs @@ -1065,6 +1303,18 @@ internal struct LowLevelMouseHookStruct public UIntPtr dwExtraInfo; } + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ShStockIconInfo + { + public UInt32 cbSize; + public IntPtr hIcon; + public Int32 iSysIconIndex; + public Int32 iIcon; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string szPath; + } + #endregion Internal classes and structs } } \ No newline at end of file From 5e1c9d0cde0166b3b158519b34fc4350533cf687 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sat, 24 Mar 2018 16:26:17 +0100 Subject: [PATCH 246/452] Use proxy in other places - VersionChecker - Analytics - ToastView.UpdateAlbumArt --- Toastify/src/App.xaml.cs | 25 +++++++++- Toastify/src/Core/Spotify.cs | 54 ++++++++++----------- Toastify/src/Model/Song.cs | 4 +- Toastify/src/Services/Analytics.cs | 5 +- Toastify/src/Services/VersionChecker.cs | 62 ++++++++++++------------- Toastify/src/View/ToastView.xaml.cs | 58 ++++++++++++++++------- 6 files changed, 125 insertions(+), 83 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 19a6010c..32051935 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -13,6 +13,8 @@ using System.Globalization; using System.IO; using System.Linq; +using System.Net; +using System.Net.Http; using System.Reflection; using System.Threading; using System.Windows; @@ -361,7 +363,28 @@ public static void Terminate() new Action(() => Current.Shutdown())); } - private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + public static HttpClientHandler CreateHttpClientHandler(ProxyConfig proxyConfig = null) + { + HttpClientHandler clientHandler = new HttpClientHandler + { + PreAuthenticate = false, + UseDefaultCredentials = true, + UseProxy = false + }; + + if (!string.IsNullOrWhiteSpace(proxyConfig?.Host)) + { + WebProxy proxy = proxyConfig.CreateWebProxy(); + clientHandler.UseProxy = true; + clientHandler.Proxy = proxy; + clientHandler.UseDefaultCredentials = proxy.UseDefaultCredentials; + clientHandler.PreAuthenticate = proxy.UseDefaultCredentials; + } + + return clientHandler; + } + + private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { logger.Error("Unhandled exception.", e.Exception); Analytics.TrackException(e.Exception); diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 96c34a48..86dfcbad 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -13,7 +13,6 @@ using System.Text.RegularExpressions; using System.Threading; using System.Windows; -using System.Windows.Threading; using Toastify.Common; using Toastify.Events; using Toastify.Helpers; @@ -346,7 +345,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) bool hostRedirected = Regex.IsMatch(socketException.Message, @"(127\.0\.0\.1|localhost|0\.0\.0\.0):80(?![0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); // Double check - HttpClientHandler clientHandler = CreateHttpClientHandler(App.ProxyConfig); + HttpClientHandler clientHandler = App.CreateHttpClientHandler(App.ProxyConfig); using (HttpClient http = new HttpClient(clientHandler)) { using (HttpRequestMessage request = new HttpRequestMessage()) @@ -390,7 +389,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) var httpResponse = (HttpWebResponse)ex.Response; //// 2a) UseProxy or ProxyAuthenticationRequired - if (httpResponse.StatusCode == HttpStatusCode.UseProxy) + if (httpResponse?.StatusCode == HttpStatusCode.UseProxy) { string location = httpResponse.Headers[HttpResponseHeader.Location]; Uri uri = new Uri(location); @@ -408,12 +407,12 @@ private void ConnectWithSpotify(DoWorkEventArgs e) handled = true; if (logger.IsDebugEnabled) - logger.Debug($"The server requested the use of a proxy. Using \"{proxy.Host}:{proxy.Host}\" as requested."); + logger.Debug($"The server requested the use of a proxy. Using \"{(!string.IsNullOrEmpty(proxy.Username) ? $"{proxy.Username}@" : "")}{proxy.Host}:{proxy.Port}\" as requested."); } - else if (httpResponse.StatusCode == HttpStatusCode.ProxyAuthenticationRequired && !(proxySettingsChangedManually || App.ProxyConfig.IsValid())) + else if (httpResponse?.StatusCode == HttpStatusCode.ProxyAuthenticationRequired && !(proxySettingsChangedManually || App.ProxyConfig.IsValid())) { if (logger.IsDebugEnabled) - logger.Debug("The requested proxy server requires authentication.", ex); + logger.Debug("The requested proxy server requires authentication. Prompting the user for proxy details...", ex); this.spotifyLauncherTimeoutTimer.Pause(); App.ShowConfigProxyDialog(); @@ -430,6 +429,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) } } + // All unhandled socket errors or HTTP status codes should be handled here if (!handled) { string errorCode; @@ -444,14 +444,16 @@ private void ConnectWithSpotify(DoWorkEventArgs e) else { var httpResponse = (HttpWebResponse)ex.Response; - errorCode = httpResponse.StatusCode.ToString(); + errorCode = httpResponse?.StatusCode.ToString(); logger.Warn("Unhandled WebException while connecting to Spotify.", ex); } // If we failed to handle the exception, ask the user if they need to configure a proxy if (!(proxySettingsChangedManually || App.ProxyConfig.IsValid())) { - proxySettingsChangedManually = true; + if (logger.IsDebugEnabled) + logger.Debug("Asking the user if they are behind a proxy..."); + if (MessageBox.Show("Toastify is having difficulties in connecting to Spotify. Are you behind a proxy?", "Toastify", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) this.ChangeProxySettings(); else @@ -460,11 +462,18 @@ private void ConnectWithSpotify(DoWorkEventArgs e) App.ProxyConfig.Set(null); Settings.Current.UseProxy = false; Settings.Current.Save(); + + if (logger.IsDebugEnabled) + logger.Debug("Use of proxy has been disabled."); } + proxySettingsChangedManually = true; } else { - logger.Warn($"Proxy settings had no effect! Returned error code: {errorCode}", ex); + logger.Warn($"Proxy settings had no effect! {(errorCode != null ? $"Returned error code: {errorCode}" : "")}", ex); + + if (logger.IsDebugEnabled) + logger.Debug("Asking the user if they want to retry, change proxy settings or exit..."); MessageBoxResult choice = MessageBoxResult.Cancel; App.CallInSTAThread(() => @@ -478,6 +487,12 @@ private void ConnectWithSpotify(DoWorkEventArgs e) MessageBoxImage.Exclamation); }); + if (logger.IsDebugEnabled) + { + string hrChoice = choice == MessageBoxResult.Yes ? "Retry" : choice == MessageBoxResult.No ? "Change settings" : "Exit"; + logger.Debug($"Choice = {hrChoice}"); + } + if (choice == MessageBoxResult.No) this.ChangeProxySettings(); else if (choice == MessageBoxResult.Cancel) @@ -787,27 +802,6 @@ private static string GetSpotifyPath() return path; } - private static HttpClientHandler CreateHttpClientHandler(ProxyConfig proxyConfig = null) - { - HttpClientHandler clientHandler = new HttpClientHandler - { - PreAuthenticate = false, - UseDefaultCredentials = true, - UseProxy = false - }; - - if (!string.IsNullOrWhiteSpace(proxyConfig?.Host)) - { - WebProxy proxy = proxyConfig.CreateWebProxy(); - clientHandler.UseProxy = true; - clientHandler.Proxy = proxy; - clientHandler.UseDefaultCredentials = proxy.UseDefaultCredentials; - clientHandler.PreAuthenticate = proxy.UseDefaultCredentials; - } - - return clientHandler; - } - #region Dispose public static void DisposeInstance() diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index 26f01fe4..841c5b86 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -157,11 +157,11 @@ public static implicit operator Song(Track spotifyTrack) { try { - coverArtUrl = spotifyTrack.GetAlbumArtUrl(size); + coverArtUrl = spotifyTrack.GetAlbumArtUrl(size, App.ProxyConfig); } catch (Exception e) { - logger.Error("Error while getting album art url (GetAlbumArtUrl).", e); + logger.Error("Error while getting album art url", e); } if (!string.IsNullOrWhiteSpace(coverArtUrl)) break; diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index d6d11ed6..eda59f02 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -55,7 +55,8 @@ internal static void Init() return; } - requestFactory = new GoogleAnalyticsRequestFactory(TrackingId); + IWebProxy proxy = App.ProxyConfig.CreateWebProxy(); + requestFactory = proxy == null ? new GoogleAnalyticsRequestFactory(TrackingId) : new GoogleAnalyticsRequestFactory(TrackingId, proxy); bool wasOnNoAnalyticsVersion = new Version(Settings.Current.PreviousVersion ?? "0.0.0") < new Version("1.9.7"); bool appHasBeenJustUpdated = new Version(Settings.Current.PreviousVersion ?? "0.0.0") < new Version(VersionChecker.CurrentVersion); @@ -70,7 +71,7 @@ internal static void Init() if (!AnalyticsEnabled) return; - // Collect Preferences every at every update + // Collect Preferences at every update if (appHasBeenJustUpdated) CollectPreferences(); #else diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 2a6ebc95..22095d84 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -1,5 +1,5 @@ using System; -using System.Net; +using System.Net.Http; using System.Text.RegularExpressions; using System.Threading; using Toastify.Events; @@ -48,16 +48,12 @@ public static string CurrentVersion #endregion Static properties - private readonly WebClient webClient; - private Thread checkVersionThread; public event EventHandler CheckVersionComplete; protected VersionChecker() { - this.webClient = new WebClient(); - this.webClient.DownloadStringCompleted += this.WebClient_DownloadStringCompleted; } public void BeginCheckVersion() @@ -66,47 +62,49 @@ public void BeginCheckVersion() this.checkVersionThread = null; this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = CurrentVersion, New = false }); #else - this.checkVersionThread = new Thread(this.ThreadedBeginCheckVersion) { IsBackground = true }; + this.checkVersionThread = new Thread(this.ThreadedCheckVersion) + { + Name = "Toastify VersionChecker", + IsBackground = true + }; this.checkVersionThread.Start(); #endif } - private void ThreadedBeginCheckVersion() - { - //WebClients XXXAsync isn't as async as I wanted... - this.webClient.DownloadStringAsync(new Uri(VersionUrl)); - } - - private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) + private async void ThreadedCheckVersion() { - string version = string.Empty; - bool newVersion = false; - - if (!e.Cancelled && e.Error == null) + string downloadedString = null; + try { - var match = Regex.Match(e.Result, "(\\d+\\.?)+", RegexOptions.IgnoreCase | RegexOptions.Singleline); - - if (match.Success) + HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); + using (HttpClient http = new HttpClient(handler)) { - version = match.Value; - Version localV = new Version(CurrentVersion); - Version remoteV = new Version(version); - newVersion = localV.CompareTo(remoteV) < 0; + downloadedString = await http.GetStringAsync(new Uri(VersionUrl)).ConfigureAwait(false); } } + finally + { + string sRemote = string.Empty; + bool isNewVersion = false; - this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = version, New = newVersion }); + if (!string.IsNullOrWhiteSpace(downloadedString)) + { + var match = Regex.Match(downloadedString, @"(\d+\.?)+", RegexOptions.IgnoreCase | RegexOptions.Singleline); + if (match.Success) + { + sRemote = match.Value; + Version vLocal = new Version(CurrentVersion); + Version vRemote = new Version(sRemote); + isNewVersion = vLocal.CompareTo(vRemote) < 0; + } + } + + this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = sRemote, New = isNewVersion }); + } } public void Dispose() { - if (this.webClient != null) - { - this.webClient.DownloadStringCompleted -= this.WebClient_DownloadStringCompleted; - this.webClient.CancelAsync(); - this.webClient.Dispose(); - } - this.checkVersionThread?.Abort(); } diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 54ac29f8..63034e23 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; -using System.Net.Cache; +using System.Net.Http; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -398,25 +398,51 @@ private void UpdateCoverArt(string coverArtUri) { this.toastIconURI = coverArtUri; this.Dispatcher.Invoke(DispatcherPriority.Normal, - new Action(() => + new Action(async () => { - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); - try - { - this.cover.UriSource = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); - } - catch (UriFormatException e) + Stream stream; + + HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); + using (HttpClient http = new HttpClient(handler)) { - logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); - this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + Uri uri = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); + stream = await http.GetStreamAsync(uri).ConfigureAwait(false); } - finally + + using (BinaryReader reader = new BinaryReader(stream)) { - this.cover.EndInit(); - this.AlbumArt.Source = this.cover; + using (MemoryStream memoryStream = new MemoryStream()) + { + byte[] bytebuffer = new byte[512]; + int bytesRead = reader.Read(bytebuffer, 0, 512); + + while (bytesRead > 0) + { + memoryStream.Write(bytebuffer, 0, bytesRead); + bytesRead = reader.Read(bytebuffer, 0, 512); + } + + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + try + { + memoryStream.Seek(0, SeekOrigin.Begin); + this.cover.StreamSource = memoryStream; + } + catch (UriFormatException e) + { + logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + } + finally + { + this.cover.EndInit(); + this.AlbumArt.Source = this.cover; + + stream.Close(); + } + } } })); } From c7c1b0b215edc54e84a89d8aa9c956b660d6a22d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sun, 25 Mar 2018 15:23:32 +0200 Subject: [PATCH 247/452] Add proxy config to Settings window --- Toastify/src/App.xaml | 10 +++++- Toastify/src/Helpers/Extensions.cs | 19 ++++++++--- Toastify/src/Services/Analytics.cs | 8 +++++ Toastify/src/View/ConfigProxyDialog.xaml | 10 ------ Toastify/src/View/SettingsView.xaml | 37 ++++++++++++++++++++- Toastify/src/View/SettingsView.xaml.cs | 17 ++++++++++ Toastify/src/View/ToastView.xaml.cs | 2 +- Toastify/src/ViewModel/SettingsViewModel.cs | 30 ++++++++++++++++- 8 files changed, 114 insertions(+), 19 deletions(-) diff --git a/Toastify/src/App.xaml b/Toastify/src/App.xaml index 2e7f4fc7..637635b2 100644 --- a/Toastify/src/App.xaml +++ b/Toastify/src/App.xaml @@ -4,9 +4,17 @@ StartupUri="View/ToastView.xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" Startup="App_OnStartup" Exit="App_OnExit"> - + #FF575757 + + \ No newline at end of file diff --git a/Toastify/src/Helpers/Extensions.cs b/Toastify/src/Helpers/Extensions.cs index b8bf2c34..39c50ce8 100644 --- a/Toastify/src/Helpers/Extensions.cs +++ b/Toastify/src/Helpers/Extensions.cs @@ -1,9 +1,10 @@ -using SpotifyAPI; -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; +using System.Runtime.InteropServices; +using System.Security; using System.Windows; using System.Windows.Input; using System.Windows.Interop; @@ -140,10 +141,18 @@ public static T Clamp(this T value, Range? range) where T : IComparable return range.HasValue ? value.Clamp(range.Value) : value; } - public static bool IsValid(this ProxyConfig proxyConfig) + public static string ToPlainString(this SecureString secureString) { - return !string.IsNullOrWhiteSpace(proxyConfig.Host) && - proxyConfig.Port > 0 && proxyConfig.Port <= UInt16.MaxValue; + IntPtr valuePtr = IntPtr.Zero; + try + { + valuePtr = Marshal.SecureStringToGlobalAllocUnicode(secureString); + return Marshal.PtrToStringUni(valuePtr); + } + finally + { + Marshal.ZeroFreeGlobalAllocUnicode(valuePtr); + } } } } \ No newline at end of file diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index eda59f02..f4021af8 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -79,6 +79,14 @@ internal static void Init() #endif } + public static void Stop() + { + if (logger.IsDebugEnabled) + logger.Debug("Analytics service terminated."); + + requestFactory = null; + } + #region TrackPageHit public static void TrackPageHit(string documentPath) diff --git a/Toastify/src/View/ConfigProxyDialog.xaml b/Toastify/src/View/ConfigProxyDialog.xaml index 3be5daf5..42fd5c37 100644 --- a/Toastify/src/View/ConfigProxyDialog.xaml +++ b/Toastify/src/View/ConfigProxyDialog.xaml @@ -11,16 +11,6 @@ ShowInTaskbar="False" SizeToContent="WidthAndHeight" Topmost="True" WindowStartupLocation="CenterOwner" Loaded="ConfigProxyDialog_OnLoaded" Closed="ConfigProxyDialog_OnClosed"> - - - - diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 49203d31..60261293 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -6,10 +6,11 @@ xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:core="clr-namespace:Toastify.Core" xmlns:common="clr-namespace:Toastify.Common" + xmlns:converters="clr-namespace:Toastify.Helpers.Converters" xmlns:helpers="clr-namespace:Toastify.Helpers" xmlns:markup="clr-namespace:Toastify.Helpers.Markup" + xmlns:validators="clr-namespace:Toastify.Helpers.Validators" xmlns:viewmodel="clr-namespace:Toastify.ViewModel" - xmlns:converters="clr-namespace:Toastify.Helpers.Converters" mc:Ignorable="d" x:Class="Toastify.View.SettingsView" Title="Toastify - Settings" Height="570" Width="580" ResizeMode="NoResize" Icon="/Toastify;component/Resources/ToastifyIcon.ico" Closed="Window_Closed"> @@ -375,6 +376,40 @@ + + + Use Proxy + + + + + + + + + + + + + + + + + + + + + + + + + + + Bypass proxy for local addresses + + + + diff --git a/Toastify/src/View/SettingsView.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs index 8a1f9537..9e432923 100644 --- a/Toastify/src/View/SettingsView.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -16,6 +16,7 @@ using Toastify.ViewModel; using Xceed.Wpf.Toolkit; using KeyEventArgs = System.Windows.Input.KeyEventArgs; +using TextBox = System.Windows.Controls.TextBox; using WindowStartupLocation = System.Windows.WindowStartupLocation; // ReSharper disable PrivateFieldCanBeConvertedToLocalVariable @@ -388,6 +389,22 @@ private void PositionTopUpDown_OnKeyUp(object sender, KeyEventArgs e) #endregion "Toast" tab + #region "Advanced" tab + + private void ProxyPasswordBox_OnPasswordChanged(object sender, RoutedEventArgs e) + { + if (this.settingsViewModel != null) + this.settingsViewModel.ProxyPassword = ((WatermarkPasswordBox)sender).SecurePassword; + } + + private void ProxyTextBox_OnGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) + { + if (sender is TextBox textBox && !textBox.IsReadOnly && e.KeyboardDevice.IsKeyDown(Key.Tab)) + textBox.SelectAll(); + } + + #endregion "Advanced" tab + #endregion Event handlers } } \ No newline at end of file diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 63034e23..16cfc7f3 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -406,7 +406,7 @@ private void UpdateCoverArt(string coverArtUri) using (HttpClient http = new HttpClient(handler)) { Uri uri = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); - stream = await http.GetStreamAsync(uri).ConfigureAwait(false); + stream = await http.GetStreamAsync(uri); } using (BinaryReader reader = new BinaryReader(stream)) diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 3fe21739..68d3cb5c 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -1,10 +1,14 @@ using System; +using System.Net; +using System.Security; +using System.Text; using System.Windows.Forms; using System.Windows.Media; using Toastify.Common; using Toastify.Events; using Toastify.Helpers; using Toastify.Model; +using Xceed.Wpf.Toolkit; namespace Toastify.ViewModel { @@ -141,6 +145,8 @@ public Color SongProgressBarForegroundColor #endregion Toast + public SecureString ProxyPassword { private get; set; } + #region Commands public DelegateCommand SaveCommand { get; } @@ -209,12 +215,34 @@ private void Settings_PropertyChanged(object sender, System.ComponentModel.Prope private void Save() { + if (this.Settings.UseProxy) + { + // TODO: Use only SecureString + // Converting a SecureString to a managed String defeats the purpose of using a SecureString in the first place! + // Revise https://github.com/JohnnyCrazy/SpotifyAPI-NET/pull/224 and use SecureString instead + + // Proxy Password + if (string.IsNullOrEmpty(this.Settings.ProxyConfig.Username)) + { + // If no username has been entered, remove the saved password + Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(string.Empty)); + this.Settings.ProxyConfig.Password = null; + } + else if (!string.IsNullOrEmpty(this.ProxyPassword.ToPlainString())) + { + // Otherwise, if the password box is not empty, save the new password + string pwd = this.ProxyPassword.ToPlainString(); + Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(pwd)); + this.Settings.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; + } + } + this.Settings.SetAsCurrentAndSave(); // Get a new clone of the current settings, // since Current and the original Temporary are now the same instance; this.Settings = Settings.Temporary; - + this.SettingsSaved?.Invoke(this, new SettingsSavedEventArgs(this.Settings)); } From f7bff453d677b596344f6618f939edacdb5b230e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sun, 25 Mar 2018 17:05:57 +0200 Subject: [PATCH 248/452] Add overloads for SecureString to Security class's methods --- Toastify/Toastify.csproj | 4 + Toastify/src/Crypt32.cs | 90 +++++++++ Toastify/src/Model/Settings.cs | 2 +- Toastify/src/Security.cs | 207 ++++++++++++++++++-- Toastify/src/View/ConfigProxyDialog.xaml.cs | 2 +- Toastify/src/ViewModel/SettingsViewModel.cs | 6 +- 6 files changed, 291 insertions(+), 20 deletions(-) create mode 100644 Toastify/src/Crypt32.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 17e27602..9aa3de75 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -37,6 +37,7 @@ prompt AllRules.ruleset false + true true @@ -58,6 +59,7 @@ false pdbonly true + true bin\x64\Release\Windows\ @@ -79,6 +81,7 @@ prompt AllRules.ruleset false + true bin\x64\Test Release\Windows\ @@ -159,6 +162,7 @@ Component + diff --git a/Toastify/src/Crypt32.cs b/Toastify/src/Crypt32.cs new file mode 100644 index 00000000..024b79af --- /dev/null +++ b/Toastify/src/Crypt32.cs @@ -0,0 +1,90 @@ +using System; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; + +// ReSharper disable InconsistentNaming +namespace Toastify +{ + public static class Crypt32 + { + [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CryptProtectData(ref DataBlob pDataIn, string szDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, ref CryptProtectPromptStruct pPromptStruct, CryptProtectFlags dwFlags, ref DataBlob pDataOut); + + [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CryptProtectData(ref DataBlob pDataIn, string szDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, IntPtr pPromptStruct, CryptProtectFlags dwFlags, ref DataBlob pDataOut); + + [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CryptUnprotectData(ref DataBlob pDataIn, StringBuilder szDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, ref CryptProtectPromptStruct pPromptStruct, CryptProtectFlags dwFlags, ref DataBlob pDataOut); + + [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CryptUnprotectData(ref DataBlob pDataIn, StringBuilder szDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, IntPtr pPromptStruct, CryptProtectFlags dwFlags, ref DataBlob pDataOut); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct DataBlob + { + public int cbData; + public IntPtr pbData; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CryptProtectPromptStruct + { + public int cbSize; + public CryptProtectPromptFlags dwPromptFlags; + public IntPtr hwndApp; + public string szPrompt; + } + + [Flags] + internal enum CryptProtectPromptFlags + { + // prompt on unprotect + CRYPTPROTECT_PROMPT_ON_UNPROTECT = 0x1, + + // prompt on protect + CRYPTPROTECT_PROMPT_ON_PROTECT = 0x2 + } + + [Flags] + internal enum CryptProtectFlags + { + /// + /// For remote-access situations where UI is not an option; if UI was specified on protect or + /// unprotect operation, the call will fail and GetLastError() will indicate ERROR_PASSWORD_RESTRICTION + /// + CRYPTPROTECT_UI_FORBIDDEN = 0x1, + + /// + /// Per machine protected data – any user on machine where CryptProtectData took place may CryptUnprotectData + /// + CRYPTPROTECT_LOCAL_MACHINE = 0x4, + + /// + /// Force credential synchronize during CryptProtectData(). + /// Synchronize is the only operation that occurs during this operation. + /// + CRYPTPROTECT_CRED_SYNC = 0x8, + + /// + /// Generate an Audit on protect and unprotect operations + /// + CRYPTPROTECT_AUDIT = 0x10, + + /// + /// Protect data with a non-recoverable key + /// + CRYPTPROTECT_NO_RECOVERY = 0x20, + + + /// + /// Verify the protection of a protected blob + /// + CRYPTPROTECT_VERIFY_PROTECTION = 0x40 + } + } +} \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 67fccd71..ea79105c 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -553,7 +553,7 @@ public ProxyConfig ProxyConfig get { // Retrieve the encrypted password - string plaintext = Security.GetProtectedProxyPassword(); + string plaintext = Security.GetProxyPassword(); this._proxyConfig.Password = plaintext; return this._proxyConfig; } diff --git a/Toastify/src/Security.cs b/Toastify/src/Security.cs index 2b66d07f..2dd4f4ba 100644 --- a/Toastify/src/Security.cs +++ b/Toastify/src/Security.cs @@ -1,6 +1,9 @@ -using System; +using log4net; +using System; using System.IO; +using System.Runtime.InteropServices; using System.Runtime.Serialization.Formatters.Binary; +using System.Security; using System.Security.AccessControl; using System.Security.Cryptography; using System.Security.Principal; @@ -10,28 +13,209 @@ namespace Toastify { public static class Security { + private static readonly ILog logger = LogManager.GetLogger(typeof(Security)); + public static bool ProtectedDataExists(string fileName) { string secFilePath = Path.Combine(App.LocalApplicationData, fileName); return File.Exists(secFilePath); } - internal static string GetProtectedProxyPassword() + #region Proxy Password + + internal static string GetProxyPassword() { byte[] data = GetProtectedData("proxy.sec"); return data != null ? Encoding.UTF8.GetString(data) : null; } - internal static void SaveProtectedProxyPassword(byte[] plaintext) + internal static SecureString GetSecureProxyPassword() + { + SecureString secureString = GetProtectedSecureString("proxy.sec"); + return secureString != null && secureString.Length > 0 ? secureString : null; + } + + internal static void SaveProxyPassword(byte[] plaintext) { SaveProtectedData(plaintext, "proxy.sec"); } + internal static void SaveProxyPassword(SecureString secureString) + { + SaveProtectedData(secureString, "proxy.sec"); + } + + #endregion Proxy Password + internal static byte[] GetProtectedData(string fileName) + { + byte[] encryptedData = GetProtectedDataInternal(fileName, out byte[] entropy); + return ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser); + } + + internal static SecureString GetProtectedSecureString(string fileName) + { + byte[] encryptedData = GetProtectedDataInternal(fileName, out byte[] entropy); + + IntPtr entropyPtr = Marshal.AllocHGlobal(entropy.Length); + Marshal.Copy(entropy, 0, entropyPtr, entropy.Length); + + IntPtr dataPtr = Marshal.AllocHGlobal(encryptedData.Length); + Marshal.Copy(encryptedData, 0, dataPtr, encryptedData.Length); + + try + { + Crypt32.DataBlob dataBlob = new Crypt32.DataBlob + { + cbData = encryptedData.Length, + pbData = dataPtr + }; + Crypt32.DataBlob entropyBlob = new Crypt32.DataBlob + { + cbData = entropy.Length, + pbData = entropyPtr + }; + Crypt32.DataBlob outBlob = new Crypt32.DataBlob(); + + // Crypt + bool success = Crypt32.CryptUnprotectData(ref dataBlob, null, ref entropyBlob, IntPtr.Zero, IntPtr.Zero, Crypt32.CryptProtectFlags.CRYPTPROTECT_LOCAL_MACHINE, ref outBlob); + if (!success) + { + int error = Marshal.GetLastWin32Error(); + logger.Error($"CryptUnprotectData failed with error code {error}!"); + } + + // Save to file + byte[] bytes = null; + char[] chars = null; + try + { + SecureString secureString = new SecureString(); + + bytes = new byte[outBlob.cbData]; + Marshal.Copy(outBlob.pbData, bytes, 0, bytes.Length); + + chars = Encoding.UTF8.GetChars(bytes, 0, bytes.Length); + foreach (char c in chars) + secureString.AppendChar(c); + + return secureString; + } + finally + { + Marshal.FreeHGlobal(outBlob.pbData); + + unsafe + { + // Zero out the byte array + if (bytes != null) + { + byte[] zeroB = new byte[bytes.Length]; + fixed (byte* pb = &bytes[0]) + { + Marshal.Copy(zeroB, 0, new IntPtr(pb), zeroB.Length); + } + } + + // Zero out the char array + if (chars != null) + { + char[] zeroC = new char[chars.Length]; + fixed (char* pc = &chars[0]) + { + Marshal.Copy(zeroC, 0, new IntPtr(pc), zeroC.Length); + } + } + } + } + } + finally + { + Marshal.FreeHGlobal(entropyPtr); + Marshal.FreeHGlobal(dataPtr); + } + } + + internal static void SaveProtectedData(byte[] plaintext, string fileName) + { + // Generate entropy + byte[] entropy = new byte[20]; + using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) + { + rng.GetBytes(entropy); + } + byte[] ciphertext = ProtectedData.Protect(plaintext, entropy, DataProtectionScope.CurrentUser); + + // Write to file + SaveProtectedDataInternal(ciphertext, entropy, fileName); + } + + internal static void SaveProtectedData(SecureString secureString, string fileName) + { + // Generate entropy + byte[] entropy = new byte[20]; + using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) + { + rng.GetBytes(entropy); + } + IntPtr entropyPtr = Marshal.AllocHGlobal(entropy.Length); + Marshal.Copy(entropy, 0, entropyPtr, entropy.Length); + + // Get a BSTR from the SecureString + IntPtr unmanagedString = Marshal.SecureStringToBSTR(secureString); + + try + { + Crypt32.DataBlob dataBlob = new Crypt32.DataBlob + { + cbData = secureString.Length, + pbData = unmanagedString + }; + Crypt32.DataBlob entropyBlob = new Crypt32.DataBlob + { + cbData = entropy.Length, + pbData = entropyPtr + }; + Crypt32.DataBlob outBlob = new Crypt32.DataBlob(); + + // Crypt + bool success = Crypt32.CryptProtectData(ref dataBlob, null, ref entropyBlob, IntPtr.Zero, IntPtr.Zero, Crypt32.CryptProtectFlags.CRYPTPROTECT_LOCAL_MACHINE, ref outBlob); + if (!success) + { + int error = Marshal.GetLastWin32Error(); + logger.Error($"CryptProtectData failed with error code {error}!"); + } + + // Save to file + try + { + byte[] cryptedData = new byte[outBlob.cbData]; + Marshal.Copy(outBlob.pbData, cryptedData, 0, cryptedData.Length); + + SaveProtectedDataInternal(cryptedData, entropy, fileName); + } + finally + { + Marshal.FreeHGlobal(outBlob.pbData); + } + } + finally + { + Marshal.FreeHGlobal(entropyPtr); + Marshal.ZeroFreeBSTR(unmanagedString); + } + } + + #region Internal + + private static byte[] GetProtectedDataInternal(string fileName, out byte[] entropy) { string secFilePath = Path.Combine(App.LocalApplicationData, fileName); if (!File.Exists(secFilePath)) + { + entropy = null; return null; + } ProtectedText pt; using (FileStream fs = new FileStream(secFilePath, FileMode.Open, FileAccess.Read)) @@ -40,26 +224,19 @@ internal static byte[] GetProtectedData(string fileName) pt = (ProtectedText)binaryFormatter.Deserialize(fs); } - return ProtectedData.Unprotect(pt.ciphertext, pt.entropy, DataProtectionScope.CurrentUser); + entropy = pt.entropy; + return pt.ciphertext; } - internal static void SaveProtectedData(byte[] plaintext, string fileName) + private static void SaveProtectedDataInternal(byte[] cryptedData, byte[] entropy, string fileName) { string secFilePath = Path.Combine(App.LocalApplicationData, fileName); - // Generate entropy - byte[] entropy = new byte[20]; - using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) - { - rng.GetBytes(entropy); - } - byte[] ciphertext = ProtectedData.Protect(plaintext, entropy, DataProtectionScope.CurrentUser); - // Write to file using (FileStream fs = new FileStream(secFilePath, FileMode.Create, FileAccess.Write)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); - binaryFormatter.Serialize(fs, new ProtectedText { entropy = entropy, ciphertext = ciphertext }); + binaryFormatter.Serialize(fs, new ProtectedText { entropy = entropy, ciphertext = cryptedData }); } // Only allow access to the file to the current user @@ -74,6 +251,8 @@ internal static void SaveProtectedData(byte[] plaintext, string fileName) File.SetAccessControl(secFilePath, acl); } + #endregion Internal + [Serializable] private class ProtectedText { diff --git a/Toastify/src/View/ConfigProxyDialog.xaml.cs b/Toastify/src/View/ConfigProxyDialog.xaml.cs index b40afe26..f2bcecfd 100644 --- a/Toastify/src/View/ConfigProxyDialog.xaml.cs +++ b/Toastify/src/View/ConfigProxyDialog.xaml.cs @@ -80,7 +80,7 @@ private void ConfigProxyDialog_OnLoaded(object sender, RoutedEventArgs e) private void ConfigProxyDialog_OnClosed(object sender, EventArgs e) { string pwd = this.PasswordBox.Password; - Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(pwd)); + Security.SaveProxyPassword(Encoding.UTF8.GetBytes(pwd)); App.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; if (App.ProxyConfig.IsValid()) diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 68d3cb5c..9b65681e 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -1,5 +1,4 @@ using System; -using System.Net; using System.Security; using System.Text; using System.Windows.Forms; @@ -8,7 +7,6 @@ using Toastify.Events; using Toastify.Helpers; using Toastify.Model; -using Xceed.Wpf.Toolkit; namespace Toastify.ViewModel { @@ -225,14 +223,14 @@ private void Save() if (string.IsNullOrEmpty(this.Settings.ProxyConfig.Username)) { // If no username has been entered, remove the saved password - Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(string.Empty)); + Security.SaveProxyPassword(Encoding.UTF8.GetBytes(string.Empty)); this.Settings.ProxyConfig.Password = null; } else if (!string.IsNullOrEmpty(this.ProxyPassword.ToPlainString())) { // Otherwise, if the password box is not empty, save the new password string pwd = this.ProxyPassword.ToPlainString(); - Security.SaveProtectedProxyPassword(Encoding.UTF8.GetBytes(pwd)); + Security.SaveProxyPassword(Encoding.UTF8.GetBytes(pwd)); this.Settings.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; } } From aca9dc4eb188d1cd0ce2c13425b6bf510d9515ee Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sun, 25 Mar 2018 21:45:42 +0200 Subject: [PATCH 249/452] Update to latest official version of SpotifyAPI-NET --- Toastify/Toastify.csproj | 2 +- Toastify/packages.config | 2 +- Toastify/src/Core/Spotify.cs | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 9aa3de75..5dc08415 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -111,7 +111,7 @@ ..\packages\PowerArgs.2.8.1.0\lib\net45\PowerArgs.dll - ..\packages\SpotifyAPI-NET.2.17.1\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.18.0\lib\SpotifyAPI.dll diff --git a/Toastify/packages.config b/Toastify/packages.config index b3a4ec6c..7be5c905 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -5,5 +5,5 @@ - + \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 86dfcbad..46aed3e5 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -143,8 +143,12 @@ public void InitLocalAPI() { this.DisposeLocalAPI(); - this.localAPIConfig = new SpotifyLocalAPIConfig { TimerInterval = 500 }; - this.localAPI = new SpotifyLocalAPI(this.localAPIConfig, App.ProxyConfig); + this.localAPIConfig = new SpotifyLocalAPIConfig + { + TimerInterval = 500, + ProxyConfig = App.ProxyConfig + }; + this.localAPI = new SpotifyLocalAPI(this.localAPIConfig); this.localAPI.OnTrackChange += this.SpotifyLocalAPI_OnTrackChange; this.localAPI.OnPlayStateChange += this.SpotifyLocalAPI_OnPlayStateChange; From c4bf889f4df1f6569375385edbdf76cf8540fc80 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Mon, 26 Mar 2018 01:11:32 +0200 Subject: [PATCH 250/452] Fix UpdateAlbumArt in case of internal resource --- Toastify/src/View/ToastView.xaml.cs | 100 ++++++++++++++++++---------- 1 file changed, 64 insertions(+), 36 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 16cfc7f3..43801d8f 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -4,8 +4,10 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; +using System.Net.Cache; using System.Net.Http; using System.Reflection; +using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows; @@ -400,50 +402,76 @@ private void UpdateCoverArt(string coverArtUri) this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(async () => { - Stream stream; + Uri uri = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); - HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); - using (HttpClient http = new HttpClient(handler)) + // If it's HTTP(S), download the album art using an HttpClient + if (Regex.IsMatch(uri.Scheme, @"https?", RegexOptions.IgnoreCase)) { - Uri uri = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); - stream = await http.GetStreamAsync(uri); - } - - using (BinaryReader reader = new BinaryReader(stream)) - { - using (MemoryStream memoryStream = new MemoryStream()) + Stream stream; + HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); + using (HttpClient http = new HttpClient(handler)) { - byte[] bytebuffer = new byte[512]; - int bytesRead = reader.Read(bytebuffer, 0, 512); - - while (bytesRead > 0) - { - memoryStream.Write(bytebuffer, 0, bytesRead); - bytesRead = reader.Read(bytebuffer, 0, 512); - } + stream = await http.GetStreamAsync(uri); + } - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - try - { - memoryStream.Seek(0, SeekOrigin.Begin); - this.cover.StreamSource = memoryStream; - } - catch (UriFormatException e) - { - logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); - this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); - } - finally + using (BinaryReader reader = new BinaryReader(stream)) + { + using (MemoryStream memoryStream = new MemoryStream()) { - this.cover.EndInit(); - this.AlbumArt.Source = this.cover; - - stream.Close(); + byte[] bytebuffer = new byte[512]; + int bytesRead = reader.Read(bytebuffer, 0, 512); + + while (bytesRead > 0) + { + memoryStream.Write(bytebuffer, 0, bytesRead); + bytesRead = reader.Read(bytebuffer, 0, 512); + } + + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + try + { + memoryStream.Seek(0, SeekOrigin.Begin); + this.cover.StreamSource = memoryStream; + } + catch (UriFormatException e) + { + logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + } + finally + { + this.cover.EndInit(); + this.AlbumArt.Source = this.cover; + + stream.Close(); + } } } } + else + { + // No need to download anything, this is most probably an internal resource + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); + try + { + this.cover.UriSource = uri; + } + catch (UriFormatException e) + { + logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + } + finally + { + this.cover.EndInit(); + this.AlbumArt.Source = this.cover; + } + } })); } From bbfa677bda4fc1a2c54d8b88ff97a750ebdf862f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Mon, 26 Mar 2018 01:12:42 +0200 Subject: [PATCH 251/452] Fix Security.GetProtectedSecureString returning wrong results --- Toastify/src/Crypt32.cs | 2 -- Toastify/src/Security.cs | 52 ++++++++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/Toastify/src/Crypt32.cs b/Toastify/src/Crypt32.cs index 024b79af..608a9748 100644 --- a/Toastify/src/Crypt32.cs +++ b/Toastify/src/Crypt32.cs @@ -1,6 +1,5 @@ using System; using System.Runtime.InteropServices; -using System.Security; using System.Text; // ReSharper disable InconsistentNaming @@ -80,7 +79,6 @@ internal enum CryptProtectFlags /// CRYPTPROTECT_NO_RECOVERY = 0x20, - /// /// Verify the protection of a protected blob /// diff --git a/Toastify/src/Security.cs b/Toastify/src/Security.cs index 2dd4f4ba..3657c467 100644 --- a/Toastify/src/Security.cs +++ b/Toastify/src/Security.cs @@ -56,13 +56,15 @@ internal static byte[] GetProtectedData(string fileName) internal static SecureString GetProtectedSecureString(string fileName) { byte[] encryptedData = GetProtectedDataInternal(fileName, out byte[] entropy); - - IntPtr entropyPtr = Marshal.AllocHGlobal(entropy.Length); - Marshal.Copy(entropy, 0, entropyPtr, entropy.Length); + if (encryptedData == null || encryptedData.Length == 0) + return null; IntPtr dataPtr = Marshal.AllocHGlobal(encryptedData.Length); Marshal.Copy(encryptedData, 0, dataPtr, encryptedData.Length); + IntPtr entropyPtr = Marshal.AllocHGlobal(entropy.Length); + Marshal.Copy(entropy, 0, entropyPtr, entropy.Length); + try { Crypt32.DataBlob dataBlob = new Crypt32.DataBlob @@ -90,12 +92,15 @@ internal static SecureString GetProtectedSecureString(string fileName) char[] chars = null; try { + if (outBlob.cbData <= 0) + return null; + SecureString secureString = new SecureString(); bytes = new byte[outBlob.cbData]; Marshal.Copy(outBlob.pbData, bytes, 0, bytes.Length); - chars = Encoding.UTF8.GetChars(bytes, 0, bytes.Length); + chars = Encoding.Unicode.GetChars(bytes); foreach (char c in chars) secureString.AppendChar(c); @@ -105,28 +110,38 @@ internal static SecureString GetProtectedSecureString(string fileName) { Marshal.FreeHGlobal(outBlob.pbData); - unsafe + try { - // Zero out the byte array - if (bytes != null) + unsafe { - byte[] zeroB = new byte[bytes.Length]; - fixed (byte* pb = &bytes[0]) + // Zero out the byte array + if (bytes != null) { - Marshal.Copy(zeroB, 0, new IntPtr(pb), zeroB.Length); + byte[] zeroB = new byte[bytes.Length]; + fixed (byte* pb = &bytes[0]) + { + Marshal.Copy(zeroB, 0, new IntPtr(pb), zeroB.Length); + } } - } - // Zero out the char array - if (chars != null) - { - char[] zeroC = new char[chars.Length]; - fixed (char* pc = &chars[0]) + // Zero out the char array + if (chars != null) { - Marshal.Copy(zeroC, 0, new IntPtr(pc), zeroC.Length); + char[] zeroC = new char[chars.Length]; + fixed (char* pc = &chars[0]) + { + Marshal.Copy(zeroC, 0, new IntPtr(pc), zeroC.Length); + } } } } + catch + { + if (bytes != null) + Array.Clear(bytes, 0, bytes.Length); + if (chars != null) + Array.Clear(chars, 0, bytes.Length); + } } } finally @@ -162,13 +177,14 @@ internal static void SaveProtectedData(SecureString secureString, string fileNam Marshal.Copy(entropy, 0, entropyPtr, entropy.Length); // Get a BSTR from the SecureString + // NOTE: A BSTR is a Unicode (UTF-16) string, which could contain multiple NULL characters IntPtr unmanagedString = Marshal.SecureStringToBSTR(secureString); try { Crypt32.DataBlob dataBlob = new Crypt32.DataBlob { - cbData = secureString.Length, + cbData = secureString.Length * 2, pbData = unmanagedString }; Crypt32.DataBlob entropyBlob = new Crypt32.DataBlob From c9733b577dca0aca19cc4bbdafdfa7ccff9055f3 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Mon, 26 Mar 2018 02:10:47 +0200 Subject: [PATCH 252/452] Clone ProxyConfig when cloning Settings --- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 20 +++++++++- Toastify/src/Model/Settings.cs | 38 ++++++++++++++++--- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs index 427a2dd4..09a39d04 100644 --- a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -1,4 +1,6 @@ -using SpotifyAPI.Local; +using SpotifyAPI; +using SpotifyAPI.Local; +using System.Runtime.CompilerServices; using Toastify.Core; using Toastify.Model; @@ -48,5 +50,21 @@ public static void ToggleMute(this SpotifyLocalAPI api) Win32API.SendMediaKey(ToastifyAction.Mute); } } + + public static string ToString(this ProxyConfig proxyConfig, bool objectHash) + { + string @string = proxyConfig?.IsValid() == true + ? $"{(!string.IsNullOrEmpty(proxyConfig.Username) ? $"{proxyConfig.Username}@" : "")}{proxyConfig.Host}:{proxyConfig.Port}" + : proxyConfig == null ? "null" : ""; + + if (objectHash) + { + if (proxyConfig != null) + @string += $" @ {RuntimeHelpers.GetHashCode(proxyConfig)}"; + @string = @string.Trim(); + } + + return @string; + } } } \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index ea79105c..45a418a4 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using SpotifyAPI; using System; +using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; @@ -192,7 +193,7 @@ public static string SettingsFilePath private SettingValue _songProgressBarForegroundColor; private SettingValue _useProxy; - private ProxyConfig _proxyConfig = new ProxyConfig(); + private ProxyConfig _proxyConfig; #endregion Private fields @@ -552,8 +553,11 @@ public ProxyConfig ProxyConfig { get { + if (this._proxyConfig == null) + this._proxyConfig = new ProxyConfig(); + // Retrieve the encrypted password - string plaintext = Security.GetProxyPassword(); + string plaintext = Security.GetSecureProxyPassword()?.ToPlainString(); this._proxyConfig.Password = plaintext; return this._proxyConfig; } @@ -905,6 +909,19 @@ public Settings Clone() var value = (ISettingValue)property.GetValue(this); property.SetValue(clone, value?.Clone()); } + + // ProxyConfig + if (this._proxyConfig != null) + { + clone._proxyConfig = new ProxyConfig + { + Host = this._proxyConfig.Host, + Port = this._proxyConfig.Port, + Username = this._proxyConfig.Username, + Password = null, + BypassProxyOnLocal = this._proxyConfig.BypassProxyOnLocal + }; + } } return clone; @@ -981,13 +998,24 @@ internal static string PrintSettings(int indentLevel = 0) StringBuilder sb = new StringBuilder(); - var properties = typeof(Settings).GetProperties(BindingFlags.Public | BindingFlags.Instance) - .Where(p => p.PropertyType.GetInterfaces().Contains(typeof(ISettingValue))); + var properties = typeof(Settings).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var property in properties) { object current = property.GetValue(Current); - sb.Append($"{indent}{property.Name}: {current}\n"); + if (property.PropertyType.GetInterfaces().Contains(typeof(ISettingValue))) + sb.Append($"{indent}{property.Name}: {current}\n"); + else + { + if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) + continue; + + if (property.PropertyType == typeof(ProxyConfig)) + { + ProxyConfig proxy = (ProxyConfig)current; + sb.Append($"{indent}{property.Name}: {proxy.ToString(true)}\n"); + } + } } return sb.ToString(); From b318cb988bb2be9e0e87de640d48a9941266201f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Mon, 26 Mar 2018 03:29:08 +0200 Subject: [PATCH 253/452] Various changes to UI and other little things --- .../Core/SecureProxyConfigJsonConverter.cs | 6 +++ Toastify/src/Core/Spotify.cs | 3 +- Toastify/src/View/DebugView.xaml.cs | 42 ++++++++++++++++--- Toastify/src/View/SettingsView.xaml | 19 ++++++--- Toastify/src/ViewModel/SettingsViewModel.cs | 28 +++++++++---- Toastify/src/Win32API.cs | 9 +++- 6 files changed, 84 insertions(+), 23 deletions(-) diff --git a/Toastify/src/Core/SecureProxyConfigJsonConverter.cs b/Toastify/src/Core/SecureProxyConfigJsonConverter.cs index 63728995..d79a30c4 100644 --- a/Toastify/src/Core/SecureProxyConfigJsonConverter.cs +++ b/Toastify/src/Core/SecureProxyConfigJsonConverter.cs @@ -21,6 +21,12 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s /// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { + ProxyConfig existing = (ProxyConfig)existingValue; + if (existing != null) + { + serializer.Populate(reader, existing); + return existing; + } return (ProxyConfig)serializer.Deserialize(reader, typeof(ProxyConfig)); } diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 46aed3e5..edded6eb 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -317,6 +317,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) try { + var proxy = App.ProxyConfig; connected = this.localAPI.Connect(); } catch (WebException ex) @@ -483,7 +484,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) App.CallInSTAThread(() => { choice = CustomMessageBox.ShowYesNoCancel( - $"Invalid proxy settings. ${(errorCode != null ? $"Returned error code: {errorCode}" : "")}\nDo you want to retry?", + $"Invalid proxy settings. {(errorCode != null ? $"Returned error code: {errorCode}" : "")}\nDo you want to retry?", "Toastify", "Retry", // Yes "Change settings", // No diff --git a/Toastify/src/View/DebugView.xaml.cs b/Toastify/src/View/DebugView.xaml.cs index 5ea2498f..fa0cd934 100644 --- a/Toastify/src/View/DebugView.xaml.cs +++ b/Toastify/src/View/DebugView.xaml.cs @@ -1,10 +1,13 @@ -using System.ComponentModel; +using SpotifyAPI; +using System.Collections; +using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Threading; using System.Windows; using Toastify.Core; +using Toastify.Helpers; using Toastify.Model; namespace Toastify.View @@ -16,7 +19,6 @@ public partial class DebugView : Window internal static DebugView Current { get; private set; } - private Settings CurrentSettings { get { return Settings.Current; } } private Settings PreviewSettings { get; set; } public DebugView() @@ -52,8 +54,7 @@ private void ButtonPrintSettings_OnClick(object sender, RoutedEventArgs e) Debug.WriteLine("SETTINGS [Current | (Preview) | Default]"); Debug.WriteLine(""); - var properties = typeof(Settings).GetProperties(BindingFlags.Public | BindingFlags.Instance) - .Where(p => p.PropertyType.GetInterfaces().Contains(typeof(ISettingValue))); + var properties = typeof(Settings).GetProperties(BindingFlags.Public | BindingFlags.Instance); if (this.PreviewSettings != null) { @@ -63,7 +64,22 @@ private void ButtonPrintSettings_OnClick(object sender, RoutedEventArgs e) dynamic preview = property.GetValue(this.PreviewSettings); dynamic @default = property.GetValue(Settings.Default); - Debug.WriteLine($"{property.Name,-36}: {current?.ToString(),-25} | {preview?.ToString(),-25} | {@default?.ToString(),-25}"); + if (property.PropertyType.GetInterfaces().Contains(typeof(ISettingValue))) + Debug.WriteLine($"{property.Name,-36}: {current?.ToString(),-25} | {preview?.ToString(),-25} | {@default?.ToString(),-25}"); + else + { + if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) + continue; + + if (property.PropertyType == typeof(ProxyConfig)) + { + ProxyConfig cp = (ProxyConfig)current; + ProxyConfig pp = (ProxyConfig)preview; + ProxyConfig dp = (ProxyConfig)@default; + + Debug.WriteLine($"{property.Name,-36}: {cp?.ToString(true),-30} | {pp?.ToString(true),-30} | {dp?.ToString(true),-30}"); + } + } } } else @@ -73,7 +89,21 @@ private void ButtonPrintSettings_OnClick(object sender, RoutedEventArgs e) dynamic current = property.GetValue(Settings.Current); dynamic @default = property.GetValue(Settings.Default); - Debug.WriteLine($"{property.Name,-36}: {current?.ToString(),-25} | {@default?.ToString(),-25}"); + if (property.PropertyType.GetInterfaces().Contains(typeof(ISettingValue))) + Debug.WriteLine($"{property.Name,-36}: {current?.ToString(),-25} | {@default?.ToString(),-25}"); + else + { + if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) + continue; + + if (property.PropertyType == typeof(ProxyConfig)) + { + ProxyConfig cp = (ProxyConfig)current; + ProxyConfig dp = (ProxyConfig)@default; + + Debug.WriteLine($"{property.Name,-36}: {cp?.ToString(true),-30} | {dp?.ToString(true),-30}"); + } + } } } diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 60261293..9c5f5e9a 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -28,6 +28,7 @@ + @@ -101,7 +102,8 @@ - + @@ -117,12 +119,12 @@ - + - - + + @@ -209,7 +211,7 @@ - + The best way to tweak the position of the toast is to hold down Ctrl and then drag the toast around. The raw numbers are still accessible above. Note that the Toast will display at the default position (lower corner above the system time) if you position the toast off-screen. @@ -379,7 +381,7 @@ Use Proxy - + @@ -408,6 +410,11 @@ Bypass proxy for local addresses + + + + To correctly apply changes to the proxy settings, it's required to restart Toastify. + diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 9b65681e..6e796b49 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -24,6 +24,16 @@ public class SettingsViewModel : ObservableObject public string DoubleUpDownAltIncrement1000Tooltip { get; } = string.Format(templateDoubleUpDownAltIncrement, 1000); + public ImageSource InfoIcon + { + get { return Win32API.GetStockIconImage(Win32API.ShStockIconId.SIID_INFO, true); } + } + + public ImageSource WarningIcon + { + get { return Win32API.GetStockIconImage(Win32API.ShStockIconId.SIID_WARNING, true); } + } + #region Toast public int DisplayTimeDefault { get { return Settings.Default.DisplayTime; } } @@ -215,23 +225,21 @@ private void Save() { if (this.Settings.UseProxy) { - // TODO: Use only SecureString - // Converting a SecureString to a managed String defeats the purpose of using a SecureString in the first place! - // Revise https://github.com/JohnnyCrazy/SpotifyAPI-NET/pull/224 and use SecureString instead - // Proxy Password if (string.IsNullOrEmpty(this.Settings.ProxyConfig.Username)) { // If no username has been entered, remove the saved password Security.SaveProxyPassword(Encoding.UTF8.GetBytes(string.Empty)); - this.Settings.ProxyConfig.Password = null; } else if (!string.IsNullOrEmpty(this.ProxyPassword.ToPlainString())) { // Otherwise, if the password box is not empty, save the new password - string pwd = this.ProxyPassword.ToPlainString(); - Security.SaveProxyPassword(Encoding.UTF8.GetBytes(pwd)); - this.Settings.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; + Security.SaveProxyPassword(this.ProxyPassword); + } + else + { + // If the username field is not empty and the password's is, + // then keep the previous password. } } @@ -272,6 +280,10 @@ private void Default() } break; + case 3: + this.Settings.SetDefaultAdvanced(); + break; + default: throw new InvalidOperationException($"Unexpected value for CurrentTabIndex = {this.CurrentTabIndex}"); } diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 4155a698..13a55d53 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -646,14 +646,19 @@ public static IntPtr SetLowLevelMouseHook(ref LowLevelMouseHookProc mouseHookPro } public static ImageSource GetStockIconImage(ShStockIconId iconId, bool large) + { + return GetStockIconImage(iconId, large, false); + } + + public static ImageSource GetStockIconImage(ShStockIconId iconId, bool large, bool getSystemIcon) { BitmapSource imageSource; - if (Environment.OSVersion.Version.Major >= 6) + if (Environment.OSVersion.Version.Major >= 6 && !getSystemIcon) { ShStockIconInfo sii = new ShStockIconInfo { cbSize = (UInt32)Marshal.SizeOf(typeof(ShStockIconInfo)) }; - int errCode = SHGetStockIconInfo(iconId, ShGSI.SHGSI_ICON | (large ? ShGSI.SHGSI_LARGEICON : ShGSI.SHGSI_SMALLICON), ref sii); + int errCode = SHGetStockIconInfo(iconId, ShGSI.SHGSI_ICON | (large ? ShGSI.SHGSI_LARGEICON : ShGSI.SHGSI_SMALLICON) | ShGSI.SHGSI_SHELLICONSIZE, ref sii); Marshal.ThrowExceptionForHR(errCode); imageSource = Imaging.CreateBitmapSourceFromHIcon(sii.hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); From d89812d666de6da2fe403b9c27fe1dbc5df4dd3b Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Mon, 26 Mar 2018 21:33:22 +0200 Subject: [PATCH 254/452] Fix Toast not showing "Settings Saved" when saving sattings --- Toastify/src/View/ToastView.xaml.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 54ac29f8..2d9f404b 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -454,10 +454,13 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t /// Whether or no0t to force the toast to show up. private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false) { - this.toastViewModel.Title1 = title1; - this.toastViewModel.Title2 = title2; - if (fadeIn) - this.ShowOrHideToast(force, keepUp: true); + this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => + { + this.toastViewModel.Title1 = title1; + this.toastViewModel.Title2 = title2; + if (fadeIn) + this.ShowOrHideToast(force, keepUp: true); + })); } private void FetchOtherTrackInfo() From 9ec227fbaf5cd1fad9a78cc1bbf0c3acca5fe346 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 00:47:18 +0200 Subject: [PATCH 255/452] Security: remove plaintext SaveProxyPassword method --- Toastify/src/Security.cs | 11 ----------- Toastify/src/View/ConfigProxyDialog.xaml.cs | 22 ++++++++++++++++++--- Toastify/src/ViewModel/SettingsViewModel.cs | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/Toastify/src/Security.cs b/Toastify/src/Security.cs index 3657c467..1857755a 100644 --- a/Toastify/src/Security.cs +++ b/Toastify/src/Security.cs @@ -23,23 +23,12 @@ public static bool ProtectedDataExists(string fileName) #region Proxy Password - internal static string GetProxyPassword() - { - byte[] data = GetProtectedData("proxy.sec"); - return data != null ? Encoding.UTF8.GetString(data) : null; - } - internal static SecureString GetSecureProxyPassword() { SecureString secureString = GetProtectedSecureString("proxy.sec"); return secureString != null && secureString.Length > 0 ? secureString : null; } - internal static void SaveProxyPassword(byte[] plaintext) - { - SaveProtectedData(plaintext, "proxy.sec"); - } - internal static void SaveProxyPassword(SecureString secureString) { SaveProtectedData(secureString, "proxy.sec"); diff --git a/Toastify/src/View/ConfigProxyDialog.xaml.cs b/Toastify/src/View/ConfigProxyDialog.xaml.cs index f2bcecfd..07639ddf 100644 --- a/Toastify/src/View/ConfigProxyDialog.xaml.cs +++ b/Toastify/src/View/ConfigProxyDialog.xaml.cs @@ -1,4 +1,5 @@ using System; +using System.Security; using System.Text; using System.Windows; using System.Windows.Controls; @@ -79,12 +80,27 @@ private void ConfigProxyDialog_OnLoaded(object sender, RoutedEventArgs e) private void ConfigProxyDialog_OnClosed(object sender, EventArgs e) { - string pwd = this.PasswordBox.Password; - Security.SaveProxyPassword(Encoding.UTF8.GetBytes(pwd)); - App.ProxyConfig.Password = string.IsNullOrWhiteSpace(pwd) ? null : pwd; + if (string.IsNullOrEmpty(App.ProxyConfig.Username)) + { + // If no username has been entered, remove the saved password + Security.SaveProxyPassword(new SecureString()); + } + else if (this.PasswordBox.SecurePassword.Length > 0) + { + // Otherwise, if the password box is not empty, save the new password + Security.SaveProxyPassword(this.PasswordBox.SecurePassword); + } + else + { + // If the username field is not empty and the password's is, + // then keep the previous password. + } if (App.ProxyConfig.IsValid()) + { Settings.Current.UseProxy = true; + App.ProxyConfig.Password = Security.GetSecureProxyPassword()?.ToPlainString(); + } else { Settings.Current.UseProxy = false; diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 6e796b49..747ef562 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -229,7 +229,7 @@ private void Save() if (string.IsNullOrEmpty(this.Settings.ProxyConfig.Username)) { // If no username has been entered, remove the saved password - Security.SaveProxyPassword(Encoding.UTF8.GetBytes(string.Empty)); + Security.SaveProxyPassword(new SecureString()); } else if (!string.IsNullOrEmpty(this.ProxyPassword.ToPlainString())) { From 99493d81f81ee32f40901b55b6505e3431e75f2a Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 00:47:40 +0200 Subject: [PATCH 256/452] Minor changes --- Toastify/src/Core/Spotify.cs | 1 - Toastify/src/Model/HotKey.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index edded6eb..b1595e66 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -317,7 +317,6 @@ private void ConnectWithSpotify(DoWorkEventArgs e) try { - var proxy = App.ProxyConfig; connected = this.localAPI.Connect(); } catch (WebException ex) diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index b38584be..b223bcfa 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -479,7 +479,7 @@ public override string ToString() private static void HotkeyActionCallback(Hotkey hotkey) { - if (!ToastView.Current.IsInitComplete) + if (ToastView.Current?.IsInitComplete != true) return; // Ignore this keypress if it's been less than WAIT_BETWEEN_HOTKEY_PRESS since the last press From 16ed872aa74a996f81210f06d797d4d1bc14addf Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 01:57:52 +0200 Subject: [PATCH 257/452] Add another entry point to the startup proxy config window --- Toastify/Properties/Resources.Designer.cs | 9 ++++++++ Toastify/Properties/Resources.resx | 3 +++ Toastify/src/Core/Spotify.cs | 25 +++++++++++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/Toastify/Properties/Resources.Designer.cs b/Toastify/Properties/Resources.Designer.cs index 60cb0e33..99e752be 100644 --- a/Toastify/Properties/Resources.Designer.cs +++ b/Toastify/Properties/Resources.Designer.cs @@ -138,6 +138,15 @@ internal static string ERROR_STARTUP_SPOTIFY_API_STATUS_NULL { } } + /// + /// Looks up a localized string similar to Toastify timed out while trying to start, find or connect to Spotify.. + /// + internal static string ERROR_STARTUP_SPOTIFY_TIMEOUT { + get { + return ResourceManager.GetString("ERROR_STARTUP_SPOTIFY_TIMEOUT", resourceCulture); + } + } + /// /// Looks up a localized string similar to An unknown error occurred when trying to start Spotify.. /// diff --git a/Toastify/Properties/Resources.resx b/Toastify/Properties/Resources.resx index ea948eac..2b5cd782 100644 --- a/Toastify/Properties/Resources.resx +++ b/Toastify/Properties/Resources.resx @@ -230,4 +230,7 @@ The firewall might have blocked the connection to "open.spotify.com". An error occurred when trying to connect with Spotify. The host address "open.spotify.com" might have been redirected by the client. Check your "hosts" file (%WinDir%\System32\drivers\etc\hosts) and delete any entry containing "open.spotify.com". + + Toastify timed out while trying to start, find or connect to Spotify. + \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index b1595e66..15f65d9a 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -234,11 +234,22 @@ private void StartSpotify_WorkerTaskCompleted(object sender, RunWorkerCompletedE } else // e.Cancelled { - logger.Error("Toastify was not able to find Spotify within the timeout interval."); + logger.Error($"Toastify was not able to find or connect to Spotify within the timeout interval ({Settings.Current.StartupWaitTimeout / 1000} seconds)."); - string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY; - const string techDetails = "Technical Details: timeout"; - MessageBox.Show($"{errorMsg}\n{techDetails}", "Toastify", MessageBoxButton.OK, MessageBoxImage.Error); + string errorMsg = Properties.Resources.ERROR_STARTUP_SPOTIFY_TIMEOUT; + MessageBoxResult choice = MessageBoxResult.No; + App.CallInSTAThread(() => + { + choice = CustomMessageBox.ShowYesNo( + $"{errorMsg}\nDo you need to set up or change your proxy details?\n\nToastify will terminate regardless of your choice.", + "Toastify", + "Yes", // Yes + "No", // No + MessageBoxImage.Error); + }); + + if (choice == MessageBoxResult.Yes) + this.ChangeProxySettings(); } // Terminate Toastify @@ -521,9 +532,11 @@ private void ConnectWithSpotify(DoWorkEventArgs e) private void ChangeProxySettings() { - this.spotifyLauncherTimeoutTimer.Pause(); + if (this.spotifyLauncherTimeoutTimer?.IntervalRemaining > 0.0d) + this.spotifyLauncherTimeoutTimer.Pause(); App.ShowConfigProxyDialog(); - this.spotifyLauncherTimeoutTimer.Resume(); + if (this.spotifyLauncherTimeoutTimer?.IntervalRemaining > 0.0d) + this.spotifyLauncherTimeoutTimer.Resume(); if (logger.IsDebugEnabled) { From 4726aafe8b8fe97a5e1a0da6ad6c78e069094ac5 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 02:14:49 +0200 Subject: [PATCH 258/452] Make the toast album art update async after the text has changed --- Toastify/src/View/ToastView.xaml.cs | 267 ++++++++++++++++++---------- 1 file changed, 175 insertions(+), 92 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 43801d8f..37c3ccf3 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -11,7 +11,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows; -using System.Windows.Forms; +using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; @@ -28,6 +28,8 @@ using ToastifyAPI.Plugins; using Application = System.Windows.Application; using Color = System.Windows.Media.Color; +using ContextMenu = System.Windows.Forms.ContextMenu; +using MenuItem = System.Windows.Forms.MenuItem; using MouseEventArgs = System.Windows.Input.MouseEventArgs; using Point = System.Windows.Point; using Timer = System.Timers.Timer; @@ -346,14 +348,17 @@ private void InitVersionChecker() /// The song to set as current. private void ChangeCurrentSong(Song song) { + if (logger.IsDebugEnabled) + logger.Debug($"{nameof(this.ChangeCurrentSong)} has been called"); + this.currentSong = song; if (this.currentSong.IsOtherTrackType()) this.FetchOtherTrackInfo(); - this.UpdateCoverArt(); this.UpdateToastText(this.currentSong); this.UpdateSongProgressBar(0.0); + this.UpdateAlbumArt(); // Save track info to file. if (this.Settings.SaveTrackToFile) @@ -373,7 +378,9 @@ private void ChangeCurrentSong(Song song) } } - private void UpdateCoverArt(bool forceUpdate = false) + #region UpdateAlbumArt + + private void UpdateAlbumArt(bool forceUpdate = false) { // TODO: Cache cover arts @@ -393,88 +400,149 @@ private void UpdateCoverArt(bool forceUpdate = false) // Update the cover art only if the url has changed. if (!string.IsNullOrEmpty(this.toastIconURI) && (forceUpdate || this.toastIconURI != previousURI)) - this.UpdateCoverArt(this.toastIconURI); + Task.Factory.StartNew(() => this.UpdateAlbumArt(this.toastIconURI)); } - private void UpdateCoverArt(string coverArtUri) + private async Task UpdateAlbumArt(string albumArtUri) { - this.toastIconURI = coverArtUri; - this.Dispatcher.Invoke(DispatcherPriority.Normal, - new Action(async () => + this.toastIconURI = albumArtUri; + Uri uri = new Uri(albumArtUri, UriKind.RelativeOrAbsolute); + + // If it's HTTP(S), download the album art using an HttpClient + if (Regex.IsMatch(uri.Scheme, @"https?", RegexOptions.IgnoreCase)) + { + HttpClientHandler httpClientHandler = App.CreateHttpClientHandler(App.ProxyConfig); + HttpClient http = new HttpClient(httpClientHandler); + Stream stream = null; + try { - Uri uri = new Uri(coverArtUri, UriKind.RelativeOrAbsolute); + stream = await GetAlbumArtAsStream(http, uri, async () => await this.UpdateAlbumArt(DEFAULT_ICON)); + if (logger.IsDebugEnabled) + logger.Debug($"Album art downloaded: {albumArtUri}"); - // If it's HTTP(S), download the album art using an HttpClient - if (Regex.IsMatch(uri.Scheme, @"https?", RegexOptions.IgnoreCase)) + using (BinaryReader reader = new BinaryReader(stream)) { - Stream stream; - HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); - using (HttpClient http = new HttpClient(handler)) + using (MemoryStream memoryStream = new MemoryStream()) { - stream = await http.GetStreamAsync(uri); - } + byte[] bytebuffer = new byte[512]; + int bytesRead = reader.Read(bytebuffer, 0, 512); - using (BinaryReader reader = new BinaryReader(stream)) - { - using (MemoryStream memoryStream = new MemoryStream()) + while (bytesRead > 0) { - byte[] bytebuffer = new byte[512]; - int bytesRead = reader.Read(bytebuffer, 0, 512); - - while (bytesRead > 0) - { - memoryStream.Write(bytebuffer, 0, bytesRead); - bytesRead = reader.Read(bytebuffer, 0, 512); - } - - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - try - { - memoryStream.Seek(0, SeekOrigin.Begin); - this.cover.StreamSource = memoryStream; - } - catch (UriFormatException e) - { - logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); - this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); - } - finally - { - this.cover.EndInit(); - this.AlbumArt.Source = this.cover; - - stream.Close(); - } + memoryStream.Write(bytebuffer, 0, bytesRead); + bytesRead = reader.Read(bytebuffer, 0, 512); } + + this.Dispatcher.Invoke(DispatcherPriority.Render, (Action)this.UpdateAlbumArtFromMemoryStream, memoryStream); } } - else - { - // No need to download anything, this is most probably an internal resource - this.cover = new BitmapImage(); - this.cover.BeginInit(); - this.cover.CacheOption = BitmapCacheOption.OnLoad; - this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); - try - { - this.cover.UriSource = uri; - } - catch (UriFormatException e) - { - logger.Error($"UriFormatException with URI=[{coverArtUri}]", e); - this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); - } - finally - { - this.cover.EndInit(); - this.AlbumArt.Source = this.cover; - } - } - })); + } + finally + { + stream?.Close(); + http.Dispose(); + httpClientHandler.Dispose(); + } + } + else + { + // No need to download anything, this is most probably an internal resource + await this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)this.UpdateAlbumArtFromUri, uri); + } + } + + private static async Task GetAlbumArtAsStream(HttpClient http, Uri uri, Action ifTooLong = null) + { + Task downloader = http.GetStreamAsync(uri); + + CancellationTokenSource cts = null; + Task awaiter = null; + + if (ifTooLong != null) + { + cts = new CancellationTokenSource(); + awaiter = Task.Factory.StartNew(() => + { + // ReSharper disable AccessToDisposedClosure + return Task.Delay(2000, cts.Token).ContinueWith(t => ifTooLong, cts.Token); + // ReSharper restore AccessToDisposedClosure + }, cts.Token).Unwrap(); + await Task.WhenAny(awaiter, downloader); + } + + if (downloader.IsCompleted) + cts?.Cancel(); + Stream stream = await downloader; + + if (awaiter?.IsCompleted == false) + awaiter.Dispose(); + cts?.Dispose(); + + return stream; } + /// + /// Updates the album art using the specified URI. + /// + /// NOTE: This method needs to be called from the UI thread (see ). + /// + /// + private void UpdateAlbumArtFromUri(Uri uri) + { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + this.cover.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); + try + { + this.cover.UriSource = uri; + } + catch (UriFormatException e) + { + logger.Error($"UriFormatException with URI=[{uri}]", e); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + } + finally + { + this.cover.EndInit(); + this.AlbumArt.Source = this.cover; + } + } + + /// + /// Updates the album art using the specified memory stream. + /// + /// NOTE #1: This method needs to be called from the UI thread (see ). + /// + /// NOTE #2: The specified will be closed. + /// + /// + private void UpdateAlbumArtFromMemoryStream(MemoryStream memoryStream) + { + this.cover = new BitmapImage(); + this.cover.BeginInit(); + this.cover.CacheOption = BitmapCacheOption.OnLoad; + try + { + memoryStream.Seek(0, SeekOrigin.Begin); + this.cover.StreamSource = memoryStream; + } + catch (Exception e) + { + logger.Error("Error while setting the stream source of the album art.", e); + this.cover.UriSource = new Uri(ALBUM_ACCESS_DENIED_ICON, UriKind.RelativeOrAbsolute); + } + finally + { + this.cover.EndInit(); + this.AlbumArt.Source = this.cover; + + memoryStream.Close(); + } + } + + #endregion UpdateAlbumArt + /// /// Update the toast's text using the songs' information. /// @@ -486,17 +554,27 @@ private void UpdateCoverArt(string coverArtUri) /// Whether or not to start the toast fade-in animation. private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = true) { - if (altTitle1 != null) - this.UpdateToastText(altTitle1, song?.ToString() ?? string.Empty, fadeIn); - else if (this.paused) - this.UpdateToastText(STATE_PAUSED, song?.ToString() ?? string.Empty, fadeIn); - else + this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => { - this.toastViewModel.TrackName = song?.Track ?? string.Empty; - this.toastViewModel.ArtistName = song?.Artist ?? string.Empty; - if (fadeIn) - this.ShowOrHideToast(keepUp: true); - } + if (altTitle1 != null) + this.UpdateToastText(altTitle1, song?.ToString() ?? string.Empty, fadeIn); + else if (this.paused) + this.UpdateToastText(STATE_PAUSED, song?.ToString() ?? string.Empty, fadeIn); + else + { + this.toastViewModel.TrackName = song?.Track ?? string.Empty; + this.toastViewModel.ArtistName = song?.Artist ?? string.Empty; + + this.Title1.GetBindingExpression(TextBlock.TextProperty)?.UpdateTarget(); + this.Title2.GetBindingExpression(TextBlock.TextProperty)?.UpdateTarget(); + + if (fadeIn) + this.ShowOrHideToast(keepUp: true); + + if (logger.IsDebugEnabled) + logger.Debug($"Toast text changed. New track: {song}"); + } + })); } /// @@ -508,10 +586,13 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t /// Whether or no0t to force the toast to show up. private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false) { - this.toastViewModel.Title1 = title1; - this.toastViewModel.Title2 = title2; - if (fadeIn) - this.ShowOrHideToast(force, keepUp: true); + this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => + { + this.toastViewModel.Title1 = title1; + this.toastViewModel.Title2 = title2; + if (fadeIn) + this.ShowOrHideToast(force, keepUp: true); + })); } private void FetchOtherTrackInfo() @@ -531,11 +612,13 @@ private void FetchOtherTrackInfo() public void DisplayFlashContent(string title1, string title2, string artUri, double displayTime) { this.UpdateToastText(title1, title2, false); - this.UpdateCoverArt(artUri); - - Timer timer = new Timer(displayTime) { AutoReset = false }; - timer.Elapsed += (sender, args) => this.ChangeCurrentSong(Spotify.Instance.CurrentSong); - timer.Start(); + Task.Factory.StartNew(async () => + { + await this.UpdateAlbumArt(artUri); + Timer timer = new Timer(displayTime) { AutoReset = false }; + timer.Elapsed += (sender, args) => this.ChangeCurrentSong(Spotify.Instance.CurrentSong); + timer.Start(); + }); } private void SetToastVisibility(bool shallBeVisible) @@ -574,7 +657,7 @@ private void ShowToastPreview(bool show) /// private void ShowOrHideToast(bool force = false, bool keepUp = false, bool previewForSettings = false) { - this.Dispatcher.Invoke(() => + this.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => { if (this.ShownOrFading && keepUp && this.minimizeTimer != null && !previewForSettings && !this.isPreviewForSettings) { @@ -588,7 +671,7 @@ private void ShowOrHideToast(bool force = false, bool keepUp = false, bool previ this.FadeOut(force); else this.FadeIn(force, previewForSettings); - }, DispatcherPriority.Render); + })); } private void FadeIn(bool force = false, bool permanent = false) From c85dc526e24405b6a3eace24db8b81908f1646f7 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 13:38:40 +0200 Subject: [PATCH 259/452] Add MWheelUp/MWheelDown to allowed mouse actions for hotkeys (#47) NOTE: At least one modifier key is required --- Toastify/Toastify.csproj | 1 + Toastify/src/Core/MouseAction.cs | 17 +++++++++++++ Toastify/src/Model/HotKey.cs | 25 ++++++++++++++++--- Toastify/src/Model/KeyOrButton.cs | 18 +++++++------- Toastify/src/View/SettingsView.xaml.cs | 34 +++++++++++++++++++------- 5 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 Toastify/src/Core/MouseAction.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 4a8fb600..e9ec879b 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -154,6 +154,7 @@ True Resources.resx + diff --git a/Toastify/src/Core/MouseAction.cs b/Toastify/src/Core/MouseAction.cs new file mode 100644 index 00000000..d3e3e892 --- /dev/null +++ b/Toastify/src/Core/MouseAction.cs @@ -0,0 +1,17 @@ +using System; +using System.Windows.Input; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Toastify.Core +{ + [Serializable] + [JsonConverter(typeof(StringEnumConverter))] + public enum MouseAction + { + MWheelUp = MouseButton.Middle + 120, + MWheelDown = MouseButton.Middle - 120, + XButton1 = MouseButton.XButton1, + XButton2 = MouseButton.XButton2, + } +} \ No newline at end of file diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index b38584be..48a52d64 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -20,6 +20,7 @@ using Toastify.Services; using Toastify.View; using Clipboard = System.Windows.Clipboard; +using MouseAction = Toastify.Core.MouseAction; namespace Toastify.Model { @@ -378,7 +379,16 @@ private void CheckIfValid() this.IsValid = false; this.InvalidReason = "You must select a valid key for your hotkey combination"; } - else if (!this.KeyOrButton.IsKey && this.KeyOrButton.MouseButton != MouseButton.XButton1 && this.KeyOrButton.MouseButton != MouseButton.XButton2) + else if (!this.KeyOrButton.IsKey && + (this.KeyOrButton.MouseButton == MouseAction.MWheelUp || this.KeyOrButton.MouseButton == MouseAction.MWheelDown) && + !this.Shift & !this.Ctrl && !this.Alt) + { + this.IsValid = false; + this.InvalidReason = $"You must use at leat one modifier key with {this.KeyOrButton.MouseButton}"; + } + else if (!this.KeyOrButton.IsKey && + !(this.KeyOrButton.MouseButton == MouseAction.XButton1 || this.KeyOrButton.MouseButton == MouseAction.XButton2 || + this.KeyOrButton.MouseButton == MouseAction.MWheelUp || this.KeyOrButton.MouseButton == MouseAction.MWheelDown)) { this.IsValid = false; this.InvalidReason = $"You can't use the {this.KeyOrButton.MouseButton} mouse button in a hotkey combination"; @@ -439,8 +449,17 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi { Union32 union = new Union32(lParam.mouseData); - if (this.TestModifiers() && (union.High == 0x0001 && this.KeyOrButton.MouseButton == MouseButton.XButton1 || - union.High == 0x0002 && this.KeyOrButton.MouseButton == MouseButton.XButton2)) + if (this.TestModifiers() && (union.High == 0x0001 && this.KeyOrButton.MouseButton == MouseAction.XButton1 || + union.High == 0x0002 && this.KeyOrButton.MouseButton == MouseAction.XButton2)) + HotkeyActionCallback(this); + } + else if (wParam == Win32API.WindowsMessagesFlags.WM_MOUSEWHEEL) + { + Union32 union = new Union32(lParam.mouseData); + + short delta = unchecked((short)union.High); + if (this.TestModifiers() && (delta > 0 && this.KeyOrButton.MouseButton == MouseAction.MWheelUp || + delta < 0 && this.KeyOrButton.MouseButton == MouseAction.MWheelDown)) HotkeyActionCallback(this); } } diff --git a/Toastify/src/Model/KeyOrButton.cs b/Toastify/src/Model/KeyOrButton.cs index f54d3822..5003d813 100644 --- a/Toastify/src/Model/KeyOrButton.cs +++ b/Toastify/src/Model/KeyOrButton.cs @@ -1,13 +1,13 @@ using Newtonsoft.Json; +using Newtonsoft.Json.Converters; using System; using System.Windows.Input; -using Newtonsoft.Json.Converters; +using MouseAction = Toastify.Core.MouseAction; namespace Toastify.Model { - /// /// - /// Represents either a or a . + /// Represents either a or a . /// [Serializable] [JsonObject(MemberSerialization.OptOut)] @@ -22,20 +22,20 @@ public bool IsKey public Key? Key { get; } [JsonConverter(typeof(StringEnumConverter))] - public MouseButton? MouseButton { get; } + public MouseAction? MouseButton { get; } public KeyOrButton(Key key) { this.Key = key; } - public KeyOrButton(MouseButton mouseButton) + public KeyOrButton(MouseAction mouseAction) { - this.MouseButton = mouseButton; + this.MouseButton = mouseAction; } [JsonConstructor] - public KeyOrButton(bool isKey, Key? key, MouseButton? mouseButton) + public KeyOrButton(bool isKey, Key? key, MouseAction? mouseButton) { if (isKey && key.HasValue) this.Key = key; @@ -100,9 +100,9 @@ public static implicit operator KeyOrButton(Key key) return new KeyOrButton(key); } - public static implicit operator KeyOrButton(MouseButton mouseButton) + public static implicit operator KeyOrButton(MouseAction mouseAction) { - return new KeyOrButton(mouseButton); + return new KeyOrButton(mouseAction); } } } \ No newline at end of file diff --git a/Toastify/src/View/SettingsView.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs index 8a1f9537..96d3ba65 100644 --- a/Toastify/src/View/SettingsView.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -5,7 +5,6 @@ using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; -using System.Windows.Forms; using System.Windows.Input; using Toastify.Common; using Toastify.Core; @@ -16,6 +15,7 @@ using Toastify.ViewModel; using Xceed.Wpf.Toolkit; using KeyEventArgs = System.Windows.Input.KeyEventArgs; +using MouseAction = Toastify.Core.MouseAction; using WindowStartupLocation = System.Windows.WindowStartupLocation; // ReSharper disable PrivateFieldCanBeConvertedToLocalVariable @@ -85,10 +85,6 @@ private void SetMouseHook(bool enable) { if (enable && this.hHook == IntPtr.Zero) { - // Ignore if the mouse doesn't have XButton1 and/or XButton2 - if (SystemInformation.MouseButtons <= 3) - return; - this.mouseHookProc = this.MouseHookProc; this.hHook = Win32API.SetLowLevelMouseHook(ref this.mouseHookProc); } @@ -115,15 +111,35 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi if (union.High == 0x0001) { - this.TxtSingleKey.Text = MouseButton.XButton1.ToString(); + this.TxtSingleKey.Text = MouseAction.XButton1.ToString(); if (this.LstHotKeys.SelectedItem is Hotkey hotkey) - hotkey.KeyOrButton = MouseButton.XButton1; + hotkey.KeyOrButton = MouseAction.XButton1; } else if (union.High == 0x0002) { - this.TxtSingleKey.Text = MouseButton.XButton2.ToString(); + this.TxtSingleKey.Text = MouseAction.XButton2.ToString(); + if (this.LstHotKeys.SelectedItem is Hotkey hotkey) + hotkey.KeyOrButton = MouseAction.XButton2; + } + } + else if (wParam == Win32API.WindowsMessagesFlags.WM_MOUSEWHEEL) + { + Union32 union = new Union32(lParam.mouseData); + + short delta = unchecked((short)union.High); + if (delta > 0) + { + // MWheelUp + this.TxtSingleKey.Text = MouseAction.MWheelUp.ToString(); + if (this.LstHotKeys.SelectedItem is Hotkey hotkey) + hotkey.KeyOrButton = MouseAction.MWheelUp; + } + else if (delta < 0) + { + // MWheelDown + this.TxtSingleKey.Text = MouseAction.MWheelDown.ToString(); if (this.LstHotKeys.SelectedItem is Hotkey hotkey) - hotkey.KeyOrButton = MouseButton.XButton2; + hotkey.KeyOrButton = MouseAction.MWheelDown; } } } From c59de6b584074397a24916a2dadd3fc1a8a6bad7 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 13:47:34 +0200 Subject: [PATCH 260/452] Settings: Add text wrap to the "not valid" message of hotkeys --- Toastify/src/View/SettingsView.xaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 59788898..d3762b4f 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -119,10 +119,10 @@ - - - - + + + + From 49a337f1a6e3ddaca123de907a25702b1cd1d49e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 13:59:12 +0200 Subject: [PATCH 261/452] Cherrypick of "Refactor Win32API" from "issue#49_service" --- Toastify/src/Core/Spotify.cs | 98 +- Toastify/src/Helpers/Extensions.cs | 45 +- Toastify/src/Helpers/ScreenHelper.cs | 24 +- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 1 + Toastify/src/Model/HotKey.cs | 22 +- Toastify/src/Model/Settings.cs | 2 +- Toastify/src/View/SettingsView.xaml.cs | 27 +- Toastify/src/View/ToastView.xaml.cs | 15 +- Toastify/src/Win32API.cs | 971 +----------------- ToastifyAPI/Helpers/Extensions.cs | 51 + .../Delegates/EnumResNameProcDelegate.cs | 6 + .../Native/Delegates/EnumThreadDelegate.cs | 6 + .../Native/Delegates/EnumWindowsProc.cs | 6 + ToastifyAPI/Native/Delegates/HookProc.cs | 6 + .../Native/Delegates/LowLevelMouseHookProc.cs | 9 + .../Native/Delegates/SendMessageDelegate.cs | 6 + .../Native/Enums/ExecutionStateFlags.cs | 15 + .../Native/Enums/ExtendedWindowStylesFlags.cs | 40 + ToastifyAPI/Native/Enums/GWL.cs | 14 + ToastifyAPI/Native/Enums/HookType.cs | 22 + ToastifyAPI/Native/Enums/MapVirtualKeyType.cs | 12 + ToastifyAPI/Native/Enums/ResourceType.cs | 28 + ToastifyAPI/Native/Enums/SetWindowPosFlags.cs | 79 ++ ToastifyAPI/Native/Enums/ShowWindowCmd.cs | 79 ++ ToastifyAPI/Native/Enums/VirtualKeyCode.cs | 14 + ToastifyAPI/Native/Enums/WindowStylesFlags.cs | 40 + .../Native/Enums/WindowsMessagesFlags.cs | 54 + ToastifyAPI/Native/Kernel32.cs | 47 + ToastifyAPI/Native/Processes.cs | 52 + .../Native/Structs/LowLevelMouseHookStruct.cs | 63 ++ ToastifyAPI/Native/Structs/Rect.cs | 22 + ToastifyAPI/Native/Structs/WindowPlacement.cs | 20 + ToastifyAPI/Native/User32.cs | 205 ++++ ToastifyAPI/Native/Windows.cs | 200 ++++ ToastifyAPI/Spotify.cs | 72 +- ToastifyAPI/ToastifyAPI.csproj | 45 +- ToastifyAPI/packages.config | 4 + 37 files changed, 1307 insertions(+), 1115 deletions(-) create mode 100644 ToastifyAPI/Helpers/Extensions.cs create mode 100644 ToastifyAPI/Native/Delegates/EnumResNameProcDelegate.cs create mode 100644 ToastifyAPI/Native/Delegates/EnumThreadDelegate.cs create mode 100644 ToastifyAPI/Native/Delegates/EnumWindowsProc.cs create mode 100644 ToastifyAPI/Native/Delegates/HookProc.cs create mode 100644 ToastifyAPI/Native/Delegates/LowLevelMouseHookProc.cs create mode 100644 ToastifyAPI/Native/Delegates/SendMessageDelegate.cs create mode 100644 ToastifyAPI/Native/Enums/ExecutionStateFlags.cs create mode 100644 ToastifyAPI/Native/Enums/ExtendedWindowStylesFlags.cs create mode 100644 ToastifyAPI/Native/Enums/GWL.cs create mode 100644 ToastifyAPI/Native/Enums/HookType.cs create mode 100644 ToastifyAPI/Native/Enums/MapVirtualKeyType.cs create mode 100644 ToastifyAPI/Native/Enums/ResourceType.cs create mode 100644 ToastifyAPI/Native/Enums/SetWindowPosFlags.cs create mode 100644 ToastifyAPI/Native/Enums/ShowWindowCmd.cs create mode 100644 ToastifyAPI/Native/Enums/VirtualKeyCode.cs create mode 100644 ToastifyAPI/Native/Enums/WindowStylesFlags.cs create mode 100644 ToastifyAPI/Native/Enums/WindowsMessagesFlags.cs create mode 100644 ToastifyAPI/Native/Kernel32.cs create mode 100644 ToastifyAPI/Native/Processes.cs create mode 100644 ToastifyAPI/Native/Structs/LowLevelMouseHookStruct.cs create mode 100644 ToastifyAPI/Native/Structs/Rect.cs create mode 100644 ToastifyAPI/Native/Structs/WindowPlacement.cs create mode 100644 ToastifyAPI/Native/User32.cs create mode 100644 ToastifyAPI/Native/Windows.cs create mode 100644 ToastifyAPI/packages.config diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index c2c8f87a..de29febd 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -2,10 +2,8 @@ using SpotifyAPI.Local; using SpotifyAPI.Local.Models; using System; -using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; -using System.Linq; using System.Net; using System.Net.Http; using System.Net.Sockets; @@ -17,6 +15,9 @@ using Toastify.Helpers; using Toastify.Model; using Toastify.Services; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; using Timer = System.Timers.Timer; namespace Toastify.Core @@ -25,15 +26,6 @@ internal class Spotify : IDisposable { private static readonly ILog logger = LogManager.GetLogger(typeof(Spotify)); - /// - /// List of names the Spotify main window had across different versions of the software. - /// - private static readonly List spotifyMainWindowNames = new List - { - "SpotifyMainWindow", - "Chrome_WidgetWin_0" // Since v1.0.75.483.g7ff4a0dc - }; - #region Singleton private static Spotify _instance; @@ -83,8 +75,8 @@ public bool IsMinimized return false; var hWnd = this.GetMainWindowHandle(); - Win32API.WindowStylesFlags windowStyles = (Win32API.WindowStylesFlags)Win32API.GetWindowLongPtr(hWnd, Win32API.GWL.GWL_STYLE); - return (windowStyles & Win32API.WindowStylesFlags.WS_MINIMIZE) != 0L || this.IsMinimizedToTray; + WindowStylesFlags windowStyles = (WindowStylesFlags)Windows.GetWindowLongPtr(hWnd, GWL.GWL_STYLE); + return (windowStyles & WindowStylesFlags.WS_MINIMIZE) != 0L || this.IsMinimizedToTray; } } @@ -96,8 +88,8 @@ public bool IsMinimizedToTray return false; var hWnd = this.GetMainWindowHandle(); - Win32API.WindowStylesFlags windowStyles = (Win32API.WindowStylesFlags)Win32API.GetWindowLongPtr(hWnd, Win32API.GWL.GWL_STYLE); - return (windowStyles & Win32API.WindowStylesFlags.WS_MINIMIZE) == 0L && (windowStyles & Win32API.WindowStylesFlags.WS_VISIBLE) == 0L; + WindowStylesFlags windowStyles = (WindowStylesFlags)Windows.GetWindowLongPtr(hWnd, GWL.GWL_STYLE); + return (windowStyles & WindowStylesFlags.WS_MINIMIZE) == 0L && (windowStyles & WindowStylesFlags.WS_VISIBLE) == 0L; } } @@ -177,7 +169,7 @@ private void SpotifyLauncherTimeoutTimer_Elapsed(object sender, System.Timers.El private void StartSpotify_WorkerTask(object sender, DoWorkEventArgs e) { - this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(e) : FindSpotifyProcess(); + this.spotifyProcess = !this.IsRunning ? this.LaunchSpotifyAndWaitForInputIdle(e) : ToastifyAPI.Spotify.FindSpotifyProcess(); if (e.Cancel) return; if (this.spotifyProcess == null) @@ -266,7 +258,7 @@ private Process LaunchSpotifyAndWaitForInputIdle(DoWorkEventArgs e) bool signaled = false; while (this.spotifyProcess == null && !signaled) { - this.spotifyProcess = FindSpotifyProcess(); + this.spotifyProcess = ToastifyAPI.Spotify.FindSpotifyProcess(); signaled = this.spotifyLauncherWaitHandle.WaitOne(1000); if (this.spotifyLauncher.CheckCancellation(e)) return this.spotifyProcess; @@ -360,38 +352,6 @@ private void ConnectWithSpotify(DoWorkEventArgs e) #endregion Spotify Launcher background worker - private static Process FindSpotifyProcess() - { - if (logger.IsDebugEnabled) - logger.Debug("Looking for Spotify process..."); - - var spotifyProcesses = Process.GetProcessesByName("spotify").ToList(); - var windowedProcesses = spotifyProcesses.Where(p => p.MainWindowHandle != IntPtr.Zero).ToList(); - - if (windowedProcesses.Count > 1) - { - var classNames = windowedProcesses.Select(p => $"\"{Win32API.GetClassName(p.MainWindowHandle)}\""); - logger.Warn($"More than one ({windowedProcesses.Count}) \"spotify\" process has a non-null main window: {string.Join(", ", classNames)}"); - } - - var process = windowedProcesses.FirstOrDefault(); - - // If none of the Spotify processes found has a valid MainWindowHandle, - // then Spotify has probably been minimized to the tray: we need to check every window. - if (process == null) - { - foreach (var p in spotifyProcesses) - { - var processWindows = Win32API.GetProcessWindows((uint)p.Id); - IntPtr hWnd = processWindows.FirstOrDefault(h => spotifyMainWindowNames.Contains(Win32API.GetClassName(h))); - if (hWnd != IntPtr.Zero) - return p; - } - } - - return process; - } - private void Minimize(int delay = 0) { int remainingSleep = 2000; @@ -411,7 +371,7 @@ private void Minimize(int delay = 0) // We also need to wait a little more before minimizing the window; // if we don't, the toast will not show the current track until 'something' happens (track change, play state change...). Thread.Sleep(delay); - Win32API.ShowWindow(hWnd, Win32API.ShowWindowCmd.SW_SHOWMINIMIZED); + User32.ShowWindow(hWnd, ShowWindowCmd.SW_SHOWMINIMIZED); } } @@ -441,12 +401,12 @@ private void ShowSpotify() var hWnd = this.GetMainWindowHandle(); // check Spotify's current window state - var placement = new Win32API.WindowPlacement(); - Win32API.GetWindowPlacement(hWnd, ref placement); + var placement = new WindowPlacement(); + User32.GetWindowPlacement(hWnd, ref placement); - var showCommand = Win32API.ShowWindowCmd.SW_SHOW; - if (placement.showCmd == Win32API.ShowWindowCmd.SW_SHOWMINIMIZED || placement.showCmd == Win32API.ShowWindowCmd.SW_HIDE) - showCommand = Win32API.ShowWindowCmd.SW_RESTORE; + var showCommand = ShowWindowCmd.SW_SHOW; + if (placement.showCmd == ShowWindowCmd.SW_SHOWMINIMIZED || placement.showCmd == ShowWindowCmd.SW_HIDE) + showCommand = ShowWindowCmd.SW_RESTORE; if (this.IsMinimizedToTray) { @@ -481,35 +441,19 @@ private void ShowSpotify() //} } else - Win32API.ShowWindow(hWnd, showCommand); + User32.ShowWindow(hWnd, showCommand); - Win32API.SetForegroundWindow(hWnd); - Win32API.SetFocus(hWnd); + User32.SetForegroundWindow(hWnd); + User32.SetFocus(hWnd); } } private IntPtr GetMainWindowHandle() { if (this.spotifyProcess == null) - this.spotifyProcess = FindSpotifyProcess(); - if (this.spotifyProcess == null) - return IntPtr.Zero; - - var windows = Win32API.GetProcessWindows((uint)this.spotifyProcess.Id); - var possibleMainWindows = windows.Where(h => - { - string className = Win32API.GetClassName(h); - string windowName = Win32API.GetWindowTitle(h); - return !string.IsNullOrWhiteSpace(windowName) && spotifyMainWindowNames.Contains(className); - }).ToList(); - - if (possibleMainWindows.Count > 1) - { - var classNames = possibleMainWindows.Select(h => $"\"{Win32API.GetClassName(h)}\""); - logger.Warn($"More than one ({possibleMainWindows.Count}) possible main windows located for Spotify: {string.Join(", ", classNames)}"); - } + this.spotifyProcess = ToastifyAPI.Spotify.FindSpotifyProcess(); - return possibleMainWindows.FirstOrDefault(); + return this.spotifyProcess == null ? IntPtr.Zero : ToastifyAPI.Spotify.GetMainWindowHandle((uint)this.spotifyProcess.Id); } public void SendAction(ToastifyAction action) @@ -612,7 +556,7 @@ public void SendAction(ToastifyAction action) } if (sendAppCommandMessage) - Win32API.SendAppCommandMessage(this.GetMainWindowHandle(), (IntPtr)action, true); + Windows.SendAppCommandMessage(this.GetMainWindowHandle(), (IntPtr)action, true); if (sendMediaKey) Win32API.SendMediaKey(action); } diff --git a/Toastify/src/Helpers/Extensions.cs b/Toastify/src/Helpers/Extensions.cs index 2685bd8e..aba848c8 100644 --- a/Toastify/src/Helpers/Extensions.cs +++ b/Toastify/src/Helpers/Extensions.cs @@ -7,6 +7,9 @@ using System.Windows.Input; using System.Windows.Interop; using Toastify.Common; +using ToastifyAPI; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Enums; namespace Toastify.Helpers { @@ -41,48 +44,6 @@ public static IntPtr GetHandle(this Window window) return wndHelper.Handle; } - public static uint GetLParam(this Key key, short repeatCount = 1, byte extended = 0, byte contextCode = 0, byte previousState = 0, byte transitionState = 0) - { - uint lParam = (uint)repeatCount; - uint scanCode = key.GetScanCode(); - lParam += scanCode * 0x00010000; - lParam += (uint)(extended * 0x01000000); - lParam += (uint)(contextCode * 2 * 0x10000000); - lParam += (uint)(previousState * 4 * 0x10000000); - lParam += (uint)(transitionState * 8 * 0x10000000); - return lParam; - } - - public static uint GetVirtualKey(this Key key, bool preferLeftOrRight = false) - { - if (!preferLeftOrRight) - { - switch (key) - { - case Key.LeftShift: - case Key.RightShift: - return 0x10; - - case Key.LeftCtrl: - case Key.RightCtrl: - return 0x11; - - case Key.LeftAlt: - case Key.RightAlt: - return 0x12; - - default: - break; - } - } - return (uint)KeyInterop.VirtualKeyFromKey(key); - } - - public static uint GetScanCode(this Key key) - { - return Win32API.MapVirtualKey(key.GetVirtualKey(), Win32API.MapVirtualKeyType.MAPVK_VK_TO_VSC); - } - public static bool IsModifierKey(this Key key) { return key.GetModifierKey() != ModifierKeys.None; diff --git a/Toastify/src/Helpers/ScreenHelper.cs b/Toastify/src/Helpers/ScreenHelper.cs index 0eb41567..9764250e 100644 --- a/Toastify/src/Helpers/ScreenHelper.cs +++ b/Toastify/src/Helpers/ScreenHelper.cs @@ -42,10 +42,10 @@ public static Point GetDefaultToastPosition(double width, double height) /// /// The off-screen rect. /// A 2D translation vector. - public static Vector BringRectInsideWorkingArea(Rect rect) + public static Vector BringRectInsideWorkingArea(System.Windows.Rect rect) { Vector vector = new Vector(); - Rect totalRect = GetTotalWorkingArea(); + System.Windows.Rect totalRect = GetTotalWorkingArea(); if (totalRect.Contains(rect)) return vector; @@ -62,11 +62,11 @@ public static Vector BringRectInsideWorkingArea(Rect rect) #region GetTotalWorkingArea - public static Rect GetTotalWorkingArea() + public static System.Windows.Rect GetTotalWorkingArea() { Screen[] screens = Screen.AllScreens; if (screens.Length == 0) - return new Rect(new Size(-1.0, -1.0)); + return new System.Windows.Rect(new Size(-1.0, -1.0)); Point minLocation = new Point(double.MaxValue, double.MaxValue); Point maxLocation = new Point(double.MinValue, double.MinValue); @@ -82,7 +82,7 @@ public static Rect GetTotalWorkingArea() if (screen.WorkingArea.Y + screen.WorkingArea.Height > maxLocation.Y) maxLocation.Y = screen.WorkingArea.Y + screen.WorkingArea.Height; } - return new Rect(minLocation, maxLocation); + return new System.Windows.Rect(minLocation, maxLocation); } public static double GetTotalWorkingAreaWidth() @@ -111,10 +111,10 @@ private static double GetScaleFactor() /// Get the rectangular area of the primary screen. ///
    /// The rectangular area of the screen that contains the given point. - public static Rect GetScreenRect(Point pointOnScreen) + public static System.Windows.Rect GetScreenRect(Point pointOnScreen) { var point = unchecked(new System.Drawing.Point((int)pointOnScreen.X, (int)pointOnScreen.Y)); Screen screen = Screen.FromPoint(point); - return new Rect( + return new System.Windows.Rect( new Point(screen.WorkingArea.X, screen.WorkingArea.Y), new Size(screen.WorkingArea.Width / GetScaleFactor(), screen.WorkingArea.Height / GetScaleFactor())); } @@ -202,9 +202,9 @@ public static double GetScreenHeight(Point pointOnScreen) /// The maximum size. public static Size CalculateMaxToastSize() { - Rect toastRect = ToastView.Current == null ? new Rect() : ToastView.Current.Rect; - Rect totalRect = GetTotalWorkingArea(); - Rect toastScreenRect = GetScreenRect(toastRect.Location); + System.Windows.Rect toastRect = ToastView.Current == null ? new System.Windows.Rect() : ToastView.Current.Rect; + System.Windows.Rect totalRect = GetTotalWorkingArea(); + System.Windows.Rect toastScreenRect = GetScreenRect(toastRect.Location); double maxPossibleWidth = totalRect.Right - toastRect.Left; double maxPossibleHeight = totalRect.Bottom - toastRect.Top; diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs index 427a2dd4..eeb83858 100644 --- a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -1,6 +1,7 @@ using SpotifyAPI.Local; using Toastify.Core; using Toastify.Model; +using ToastifyAPI.Native; namespace Toastify.Helpers { diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index 48a52d64..aa5466e0 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -19,8 +19,14 @@ using Toastify.Helpers; using Toastify.Services; using Toastify.View; +using ToastifyAPI; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Delegates; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; using Clipboard = System.Windows.Clipboard; using MouseAction = Toastify.Core.MouseAction; +using Spotify = Toastify.Core.Spotify; namespace Toastify.Model { @@ -44,7 +50,7 @@ public class Hotkey : ObservableObject, IXmlSerializable, ICloneable private KeyOrButton _keyOrButton; private IntPtr hMouseHook = IntPtr.Zero; - private Win32API.LowLevelMouseHookProc mouseHookProc; + private LowLevelMouseHookProc mouseHookProc; private bool _isValid; private string _invalidReason; @@ -413,13 +419,13 @@ private void SetMouseHook(bool enable) if (enable && this.hMouseHook == IntPtr.Zero) { this.mouseHookProc = this.MouseHookProc; - this.hMouseHook = Win32API.SetLowLevelMouseHook(ref this.mouseHookProc); + this.hMouseHook = Processes.SetLowLevelMouseHook(ref this.mouseHookProc); registeredMouseHooks.Add(this); } else if (!enable && this.hMouseHook != IntPtr.Zero) { - bool success = Win32API.UnhookWindowsHookEx(this.hMouseHook); + bool success = User32.UnhookWindowsHookEx(this.hMouseHook); if (success == false) logger.Error($"Failed to un-register a low-level mouse hook. Error code: {Marshal.GetLastWin32Error()}"); @@ -441,11 +447,11 @@ private void GlobalKey_HotkeyPressed(object sender, EventArgs e) HotkeyActionCallback(this); } - private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Win32API.LowLevelMouseHookStruct lParam) + private IntPtr MouseHookProc(int nCode, WindowsMessagesFlags wParam, LowLevelMouseHookStruct lParam) { if (nCode >= 0 && this.KeyOrButton.MouseButton.HasValue) { - if (wParam == Win32API.WindowsMessagesFlags.WM_XBUTTONUP) + if (wParam == WindowsMessagesFlags.WM_XBUTTONUP) { Union32 union = new Union32(lParam.mouseData); @@ -453,7 +459,7 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi union.High == 0x0002 && this.KeyOrButton.MouseButton == MouseAction.XButton2)) HotkeyActionCallback(this); } - else if (wParam == Win32API.WindowsMessagesFlags.WM_MOUSEWHEEL) + else if (wParam == WindowsMessagesFlags.WM_MOUSEWHEEL) { Union32 union = new Union32(lParam.mouseData); @@ -466,7 +472,7 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi else if (!this.KeyOrButton.MouseButton.HasValue) this.SetMouseHook(false); - return Win32API.CallNextHookEx(this.hMouseHook, nCode, wParam, lParam); + return User32.CallNextHookEx(this.hMouseHook, nCode, wParam, lParam); } public override string ToString() @@ -527,7 +533,7 @@ private static void HotkeyActionCallback(Hotkey hotkey) { Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.PasteTrackInfo); Clipboard.SetText(Spotify.Instance.CurrentSong.GetClipboardText(Settings.Current.ClipboardTemplate)); - Win32API.SendPasteKey(); + Windows.SendPasteKey(); } else Spotify.Instance.SendAction(hotkey.Action); diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 7333ea5e..a86a0579 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -789,7 +789,7 @@ private void SanitizeSettingsFile() this._hotKeys = this._hotKeys.Distinct(Hotkey.EqualityComparerOnAction).ToList(); // Bring the Toast inside the working area if it is off-screen - Rect toastRect = new Rect(this.PositionLeft, this.PositionTop, this.ToastWidth, this.ToastHeight); + System.Windows.Rect toastRect = new System.Windows.Rect(this.PositionLeft, this.PositionTop, this.ToastWidth, this.ToastHeight); Vector offsetVector = ScreenHelper.BringRectInsideWorkingArea(toastRect); this.PositionLeft += offsetVector.X; this.PositionTop += offsetVector.Y; diff --git a/Toastify/src/View/SettingsView.xaml.cs b/Toastify/src/View/SettingsView.xaml.cs index 96d3ba65..6f3759d2 100644 --- a/Toastify/src/View/SettingsView.xaml.cs +++ b/Toastify/src/View/SettingsView.xaml.cs @@ -13,6 +13,11 @@ using Toastify.Model; using Toastify.Services; using Toastify.ViewModel; +using ToastifyAPI; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Delegates; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; using Xceed.Wpf.Toolkit; using KeyEventArgs = System.Windows.Input.KeyEventArgs; using MouseAction = Toastify.Core.MouseAction; @@ -32,7 +37,7 @@ public partial class SettingsView : Window private readonly SettingsViewModel settingsViewModel; private IntPtr hHook = IntPtr.Zero; - private Win32API.LowLevelMouseHookProc mouseHookProc; + private LowLevelMouseHookProc mouseHookProc; private Settings Settings { @@ -86,11 +91,11 @@ private void SetMouseHook(bool enable) if (enable && this.hHook == IntPtr.Zero) { this.mouseHookProc = this.MouseHookProc; - this.hHook = Win32API.SetLowLevelMouseHook(ref this.mouseHookProc); + this.hHook = Processes.SetLowLevelMouseHook(ref this.mouseHookProc); } else if (!enable && this.hHook != IntPtr.Zero) { - bool success = Win32API.UnhookWindowsHookEx(this.hHook); + bool success = User32.UnhookWindowsHookEx(this.hHook); if (success == false) logger.Error($"Failed to un-register a low-level mouse hook. Error code: {Marshal.GetLastWin32Error()}"); @@ -99,13 +104,13 @@ private void SetMouseHook(bool enable) } } - private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Win32API.LowLevelMouseHookStruct lParam) + private IntPtr MouseHookProc(int nCode, WindowsMessagesFlags wParam, LowLevelMouseHookStruct lParam) { if (nCode >= 0) { if (this.TxtSingleKey.IsFocused) { - if (wParam == Win32API.WindowsMessagesFlags.WM_XBUTTONUP) + if (wParam == WindowsMessagesFlags.WM_XBUTTONUP) { Union32 union = new Union32(lParam.mouseData); @@ -122,7 +127,7 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi hotkey.KeyOrButton = MouseAction.XButton2; } } - else if (wParam == Win32API.WindowsMessagesFlags.WM_MOUSEWHEEL) + else if (wParam == WindowsMessagesFlags.WM_MOUSEWHEEL) { Union32 union = new Union32(lParam.mouseData); @@ -145,7 +150,7 @@ private IntPtr MouseHookProc(int nCode, Win32API.WindowsMessagesFlags wParam, Wi } } - return Win32API.CallNextHookEx(this.hHook, nCode, wParam, lParam); + return User32.CallNextHookEx(this.hHook, nCode, wParam, lParam); } public static void Launch(ToastView toastView) @@ -300,8 +305,8 @@ private void ToastWidthUpDown_MouseWheel(object sender, MouseWheelEventArgs e) double increment = this.ToastWidthUpDown.Increment ?? 0.0; // Move the toast leftwards - Rect toastRect = ToastView.Current == null ? new Rect() : this.toastView.Rect; - Rect totalRect = ScreenHelper.GetTotalWorkingArea(); + System.Windows.Rect toastRect = ToastView.Current == null ? new System.Windows.Rect() : this.toastView.Rect; + System.Windows.Rect totalRect = ScreenHelper.GetTotalWorkingArea(); double availableSpaceToTheLeft = toastRect.Left - totalRect.Left; double deltaX = Math.Min(availableSpaceToTheLeft, increment); @@ -318,8 +323,8 @@ private void ToastHeightUpDown_MouseWheel(object sender, MouseWheelEventArgs e) double increment = this.ToastHeightUpDown.Increment ?? 0.0; // Move the toast upwards - Rect toastRect = ToastView.Current == null ? new Rect() : this.toastView.Rect; - Rect totalRect = ScreenHelper.GetTotalWorkingArea(); + System.Windows.Rect toastRect = ToastView.Current == null ? new System.Windows.Rect() : this.toastView.Rect; + System.Windows.Rect totalRect = ScreenHelper.GetTotalWorkingArea(); double availableSpaceAbove = toastRect.Top - totalRect.Top; double deltaY = Math.Min(availableSpaceAbove, increment); diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 2d9f404b..6e114e17 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -23,11 +23,16 @@ using Toastify.Model; using Toastify.Services; using Toastify.ViewModel; +using ToastifyAPI; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; using ToastifyAPI.Plugins; using Application = System.Windows.Application; using Color = System.Windows.Media.Color; using MouseEventArgs = System.Windows.Input.MouseEventArgs; using Point = System.Windows.Point; +using Spotify = Toastify.Core.Spotify; using Timer = System.Timers.Timer; namespace Toastify.View @@ -81,7 +86,7 @@ private IntPtr WindowHandle public Point Position { get { return this.Rect.Location; } } - public Rect Rect { get { return new Rect(this.Left, this.Top, this.Width, this.Height); } } + public System.Windows.Rect Rect { get { return new System.Windows.Rect(this.Left, this.Top, this.Width, this.Height); } } public bool IsInitComplete { get; private set; } @@ -492,7 +497,7 @@ private void SetToastVisibility(bool shallBeVisible) this.ShownOrFading = shallBeVisible; this.Topmost = shallBeVisible; this.Visibility = shallBeVisible ? Visibility.Visible : Visibility.Collapsed; - Win32API.ShowWindow(this.WindowHandle, shallBeVisible ? Win32API.ShowWindowCmd.SW_RESTORE : Win32API.ShowWindowCmd.SW_SHOWMINNOACTIVE); + User32.ShowWindow(this.WindowHandle, shallBeVisible ? ShowWindowCmd.SW_RESTORE : ShowWindowCmd.SW_SHOWMINNOACTIVE); if (shallBeVisible) { @@ -647,8 +652,8 @@ public void DisplayAction(ToastifyAction action) #if DEBUG if (this.LogShowToastAction) { - Win32API.WindowPlacement wPlacement = new Win32API.WindowPlacement(); - Win32API.GetWindowPlacement(this.WindowHandle, ref wPlacement); + WindowPlacement wPlacement = new WindowPlacement(); + User32.GetWindowPlacement(this.WindowHandle, ref wPlacement); string hWnd = $"hWnd[{this.WindowHandle}]"; string timer = $"timer[{(this.minimizeTimer == null ? "null" : $"{(this.minimizeTimer.Enabled ? '1' : '0')}, {this.minimizeTimer.Interval}")}]"; @@ -718,7 +723,7 @@ private void Window_Loaded(object sender, RoutedEventArgs e) this.Init(); // Remove from ALT+TAB. - Win32API.AddToolWindowStyle(this.WindowHandle); + Windows.AddToolWindowStyle(this.WindowHandle); } /// diff --git a/Toastify/src/Win32API.cs b/Toastify/src/Win32API.cs index 41f45619..e90d666c 100644 --- a/Toastify/src/Win32API.cs +++ b/Toastify/src/Win32API.cs @@ -1,356 +1,34 @@ -using log4net; -using ManagedWinapi; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using System.Drawing; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; using System.Text.RegularExpressions; -using System.Threading; using System.Windows.Forms; -using System.Windows.Input; using Toastify.Core; -using Toastify.Helpers; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; // ReSharper disable InconsistentNaming namespace Toastify { - [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] - [SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")] internal static class Win32API { - private static readonly ILog logger = LogManager.GetLogger(typeof(Win32API)); - - private static readonly IntPtr hDesktop = GetDesktopWindow(); - private static readonly IntPtr hProgman = GetShellWindow(); + private static readonly IntPtr hDesktop = User32.GetDesktopWindow(); + private static readonly IntPtr hProgman = User32.GetShellWindow(); private static readonly IntPtr hShellDll = GetShellDllDefViewWindow(); - internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); - - internal delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); - - internal delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); - - internal delegate IntPtr LowLevelMouseHookProc(int code, WindowsMessagesFlags wParam, [In] LowLevelMouseHookStruct lParam); - - internal delegate void SendMessageDelegate(IntPtr hWnd, uint uMsg, UIntPtr dwData, IntPtr lResult); - - internal delegate bool EnumResNameProcDelegate(IntPtr hModule, IntPtr lpszType, IntPtr lpszName, IntPtr lParam); - - #region DLL imports - - [DllImport("user32.dll")] - internal static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); - - [DllImport("user32.dll")] - internal static extern bool ShowWindow(IntPtr hWnd, ShowWindowCmd nCmdShow); - - [DllImport("user32.dll")] - internal static extern bool UpdateWindow(IntPtr hWnd); - - [DllImport("user32.dll")] - internal static extern IntPtr GetMenu(IntPtr hWnd); - - [DllImport("user32.dll")] - internal static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos); - - [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] - internal static extern IntPtr GetParent(IntPtr hWnd); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); - - [DllImport("user32.dll")] - internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern int GetWindowTextLength(IntPtr hWnd); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); - - [DllImport("user32.dll", EntryPoint = "GetWindowLong")] - private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, GWL nIndex); - - [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] - private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, GWL nIndex); - - [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] - private static extern int SetWindowLongPtr32(IntPtr hWnd, GWL nIndex, int dwNewLong); - - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] - private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, GWL nIndex, IntPtr dwNewLong); - - [DllImport("user32.dll")] - internal static extern IntPtr GetForegroundWindow(); - - [DllImport("user32.dll")] - internal static extern bool SetForegroundWindow(IntPtr hWnd); - - [DllImport("user32.dll")] - private static extern IntPtr GetDesktopWindow(); - - [DllImport("user32.dll")] - private static extern IntPtr GetShellWindow(); - - [DllImport("user32.dll")] - private static extern bool GetClientRect(IntPtr hWnd, out Rect lpRect); - - [DllImport("user32.dll")] - internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); - - /// - /// Installs an application-defined hook procedure into a hook chain. - /// - /// The type of hook procedure to be installed. - /// - /// A pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread - /// created by a different process, the lpfn parameter must point to a hook procedure in a DLL. - /// Otherwise, lpfn can point to a hook procedure in the code associated with the current process. - /// - /// - /// A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be - /// set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure - /// is within the code associated with the current process. - /// - /// - /// The identifier of the thread with which the hook procedure is to be associated. For desktop apps, if this parameter - /// is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread. - /// - /// If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId); - - /// - /// Installs an application-defined hook procedure into a hook chain. - /// - /// The type of hook procedure to be installed. - /// - /// A pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread - /// created by a different process, the lpfn parameter must point to a hook procedure in a DLL. - /// Otherwise, lpfn can point to a hook procedure in the code associated with the current process. - /// - /// - /// A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be - /// set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure - /// is within the code associated with the current process. - /// - /// - /// The identifier of the thread with which the hook procedure is to be associated. For desktop apps, if this parameter - /// is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread. - /// - /// If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. - [DllImport("user32.dll", SetLastError = true)] - internal static extern IntPtr SetWindowsHookEx(HookType hookType, LowLevelMouseHookProc lpfn, IntPtr hMod, uint dwThreadId); - - /// - /// Removes a hook procedure installed in a hook chain by the SetWindowsHookEx function. - /// - /// A handle to the hook to be removed. This parameter is a hook handle obtained by a previous call to . - /// true or nonzero if the function succeeds, false or zero if the function fails. - [DllImport("user32.dll", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool UnhookWindowsHookEx(IntPtr hhk); - - /// - /// Passes the hook information to the next hook procedure in the current hook chain. - /// A hook procedure can call this function either before or after processing the hook information. - /// - /// This parameter is ignored. - /// - /// The hook code passed to the current hook procedure. - /// The next hook procedure uses this code to determine how to process the hook information. - /// - /// The wParam value passed to the current hook procedure. - /// The lParam value passed to the current hook procedure. - /// The meaning of the return value depends on the hook type. - /// - /// - /// Hook procedures are installed in chains for particular hook types. - /// calls the next hook in the chain. - /// - /// - /// Calling CallNextHookEx is optional, but it is highly recommended; otherwise, other applications that have - /// installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call - /// unless you absolutely need to prevent the notification - /// from being seen by other applications. - /// - /// - [DllImport("user32.dll")] - internal static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); - - // overload for use with LowLevelMouseProc - [DllImport("user32.dll")] - internal static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, WindowsMessagesFlags wParam, [In] LowLevelMouseHookStruct lParam); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - internal static extern IntPtr GetModuleHandle(string lpModuleName); - - [DllImport("user32.dll")] - internal static extern IntPtr SetFocus(IntPtr hWnd); - - [return: MarshalAs(UnmanagedType.Bool)] - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); - - [return: MarshalAs(UnmanagedType.Bool)] - [DllImport("user32.dll", CharSet = CharSet.Auto)] - internal static extern bool SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern bool SendMessageCallback(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam, SendMessageDelegate lpCallBack, UIntPtr dwData); - - [DllImport("kernel32.dll")] - public static extern void SetLastError(int dwErrorCode); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern ExecutionStateFlags SetThreadExecutionState(ExecutionStateFlags esFlags); - - [DllImport("user32.dll")] - internal static extern uint MapVirtualKey(uint uCode, MapVirtualKeyType uMapType); - - [DllImport("user32.dll")] - internal static extern uint MapVirtualKeyEx(uint uCode, MapVirtualKeyType uMapType, IntPtr dwhkl); - - [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] - internal static extern void KeyboardEvent(VirtualKeyCode virtualKey, byte scanCode, uint flags, IntPtr extraInfo); - - /// - /// Enumerates resources of a specified type within a binary module. - /// - /// - /// A handle to a module to be searched. - /// If this parameter is NULL, that is equivalent to passing in a handle to the module used to create the current process. - /// - /// The type of the resource for which the name is being enumerated. - /// The callback function to be called for each enumerated resource name. - /// An application-defined value passed to the callback function. This parameter can be used in error checking. - /// The return value is TRUE if the function succeeds or FALSE if the function does not find a resource of the type specified, or if the function fails for another reason. - [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] - internal static extern bool EnumResourceNames(IntPtr hModule, string lpszType, EnumResNameProcDelegate lpEnumFunc, IntPtr lParam); - - /// - /// Enumerates resources of a specified type within a binary module. - /// - /// - /// A handle to a module to be searched. - /// If this parameter is NULL, that is equivalent to passing in a handle to the module used to create the current process. - /// - /// The ID of the resource. - /// The callback function to be called for each enumerated resource ID. - /// An application-defined value passed to the callback function. This parameter can be used in error checking. - /// The return value is TRUE if the function succeeds or FALSE if the function does not find a resource of the type specified, or if the function fails for another reason. - [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] - internal static extern bool EnumResourceNames(IntPtr hModule, ResourceType dwID, EnumResNameProcDelegate lpEnumFunc, IntPtr lParam); - - [DllImport("user32.dll")] - internal static extern IntPtr GetDC(IntPtr hWnd); - - [DllImport("user32.dll")] - internal static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC); - - #endregion DLL imports - - internal static IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex) - { - return IntPtr.Size == 4 ? GetWindowLongPtr32(hWnd, nIndex) : GetWindowLongPtr64(hWnd, nIndex); - } - - internal static IntPtr SetWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwNewLong) - { - return IntPtr.Size == 4 ? new IntPtr(SetWindowLongPtr32(hWnd, nIndex, dwNewLong.ToInt32())) : SetWindowLongPtr64(hWnd, nIndex, dwNewLong); - } - - public static List GetChildWindows(IntPtr parent) - { - List result = new List(); - GCHandle listHandle = GCHandle.Alloc(result); - try - { - EnumChildWindows( - parent, - (hWnd, lParam) => - { - GCHandle gch = GCHandle.FromIntPtr(lParam); - if (!(gch.Target is List list)) - throw new InvalidCastException("GCHandle Target could not be cast as List"); - list.Add(hWnd); - return true; - }, - GCHandle.ToIntPtr(listHandle)); - } - finally - { - if (listHandle.IsAllocated) - listHandle.Free(); - } - return result; - } - - public static List GetProcessWindows(uint processId) - { - return GetProcessWindows(processId, null); - } - - public static List GetProcessWindows(uint processId, string lpClassName) - { - List result = new List(); - EnumWindows((hWnd, lParam) => - { - GetWindowThreadProcessId(hWnd, out uint pid); - if (pid == processId) - { - if (lpClassName != null && GetClassName(hWnd) == lpClassName) - result.Add(hWnd); - else if (lpClassName == null) - result.Add(hWnd); - } - return true; - }, IntPtr.Zero); - return result; - } - - public static string GetClassName(IntPtr hWnd) - { - StringBuilder sb = new StringBuilder(256); - GetClassName(hWnd, sb, 256); - return sb.ToString(); - } - - internal static IntPtr GetShellDllDefViewWindow() + private static IntPtr GetShellDllDefViewWindow() { - IntPtr _SHELLDLL_DefView = FindWindowEx(hProgman, IntPtr.Zero, "SHELLDLL_DefView", null); + IntPtr _SHELLDLL_DefView = User32.FindWindowEx(hProgman, IntPtr.Zero, "SHELLDLL_DefView", null); if (_SHELLDLL_DefView.Equals(IntPtr.Zero)) { - EnumWindows((hWnd, lParam) => + User32.EnumWindows((hWnd, lParam) => { - if (GetClassName(hWnd) == "WorkerW") + if (Windows.GetClassName(hWnd) == "WorkerW") { - IntPtr child = FindWindowEx(hWnd, IntPtr.Zero, "SHELLDLL_DefView", null); + IntPtr child = User32.FindWindowEx(hWnd, IntPtr.Zero, "SHELLDLL_DefView", null); if (child != IntPtr.Zero) { _SHELLDLL_DefView = child; @@ -363,74 +41,27 @@ internal static IntPtr GetShellDllDefViewWindow() return _SHELLDLL_DefView; } - /// - /// Finds a thread's window by its class name. - /// - /// The id of the thread. - /// The class name. - /// A handle to the window. - public static IntPtr FindThreadWindowByClassName(uint dwThreadId, string lpClassName) - { - IntPtr searchedHWnd = IntPtr.Zero; - - EnumThreadWindows( - dwThreadId, - (hWnd, lParam) => - { - if (hWnd == IntPtr.Zero) - return true; - - string className = GetClassName(hWnd); - if (className == lpClassName) - { - searchedHWnd = hWnd; - return false; - } - return true; - }, - IntPtr.Zero); - - return searchedHWnd; - } - - private static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) - { - long longPtr = (long)GetWindowLongPtr(hWnd, nIndex); - longPtr |= (long)dwLong; - SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); - } - - public static void AddToolWindowStyle(IntPtr hWnd) - { - AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); - } - - public static void AddVisibleWindowStyle(IntPtr hWnd) - { - AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)WindowStylesFlags.WS_VISIBLE); - } - public static bool IsForegroundAppAFullscreenVideogame() { // Get the dimensions of the active window. - IntPtr hWnd = GetForegroundWindow(); + IntPtr hWnd = User32.GetForegroundWindow(); - Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] hWnd=0x{hWnd.ToInt64():X8}, className=\"{GetClassName(hWnd)}\""); + Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] hWnd=0x{hWnd.ToInt64():X8}, className=\"{Windows.GetClassName(hWnd)}\""); if (!hWnd.Equals(IntPtr.Zero)) { // Check we haven't picked up the desktop or the shell or the parent of one of them (Progman, WorkerW) - List childWindows = GetChildWindows(hWnd); + List childWindows = Windows.GetChildWindows(hWnd); if (!hWnd.Equals(hDesktop) && !hWnd.Equals(hProgman) && !hWnd.Equals(hShellDll) && !childWindows.Contains(hDesktop) && !childWindows.Contains(hProgman) && !childWindows.Contains(hShellDll)) { Rectangle screenRect = Screen.FromHandle(hWnd).Bounds; - GetClientRect(hWnd, out Rect clientRect); + User32.GetClientRect(hWnd, out Rect clientRect); if (clientRect.Height == screenRect.Height && clientRect.Width == screenRect.Width) { - var processId = GetProcessFromWindowHandle(hWnd); - var modules = GetProcessModules(processId); + var processId = Windows.GetProcessFromWindowHandle(hWnd); + var modules = Processes.GetProcessModules(processId); if (modules != null) { Regex regex_d3d = new Regex(@"(?:(?:d3d[0-9]+)|(?:dxgi))\.dll", RegexOptions.IgnoreCase); @@ -442,7 +73,7 @@ public static bool IsForegroundAppAFullscreenVideogame() bool isOpenGL = module.ModuleName.Equals("opengl32.dll", StringComparison.InvariantCultureIgnoreCase); if (isDirectX || isOpenGL) { - Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] Fullscreen videogame: \"{GetProcessName(processId)}\", module found: \"{module.ModuleName}\""); + Debug.WriteLine($"[Win32API::IsForegroundAppAFullscreenVideogame] Fullscreen videogame: \"{Processes.GetProcessName(processId)}\", module found: \"{module.ModuleName}\""); return true; } } @@ -455,95 +86,6 @@ public static bool IsForegroundAppAFullscreenVideogame() return false; } - private static uint GetProcessFromWindowHandle(IntPtr hWnd) - { - GetWindowThreadProcessId(hWnd, out uint pid); - return pid; - } - - private static string GetProcessName(uint processId) - { - if (processId == 0) - return null; - - var process = Process.GetProcessById((int)processId); - return process.ProcessName; - } - - private static IEnumerable GetProcessModules(uint processId) - { - if (processId == 0) - return null; - - var process = Process.GetProcessById((int)processId); - return process.Modules.Cast(); - } - - public static string GetWindowTitle(IntPtr hWnd) - { - const int nMaxCount = 256; - StringBuilder lpString = new StringBuilder(nMaxCount); - return GetWindowText(hWnd, lpString, nMaxCount) > 0 ? lpString.ToString() : string.Empty; - } - - public static bool SendWindowMessage(IntPtr hWnd, WindowsMessagesFlags msg, IntPtr wParam, IntPtr lParam, bool postMessage = false) - { - return postMessage ? PostMessage(hWnd, (uint)msg, wParam, lParam) : SendMessage(hWnd, (uint)msg, wParam, lParam); - } - - public static bool SendAppCommandMessage(IntPtr hWnd, IntPtr lParam, bool postMessage = false) - { - return SendWindowMessage(hWnd, WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, lParam, postMessage); - } - - public static bool SendKeyDown(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) - { - const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYDOWN; - IntPtr wParam = (IntPtr)key.GetVirtualKey(); - IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0)); - - return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); - } - - public static bool SendKeyUp(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) - { - const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYUP; - IntPtr wParam = (IntPtr)key.GetVirtualKey(); - IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0), previousState: 1, transitionState: 1); - - return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); - } - - public static void SendPasteKey() - { - var shiftKey = new KeyboardKey(Keys.ShiftKey); - var altKey = new KeyboardKey(Keys.Alt); - var ctrlKey = new KeyboardKey(Keys.ControlKey); - var vKey = new KeyboardKey(Keys.V); - - // Before injecting a paste command, first make sure that no modifiers are already - // being pressed (which will throw off the Ctrl+v). - // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck - var maxSleep = 250; - - // minimum sleep time - Thread.Sleep(150); - - while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) - { - Thread.Sleep(maxSleep); - maxSleep -= 50; - } - - // Press keys in sequence. Don't use PressAndRelease since that seems to be too fast for most applications and the sequence gets lost. - ctrlKey.Press(); - vKey.Press(); - Thread.Sleep(25); - vKey.Release(); - Thread.Sleep(25); - ctrlKey.Release(); - } - public static void SendMediaKey(ToastifyAction action) { VirtualKeyCode virtualKey; @@ -572,7 +114,7 @@ public static void SendMediaKey(ToastifyAction action) case ToastifyAction.NextTrack: virtualKey = VirtualKeyCode.VK_MEDIA_NEXT_TRACK; break; - + case ToastifyAction.None: case ToastifyAction.FastForward: case ToastifyAction.Rewind: @@ -591,480 +133,7 @@ public static void SendMediaKey(ToastifyAction action) return; } - KeyboardEvent(virtualKey, 0, 1, IntPtr.Zero); + User32.KeyboardEvent(virtualKey, 0, 1, IntPtr.Zero); } - - public static IntPtr SetLowLevelMouseHook(ref LowLevelMouseHookProc mouseHookProc) - { - IntPtr hHook; - using (Process process = Process.GetCurrentProcess()) - { - using (ProcessModule module = process.MainModule) - { - IntPtr hModule = GetModuleHandle(module.ModuleName); - - hHook = SetWindowsHookEx(HookType.WH_MOUSE_LL, mouseHookProc, hModule, 0); - if (hHook == IntPtr.Zero) - logger.Error($"Failed to register a low-level mouse hook. Error code: {Marshal.GetLastWin32Error()}"); - } - } - - return hHook; - } - - #region Enums - - internal enum ShowWindowCmd - { - /// - /// Hides the window and activates another window. - /// - SW_HIDE = 0, - - /// - /// Activates and displays a window. - /// If the window is minimized or maximized, the system restores it to its original size and position. - /// An application should specify this flag when displaying the window for the first time. - /// - SW_SHOWNORMAL = 1, - - /// - /// Activates the window and displays it as a minimized window. - /// - SW_SHOWMINIMIZED = 2, - - /// - /// Maximizes the specified window. - /// - SW_MAXIMIZE = 3, - - /// - /// Activates the window and displays it as a maximized window. - /// - SW_SHOWMAXIMIZED = SW_MAXIMIZE, - - /// - /// Displays a window in its most recent size and position. - /// This value is similar to , except that the window is not activated. - /// - SW_SHOWNOACTIVATE = 4, - - /// - /// Activates the window and displays it in its current size and position. - /// - SW_SHOW = 5, - - /// - /// Minimizes the specified window and activates the next top-level window in the Z order. - /// - SW_MINIMIZE = 6, - - /// - /// Displays the window as a minimized window. - /// This value is similar to , except the window is not activated. - /// - SW_SHOWMINNOACTIVE = 7, - - /// - /// Displays the window in its current size and position. - /// This value is similar to , except that the window is not activated. - /// - SW_SHOWNA = 8, - - /// - /// Activates and displays the window. - /// If the window is minimized or maximized, the system restores it to its original size and position. - /// An application should specify this flag when restoring a minimized window. - /// - SW_RESTORE = 9, - - /// - /// Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. - /// - SW_SHOWDEFAULT = 10, - - /// - /// Minimizes a window, even if the thread that owns the window is not responding. - /// This flag should only be used when minimizing windows from a different thread. - /// - SW_FORCEMINIMIZE = 11 - } - - [Flags] - internal enum SetWindowPosFlags : uint - { - /// If the calling thread and the thread that owns the window are attached to different input queues, - /// the system posts the request to the thread that owns the window. This prevents the calling thread from - /// blocking its execution while other threads process the request. - /// SWP_ASYNCWINDOWPOS - AsynchronousWindowPosition = 0x4000, - - /// Prevents generation of the WM_SYNCPAINT message. - /// SWP_DEFERERASE - DeferErase = 0x2000, - - /// Draws a frame (defined in the window's class description) around the window. - /// SWP_DRAWFRAME - DrawFrame = 0x0020, - - /// Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to - /// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE - /// is sent only when the window's size is being changed. - /// SWP_FRAMECHANGED - FrameChanged = 0x0020, - - /// Hides the window. - /// SWP_HIDEWINDOW - HideWindow = 0x0080, - - /// Does not activate the window. If this flag is not set, the window is activated and moved to the - /// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter - /// parameter). - /// SWP_NOACTIVATE - DoNotActivate = 0x0010, - - /// Discards the entire contents of the client area. If this flag is not specified, the valid - /// contents of the client area are saved and copied back into the client area after the window is sized or - /// repositioned. - /// SWP_NOCOPYBITS - DoNotCopyBits = 0x0100, - - /// Retains the current position (ignores X and y parameters). - /// SWP_NOMOVE - IgnoreMove = 0x0002, - - /// Does not change the owner window's position in the Z order. - /// SWP_NOOWNERZORDER - DoNotChangeOwnerZOrder = 0x0200, - - /// Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to - /// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent - /// window uncovered as a result of the window being moved. When this flag is set, the application must - /// explicitly invalidate or redraw any parts of the window and parent window that need redrawing. - /// SWP_NOREDRAW - DoNotRedraw = 0x0008, - - /// Same as the SWP_NOOWNERZORDER flag. - /// SWP_NOREPOSITION - DoNotReposition = 0x0200, - - /// Prevents the window from receiving the WM_WINDOWPOSCHANGING message. - /// SWP_NOSENDCHANGING - DoNotSendChangingEvent = 0x0400, - - /// Retains the current size (ignores the cx and cy parameters). - /// SWP_NOSIZE - IgnoreResize = 0x0001, - - /// Retains the current Z order (ignores the hWndInsertAfter parameter). - /// SWP_NOZORDER - IgnoreZOrder = 0x0004, - - /// Displays the window. - /// SWP_SHOWWINDOW - ShowWindow = 0x0040, - } - - /// - /// Values to use with . - /// - internal enum GWL - { - GWL_EXSTYLE = -20, - GWL_HINSTANCE = -6, - GWL_HWNDPARENT = -8, - GWL_ID = -12, - GWL_STYLE = -16, - GWL_USERDATA = -21, - GWL_WNDPROC = -4 - } - - internal enum HookType - { - WH_JOURNALRECORD = 0, - WH_JOURNALPLAYBACK = 1, - WH_KEYBOARD = 2, - WH_GETMESSAGE = 3, - WH_CALLWNDPROC = 4, - WH_CBT = 5, - WH_SYSMSGFILTER = 6, - WH_MOUSE = 7, - WH_HARDWARE = 8, - WH_DEBUG = 9, - WH_SHELL = 10, - WH_FOREGROUNDIDLE = 11, - WH_CALLWNDPROCRET = 12, - WH_KEYBOARD_LL = 13, - WH_MOUSE_LL = 14 - } - - /// - /// Window styles (). - /// - [Flags] - internal enum WindowStylesFlags : long - { - WS_BORDER = 0x00800000L, - WS_CAPTION = 0x00C00000L, - WS_CHILD = 0x40000000L, - WS_CHILDWINDOW = 0x40000000L, - WS_CLIPCHILDREN = 0x02000000L, - WS_CLIPSIBLINGS = 0x04000000L, - WS_DISABLED = 0x08000000L, - WS_DLGFRAME = 0x00400000L, - WS_GROUP = 0x00020000L, - WS_HSCROLL = 0x00100000L, - WS_ICONIC = 0x20000000L, - WS_MAXIMIZE = 0x01000000L, - WS_MAXIMIZEBOX = 0x00010000L, - WS_MINIMIZE = 0x20000000L, - WS_MINIMIZEBOX = 0x00020000L, - WS_OVERLAPPED = 0x00000000L, - WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, - WS_POPUP = 0x80000000L, - WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU, - WS_SIZEBOX = 0x00040000L, - WS_SYSMENU = 0x00080000L, - WS_TABSTOP = 0x00010000L, - WS_THICKFRAME = 0x00040000L, - WS_TILED = 0x00000000L, - WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, - WS_VISIBLE = 0x10000000L, - WS_VSCROLL = 0x00200000L - } - - /// - /// Extended window styles (). - /// - [Flags] - internal enum ExtendedWindowStylesFlags : long - { - WS_EX_ACCEPTFILES = 0x00000010L, - WS_EX_APPWINDOW = 0x00040000L, - WS_EX_CLIENTEDGE = 0x00000200L, - WS_EX_COMPOSITED = 0x02000000L, - WS_EX_CONTEXTHELP = 0x00000400L, - WS_EX_CONTROLPARENT = 0x00010000L, - WS_EX_DLGMODALFRAME = 0x00000001L, - WS_EX_LAYERED = 0x00080000L, - WS_EX_LAYOUTRTL = 0x00400000L, - WS_EX_LEFT = 0x00000000L, - WS_EX_LEFTSCROLLBAR = 0x00004000L, - WS_EX_LTRREADING = 0x00000000L, - WS_EX_MDICHILD = 0x00000040L, - WS_EX_NOACTIVATE = 0x08000000L, - WS_EX_NOINHERITLAYOUT = 0x00100000L, - WS_EX_NOPARENTNOTIFY = 0x00000004L, - WS_EX_NOREDIRECTIONBITMAP = 0x00200000L, - WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE, - WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST, - WS_EX_RIGHT = 0x00001000L, - WS_EX_RIGHTSCROLLBAR = 0x00000000L, - WS_EX_RTLREADING = 0x00002000L, - WS_EX_STATICEDGE = 0x00020000L, - WS_EX_TOOLWINDOW = 0x00000080L, - WS_EX_TOPMOST = 0x00000008L, - WS_EX_TRANSPARENT = 0x00000020L, - WS_EX_WINDOWEDGE = 0x00000100L - } - - [Flags] - internal enum ExecutionStateFlags : uint - { - ES_AWAYMODE_REQUIRED = 0x00000040, - ES_CONTINUOUS = 0x80000000, - ES_DISPLAY_REQUIRED = 0x00000002, - ES_SYSTEM_REQUIRED = 0x00000001, - ES_USER_PRESENT = 0x00000004 // Legacy flag, should not be used. - } - - [Flags] - internal enum WindowsMessagesFlags : uint - { - // Window Messages & Notifications - WM_CLOSE = 0x0010, - WM_QUIT = 0x0012, - WM_ERASEBKGND = 0x0014, - WM_CHILDACTIVATE = 0x0022, - WM_GETICON = 0x007F, - - // Keyboard Input Messages & Notifications - WM_KEYDOWN = 0x0100, - WM_KEYUP = 0x0101, - WM_CHAR = 0x0102, - WM_SYSKEYDOWN = 0x0104, - WM_SYSKEYUP = 0x0105, - WM_SYSCHAR = 0x0106, - - WM_APPCOMMAND = 0x0319, - - // Menu Messages & Notifications - WM_COMMAND = 0x0111, - WM_UNINITMENUPOPUP = 0x0125, - - // Keyboard Accelerator Messages & Notifications - WM_INITMENU = 0x0116, - WM_INITMENUPOPUP = 0x0117, - WM_MENUSELECT = 0x011F, - - // Mouse Input Notifications - WM_LBUTTONDOWN = 0x0201, - WM_LBUTTONUP = 0x0202, - WM_LBUTTONDBLCLK = 0x0203, - WM_RBUTTONDOWN = 0x0204, - WM_RBUTTONUP = 0x0205, - WM_RBUTTONDBLCLK = 0x0206, - WM_MBUTTONDOWN = 0x0207, - WM_MBUTTONUP = 0x0208, - WM_MBUTTONDBLCLK = 0x0209, - WM_MOUSEWHEEL = 0x020A, - WM_XBUTTONDOWN = 0x020B, - WM_XBUTTONUP = 0x020C, - WM_XBUTTONDBLCLK = 0x020D, - WM_MOUSEHWHEEL = 0x020E, - WM_NCXBUTTONDOWN = 0x00AB, - WM_NCXBUTTONUP = 0x00AC, - WM_NCXBUTTONDBLCLK = 0x00AD, - } - - internal enum MapVirtualKeyType : uint - { - MAPVK_VK_TO_VSC = 0, - MAPVK_VSC_TO_VK = 1, - MAPVK_VK_TO_CHAR = 2, - MAPVK_VSC_TO_VK_EX = 3, - MAPVK_VK_TO_VSC_EX = 4 - } - - internal enum VirtualKeyCode : byte - { - VK_VOLUME_MUTE = 0xAD, - VK_VOLUME_DOWN = 0xAE, - VK_VOLUME_UP = 0xAF, - VK_MEDIA_NEXT_TRACK = 0xB0, - VK_MEDIA_PREV_TRACK = 0xB1, - VK_MEDIA_STOP = 0xB2, - VK_MEDIA_PLAY_PAUSE = 0xB3, - } - - internal enum ResourceType - { - RT_CURSOR = 1, - RT_BITMAP = 2, - RT_ICON = 3, - RT_MENU = 4, - RT_DIALOG = 5, - RT_STRING = 6, - RT_FONTDIR = 7, - RT_FONT = 8, - RT_ACCELERATOR = 9, - RT_RCDATA = 10, - RT_MESSAGETABLE = 11, - RT_GROUP_CURSOR = 12, - RT_GROUP_ICON = 14, - RT_VERSION = 16, - RT_DLGINCLUDE = 17, - RT_PLUGPLAY = 19, - RT_VXD = 20, - RT_ANICURSOR = 21, - RT_ANIICON = 22, - RT_HTML = 23, - RT_MANIFEST = 24 - } - - #endregion Enums - - #region Internal classes and structs - - internal struct WindowPlacement - { - public int length; - public int flags; - public ShowWindowCmd showCmd; - public Point ptMinPosition; - public Point ptMaxPosition; - public Rectangle rcNormalPosition; - - public override string ToString() - { - return $"{this.length},{this.flags},{this.showCmd},{this.ptMinPosition},{this.ptMaxPosition},{this.rcNormalPosition}"; - } - } - - [StructLayout(LayoutKind.Sequential)] - internal struct Rect - { - public int left; - public int top; - public int right; - public int bottom; - - public int Width { get { return this.right - this.left; } } - - public int Height { get { return this.bottom - this.top; } } - - public override string ToString() - { - return $"{{X={this.left},Y={this.top},Width={this.Width},Height={this.Height}}}"; - } - } - - [StructLayout(LayoutKind.Sequential)] - internal struct LowLevelMouseHookStruct - { - /// - /// The x- and y-coordinates of the cursor, in per-monitor-aware screen coordinates. - /// - public Point pt; - - /// Mouse data. - /// - /// If the message is , the high-order word of this member - /// is the wheel delta. The low-order word is reserved. - /// A positive value indicates that the wheel was rotated forward, away from the user; - /// a negative value indicates that the wheel was rotated backward, toward the user. - /// One wheel click is defined as WHEEL_DELTA, which is 120. - /// - /// If the message is , , - /// , , - /// , or , - /// the high-order word specifies which X button was pressed or released, and the low-order word is reserved. - /// This value can be one or more of the following values. Otherwise, mouseData is not used. - /// - /// - /// - /// XBUTTON1 - /// 0x0001 - /// - /// - /// XBUTTON2 - /// 0x0002 - /// - /// - /// - public int mouseData; - - /// - /// The event-injected flags. - /// - /// An application can use the following values to test the flags. - /// Testing LLMHF_INJECTED (bit 0 set) will tell you whether the event was injected. If it was, then testing LLMHF_LOWER_IL_INJECTED (bit 1 set) - /// will tell you whether or not the event was injected from a process running at lower integrity level. - /// - /// - public int flags; - - /// - /// The time stamp for this message. - /// - public int time; - - /// - /// Additional information associated with the message. - /// - public UIntPtr dwExtraInfo; - } - - #endregion Internal classes and structs } } \ No newline at end of file diff --git a/ToastifyAPI/Helpers/Extensions.cs b/ToastifyAPI/Helpers/Extensions.cs new file mode 100644 index 00000000..2c41941b --- /dev/null +++ b/ToastifyAPI/Helpers/Extensions.cs @@ -0,0 +1,51 @@ +using System.Windows.Input; +using ToastifyAPI.Native; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Helpers +{ + public static class Extensions + { + public static uint GetLParam(this Key key, short repeatCount = 1, byte extended = 0, byte contextCode = 0, byte previousState = 0, byte transitionState = 0) + { + uint lParam = (uint)repeatCount; + uint scanCode = key.GetScanCode(); + lParam += scanCode * 0x00010000; + lParam += (uint)(extended * 0x01000000); + lParam += (uint)(contextCode * 2 * 0x10000000); + lParam += (uint)(previousState * 4 * 0x10000000); + lParam += (uint)(transitionState * 8 * 0x10000000); + return lParam; + } + + public static uint GetVirtualKey(this Key key, bool preferLeftOrRight = false) + { + if (!preferLeftOrRight) + { + switch (key) + { + case Key.LeftShift: + case Key.RightShift: + return 0x10; + + case Key.LeftCtrl: + case Key.RightCtrl: + return 0x11; + + case Key.LeftAlt: + case Key.RightAlt: + return 0x12; + + default: + break; + } + } + return (uint)KeyInterop.VirtualKeyFromKey(key); + } + + public static uint GetScanCode(this Key key) + { + return User32.MapVirtualKey(key.GetVirtualKey(), MapVirtualKeyType.MAPVK_VK_TO_VSC); + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/EnumResNameProcDelegate.cs b/ToastifyAPI/Native/Delegates/EnumResNameProcDelegate.cs new file mode 100644 index 00000000..93ed6915 --- /dev/null +++ b/ToastifyAPI/Native/Delegates/EnumResNameProcDelegate.cs @@ -0,0 +1,6 @@ +using System; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate bool EnumResNameProcDelegate(IntPtr hModule, IntPtr lpszType, IntPtr lpszName, IntPtr lParam); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/EnumThreadDelegate.cs b/ToastifyAPI/Native/Delegates/EnumThreadDelegate.cs new file mode 100644 index 00000000..f177a747 --- /dev/null +++ b/ToastifyAPI/Native/Delegates/EnumThreadDelegate.cs @@ -0,0 +1,6 @@ +using System; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/EnumWindowsProc.cs b/ToastifyAPI/Native/Delegates/EnumWindowsProc.cs new file mode 100644 index 00000000..43d68b92 --- /dev/null +++ b/ToastifyAPI/Native/Delegates/EnumWindowsProc.cs @@ -0,0 +1,6 @@ +using System; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/HookProc.cs b/ToastifyAPI/Native/Delegates/HookProc.cs new file mode 100644 index 00000000..9ada36b9 --- /dev/null +++ b/ToastifyAPI/Native/Delegates/HookProc.cs @@ -0,0 +1,6 @@ +using System; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/LowLevelMouseHookProc.cs b/ToastifyAPI/Native/Delegates/LowLevelMouseHookProc.cs new file mode 100644 index 00000000..adf3080b --- /dev/null +++ b/ToastifyAPI/Native/Delegates/LowLevelMouseHookProc.cs @@ -0,0 +1,9 @@ +using System; +using System.Runtime.InteropServices; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate IntPtr LowLevelMouseHookProc(int code, WindowsMessagesFlags wParam, [In] LowLevelMouseHookStruct lParam); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Delegates/SendMessageDelegate.cs b/ToastifyAPI/Native/Delegates/SendMessageDelegate.cs new file mode 100644 index 00000000..a67fcb29 --- /dev/null +++ b/ToastifyAPI/Native/Delegates/SendMessageDelegate.cs @@ -0,0 +1,6 @@ +using System; + +namespace ToastifyAPI.Native.Delegates +{ + public delegate void SendMessageDelegate(IntPtr hWnd, uint uMsg, UIntPtr dwData, IntPtr lResult); +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/ExecutionStateFlags.cs b/ToastifyAPI/Native/Enums/ExecutionStateFlags.cs new file mode 100644 index 00000000..0e614b0d --- /dev/null +++ b/ToastifyAPI/Native/Enums/ExecutionStateFlags.cs @@ -0,0 +1,15 @@ +using System; + +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + [Flags] + public enum ExecutionStateFlags : uint + { + ES_AWAYMODE_REQUIRED = 0x00000040, + ES_CONTINUOUS = 0x80000000, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_SYSTEM_REQUIRED = 0x00000001, + ES_USER_PRESENT = 0x00000004 // Legacy flag, should not be used. + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/ExtendedWindowStylesFlags.cs b/ToastifyAPI/Native/Enums/ExtendedWindowStylesFlags.cs new file mode 100644 index 00000000..97ab653b --- /dev/null +++ b/ToastifyAPI/Native/Enums/ExtendedWindowStylesFlags.cs @@ -0,0 +1,40 @@ +using System; + +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + /// + /// Extended window styles (). + /// + [Flags] + public enum ExtendedWindowStylesFlags : long + { + WS_EX_ACCEPTFILES = 0x00000010L, + WS_EX_APPWINDOW = 0x00040000L, + WS_EX_CLIENTEDGE = 0x00000200L, + WS_EX_COMPOSITED = 0x02000000L, + WS_EX_CONTEXTHELP = 0x00000400L, + WS_EX_CONTROLPARENT = 0x00010000L, + WS_EX_DLGMODALFRAME = 0x00000001L, + WS_EX_LAYERED = 0x00080000L, + WS_EX_LAYOUTRTL = 0x00400000L, + WS_EX_LEFT = 0x00000000L, + WS_EX_LEFTSCROLLBAR = 0x00004000L, + WS_EX_LTRREADING = 0x00000000L, + WS_EX_MDICHILD = 0x00000040L, + WS_EX_NOACTIVATE = 0x08000000L, + WS_EX_NOINHERITLAYOUT = 0x00100000L, + WS_EX_NOPARENTNOTIFY = 0x00000004L, + WS_EX_NOREDIRECTIONBITMAP = 0x00200000L, + WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE, + WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST, + WS_EX_RIGHT = 0x00001000L, + WS_EX_RIGHTSCROLLBAR = 0x00000000L, + WS_EX_RTLREADING = 0x00002000L, + WS_EX_STATICEDGE = 0x00020000L, + WS_EX_TOOLWINDOW = 0x00000080L, + WS_EX_TOPMOST = 0x00000008L, + WS_EX_TRANSPARENT = 0x00000020L, + WS_EX_WINDOWEDGE = 0x00000100L + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/GWL.cs b/ToastifyAPI/Native/Enums/GWL.cs new file mode 100644 index 00000000..281b56f5 --- /dev/null +++ b/ToastifyAPI/Native/Enums/GWL.cs @@ -0,0 +1,14 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum GWL + { + GWL_EXSTYLE = -20, + GWL_HINSTANCE = -6, + GWL_HWNDPARENT = -8, + GWL_ID = -12, + GWL_STYLE = -16, + GWL_USERDATA = -21, + GWL_WNDPROC = -4 + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/HookType.cs b/ToastifyAPI/Native/Enums/HookType.cs new file mode 100644 index 00000000..c6ab9c66 --- /dev/null +++ b/ToastifyAPI/Native/Enums/HookType.cs @@ -0,0 +1,22 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum HookType + { + WH_JOURNALRECORD = 0, + WH_JOURNALPLAYBACK = 1, + WH_KEYBOARD = 2, + WH_GETMESSAGE = 3, + WH_CALLWNDPROC = 4, + WH_CBT = 5, + WH_SYSMSGFILTER = 6, + WH_MOUSE = 7, + WH_HARDWARE = 8, + WH_DEBUG = 9, + WH_SHELL = 10, + WH_FOREGROUNDIDLE = 11, + WH_CALLWNDPROCRET = 12, + WH_KEYBOARD_LL = 13, + WH_MOUSE_LL = 14 + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/MapVirtualKeyType.cs b/ToastifyAPI/Native/Enums/MapVirtualKeyType.cs new file mode 100644 index 00000000..fdc2fe30 --- /dev/null +++ b/ToastifyAPI/Native/Enums/MapVirtualKeyType.cs @@ -0,0 +1,12 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum MapVirtualKeyType : uint + { + MAPVK_VK_TO_VSC = 0, + MAPVK_VSC_TO_VK = 1, + MAPVK_VK_TO_CHAR = 2, + MAPVK_VSC_TO_VK_EX = 3, + MAPVK_VK_TO_VSC_EX = 4 + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/ResourceType.cs b/ToastifyAPI/Native/Enums/ResourceType.cs new file mode 100644 index 00000000..71029dc2 --- /dev/null +++ b/ToastifyAPI/Native/Enums/ResourceType.cs @@ -0,0 +1,28 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum ResourceType + { + RT_CURSOR = 1, + RT_BITMAP = 2, + RT_ICON = 3, + RT_MENU = 4, + RT_DIALOG = 5, + RT_STRING = 6, + RT_FONTDIR = 7, + RT_FONT = 8, + RT_ACCELERATOR = 9, + RT_RCDATA = 10, + RT_MESSAGETABLE = 11, + RT_GROUP_CURSOR = 12, + RT_GROUP_ICON = 14, + RT_VERSION = 16, + RT_DLGINCLUDE = 17, + RT_PLUGPLAY = 19, + RT_VXD = 20, + RT_ANICURSOR = 21, + RT_ANIICON = 22, + RT_HTML = 23, + RT_MANIFEST = 24 + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/SetWindowPosFlags.cs b/ToastifyAPI/Native/Enums/SetWindowPosFlags.cs new file mode 100644 index 00000000..b7c5bb2a --- /dev/null +++ b/ToastifyAPI/Native/Enums/SetWindowPosFlags.cs @@ -0,0 +1,79 @@ +using System; + +namespace ToastifyAPI.Native.Enums +{ + [Flags] + public enum SetWindowPosFlags : uint + { + /// If the calling thread and the thread that owns the window are attached to different input queues, + /// the system posts the request to the thread that owns the window. This prevents the calling thread from + /// blocking its execution while other threads process the request. + /// SWP_ASYNCWINDOWPOS + AsynchronousWindowPosition = 0x4000, + + /// Prevents generation of the WM_SYNCPAINT message. + /// SWP_DEFERERASE + DeferErase = 0x2000, + + /// Draws a frame (defined in the window's class description) around the window. + /// SWP_DRAWFRAME + DrawFrame = 0x0020, + + /// Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to + /// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE + /// is sent only when the window's size is being changed. + /// SWP_FRAMECHANGED + FrameChanged = 0x0020, + + /// Hides the window. + /// SWP_HIDEWINDOW + HideWindow = 0x0080, + + /// Does not activate the window. If this flag is not set, the window is activated and moved to the + /// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter + /// parameter). + /// SWP_NOACTIVATE + DoNotActivate = 0x0010, + + /// Discards the entire contents of the client area. If this flag is not specified, the valid + /// contents of the client area are saved and copied back into the client area after the window is sized or + /// repositioned. + /// SWP_NOCOPYBITS + DoNotCopyBits = 0x0100, + + /// Retains the current position (ignores X and y parameters). + /// SWP_NOMOVE + IgnoreMove = 0x0002, + + /// Does not change the owner window's position in the Z order. + /// SWP_NOOWNERZORDER + DoNotChangeOwnerZOrder = 0x0200, + + /// Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to + /// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent + /// window uncovered as a result of the window being moved. When this flag is set, the application must + /// explicitly invalidate or redraw any parts of the window and parent window that need redrawing. + /// SWP_NOREDRAW + DoNotRedraw = 0x0008, + + /// Same as the SWP_NOOWNERZORDER flag. + /// SWP_NOREPOSITION + DoNotReposition = 0x0200, + + /// Prevents the window from receiving the WM_WINDOWPOSCHANGING message. + /// SWP_NOSENDCHANGING + DoNotSendChangingEvent = 0x0400, + + /// Retains the current size (ignores the cx and cy parameters). + /// SWP_NOSIZE + IgnoreResize = 0x0001, + + /// Retains the current Z order (ignores the hWndInsertAfter parameter). + /// SWP_NOZORDER + IgnoreZOrder = 0x0004, + + /// Displays the window. + /// SWP_SHOWWINDOW + ShowWindow = 0x0040, + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/ShowWindowCmd.cs b/ToastifyAPI/Native/Enums/ShowWindowCmd.cs new file mode 100644 index 00000000..890044c3 --- /dev/null +++ b/ToastifyAPI/Native/Enums/ShowWindowCmd.cs @@ -0,0 +1,79 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum ShowWindowCmd + { + /// + /// Hides the window and activates another window. + /// + SW_HIDE = 0, + + /// + /// Activates and displays a window. + /// If the window is minimized or maximized, the system restores it to its original size and position. + /// An application should specify this flag when displaying the window for the first time. + /// + SW_SHOWNORMAL = 1, + + /// + /// Activates the window and displays it as a minimized window. + /// + SW_SHOWMINIMIZED = 2, + + /// + /// Maximizes the specified window. + /// + SW_MAXIMIZE = 3, + + /// + /// Activates the window and displays it as a maximized window. + /// + SW_SHOWMAXIMIZED = SW_MAXIMIZE, + + /// + /// Displays a window in its most recent size and position. + /// This value is similar to , except that the window is not activated. + /// + SW_SHOWNOACTIVATE = 4, + + /// + /// Activates the window and displays it in its current size and position. + /// + SW_SHOW = 5, + + /// + /// Minimizes the specified window and activates the next top-level window in the Z order. + /// + SW_MINIMIZE = 6, + + /// + /// Displays the window as a minimized window. + /// This value is similar to , except the window is not activated. + /// + SW_SHOWMINNOACTIVE = 7, + + /// + /// Displays the window in its current size and position. + /// This value is similar to , except that the window is not activated. + /// + SW_SHOWNA = 8, + + /// + /// Activates and displays the window. + /// If the window is minimized or maximized, the system restores it to its original size and position. + /// An application should specify this flag when restoring a minimized window. + /// + SW_RESTORE = 9, + + /// + /// Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. + /// + SW_SHOWDEFAULT = 10, + + /// + /// Minimizes a window, even if the thread that owns the window is not responding. + /// This flag should only be used when minimizing windows from a different thread. + /// + SW_FORCEMINIMIZE = 11 + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/VirtualKeyCode.cs b/ToastifyAPI/Native/Enums/VirtualKeyCode.cs new file mode 100644 index 00000000..1d157fab --- /dev/null +++ b/ToastifyAPI/Native/Enums/VirtualKeyCode.cs @@ -0,0 +1,14 @@ +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + public enum VirtualKeyCode : byte + { + VK_VOLUME_MUTE = 0xAD, + VK_VOLUME_DOWN = 0xAE, + VK_VOLUME_UP = 0xAF, + VK_MEDIA_NEXT_TRACK = 0xB0, + VK_MEDIA_PREV_TRACK = 0xB1, + VK_MEDIA_STOP = 0xB2, + VK_MEDIA_PLAY_PAUSE = 0xB3, + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/WindowStylesFlags.cs b/ToastifyAPI/Native/Enums/WindowStylesFlags.cs new file mode 100644 index 00000000..24d80c8b --- /dev/null +++ b/ToastifyAPI/Native/Enums/WindowStylesFlags.cs @@ -0,0 +1,40 @@ +using System; + +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + /// + /// Window styles (). + /// + [Flags] + public enum WindowStylesFlags : long + { + WS_BORDER = 0x00800000L, + WS_CAPTION = 0x00C00000L, + WS_CHILD = 0x40000000L, + WS_CHILDWINDOW = 0x40000000L, + WS_CLIPCHILDREN = 0x02000000L, + WS_CLIPSIBLINGS = 0x04000000L, + WS_DISABLED = 0x08000000L, + WS_DLGFRAME = 0x00400000L, + WS_GROUP = 0x00020000L, + WS_HSCROLL = 0x00100000L, + WS_ICONIC = 0x20000000L, + WS_MAXIMIZE = 0x01000000L, + WS_MAXIMIZEBOX = 0x00010000L, + WS_MINIMIZE = 0x20000000L, + WS_MINIMIZEBOX = 0x00020000L, + WS_OVERLAPPED = 0x00000000L, + WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, + WS_POPUP = 0x80000000L, + WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU, + WS_SIZEBOX = 0x00040000L, + WS_SYSMENU = 0x00080000L, + WS_TABSTOP = 0x00010000L, + WS_THICKFRAME = 0x00040000L, + WS_TILED = 0x00000000L, + WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, + WS_VISIBLE = 0x10000000L, + WS_VSCROLL = 0x00200000L + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Enums/WindowsMessagesFlags.cs b/ToastifyAPI/Native/Enums/WindowsMessagesFlags.cs new file mode 100644 index 00000000..a6426587 --- /dev/null +++ b/ToastifyAPI/Native/Enums/WindowsMessagesFlags.cs @@ -0,0 +1,54 @@ +using System; + +// ReSharper disable InconsistentNaming +namespace ToastifyAPI.Native.Enums +{ + [Flags] + public enum WindowsMessagesFlags : uint + { + // Window Messages & Notifications + WM_CLOSE = 0x0010, + WM_QUIT = 0x0012, + WM_ERASEBKGND = 0x0014, + WM_CHILDACTIVATE = 0x0022, + WM_GETICON = 0x007F, + + // Keyboard Input Messages & Notifications + WM_KEYDOWN = 0x0100, + WM_KEYUP = 0x0101, + WM_CHAR = 0x0102, + WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105, + WM_SYSCHAR = 0x0106, + + WM_APPCOMMAND = 0x0319, + + // Menu Messages & Notifications + WM_COMMAND = 0x0111, + WM_UNINITMENUPOPUP = 0x0125, + + // Keyboard Accelerator Messages & Notifications + WM_INITMENU = 0x0116, + WM_INITMENUPOPUP = 0x0117, + WM_MENUSELECT = 0x011F, + + // Mouse Input Notifications + WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202, + WM_LBUTTONDBLCLK = 0x0203, + WM_RBUTTONDOWN = 0x0204, + WM_RBUTTONUP = 0x0205, + WM_RBUTTONDBLCLK = 0x0206, + WM_MBUTTONDOWN = 0x0207, + WM_MBUTTONUP = 0x0208, + WM_MBUTTONDBLCLK = 0x0209, + WM_MOUSEWHEEL = 0x020A, + WM_XBUTTONDOWN = 0x020B, + WM_XBUTTONUP = 0x020C, + WM_XBUTTONDBLCLK = 0x020D, + WM_MOUSEHWHEEL = 0x020E, + WM_NCXBUTTONDOWN = 0x00AB, + WM_NCXBUTTONUP = 0x00AC, + WM_NCXBUTTONDBLCLK = 0x00AD, + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Kernel32.cs b/ToastifyAPI/Native/Kernel32.cs new file mode 100644 index 00000000..cd5765f9 --- /dev/null +++ b/ToastifyAPI/Native/Kernel32.cs @@ -0,0 +1,47 @@ +using System; +using System.Runtime.InteropServices; +using ToastifyAPI.Native.Delegates; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Native +{ + public static class Kernel32 + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport("kernel32.dll")] + public static extern void SetLastError(int dwErrorCode); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern ExecutionStateFlags SetThreadExecutionState(ExecutionStateFlags esFlags); + + /// + /// Enumerates resources of a specified type within a binary module. + /// + /// + /// A handle to a module to be searched. + /// If this parameter is NULL, that is equivalent to passing in a handle to the module used to create the current process. + /// + /// The type of the resource for which the name is being enumerated. + /// The callback function to be called for each enumerated resource name. + /// An application-defined value passed to the callback function. This parameter can be used in error checking. + /// The return value is TRUE if the function succeeds or FALSE if the function does not find a resource of the type specified, or if the function fails for another reason. + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern bool EnumResourceNames(IntPtr hModule, string lpszType, EnumResNameProcDelegate lpEnumFunc, IntPtr lParam); + + /// + /// Enumerates resources of a specified type within a binary module. + /// + /// + /// A handle to a module to be searched. + /// If this parameter is NULL, that is equivalent to passing in a handle to the module used to create the current process. + /// + /// The ID of the resource. + /// The callback function to be called for each enumerated resource ID. + /// An application-defined value passed to the callback function. This parameter can be used in error checking. + /// The return value is TRUE if the function succeeds or FALSE if the function does not find a resource of the type specified, or if the function fails for another reason. + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern bool EnumResourceNames(IntPtr hModule, ResourceType dwID, EnumResNameProcDelegate lpEnumFunc, IntPtr lParam); + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Processes.cs b/ToastifyAPI/Native/Processes.cs new file mode 100644 index 00000000..2ffa467c --- /dev/null +++ b/ToastifyAPI/Native/Processes.cs @@ -0,0 +1,52 @@ +using log4net; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; +using ToastifyAPI.Native.Delegates; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Native +{ + public static class Processes + { + private static readonly ILog logger = LogManager.GetLogger(typeof(Processes)); + + public static string GetProcessName(uint processId) + { + if (processId == 0) + return null; + + var process = Process.GetProcessById((int)processId); + return process.ProcessName; + } + + public static IEnumerable GetProcessModules(uint processId) + { + if (processId == 0) + return null; + + var process = Process.GetProcessById((int)processId); + return process.Modules.Cast(); + } + + public static IntPtr SetLowLevelMouseHook(ref LowLevelMouseHookProc mouseHookProc) + { + IntPtr hHook; + using (Process process = Process.GetCurrentProcess()) + { + using (ProcessModule module = process.MainModule) + { + IntPtr hModule = Kernel32.GetModuleHandle(module.ModuleName); + + hHook = User32.SetWindowsHookEx(HookType.WH_MOUSE_LL, mouseHookProc, hModule, 0); + if (hHook == IntPtr.Zero) + logger.Error($"Failed to register a low-level mouse hook. Error code: {Marshal.GetLastWin32Error()}"); + } + } + + return hHook; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Structs/LowLevelMouseHookStruct.cs b/ToastifyAPI/Native/Structs/LowLevelMouseHookStruct.cs new file mode 100644 index 00000000..c114dc64 --- /dev/null +++ b/ToastifyAPI/Native/Structs/LowLevelMouseHookStruct.cs @@ -0,0 +1,63 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Native.Structs +{ + [StructLayout(LayoutKind.Sequential)] + public struct LowLevelMouseHookStruct + { + /// + /// The x- and y-coordinates of the cursor, in per-monitor-aware screen coordinates. + /// + public Point pt; + + /// Mouse data. + /// + /// If the message is , the high-order word of this member + /// is the wheel delta. The low-order word is reserved. + /// A positive value indicates that the wheel was rotated forward, away from the user; + /// a negative value indicates that the wheel was rotated backward, toward the user. + /// One wheel click is defined as WHEEL_DELTA, which is 120. + /// + /// If the message is , , + /// , , + /// , or , + /// the high-order word specifies which X button was pressed or released, and the low-order word is reserved. + /// This value can be one or more of the following values. Otherwise, mouseData is not used. + /// + /// + /// + /// XBUTTON1 + /// 0x0001 + /// + /// + /// XBUTTON2 + /// 0x0002 + /// + /// + /// + public int mouseData; + + /// + /// The event-injected flags. + /// + /// An application can use the following values to test the flags. + /// Testing LLMHF_INJECTED (bit 0 set) will tell you whether the event was injected. If it was, then testing LLMHF_LOWER_IL_INJECTED (bit 1 set) + /// will tell you whether or not the event was injected from a process running at lower integrity level. + /// + /// + public int flags; + + /// + /// The time stamp for this message. + /// + public int time; + + /// + /// Additional information associated with the message. + /// + public UIntPtr dwExtraInfo; + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Structs/Rect.cs b/ToastifyAPI/Native/Structs/Rect.cs new file mode 100644 index 00000000..e439b8a4 --- /dev/null +++ b/ToastifyAPI/Native/Structs/Rect.cs @@ -0,0 +1,22 @@ +using System.Runtime.InteropServices; + +namespace ToastifyAPI.Native.Structs +{ + [StructLayout(LayoutKind.Sequential)] + public struct Rect + { + public int left; + public int top; + public int right; + public int bottom; + + public int Width { get { return this.right - this.left; } } + + public int Height { get { return this.bottom - this.top; } } + + public override string ToString() + { + return $"{{X={this.left},Y={this.top},Width={this.Width},Height={this.Height}}}"; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Structs/WindowPlacement.cs b/ToastifyAPI/Native/Structs/WindowPlacement.cs new file mode 100644 index 00000000..d31e8c09 --- /dev/null +++ b/ToastifyAPI/Native/Structs/WindowPlacement.cs @@ -0,0 +1,20 @@ +using System.Drawing; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Native.Structs +{ + public struct WindowPlacement + { + public int length; + public int flags; + public ShowWindowCmd showCmd; + public Point ptMinPosition; + public Point ptMaxPosition; + public Rectangle rcNormalPosition; + + public override string ToString() + { + return $"{this.length},{this.flags},{this.showCmd},{this.ptMinPosition},{this.ptMaxPosition},{this.rcNormalPosition}"; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/User32.cs b/ToastifyAPI/Native/User32.cs new file mode 100644 index 00000000..4bce0052 --- /dev/null +++ b/ToastifyAPI/Native/User32.cs @@ -0,0 +1,205 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; +using ToastifyAPI.Native.Delegates; +using ToastifyAPI.Native.Enums; +using ToastifyAPI.Native.Structs; + +namespace ToastifyAPI.Native +{ + public static class User32 + { + [DllImport("user32.dll")] + public static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + + [DllImport("user32.dll", SetLastError = true)] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); + + [DllImport("user32.dll")] + public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCmd nCmdShow); + + [DllImport("user32.dll")] + internal static extern bool UpdateWindow(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern IntPtr GetMenu(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + internal static extern IntPtr GetParent(IntPtr hWnd); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); + + [DllImport("user32.dll")] + public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + internal static extern int GetWindowTextLength(IntPtr hWnd); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); + + [DllImport("user32.dll", EntryPoint = "GetWindowLong")] + public static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, GWL nIndex); + + [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] + public static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, GWL nIndex); + + [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)] + public static extern int SetWindowLongPtr32(IntPtr hWnd, GWL nIndex, int dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)] + public static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, GWL nIndex, IntPtr dwNewLong); + + [DllImport("user32.dll")] + public static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll")] + public static extern bool SetForegroundWindow(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + public static extern IntPtr GetShellWindow(); + + [DllImport("user32.dll")] + public static extern bool GetClientRect(IntPtr hWnd, out Rect lpRect); + + [DllImport("user32.dll")] + public static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl); + + [DllImport("user32.dll", SetLastError = true)] + internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags); + + /// + /// Installs an application-defined hook procedure into a hook chain. + /// + /// The type of hook procedure to be installed. + /// + /// A pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread + /// created by a different process, the lpfn parameter must point to a hook procedure in a DLL. + /// Otherwise, lpfn can point to a hook procedure in the code associated with the current process. + /// + /// + /// A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be + /// set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure + /// is within the code associated with the current process. + /// + /// + /// The identifier of the thread with which the hook procedure is to be associated. For desktop apps, if this parameter + /// is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread. + /// + /// If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. + [DllImport("user32.dll", SetLastError = true)] + internal static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId); + + /// + /// Installs an application-defined hook procedure into a hook chain. + /// + /// The type of hook procedure to be installed. + /// + /// A pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread + /// created by a different process, the lpfn parameter must point to a hook procedure in a DLL. + /// Otherwise, lpfn can point to a hook procedure in the code associated with the current process. + /// + /// + /// A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be + /// set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure + /// is within the code associated with the current process. + /// + /// + /// The identifier of the thread with which the hook procedure is to be associated. For desktop apps, if this parameter + /// is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread. + /// + /// If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. + [DllImport("user32.dll", SetLastError = true)] + public static extern IntPtr SetWindowsHookEx(HookType hookType, LowLevelMouseHookProc lpfn, IntPtr hMod, uint dwThreadId); + + /// + /// Removes a hook procedure installed in a hook chain by the SetWindowsHookEx function. + /// + /// A handle to the hook to be removed. This parameter is a hook handle obtained by a previous call to . + /// true or nonzero if the function succeeds, false or zero if the function fails. + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool UnhookWindowsHookEx(IntPtr hhk); + + /// + /// Passes the hook information to the next hook procedure in the current hook chain. + /// A hook procedure can call this function either before or after processing the hook information. + /// + /// This parameter is ignored. + /// + /// The hook code passed to the current hook procedure. + /// The next hook procedure uses this code to determine how to process the hook information. + /// + /// The wParam value passed to the current hook procedure. + /// The lParam value passed to the current hook procedure. + /// The meaning of the return value depends on the hook type. + /// + /// + /// Hook procedures are installed in chains for particular hook types. + /// calls the next hook in the chain. + /// + /// + /// Calling CallNextHookEx is optional, but it is highly recommended; otherwise, other applications that have + /// installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call + /// unless you absolutely need to prevent the notification + /// from being seen by other applications. + /// + /// + [DllImport("user32.dll")] + internal static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); + + // overload for use with LowLevelMouseProc + [DllImport("user32.dll")] + public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, WindowsMessagesFlags wParam, [In] LowLevelMouseHookStruct lParam); + + [DllImport("user32.dll")] + public static extern IntPtr SetFocus(IntPtr hWnd); + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern bool SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + internal static extern bool SendMessageCallback(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam, SendMessageDelegate lpCallBack, UIntPtr dwData); + + [DllImport("user32.dll")] + public static extern uint MapVirtualKey(uint uCode, MapVirtualKeyType uMapType); + + [DllImport("user32.dll")] + internal static extern uint MapVirtualKeyEx(uint uCode, MapVirtualKeyType uMapType, IntPtr dwhkl); + + [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] + public static extern void KeyboardEvent(VirtualKeyCode virtualKey, byte scanCode, uint flags, IntPtr extraInfo); + + [DllImport("user32.dll")] + internal static extern IntPtr GetDC(IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC); + } +} \ No newline at end of file diff --git a/ToastifyAPI/Native/Windows.cs b/ToastifyAPI/Native/Windows.cs new file mode 100644 index 00000000..9286c4bc --- /dev/null +++ b/ToastifyAPI/Native/Windows.cs @@ -0,0 +1,200 @@ +using ManagedWinapi; +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Windows.Input; +using ToastifyAPI.Helpers; +using ToastifyAPI.Native.Enums; + +namespace ToastifyAPI.Native +{ + public static class Windows + { + public static IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex) + { + return IntPtr.Size == 4 ? User32.GetWindowLongPtr32(hWnd, nIndex) : User32.GetWindowLongPtr64(hWnd, nIndex); + } + + internal static IntPtr SetWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwNewLong) + { + return IntPtr.Size == 4 ? new IntPtr(User32.SetWindowLongPtr32(hWnd, nIndex, dwNewLong.ToInt32())) : User32.SetWindowLongPtr64(hWnd, nIndex, dwNewLong); + } + + public static List GetChildWindows(IntPtr parent) + { + List result = new List(); + GCHandle listHandle = GCHandle.Alloc(result); + try + { + User32.EnumChildWindows( + parent, + (hWnd, lParam) => + { + GCHandle gch = GCHandle.FromIntPtr(lParam); + if (!(gch.Target is List list)) + throw new InvalidCastException("GCHandle Target could not be cast as List"); + list.Add(hWnd); + return true; + }, + GCHandle.ToIntPtr(listHandle)); + } + finally + { + if (listHandle.IsAllocated) + listHandle.Free(); + } + return result; + } + + public static List GetProcessWindows(uint processId) + { + return GetProcessWindows(processId, null); + } + + public static List GetProcessWindows(uint processId, string lpClassName) + { + List result = new List(); + User32.EnumWindows((hWnd, lParam) => + { + User32.GetWindowThreadProcessId(hWnd, out uint pid); + if (pid == processId) + { + if (lpClassName != null && GetClassName(hWnd) == lpClassName) + result.Add(hWnd); + else if (lpClassName == null) + result.Add(hWnd); + } + return true; + }, IntPtr.Zero); + return result; + } + + public static string GetClassName(IntPtr hWnd) + { + StringBuilder sb = new StringBuilder(256); + User32.GetClassName(hWnd, sb, 256); + return sb.ToString(); + } + + /// + /// Finds a thread's window by its class name. + /// + /// The id of the thread. + /// The class name. + /// A handle to the window. + public static IntPtr FindThreadWindowByClassName(uint dwThreadId, string lpClassName) + { + IntPtr searchedHWnd = IntPtr.Zero; + + User32.EnumThreadWindows( + dwThreadId, + (hWnd, lParam) => + { + if (hWnd == IntPtr.Zero) + return true; + + string className = GetClassName(hWnd); + if (className == lpClassName) + { + searchedHWnd = hWnd; + return false; + } + return true; + }, + IntPtr.Zero); + + return searchedHWnd; + } + + private static void AddWindowLongPtr(IntPtr hWnd, GWL nIndex, IntPtr dwLong) + { + long longPtr = (long)GetWindowLongPtr(hWnd, nIndex); + longPtr |= (long)dwLong; + SetWindowLongPtr(hWnd, nIndex, (IntPtr)longPtr); + } + + public static void AddToolWindowStyle(IntPtr hWnd) + { + AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)ExtendedWindowStylesFlags.WS_EX_TOOLWINDOW); + } + + public static void AddVisibleWindowStyle(IntPtr hWnd) + { + AddWindowLongPtr(hWnd, GWL.GWL_EXSTYLE, (IntPtr)WindowStylesFlags.WS_VISIBLE); + } + + public static uint GetProcessFromWindowHandle(IntPtr hWnd) + { + User32.GetWindowThreadProcessId(hWnd, out uint pid); + return pid; + } + + public static string GetWindowTitle(IntPtr hWnd) + { + const int nMaxCount = 256; + StringBuilder lpString = new StringBuilder(nMaxCount); + return User32.GetWindowText(hWnd, lpString, nMaxCount) > 0 ? lpString.ToString() : String.Empty; + } + + public static bool SendWindowMessage(IntPtr hWnd, WindowsMessagesFlags msg, IntPtr wParam, IntPtr lParam, bool postMessage = false) + { + return postMessage ? User32.PostMessage(hWnd, (uint)msg, wParam, lParam) : User32.SendMessage(hWnd, (uint)msg, wParam, lParam); + } + + public static bool SendAppCommandMessage(IntPtr hWnd, IntPtr lParam, bool postMessage = false) + { + return SendWindowMessage(hWnd, WindowsMessagesFlags.WM_APPCOMMAND, IntPtr.Zero, lParam, postMessage); + } + + public static bool SendKeyDown(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) + { + const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYDOWN; + IntPtr wParam = (IntPtr)key.GetVirtualKey(); + IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0)); + + return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); + } + + public static bool SendKeyUp(IntPtr hWnd, Key key, bool postMessage = false, bool extended = false) + { + const WindowsMessagesFlags msg = WindowsMessagesFlags.WM_KEYUP; + IntPtr wParam = (IntPtr)key.GetVirtualKey(); + IntPtr lParam = (IntPtr)key.GetLParam(extended: (byte)(extended ? 1 : 0), previousState: 1, transitionState: 1); + + return SendWindowMessage(hWnd, msg, wParam, lParam, postMessage); + } + + public static void SendPasteKey() + { + var shiftKey = new KeyboardKey(Keys.ShiftKey); + var altKey = new KeyboardKey(Keys.Alt); + var ctrlKey = new KeyboardKey(Keys.ControlKey); + var vKey = new KeyboardKey(Keys.V); + + // Before injecting a paste command, first make sure that no modifiers are already + // being pressed (which will throw off the Ctrl+v). + // Since key state is notoriously unreliable, set a max sleep so that we don't get stuck + var maxSleep = 250; + + // minimum sleep time + Thread.Sleep(150); + + while (maxSleep > 0 && (shiftKey.State != 0 || altKey.State != 0 || ctrlKey.State != 0)) + { + Thread.Sleep(maxSleep); + maxSleep -= 50; + } + + // Press keys in sequence. Don't use PressAndRelease since that seems to be too fast for most applications and the sequence gets lost. + ctrlKey.Press(); + vKey.Press(); + Thread.Sleep(25); + vKey.Release(); + Thread.Sleep(25); + ctrlKey.Release(); + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/Spotify.cs b/ToastifyAPI/Spotify.cs index 47d0ca96..94d2efe7 100644 --- a/ToastifyAPI/Spotify.cs +++ b/ToastifyAPI/Spotify.cs @@ -1,11 +1,27 @@ -using Microsoft.Win32; +using log4net; +using Microsoft.Win32; using System; +using System.Collections.Generic; +using System.Diagnostics; using System.IO; +using System.Linq; +using ToastifyAPI.Native; namespace ToastifyAPI { public static partial class Spotify { + private static readonly ILog logger = LogManager.GetLogger(typeof(Spotify)); + + /// + /// List of names the Spotify main window had across different versions of the software. + /// + private static readonly List spotifyMainWindowNames = new List + { + "SpotifyMainWindow", + "Chrome_WidgetWin_0" // Since v1.0.75.483.g7ff4a0dc + }; + public static string GetSpotifyPath() { string spotifyPath = GetSpotifyPath_common() ?? GetSpotifyPath_platform(); @@ -29,5 +45,59 @@ private static string GetSpotifyPath_common() return spotifyPath; } + + public static Process FindSpotifyProcess() + { + if (logger.IsDebugEnabled) + logger.Debug("Looking for Spotify process..."); + + var spotifyProcesses = Process.GetProcessesByName("spotify").ToList(); + var windowedProcesses = spotifyProcesses.Where(p => p.MainWindowHandle != IntPtr.Zero).ToList(); + + if (windowedProcesses.Count > 1) + { + var classNames = windowedProcesses.Select(p => $"\"{Windows.GetClassName(p.MainWindowHandle)}\""); + logger.Warn($"More than one ({windowedProcesses.Count}) \"spotify\" process has a non-null main window: {string.Join(", ", classNames)}"); + } + + var process = windowedProcesses.FirstOrDefault(); + + // If none of the Spotify processes found has a valid MainWindowHandle, + // then Spotify has probably been minimized to the tray: we need to check every window. + if (process == null) + { + foreach (var p in spotifyProcesses) + { + var processWindows = Windows.GetProcessWindows((uint)p.Id); + IntPtr hWnd = processWindows.FirstOrDefault(h => spotifyMainWindowNames.Contains(Windows.GetClassName(h))); + if (hWnd != IntPtr.Zero) + return p; + } + } + + return process; + } + + public static IntPtr GetMainWindowHandle(uint pid) + { + if (pid == 0) + return IntPtr.Zero; + + var windows = Windows.GetProcessWindows(pid); + var possibleMainWindows = windows.Where(h => + { + string className = Windows.GetClassName(h); + string windowName = Windows.GetWindowTitle(h); + return !string.IsNullOrWhiteSpace(windowName) && spotifyMainWindowNames.Contains(className); + }).ToList(); + + if (possibleMainWindows.Count > 1) + { + var classNames = possibleMainWindows.Select(h => $"\"{Windows.GetClassName(h)}\""); + logger.Warn($"More than one ({possibleMainWindows.Count}) possible main windows located for Spotify: {string.Join(", ", classNames)}"); + } + + return possibleMainWindows.FirstOrDefault(); + } } } \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 33a98ca3..e4121e8f 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -14,7 +14,6 @@ 512 - true bin\AnyCPU\Debug\Windows\ @@ -33,7 +32,6 @@ prompt MinimumRecommendedRules.ruleset - bin\AnyCPU\Release\Windows\ TRACE @@ -50,7 +48,6 @@ prompt MinimumRecommendedRules.ruleset - bin\AnyCPU\Test Release\Windows\ TRACE;TEST_RELEASE @@ -67,7 +64,6 @@ prompt MinimumRecommendedRules.ruleset - true bin\AnyCPU\Debug\Windows 10\ @@ -86,7 +82,6 @@ prompt MinimumRecommendedRules.ruleset - bin\AnyCPU\Release\Windows 10\ TRACE;WIN_10 @@ -103,7 +98,6 @@ prompt MinimumRecommendedRules.ruleset - bin\AnyCPU\Test Release\Windows 10\ TRACE;WIN_10;TEST_RELEASE @@ -120,7 +114,6 @@ prompt MinimumRecommendedRules.ruleset - @@ -145,10 +138,44 @@ + + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + + + ..\Toastify\ManagedWinapi.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -158,6 +185,10 @@ + + + + \ No newline at end of file diff --git a/ToastifyAPI/packages.config b/ToastifyAPI/packages.config new file mode 100644 index 00000000..f651f6c5 --- /dev/null +++ b/ToastifyAPI/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 0f01a34768cd990f658fcb7b45d4384e67284cd8 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 15:28:43 +0200 Subject: [PATCH 262/452] Cherrypick of 8e09e54 from local branch "issue#49_service" --- InstallationScript/Install.nsi | 9 ++++++--- Toastify/Toastify.csproj | 4 ++++ ToastifyAPI/Spotify.cs | 22 +++++++++++++--------- ToastifyAPI/ToastifyAPI.csproj | 8 ++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index d078f9f4..f6a8864f 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -61,12 +61,11 @@ Section "Toastify (required)" # Bundle the files ${If} ${IsWin10} File /oname=ToastifyAPI.dll "ToastifyAPI_UWP.dll" + File /oname=ToastifyAPI.pdb "ToastifyAPI_UWP.pdb" ${Else} File /oname=ToastifyAPI.dll "ToastifyAPI_Win32.dll" + File /oname=ToastifyAPI.pdb "ToastifyAPI_Win32.pdb" ${EndIf} - - # Remove files belonging to old versions - Delete "$INSTDIR\Garlic.dll" File "Toastify.exe" File "Toastify.exe.config" @@ -81,6 +80,9 @@ Section "Toastify (required)" File "Xceed.Wpf.Toolkit.dll" File "LICENSE" File "LICENSE-3RD-PARTY" + + # Remove files belonging to old versions + Delete "$INSTDIR\Garlic.dll" # Write the uninstall keys for Windows WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" "DisplayName" "Toastify" @@ -124,6 +126,7 @@ Section "Uninstall" Delete "$INSTDIR\Toastify.exe.config" Delete "$INSTDIR\Toastify.pdb" Delete "$INSTDIR\ToastifyAPI.dll" + Delete "$INSTDIR\ToastifyAPI.pdb" Delete "$INSTDIR\GoogleMeasurementProtocol.dll" Delete "$INSTDIR\log4net.dll" Delete "$INSTDIR\ManagedWinapi.dll" diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index e9ec879b..4228ff81 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -339,9 +339,13 @@ + + + + "$(ProjectDir)post-build.cmd" "$(ConfigurationName)" "$(DevEnvDir)" "$(SolutionDir)" "$(TargetDir)" "$(TargetFileName)" diff --git a/ToastifyAPI/Spotify.cs b/ToastifyAPI/Spotify.cs index 94d2efe7..14c0ed7a 100644 --- a/ToastifyAPI/Spotify.cs +++ b/ToastifyAPI/Spotify.cs @@ -5,7 +5,6 @@ using System.Diagnostics; using System.IO; using System.Linq; -using ToastifyAPI.Native; namespace ToastifyAPI { @@ -56,7 +55,7 @@ public static Process FindSpotifyProcess() if (windowedProcesses.Count > 1) { - var classNames = windowedProcesses.Select(p => $"\"{Windows.GetClassName(p.MainWindowHandle)}\""); + var classNames = windowedProcesses.Select(p => $"\"{Native.Windows.GetClassName(p.MainWindowHandle)}\""); logger.Warn($"More than one ({windowedProcesses.Count}) \"spotify\" process has a non-null main window: {string.Join(", ", classNames)}"); } @@ -68,9 +67,7 @@ public static Process FindSpotifyProcess() { foreach (var p in spotifyProcesses) { - var processWindows = Windows.GetProcessWindows((uint)p.Id); - IntPtr hWnd = processWindows.FirstOrDefault(h => spotifyMainWindowNames.Contains(Windows.GetClassName(h))); - if (hWnd != IntPtr.Zero) + if (IsMainSpotifyProcess((uint)p.Id)) return p; } } @@ -83,21 +80,28 @@ public static IntPtr GetMainWindowHandle(uint pid) if (pid == 0) return IntPtr.Zero; - var windows = Windows.GetProcessWindows(pid); + var windows = Native.Windows.GetProcessWindows(pid); var possibleMainWindows = windows.Where(h => { - string className = Windows.GetClassName(h); - string windowName = Windows.GetWindowTitle(h); + string className = Native.Windows.GetClassName(h); + string windowName = Native.Windows.GetWindowTitle(h); return !string.IsNullOrWhiteSpace(windowName) && spotifyMainWindowNames.Contains(className); }).ToList(); if (possibleMainWindows.Count > 1) { - var classNames = possibleMainWindows.Select(h => $"\"{Windows.GetClassName(h)}\""); + var classNames = possibleMainWindows.Select(h => $"\"{Native.Windows.GetClassName(h)}\""); logger.Warn($"More than one ({possibleMainWindows.Count}) possible main windows located for Spotify: {string.Join(", ", classNames)}"); } return possibleMainWindows.FirstOrDefault(); } + + public static bool IsMainSpotifyProcess(uint pid) + { + var windows = Native.Windows.GetProcessWindows(pid); + IntPtr hWnd = windows.FirstOrDefault(h => spotifyMainWindowNames.Contains(Native.Windows.GetClassName(h))); + return hWnd != IntPtr.Zero; + } } } \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index e4121e8f..fa02be0a 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -39,6 +39,8 @@ AnyCPU prompt MinimumRecommendedRules.ruleset + pdbonly + true bin\x64\Release\Windows\ @@ -55,6 +57,8 @@ AnyCPU prompt MinimumRecommendedRules.ruleset + full + true bin\x64\Test Release\Windows\ @@ -89,6 +93,8 @@ AnyCPU prompt MinimumRecommendedRules.ruleset + pdbonly + true bin\x64\Release\Windows 10\ @@ -105,6 +111,8 @@ AnyCPU prompt MinimumRecommendedRules.ruleset + full + true bin\x64\Test Release\Windows 10\ From 602dc561845cbb460d3870d30e6f07384f67d7e9 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 16:22:24 +0200 Subject: [PATCH 263/452] Fix App.CurrentVersion and VersionChecker.CurrentVersion --- Toastify/src/App.xaml.cs | 7 +++---- Toastify/src/Services/VersionChecker.cs | 6 ++++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 03a04143..a0bfb841 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -80,7 +80,7 @@ private static void ProcessCommandLineArguments(string[] args) { try { - AppArgs = args!= null && args.Length > 0 ? Args.Parse(args) : new MainArgs(); + AppArgs = args != null && args.Length > 0 ? Args.Parse(args) : new MainArgs(); } catch (Exception e) { @@ -250,7 +250,7 @@ private static void StartupTask() } } } - + [TabCompletion] internal class MainArgs { @@ -296,8 +296,7 @@ public static string CurrentVersion get { Assembly assembly = Assembly.GetExecutingAssembly(); - FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); - return fileVersionInfo.FileVersion; + return assembly.GetName().Version.ToString(); } } diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 2a6ebc95..2b5b0628 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -33,8 +33,10 @@ public static string CurrentVersion if (_version != null) { - var thirdDot = _version.LastIndexOf('.'); - _version = _version.Substring(0, thirdDot); + Regex regex = new Regex(@"([0-9]+\.[0-9]+\.[0-9]+)(?:\.[0-9]+)*"); + Match match = regex.Match(_version); + if (match.Success) + _version = match.Groups[1].Value; } } From 2b43bf4b72e0ab241b09b0fc679e4d6d842d82d8 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 21:06:43 +0200 Subject: [PATCH 264/452] Fix little error --- Toastify/src/Model/HotKey.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index aa5466e0..87152250 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -387,7 +387,7 @@ private void CheckIfValid() } else if (!this.KeyOrButton.IsKey && (this.KeyOrButton.MouseButton == MouseAction.MWheelUp || this.KeyOrButton.MouseButton == MouseAction.MWheelDown) && - !this.Shift & !this.Ctrl && !this.Alt) + !this.Shift && !this.Ctrl && !this.Alt) { this.IsValid = false; this.InvalidReason = $"You must use at leat one modifier key with {this.KeyOrButton.MouseButton}"; From 33add544e96c9fcefb300f09609d87814ca9fbe1 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 23:33:44 +0200 Subject: [PATCH 265/452] Minor change --- Toastify/src/Core/Spotify.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index de29febd..68ed6eb2 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -453,7 +453,7 @@ private IntPtr GetMainWindowHandle() if (this.spotifyProcess == null) this.spotifyProcess = ToastifyAPI.Spotify.FindSpotifyProcess(); - return this.spotifyProcess == null ? IntPtr.Zero : ToastifyAPI.Spotify.GetMainWindowHandle((uint)this.spotifyProcess.Id); + return this.spotifyProcess == null ? IntPtr.Zero : ToastifyAPI.Spotify.GetMainWindowHandle(unchecked((uint)this.spotifyProcess.Id)); } public void SendAction(ToastifyAction action) From 864bc2a5633cd3e18c4f0a812b89598d1c46dbc5 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Tue, 27 Mar 2018 23:46:34 +0200 Subject: [PATCH 266/452] Create small GitHub REST APIs wrapper --- ToastifyAPI/GitHub/GitHubAPI.cs | 44 +++++++++++++++++++ ToastifyAPI/GitHub/Model/BaseModel.cs | 12 ++++++ ToastifyAPI/GitHub/Model/Release.cs | 62 +++++++++++++++++++++++++++ ToastifyAPI/GitHub/Releases.cs | 13 ++++++ ToastifyAPI/ToastifyAPI.csproj | 8 ++++ ToastifyAPI/packages.config | 1 + 6 files changed, 140 insertions(+) create mode 100644 ToastifyAPI/GitHub/GitHubAPI.cs create mode 100644 ToastifyAPI/GitHub/Model/BaseModel.cs create mode 100644 ToastifyAPI/GitHub/Model/Release.cs create mode 100644 ToastifyAPI/GitHub/Releases.cs diff --git a/ToastifyAPI/GitHub/GitHubAPI.cs b/ToastifyAPI/GitHub/GitHubAPI.cs new file mode 100644 index 00000000..2a74ed89 --- /dev/null +++ b/ToastifyAPI/GitHub/GitHubAPI.cs @@ -0,0 +1,44 @@ +using Newtonsoft.Json; +using System.Net.Http; +using System.Text; +using ToastifyAPI.GitHub.Model; + +namespace ToastifyAPI.GitHub +{ + public class GitHubAPI + { + private static string ApiBase { get; } = "https://api.github.com"; + + public string Owner { get; set; } + + public string Repository { get; set; } + + private readonly Encoding encoding = Encoding.UTF8; + + public string GetFullEndpointUrl(string endpoint, params object[] args) + { + string ep = endpoint.Replace(":owner", this.Owner).Replace("{owner}", this.Owner) + .Replace(":repo", this.Repository).Replace("{repo}", this.Repository); + return args != null ? $"{ApiBase}{string.Format(ep, args)}" : $"{ApiBase}{ep}"; + } + + public T DownloadJson(string url) where T : BaseModel + { + using (HttpClient http = new HttpClient()) + { + http.DefaultRequestHeaders.Add("User-Agent", "aleab/toastify"); + + using (HttpResponseMessage response = http.GetAsync(url).Result) + { + byte[] raw = response.Content.ReadAsByteArrayAsync().Result; + string json = raw.Length > 0 ? this.encoding.GetString(raw) : "{}"; + + T result = JsonConvert.DeserializeObject(json); + result.HttpResponseHeaders = response.Headers; + result.HttpStatusCode = response.StatusCode; + return result; + } + } + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Model/BaseModel.cs b/ToastifyAPI/GitHub/Model/BaseModel.cs new file mode 100644 index 00000000..d12eefb2 --- /dev/null +++ b/ToastifyAPI/GitHub/Model/BaseModel.cs @@ -0,0 +1,12 @@ +using System.Net; +using System.Net.Http.Headers; + +namespace ToastifyAPI.GitHub.Model +{ + public abstract class BaseModel + { + public HttpResponseHeaders HttpResponseHeaders { get; set; } + + public HttpStatusCode HttpStatusCode { get; set; } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Model/Release.cs b/ToastifyAPI/GitHub/Model/Release.cs new file mode 100644 index 00000000..eb0778a9 --- /dev/null +++ b/ToastifyAPI/GitHub/Model/Release.cs @@ -0,0 +1,62 @@ +using Newtonsoft.Json; +using System; + +namespace ToastifyAPI.GitHub.Model +{ + [Serializable] + public class Release : BaseModel + { + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("html_url")] + public string HtmlUrl { get; set; } + + [JsonProperty("assets_url")] + public string AssetsUrl { get; set; } + + [JsonProperty("upload_url")] + public string UploadUrl { get; set; } + + [JsonProperty("tarball_url")] + public string TarballUrl { get; set; } + + [JsonProperty("zipball_url")] + public string ZipballUrl { get; set; } + + [JsonProperty("id")] + public int Id { get; set; } + + [JsonProperty("tag_name")] + public string TagName { get; set; } + + [JsonProperty("target_commitish")] + public string TargetCommitish { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("body")] + public string Body { get; set; } + + [JsonProperty("draft")] + public bool IsDraft { get; set; } + + [JsonProperty("prerelease")] + public bool IsPreRelease { get; set; } + + [JsonProperty("created_at")] + public DateTime? CreatedAt { get; set; } + + [JsonProperty("published_at")] + public DateTime? PublishedAt { get; set; } + + // TODO: Author object + //[JsonProperty("author")] + //public Author Author { get; set; } + + // TODO: Asset object + //[JsonProperty("assets")] + //public List Assets { get; set; } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs new file mode 100644 index 00000000..72e998d1 --- /dev/null +++ b/ToastifyAPI/GitHub/Releases.cs @@ -0,0 +1,13 @@ +using ToastifyAPI.GitHub.Model; + +namespace ToastifyAPI.GitHub +{ + public static class Releases + { + public static Release GetByTagName(this GitHubAPI api, string tag) + { + string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}"); + return api.DownloadJson(url); + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index fa02be0a..e2cb074b 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -152,13 +152,21 @@ ..\Toastify\ManagedWinapi.dll + + ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + + + + + + diff --git a/ToastifyAPI/packages.config b/ToastifyAPI/packages.config index f651f6c5..cb18c55e 100644 --- a/ToastifyAPI/packages.config +++ b/ToastifyAPI/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file From 7b1ba477c7773662c65ff63f2d75a956624de3ce Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 29 Mar 2018 01:00:16 +0200 Subject: [PATCH 267/452] Implement ChangelogView --- Toastify/Toastify.csproj | 14 + Toastify/src/App.xaml.cs | 39 +- .../src/Helpers/Markdown/Markdown.Styles.xaml | 66 ++ Toastify/src/Helpers/Markdown/Markdown.cs | 983 ++++++++++++++++++ .../Markdown/TextToFlowDocumentConverter.cs | 40 + Toastify/src/View/ChangelogView.xaml | 52 + Toastify/src/View/ChangelogView.xaml.cs | 98 ++ Toastify/src/ViewModel/ChangelogViewModel.cs | 18 + ToastifyAPI/GitHub/GitHubAPI.cs | 221 +++- ToastifyAPI/GitHub/Model/Emoji.cs | 21 + ToastifyAPI/GitHub/Releases.cs | 15 +- ToastifyAPI/ToastifyAPI.csproj | 1 + 12 files changed, 1560 insertions(+), 8 deletions(-) create mode 100644 Toastify/src/Helpers/Markdown/Markdown.Styles.xaml create mode 100644 Toastify/src/Helpers/Markdown/Markdown.cs create mode 100644 Toastify/src/Helpers/Markdown/TextToFlowDocumentConverter.cs create mode 100644 Toastify/src/View/ChangelogView.xaml create mode 100644 Toastify/src/View/ChangelogView.xaml.cs create mode 100644 Toastify/src/ViewModel/ChangelogViewModel.cs create mode 100644 ToastifyAPI/GitHub/Model/Emoji.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 4228ff81..71bd03b0 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -173,6 +173,8 @@ + + @@ -199,18 +201,30 @@ + + + ChangelogView.xaml + DebugView.xaml + + Designer + MSBuild:Compile + Designer MSBuild:Compile MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index a0bfb841..aa6e46d6 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -9,6 +9,7 @@ using System.IO; using System.Linq; using System.Reflection; +using System.Text.RegularExpressions; using System.Threading; using System.Windows; using System.Xml.Serialization; @@ -19,6 +20,7 @@ using log4net.Core; using log4net.Filter; using log4net.Repository.Hierarchy; +using Toastify.Events; #if DEBUG @@ -33,6 +35,8 @@ public static class EntryPoint { private static readonly ILog logger = LogManager.GetLogger(typeof(EntryPoint)); + private static string previousVersion = string.Empty; + private static MainArgs AppArgs { get; set; } [STAThread] @@ -154,7 +158,9 @@ private static void PrepareToRun() LoadSettings(); StartupTask(); Analytics.Init(); - Settings.Current.PreviousVersion = VersionChecker.CurrentVersion; + + previousVersion = Settings.Current.PreviousVersion; + Settings.Current.PreviousVersion = App.CurrentVersionNoRevision; Settings.Current.Save(); } @@ -167,6 +173,9 @@ private static void RunApp() DebugView.Launch(); #endif + Spotify.Instance.Connected -= Spotify_Connected; + Spotify.Instance.Connected += Spotify_Connected; + app.Run(); } @@ -251,6 +260,17 @@ private static void StartupTask() } } + private static void Spotify_Connected(object sender, SpotifyStateEventArgs spotifyStateEventArgs) + { + // Show the changelog if necessary + if (!string.IsNullOrWhiteSpace(previousVersion)) + { + Version previous = new Version(previousVersion); + if (previous < new Version(App.CurrentVersionNoRevision)) + ChangelogView.Launch(); + } + } + [TabCompletion] internal class MainArgs { @@ -300,6 +320,23 @@ public static string CurrentVersion } } + public static string CurrentVersionNoRevision + { + get + { + string version = CurrentVersion; + if (version != null) + { + Regex regex = new Regex(@"([0-9]+\.[0-9]+\.[0-9]+)(?:\.[0-9]+)*"); + Match match = regex.Match(version); + if (match.Success) + version = match.Groups[1].Value; + } + + return version; + } + } + public static string SpotifyParameters { get; private set; } public App() : this("") diff --git a/Toastify/src/Helpers/Markdown/Markdown.Styles.xaml b/Toastify/src/Helpers/Markdown/Markdown.Styles.xaml new file mode 100644 index 00000000..fefe82e9 --- /dev/null +++ b/Toastify/src/Helpers/Markdown/Markdown.Styles.xaml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Toastify/src/Helpers/Markdown/Markdown.cs b/Toastify/src/Helpers/Markdown/Markdown.cs new file mode 100644 index 00000000..cd63a6c5 --- /dev/null +++ b/Toastify/src/Helpers/Markdown/Markdown.cs @@ -0,0 +1,983 @@ +/* + * All credits go to @theunrepentantgeek (https://github.com/theunrepentantgeek): + * https://github.com/theunrepentantgeek/Markdown.XAML + */ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Markup; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Toastify.Helpers.Markdown +{ + public class Markdown : DependencyObject + { + /// + /// Maximum nested depth of [] and () supported by the transform; implementation detail + /// + private const int NEST_DEPTH = 6; + + /// + /// Tabs are automatically converted to spaces as part of the transform + /// this constant determines how "wide" those tabs become in spaces + /// + private const int TAB_WIDTH = 4; + + private const string MARKER_UL = @"[*+-]"; + private const string MARKER_OL = @"\d+[.]"; + + private int listLevel; + + #region DependencyProperty's + + public static readonly DependencyProperty DocumentStyleProperty = DependencyProperty.Register("DocumentStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty TextStyleProperty = DependencyProperty.Register("TextStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty Heading1StyleProperty = DependencyProperty.Register("Heading1Style", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty Heading2StyleProperty = DependencyProperty.Register("Heading2Style", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty Heading3StyleProperty = DependencyProperty.Register("Heading3Style", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty Heading4StyleProperty = DependencyProperty.Register("Heading4Style", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty CodeTextStyleProperty = DependencyProperty.Register("CodeTextStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty CodeBorderStyleProperty = DependencyProperty.Register("CodeBorderStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty LinkStyleProperty = DependencyProperty.Register("LinkStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty ImageStyleProperty = DependencyProperty.Register("ImageStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty SeparatorStyleProperty = DependencyProperty.Register("SeparatorStyle", typeof(Style), typeof(Markdown), new PropertyMetadata(null)); + + public static readonly DependencyProperty AssetPathRootProperty = DependencyProperty.Register("AssetPathRootRoot", typeof(string), typeof(Markdown), new PropertyMetadata(null)); + + #endregion DependencyProperty's + + #region Public properties + + /// + /// when true, bold and italics require non-word characters on either side + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool StrictBoldItalic { get; set; } + + public Style DocumentStyle + { + get { return (Style)this.GetValue(DocumentStyleProperty); } + set { this.SetValue(DocumentStyleProperty, value); } + } + + public Style TextStyle + { + get { return (Style)this.GetValue(TextStyleProperty); } + set { this.SetValue(TextStyleProperty, value); } + } + + public Style Heading1Style + { + get { return (Style)this.GetValue(Heading1StyleProperty); } + set { this.SetValue(Heading1StyleProperty, value); } + } + + public Style Heading2Style + { + get { return (Style)this.GetValue(Heading2StyleProperty); } + set { this.SetValue(Heading2StyleProperty, value); } + } + + public Style Heading3Style + { + get { return (Style)this.GetValue(Heading3StyleProperty); } + set { this.SetValue(Heading3StyleProperty, value); } + } + + public Style Heading4Style + { + get { return (Style)this.GetValue(Heading4StyleProperty); } + set { this.SetValue(Heading4StyleProperty, value); } + } + + public Style CodeTextStyle + { + get { return (Style)this.GetValue(CodeTextStyleProperty); } + set { this.SetValue(CodeTextStyleProperty, value); } + } + + public Style CodeBorderStyle + { + get { return (Style)this.GetValue(CodeBorderStyleProperty); } + set { this.SetValue(CodeBorderStyleProperty, value); } + } + + public Style LinkStyle + { + get { return (Style)this.GetValue(LinkStyleProperty); } + set { this.SetValue(LinkStyleProperty, value); } + } + + public Style ImageStyle + { + get { return (Style)this.GetValue(ImageStyleProperty); } + set { this.SetValue(ImageStyleProperty, value); } + } + + public Style SeparatorStyle + { + get { return (Style)this.GetValue(SeparatorStyleProperty); } + set { this.SetValue(SeparatorStyleProperty, value); } + } + + public string AssetPathRoot + { + get { return (string)this.GetValue(AssetPathRootProperty); } + set { this.SetValue(AssetPathRootProperty, value); } + } + + #endregion Public properties + + public FlowDocument Transform(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + text = this.Normalize(text); + var document = Create(this.RunBlockGamut(text)); + + if (this.DocumentStyle != null) + document.Style = this.DocumentStyle; + else + document.PagePadding = new Thickness(0); + + return document; + } + + /// + /// Perform transformations that form block-level tags like paragraphs, headers, and list items. + /// + private IEnumerable RunBlockGamut(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // ReSharper disable once ConvertClosureToMethodGroup + return this.DoHeaders(text, + s0 => this.DoHorizontalRules(s0, + s1 => this.DoLists(s1, + s2 => this.FormParagraphs(s2)))); + } + + /// + /// Perform transformations that occur *within* block-level tags like paragraphs, headers, and list items. + /// + private IEnumerable RunSpanGamut(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // ReSharper disable once ConvertClosureToMethodGroup + return this.DoImages(text, + s0 => this.DoAnchors(s0, + s1 => this.DoItalicsAndBold(s1, + s2 => this.DoCodeSpans(s2, + s3 => this.DoText(s3))))); + } + + /// + /// Splits on two or more newlines, to form "paragraphs"; + /// + private IEnumerable FormParagraphs(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // split on two or more newlines + string[] grafs = newlinesMultipleRegex.Split(newlinesLeadingTrailingRegex.Replace(text, "")); + + foreach (var g in grafs) + { + yield return Create(this.RunSpanGamut(g)); + } + } + + /// + /// Reusable pattern to match balanced [brackets]. See Friedl's + /// "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + /// + private static string GetNestedBracketsPattern() + { + // in other words [this] and [this[also]] and [this[also[too]]] + // up to _nestDepth + return nestedBracketsPattern ?? (nestedBracketsPattern = + RepeatString(@" + (?> # Atomic matching + [^\[\]]+ # Anything other than brackets + | + \[ + ", NEST_DEPTH) + RepeatString( + @" \] + )*", NEST_DEPTH)); + } + + /// + /// Reusable pattern to match balanced (parens). See Friedl's + /// "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + /// + private static string GetNestedParensPattern() + { + // in other words (this) and (this(also)) and (this(also(too))) + // up to _nestDepth + return nestedParensPattern ?? (nestedParensPattern = + RepeatString(@" + (?> # Atomic matching + [^()\s]+ # Anything other than parens or whitespace + | + \( + ", NEST_DEPTH) + RepeatString( + @" \) + )*", NEST_DEPTH)); + } + + /// + /// Reusable pattern to match balanced (parens), including whitespace. See Friedl's + /// "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + /// + private static string GetNestedParensPatternWithWhiteSpace() + { + // in other words (this) and (this(also)) and (this(also(too))) + // up to _nestDepth + return nestedParensPatternWithWhiteSpace ?? (nestedParensPatternWithWhiteSpace = + RepeatString(@" + (?> # Atomic matching + [^()]+ # Anything other than parens + | + \( + ", NEST_DEPTH) + RepeatString( + @" \) + )*", NEST_DEPTH)); + } + + /// + /// Turn Markdown images into images + /// + /// + /// ![image alt](url) + /// + private IEnumerable DoImages(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + return this.Evaluate(text, imageInlineRegex, this.ImageInlineEvaluator, defaultHandler); + } + + private Inline ImageInlineEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string linkText = match.Groups[2].Value; + string url = match.Groups[3].Value; + BitmapImage imgSource; + try + { + if (!Uri.IsWellFormedUriString(url, UriKind.Absolute) && !System.IO.Path.IsPathRooted(url)) + url = System.IO.Path.Combine(this.AssetPathRoot ?? string.Empty, url); + + imgSource = new BitmapImage(new Uri(url, UriKind.RelativeOrAbsolute)); + } + catch (Exception) + { + return new Run("!" + url) { Foreground = Brushes.Red }; + } + + Image image = new Image { Source = imgSource, Tag = linkText }; + if (this.ImageStyle == null) + image.Margin = new Thickness(0); + else + image.Style = this.ImageStyle; + + // Bind size so document is updated when image is downloaded + if (imgSource.IsDownloading) + { + Binding binding = new Binding(nameof(BitmapImage.Width)) + { + Source = imgSource, + Mode = BindingMode.OneWay + }; + + BindingExpressionBase bindingExpression = BindingOperations.SetBinding(image, FrameworkElement.WidthProperty, binding); + + void DownloadCompletedHandler(object sender, EventArgs e) + { + imgSource.DownloadCompleted -= DownloadCompletedHandler; + bindingExpression.UpdateTarget(); + } + + imgSource.DownloadCompleted += DownloadCompletedHandler; + } + else + image.Width = imgSource.Width; + + return new InlineUIContainer(image); + } + + /// + /// Turn Markdown link shortcuts into hyperlinks + /// + /// + /// [link text](url "title") + /// + private IEnumerable DoAnchors(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // Next, inline-style links: [link text](url "optional title") or [link text](url "optional title") + return this.Evaluate(text, anchorInlineRegex, this.AnchorInlineEvaluator, defaultHandler); + } + + private Inline AnchorInlineEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string linkText = match.Groups[2].Value; + string url = match.Groups[3].Value; + + var result = Create(this.RunSpanGamut(linkText)); + result.NavigateUri = new Uri(url, UriKind.Absolute); + result.RequestNavigate += Hyperlink_RequestNavigate; + if (this.LinkStyle != null) + result.Style = this.LinkStyle; + + return result; + } + + /// + /// Turn Markdown headers into HTML header tags + /// + /// + /// Header 1 + /// ======== + /// + /// Header 2 + /// -------- + /// + /// # Header 1 + /// ## Header 2 + /// ## Header 2 with closing hashes ## + /// ... + /// ###### Header 6 + /// + private IEnumerable DoHeaders(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + return this.Evaluate(text, headerSetextRegex, this.SetextHeaderEvaluator, + s => this.Evaluate(s, headerAtxRegex, this.AtxHeaderEvaluator, defaultHandler)); + } + + private Block SetextHeaderEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string header = match.Groups[1].Value; + int level = match.Groups[2].Value.StartsWith("=") ? 1 : 2; + + //TODO: Style the paragraph based on the header level + return this.CreateHeader(level, this.RunSpanGamut(header.Trim())); + } + + private Block AtxHeaderEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string header = match.Groups[2].Value; + int level = match.Groups[1].Value.Length; + return this.CreateHeader(level, this.RunSpanGamut(header)); + } + + public Block CreateHeader(int level, IEnumerable content) + { + if (content == null) + throw new ArgumentNullException(nameof(content)); + + var block = Create(content); + + switch (level) + { + case 1: + if (this.Heading1Style != null) + block.Style = this.Heading1Style; + break; + + case 2: + if (this.Heading2Style != null) + block.Style = this.Heading2Style; + break; + + case 3: + if (this.Heading3Style != null) + block.Style = this.Heading3Style; + break; + + case 4: + if (this.Heading4Style != null) + block.Style = this.Heading4Style; + break; + } + + return block; + } + + /// + /// Turn Markdown horizontal rules into HTML hr tags + /// + /// + /// *** + /// * * * + /// --- + /// - - - + /// + private IEnumerable DoHorizontalRules(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + return this.Evaluate(text, horizontalRulesRegex, this.RuleEvaluator, defaultHandler); + } + + private Block RuleEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + Line line = new Line(); + if (this.SeparatorStyle == null) + { + line.X2 = 1; + line.StrokeThickness = 1.0; + } + else + line.Style = this.SeparatorStyle; + + var container = new BlockUIContainer(line); + return container; + } + + /// + /// Turn Markdown lists into HTML ul and ol and li tags + /// + private IEnumerable DoLists(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // We use a different prefix before nested lists than top-level lists. + // See extended comment in _ProcessListItems(). + return this.Evaluate(text, this.listLevel > 0 ? listNestedRegex : listTopLevelRegex, this.ListEvaluator, defaultHandler); + } + + private Block ListEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string list = match.Groups[1].Value; + string listType = Regex.IsMatch(match.Groups[3].Value, MARKER_UL) ? "ul" : "ol"; + + // Turn double returns into triple returns, so that we can make a + // paragraph for the last item in a list, if necessary: + list = Regex.Replace(list, @"\n{2,}", "\n\n\n"); + + var resultList = Create(this.ProcessListItems(list, listType == "ul" ? MARKER_UL : MARKER_OL)); + resultList.MarkerStyle = listType == "ul" ? TextMarkerStyle.Disc : TextMarkerStyle.Decimal; + + return resultList; + } + + /// + /// Process the contents of a single ordered or unordered list, splitting it + /// into individual list items. + /// + private IEnumerable ProcessListItems(string list, string marker) + { + // The listLevel global keeps track of when we're inside a list. + // Each time we enter a list, we increment it; when we leave a list, + // we decrement. If it's zero, we're not in a list anymore. + + // We do this because when we're not inside a list, we want to treat + // something like this: + + // I recommend upgrading to version + // 8. Oops, now this line is treated + // as a sub-list. + + // As a single paragraph, despite the fact that the second line starts + // with a digit-period-space sequence. + + // Whereas when we're inside a list (or sub-list), that line will be + // treated as the start of a sub-list. What a kludge, huh? This is + // an aspect of Markdown's syntax that's hard to parse perfectly + // without resorting to mind-reading. Perhaps the solution is to + // change the syntax rules such that sub-lists must start with a + // starting cardinal number; e.g. "1." or "a.". + + this.listLevel++; + try + { + // Trim trailing blank lines: + list = Regex.Replace(list, @"\n{2,}\z", "\n"); + + string pattern = string.Format( + @"(\n)? # leading line = $1 + (^[ ]*) # leading whitespace = $2 + ({0}) [ ]+ # list marker = $3 + ((?s:.+?) # list item text = $4 + (\n{{1,2}})) + (?= \n* (\z | \2 ({0}) [ ]+))", marker); + + var regex = new Regex(pattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); + var matches = regex.Matches(list); + foreach (Match m in matches) + { + yield return this.ListItemEvaluator(m); + } + } + finally + { + this.listLevel--; + } + } + + private ListItem ListItemEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string item = match.Groups[4].Value; + string leadingLine = match.Groups[1].Value; + + if (!string.IsNullOrEmpty(leadingLine) || Regex.IsMatch(item, @"\n{2,}")) + { + // we could correct any bad indentation here.. + return Create(this.RunBlockGamut(item)); + } + else + { + // recursion for sub-lists + return Create(this.RunBlockGamut(item)); + } + } + + #region old DoCodeSpans + + ///// + ///// Turn Markdown `code spans` into HTML code tags + ///// + //private IEnumerable DoCodeSpans(string text, Func> defaultHandler) + //{ + // if (text == null) + // throw new ArgumentNullException(nameof(text)); + + // // * You can use multiple backticks as the delimiters if you want to + // // include literal backticks in the code span. So, this input: + // // + // // Just type ``foo `bar` baz`` at the prompt. + // // + // // Will translate to: + // // + // //

    Just type foo `bar` baz at the prompt.

    + // // + // // There's no arbitrary limit to the number of backticks you + // // can use as delimters. If you need three consecutive backticks + // // in your code, use four for delimiters, etc. + // // + // // * You can use spaces to get literal backticks at the edges: + // // + // // ... type `` `bar` `` ... + // // + // // Turns to: + // // + // // ... type `bar` ... + // // + + // return this.Evaluate(text, codeSpanRegex, this.CodeSpanEvaluator, defaultHandler); + //} + + //private Inline CodeSpanEvaluator(Match match) + //{ + // if (match == null) + // throw new ArgumentNullException(nameof(match)); + + // string span = match.Groups[2].Value; + // span = Regex.Replace(span, @"^[ ]*", ""); // leading whitespace + // span = Regex.Replace(span, @"[ ]*$", ""); // trailing whitespace + + // var result = new Run(span); + // if (this.CodeTextStyle != null) + // result.Style = this.CodeTextStyle; + + // return result; + //} + + #endregion old DoCodeSpans + + /// + /// Turn Markdown `code spans` into HTML code tags + /// + private IEnumerable DoCodeSpans(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + return this.Evaluate(text, codeSpanRegex, this.CodeSpanEvaluator, defaultHandler); + } + + private Inline CodeSpanEvaluator(Match match) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + string span = match.Groups[2].Value; + span = Regex.Replace(span, @"^[ ]*", ""); // leading whitespace + span = Regex.Replace(span, @"[ ]*$", ""); // trailing whitespace + + Border border = new Border(); + if (this.CodeBorderStyle != null) + border.Style = this.CodeBorderStyle; + + TextBlock textBlock = new TextBlock { Text = span }; + if (this.CodeTextStyle != null) + textBlock.Style = this.CodeTextStyle; + + border.Child = textBlock; + return new InlineUIContainer(border); + } + + /// + /// Turn Markdown *italics* and **bold** into HTML strong and em tags + /// + private IEnumerable DoItalicsAndBold(string text, Func> defaultHandler) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + // must go first, then + if (this.StrictBoldItalic) + { + return this.Evaluate(text, strictBoldRegex, m => this.BoldEvaluator(m, 3), + s1 => this.Evaluate(s1, strictItalicsRegex, m => this.ItalicEvaluator(m, 3), + defaultHandler)); + } + else + { + return this.Evaluate(text, boldRegex, m => this.BoldEvaluator(m, 2), + s1 => this.Evaluate(s1, italicsRegex, m => this.ItalicEvaluator(m, 2), + defaultHandler)); + } + } + + private Inline ItalicEvaluator(Match match, int contentGroup) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + var content = match.Groups[contentGroup].Value; + return Create(this.RunSpanGamut(content)); + } + + private Inline BoldEvaluator(Match match, int contentGroup) + { + if (match == null) + throw new ArgumentNullException(nameof(match)); + + var content = match.Groups[contentGroup].Value; + return Create(this.RunSpanGamut(content)); + } + + /// + /// Remove one level of line-leading spaces + /// + private string Outdent(string block) + { + return outDentRegex.Replace(block, ""); + } + + /// + /// convert all tabs to _tabWidth spaces; + /// standardizes line endings from DOS (CR LF) or Mac (CR) to UNIX (LF); + /// makes sure text ends with a couple of newlines; + /// removes any blank lines (only spaces) in the text + /// + private string Normalize(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + var output = new StringBuilder(text.Length); + var line = new StringBuilder(); + bool valid = false; + + for (int i = 0; i < text.Length; i++) + { + switch (text[i]) + { + case '\n': + if (valid) + output.Append(line); + output.Append('\n'); + line.Length = 0; + valid = false; + break; + + case '\r': + if ((i < text.Length - 1) && (text[i + 1] != '\n')) + { + if (valid) + output.Append(line); + output.Append('\n'); + line.Length = 0; + valid = false; + } + break; + + case '\t': + int width = (TAB_WIDTH - line.Length % TAB_WIDTH); + for (int k = 0; k < width; k++) + line.Append(' '); + break; + + case '\x1A': + break; + + default: + if (!valid && text[i] != ' ') + valid = true; + line.Append(text[i]); + break; + } + } + + if (valid) + output.Append(line); + output.Append('\n'); + + // add two newlines to the end before return + return output.Append("\n\n").ToString(); + } + + /// + /// This is to emulate what's available in PHP + /// + private static string RepeatString(string text, int count) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + var sb = new StringBuilder(text.Length * count); + for (int i = 0; i < count; i++) + sb.Append(text); + return sb.ToString(); + } + + private static TResult Create(IEnumerable content) where TResult : IAddChild, new() + { + var result = new TResult(); + foreach (var c in content) + { + result.AddChild(c); + } + + return result; + } + + private IEnumerable Evaluate(string text, Regex expression, Func build, Func> rest) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + var matches = expression.Matches(text); + var index = 0; + foreach (Match m in matches) + { + if (m.Index > index) + { + var prefix = text.Substring(index, m.Index - index); + foreach (var t in rest(prefix)) + { + yield return t; + } + } + + yield return build(m); + + index = m.Index + m.Length; + } + + if (index < text.Length) + { + var suffix = text.Substring(index, text.Length - index); + foreach (var t in rest(suffix)) + { + yield return t; + } + } + } + + public IEnumerable DoText(string text) + { + if (text == null) + throw new ArgumentNullException(nameof(text)); + + var t = eolnRegex.Replace(text, " "); + + Run result = new Run(t); + if (this.TextStyle != null) + result.Style = this.TextStyle; + yield return result; + } + + private static void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) + { + Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); + } + + #region Regex's and static strings + + private static readonly Regex newlinesLeadingTrailingRegex = new Regex(@"^\n+|\n+\z", RegexOptions.Compiled); + private static readonly Regex newlinesMultipleRegex = new Regex(@"\n{2,}", RegexOptions.Compiled); + private static Regex leadingWhitespaceRegex = new Regex(@"^[ ]*", RegexOptions.Compiled); + + private static string nestedBracketsPattern; + private static string nestedParensPattern; + private static string nestedParensPatternWithWhiteSpace; + + // ReSharper disable once UseStringInterpolation + private static readonly Regex imageInlineRegex = new Regex(string.Format(@" + ( # wrap whole match in $1 + !\[ + ({0}) # link text = $2 + \] + \( # literal paren + [ ]* + ({1}) # href = $3 + [ ]* + ( # $4 + (['""]) # quote char = $5 + (.*?) # title = $6 + \5 # matching quote + #[ ]* # ignore any spaces between closing quote and ) + )? # title is optional + \) + )", GetNestedBracketsPattern(), GetNestedParensPatternWithWhiteSpace()), RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + // ReSharper disable once UseStringInterpolation + private static readonly Regex anchorInlineRegex = new Regex(string.Format(@" + ( # wrap whole match in $1 + \[ + ({0}) # link text = $2 + \] + \( # literal paren + [ ]* + ({1}) # href = $3 + [ ]* + ( # $4 + (['""]) # quote char = $5 + (.*?) # title = $6 + \5 # matching quote + [ ]* # ignore any spaces between closing quote and ) + )? # title is optional + \) + )", GetNestedBracketsPattern(), GetNestedParensPattern()), RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly Regex headerSetextRegex = new Regex(@" + ^(.+?) + [ ]* + \n + (=+|-+) # $1 = string of ='s or -'s + [ ]* + \n+", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly Regex headerAtxRegex = new Regex(@" + ^(\#{1,6}) # $1 = string of #'s + [ ]* + (.+?) # $2 = Header text + [ ]* + \#* # optional closing #'s (not counted) + \n+", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly Regex horizontalRulesRegex = new Regex(@" + ^[ ]{0,3} # Leading space + ([-*_]) # $1: First marker + (?> # Repeated marker group + [ ]{0,2} # Zero, one, or two spaces. + \1 # Marker character + ){2,} # Group repeated at least twice + [ ]* # Trailing spaces + $ # End of line. + ", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly string wholeList = string.Format(@" + ( # $1 = whole list + ( # $2 + [ ]{{0,{1}}} + ({0}) # $3 = first list item marker + [ ]+ + ) + (?s:.+?) + ( # $4 + \z + | + \n{{2,}} + (?=\S) + (?! # Negative lookahead for another list item marker + [ ]* + {0}[ ]+ + ) + ) + )", $"(?:{MARKER_UL}|{MARKER_OL})", TAB_WIDTH - 1); + + private static readonly Regex listNestedRegex = new Regex(@"^" + wholeList, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly Regex listTopLevelRegex = new Regex(@"(?:(?<=\n\n)|\A\n?)" + wholeList, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static readonly Regex codeSpanRegex = new Regex(@" + (? _markdown = new Lazy(() => new Markdown()); + + public Markdown Markdown + { + get { return (Markdown)this.GetValue(MarkdownProperty); } + set { this.SetValue(MarkdownProperty, value); } + } + + public static readonly DependencyProperty MarkdownProperty = DependencyProperty.Register("Markdown", typeof(Markdown), typeof(TextToFlowDocumentConverter), new PropertyMetadata(null)); + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) + return null; + + var text = (string)value; + var engine = this.Markdown ?? this._markdown.Value; + return engine.Transform(text); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Toastify/src/View/ChangelogView.xaml b/Toastify/src/View/ChangelogView.xaml new file mode 100644 index 00000000..6506d22a --- /dev/null +++ b/Toastify/src/View/ChangelogView.xaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + Published: + + + + \ No newline at end of file diff --git a/Toastify/src/View/ChangelogView.xaml.cs b/Toastify/src/View/ChangelogView.xaml.cs new file mode 100644 index 00000000..46cdbfa1 --- /dev/null +++ b/Toastify/src/View/ChangelogView.xaml.cs @@ -0,0 +1,98 @@ +using log4net; +using System; +using System.Media; +using System.Net; +using System.Threading; +using System.Windows; +using Toastify.ViewModel; +using ToastifyAPI.GitHub; +using ToastifyAPI.GitHub.Model; +using Dispatch = System.Windows.Threading.Dispatcher; + +namespace Toastify.View +{ + public partial class ChangelogView : Window + { + private static readonly ILog logger = LogManager.GetLogger(typeof(ChangelogView)); + + private static Thread changelogViewerThread; + + private readonly ChangelogViewModel viewModel; + + public ChangelogView() + { + this.InitializeComponent(); + + this.viewModel = new ChangelogViewModel(); + this.DataContext = this.viewModel; + } + + internal static void Launch() + { + if (changelogViewerThread != null) + return; + + if (logger.IsDebugEnabled) + logger.Debug("Launching ChangelogViewer..."); + + changelogViewerThread = new Thread(() => + { + ChangelogView view = new ChangelogView(); + view.DownloadChangelog(); + view.Show(); + SystemSounds.Asterisk.Play(); + Dispatch.Run(); + }) + { + Name = "Changelog Viewer", + IsBackground = true + }; + changelogViewerThread.SetApartmentState(ApartmentState.STA); + changelogViewerThread.Start(); + } + + private void DownloadChangelog() + { + logger.Info("Downloading latest changelog..."); + + GitHubAPI gitHubAPI = new GitHubAPI + { + Owner = "aleab", + Repository = "toastify" + }; + Release release = gitHubAPI.GetReleaseByTagName(App.CurrentVersion); + if (release.HttpStatusCode != HttpStatusCode.OK) + release = gitHubAPI.GetLatestRelease(); + + if (release.HttpStatusCode == HttpStatusCode.OK) + { + this.viewModel.ReleaseBodyMarkdown = $"## {release.Name}\n" + + $"{gitHubAPI.GitHubify(release.Body)}"; + + if (release.PublishedAt != null) + this.TextBlockPublishedDate.Text = release.PublishedAt?.ToString(App.UserCulture); + else + this.PanelPublished.Visibility = Visibility.Collapsed; + + logger.Info("Changelog downloaded"); + } + else + { + this.viewModel.ReleaseBodyMarkdown = "### Failed loading the changelog!\n" + + $"You can read the latest changes [here]({gitHubAPI.GetUrlOfLatestRelease()})."; + this.PanelPublished.Visibility = Visibility.Collapsed; + + logger.Warn($"Failed to download the latest changelog. StatusCode = {release.HttpStatusCode}"); + } + } + + private void ChangelogView_OnLoaded(object sender, RoutedEventArgs e) + { + } + + private void ChangelogView_OnClosed(object sender, EventArgs e) + { + changelogViewerThread = null; + } + } +} \ No newline at end of file diff --git a/Toastify/src/ViewModel/ChangelogViewModel.cs b/Toastify/src/ViewModel/ChangelogViewModel.cs new file mode 100644 index 00000000..5c72b359 --- /dev/null +++ b/Toastify/src/ViewModel/ChangelogViewModel.cs @@ -0,0 +1,18 @@ +using Toastify.Common; + +namespace Toastify.ViewModel +{ + public class ChangelogViewModel : ObservableObject + { + private const string NO_RELEASE_BODY_MD = "### No relevant changes"; + private const string LOADING_MD = "#### Loading..."; + + private string _releaseBodyMarkdown = LOADING_MD; + + public string ReleaseBodyMarkdown + { + get { return string.IsNullOrWhiteSpace(this._releaseBodyMarkdown) ? NO_RELEASE_BODY_MD : this._releaseBodyMarkdown; } + set { this.RaiseAndSetIfChanged(ref this._releaseBodyMarkdown, value); } + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/GitHubAPI.cs b/ToastifyAPI/GitHub/GitHubAPI.cs index 2a74ed89..a4af3304 100644 --- a/ToastifyAPI/GitHub/GitHubAPI.cs +++ b/ToastifyAPI/GitHub/GitHubAPI.cs @@ -1,20 +1,26 @@ using Newtonsoft.Json; +using System.Collections.Generic; +using System.Linq; +using System.Net; using System.Net.Http; using System.Text; +using System.Text.RegularExpressions; using ToastifyAPI.GitHub.Model; namespace ToastifyAPI.GitHub { public class GitHubAPI { + private static readonly Encoding encoding = Encoding.UTF8; + + private static List emojis; + private static string ApiBase { get; } = "https://api.github.com"; public string Owner { get; set; } public string Repository { get; set; } - private readonly Encoding encoding = Encoding.UTF8; - public string GetFullEndpointUrl(string endpoint, params object[] args) { string ep = endpoint.Replace(":owner", this.Owner).Replace("{owner}", this.Owner) @@ -22,16 +28,22 @@ public string GetFullEndpointUrl(string endpoint, params object[] args) return args != null ? $"{ApiBase}{string.Format(ep, args)}" : $"{ApiBase}{ep}"; } - public T DownloadJson(string url) where T : BaseModel + public GitHubAPI() + { + ServicePointManager.Expect100Continue = true; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + } + + public static T DownloadJson(string url) where T : BaseModel { using (HttpClient http = new HttpClient()) { - http.DefaultRequestHeaders.Add("User-Agent", "aleab/toastify"); + AddDefaultHeaders(http); using (HttpResponseMessage response = http.GetAsync(url).Result) { byte[] raw = response.Content.ReadAsByteArrayAsync().Result; - string json = raw.Length > 0 ? this.encoding.GetString(raw) : "{}"; + string json = raw.Length > 0 ? encoding.GetString(raw) : "{}"; T result = JsonConvert.DeserializeObject(json); result.HttpResponseHeaders = response.Headers; @@ -40,5 +52,204 @@ public T DownloadJson(string url) where T : BaseModel } } } + + private static T DownloadJsonInternal(string url) + { + using (HttpClient http = new HttpClient()) + { + AddDefaultHeaders(http); + + using (HttpResponseMessage response = http.GetAsync(url).Result) + { + byte[] raw = response.Content.ReadAsByteArrayAsync().Result; + string json = raw.Length > 0 ? encoding.GetString(raw) : "{}"; + + T result = JsonConvert.DeserializeObject(json); + return result; + } + } + } + + #region GitHubify + + private static readonly Regex mentionRegex = new Regex(@"\B@(\w+)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + private static readonly Regex issueOrPullRegex = new Regex(@"\B#([0-9]+)\b", RegexOptions.Compiled); + + private static readonly Regex hashRegex = new Regex(@"\b([a-f0-9]{7,})\b", RegexOptions.Compiled); + + private static readonly Regex emojiRegex = new Regex(@":([^\s]+):", RegexOptions.Compiled); + + public string GitHubify(string ghText) + { + // Mentions (@) + ghText = mentionRegex.Replace(ghText, match => + { + string username = match.Groups[1].Value; + string pattern = GitHubify_Mention(username); + return match.Result(pattern); + }); + + // Issues or PRs (#) + ghText = issueOrPullRegex.Replace(ghText, match => + { + string sNumber = match.Groups[1].Value; + int number = int.Parse(sNumber); + string pattern = GitHubify_IssueOrPull(number); + return match.Result(pattern); + }); + + // Hashes ([a-f0-9]{7,}) + ghText = hashRegex.Replace(ghText, match => + { + string hash = match.Groups[1].Value; + string pattern = GitHubify_Hash(hash); + return match.Result(pattern); + }); + + // Emojis (::) + ghText = emojiRegex.Replace(ghText, match => + { + string emojiName = match.Groups[1].Value; + string pattern = GitHubify_Emoji(emojiName); + return match.Result(pattern); + }); + + return ghText; + } + + /// + /// Returns a replace pattern for a mention to the specified username + /// + /// The username + /// A regex replace pattern + private static string GitHubify_Mention(string username) + { + string url = $"https://github.com/{username}"; + + WebRequest webRequest = WebRequest.Create(url); + AddDefaultHeaders(webRequest); + webRequest.Timeout = 2000; + webRequest.Method = HttpMethod.Head.Method; + + HttpWebResponse response = null; + try + { + response = (HttpWebResponse)webRequest.GetResponse(); + return $"[@$1]({url})"; + } + catch + { + return "@$1"; + } + finally + { + response?.Close(); + } + } + + /// + /// Returns a replace pattern for the specified issue or PR number + /// + /// The issue or PR number + /// Whether it's a pull request or not + /// A regex replace pattern + private static string GitHubify_IssueOrPull(int number, bool pull = false) + { + string s = $"{(pull ? "pull" : "issues")}/{number}"; + string url = $"https://github.com/aleab/toastify/{s}"; + + WebRequest webRequest = WebRequest.Create(url); + AddDefaultHeaders(webRequest); + webRequest.Timeout = 2000; + webRequest.Method = HttpMethod.Head.Method; + + HttpWebResponse response = null; + try + { + response = (HttpWebResponse)webRequest.GetResponse(); + return $"[#$1]({url})"; + } + catch + { + return pull ? "#$1" : GitHubify_IssueOrPull(number, true); + } + finally + { + response?.Close(); + } + } + + /// + /// Returns a replace pattern for the specified commit hash + /// + /// The commit hash + /// A regex replace pattern + private static string GitHubify_Hash(string hash) + { + string url = $"https://github.com/aleab/toastify/commit/{hash}"; + + WebRequest webRequest = WebRequest.Create(url); + AddDefaultHeaders(webRequest); + webRequest.Timeout = 2000; + webRequest.Method = HttpMethod.Head.Method; + + HttpWebResponse response = null; + try + { + response = (HttpWebResponse)webRequest.GetResponse(); + return $"[`$1`]({url})"; + } + catch + { + return "$_"; + } + finally + { + response?.Close(); + } + } + + /// + /// Returns a replace pattern for the specified emoji + /// + /// The emoji name + /// A regex replace pattern + private static string GitHubify_Emoji(string emojiName) + { + // TODO: Use inline images instead of unicode characters, which are just rendered in B/W + if (emojis == null) + { + const string url = "https://api.github.com/emojis"; + var list = DownloadJsonInternal>(url); + emojis = list.Count <= 0 + ? new List(0) + : list.Select(kvp => new Emoji { Name = kvp.Key, Url = kvp.Value }).ToList(); + } + if (emojis.Count <= 0) + return string.Empty; + + Emoji emoji = emojis.SingleOrDefault(e => e.Name == emojiName); + if (emoji == null) + return "$_"; + + string unicodeString = emoji.GetAsUnicodeString(); + return string.IsNullOrWhiteSpace(unicodeString) ? string.Empty : unicodeString; + } + + #endregion GitHubify + + private static void AddDefaultHeaders(HttpClient httpClient) + { + httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "aleab/toastify"); + httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Referer", "aleab/toastify"); + } + + private static void AddDefaultHeaders(WebRequest webRequest) + { + // Cannot set User-Agent and Referer headers for WebRequest's + //webRequest.Headers[HttpRequestHeader.UserAgent] = "aleab/toastify"; + //webRequest.Headers[HttpRequestHeader.Referer] = "aleab/toastify"; + } } } \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Model/Emoji.cs b/ToastifyAPI/GitHub/Model/Emoji.cs new file mode 100644 index 00000000..26bd303e --- /dev/null +++ b/ToastifyAPI/GitHub/Model/Emoji.cs @@ -0,0 +1,21 @@ +using System.Globalization; +using System.Text.RegularExpressions; + +namespace ToastifyAPI.GitHub.Model +{ + public class Emoji + { + public string Name { get; set; } + + public string Url { get; set; } + + public string GetAsUnicodeString() + { + if (string.IsNullOrWhiteSpace(this.Url)) + return string.Empty; + + string codepoint = Regex.Replace(this.Url, @"^.*emoji/unicode/([a-fA-F0-9]+)\.png.*$", "$1", RegexOptions.Compiled); + return int.TryParse(codepoint, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int code) ? char.ConvertFromUtf32(code) : string.Empty; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs index 72e998d1..1d8cac39 100644 --- a/ToastifyAPI/GitHub/Releases.cs +++ b/ToastifyAPI/GitHub/Releases.cs @@ -4,10 +4,21 @@ namespace ToastifyAPI.GitHub { public static class Releases { - public static Release GetByTagName(this GitHubAPI api, string tag) + public static Release GetReleaseByTagName(this GitHubAPI api, string tag) { string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}"); - return api.DownloadJson(url); + return GitHubAPI.DownloadJson(url); + } + + public static Release GetLatestRelease(this GitHubAPI api) + { + string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest"); + return GitHubAPI.DownloadJson(url); + } + + public static string GetUrlOfLatestRelease(this GitHubAPI api) + { + return api.GetFullEndpointUrl("https://github.com/:owner/:repo/releases/latest"); } } } \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index e2cb074b..f5a2ac64 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -165,6 +165,7 @@ + From bbdd6dd785491d33eeff630b71b580d475fb62b8 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 29 Mar 2018 01:18:48 +0200 Subject: [PATCH 268/452] Add a couple of null/empty checks --- Toastify/src/Helpers/Extensions.cs | 15 ++++++++++++- Toastify/src/Security.cs | 25 +++++++++++++++++++++ Toastify/src/ViewModel/SettingsViewModel.cs | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Toastify/src/Helpers/Extensions.cs b/Toastify/src/Helpers/Extensions.cs index 39c50ce8..2babf55c 100644 --- a/Toastify/src/Helpers/Extensions.cs +++ b/Toastify/src/Helpers/Extensions.cs @@ -1,4 +1,5 @@ -using System; +using log4net; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; @@ -14,6 +15,8 @@ namespace Toastify.Helpers { public static class Extensions { + private static readonly ILog logger = LogManager.GetLogger(typeof(Extensions)); + public static IList Clone(this IList listToClone) where T : ICloneable { return listToClone.Select(item => (T)item.Clone()).ToList(); @@ -143,12 +146,22 @@ public static T Clamp(this T value, Range? range) where T : IComparable public static string ToPlainString(this SecureString secureString) { + if (secureString == null) + return null; + if (secureString.Length == 0) + return string.Empty; + IntPtr valuePtr = IntPtr.Zero; try { valuePtr = Marshal.SecureStringToGlobalAllocUnicode(secureString); return Marshal.PtrToStringUni(valuePtr); } + catch (Exception ex) + { + logger.Error("Unknown error", ex); + return null; + } finally { Marshal.ZeroFreeGlobalAllocUnicode(valuePtr); diff --git a/Toastify/src/Security.cs b/Toastify/src/Security.cs index 1857755a..1e0e5c3e 100644 --- a/Toastify/src/Security.cs +++ b/Toastify/src/Security.cs @@ -17,6 +17,9 @@ public static class Security public static bool ProtectedDataExists(string fileName) { + if (string.IsNullOrWhiteSpace(fileName)) + throw new ArgumentException(@"File name is not valid", nameof(fileName)); + string secFilePath = Path.Combine(App.LocalApplicationData, fileName); return File.Exists(secFilePath); } @@ -38,12 +41,18 @@ internal static void SaveProxyPassword(SecureString secureString) internal static byte[] GetProtectedData(string fileName) { + if (string.IsNullOrWhiteSpace(fileName)) + throw new ArgumentException(@"File name is not valid", nameof(fileName)); + byte[] encryptedData = GetProtectedDataInternal(fileName, out byte[] entropy); return ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser); } internal static SecureString GetProtectedSecureString(string fileName) { + if (string.IsNullOrWhiteSpace(fileName)) + throw new ArgumentException(@"File name is not valid", nameof(fileName)); + byte[] encryptedData = GetProtectedDataInternal(fileName, out byte[] entropy); if (encryptedData == null || encryptedData.Length == 0) return null; @@ -142,6 +151,14 @@ internal static SecureString GetProtectedSecureString(string fileName) internal static void SaveProtectedData(byte[] plaintext, string fileName) { + if (plaintext == null) + { + logger.Warn($"{nameof(plaintext)} is null"); + return; + } + if (string.IsNullOrWhiteSpace(fileName)) + throw new ArgumentException(@"File name is not valid", nameof(fileName)); + // Generate entropy byte[] entropy = new byte[20]; using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) @@ -156,6 +173,14 @@ internal static void SaveProtectedData(byte[] plaintext, string fileName) internal static void SaveProtectedData(SecureString secureString, string fileName) { + if (secureString == null) + { + logger.Warn($"{nameof(secureString)} is null"); + return; + } + if (string.IsNullOrWhiteSpace(fileName)) + throw new ArgumentException(@"File name is not valid", nameof(fileName)); + // Generate entropy byte[] entropy = new byte[20]; using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) diff --git a/Toastify/src/ViewModel/SettingsViewModel.cs b/Toastify/src/ViewModel/SettingsViewModel.cs index 747ef562..abb6f7a4 100644 --- a/Toastify/src/ViewModel/SettingsViewModel.cs +++ b/Toastify/src/ViewModel/SettingsViewModel.cs @@ -231,7 +231,7 @@ private void Save() // If no username has been entered, remove the saved password Security.SaveProxyPassword(new SecureString()); } - else if (!string.IsNullOrEmpty(this.ProxyPassword.ToPlainString())) + else if (!string.IsNullOrEmpty(this.ProxyPassword?.ToPlainString())) { // Otherwise, if the password box is not empty, save the new password Security.SaveProxyPassword(this.ProxyPassword); From a02f9b281140b057b68fd9b4c8f7ae043d6bb545 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 02:31:10 +0200 Subject: [PATCH 269/452] Create IProxyConfig interface to use in ToastifyAPI --- Toastify/Toastify.csproj | 1 + Toastify/src/App.xaml.cs | 20 ++-- Toastify/src/Core/ProxyConfigAdapter.cs | 109 ++++++++++++++++++ .../Core/SecureProxyConfigJsonConverter.cs | 17 ++- Toastify/src/Core/Spotify.cs | 2 +- .../src/Helpers/SpotifyLocalAPIExtensions.cs | 16 --- Toastify/src/Model/Settings.cs | 26 ++--- Toastify/src/Model/Song.cs | 2 +- Toastify/src/View/ConfigProxyDialog.xaml.cs | 2 +- Toastify/src/View/DebugView.xaml.cs | 18 ++- ToastifyAPI/Core/IProxyConfig.cs | 21 ++++ ToastifyAPI/ToastifyAPI.csproj | 1 + ToastifyAPI/Win32API.uwp.cs | 2 +- 13 files changed, 169 insertions(+), 68 deletions(-) create mode 100644 Toastify/src/Core/ProxyConfigAdapter.cs create mode 100644 ToastifyAPI/Core/IProxyConfig.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index fcfffec7..72ef872b 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -162,6 +162,7 @@ Component + diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 74460c10..b53a2811 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -26,6 +26,7 @@ using Toastify.Model; using Toastify.Services; using Toastify.View; +using ToastifyAPI.Core; namespace Toastify { @@ -305,7 +306,7 @@ public partial class App : Application private static readonly ProxyConfig noProxy = new ProxyConfig(); // ReSharper disable once InconsistentNaming - private static ProxyConfig _proxyConfig; + private static ProxyConfigAdapter _proxyConfig; public static string ApplicationData { get; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Toastify"); @@ -346,21 +347,18 @@ public static string CurrentVersionNoRevision /// /// The currently used proxy settings. /// - public static ProxyConfig ProxyConfig + public static ProxyConfigAdapter ProxyConfig { get { if (_proxyConfig == null) - { - _proxyConfig = new ProxyConfig(); - _proxyConfig.Set(Settings.Current.ProxyConfig); - } + _proxyConfig = new ProxyConfigAdapter(Settings.Current.ProxyConfig.ProxyConfig); if (!Settings.Current.UseProxy) _proxyConfig.Set(noProxy); return _proxyConfig; } - set { _proxyConfig.Set(value ?? noProxy); } + set { _proxyConfig.Set(value.ProxyConfig ?? noProxy); } } public App() : this("") @@ -399,7 +397,7 @@ public static void Terminate() new Action(() => Current.Shutdown())); } - public static HttpClientHandler CreateHttpClientHandler(ProxyConfig proxyConfig = null) + public static HttpClientHandler CreateHttpClientHandler(IProxyConfig proxyConfig = null) { HttpClientHandler clientHandler = new HttpClientHandler { @@ -410,11 +408,11 @@ public static HttpClientHandler CreateHttpClientHandler(ProxyConfig proxyConfig if (!string.IsNullOrWhiteSpace(proxyConfig?.Host)) { - WebProxy proxy = proxyConfig.CreateWebProxy(); + IWebProxy proxy = proxyConfig.CreateWebProxy(); clientHandler.UseProxy = true; clientHandler.Proxy = proxy; - clientHandler.UseDefaultCredentials = proxy.UseDefaultCredentials; - clientHandler.PreAuthenticate = proxy.UseDefaultCredentials; + clientHandler.UseDefaultCredentials = proxyConfig.UseDefaultCredentials; + clientHandler.PreAuthenticate = proxyConfig.UseDefaultCredentials; } return clientHandler; diff --git a/Toastify/src/Core/ProxyConfigAdapter.cs b/Toastify/src/Core/ProxyConfigAdapter.cs new file mode 100644 index 00000000..eda9c616 --- /dev/null +++ b/Toastify/src/Core/ProxyConfigAdapter.cs @@ -0,0 +1,109 @@ +using Newtonsoft.Json; +using SpotifyAPI; +using System; +using System.Net; +using System.Runtime.CompilerServices; +using ToastifyAPI.Core; + +namespace Toastify.Core +{ + /// + /// An adapter for + /// + [Serializable] + [JsonObject(MemberSerialization.OptOut)] + public class ProxyConfigAdapter : IProxyConfig + { + internal ProxyConfig ProxyConfig { get; } + + /// + public string Host + { + get { return this.ProxyConfig.Host; } + set { this.ProxyConfig.Host = value; } + } + + /// + public int Port + { + get { return this.ProxyConfig.Port; } + set { this.ProxyConfig.Port = value; } + } + + public string Username + { + get { return this.ProxyConfig.Username; } + set { this.ProxyConfig.Username = value; } + } + + [JsonIgnore] + public string Password + { + get { return this.ProxyConfig.Password; } + set { this.ProxyConfig.Password = value; } + } + + /// + public bool UseDefaultCredentials + { + get { return !string.IsNullOrEmpty(this.Username) && !string.IsNullOrEmpty(this.Password); } + } + + /// + public bool BypassProxyOnLocal + { + get { return this.ProxyConfig.BypassProxyOnLocal; } + set { this.ProxyConfig.BypassProxyOnLocal = value; } + } + + public ProxyConfigAdapter() : this(new ProxyConfig()) + { + } + + internal ProxyConfigAdapter(ProxyConfig proxyConfig) + { + this.ProxyConfig = new ProxyConfig(); + this.ProxyConfig.Set(proxyConfig); + } + + internal void Set(ProxyConfig proxyConfig) + { + this.ProxyConfig.Set(proxyConfig); + } + + public bool IsValid() + { + return this.ProxyConfig.IsValid(); + } + + /// + public IWebProxy CreateWebProxy() + { + return this.ProxyConfig.CreateWebProxy(); + } + + /// + public object Clone() + { + return new ProxyConfigAdapter(this.ProxyConfig); + } + + public override string ToString() + { + return this.IsValid() ? $"{(!string.IsNullOrEmpty(this.Username) ? $"{this.Username}@" : "")}{this.Host}:{this.Port}" : ""; + } + + public string ToString(bool objectHash) + { + string @string = this.ToString(); + if (objectHash) + { + if (this.ProxyConfig != null) + @string += $" @ {RuntimeHelpers.GetHashCode(this.ProxyConfig)}"; + @string = @string.Trim(); + } + + return @string; + } + } +} \ No newline at end of file diff --git a/Toastify/src/Core/SecureProxyConfigJsonConverter.cs b/Toastify/src/Core/SecureProxyConfigJsonConverter.cs index d79a30c4..a0995dca 100644 --- a/Toastify/src/Core/SecureProxyConfigJsonConverter.cs +++ b/Toastify/src/Core/SecureProxyConfigJsonConverter.cs @@ -1,5 +1,4 @@ using Newtonsoft.Json; -using SpotifyAPI; using System; namespace Toastify.Core @@ -9,11 +8,11 @@ public class SecureProxyConfigJsonConverter : JsonConverter /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - ProxyConfig proxyConfig = (ProxyConfig)value; - - ProxyConfig newProxyConfig = new ProxyConfig(); - newProxyConfig.Set(proxyConfig); - newProxyConfig.Password = null; + ProxyConfigAdapter proxyConfig = (ProxyConfigAdapter)value; + ProxyConfigAdapter newProxyConfig = new ProxyConfigAdapter(proxyConfig.ProxyConfig) + { + Password = null + }; serializer.Serialize(writer, newProxyConfig); } @@ -21,19 +20,19 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s /// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - ProxyConfig existing = (ProxyConfig)existingValue; + ProxyConfigAdapter existing = (ProxyConfigAdapter)existingValue; if (existing != null) { serializer.Populate(reader, existing); return existing; } - return (ProxyConfig)serializer.Deserialize(reader, typeof(ProxyConfig)); + return (ProxyConfigAdapter)serializer.Deserialize(reader, typeof(ProxyConfigAdapter)); } /// public override bool CanConvert(Type objectType) { - return objectType == typeof(ProxyConfig); + return objectType == typeof(ProxyConfigAdapter); } } } \ No newline at end of file diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index fe50026c..ea950927 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -139,7 +139,7 @@ public void InitLocalAPI() this.localAPIConfig = new SpotifyLocalAPIConfig { TimerInterval = 500, - ProxyConfig = App.ProxyConfig + ProxyConfig = App.ProxyConfig.ProxyConfig }; this.localAPI = new SpotifyLocalAPI(this.localAPIConfig); diff --git a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs index 7b9b3240..bffc0c7e 100644 --- a/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs +++ b/Toastify/src/Helpers/SpotifyLocalAPIExtensions.cs @@ -51,21 +51,5 @@ public static void ToggleMute(this SpotifyLocalAPI api) Win32API.SendMediaKey(ToastifyAction.Mute); } } - - public static string ToString(this ProxyConfig proxyConfig, bool objectHash) - { - string @string = proxyConfig?.IsValid() == true - ? $"{(!string.IsNullOrEmpty(proxyConfig.Username) ? $"{proxyConfig.Username}@" : "")}{proxyConfig.Host}:{proxyConfig.Port}" - : proxyConfig == null ? "null" : ""; - - if (objectHash) - { - if (proxyConfig != null) - @string += $" @ {RuntimeHelpers.GetHashCode(proxyConfig)}"; - @string = @string.Trim(); - } - - return @string; - } } } \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 21ceece0..e88c0f87 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -193,7 +193,7 @@ public static string SettingsFilePath private SettingValue _songProgressBarForegroundColor; private SettingValue _useProxy; - private ProxyConfig _proxyConfig; + private ProxyConfigAdapter _proxyConfig; #endregion Private fields @@ -549,12 +549,12 @@ public SettingValue UseProxy } [JsonConverter(typeof(SecureProxyConfigJsonConverter))] - public ProxyConfig ProxyConfig + public ProxyConfigAdapter ProxyConfig { get { if (this._proxyConfig == null) - this._proxyConfig = new ProxyConfig(); + this._proxyConfig = new ProxyConfigAdapter(); // Retrieve the encrypted password string plaintext = Security.GetSecureProxyPassword()?.ToPlainString(); @@ -566,7 +566,7 @@ public ProxyConfig ProxyConfig if (this._proxyConfig == null) this._proxyConfig = value; else - this._proxyConfig.Set(value); + this._proxyConfig.Set(value?.ProxyConfig); this.NotifyPropertyChanged(); } } @@ -746,7 +746,7 @@ public void SetDefaultToastColors() public void SetDefaultAdvanced() { this.UseProxy = DefaultValueOf(this.UseProxy, nameof(this.UseProxy)); - this.ProxyConfig = new ProxyConfig(); + this.ProxyConfig = new ProxyConfigAdapter(); } #endregion Default @@ -911,17 +911,7 @@ public Settings Clone() } // ProxyConfig - if (this._proxyConfig != null) - { - clone._proxyConfig = new ProxyConfig - { - Host = this._proxyConfig.Host, - Port = this._proxyConfig.Port, - Username = this._proxyConfig.Username, - Password = null, - BypassProxyOnLocal = this._proxyConfig.BypassProxyOnLocal - }; - } + clone._proxyConfig = (ProxyConfigAdapter)this._proxyConfig.Clone(); } return clone; @@ -1010,9 +1000,9 @@ internal static string PrintSettings(int indentLevel = 0) if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) continue; - if (property.PropertyType == typeof(ProxyConfig)) + if (property.PropertyType == typeof(ProxyConfigAdapter)) { - ProxyConfig proxy = (ProxyConfig)current; + ProxyConfigAdapter proxy = (ProxyConfigAdapter)current; sb.Append($"{indent}{property.Name}: {proxy.ToString(true)}\n"); } } diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index 841c5b86..4f95c159 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -157,7 +157,7 @@ public static implicit operator Song(Track spotifyTrack) { try { - coverArtUrl = spotifyTrack.GetAlbumArtUrl(size, App.ProxyConfig); + coverArtUrl = spotifyTrack.GetAlbumArtUrl(size, App.ProxyConfig.ProxyConfig); } catch (Exception e) { diff --git a/Toastify/src/View/ConfigProxyDialog.xaml.cs b/Toastify/src/View/ConfigProxyDialog.xaml.cs index d1b6e301..faa3b3e7 100644 --- a/Toastify/src/View/ConfigProxyDialog.xaml.cs +++ b/Toastify/src/View/ConfigProxyDialog.xaml.cs @@ -108,7 +108,7 @@ private void ConfigProxyDialog_OnClosed(object sender, EventArgs e) App.ProxyConfig = null; } - Settings.Current.ProxyConfig.Set(App.ProxyConfig); + Settings.Current.ProxyConfig.Set(App.ProxyConfig?.ProxyConfig); Settings.Current.Save(); } diff --git a/Toastify/src/View/DebugView.xaml.cs b/Toastify/src/View/DebugView.xaml.cs index fa0cd934..e4be6291 100644 --- a/Toastify/src/View/DebugView.xaml.cs +++ b/Toastify/src/View/DebugView.xaml.cs @@ -1,5 +1,4 @@ -using SpotifyAPI; -using System.Collections; +using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Linq; @@ -7,7 +6,6 @@ using System.Threading; using System.Windows; using Toastify.Core; -using Toastify.Helpers; using Toastify.Model; namespace Toastify.View @@ -71,11 +69,11 @@ private void ButtonPrintSettings_OnClick(object sender, RoutedEventArgs e) if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) continue; - if (property.PropertyType == typeof(ProxyConfig)) + if (property.PropertyType == typeof(ProxyConfigAdapter)) { - ProxyConfig cp = (ProxyConfig)current; - ProxyConfig pp = (ProxyConfig)preview; - ProxyConfig dp = (ProxyConfig)@default; + ProxyConfigAdapter cp = (ProxyConfigAdapter)current; + ProxyConfigAdapter pp = (ProxyConfigAdapter)preview; + ProxyConfigAdapter dp = (ProxyConfigAdapter)@default; Debug.WriteLine($"{property.Name,-36}: {cp?.ToString(true),-30} | {pp?.ToString(true),-30} | {dp?.ToString(true),-30}"); } @@ -96,10 +94,10 @@ private void ButtonPrintSettings_OnClick(object sender, RoutedEventArgs e) if (property.PropertyType.GetInterfaces().Contains(typeof(ICollection))) continue; - if (property.PropertyType == typeof(ProxyConfig)) + if (property.PropertyType == typeof(ProxyConfigAdapter)) { - ProxyConfig cp = (ProxyConfig)current; - ProxyConfig dp = (ProxyConfig)@default; + ProxyConfigAdapter cp = (ProxyConfigAdapter)current; + ProxyConfigAdapter dp = (ProxyConfigAdapter)@default; Debug.WriteLine($"{property.Name,-36}: {cp?.ToString(true),-30} | {dp?.ToString(true),-30}"); } diff --git a/ToastifyAPI/Core/IProxyConfig.cs b/ToastifyAPI/Core/IProxyConfig.cs new file mode 100644 index 00000000..e61381e7 --- /dev/null +++ b/ToastifyAPI/Core/IProxyConfig.cs @@ -0,0 +1,21 @@ +using System; +using System.Net; + +namespace ToastifyAPI.Core +{ + public interface IProxyConfig : ICloneable + { + string Host { get; } + + int Port { get; } + + bool UseDefaultCredentials { get; } + + /// + /// Whether to bypass the proxy server for local addresses. + /// + bool BypassProxyOnLocal { get; } + + IWebProxy CreateWebProxy(); + } +} \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 913d5e30..6e2cd44c 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -164,6 +164,7 @@ + diff --git a/ToastifyAPI/Win32API.uwp.cs b/ToastifyAPI/Win32API.uwp.cs index 6465208d..557d3ae0 100644 --- a/ToastifyAPI/Win32API.uwp.cs +++ b/ToastifyAPI/Win32API.uwp.cs @@ -6,7 +6,7 @@ namespace ToastifyAPI { - internal static partial class Win32API + public static partial class Win32API { internal static Package FindPackage(string name) { From 2eae053c5fe6c5c133782e72767a4ad63e45363d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 03:58:28 +0200 Subject: [PATCH 270/452] Use proxy in GitHubAPI --- Toastify/src/App.xaml.cs | 24 -------- Toastify/src/Core/Spotify.cs | 4 +- Toastify/src/Services/VersionChecker.cs | 3 +- Toastify/src/View/ChangelogView.xaml.cs | 2 +- Toastify/src/View/ToastView.xaml.cs | 4 +- ToastifyAPI/GitHub/GitHubAPI.cs | 77 ++++++++++++++----------- ToastifyAPI/GitHub/Releases.cs | 4 +- ToastifyAPI/Helpers/Net.cs | 30 ++++++++++ ToastifyAPI/ToastifyAPI.csproj | 1 + 9 files changed, 82 insertions(+), 67 deletions(-) create mode 100644 ToastifyAPI/Helpers/Net.cs diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index b53a2811..ad51438f 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -13,8 +13,6 @@ using System.Globalization; using System.IO; using System.Linq; -using System.Net; -using System.Net.Http; using System.Reflection; using System.Text.RegularExpressions; using System.Threading; @@ -26,7 +24,6 @@ using Toastify.Model; using Toastify.Services; using Toastify.View; -using ToastifyAPI.Core; namespace Toastify { @@ -397,27 +394,6 @@ public static void Terminate() new Action(() => Current.Shutdown())); } - public static HttpClientHandler CreateHttpClientHandler(IProxyConfig proxyConfig = null) - { - HttpClientHandler clientHandler = new HttpClientHandler - { - PreAuthenticate = false, - UseDefaultCredentials = true, - UseProxy = false - }; - - if (!string.IsNullOrWhiteSpace(proxyConfig?.Host)) - { - IWebProxy proxy = proxyConfig.CreateWebProxy(); - clientHandler.UseProxy = true; - clientHandler.Proxy = proxy; - clientHandler.UseDefaultCredentials = proxyConfig.UseDefaultCredentials; - clientHandler.PreAuthenticate = proxyConfig.UseDefaultCredentials; - } - - return clientHandler; - } - private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { logger.Error("Unhandled exception.", e.Exception); diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index ea950927..d84b8fbd 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -16,10 +16,10 @@ using Toastify.Helpers; using Toastify.Model; using Toastify.Services; +using ToastifyAPI.Helpers; using ToastifyAPI.Native; using ToastifyAPI.Native.Enums; using ToastifyAPI.Native.Structs; -using Timer = System.Timers.Timer; namespace Toastify.Core { @@ -353,7 +353,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) bool hostRedirected = Regex.IsMatch(socketException.Message, @"(127\.0\.0\.1|localhost|0\.0\.0\.0):80(?![0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); // Double check - HttpClientHandler clientHandler = App.CreateHttpClientHandler(App.ProxyConfig); + HttpClientHandler clientHandler = Net.CreateHttpClientHandler(App.ProxyConfig); using (HttpClient http = new HttpClient(clientHandler)) { using (HttpRequestMessage request = new HttpRequestMessage()) diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 8bdbcce4..5c91b8e4 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -3,6 +3,7 @@ using System.Text.RegularExpressions; using System.Threading; using Toastify.Events; +using ToastifyAPI.Helpers; namespace Toastify.Services { @@ -78,7 +79,7 @@ private async void ThreadedCheckVersion() string downloadedString = null; try { - HttpClientHandler handler = App.CreateHttpClientHandler(App.ProxyConfig); + HttpClientHandler handler = Net.CreateHttpClientHandler(App.ProxyConfig); using (HttpClient http = new HttpClient(handler)) { downloadedString = await http.GetStringAsync(new Uri(VersionUrl)).ConfigureAwait(false); diff --git a/Toastify/src/View/ChangelogView.xaml.cs b/Toastify/src/View/ChangelogView.xaml.cs index 46cdbfa1..7f723434 100644 --- a/Toastify/src/View/ChangelogView.xaml.cs +++ b/Toastify/src/View/ChangelogView.xaml.cs @@ -55,7 +55,7 @@ private void DownloadChangelog() { logger.Info("Downloading latest changelog..."); - GitHubAPI gitHubAPI = new GitHubAPI + GitHubAPI gitHubAPI = new GitHubAPI(App.ProxyConfig) { Owner = "aleab", Repository = "toastify" diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 06f6545b..e186cf0b 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -25,7 +25,7 @@ using Toastify.Model; using Toastify.Services; using Toastify.ViewModel; -using ToastifyAPI; +using ToastifyAPI.Helpers; using ToastifyAPI.Native; using ToastifyAPI.Native.Enums; using ToastifyAPI.Native.Structs; @@ -416,7 +416,7 @@ private async Task UpdateAlbumArt(string albumArtUri) // If it's HTTP(S), download the album art using an HttpClient if (Regex.IsMatch(uri.Scheme, @"https?", RegexOptions.IgnoreCase)) { - HttpClientHandler httpClientHandler = App.CreateHttpClientHandler(App.ProxyConfig); + HttpClientHandler httpClientHandler = Net.CreateHttpClientHandler(App.ProxyConfig); HttpClient http = new HttpClient(httpClientHandler); Stream stream = null; try diff --git a/ToastifyAPI/GitHub/GitHubAPI.cs b/ToastifyAPI/GitHub/GitHubAPI.cs index a4af3304..eef2fc62 100644 --- a/ToastifyAPI/GitHub/GitHubAPI.cs +++ b/ToastifyAPI/GitHub/GitHubAPI.cs @@ -5,7 +5,9 @@ using System.Net.Http; using System.Text; using System.Text.RegularExpressions; +using ToastifyAPI.Core; using ToastifyAPI.GitHub.Model; +using ToastifyAPI.Helpers; namespace ToastifyAPI.GitHub { @@ -21,6 +23,16 @@ public class GitHubAPI public string Repository { get; set; } + private readonly IProxyConfig proxyConfig; + + public GitHubAPI(IProxyConfig proxyConfig) + { + this.proxyConfig = proxyConfig; + + ServicePointManager.Expect100Continue = true; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + } + public string GetFullEndpointUrl(string endpoint, params object[] args) { string ep = endpoint.Replace(":owner", this.Owner).Replace("{owner}", this.Owner) @@ -28,15 +40,10 @@ public string GetFullEndpointUrl(string endpoint, params object[] args) return args != null ? $"{ApiBase}{string.Format(ep, args)}" : $"{ApiBase}{ep}"; } - public GitHubAPI() - { - ServicePointManager.Expect100Continue = true; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - } - - public static T DownloadJson(string url) where T : BaseModel + public T DownloadJson(string url) where T : BaseModel { - using (HttpClient http = new HttpClient()) + HttpClientHandler httpClientHandler = Net.CreateHttpClientHandler(this.proxyConfig); + using (HttpClient http = new HttpClient(httpClientHandler)) { AddDefaultHeaders(http); @@ -53,9 +60,10 @@ public static T DownloadJson(string url) where T : BaseModel } } - private static T DownloadJsonInternal(string url) + private T DownloadJsonInternal(string url) { - using (HttpClient http = new HttpClient()) + HttpClientHandler httpClientHandler = Net.CreateHttpClientHandler(this.proxyConfig); + using (HttpClient http = new HttpClient(httpClientHandler)) { AddDefaultHeaders(http); @@ -86,7 +94,7 @@ public string GitHubify(string ghText) ghText = mentionRegex.Replace(ghText, match => { string username = match.Groups[1].Value; - string pattern = GitHubify_Mention(username); + string pattern = this.GitHubify_Mention(username); return match.Result(pattern); }); @@ -95,7 +103,7 @@ public string GitHubify(string ghText) { string sNumber = match.Groups[1].Value; int number = int.Parse(sNumber); - string pattern = GitHubify_IssueOrPull(number); + string pattern = this.GitHubify_IssueOrPull(number); return match.Result(pattern); }); @@ -103,7 +111,7 @@ public string GitHubify(string ghText) ghText = hashRegex.Replace(ghText, match => { string hash = match.Groups[1].Value; - string pattern = GitHubify_Hash(hash); + string pattern = this.GitHubify_Hash(hash); return match.Result(pattern); }); @@ -111,7 +119,7 @@ public string GitHubify(string ghText) ghText = emojiRegex.Replace(ghText, match => { string emojiName = match.Groups[1].Value; - string pattern = GitHubify_Emoji(emojiName); + string pattern = this.GitHubify_Emoji(emojiName); return match.Result(pattern); }); @@ -123,15 +131,11 @@ public string GitHubify(string ghText) ///
    /// The username /// A regex replace pattern - private static string GitHubify_Mention(string username) + private string GitHubify_Mention(string username) { string url = $"https://github.com/{username}"; - WebRequest webRequest = WebRequest.Create(url); - AddDefaultHeaders(webRequest); - webRequest.Timeout = 2000; - webRequest.Method = HttpMethod.Head.Method; - + WebRequest webRequest = CreateWebRequest(url, this.proxyConfig); HttpWebResponse response = null; try { @@ -154,16 +158,12 @@ private static string GitHubify_Mention(string username) /// The issue or PR number /// Whether it's a pull request or not /// A regex replace pattern - private static string GitHubify_IssueOrPull(int number, bool pull = false) + private string GitHubify_IssueOrPull(int number, bool pull = false) { string s = $"{(pull ? "pull" : "issues")}/{number}"; string url = $"https://github.com/aleab/toastify/{s}"; - WebRequest webRequest = WebRequest.Create(url); - AddDefaultHeaders(webRequest); - webRequest.Timeout = 2000; - webRequest.Method = HttpMethod.Head.Method; - + WebRequest webRequest = CreateWebRequest(url, this.proxyConfig); HttpWebResponse response = null; try { @@ -172,7 +172,7 @@ private static string GitHubify_IssueOrPull(int number, bool pull = false) } catch { - return pull ? "#$1" : GitHubify_IssueOrPull(number, true); + return pull ? "#$1" : this.GitHubify_IssueOrPull(number, true); } finally { @@ -185,15 +185,11 @@ private static string GitHubify_IssueOrPull(int number, bool pull = false) ///
    /// The commit hash /// A regex replace pattern - private static string GitHubify_Hash(string hash) + private string GitHubify_Hash(string hash) { string url = $"https://github.com/aleab/toastify/commit/{hash}"; - WebRequest webRequest = WebRequest.Create(url); - AddDefaultHeaders(webRequest); - webRequest.Timeout = 2000; - webRequest.Method = HttpMethod.Head.Method; - + WebRequest webRequest = CreateWebRequest(url, this.proxyConfig); HttpWebResponse response = null; try { @@ -215,13 +211,13 @@ private static string GitHubify_Hash(string hash) ///
    /// The emoji name /// A regex replace pattern - private static string GitHubify_Emoji(string emojiName) + private string GitHubify_Emoji(string emojiName) { // TODO: Use inline images instead of unicode characters, which are just rendered in B/W if (emojis == null) { const string url = "https://api.github.com/emojis"; - var list = DownloadJsonInternal>(url); + var list = this.DownloadJsonInternal>(url); emojis = list.Count <= 0 ? new List(0) : list.Select(kvp => new Emoji { Name = kvp.Key, Url = kvp.Value }).ToList(); @@ -239,6 +235,17 @@ private static string GitHubify_Emoji(string emojiName) #endregion GitHubify + private static WebRequest CreateWebRequest(string url, IProxyConfig proxyConfig = null) + { + WebRequest webRequest = WebRequest.Create(url); + AddDefaultHeaders(webRequest); + webRequest.Method = HttpMethod.Head.Method; + webRequest.Proxy = proxyConfig?.CreateWebProxy(); + webRequest.Timeout = 10000; + + return webRequest; + } + private static void AddDefaultHeaders(HttpClient httpClient) { httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "aleab/toastify"); diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs index 1d8cac39..46cbcccf 100644 --- a/ToastifyAPI/GitHub/Releases.cs +++ b/ToastifyAPI/GitHub/Releases.cs @@ -7,13 +7,13 @@ public static class Releases public static Release GetReleaseByTagName(this GitHubAPI api, string tag) { string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}"); - return GitHubAPI.DownloadJson(url); + return api.DownloadJson(url); } public static Release GetLatestRelease(this GitHubAPI api) { string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest"); - return GitHubAPI.DownloadJson(url); + return api.DownloadJson(url); } public static string GetUrlOfLatestRelease(this GitHubAPI api) diff --git a/ToastifyAPI/Helpers/Net.cs b/ToastifyAPI/Helpers/Net.cs new file mode 100644 index 00000000..18da397b --- /dev/null +++ b/ToastifyAPI/Helpers/Net.cs @@ -0,0 +1,30 @@ +using System.Net; +using System.Net.Http; +using ToastifyAPI.Core; + +namespace ToastifyAPI.Helpers +{ + public static class Net + { + public static HttpClientHandler CreateHttpClientHandler(IProxyConfig proxyConfig = null) + { + HttpClientHandler clientHandler = new HttpClientHandler + { + PreAuthenticate = false, + UseDefaultCredentials = true, + UseProxy = false + }; + + if (!string.IsNullOrWhiteSpace(proxyConfig?.Host)) + { + IWebProxy proxy = proxyConfig.CreateWebProxy(); + clientHandler.UseProxy = true; + clientHandler.Proxy = proxy; + clientHandler.UseDefaultCredentials = proxyConfig.UseDefaultCredentials; + clientHandler.PreAuthenticate = proxyConfig.UseDefaultCredentials; + } + + return clientHandler; + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 6e2cd44c..b6b71f01 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -171,6 +171,7 @@ + From 31212040f711a948edb98fcbaf096882b0c4671e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 17:13:56 +0200 Subject: [PATCH 271/452] GitHubAPI: Separate repo details from main class --- Toastify/src/View/ChangelogView.xaml.cs | 15 ++++---- ToastifyAPI/GitHub/GitHubAPI.cs | 15 ++++---- ToastifyAPI/GitHub/Releases.cs | 12 +++---- ToastifyAPI/GitHub/RepoInfo.cs | 48 +++++++++++++++++++++++++ ToastifyAPI/ToastifyAPI.csproj | 1 + 5 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 ToastifyAPI/GitHub/RepoInfo.cs diff --git a/Toastify/src/View/ChangelogView.xaml.cs b/Toastify/src/View/ChangelogView.xaml.cs index 7f723434..c58e7cb8 100644 --- a/Toastify/src/View/ChangelogView.xaml.cs +++ b/Toastify/src/View/ChangelogView.xaml.cs @@ -55,18 +55,15 @@ private void DownloadChangelog() { logger.Info("Downloading latest changelog..."); - GitHubAPI gitHubAPI = new GitHubAPI(App.ProxyConfig) - { - Owner = "aleab", - Repository = "toastify" - }; - Release release = gitHubAPI.GetReleaseByTagName(App.CurrentVersion); + GitHubAPI gitHubAPI = new GitHubAPI(App.ProxyConfig); + RepoInfo repo = new RepoInfo("toastify", "aleab"); + Release release = gitHubAPI.GetReleaseByTagName(repo, App.CurrentVersion); if (release.HttpStatusCode != HttpStatusCode.OK) - release = gitHubAPI.GetLatestRelease(); + release = gitHubAPI.GetLatestRelease(repo); if (release.HttpStatusCode == HttpStatusCode.OK) { - this.viewModel.ReleaseBodyMarkdown = $"## {release.Name}\n" + + this.viewModel.ReleaseBodyMarkdown = $"## {release.Name}\n" + $"{gitHubAPI.GitHubify(release.Body)}"; if (release.PublishedAt != null) @@ -79,7 +76,7 @@ private void DownloadChangelog() else { this.viewModel.ReleaseBodyMarkdown = "### Failed loading the changelog!\n" + - $"You can read the latest changes [here]({gitHubAPI.GetUrlOfLatestRelease()})."; + $"You can read the latest changes [here]({Releases.GetUrlOfLatestRelease(repo)})."; this.PanelPublished.Visibility = Visibility.Collapsed; logger.Warn($"Failed to download the latest changelog. StatusCode = {release.HttpStatusCode}"); diff --git a/ToastifyAPI/GitHub/GitHubAPI.cs b/ToastifyAPI/GitHub/GitHubAPI.cs index eef2fc62..a5935929 100644 --- a/ToastifyAPI/GitHub/GitHubAPI.cs +++ b/ToastifyAPI/GitHub/GitHubAPI.cs @@ -19,10 +19,6 @@ public class GitHubAPI private static string ApiBase { get; } = "https://api.github.com"; - public string Owner { get; set; } - - public string Repository { get; set; } - private readonly IProxyConfig proxyConfig; public GitHubAPI(IProxyConfig proxyConfig) @@ -33,11 +29,14 @@ public GitHubAPI(IProxyConfig proxyConfig) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; } - public string GetFullEndpointUrl(string endpoint, params object[] args) + public string GetFullEndpointUrl(string endpoint) + { + return $"{ApiBase}{endpoint}"; + } + + public string GetFullEndpointUrl(string endpoint, RepoInfo repo) { - string ep = endpoint.Replace(":owner", this.Owner).Replace("{owner}", this.Owner) - .Replace(":repo", this.Repository).Replace("{repo}", this.Repository); - return args != null ? $"{ApiBase}{string.Format(ep, args)}" : $"{ApiBase}{ep}"; + return this.GetFullEndpointUrl(repo.Format(endpoint)); } public T DownloadJson(string url) where T : BaseModel diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs index 46cbcccf..7da8b844 100644 --- a/ToastifyAPI/GitHub/Releases.cs +++ b/ToastifyAPI/GitHub/Releases.cs @@ -4,21 +4,21 @@ namespace ToastifyAPI.GitHub { public static class Releases { - public static Release GetReleaseByTagName(this GitHubAPI api, string tag) + public static Release GetReleaseByTagName(this GitHubAPI api, RepoInfo repo, string tag) { - string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}"); + string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}", repo); return api.DownloadJson(url); } - public static Release GetLatestRelease(this GitHubAPI api) + public static Release GetLatestRelease(this GitHubAPI api, RepoInfo repo) { - string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest"); + string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest", repo); return api.DownloadJson(url); } - public static string GetUrlOfLatestRelease(this GitHubAPI api) + public static string GetUrlOfLatestRelease(RepoInfo repo) { - return api.GetFullEndpointUrl("https://github.com/:owner/:repo/releases/latest"); + return repo.Format("https://github.com/:owner/:repo/releases/latest"); } } } \ No newline at end of file diff --git a/ToastifyAPI/GitHub/RepoInfo.cs b/ToastifyAPI/GitHub/RepoInfo.cs new file mode 100644 index 00000000..7f1798a5 --- /dev/null +++ b/ToastifyAPI/GitHub/RepoInfo.cs @@ -0,0 +1,48 @@ +namespace ToastifyAPI.GitHub +{ + public class RepoInfo + { + public string Name { get; } + + public string Owner { get; } + + public RepoInfo(string name, string owner) + { + this.Name = name; + this.Owner = owner; + } + + public string Format(string @string) + { + return @string.Replace(":owner", this.Owner).Replace("{owner}", this.Owner) + .Replace(":repo", this.Name).Replace("{repo}", this.Name); + } + + protected bool Equals(RepoInfo other) + { + return string.Equals(this.Name, other.Name) && + string.Equals(this.Owner, other.Owner); + } + + /// + public override bool Equals(object obj) + { + if (obj is null) + return false; + if (ReferenceEquals(this, obj)) + return true; + + return obj.GetType() == this.GetType() && this.Equals((RepoInfo)obj); + } + + /// + public override int GetHashCode() + { + unchecked + { + return ((this.Name != null ? this.Name.GetHashCode() : 0) * 397) ^ + (this.Owner != null ? this.Owner.GetHashCode() : 0); + } + } + } +} \ No newline at end of file diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index b6b71f01..6b32b8c1 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -170,6 +170,7 @@ + From 6af073f303711750f36f49b69d8ea7e23ddd7363 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 17:55:50 +0200 Subject: [PATCH 272/452] Implement update check frequency --- Toastify/Toastify.csproj | 1 + Toastify/src/Core/VersionCheckFrequency.cs | 52 ++++++++++++++ Toastify/src/Model/Settings.cs | 20 +++++- Toastify/src/Services/VersionChecker.cs | 80 ++++++++++++++++++---- Toastify/src/View/AboutView.xaml.cs | 2 +- Toastify/src/View/SettingsView.xaml | 27 ++++++-- Toastify/src/View/ToastView.xaml.cs | 6 +- 7 files changed, 163 insertions(+), 25 deletions(-) create mode 100644 Toastify/src/Core/VersionCheckFrequency.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 72ef872b..1718077e 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -164,6 +164,7 @@ + diff --git a/Toastify/src/Core/VersionCheckFrequency.cs b/Toastify/src/Core/VersionCheckFrequency.cs new file mode 100644 index 00000000..1de3f163 --- /dev/null +++ b/Toastify/src/Core/VersionCheckFrequency.cs @@ -0,0 +1,52 @@ +using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Toastify.Common; + +namespace Toastify.Core +{ + [JsonConverter(typeof(StringEnumConverter))] + public enum VersionCheckFrequency + { + [ComboBoxItem("Every hour")] + EveryHour = 1, + + [ComboBoxItem("Every 12 hours")] + Every12Hours = 12, + + [ComboBoxItem("Every day")] + EveryDay = 24, + + [ComboBoxItem("Every week")] + EveryWeek = 168, + + [ComboBoxItem("Every month")] + EveryMonth = 720 + } + + public static class VersionCheckFrequencyExtensions + { + public static TimeSpan ToTimeSpan(this VersionCheckFrequency vcf) + { + switch (vcf) + { + case VersionCheckFrequency.EveryHour: + return new TimeSpan(0, 1, 0, 0); + + case VersionCheckFrequency.Every12Hours: + return new TimeSpan(0, 12, 0, 0); + + case VersionCheckFrequency.EveryDay: + return new TimeSpan(1, 0, 0, 0); + + case VersionCheckFrequency.EveryWeek: + return new TimeSpan(7, 0, 0, 0); + + case VersionCheckFrequency.EveryMonth: + return new TimeSpan(30, 0, 0, 0); + } + + return TimeSpan.FromDays(1); + } + } +} \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index e88c0f87..0b61a8be 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -1,7 +1,6 @@ using log4net; using Microsoft.Win32; using Newtonsoft.Json; -using SpotifyAPI; using System; using System.Collections; using System.Collections.Generic; @@ -131,6 +130,7 @@ public static string SettingsFilePath private SettingValue _closeSpotifyWithToastify; private SettingValue _volumeControlMode; private SettingValue _windowsVolumeMixerIncrement; + private SettingValue _versionCheckFrequency; private SettingValue _clipboardTemplate; private SettingValue _saveTrackToFile; private SettingValue _saveTrackToFilePath; @@ -195,6 +195,8 @@ public static string SettingsFilePath private SettingValue _useProxy; private ProxyConfigAdapter _proxyConfig; + private SettingValue _lastVersionCheck; + #endregion Private fields #region [General] @@ -256,6 +258,13 @@ public SettingValue WindowsVolumeMixerIncrement set { this.SetSettingValue(ref this._windowsVolumeMixerIncrement, value); } } + [DefaultValue(Core.VersionCheckFrequency.EveryDay)] + public SettingValue VersionCheckFrequency + { + get { return this.GetSettingValue(ref this._versionCheckFrequency); } + set { this.SetSettingValue(ref this._versionCheckFrequency, value); } + } + [DefaultValue("I'm currently listening to {0}")] public SettingValue ClipboardTemplate { @@ -578,6 +587,12 @@ public ProxyConfigAdapter ProxyConfig public bool FirstRun { get; set; } public string PreviousVersion { get; set; } + + public SettingValue LastVersionCheck + { + get { return this.GetSettingValue(ref this._lastVersionCheck); } + set { this.SetSettingValue(ref this._lastVersionCheck, value); } + } [DefaultValue(60000)] public int StartupWaitTimeout { get; set; } @@ -655,6 +670,7 @@ public void SetDefault(bool activateHotkeys) { this.FirstRun = _current.FirstRun; this.PreviousVersion = _current.PreviousVersion; + this.LastVersionCheck = new SettingValue(DateTime.Now); } } @@ -666,6 +682,8 @@ public void SetDefaultGeneral() this.VolumeControlMode = DefaultValueOf(this.VolumeControlMode, nameof(this.VolumeControlMode)); this.WindowsVolumeMixerIncrement = new SettingValue(DefaultValueOf(this.WindowsVolumeMixerIncrement, nameof(this.WindowsVolumeMixerIncrement)), new Range(0.1f, 100.0f)); + this.VersionCheckFrequency = DefaultValueOf(this.VersionCheckFrequency, nameof(this.VersionCheckFrequency)); + this.ClipboardTemplate = DefaultValueOf(this.ClipboardTemplate, nameof(this.ClipboardTemplate)); this.SaveTrackToFile = DefaultValueOf(this.SaveTrackToFile, nameof(this.SaveTrackToFile)); this.SaveTrackToFilePath = Path.Combine(App.LocalApplicationData, "current_song.txt"); diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 5c91b8e4..3f59038b 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -1,10 +1,20 @@ using System; -using System.Net.Http; +using System.ComponentModel; using System.Text.RegularExpressions; using System.Threading; +using Toastify.Core; using Toastify.Events; +using Toastify.Model; +using Toastify.View; + +#if !DEBUG + +using System.Net.Http; +using System.Threading.Tasks; using ToastifyAPI.Helpers; +#endif + namespace Toastify.Services { internal class VersionChecker : IDisposable @@ -49,32 +59,41 @@ public static string CurrentVersion public static string VersionUrl { get { return "https://raw.githubusercontent.com/aleab/toastify/master/Toastify/version"; } } + public static TimeSpan VersionCheckInterval { get { return Settings.Current.VersionCheckFrequency.Value.ToTimeSpan(); } } + #endregion Static properties - private Thread checkVersionThread; + private Settings current; + + private readonly Timer checkVersionTimer; public event EventHandler CheckVersionComplete; protected VersionChecker() { + this.current = Settings.Current; + this.current.PropertyChanged += this.CurrentSettings_PropertyChanged; + SettingsView.SettingsSaved += this.SettingsView_SettingsSaved; + +#if DEBUG + this.checkVersionTimer = null; +#else + this.checkVersionTimer = new Timer(state => this.CheckNow(), null, CalcCheckVersionDueTime(), VersionCheckInterval); +#endif } - public void BeginCheckVersion() + public void CheckNow() { #if DEBUG - this.checkVersionThread = null; this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = CurrentVersion, New = false }); #else - this.checkVersionThread = new Thread(this.ThreadedCheckVersion) - { - Name = "Toastify VersionChecker", - IsBackground = true - }; - this.checkVersionThread.Start(); + Task.Run(async () => await this.ThreadedCheckVersion()); #endif } - private async void ThreadedCheckVersion() +#if !DEBUG + + private async Task ThreadedCheckVersion() { string downloadedString = null; try @@ -106,9 +125,29 @@ private async void ThreadedCheckVersion() } } +#endif + + private void CurrentSettings_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + switch (e.PropertyName) + { + case nameof(Settings.VersionCheckFrequency): + this.checkVersionTimer?.Change(CalcCheckVersionDueTime(), VersionCheckInterval); + break; + } + } + + private void SettingsView_SettingsSaved(object sender, SettingsSavedEventArgs e) + { + this.current.PropertyChanged -= this.CurrentSettings_PropertyChanged; + this.current = e.Settings; + this.current.PropertyChanged += this.CurrentSettings_PropertyChanged; + } + public void Dispose() { - this.checkVersionThread?.Abort(); + this.current.PropertyChanged -= this.CurrentSettings_PropertyChanged; + SettingsView.SettingsSaved -= this.SettingsView_SettingsSaved; } public static void DisposeInstance() @@ -119,5 +158,22 @@ public static void DisposeInstance() _instance = null; } } + + private static TimeSpan CalcCheckVersionDueTime() + { + DateTime last = Settings.Current.LastVersionCheck; + DateTime now = DateTime.Now; + TimeSpan freq = VersionCheckInterval; + + if (last.Equals(default(DateTime))) + { + last = DateTime.Now; + Settings.Current.LastVersionCheck = last; + Settings.Current.Save(); + } + + TimeSpan t = now.Subtract(last); + return t >= freq ? TimeSpan.Zero : freq.Subtract(t); + } } } \ No newline at end of file diff --git a/Toastify/src/View/AboutView.xaml.cs b/Toastify/src/View/AboutView.xaml.cs index dcdfb71f..6a446990 100644 --- a/Toastify/src/View/AboutView.xaml.cs +++ b/Toastify/src/View/AboutView.xaml.cs @@ -49,7 +49,7 @@ private void Border_MouseUp(object sender, MouseButtonEventArgs e) private void Window_Loaded(object sender, RoutedEventArgs e) { VersionChecker.Instance.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; - VersionChecker.Instance.BeginCheckVersion(); + VersionChecker.Instance.CheckNow(); } private void Window_Unloaded(object sender, RoutedEventArgs e) diff --git a/Toastify/src/View/SettingsView.xaml b/Toastify/src/View/SettingsView.xaml index 6a67c8ba..e176cd7d 100644 --- a/Toastify/src/View/SettingsView.xaml +++ b/Toastify/src/View/SettingsView.xaml @@ -54,7 +54,22 @@ AllowInputSpecialValues="None" AllowSpin="True" AllowTextInput="True" FormatString="F1" Minimum="0.0" Maximum="20.0" Increment="0.1" ClipValueToMinMax="True" DefaultValue="1.0" /> - + + + + + + + + + + + + + + @@ -68,15 +83,15 @@ This is the text that will be copied to the clipboard when you hit the "Copy to Clipboard" hotkey. "{0}" will be replaced with the name of the currently playing song. - Save Artist and Album to file when song changes (uses the clipboard template) - - + Save Artist and Album to file when song changes (uses the clipboard template) + + Opt in to anonymous data collection. Data is never shared, is anonymous, and is used solely to improve the app. - + diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index e186cf0b..fde88f54 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -331,15 +331,11 @@ private void LoadPlugins() Console.WriteLine(@"Loaded " + p.TypeName); } } - - /// - /// Initialize VersionChecker. Updates are only checked once. - /// + private void InitVersionChecker() { VersionChecker.Instance.CheckVersionComplete -= this.VersionChecker_CheckVersionComplete; VersionChecker.Instance.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; - VersionChecker.Instance.BeginCheckVersion(); } #endregion Initialization From 204a4dfcc715fb318d3000437878a600daaaaf26 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 18:42:24 +0200 Subject: [PATCH 273/452] Change VersionChecker to use GitHubAPI --- Toastify/src/App.xaml.cs | 3 + Toastify/src/Services/Analytics.cs | 4 +- Toastify/src/Services/VersionChecker.cs | 82 +++++++++------------- Toastify/src/View/ChangelogView.xaml.cs | 7 +- Toastify/src/View/ToastView.xaml.cs | 2 +- Toastify/src/ViewModel/AboutViewModel.cs | 6 +- ToastifyAPI/GitHub/GitHubAPI.cs | 24 +++++++ ToastifyAPI/GitHub/Model/CollectionData.cs | 9 +++ ToastifyAPI/GitHub/Releases.cs | 33 ++++++++- ToastifyAPI/ToastifyAPI.csproj | 1 + 10 files changed, 110 insertions(+), 61 deletions(-) create mode 100644 ToastifyAPI/GitHub/Model/CollectionData.cs diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index ad51438f..8858f4be 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -24,6 +24,7 @@ using Toastify.Model; using Toastify.Services; using Toastify.View; +using ToastifyAPI.GitHub; namespace Toastify { @@ -358,6 +359,8 @@ public static ProxyConfigAdapter ProxyConfig set { _proxyConfig.Set(value.ProxyConfig ?? noProxy); } } + public static RepoInfo RepoInfo { get; } = new RepoInfo("toastify", "aleab"); + public App() : this("") { } diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index f4021af8..ba25a0c4 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -216,7 +216,7 @@ private static IEnumerable GetCommonParameters() var parameters = new List { new ApplicationName("Toastify"), - new ApplicationVersion(VersionChecker.CurrentVersion) + new ApplicationVersion(App.CurrentVersionNoRevision) }; return parameters; } @@ -233,7 +233,7 @@ private static void TrackInstallEvent() private static void TrackSettingBinaryHit(string settingName, bool track) { if (track) - TrackPageHit($"/{VersionChecker.CurrentVersion}/Settings/{settingName}", null, false); + TrackPageHit($"/{App.CurrentVersionNoRevision}/Settings/{settingName}", null, false); } private static void CollectPreferences() diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 3f59038b..0530970e 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -1,17 +1,19 @@ using System; using System.ComponentModel; -using System.Text.RegularExpressions; +using System.Net; using System.Threading; +using log4net; using Toastify.Core; using Toastify.Events; using Toastify.Model; using Toastify.View; +using ToastifyAPI.GitHub; +using ToastifyAPI.GitHub.Model; #if !DEBUG -using System.Net.Http; +using System.Text.RegularExpressions; using System.Threading.Tasks; -using ToastifyAPI.Helpers; #endif @@ -19,6 +21,8 @@ namespace Toastify.Services { internal class VersionChecker : IDisposable { + private static readonly ILog logger = LogManager.GetLogger(typeof(VersionChecker)); + #region Singleton private static VersionChecker _instance; @@ -32,45 +36,23 @@ public static VersionChecker Instance #region Static properties - private static string _version; - - public static string CurrentVersion - { - get - { - if (_version == null) - { - _version = App.CurrentVersion; - - if (_version != null) - { - Regex regex = new Regex(@"([0-9]+\.[0-9]+\.[0-9]+)(?:\.[0-9]+)*"); - Match match = regex.Match(_version); - if (match.Success) - _version = match.Groups[1].Value; - } - } - - return _version; - } - } - - public static string UpdateUrl { get { return "https://github.com/aleab/toastify/releases"; } } - - public static string VersionUrl { get { return "https://raw.githubusercontent.com/aleab/toastify/master/Toastify/version"; } } + public static string GitHubReleasesUrl { get; } = App.RepoInfo.Format("https://github.com/:owner/:repo/releases"); public static TimeSpan VersionCheckInterval { get { return Settings.Current.VersionCheckFrequency.Value.ToTimeSpan(); } } #endregion Static properties - private Settings current; + private readonly GitHubAPI gitHubAPI; + private Settings current; private readonly Timer checkVersionTimer; public event EventHandler CheckVersionComplete; protected VersionChecker() { + this.gitHubAPI = new GitHubAPI(App.ProxyConfig); + this.current = Settings.Current; this.current.PropertyChanged += this.CurrentSettings_PropertyChanged; SettingsView.SettingsSaved += this.SettingsView_SettingsSaved; @@ -85,43 +67,43 @@ protected VersionChecker() public void CheckNow() { #if DEBUG - this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = CurrentVersion, New = false }); + this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = App.CurrentVersionNoRevision, New = false }); #else - Task.Run(async () => await this.ThreadedCheckVersion()); + Task.Run(() => this.CheckVersion()); #endif } #if !DEBUG - private async Task ThreadedCheckVersion() + private void CheckVersion() { - string downloadedString = null; try { - HttpClientHandler handler = Net.CreateHttpClientHandler(App.ProxyConfig); - using (HttpClient http = new HttpClient(handler)) - { - downloadedString = await http.GetStringAsync(new Uri(VersionUrl)).ConfigureAwait(false); - } - } - finally - { - string sRemote = string.Empty; + string latestTagName = null; + Release latest = this.gitHubAPI.GetLatestRelease(App.RepoInfo); + if (latest.HttpStatusCode == HttpStatusCode.OK) + latestTagName = latest.TagName; + + string sRemoteVersion = string.Empty; bool isNewVersion = false; - if (!string.IsNullOrWhiteSpace(downloadedString)) + if (!string.IsNullOrWhiteSpace(latestTagName)) { - var match = Regex.Match(downloadedString, @"(\d+\.?)+", RegexOptions.IgnoreCase | RegexOptions.Singleline); + var match = Regex.Match(latestTagName, @"(\d+\.?)+", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (match.Success) { - sRemote = match.Value; - Version vLocal = new Version(CurrentVersion); - Version vRemote = new Version(sRemote); - isNewVersion = vLocal.CompareTo(vRemote) < 0; + sRemoteVersion = match.Value; + Version localVersion = new Version(App.CurrentVersionNoRevision); + Version remoteVersion = new Version(sRemoteVersion); + isNewVersion = localVersion.CompareTo(remoteVersion) < 0; } } - this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = sRemote, New = isNewVersion }); + this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = sRemoteVersion, New = isNewVersion }); + } + catch (Exception ex) + { + logger.Error("Unknown error while checking for updates.", ex); } } diff --git a/Toastify/src/View/ChangelogView.xaml.cs b/Toastify/src/View/ChangelogView.xaml.cs index c58e7cb8..827b8830 100644 --- a/Toastify/src/View/ChangelogView.xaml.cs +++ b/Toastify/src/View/ChangelogView.xaml.cs @@ -56,10 +56,9 @@ private void DownloadChangelog() logger.Info("Downloading latest changelog..."); GitHubAPI gitHubAPI = new GitHubAPI(App.ProxyConfig); - RepoInfo repo = new RepoInfo("toastify", "aleab"); - Release release = gitHubAPI.GetReleaseByTagName(repo, App.CurrentVersion); + Release release = gitHubAPI.GetReleaseByTagName(App.RepoInfo, App.CurrentVersion); if (release.HttpStatusCode != HttpStatusCode.OK) - release = gitHubAPI.GetLatestRelease(repo); + release = gitHubAPI.GetLatestRelease(App.RepoInfo); if (release.HttpStatusCode == HttpStatusCode.OK) { @@ -76,7 +75,7 @@ private void DownloadChangelog() else { this.viewModel.ReleaseBodyMarkdown = "### Failed loading the changelog!\n" + - $"You can read the latest changes [here]({Releases.GetUrlOfLatestRelease(repo)})."; + $"You can read the latest changes [here]({Releases.GetUrlOfLatestRelease(App.RepoInfo)})."; this.PanelPublished.Visibility = Visibility.Collapsed; logger.Warn($"Failed to download the latest changelog. StatusCode = {release.HttpStatusCode}"); diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index fde88f54..91cf8303 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -889,7 +889,7 @@ private void Window_MouseDown(object sender, MouseButtonEventArgs e) this.FadeOut(true); if (this.isUpdateToast) - Process.Start(new ProcessStartInfo(VersionChecker.UpdateUrl)); + Process.Start(new ProcessStartInfo(VersionChecker.GitHubReleasesUrl)); else Spotify.Instance.SendAction(ToastifyAction.ShowSpotify); } diff --git a/Toastify/src/ViewModel/AboutViewModel.cs b/Toastify/src/ViewModel/AboutViewModel.cs index 1149eefd..7757f7d3 100644 --- a/Toastify/src/ViewModel/AboutViewModel.cs +++ b/Toastify/src/ViewModel/AboutViewModel.cs @@ -8,13 +8,13 @@ public class AboutViewModel : ObservableObject { private readonly Uri homepageUri; - public string ToastifyVersion { get { return VersionChecker.CurrentVersion; } } + public string ToastifyVersion { get { return App.CurrentVersionNoRevision; } } - public string HomepageUrl { get; } = "http://github.com/aleab/toastify"; + public string HomepageUrl { get; } = App.RepoInfo.Format("https://github.com/:owner/:repo"); public string HomepageUrlNoScheme { get { return $"{this.homepageUri.Host}{this.homepageUri.PathAndQuery}"; } } - public string UpdateUrl { get { return VersionChecker.UpdateUrl; } } + public string UpdateUrl { get { return VersionChecker.GitHubReleasesUrl; } } public AboutViewModel() { diff --git a/ToastifyAPI/GitHub/GitHubAPI.cs b/ToastifyAPI/GitHub/GitHubAPI.cs index a5935929..1da9a196 100644 --- a/ToastifyAPI/GitHub/GitHubAPI.cs +++ b/ToastifyAPI/GitHub/GitHubAPI.cs @@ -59,6 +59,30 @@ public T DownloadJson(string url) where T : BaseModel } } + public CollectionData DownloadCollectionJson(string url) where T : BaseModel + { + HttpClientHandler httpClientHandler = Net.CreateHttpClientHandler(this.proxyConfig); + using (HttpClient http = new HttpClient(httpClientHandler)) + { + AddDefaultHeaders(http); + + using (HttpResponseMessage response = http.GetAsync(url).Result) + { + byte[] raw = response.Content.ReadAsByteArrayAsync().Result; + string json = raw.Length > 0 ? encoding.GetString(raw) : "{}"; + + T[] result = JsonConvert.DeserializeObject(json); + CollectionData collection = new CollectionData + { + Collection = result.ToList(), + HttpResponseHeaders = response.Headers, + HttpStatusCode = response.StatusCode + }; + return collection; + } + } + } + private T DownloadJsonInternal(string url) { HttpClientHandler httpClientHandler = Net.CreateHttpClientHandler(this.proxyConfig); diff --git a/ToastifyAPI/GitHub/Model/CollectionData.cs b/ToastifyAPI/GitHub/Model/CollectionData.cs new file mode 100644 index 00000000..f150a7f9 --- /dev/null +++ b/ToastifyAPI/GitHub/Model/CollectionData.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace ToastifyAPI.GitHub.Model +{ + public class CollectionData : BaseModel where T : BaseModel + { + public ICollection Collection { get; set; } + } +} \ No newline at end of file diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs index 7da8b844..ed5a2e71 100644 --- a/ToastifyAPI/GitHub/Releases.cs +++ b/ToastifyAPI/GitHub/Releases.cs @@ -1,21 +1,52 @@ -using ToastifyAPI.GitHub.Model; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using ToastifyAPI.GitHub.Model; namespace ToastifyAPI.GitHub { public static class Releases { + /// + /// Get a published release with the specified tag. + /// + /// + /// + /// + /// public static Release GetReleaseByTagName(this GitHubAPI api, RepoInfo repo, string tag) { string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}", repo); return api.DownloadJson(url); } + /// + /// View the latest published full release for the repository. Draft releases and prereleases are not returned by this endpoint. + /// + /// + /// + /// public static Release GetLatestRelease(this GitHubAPI api, RepoInfo repo) { string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest", repo); return api.DownloadJson(url); } + /// + /// This returns a list of releases, which does not include regular Git tags that have not been associated with a release. + /// + /// Information about published releases are available to everyone. Only users with push access will receive listings for draft releases. + /// + /// + /// + /// + public static List GetReleases(this GitHubAPI api, RepoInfo repo) + { + string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases", repo); + CollectionData releases = api.DownloadCollectionJson(url); + return releases.HttpStatusCode == HttpStatusCode.OK ? releases.Collection.ToList() : new List(); + } + public static string GetUrlOfLatestRelease(RepoInfo repo) { return repo.Format("https://github.com/:owner/:repo/releases/latest"); diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 6b32b8c1..8ec9679d 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -167,6 +167,7 @@ + From 66b62aa63a60dead9c1f208baa27bef5760d1549 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 30 Mar 2018 20:46:36 +0200 Subject: [PATCH 274/452] Little fix for VersionChecker --- Toastify/src/Services/Analytics.cs | 2 +- Toastify/src/Services/VersionChecker.cs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Toastify/src/Services/Analytics.cs b/Toastify/src/Services/Analytics.cs index ba25a0c4..d35c3e66 100644 --- a/Toastify/src/Services/Analytics.cs +++ b/Toastify/src/Services/Analytics.cs @@ -58,7 +58,7 @@ internal static void Init() IWebProxy proxy = App.ProxyConfig.CreateWebProxy(); requestFactory = proxy == null ? new GoogleAnalyticsRequestFactory(TrackingId) : new GoogleAnalyticsRequestFactory(TrackingId, proxy); bool wasOnNoAnalyticsVersion = new Version(Settings.Current.PreviousVersion ?? "0.0.0") < new Version("1.9.7"); - bool appHasBeenJustUpdated = new Version(Settings.Current.PreviousVersion ?? "0.0.0") < new Version(VersionChecker.CurrentVersion); + bool appHasBeenJustUpdated = new Version(Settings.Current.PreviousVersion ?? "0.0.0") < new Version(App.CurrentVersionNoRevision); // Install Event if (Settings.Current.FirstRun || wasOnNoAnalyticsVersion) diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 0530970e..449969f2 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -34,14 +34,8 @@ public static VersionChecker Instance #endregion Singleton - #region Static properties - public static string GitHubReleasesUrl { get; } = App.RepoInfo.Format("https://github.com/:owner/:repo/releases"); - public static TimeSpan VersionCheckInterval { get { return Settings.Current.VersionCheckFrequency.Value.ToTimeSpan(); } } - - #endregion Static properties - private readonly GitHubAPI gitHubAPI; private Settings current; @@ -60,7 +54,7 @@ protected VersionChecker() #if DEBUG this.checkVersionTimer = null; #else - this.checkVersionTimer = new Timer(state => this.CheckNow(), null, CalcCheckVersionDueTime(), VersionCheckInterval); + this.checkVersionTimer = new Timer(state => this.CheckNow(), null, CalcCheckVersionDueTime().Add(TimeSpan.FromMinutes(2.5)), new TimeSpan(-1)); #endif } @@ -105,6 +99,13 @@ private void CheckVersion() { logger.Error("Unknown error while checking for updates.", ex); } + finally + { + Settings.Current.LastVersionCheck = DateTime.Now; + Settings.Current.Save(); + + this.checkVersionTimer?.Change(CalcCheckVersionDueTime(), new TimeSpan(-1)); + } } #endif @@ -114,7 +115,7 @@ private void CurrentSettings_PropertyChanged(object sender, PropertyChangedEvent switch (e.PropertyName) { case nameof(Settings.VersionCheckFrequency): - this.checkVersionTimer?.Change(CalcCheckVersionDueTime(), VersionCheckInterval); + this.checkVersionTimer?.Change(CalcCheckVersionDueTime(), new TimeSpan(-1)); break; } } @@ -145,7 +146,7 @@ private static TimeSpan CalcCheckVersionDueTime() { DateTime last = Settings.Current.LastVersionCheck; DateTime now = DateTime.Now; - TimeSpan freq = VersionCheckInterval; + TimeSpan freq = Settings.Current.VersionCheckFrequency.Value.ToTimeSpan(); if (last.Equals(default(DateTime))) { From 514790f974b2f2ff838c41f58a167e15cbbcab1d Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sat, 31 Mar 2018 01:39:55 +0200 Subject: [PATCH 275/452] Fix ToastView.DisplayFlashContent display time --- Toastify/src/View/ToastView.xaml.cs | 47 ++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 91cf8303..bd821d2e 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -584,15 +584,15 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t /// First title. /// Second title. /// Whether or not to start the toast fade-in animation. - /// Whether or no0t to force the toast to show up. - private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool force = false) + /// Whether or no0t to force the toast to show up. + private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool forceShow = false, bool showPermanent = false) { this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => { this.toastViewModel.Title1 = title1; this.toastViewModel.Title2 = title2; if (fadeIn) - this.ShowOrHideToast(force, keepUp: true); + this.ShowOrHideToast(force: forceShow, keepUp: true, permanent: showPermanent); })); } @@ -612,12 +612,34 @@ private void FetchOtherTrackInfo() /// The display time in milliseconds. public void DisplayFlashContent(string title1, string title2, string artUri, double displayTime) { - this.UpdateToastText(title1, title2, false); + this.DisplayFlashContent(title1, title2, artUri, displayTime, null); + } + + /// + /// Display a temporary content (title and image) on the toast and then execute some action. + /// + /// The string on the first line. + /// The text on the second line. + /// The URI of the image to display. + /// The display time in milliseconds. + /// A callback. + public void DisplayFlashContent(string title1, string title2, string artUri, double displayTime, Action callback) + { + this.UpdateToastText(title1, title2, fadeIn: true, forceShow: true, showPermanent: true); Task.Factory.StartNew(async () => { await this.UpdateAlbumArt(artUri); Timer timer = new Timer(displayTime) { AutoReset = false }; - timer.Elapsed += (sender, args) => this.ChangeCurrentSong(Spotify.Instance.CurrentSong); + timer.Elapsed += (sender, args) => + { + if (this.minimizeTimer?.Enabled != true) + { + this.FadeOut(now: true); + Thread.Sleep(750); + } + this.ChangeCurrentSong(Spotify.Instance.CurrentSong); + callback?.Invoke(); + }; timer.Start(); }); } @@ -643,7 +665,7 @@ private void ShowToastPreview(bool show) this.minimizeTimer?.Stop(); this.isPreviewForSettings = !show; - this.ShowOrHideToast(true, previewForSettings: true); + this.ShowOrHideToast(force: true, previewForSettings: true); this.isPreviewForSettings = show; if (!show) @@ -656,7 +678,8 @@ private void ShowToastPreview(bool show) /// Whether to force the toast to fade-in or fade-out. /// Whether to reset the fade-out timer or not. /// - private void ShowOrHideToast(bool force = false, bool keepUp = false, bool previewForSettings = false) + /// + private void ShowOrHideToast(bool force = false, bool keepUp = false, bool previewForSettings = false, bool permanent = false) { this.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => { @@ -666,12 +689,14 @@ private void ShowOrHideToast(bool force = false, bool keepUp = false, bool previ this.BeginAnimation(OpacityProperty, null); this.Opacity = 1.0; this.minimizeTimer.Interval = Math.Max(this.Settings.DisplayTime, 16); - this.minimizeTimer.Start(); + + if (!permanent) + this.minimizeTimer.Start(); } else if (this.ShownOrFading && !this.isPreviewForSettings) - this.FadeOut(force); + this.FadeOut(now: force); else - this.FadeIn(force, previewForSettings); + this.FadeIn(force: force, permanent: permanent || previewForSettings); })); } @@ -795,7 +820,7 @@ public void DisplayAction(ToastifyAction action) logger.Info($"{hWnd}, {timer}, {song}, {state}, {visibility}, {dispatcher}, {settings}\n Stack Trace:\n{Environment.StackTrace}"); } #endif - this.ShowOrHideToast(true); + this.ShowOrHideToast(force: true); break; case ToastifyAction.ThumbsUp: From 47fddef23410c05ba930d2c543c5abb8665f7d84 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Sat, 31 Mar 2018 02:37:36 +0200 Subject: [PATCH 276/452] Implement Auto-Updater --- Toastify/Toastify.csproj | 3 + Toastify/src/App.xaml.cs | 64 ++++++++++++- Toastify/src/Core/UpdateDeliveryMode.cs | 16 ++++ .../Events/CheckVersionCompleteEventArgs.cs | 9 +- Toastify/src/Events/UpdateReadyEventArgs.cs | 13 +++ Toastify/src/Model/Settings.cs | 9 ++ Toastify/src/Services/AutoUpdater.cs | 92 ++++++++++++++++++ Toastify/src/Services/VersionChecker.cs | 23 +++-- Toastify/src/View/AboutView.xaml.cs | 16 +++- Toastify/src/View/ToastView.xaml | 2 +- Toastify/src/View/ToastView.xaml.cs | 93 ++++++++++++------- Toastify/src/ViewModel/AboutViewModel.cs | 8 +- ToastifyAPI/GitHub/Model/Asset.cs | 46 +++++++++ ToastifyAPI/GitHub/Model/Release.cs | 10 +- ToastifyAPI/ToastifyAPI.csproj | 1 + 15 files changed, 348 insertions(+), 57 deletions(-) create mode 100644 Toastify/src/Core/UpdateDeliveryMode.cs create mode 100644 Toastify/src/Events/UpdateReadyEventArgs.cs create mode 100644 Toastify/src/Services/AutoUpdater.cs create mode 100644 ToastifyAPI/GitHub/Model/Asset.cs diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index 1718077e..85d8c826 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -164,10 +164,12 @@ + + @@ -215,6 +217,7 @@ Analytics.g.tt + diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 8858f4be..3e68cfd3 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -152,7 +152,8 @@ private static void PrepareToRun() if (logger.IsDebugEnabled) logger.Debug("Preparing to launch Toastify..."); - // Load Settings > [StartupTask] > Initialize Analytics > Update PreviousVersion to this one + // Load Settings > [StartupTask] > Initialize Analytics > Update PreviousVersion to this one + // > Initialize AutoUpdater & VersionChecker LoadSettings(); StartupTask(); Analytics.Init(); @@ -160,6 +161,8 @@ private static void PrepareToRun() previousVersion = Settings.Current.PreviousVersion; Settings.Current.PreviousVersion = App.CurrentVersionNoRevision; Settings.Current.Save(); + + InitUpdater(); } private static void RunApp() @@ -258,6 +261,17 @@ private static void StartupTask() } } + private static void InitUpdater() + { + // Just getting the instances to initialize the singletons + // ReSharper disable UnusedVariable + var ignore1 = VersionChecker.Instance; + var ignore2 = AutoUpdater.Instance; + // ReSharper restore UnusedVariable + + AutoUpdater.Instance.UpdateReady += AutoUpdater_UpdateReady; + } + private static void Spotify_Connected(object sender, SpotifyStateEventArgs spotifyStateEventArgs) { // Show the changelog if necessary @@ -269,6 +283,54 @@ private static void Spotify_Connected(object sender, SpotifyStateEventArgs spoti } } + private static void AutoUpdater_UpdateReady(object sender, UpdateReadyEventArgs e) + { + logger.Info($"New update is ready to be installed ({e.Version})"); + + MessageBoxResult choice = MessageBoxResult.Yes; + App.CallInSTAThread(() => + { + choice = CustomMessageBox.ShowYesNoCancel( + "A new update is ready to be installed!", + $"Toastify {e.Version}", + "Install", // Yes + "Open folder", // No + "Go to GitHub", // Cancel + MessageBoxImage.Information); + }); + + logger.Info($"Use choice = {(choice == MessageBoxResult.Cancel ? "Go to GitHub" : choice == MessageBoxResult.No ? "Open folder" : "Install")}"); + + try + { + if (choice == MessageBoxResult.Cancel) + { + ProcessStartInfo psi = new ProcessStartInfo(e.GitHubReleaseUrl) { UseShellExecute = true }; + Process.Start(psi); + } + else if (choice == MessageBoxResult.No) + { + FileInfo fileInfo = new FileInfo(e.InstallerPath); + ProcessStartInfo psi = new ProcessStartInfo(fileInfo.Directory?.FullName) + { + UseShellExecute = true, + Verb = "open" + }; + Process.Start(psi); + } + else + { + ProcessStartInfo psi = new ProcessStartInfo(e.InstallerPath) { UseShellExecute = true }; + Process.Start(psi); + App.Terminate(); + } + } + catch (Exception ex) + { + logger.Error($"Unknown error in {nameof(AutoUpdater_UpdateReady)}", ex); + } + } + [TabCompletion] internal class MainArgs { diff --git a/Toastify/src/Core/UpdateDeliveryMode.cs b/Toastify/src/Core/UpdateDeliveryMode.cs new file mode 100644 index 00000000..6c1ee9d2 --- /dev/null +++ b/Toastify/src/Core/UpdateDeliveryMode.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Toastify.Common; + +namespace Toastify.Core +{ + [JsonConverter(typeof(StringEnumConverter))] + public enum UpdateDeliveryMode + { + [ComboBoxItem("Notify only", "A toast will be displayed when a new version is available, but it won't be downloaded")] + NotifyUpdate, + + [ComboBoxItem("Download automatically", "The new version will be downloaded automatically; the user is notified when the update is ready to be installed")] + AutoDownload + } +} \ No newline at end of file diff --git a/Toastify/src/Events/CheckVersionCompleteEventArgs.cs b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs index fbed5bbd..ed8c6c42 100644 --- a/Toastify/src/Events/CheckVersionCompleteEventArgs.cs +++ b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs @@ -5,6 +5,13 @@ namespace Toastify.Events internal class CheckVersionCompleteEventArgs : EventArgs { public string Version { get; set; } - public bool New { get; set; } + + public bool IsNew { get; set; } + + public int GitHubReleaseId { get; set; } = -1; + + public string GitHubReleaseUrl { get; set; } + + public string GitHubReleaseDownloadUrl { get; set; } } } \ No newline at end of file diff --git a/Toastify/src/Events/UpdateReadyEventArgs.cs b/Toastify/src/Events/UpdateReadyEventArgs.cs new file mode 100644 index 00000000..32b3338d --- /dev/null +++ b/Toastify/src/Events/UpdateReadyEventArgs.cs @@ -0,0 +1,13 @@ +using System; + +namespace Toastify.Events +{ + public class UpdateReadyEventArgs : EventArgs + { + public string Version { get; set; } + + public string InstallerPath { get; set; } + + public string GitHubReleaseUrl { get; set; } + } +} \ No newline at end of file diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index 0b61a8be..2a908375 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -131,6 +131,7 @@ public static string SettingsFilePath private SettingValue _volumeControlMode; private SettingValue _windowsVolumeMixerIncrement; private SettingValue _versionCheckFrequency; + private SettingValue _updateDeliveryMode; private SettingValue _clipboardTemplate; private SettingValue _saveTrackToFile; private SettingValue _saveTrackToFilePath; @@ -265,6 +266,13 @@ public SettingValue VersionCheckFrequency set { this.SetSettingValue(ref this._versionCheckFrequency, value); } } + [DefaultValue(Core.UpdateDeliveryMode.NotifyUpdate)] + public SettingValue UpdateDeliveryMode + { + get { return this.GetSettingValue(ref this._updateDeliveryMode); } + set { this.SetSettingValue(ref this._updateDeliveryMode, value); } + } + [DefaultValue("I'm currently listening to {0}")] public SettingValue ClipboardTemplate { @@ -683,6 +691,7 @@ public void SetDefaultGeneral() this.WindowsVolumeMixerIncrement = new SettingValue(DefaultValueOf(this.WindowsVolumeMixerIncrement, nameof(this.WindowsVolumeMixerIncrement)), new Range(0.1f, 100.0f)); this.VersionCheckFrequency = DefaultValueOf(this.VersionCheckFrequency, nameof(this.VersionCheckFrequency)); + this.UpdateDeliveryMode = DefaultValueOf(this.UpdateDeliveryMode, nameof(this.UpdateDeliveryMode)); this.ClipboardTemplate = DefaultValueOf(this.ClipboardTemplate, nameof(this.ClipboardTemplate)); this.SaveTrackToFile = DefaultValueOf(this.SaveTrackToFile, nameof(this.SaveTrackToFile)); diff --git a/Toastify/src/Services/AutoUpdater.cs b/Toastify/src/Services/AutoUpdater.cs new file mode 100644 index 00000000..1e39c1da --- /dev/null +++ b/Toastify/src/Services/AutoUpdater.cs @@ -0,0 +1,92 @@ +using log4net; +using System; +using System.IO; +using System.Net; +using Toastify.Core; +using Toastify.Events; +using Toastify.Model; + +namespace Toastify.Services +{ + /// + /// Toastify auto-updater component + /// + /// + /// The installation part of the update is handled in . + /// + internal class AutoUpdater + { + private static readonly ILog logger = LogManager.GetLogger(typeof(AutoUpdater)); + + #region Singleton + + private static AutoUpdater _instance; + + public static AutoUpdater Instance + { + get { return _instance ?? (_instance = new AutoUpdater()); } + } + + #endregion Singleton + + public static string UpdateDownloadPath { get; } = Path.Combine(App.LocalApplicationData, "upd"); + + public event EventHandler AutoUpdateFailed; + + public event EventHandler UpdateReady; + + protected AutoUpdater() + { + VersionChecker.Instance.CheckVersionComplete += this.VersionChecker_CheckVersionComplete; + } + + private static bool ShouldDownload(UpdateDeliveryMode updateDeliveryMode) + { + return updateDeliveryMode == UpdateDeliveryMode.AutoDownload; + } + + private async void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) + { + if (!ShouldDownload(Settings.Current.UpdateDeliveryMode) || !e.IsNew) + return; + + if (string.IsNullOrWhiteSpace(e.GitHubReleaseDownloadUrl)) + this.AutoUpdateFailed?.Invoke(this, e); + else + { + using (WebClient webClient = new WebClient()) + { + webClient.Proxy = App.ProxyConfig.CreateWebProxy(); + try + { + if (Directory.Exists(UpdateDownloadPath)) + { + Directory.Delete(UpdateDownloadPath); + Directory.CreateDirectory(UpdateDownloadPath); + } + string filePath = Path.Combine(UpdateDownloadPath, "ToastifyInstaller.exe"); + await webClient.DownloadFileTaskAsync(UpdateDownloadPath, filePath); + + if (File.Exists(filePath)) + { + UpdateReadyEventArgs updateReadyEventArgs = new UpdateReadyEventArgs + { + Version = e.Version, + InstallerPath = filePath, + GitHubReleaseUrl = e.GitHubReleaseUrl + }; + this.UpdateReady?.Invoke(this, updateReadyEventArgs); + } + else + this.AutoUpdateFailed?.Invoke(this, e); + } + catch (Exception ex) + { + logger.Error("Unknown error while downloading new update.", ex); + this.AutoUpdateFailed?.Invoke(this, e); + } + } + } + } + } +} \ No newline at end of file diff --git a/Toastify/src/Services/VersionChecker.cs b/Toastify/src/Services/VersionChecker.cs index 449969f2..b876a09f 100644 --- a/Toastify/src/Services/VersionChecker.cs +++ b/Toastify/src/Services/VersionChecker.cs @@ -1,19 +1,20 @@ -using System; +using log4net; +using System; using System.ComponentModel; -using System.Net; using System.Threading; -using log4net; using Toastify.Core; using Toastify.Events; using Toastify.Model; using Toastify.View; using ToastifyAPI.GitHub; -using ToastifyAPI.GitHub.Model; #if !DEBUG +using System.Linq; +using System.Net; using System.Text.RegularExpressions; using System.Threading.Tasks; +using ToastifyAPI.GitHub.Model; #endif @@ -61,7 +62,7 @@ protected VersionChecker() public void CheckNow() { #if DEBUG - this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = App.CurrentVersionNoRevision, New = false }); + this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = App.CurrentVersionNoRevision, IsNew = false }); #else Task.Run(() => this.CheckVersion()); #endif @@ -93,7 +94,15 @@ private void CheckVersion() } } - this.CheckVersionComplete?.Invoke(this, new CheckVersionCompleteEventArgs { Version = sRemoteVersion, New = isNewVersion }); + CheckVersionCompleteEventArgs e = new CheckVersionCompleteEventArgs + { + Version = sRemoteVersion, + IsNew = isNewVersion, + GitHubReleaseId = latest.Id, + GitHubReleaseUrl = latest.HtmlUrl, + GitHubReleaseDownloadUrl = latest.Assets.FirstOrDefault(asset => asset.Name == "ToastifyInstaller.exe")?.DownloadUrl + }; + this.CheckVersionComplete?.Invoke(this, e); } catch (Exception ex) { @@ -144,7 +153,7 @@ public static void DisposeInstance() private static TimeSpan CalcCheckVersionDueTime() { - DateTime last = Settings.Current.LastVersionCheck; + DateTime last = Settings.Current.LastVersionCheck ?? default(DateTime); DateTime now = DateTime.Now; TimeSpan freq = Settings.Current.VersionCheckFrequency.Value.ToTimeSpan(); diff --git a/Toastify/src/View/AboutView.xaml.cs b/Toastify/src/View/AboutView.xaml.cs index 6a446990..9ec249bf 100644 --- a/Toastify/src/View/AboutView.xaml.cs +++ b/Toastify/src/View/AboutView.xaml.cs @@ -3,6 +3,7 @@ using System.Windows; using System.Windows.Documents; using System.Windows.Input; +using System.Windows.Threading; using Toastify.Events; using Toastify.Services; using Toastify.ViewModel; @@ -15,11 +16,14 @@ namespace Toastify.View [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] public partial class AboutView : Window { + private readonly AboutViewModel viewModel; + public AboutView() { this.InitializeComponent(); - this.DataContext = new AboutViewModel(); + this.viewModel = new AboutViewModel(); + this.DataContext = this.viewModel; } private void VersionChecker_CheckVersionComplete(object sender, CheckVersionCompleteEventArgs e) @@ -27,18 +31,20 @@ private void VersionChecker_CheckVersionComplete(object sender, CheckVersionComp string latestVersionText; if (string.IsNullOrEmpty(e.Version)) - latestVersionText = "Unable to check version."; - else if (e.New) + latestVersionText = "Unable to check for updates"; + else if (e.IsNew) latestVersionText = "New version available!"; else - latestVersionText = "You have the latest version."; + latestVersionText = "You have the latest version"; + + this.viewModel.UpdateUrl = e.GitHubReleaseUrl; this.Dispatcher.Invoke(() => { Run run = new Run(latestVersionText); this.LatestVersion.Inlines.Clear(); this.LatestVersion.Inlines.Add(run); - }, System.Windows.Threading.DispatcherPriority.Normal); + }, DispatcherPriority.Render); } private void Border_MouseUp(object sender, MouseButtonEventArgs e) diff --git a/Toastify/src/View/ToastView.xaml b/Toastify/src/View/ToastView.xaml index c4ed2a3a..e3c7cdf0 100644 --- a/Toastify/src/View/ToastView.xaml +++ b/Toastify/src/View/ToastView.xaml @@ -7,7 +7,7 @@ x:Class="Toastify.View.ToastView" Width="250" Height="70" AllowsTransparency="True" Background="#00000000" Opacity="1" Title="Toastify" WindowStyle="None" ResizeMode="NoResize" ShowInTaskbar="False" Cursor="Hand" Topmost="True" WindowState="Minimized" ShowActivated="False" - Loaded="Window_Loaded" MouseEnter="Window_MouseEnter" MouseLeave="Window_MouseLeave" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp"> + Loaded="Window_Loaded" MouseEnter="Window_MouseEnter" MouseLeave="Window_MouseLeave" MouseLeftButtonDown="Window_MouseLeftDown" MouseLeftButtonUp="Window_MouseLeftUp"> + \ No newline at end of file diff --git a/Toastify.Test/app.config b/Toastify.Test/app.config new file mode 100644 index 00000000..2bbe7715 --- /dev/null +++ b/Toastify.Test/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Toastify.Test/packages.config b/Toastify.Test/packages.config new file mode 100644 index 00000000..5acc07f4 --- /dev/null +++ b/Toastify.Test/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Toastify.sln b/Toastify.sln index ccef8998..bd81ad0d 100644 --- a/Toastify.sln +++ b/Toastify.sln @@ -25,58 +25,76 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Files", "Solution update-version.ps1 = update-version.ps1 EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toastify.Tests", "Toastify.Test\Toastify.Tests.csproj", "{8EDF4429-251A-416D-BB68-93F227191BCF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Windows (Debug)|Any CPU = Windows (Debug)|Any CPU - Windows (Debug)|x64 = Windows (Debug)|x64 - Windows (Release)|Any CPU = Windows (Release)|Any CPU - Windows (Release)|x64 = Windows (Release)|x64 - Windows (Test Release)|Any CPU = Windows (Test Release)|Any CPU - Windows (Test Release)|x64 = Windows (Test Release)|x64 + Win (Debug)|Any CPU = Win (Debug)|Any CPU + Win (Debug)|x64 = Win (Debug)|x64 + Win (Release)|Any CPU = Win (Release)|Any CPU + Win (Release)|x64 = Win (Release)|x64 + Win (Test Release)|Any CPU = Win (Test Release)|Any CPU + Win (Test Release)|x64 = Win (Test Release)|x64 zzz_ToastifyAPI (UWP)|Any CPU = zzz_ToastifyAPI (UWP)|Any CPU zzz_ToastifyAPI (UWP)|x64 = zzz_ToastifyAPI (UWP)|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|x64.ActiveCfg = Windows (Debug)|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Debug)|x64.Build.0 = Windows (Debug)|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.ActiveCfg = Windows (Release)|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Test Release)|Any CPU.ActiveCfg = Windows (Test Release)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Test Release)|Any CPU.Build.0 = Windows (Test Release)|Any CPU - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Test Release)|x64.ActiveCfg = Windows (Test Release)|x64 - {CCC4A761-56D2-4188-807F-F7A547DFB031}.Windows (Test Release)|x64.Build.0 = Windows (Test Release)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Debug)|x64.ActiveCfg = Windows (Debug)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Debug)|x64.Build.0 = Windows (Debug)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Release)|x64.ActiveCfg = Windows (Release)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Release)|x64.Build.0 = Windows (Release)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Test Release)|Any CPU.ActiveCfg = Windows (Test Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Test Release)|Any CPU.Build.0 = Windows (Test Release)|Any CPU + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Test Release)|x64.ActiveCfg = Windows (Test Release)|x64 + {CCC4A761-56D2-4188-807F-F7A547DFB031}.Win (Test Release)|x64.Build.0 = Windows (Test Release)|x64 {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|Any CPU.Build.0 = Windows (Debug)|Any CPU {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Windows (Debug)|x64 {CCC4A761-56D2-4188-807F-F7A547DFB031}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Windows (Debug)|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|Any CPU.ActiveCfg = Debug|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Debug)|x64.ActiveCfg = Debug|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|Any CPU.ActiveCfg = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Release)|x64.ActiveCfg = Release|x64 - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Test Release)|Any CPU.ActiveCfg = Release|Any CPU - {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Windows (Test Release)|x64.ActiveCfg = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Debug)|Any CPU.ActiveCfg = Debug|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Debug)|x64.ActiveCfg = Debug|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Release)|Any CPU.ActiveCfg = Release|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Release)|x64.ActiveCfg = Release|x64 + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Test Release)|Any CPU.ActiveCfg = Release|Any CPU + {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.Win (Test Release)|x64.ActiveCfg = Release|x64 {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Debug|Any CPU {68F1A17D-4930-4EEC-AEEF-5DD9C9033B40}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Debug|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|x64.ActiveCfg = Windows (Debug)|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Debug)|x64.Build.0 = Windows (Debug)|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|x64.ActiveCfg = Windows (Release)|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Release)|x64.Build.0 = Windows (Release)|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Test Release)|Any CPU.ActiveCfg = Windows (Test Release)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Test Release)|Any CPU.Build.0 = Windows (Test Release)|Any CPU - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Test Release)|x64.ActiveCfg = Windows (Test Release)|x64 - {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Windows (Test Release)|x64.Build.0 = Windows (Test Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Debug)|Any CPU.ActiveCfg = Windows (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Debug)|Any CPU.Build.0 = Windows (Debug)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Debug)|x64.ActiveCfg = Windows (Debug)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Debug)|x64.Build.0 = Windows (Debug)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Release)|Any CPU.ActiveCfg = Windows (Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Release)|Any CPU.Build.0 = Windows (Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Release)|x64.ActiveCfg = Windows (Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Release)|x64.Build.0 = Windows (Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Test Release)|Any CPU.ActiveCfg = Windows (Test Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Test Release)|Any CPU.Build.0 = Windows (Test Release)|Any CPU + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Test Release)|x64.ActiveCfg = Windows (Test Release)|x64 + {5D68931F-528F-4D95-89BE-3EB26832AF8C}.Win (Test Release)|x64.Build.0 = Windows (Test Release)|x64 {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Windows (UWP) (Debug)|Any CPU {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|Any CPU.Build.0 = Windows (UWP) (Debug)|Any CPU {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Windows (UWP) (Debug)|x64 {5D68931F-528F-4D95-89BE-3EB26832AF8C}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Windows (UWP) (Debug)|x64 + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Debug)|Any CPU.ActiveCfg = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Debug)|Any CPU.Build.0 = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Debug)|x64.ActiveCfg = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Debug)|x64.Build.0 = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Release)|Any CPU.ActiveCfg = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Release)|Any CPU.Build.0 = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Release)|x64.ActiveCfg = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Release)|x64.Build.0 = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Test Release)|Any CPU.ActiveCfg = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Test Release)|Any CPU.Build.0 = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Test Release)|x64.ActiveCfg = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.Win (Test Release)|x64.Build.0 = Release|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.zzz_ToastifyAPI (UWP)|Any CPU.ActiveCfg = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.zzz_ToastifyAPI (UWP)|Any CPU.Build.0 = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.zzz_ToastifyAPI (UWP)|x64.ActiveCfg = Debug|Any CPU + {8EDF4429-251A-416D-BB68-93F227191BCF}.zzz_ToastifyAPI (UWP)|x64.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Toastify/Properties/AssemblyInfo.cs b/Toastify/Properties/AssemblyInfo.cs index b35ac8e2..1a84c9ed 100644 --- a/Toastify/Properties/AssemblyInfo.cs +++ b/Toastify/Properties/AssemblyInfo.cs @@ -1,4 +1,5 @@ using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Windows; @@ -19,6 +20,8 @@ // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] +[assembly: InternalsVisibleTo("Toastify.Tests")] + // In order to begin building localizable applications, set // CultureYouAreCodingWith in your .csproj file // inside a . For example, if you are using US english diff --git a/Toastify/src/Events/CheckVersionCompleteEventArgs.cs b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs index ed8c6c42..d1890d0f 100644 --- a/Toastify/src/Events/CheckVersionCompleteEventArgs.cs +++ b/Toastify/src/Events/CheckVersionCompleteEventArgs.cs @@ -2,7 +2,7 @@ namespace Toastify.Events { - internal class CheckVersionCompleteEventArgs : EventArgs + public class CheckVersionCompleteEventArgs : EventArgs { public string Version { get; set; } diff --git a/Toastify/src/Events/SpotifyStateEventArgs.cs b/Toastify/src/Events/SpotifyStateEventArgs.cs index 6ade31ad..bbb57a44 100644 --- a/Toastify/src/Events/SpotifyStateEventArgs.cs +++ b/Toastify/src/Events/SpotifyStateEventArgs.cs @@ -4,7 +4,7 @@ namespace Toastify.Events { - internal class SpotifyStateEventArgs : EventArgs + public class SpotifyStateEventArgs : EventArgs { public Song CurrentSong { get; } public bool Playing { get; } diff --git a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs index c8423f93..65ab1ca2 100644 --- a/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs +++ b/Toastify/src/Events/SpotifyTrackChangedEventArgs.cs @@ -1,9 +1,9 @@ using System; using Toastify.Model; -namespace Toastify.Core +namespace Toastify.Events { - internal class SpotifyTrackChangedEventArgs : EventArgs + public class SpotifyTrackChangedEventArgs : EventArgs { public Song PreviousSong { get; } public Song NewSong { get; } diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index 1fde47de..7ea1c8c2 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -211,7 +211,7 @@ public bool IsValid { return this._isValid; } - set + private set { if (this._isValid != value) { @@ -229,7 +229,7 @@ public string InvalidReason { return this._invalidReason; } - set + private set { if (this._invalidReason != value) { @@ -373,13 +373,7 @@ private void InitGlobalKey() ToggleMouseHotkeyHook(this, true); } } - - /// - /// Validity rules are: - /// - /// 1. Ctrl or Alt must be selected - /// 2. a key must be specified - /// + private void CheckIfValid() { if (this.KeyOrButton == null || this.KeyOrButton.IsKey && this.KeyOrButton.Key == Key.None) diff --git a/Toastify/src/Model/Song.cs b/Toastify/src/Model/Song.cs index 4f95c159..6eef9346 100644 --- a/Toastify/src/Model/Song.cs +++ b/Toastify/src/Model/Song.cs @@ -12,8 +12,8 @@ public sealed class Song : IEquatable private static readonly AlbumArtSize[] albumArtSizes = { AlbumArtSize.Size160, AlbumArtSize.Size320, AlbumArtSize.Size640 }; - private const string TITLE_SPOTIFY_AD = "Spotify Ad"; - private const string TITLE_UNKNOWN = "[Unknown Track Type]"; + internal const string TITLE_SPOTIFY_AD = "Spotify Ad"; + internal const string TITLE_UNKNOWN = "[Unknown Track Type]"; public string Artist { get; } public string Track { get; } @@ -23,7 +23,7 @@ public sealed class Song : IEquatable public string CoverArtUrl { get; set; } - private Song(string title, int length, string type) : this(string.Empty, title, length, type, null) + private Song(string title, int length, string type) : this(string.Empty, title, length, type, string.Empty) { } From f686f01787156df0720926735163008703197b74 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Wed, 4 Apr 2018 21:55:13 +0200 Subject: [PATCH 302/452] Minor changes after rebase of branch 'unit-tests' --- Toastify.Test/Model/HotkeyTest.cs | 22 +++++++++++++--------- Toastify.Test/Model/KeyOrButtonTest.cs | 15 ++++++++------- Toastify.Test/Toastify.Tests.csproj | 4 ++-- Toastify.Test/packages.config | 4 ++-- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/Toastify.Test/Model/HotkeyTest.cs b/Toastify.Test/Model/HotkeyTest.cs index f85698d3..c3a318a2 100644 --- a/Toastify.Test/Model/HotkeyTest.cs +++ b/Toastify.Test/Model/HotkeyTest.cs @@ -1,9 +1,9 @@ -using System.Collections; -using System.Collections.Generic; +using NUnit.Framework; +using System.Collections; using System.Windows.Input; -using NUnit.Framework; using Toastify.Core; using Toastify.Model; +using MouseAction = Toastify.Core.MouseAction; namespace Toastify.Tests.Model { @@ -24,12 +24,16 @@ public static IEnumerable IsValidTestCases get { yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = Key.None }).Returns(false); - - yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseButton.XButton1 }).Returns(true); - yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseButton.XButton2 }).Returns(true); - yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseButton.Left }).Returns(false); - yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseButton.Middle }).Returns(false); - yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseButton.Right }).Returns(false); + + // XButton1 / XButton2 don't require any modifier + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.XButton1 }).Returns(true); + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.XButton2 }).Returns(true); + + // MWheelUp / MWheelUp require at least one modifier + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.MWheelUp }).Returns(false); + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.MWheelDown }).Returns(false); + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.MWheelUp, Ctrl = true }).Returns(true); + yield return new TestCaseData(new Hotkey { Action = ToastifyAction.PlayPause, KeyOrButton = MouseAction.MWheelDown, Ctrl = true }).Returns(true); } } } diff --git a/Toastify.Test/Model/KeyOrButtonTest.cs b/Toastify.Test/Model/KeyOrButtonTest.cs index 88fc4ea4..7b2de50a 100644 --- a/Toastify.Test/Model/KeyOrButtonTest.cs +++ b/Toastify.Test/Model/KeyOrButtonTest.cs @@ -2,6 +2,7 @@ using System; using System.Windows.Input; using Toastify.Model; +using MouseAction = Toastify.Core.MouseAction; namespace Toastify.Tests.Model { @@ -9,11 +10,11 @@ namespace Toastify.Tests.Model public class KeyOrButtonTest { [Test(Author = "aleab")] - [TestCase(Key.A, null), TestCase(null, MouseButton.Left)] - public void IsKeyTest(Key? key, MouseButton? mouseButton) + [TestCase(Key.A, null), TestCase(null, MouseAction.XButton1)] + public void IsKeyTest(Key? key, MouseAction? mouseAction) { // ReSharper disable once PossibleInvalidOperationException - KeyOrButton kob = key != null ? new KeyOrButton(Key.A) : new KeyOrButton(mouseButton.Value); + KeyOrButton kob = key != null ? new KeyOrButton(Key.A) : new KeyOrButton(mouseAction.Value); Assert.That(key != null ? kob.IsKey : !kob.IsKey); } @@ -40,13 +41,13 @@ public void KeyToKeyOrMouseButtonImplicitOperator() [Test(Author = "aleab")] public void MouseButtonToKeyOrMouseButtonImplicitOperator() { - const MouseButton mb = MouseButton.Left; - KeyOrButton kob = mb; + const MouseAction mouseAction = MouseAction.XButton1; + KeyOrButton keyOrButton = mouseAction; Assert.Multiple(() => { - Assert.That(!kob.IsKey); - Assert.That(kob.MouseButton, Is.EqualTo(mb)); + Assert.That(!keyOrButton.IsKey); + Assert.That(keyOrButton.MouseButton, Is.EqualTo(mouseAction)); }); } } diff --git a/Toastify.Test/Toastify.Tests.csproj b/Toastify.Test/Toastify.Tests.csproj index 0bb69793..634f8359 100644 --- a/Toastify.Test/Toastify.Tests.csproj +++ b/Toastify.Test/Toastify.Tests.csproj @@ -37,14 +37,14 @@ ..\packages\FakeItEasy.4.5.1\lib\net45\FakeItEasy.dll - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll ..\packages\NUnit.3.10.1\lib\net45\nunit.framework.dll - ..\packages\SpotifyAPI-NET.2.17.1\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.18.0\lib\SpotifyAPI.dll diff --git a/Toastify.Test/packages.config b/Toastify.Test/packages.config index 5acc07f4..bcfc1acd 100644 --- a/Toastify.Test/packages.config +++ b/Toastify.Test/packages.config @@ -1,7 +1,7 @@  - + - + \ No newline at end of file From 82bab3e50e2ddb207a8bce528d62ae4b4bcfa9df Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 15:35:29 +0200 Subject: [PATCH 303/452] Fix #68 --- Toastify/src/View/ToastView.xaml.cs | 39 ++++++++++++----------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index e8a0d2da..7c3db65e 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -364,10 +364,11 @@ private void ChangeCurrentSong(Song song) this.currentSong = song; - if (this.currentSong.IsOtherTrackType()) + if (this.currentSong?.IsOtherTrackType() == true) this.FetchOtherTrackInfo(); + else + this.UpdateToastText(this.currentSong); - this.UpdateToastText(this.currentSong); this.UpdateSongProgressBar(0.0); this.UpdateAlbumArt(); @@ -397,13 +398,14 @@ private void UpdateAlbumArt(bool forceUpdate = false) // Update cover art URL. string previousURI = this.toastIconURI; - if (this.currentSong == null) + if (this.currentSong == null || !this.currentSong.IsValid()) this.toastIconURI = DEFAULT_ICON; else { if (this.currentSong.IsAd()) this.currentSong.CoverArtUrl = AD_PLAYING_ICON; - else if (string.IsNullOrWhiteSpace(this.currentSong?.CoverArtUrl)) + else if (string.IsNullOrWhiteSpace(this.currentSong?.CoverArtUrl) || + !Uri.TryCreate(this.currentSong.CoverArtUrl, UriKind.RelativeOrAbsolute, out Uri _)) this.currentSong.CoverArtUrl = DEFAULT_ICON; this.toastIconURI = this.currentSong.CoverArtUrl; @@ -567,14 +569,16 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t { this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => { - if (altTitle1 != null) - this.UpdateToastText(altTitle1, song?.ToString() ?? string.Empty, fadeIn); + if (song == null || !song.IsValid()) + this.UpdateToastText(STATE_NOTHING_PLAYING, fadeIn: false); + else if (altTitle1 != null) + this.UpdateToastText(altTitle1, song.ToString(), fadeIn); else if (this.paused) - this.UpdateToastText(STATE_PAUSED, song?.ToString() ?? string.Empty, fadeIn); + this.UpdateToastText(STATE_PAUSED, song.ToString(), fadeIn); else { - this.toastViewModel.TrackName = song?.Track ?? string.Empty; - this.toastViewModel.ArtistName = song?.Artist ?? string.Empty; + this.toastViewModel.TrackName = song.Track ?? string.Empty; + this.toastViewModel.ArtistName = song.Artist ?? string.Empty; this.Title1.GetBindingExpression(TextBlock.TextProperty)?.UpdateTarget(); this.Title2.GetBindingExpression(TextBlock.TextProperty)?.UpdateTarget(); @@ -972,24 +976,13 @@ private void Spotify_Connected(object sender, SpotifyStateEventArgs e) this.FinalizeInit(); // Update current song - if (e.CurrentSong == null || !e.CurrentSong.IsValid()) - { - this.toastIconURI = DEFAULT_ICON; - this.UpdateToastText(STATE_NOTHING_PLAYING, string.Empty, false); - } - else - { - this.paused = !e.Playing; - this.ChangeCurrentSong(e.CurrentSong); - this.UpdateSongProgressBar(e.TrackTime); - } + this.paused = !e.Playing; + this.ChangeCurrentSong(e.CurrentSong); + this.UpdateSongProgressBar(e.TrackTime); } private void Spotify_SongChanged(object sender, SpotifyTrackChangedEventArgs e) { - if (e.NewSong == null || !e.NewSong.IsValid()) - return; - this.ChangeCurrentSong(e.NewSong); } From 75ebf5529af9c917f9a7a7d83590655ec25d4db0 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 15:36:20 +0200 Subject: [PATCH 304/452] Add JetBrains.Annotations package for R# annotations --- Toastify/Toastify.csproj | 3 +++ Toastify/packages.config | 1 + ToastifyAPI/ToastifyAPI.csproj | 3 +++ ToastifyAPI/packages.config | 1 + 4 files changed, 8 insertions(+) diff --git a/Toastify/Toastify.csproj b/Toastify/Toastify.csproj index d9c5322b..997cbb92 100644 --- a/Toastify/Toastify.csproj +++ b/Toastify/Toastify.csproj @@ -97,6 +97,9 @@ ..\packages\GoogleMeasurementProtocol.1.4.2\lib\net45\GoogleMeasurementProtocol.dll + + ..\packages\JetBrains.Annotations.11.1.0\lib\net20\JetBrains.Annotations.dll + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll diff --git a/Toastify/packages.config b/Toastify/packages.config index 0f65594b..2273092c 100644 --- a/Toastify/packages.config +++ b/Toastify/packages.config @@ -2,6 +2,7 @@ + diff --git a/ToastifyAPI/ToastifyAPI.csproj b/ToastifyAPI/ToastifyAPI.csproj index 1ee3e0e5..3979f8e6 100644 --- a/ToastifyAPI/ToastifyAPI.csproj +++ b/ToastifyAPI/ToastifyAPI.csproj @@ -146,6 +146,9 @@ + + ..\packages\JetBrains.Annotations.11.1.0\lib\net20\JetBrains.Annotations.dll + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll diff --git a/ToastifyAPI/packages.config b/ToastifyAPI/packages.config index 1a78154f..c0b68d1d 100644 --- a/ToastifyAPI/packages.config +++ b/ToastifyAPI/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file From cdec4a042bd4dbe43506e11e1fc7e8c7d1deda6e Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 16:57:14 +0200 Subject: [PATCH 305/452] Add some NotNull and CanBeNull attributes --- Toastify/src/App.xaml.cs | 7 +++++-- Toastify/src/Core/ProxyConfigAdapter.cs | 9 +++++---- Toastify/src/Helpers/ColorHelper.cs | 5 +++-- Toastify/src/Model/HotKey.cs | 15 ++++++++------- Toastify/src/Model/Settings.cs | 7 ++++--- Toastify/src/Security.cs | 23 +++++++---------------- Toastify/src/View/ToastView.xaml.cs | 19 ++++++++++--------- ToastifyAPI/GitHub/Model/Emoji.cs | 4 +++- ToastifyAPI/GitHub/Releases.cs | 11 ++++++----- ToastifyAPI/Helpers/Net.cs | 5 +++-- ToastifyAPI/Spotify.cs | 12 ++++++++---- ToastifyAPI/Spotify.uwp.cs | 2 ++ ToastifyAPI/Spotify.win32.cs | 5 ++++- 13 files changed, 68 insertions(+), 56 deletions(-) diff --git a/Toastify/src/App.xaml.cs b/Toastify/src/App.xaml.cs index 92f29151..ed03a1fe 100644 --- a/Toastify/src/App.xaml.cs +++ b/Toastify/src/App.xaml.cs @@ -19,6 +19,7 @@ using System.Windows; using System.Windows.Threading; using System.Xml.Serialization; +using JetBrains.Annotations; using Toastify.Core; using Toastify.Events; using Toastify.Model; @@ -457,12 +458,14 @@ public static void CallInSTAThread(Action action, bool background, string thread t?.Join(); } - public static Thread CallInSTAThreadAsync(Action action, bool background) + [CanBeNull] + public static Thread CallInSTAThreadAsync([CanBeNull] Action action, bool background) { return CallInSTAThreadAsync(action, background, null); } - public static Thread CallInSTAThreadAsync(Action action, bool background, string threadName) + [CanBeNull] + public static Thread CallInSTAThreadAsync([CanBeNull] Action action, bool background, [CanBeNull] string threadName) { if (action == null) return null; diff --git a/Toastify/src/Core/ProxyConfigAdapter.cs b/Toastify/src/Core/ProxyConfigAdapter.cs index 6cfa8749..3f55c417 100644 --- a/Toastify/src/Core/ProxyConfigAdapter.cs +++ b/Toastify/src/Core/ProxyConfigAdapter.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using JetBrains.Annotations; +using Newtonsoft.Json; using SpotifyAPI; using System; using System.Net; @@ -29,7 +30,7 @@ public int Port get { return this.ProxyConfig.Port; } set { this.ProxyConfig.Port = value; } } - + public string Username { get { return this.ProxyConfig.Username; } @@ -60,13 +61,13 @@ public ProxyConfigAdapter() : this(new ProxyConfig()) { } - internal ProxyConfigAdapter(ProxyConfig proxyConfig) + internal ProxyConfigAdapter([CanBeNull] ProxyConfig proxyConfig) { this.ProxyConfig = new ProxyConfig(); this.ProxyConfig.Set(proxyConfig); } - internal void Set(ProxyConfig proxyConfig) + internal void Set([CanBeNull] ProxyConfig proxyConfig) { this.ProxyConfig.Set(proxyConfig); } diff --git a/Toastify/src/Helpers/ColorHelper.cs b/Toastify/src/Helpers/ColorHelper.cs index 9b2199c5..584829b2 100644 --- a/Toastify/src/Helpers/ColorHelper.cs +++ b/Toastify/src/Helpers/ColorHelper.cs @@ -1,4 +1,5 @@ -using System; +using JetBrains.Annotations; +using System; using System.Globalization; using System.Windows.Media; @@ -11,7 +12,7 @@ internal static class ColorHelper ///
    /// Hex color. /// A . - public static Color HexToColor(string hexColor) + public static Color HexToColor([NotNull] string hexColor) { //Remove # if present if (hexColor.IndexOf('#') != -1) diff --git a/Toastify/src/Model/HotKey.cs b/Toastify/src/Model/HotKey.cs index 7ea1c8c2..d0c4f188 100644 --- a/Toastify/src/Model/HotKey.cs +++ b/Toastify/src/Model/HotKey.cs @@ -1,4 +1,5 @@ -using log4net; +using JetBrains.Annotations; +using log4net; using ManagedWinapi; using Newtonsoft.Json; using Newtonsoft.Json.Converters; @@ -38,6 +39,9 @@ public class Hotkey : ObservableObject, IXmlSerializable, ICloneable private static readonly List registeredMouseHooks = new List(); + private static IntPtr hMouseHook; + private static LowLevelMouseHookProc mouseHookProc = MouseHookProc; + #region Private fields private ToastifyAction _action; @@ -373,7 +377,7 @@ private void InitGlobalKey() ToggleMouseHotkeyHook(this, true); } } - + private void CheckIfValid() { if (this.KeyOrButton == null || this.KeyOrButton.IsKey && this.KeyOrButton.Key == Key.None) @@ -410,9 +414,6 @@ private bool TestModifiers() (this.WindowsKey == Keyboard.IsKeyDown(Key.LWin) || this.WindowsKey == Keyboard.IsKeyDown(Key.RWin)); } - private static IntPtr hMouseHook; - private static LowLevelMouseHookProc mouseHookProc = MouseHookProc; - private static void EnsureMouseHookEnabledIfNeeded() { // If no hotkeys need the mouse hook, then unregister it @@ -463,7 +464,7 @@ private static IntPtr MouseHookProc(int nCode, WindowsMessagesFlags wParam, LowL return User32.CallNextHookEx(hMouseHook, nCode, wParam, lParam); } - private static void ToggleMouseHotkeyHook(Hotkey hotkey, bool enable) + private static void ToggleMouseHotkeyHook([NotNull] Hotkey hotkey, bool enable) { if (hotkey == null) throw new ArgumentNullException(nameof(hotkey), nameof(hotkey)); @@ -515,7 +516,7 @@ public override string ToString() ///
    private const int WAIT_BETWEEN_HOTKEY_PRESS = 150; - private static void HotkeyActionCallback(Hotkey hotkey) + private static void HotkeyActionCallback([NotNull] Hotkey hotkey) { if (ToastView.Current?.IsInitComplete != true) return; diff --git a/Toastify/src/Model/Settings.cs b/Toastify/src/Model/Settings.cs index db728cef..3f7b7439 100644 --- a/Toastify/src/Model/Settings.cs +++ b/Toastify/src/Model/Settings.cs @@ -15,6 +15,7 @@ using System.Windows; using System.Windows.Input; using System.Xml.Serialization; +using JetBrains.Annotations; using Toastify.Common; using Toastify.Core; using Toastify.Helpers; @@ -986,7 +987,7 @@ private SettingValue GetSettingValue(ref SettingValue field, [CallerMem /// The new value. /// An optional property name to use in place of the automatically provided . /// Ignore. Filled automatically at runtime. - private void SetSettingValue(ref SettingValue field, SettingValue newValue, string propertyName = null, [CallerMemberName] string callerPropertyName = null) + private void SetSettingValue(ref SettingValue field, SettingValue newValue, [CanBeNull] string propertyName = null, [CallerMemberName] string callerPropertyName = null) where T : IComparable, IConvertible { if (field == null) @@ -1000,7 +1001,7 @@ private void SetSettingValue(ref SettingValue field, SettingValue newVa this.NotifyPropertyChanged(propertyName ?? callerPropertyName); } - private static T DefaultValueOf(SettingValue _, string propertyName) where T : IComparable, IConvertible + private static T DefaultValueOf(SettingValue _, [NotNull] string propertyName) where T : IComparable, IConvertible { var property = typeof(Settings).GetProperty(propertyName); if (property == null) @@ -1013,7 +1014,7 @@ private static T DefaultValueOf(SettingValue _, string propertyName) where return attribute.Value is T @default ? @default : default(T); } - private static T DefaultValueOf(T _, string propertyName) + private static T DefaultValueOf(T _, [NotNull] string propertyName) { var property = typeof(Settings).GetProperty(propertyName); if (property == null) diff --git a/Toastify/src/Security.cs b/Toastify/src/Security.cs index 2839bb5c..21ec572d 100644 --- a/Toastify/src/Security.cs +++ b/Toastify/src/Security.cs @@ -1,4 +1,5 @@ -using log4net; +using JetBrains.Annotations; +using log4net; using System; using System.IO; using System.Runtime.InteropServices; @@ -18,7 +19,7 @@ public static class Security { private static readonly ILog logger = LogManager.GetLogger(typeof(Security)); - public static bool ProtectedDataExists(string fileName) + public static bool ProtectedDataExists([NotNull] string fileName) { if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException(@"File name is not valid", nameof(fileName)); @@ -42,7 +43,7 @@ internal static void SaveProxyPassword(SecureString secureString) #endregion Proxy Password - internal static byte[] GetProtectedData(string fileName) + internal static byte[] GetProtectedData([NotNull] string fileName) { if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException(@"File name is not valid", nameof(fileName)); @@ -51,7 +52,7 @@ internal static byte[] GetProtectedData(string fileName) return ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser); } - internal static SecureString GetProtectedSecureString(string fileName) + internal static SecureString GetProtectedSecureString([NotNull] string fileName) { if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException(@"File name is not valid", nameof(fileName)); @@ -152,13 +153,8 @@ internal static SecureString GetProtectedSecureString(string fileName) } } - internal static void SaveProtectedData(byte[] plaintext, string fileName) + internal static void SaveProtectedData([NotNull] byte[] plaintext, [NotNull] string fileName) { - if (plaintext == null) - { - logger.Warn($"{nameof(plaintext)} is null"); - return; - } if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException(@"File name is not valid", nameof(fileName)); @@ -174,13 +170,8 @@ internal static void SaveProtectedData(byte[] plaintext, string fileName) SaveProtectedDataInternal(ciphertext, entropy, fileName); } - internal static void SaveProtectedData(SecureString secureString, string fileName) + internal static void SaveProtectedData([NotNull] SecureString secureString, [NotNull] string fileName) { - if (secureString == null) - { - logger.Warn($"{nameof(secureString)} is null"); - return; - } if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException(@"File name is not valid", nameof(fileName)); diff --git a/Toastify/src/View/ToastView.xaml.cs b/Toastify/src/View/ToastView.xaml.cs index 7c3db65e..367acd05 100644 --- a/Toastify/src/View/ToastView.xaml.cs +++ b/Toastify/src/View/ToastView.xaml.cs @@ -1,4 +1,5 @@ -using log4net; +using JetBrains.Annotations; +using log4net; using System; using System.Collections.Generic; using System.ComponentModel; @@ -357,7 +358,7 @@ private void LoadPlugins() /// Also, save track info to file, if settings say so. ///
    /// - private void UpdateAlbumArtFromUri(Uri uri) + private void UpdateAlbumArtFromUri([NotNull] Uri uri) { this.cover = new BitmapImage(); this.cover.BeginInit(); @@ -530,7 +531,7 @@ private void UpdateAlbumArtFromUri(Uri uri) /// NOTE #2: The specified will be closed. ///

    C^{WZZ>*!abR$CZG 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%0A6#1ti9ye`9Zuq1V{H4RoMkJU7Vk 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 z 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%0A?xqAF|E-){G^@|86z&=kX)M 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�tA|F=3MXbmm>OcV- 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 z z-!pu&?tyLq5tDVg40ef(SxA3Nsx8y2ax|C!FpZjx|4B7&)%KUc+VEwyrv8+4ZQRMk z_mKWj@#B(Df8JktW8R7r)SNP%my3>ca60{`9=V%_zh*Z)CIGGnA1BG% zh=cv_m{}~u%ofR$S@gP|=72=t=wGvv=Lc*2;xRF=xI|L5(s{*Ym&c(y1D*-o9c~f!Tiozg~&+~#D`56ka)U7ZOscEE! zqNgHqTM!wHA*)D^0}@AwQA;{Ay^?YDrM4)>gGayT?qc`SvAQ{@Xyb~#35|_F+RtTc z2|L*4l4FH==e18>w<_8k-8?@-;ci}_bWq31zZSV&Sgj<$P>t*y!k2D~j6~2qALLLZ zYRP~;nPmWB{;*S)sWw6Db_&%=L5HbyXkR%~! zvmt1&L(r;A-wl<%%XTa?4VMsQ)?!EVD2EM*XPymmKGW&yy0(5KkgVO!7WzA;WC_8bi$f)5tt@FcpTwU6U z)~l*H2h&LlsxpU`+8)6ZV_#%U^H}2-Qcy&{Hc!+^u z?YmI>aIsriPcyte7D71v@&hzIsQ$Q=>MbU7=Vi)zMoTwK7EAl_n(=JCtlS=%ww0(5 z);=driLeY9^Mn_6OK(rb&R&i6WJ|WpBKzD+MiXPlxi7^09VxB?#z$ng@gn6-p=F^k z6+$@&bsOe>mGMzA{USJMeyzxFV&w&Gi;RbX(gJuAkI>4*4dAiy1H{GXeNJ1bre|eN zw8n{a@6&f;1g{JbXdyp}%J9mUl|FHC~g1$C; zc!u8-x&(0r(wgVt80 zdy#D3EoZ-=uIfu>N#ek>4_Yxxo^OKv?WwCmp1~G1mAiS<_TvCeLXq z;jb8rF%%msl;N=S*%4?So9qfI$}#IJD2I#hMvc^_NXK6w9e=mRGsBO|veJD;aCzdO zxc`Z0q`)Ynh`G9Cp1v9F`LO&D1}r&Th3nZ35M%udL^KBIoZIBE#f?RQ#sl}}`l4@r z?vLGAl$_`jyX|=XI>TcKPViQ4?Z}R*Vq3Nh$qwVtx1~^rlENlHi4n8Bt{-iQ2M|5P zybG39$QXMC!IaOIiCgG%2NBFCItzBIVOUmIl?L3%;ZdMJ8%KlO=uy#^;TQgz(E^rm znN_>#!tjA0Ubo15UQXVdL}_^2ik2@#_y4m6kpFTV=s5DGyiJ6`AA#eDNL?ky=d&_R z$9Sx`>3CvC$Ze`l?*zrv_vBbUX!`x4o*Y!2vLm!7 zIl4@KwJ)LMH!flL>e;JpAG->?1;f4bL~xz2mG3kfWdDk8UZ{A3@_h;M+dwX3NnOLX zU@D5?r;qqKY^5AVx{PyPCTgK*c^i(}0HO~2b)X0DMGK;Pl`T^57r&0yV@|lK-A2_U zn;CO}B{a_49I5a&udLh}xY*{8U!Ij5&0EFRKqV8u9dD5y_}2;)#}&G7ykaVS94sVN z*w(njrl6C?lPKHRImcH7j@MHrIer*$`=)LFl7drWCp61A(qBS-ENG9;y#D(RNc~u* zaPhTFAs*Ifqo=ju-qn)mWBx4}Rgo8Ts@5Je-Z;~jnbBvwT<+bGoZaUuiiR&XDsEAT ztPdEuG4*6jyqjg(XPS)4uRl*sDNHJ%{ohZe0Vu|;c&2*zMy`EcAGLN|e7 z2vUzXensQfUUx2!$Rwu$hc`STdTWs_*=v08Pm79Pz`UANbSW2DCSkEa!t@$4d6M!2 z)p{2SgUA@!NBOfaaxzpwoU_=|;8hCbV@~sgWI~vhNzD_CX|$Q9Mt{C^kQ(7IfxI6S z6z1ZV7S6Wqir_jr^3) z8NZQ3rWRw^kf-@GeZR4RyrKA%k(3X`@UtDX!CErDzCY;_n)Q7wBOo@Dy2DuTrY!oF z@VksHBDU_B`>?}i9+}YMQ#QVvW%FT@s^pA@i2L)=VxB~XnBxro(v3fmK~WJS1h>N1 zLmiSZ<>R=+W>mjN-SNVAcs7OmA|NE8Dc4F6`t3HPkCv_38=YB4#US?nNC8M5z1kr} zV}7(JCwZ-^14Yoy&r_|q=ccVTCz^C8$Hs*2Fg}FM=7?I7^2%nzF_FpmO*8>89iBLa;bE;zzj@I|#BUm*vv%I=yU{y;&??m~8_2~2L z6+QedUi}J;?S(-d!`IE(rj2Q&>zQ&fBIz%>p4n|Y|A3-YNi->s1Ms5gF)?iI!m!0- zX(XMQYF*9$LH$$;EBKK4gk|e~v(3mkQrQQM3e}vxXO(@+OHhF2;W7Lb3)izw>QA2K zd$xdIsws%zRlVETpvpwXtGqNSb}rX5OL5F?Cu$=Cf@p+snh(j@pO2+PGbNaE_TI=@ z>wE&VXKS5+d&9C(@!7w`&v`=K*Q^KEGg~os8E$`k{vx(7NoZe2=o*O}h+a5&q zGd;Qsi`SvZnG&qniDQHGm1_@3sj7Apfw0 zZOMsD=WkYIw!TFyVJ>Yw(8<4gPCzSz*jbwA*s{}&m`7&rRK7_5Fg748Vg=qcTf`!! zO`^XCHTy9&-ND!b$&?+olbFG$p)ScC$&)jP;jdsz9gg+F`aM=$Pg{cgLj-Q6#DSo3!V$RSS$Jdgq)N_tQ)MyJ<+09E&0#AvLQF}(jA^OQvEhKe|(P5!n^9D*dBUoF~7be#!`pz-qjaMvY_z^YFJB-ChNDVbbhuh$dtBMG-mlHlQ+L?p9ekgvITLs1!QD}bh zJjg(#SoBk;TqVeD$P|uFIj(MW*koflxnWL`6MiY_%(p?fsUWtrI25}J(@JUVK2{m_ zUm7=;wWTGIwJi|`*(7AmX?p&*V3ksZC+$-hf_kNE{RF|v2QIgSC)_8_j5EM2y~G<2 z!Q?H94tJ_E51)jqGH!Kp)aX?4tCO5KsBr#e94D)Btiz7LNhDuXT@8)U&zy6H(AAh5|=c6w=eag1kSngb+PGr`j=tp6VoG6VyO|nY^qjz5EocKa_`f` zbl9_8_1DW>KtN-Cp`_dUF+ctTxERLTP8 ztXh8q5XI)s-gt^^l#`7)uJJQpnR6F0IDUUbw`6R0F#>P}qC zry$WK@`rya{X$qjGjWf~znc69>lln(;8FM#qB(_1JBZhA^}j&%e;fTTF#8YIMWS5% zoVbtOMYB_1|I%r4KcQK5k!sJZI!x95wUbPIRG2rs>2Oju02X}d4w+R?>x$FB_oW3_ z#F)FwW6!F&3#K~ghbww2vm2t>Pasw#EG@V^b`vukGiR7w6m>;E=W9s+FtJ_qEn+@Q(h z4&#Bd&EHyN0(qaMo4+ra@2bVb?|Iotl*6TGD`C#k^WwL-AKx6=s3DUGG8~ybSbJ!w zBtMv4wo_GrT26wtfl;Gb>y+G^E}0lwa;VNni_ZK2`QN7R4`Z{;e~V{hH*nIhQ#!v- z60!vFc;U^MQps}>KgKEsho)}e{f{^~89#vfBmdt8$HUbvd1OhB`Kk^?XPz`+1SYAe z6dc2oajV&w3m&h0n=d|>aFl&TBQn}%W`zwz^;IeD{BRkjW20Q$W3P+GZ=-X~D7-VJ$2zw{x-nia*kwjHZoVoW%lS}R9JvXk#f!Y!H(GgzX^ zcN?GM_oKx|rq~Jcb5zY^%rCsZf0Dp)Y&(h=&*6w8q%F(t0!MfM(begKx)6#%Vv z7*EU+b9#&N%a=mNxn@4$T8r3)tv!9*B2RWCAKwK{Sb$3 zvOAq4XO*7G$+b=(2@il;tuvC8kDSBm4ChHePW=ep>5C5kQOq@*G@_d0{teQ5)OppT zTi8%bxA(P;4416QZft4J8S83%OE5w0!r_s8iM*4{lOr)&EQg~PZB9)m9)RIoc3N zkYg&GN@#7CkxYI>|J=0`v=~uMt^(IN#S^=#h-u;ovEg3&E?tr*XYDA-!f631(SpCI zkySggnGLu#sSb2mG)JvrMdN}xftY$BTuSGP8unUYPYR8{o;j#-oyjvkDl=qW$7!DD zYjG@VXOA*M+fecDFx|Xb5GceaU<=^{m*yGYk@BZ9uE|a7PE_kySyeJdD@99&`6S|} z(C~h}%If%=A5CL9c8)+V3`|fI%3?A0=?DF>l`TS4^8|0jbzrJp+TDi_`7ubprK8qm z7ZBb(OTNadJLLfC>zl;u{E(}$3U(%>M>+$QtHwuaky>1hTS!t%V^QUpx{KG0V6UEn z1`~D8R&|aZCx3#O9<1$2{EVFbij_UCMu{qe5Yinr&-y2Rz`Jp;0)oz4nM_x{K(}=) zIP;(Q_w#B z3Jev27C*LEp?(r78?uC}9}gwUcOg~ylPyrBM->@eOq2e~m8iIH<|$CI!jX#DwN$6s zi-VBlp}p9{d%6V;gZW?+ej-#J*Gf69VCI(fZnjWMX`*Zur;`6^CfrIws&GylhbacW z>uUPCv?c>CJx@1dsu@&6KK%h18r3EGCWaVTX1bs{f2P4i@H|vbUuQx3pVx8XhBk z$HgqwnYa)#ZrIuJI&5jIQx5fMj8m@J)xBba`{FhM`my3}0lr~#JwHRWKEw}0?{hm_ zkJ>xDus))=Hh#O2j)>l#P+|ux``auC|Mk;tRPj}cOw;Qxt(&*%!2)p8|6@%X;4p28 zkM9vaZ-aoHc*lHp%JVDgS;4#z-G80eq8&qRq;GDZ5762DSEP>kzBVbxSmtgr6+oN$YaB}Jb zoL;(sII%rxD=nsyK#z*G3wN+ZY(IPy)-G+Im1ywbUjZo^rCm?wR3us$owRW>bGRPg zUeRTXEj4Y2DfR2`iWSw@`ngk%pBN$mP}vFo<~s_onU38W7-!o6b+aXlj7N(tErE$| zd@k4;7)yQCJshhL+bm*eb%9QJr*+Z~#h+nLn};9_4zv`jpll=jhfn{F&1u;_|eFV6^vqKITG>qu_D-ze6D?&!?WjM=s$goxt8z=$|iy|w?sRIipiS_fPI1zIPqh_el-*1gR zF$LZ*BIl+jpmY$_b*BuSfRs$Yf$-}c!^3504Gg(C_&7zFgMTS;afzI-LTywtNKC+4 z0zK;212O^KY67~<2|&}>0@pF9X*>@Im;g)DXib1b-zegPsb^a#todSLZw)0|I&81KM!slAL6Sqh$H<6lR3Q+U2c#3{ zQlE^3H3STZH43+j?=@V5Q4hs}mXE{rOsSQ27`sWq&YoxNIyo~a1cU8usFb!M4r662 z>lg;Vnkm|4ble~-fEm=8L7f@YnZfuS1#-HJNzdp%ywDlQsp1(VR?t0vLye>yg+%MR z$9R`b<*S$l5D03Z0%MsntD-aeiHtS<+XPs>tH06~d6g47aw_Bs#%s{SVo;wUgpwW#0)|7zyldIx zvZ+xc1U4!Om zMbn)u5N_JJ!bv?BxSAi7@$jH#f5|m#7o=jozTYp=3C0)!*gE*b`C8V=XNaqIGGsrj zZU*(~s8*A;x6=b8nB7Jr_F(uZzntoo6JqGy`w#1{mA;b9CMOxLy9~A-Yrb;JTeVg= z`V{`(ogA#cjN1KPa*bx@s;+7(?@ zZ1eqto)Fje%5RH)KQU3QnU2JBiZ{sk`lk0N&8=dfF%d|{rr`O8XzQzGA_&mHwqc&w z9%np+yO}i~6L?IXDeA?yz?HT5c$y0i(qZHa^_Qx47&o)D1Y4}wLZF;T#B3d2ki#v( z$JG9y7?$H~>>>R(#bVzJrH{(scessnd-zi5A2A;bIs7Dq1l#*QIp5L}c5RY=CxmU3 z*N^0=b)HuFP;ouUkvDOZx1Pfdhc{NEs8XLEmrs8(Kgo0WaTTGJ z_|A(eM~m3nj;zy(B{=H2IC7Q@*(s}=*yTq#m2Hh@l6|448_-ph| zEC9PgrF(*VkA$qQnf4=@3)Su(!)dmwe~}y|C2|PU=n}ofb)skgI^z&7hSwRaL)M zj7X+N2hijdL)_}Xi-mFkgR_`@VIbY6ARQwhk4aD4G6lRe;F2U&wbW3}bfasOGzFJg ztMPh~THuj_v?tviB%s$B4X^ut{EAa!PFc?8c0Nc(Ph?LY=u`zw$;dQW=tJ0;Y&$09)yc z_Sl6We1J46FlFf5TxG|kMvHVpx0kri5LXJ_vGQxeRHVIQL84*%(ZN4a6)Yd_DIQ_( z&oXwMlv%zv@aU~zEe`j%5r5glUzuB?4<<)Sgh9eVnlj<-w<=mTOeTEUxEY@~X=F49 zLqOB}Y2h$DGa9$%P|i982t<=?$X;@CjxN{FHH+~1TvN71_>d!e}z zrycA$|2J>Blby~w0HZLsOMG{f|YZUkg1)?0)Nol9}(SF3y%fQcgrOI5& zL7?)8ChpCSzyS0oPcl{lpK`aq>Ceg!e>(3HMU~08NyH{~97W<2ruhIx=9QkFB_&a* zR~oJ84*^Crn`eRo#<#|r?}li1k_jWeMD%Gtdx{>#9A~8*HX{Y~;CbEcJpcM^$$jrg zK+<`5*o+ z+hnRU=D3dc%EADDVGaKS!yY&c6Pia6=a&u&GD=D{d7@&+y7c@tQm*jXzsf}IU|>%~Tl5R+NEP<}MZ9*jDA5O!CmL@e z7$tf@S;8qZNZXA30*(qXP+){oRhSXo$KLx*ITyC}@q zVo{vSrC(4GMMh=yP^eGEeLlBGf2Vd%W=mUoY?2(HywaP^@giY8sZI6Bg za_J6FhSZ%(QASXmsaJrdy3Cdbc?+-QnqUTFC`k_?!`V zd$jvw3-Y+yFh?vw@tLQd%nGbT530^N#gM-RI))x-jgFj%NBr7JpbMKO zpE(|2-20R;9*#edQHwpO%Ic2C)Eo2Jn<6h&nJwHa6b<_4jL&f!jY>I-^nCoehqOMO zoU_5= zG^S%2@yys$3aV(-5HcV^-im3YNu4jrx&%3|D#d=*=j z6T3OjUwM16+w}n2Ad2~mPeX%$TKMdW`B~u-*V7fQr?o6Rv8_Qd4cAh`B$eFaqZgy(%RRvJG^&_YmGM6~WZ{?JW7H}4# zN$!gg{qc(m>>(X%o+x8F?_2zt;-BKM1zX?D`3DtqO^*M}0!-(=ilXp&71w8l&vHG@ znJizHr>kxPB;jjQd~57J`wKoNI&)uEwS6b|i7@u9*%cEad&K%%ZGSab`hH|1WVSadYYENY1Mzd=h&8}@UyS7of7Ak#-;bw6c%!#i!^OFtIEzCYH z%ibR>eIe2-s8Rcwx=4hzQz2HSA8SkuR;GHgvnhL(^Pw4w;7hXhLbn-DL_gw-?n)U3 zO^CXsKym%QkX47`XcKRKy~k6P<7$k63+vsWpr|E} z|G-|2nuzEHI}In>s9!h8+$6?BO@CN2hvL(Je3HY~n;IpDvs4l{Qp)=OZ`OZIfzX?> z_dU=_X72R(jGsQo4=1w*&C3fn!KBz2gvi-Y8Nw3895>#`>Zo$Y9M`IcyqM!Ed3ZS# zcdYo;M=23-qMtcd5;usr?EX0g2yBhox^*YmQfC%*! z)kixpx0Zs&rE>a$OZ}#Q??lP?s`zT}FuqG(<4NeO$;>Amw_MaHjZz*EL3@V>+GOOgOn_F0hzdQ)iC8VY0@;9=~Fnl`wHzZMODEgSk8 z_s#dM6LiGSCQs;g<=kE|dKM@}LT?J?z;fb|qjMtIqUaV>5*`w$Coq&W%%`&6RQ*DJ z)Cu&)A5)j8P<#DZY#$lOa(HJrGN7g3)3BxA)4-YUL!tXNgRP(g76qMT;SMMP54viC zXQi3&aWc__&!5#S03w(vdOd`1BS(q)g5skkd@qhi(~4<^c<$dqyPqD`TcZ`W$W5BA zn*+NImtz#6V~t<_QFb<6YA`yQr2*aSPbSC8Avr3|98#%q$B^{v)pIo6^UI_$;sNUw z0$4*rh^ujdnP2RY&(+IpmF_W4G1KNsHeSb>uTqUM!hDv=VL$dtBpJ5iiP7~k3yoDFg%?4LjBAx3)oo@-;0=)BM?S&le^BF%jbo{L%KrE_~bTuxe2(if|ec-M>1sVHBP!6-Z*ZT+cr!OIq(r6^>z02Bp zUia(y60b@S7_I*SIS=&d<1*D#g;Kycpv4LOrrv_Wa2xS+D9O3>gNu~DY^fC+@e;8BD*>Ck zMz9e}^TtmRyTEtTMm*E95ew1AiNu*a>#J?VrsO*9+e(K1Uz&%Z7x}@jLuge0lnOx| z{*V8uxWE+Md*K{d&;J88Qo=}64}7Q!3&AyU%p|dh*#nT3mw=g};;@JZk4PV8xrCP! zH(Bi0n9%XA5tSR#Gva=n#mB|yPFY9@8eUW|Xg-ZL>=Lr3FA~dL1?}=lYF#M0YTN}- zpb{EaUc@hi04Zpe(Z8T{5{pI>tw)nn;EgqzHK*U6kQp++p(R-Y#}?LNf%;V8pAY~%ftk{|$BJcikc*Lrm!i>nONACt zwAwuPz2T%B8~(srmhqTE)^{F5?nM&}AYF*N=L+MWd5;vYCC>Ps8G zQiX?qo`pS5RHn*yyi10Q;|=q$O$eWgOT5Vr-Yx1)ISr#Un<9-eh<KV0!8 z^Jtw=KGP>66wm*DA*$gP+%)}huhWwoF6AN%dslSe?AnjxzC+Q0v2`QX3F&EXX!TQ2 z`IJVF5ZGfjfz}`O>HgLn_AmA=W2#UQMwHmDj$gymVlIld6vzOGPezH6BH&Z{`-AE4 ztOdfm(+W0`E?Kz~$SfCJ|TfoBh01}szQHff>8Qs)kbW=;*F)baB z2IlS+qxMWBhB?G@>+Ng3KXQ^Wo5CHoQFJakr^qcr;`v}|U#mBqZ=9*VvH#eTZ2Krr8!Dp8Cie353)Yr~on z&p(Sv@AEm`;gibu>AO)OWgGW4&?|_mtMNl2%K97>QpIJ>S;-Us0a$ANmXTH8V%(yd z_IyD+HgdY2CY!krplA1*5(?8{?)S2E2k#uq+;inNy`SaOM#6Xw&aH2Dk=L)gktL$5 z3T%;_EKl-Ex`|o2rW!KB9{y5lk8yn?z@)ZBJt=0eQF2tA85wJS{_Ca2#e8l` zt=^^L5DRbYG;Sf2Kjt=B0ANJTBH?AQ{fc8i#`c@m%P4;UC}WunL&N)B*)rRXpURdf zCa$JVhJ!5wmj#H@V&T8y)%EyYa1k;qZy};CKl3=h%#WdCwWl9oke0(IBxto}UMP3%_x*vYTmF2%u$hX7zt+1N$!WzPo zdA5d2Bp~jzP)!T@){;-O7hLOh=HIesd=<gRl^w0am9KOrH=JbHx zCcz55^2hJvTCdnOj|Upxb~XN$eC(m?d>choif=V8N`K*Kr>ptLe33ZYJu~LljSIRq zZJy=Y^pLacL@t(m!zK40Z`W$t)K$vkJNfiT?p!{#ewITE^K~pK=#?3^6#Uy9r}=x> zdVk9L{gw6mP3yOY7RlcZP~~de&G<(L0hRssf%&dR@#2mS+<=~E;8rtEW^|y&)%af&OH5~53F;$)(XEI>+`~;^ zP#zA1Pjfv-!yEoNdg-{I;H@blnoTZ^PxRVFb%f?T@eWU#KINvd7>@Sv?CalBM)x?{ z?%Hr@bWlIp?>XkvJJv%6R?A^6R7Vdfi&szt(iT*n_u3V17u#%lBfho(w0k_ubx#F z-Q|@J62TH*m)JRstnWES+?H6Z2Kf%xLk`MB2fnfD`RKr%kRiTB2fhuisE2!8jgP8_ zCE=Rrz*1M^NFjLx5%Ye$=)iKw5f!aFolMEAQk~dRC14g>IjAfVg?DIsk0jj;xAcF! zVv~0ybHy2dEFl|Ht>pT+bO%e?pIE72!@ec6a>%s~JP~i&g}(KY7HB+l@4}p`uu+7{ zeDSM3ZuS>fC$ILYb42pZ9~hlXUK-Rdkx4K%th5Hq)p!stf(_d1>)Yby?0#%yGCMXh zJ&K9zWmXv^-+GikHg0H8%w8UqX zMF%QZp)K7i=B6FVy>fOJUa?7PDaHKM&cNc9lw>|hp@vcQo-$XXsQbvD;^S6(St7}6 zWDK$VzY&>fL3e=#nXe)BYrd|U?u$RSKtQY6V=Op<-&o*rS!Fo3bYmnQ;d@T9vHW1R z&PMcAW9ZuSxmLrGw!penVf`b*8dle<(;e`kNKwnN1=2_1Lf4_qlp_JKUOxSchIi|! zEIf(f!iJ&ef5Li76<(rhxTc*m<(o zE%uk*PNk*qk|i%PPOMs9dgjw#_^aEv3ItUtvc^MV{CwF648T}Fz{j#LkIk-U+Si_l2 zX784o4XaG-t_mYC+H@M@5aP_D1ma^?!ol({?6s`B`R1O)HaYvDk5aOUv0*h`5C7?} zxJGT#)oU%=5VlB7j|)Q}(!xpDyF~x)W+ijVLl}pQPatY|5F!}9h`)=u0H^-*yTkeX zt&99ZaA0)u$Mu)qEtlbR$ZKA*8B$P?yq~}B#Jv!@H6tb6HRHm_`1;jZ=c9bV=BbiY zaLF0vD*bDj^iN%hSrnUbyQ}eH`GuZ-O@5)G!r9J%Y@RB=%Uz8V<(Hjn9KW*J5VGo; zdO3}tb{^x-UFt}}DI%pYVM4#w>@=Ros>#p*uiDOYWC(_3cuF#;slhk-x3E%l_RL68 zz$A-m3;0h`{ra)QPx!5h=RGHTuRp#*>qgBci2a>)57QRx0C>-Tsaaxfxl(0red=OXJV37Rbrg^ zkd+Y4xeV>dL<-K4X0j7~iiMn4yj;fQCiyc@{%8UHJ$j%9DzT3|#^H}MTv9!ce8{x50&gT*%qYw20oZ z(0KTx%pgzV5dx81CXRQUOz7jXUcFl54jQlGg+iV;e8?a~G`g&nD!V$;#}*blS0NgHULa&Yk&Q@NmfR`X4#rCdL6k5?TN z%?Dn2rhgX}bEO?HuS+rYSx83vWdbe}Egg36ec_oIA)OP0Xf>ETiJULN%JL^HhYr3< zKiQ$}TkWtv$0Baym$S4~62lpx3$k0Gkl;g~g(19+K)bI+qAd=@#(E!wSr*pE1oH$)B|~XPQmaitm$V zg0&Q|)?#WPtnQtPLo?P3+?LhbV*5!DdJQphPzrQ0-r$oAN#-42IS%%(k0%rjVfX&)E6?w1MIC#I9Y1E}t z=ZL%WnZ~X|nFV|Uk6+<1fqU3N_7pj~Z-(OAp+fO(@vVt~C@8q(9;yX{_fWCzljtQB zsp%v-36qw}m$`{bzF|a9-$dnIQx4yi+=Nf}TF}&6p9$K>BezkR-&L#t66C@uGa%oE zLoS>$!|@dl3CC9?d52y%xA^j(-_-1_(%xYXa zMP#$7j5)FQUL*G25^jr?*n8+I>_@DgKcH=b9LvA|Q`o(6@2828#65FZYy@<11gR%7<_6(1$x5;J&%KH{uFN8_mIVJbIt2>#> zw;@}V!Gyt?PsS5ci#hI~0wD@#qzbc1nK5GNLo`l{q7h%?V@c3(SZ|dKav&wsAlJjzr~rh z&#^7vop$n8al0DcpUWts1N)C0hEH^0jriUo0~|3P2Yt$kN+eX;)%XDz9>2nFT=IrU z?t~u^rx8gwn*`v^kIwvQr8sajisGOl^*M068f6r;_}Sd|Zu31mo}K}4v9bp4f`>PL zat#Bvjq01mlMyGVHzngb;W!t?E_jVeAczt7ao$hhRXhgYrJXaW;VCRka;wcQV?Gry z=Y@j@gw)v|V}=1YA{h>z0st~912dLgCJDPqpo)?Cc1}+K5a5LZ&kB!Lx<%VdJb(ch z3ZvrYudes)cd1wU00cyh)2Q&ja7Y3!A6iN)<%ebp#^*V z$BG46Ok>Gitm~!RknmPI44PU;YDA5R3;;M1KFNF?ZH~v3=*;C8fgw1t2yz&Av#`~{ ze&aTCiL=bPXX`?3W{$K9#I2~8Mp=JOu^W+(IU1LmKDlGqew89E`|2~i3{OiK2!8XUIKEQDRL z{1Niz=~^0Kad9H&^8VDKj#(*Nu0K|5=jmKq?$%l7$=hZA=GrP2Q(`v-qHRc9m-n01 zVC${jqUS%$2b5Rg;@ez}=QAb3FD_Q=OC0?|HSUcz)Ow-#;+$&xKP!t|p(4)?SNuWM zgPA|0u!3H2=_LV_VOXpeenVP|Hw(1H;IY3LE4)ThJgrN8+|*(MTz}iS^}~QJ%N+tR zhcJ!@cAH-4l3Jo2PS5iznv)~+DXCp7PW@QZfmJJl(HX_5@M8Hn7QU4$cWhbV8|23s z857j=ic^InShIi^&}u%^;`!Ya-SD{LqqcAhf~kf+gw5hCf-mNvN)K?`dVpS37c>XB z5pQu+O1m2GgkMet@`$vR+7gUzc6yGkXbkA@1a%y;W=5%0i_Y+Hm`#3;g>&me9%p@` ziQy70b84&K<80{fUWbU5nzSw2`YBt!%TMgeBLK%q1+{FdWfbA)Nd7ul&x;3-WG!}< zhjXWqky52Mnah!@h(n(7M+|uiR9}b(sXFOuYy*K)eotO9UuD<0nMeR<>CN{M5ToI! zsA*jfX{71->vjr0ucD}2%lMdLQA{!8E{u?-n4#`vl)cHs>9lV-L8u<4^d_$$gwBDR z6n0k7gPBiGiLTDGaZW9MWkIU2bCq-u2mg-wY5W_gWz0q!eGdp+u-OuJ3nv|PU*bK1 zCJAGrvg{1=2O>fGO5@r3yFKL!D<% zB&$FEbAu)3_Z;-;NuTSo_kEuCxsppCZl)RHz#;DRxRS98eU)7auSALboRG$01We

    /// - private void UpdateAlbumArtFromMemoryStream(MemoryStream memoryStream) + private void UpdateAlbumArtFromMemoryStream([NotNull] MemoryStream memoryStream) { this.cover = new BitmapImage(); this.cover.BeginInit(); @@ -565,7 +566,7 @@ private void UpdateAlbumArtFromMemoryStream(MemoryStream memoryStream) /// song's information to be displayed on one line as the second title. /// /// Whether or not to start the toast fade-in animation. - private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = true) + private void UpdateToastText([CanBeNull] Song song, string altTitle1 = null, bool fadeIn = true) { this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => { @@ -600,7 +601,7 @@ private void UpdateToastText(Song song, string altTitle1 = null, bool fadeIn = t /// Whether or not to start the toast fade-in animation. /// Whether or not to force the toast to show up. /// - private void UpdateToastText(string title1, string title2 = "", bool fadeIn = true, bool forceShow = false, bool showPermanent = false) + private void UpdateToastText([NotNull] string title1, [NotNull] string title2 = "", bool fadeIn = true, bool forceShow = false, bool showPermanent = false) { this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => { @@ -631,7 +632,7 @@ private void FetchOtherTrackInfo() /// The text on the second line. /// The URI of the image to display. /// The display time in milliseconds. - public void DisplayFlashContent(string title1, string title2, string artUri, double displayTime) + public void DisplayFlashContent([NotNull] string title1, [NotNull] string title2, [NotNull] string artUri, double displayTime) { this.DisplayFlashContent(title1, title2, artUri, displayTime, null); } @@ -644,7 +645,7 @@ public void DisplayFlashContent(string title1, string title2, string artUri, dou /// The URI of the image to display. /// The display time in milliseconds. /// A callback. - public void DisplayFlashContent(string title1, string title2, string artUri, double displayTime, Action callback) + public void DisplayFlashContent([NotNull] string title1, [NotNull] string title2, [NotNull] string artUri, double displayTime, Action callback) { this.UpdateToastText(title1, title2, fadeIn: true, forceShow: true, showPermanent: true); Task.Factory.StartNew(async () => diff --git a/ToastifyAPI/GitHub/Model/Emoji.cs b/ToastifyAPI/GitHub/Model/Emoji.cs index 26bd303e..7fb68928 100644 --- a/ToastifyAPI/GitHub/Model/Emoji.cs +++ b/ToastifyAPI/GitHub/Model/Emoji.cs @@ -1,4 +1,5 @@ -using System.Globalization; +using JetBrains.Annotations; +using System.Globalization; using System.Text.RegularExpressions; namespace ToastifyAPI.GitHub.Model @@ -9,6 +10,7 @@ public class Emoji public string Url { get; set; } + [NotNull] public string GetAsUnicodeString() { if (string.IsNullOrWhiteSpace(this.Url)) diff --git a/ToastifyAPI/GitHub/Releases.cs b/ToastifyAPI/GitHub/Releases.cs index ed5a2e71..79c88631 100644 --- a/ToastifyAPI/GitHub/Releases.cs +++ b/ToastifyAPI/GitHub/Releases.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using JetBrains.Annotations; +using System.Collections.Generic; using System.Linq; using System.Net; using ToastifyAPI.GitHub.Model; @@ -14,7 +15,7 @@ public static class Releases /// /// /// - public static Release GetReleaseByTagName(this GitHubAPI api, RepoInfo repo, string tag) + public static Release GetReleaseByTagName(this GitHubAPI api, [NotNull] RepoInfo repo, [NotNull] string tag) { string url = api.GetFullEndpointUrl($"/repos/:owner/:repo/releases/tags/{tag}", repo); return api.DownloadJson(url); @@ -26,7 +27,7 @@ public static Release GetReleaseByTagName(this GitHubAPI api, RepoInfo repo, str /// /// /// - public static Release GetLatestRelease(this GitHubAPI api, RepoInfo repo) + public static Release GetLatestRelease(this GitHubAPI api, [NotNull] RepoInfo repo) { string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases/latest", repo); return api.DownloadJson(url); @@ -40,14 +41,14 @@ public static Release GetLatestRelease(this GitHubAPI api, RepoInfo repo) /// /// /// - public static List GetReleases(this GitHubAPI api, RepoInfo repo) + public static List GetReleases(this GitHubAPI api, [NotNull] RepoInfo repo) { string url = api.GetFullEndpointUrl("/repos/:owner/:repo/releases", repo); CollectionData releases = api.DownloadCollectionJson(url); return releases.HttpStatusCode == HttpStatusCode.OK ? releases.Collection.ToList() : new List(); } - public static string GetUrlOfLatestRelease(RepoInfo repo) + public static string GetUrlOfLatestRelease([NotNull] RepoInfo repo) { return repo.Format("https://github.com/:owner/:repo/releases/latest"); } diff --git a/ToastifyAPI/Helpers/Net.cs b/ToastifyAPI/Helpers/Net.cs index 48df43ee..ee2bb5d2 100644 --- a/ToastifyAPI/Helpers/Net.cs +++ b/ToastifyAPI/Helpers/Net.cs @@ -1,4 +1,5 @@ -using System.Net; +using JetBrains.Annotations; +using System.Net; using System.Net.Http; using ToastifyAPI.Core; @@ -11,7 +12,7 @@ public static HttpClientHandler CreateHttpClientHandler() return CreateHttpClientHandler(null); } - public static HttpClientHandler CreateHttpClientHandler(IProxyConfig proxyConfig) + public static HttpClientHandler CreateHttpClientHandler([CanBeNull] IProxyConfig proxyConfig) { HttpClientHandler clientHandler = new HttpClientHandler { diff --git a/ToastifyAPI/Spotify.cs b/ToastifyAPI/Spotify.cs index 14c0ed7a..c9b3251f 100644 --- a/ToastifyAPI/Spotify.cs +++ b/ToastifyAPI/Spotify.cs @@ -1,4 +1,5 @@ -using log4net; +using JetBrains.Annotations; +using log4net; using Microsoft.Win32; using System; using System.Collections.Generic; @@ -21,6 +22,7 @@ public static partial class Spotify "Chrome_WidgetWin_0" // Since v1.0.75.483.g7ff4a0dc }; + [NotNull] public static string GetSpotifyPath() { string spotifyPath = GetSpotifyPath_common() ?? GetSpotifyPath_platform(); @@ -31,13 +33,14 @@ public static string GetSpotifyPath() return spotifyPath; } + [CanBeNull] private static string GetSpotifyPath_common() { - string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; + string spotifyPath = Registry.CurrentUser.GetValue(@"Software\Spotify", string.Empty) as string; - // Try in the secondary location. + // Try the with Uninstall key if (string.IsNullOrEmpty(spotifyPath)) - spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; + spotifyPath = Registry.CurrentUser.GetValue(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify\InstallLocation", string.Empty) as string; if (!string.IsNullOrEmpty(spotifyPath)) spotifyPath = Path.Combine(spotifyPath, "Spotify.exe"); @@ -45,6 +48,7 @@ private static string GetSpotifyPath_common() return spotifyPath; } + [CanBeNull] public static Process FindSpotifyProcess() { if (logger.IsDebugEnabled) diff --git a/ToastifyAPI/Spotify.uwp.cs b/ToastifyAPI/Spotify.uwp.cs index 7f4bde88..aa496ebf 100644 --- a/ToastifyAPI/Spotify.uwp.cs +++ b/ToastifyAPI/Spotify.uwp.cs @@ -1,11 +1,13 @@ #if WIN_10 +using JetBrains.Annotations; using Windows.ApplicationModel; namespace ToastifyAPI { public static partial class Spotify { + [CanBeNull] private static string GetSpotifyPath_platform() { Package spotifyPackage = Win32API.FindPackage("SpotifyAB.SpotifyMusic"); diff --git a/ToastifyAPI/Spotify.win32.cs b/ToastifyAPI/Spotify.win32.cs index d4b99bcd..efdbd148 100644 --- a/ToastifyAPI/Spotify.win32.cs +++ b/ToastifyAPI/Spotify.win32.cs @@ -1,9 +1,12 @@ -#if !WIN_10 +using JetBrains.Annotations; + +#if !WIN_10 namespace ToastifyAPI { public static partial class Spotify { + [CanBeNull] private static string GetSpotifyPath_platform() { return GetSpotifyPath_common(); From 5b4558bb29dbed0edc6ea04148c02dcb8f2d94eb Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 17:42:03 +0200 Subject: [PATCH 306/452] Add gitter badge --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5fbc60ff..5d0d9d7d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ -[Toastify](https://aleab.github.io/toastify/) +# Toastify + [![Codacy grade](https://img.shields.io/codacy/grade/dcbbd6b1f6cf45658a0f9232a5f35706.svg?label=Code%20Quality&maxAge=60)][aleab/toastify@codacy] [![GitHub last commit (master)](https://img.shields.io/github/last-commit/aleab/toastify/master.svg?label=Last%20Commit&maxAge=60)][commits] [![GitHub release](https://img.shields.io/github/release/aleab/toastify.svg?label=Release&maxAge=60)][release-latest] [![Github license](https://img.shields.io/badge/License-GPL%20v2-blue.svg?maxAge=86400)][license] -======== +[![Gitter](https://badges.gitter.im/aleab/toastify.svg)][aleab/toastify@gitter] ![toastify-showcase][toastify-showcase] @@ -58,5 +59,6 @@ This project uses third-party libraries; their verbatim licenses can be found [h [issues]: [aleab/toastify@codacy]: +[aleab/toastify@gitter]: [SpotifyAPI-NET]: [toastify@codeplex]: From 95662132eda3d01c75b15b60865ffb39392a7b4f Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 20:18:16 +0200 Subject: [PATCH 307/452] Revert a couple of changes of cdec4a0 --- ToastifyAPI/Spotify.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ToastifyAPI/Spotify.cs b/ToastifyAPI/Spotify.cs index c9b3251f..42cb4c21 100644 --- a/ToastifyAPI/Spotify.cs +++ b/ToastifyAPI/Spotify.cs @@ -36,11 +36,11 @@ public static string GetSpotifyPath() [CanBeNull] private static string GetSpotifyPath_common() { - string spotifyPath = Registry.CurrentUser.GetValue(@"Software\Spotify", string.Empty) as string; + string spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Spotify", string.Empty, string.Empty) as string; // Try the with Uninstall key if (string.IsNullOrEmpty(spotifyPath)) - spotifyPath = Registry.CurrentUser.GetValue(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify\InstallLocation", string.Empty) as string; + spotifyPath = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Spotify", "InstallLocation", string.Empty) as string; if (!string.IsNullOrEmpty(spotifyPath)) spotifyPath = Path.Combine(spotifyPath, "Spotify.exe"); From 98da56ed53e86eaf70ca84b15e346df6535b0de3 Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Thu, 5 Apr 2018 22:32:15 +0200 Subject: [PATCH 308/452] Fix #62 --- Toastify/src/Core/Spotify.cs | 95 +++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 35 deletions(-) diff --git a/Toastify/src/Core/Spotify.cs b/Toastify/src/Core/Spotify.cs index 492cea8a..4031614f 100644 --- a/Toastify/src/Core/Spotify.cs +++ b/Toastify/src/Core/Spotify.cs @@ -309,7 +309,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) bool signaled; bool connected = false; - bool proxySettingsChangedManually = false; + bool proxySettingsChangedAlready = false; #region try { this.localAPI.Connect(); } @@ -327,13 +327,15 @@ private void ConnectWithSpotify(DoWorkEventArgs e) { /* * Multiple known things might lead to a WebException: - * 1) "open.spotify.com" is blocked - * If "open.spotify.com" is blocked or redirected, a few things can happen: - * a) SocketException; either ConnectionRefused or AccessDenied - * b) NameResolutionFailure + * 1) Cannot enstablish connection to "open.spotify.com" + * - If "open.spotify.com" is blocked or redirected, a few things can happen: + * (a) SocketException; either ConnectionRefused or AccessDenied + * (b) NameResolutionFailure + * - Also (c), if the user needs to use a proxy and the server does not return UseProxy or ProxyAuthenticationRequired, + * it could fail with a ConnectionRefused error or AccessDenied (or possibly something else) * 2) A proxy is required - * a) ProtocolError; either 305 (UseProxy) or 407 (ProxyAuthenticationRequired) - * b) SocketException + * (a) ProtocolError; either 305 (UseProxy) or 407 (ProxyAuthenticationRequired) + * (b) SocketException * 3) The proxy is not needed anymore? */ @@ -368,10 +370,19 @@ private void ConnectWithSpotify(DoWorkEventArgs e) } catch { - openSpotifyBlocked = true; - openSpotifyBlockedMessage = hostRedirected - ? Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECTION_BLOCKED_HOSTS - : Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECTION_BLOCKED; + //// 1c) The user might need to enter or reset their proxy details (#62) + if (!proxySettingsChangedAlready || (Settings.Current.UseProxy && !App.ProxyConfig.IsValid())) + { + this.AskTheUserToChangeOrDisableProxy("Toastify is having difficulties in connecting to Spotify. Are you behind a proxy?"); + proxySettingsChangedAlready = true; + } + else + { + openSpotifyBlocked = true; + openSpotifyBlockedMessage = hostRedirected + ? Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECTION_BLOCKED_HOSTS + : Properties.Resources.ERROR_STARTUP_SPOTIFY_API_CONNECTION_BLOCKED; + } handled = true; } } @@ -388,7 +399,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) if (openSpotifyBlocked) { - logger.Error("Couldn't access \"open.spotify.com\": the client blocked the connection to the host."); + logger.Error("Couldn't enstablish a connection to \"http://open.spotify.com\": the client blocked the connection to the host."); throw new ApplicationStartupException(openSpotifyBlockedMessage); } @@ -396,7 +407,7 @@ private void ConnectWithSpotify(DoWorkEventArgs e) { var httpResponse = (HttpWebResponse)ex.Response; - //// 2a) UseProxy or ProxyAuthenticationRequired + //// 2a) HttpStatusCode is UseProxy or ProxyAuthenticationRequired if (httpResponse?.StatusCode == HttpStatusCode.UseProxy) { string location = httpResponse.Headers[HttpResponseHeader.Location]; @@ -417,17 +428,15 @@ private void ConnectWithSpotify(DoWorkEventArgs e) if (logger.IsDebugEnabled) logger.Debug($"The server requested the use of a proxy. Using \"{(!string.IsNullOrEmpty(proxy.Username) ? $"{proxy.Username}@" : "")}{proxy.Host}:{proxy.Port}\" as requested."); } - else if (httpResponse?.StatusCode == HttpStatusCode.ProxyAuthenticationRequired && !(proxySettingsChangedManually || App.ProxyConfig.IsValid())) + else if (httpResponse?.StatusCode == HttpStatusCode.ProxyAuthenticationRequired && !(proxySettingsChangedAlready || App.ProxyConfig.IsValid())) { if (logger.IsDebugEnabled) logger.Debug("The requested proxy server requires authentication. Prompting the user for proxy details...", ex); - this.spotifyLauncherTimeoutTimer.Pause(); - App.ShowConfigProxyDialog(); - this.spotifyLauncherTimeoutTimer.Resume(); + this.ChangeProxySettings(); handled = true; - proxySettingsChangedManually = true; + proxySettingsChangedAlready = true; if (logger.IsDebugEnabled) { @@ -457,24 +466,10 @@ private void ConnectWithSpotify(DoWorkEventArgs e) } // If we failed to handle the exception, ask the user if they need to configure a proxy - if (!(proxySettingsChangedManually || App.ProxyConfig.IsValid())) + if (!(proxySettingsChangedAlready || App.ProxyConfig.IsValid())) { - if (logger.IsDebugEnabled) - logger.Debug("Asking the user if they are behind a proxy..."); - - if (MessageBox.Show("Toastify is having difficulties in connecting to Spotify. Are you behind a proxy?", "Toastify", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - this.ChangeProxySettings(); - else - { - // Disable the proxy - App.ProxyConfig.Set(null); - Settings.Current.UseProxy = false; - Settings.Current.Save(); - - if (logger.IsDebugEnabled) - logger.Debug("Use of proxy has been disabled."); - } - proxySettingsChangedManually = true; + this.AskTheUserToChangeOrDisableProxy("Toastify is having difficulties in connecting to Spotify. Are you behind a proxy?"); + proxySettingsChangedAlready = true; } else { @@ -523,6 +518,36 @@ private void ConnectWithSpotify(DoWorkEventArgs e) throw new ApplicationStartupException(Properties.Resources.ERROR_STARTUP_SPOTIFY_API_STATUS_NULL); } + /// + /// Prompt the user with the specified message. If they answer Yes, then they are requested to enter their proxy details; + /// if they answer No, then the proxy is disabled. + /// + /// The message + /// True if the user answered Yes; false otherwise. + private bool AskTheUserToChangeOrDisableProxy(string message) + { + if (logger.IsDebugEnabled) + logger.Debug("Asking the user if they are behind a proxy..."); + + if (MessageBox.Show(message, "Toastify", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + { + this.ChangeProxySettings(); + return true; + } + else + { + // Disable the proxy + App.ProxyConfig.Set(null); + Settings.Current.UseProxy = false; + Settings.Current.Save(); + + if (logger.IsDebugEnabled) + logger.Debug("Use of proxy has been disabled."); + + return false; + } + } + private void ChangeProxySettings() { if (this.spotifyLauncherTimeoutTimer?.IntervalRemaining > 0.0d) From ee88029e0f9153e98b1713ceffc2ee18d807f1cd Mon Sep 17 00:00:00 2001 From: Alessandro Attard Barbini <11708634+aleab@users.noreply.github.com> Date: Fri, 6 Apr 2018 17:49:59 +0200 Subject: [PATCH 309/452] Major changes to installer - Remember install location (#63) - Remember shortcuts and autostart parameters - Silently uninstall previous version - Let users decide whether they want to delete the settings file when uninstalling or not --- InstallationScript/Functions.nsh | 46 +- InstallationScript/Install.nsi | 153 ++- InstallationScript/NSISpcre.nsh | 1070 +++++++++++++++++ .../Plugins/x64-ansi/NSISpcre.dll | Bin 0 -> 721920 bytes .../Plugins/x64-unicode/NSISpcre.dll | Bin 0 -> 721920 bytes .../{ => Plugins/x86-ansi}/DotNetChecker.dll | Bin .../{ => Plugins/x86-ansi}/KillProcWMI.dll | Bin .../Plugins/x86-ansi/NSISpcre.dll | Bin 0 -> 623104 bytes .../x86-ansi}/ShellExecAsUser.dll | Bin .../Plugins/x86-ansi/ShellLink.dll | Bin 0 -> 4608 bytes .../Plugins/x86-unicode/DotNetChecker.dll | Bin 0 -> 85504 bytes .../Plugins/x86-unicode/KillProcWMI.dll | Bin 0 -> 71168 bytes .../Plugins/x86-unicode/NSISpcre.dll | Bin 0 -> 624128 bytes .../Plugins/x86-unicode/ShellExecAsUser.dll | Bin 0 -> 7168 bytes .../Plugins/x86-unicode/ShellLink.dll | Bin 0 -> 4608 bytes InstallationScript/README.txt | 4 +- LICENSE-3RD-PARTY | 62 + Toastify.sln | 1 + update-version.ps1 | 5 +- 19 files changed, 1297 insertions(+), 44 deletions(-) create mode 100644 InstallationScript/NSISpcre.nsh create mode 100644 InstallationScript/Plugins/x64-ansi/NSISpcre.dll create mode 100644 InstallationScript/Plugins/x64-unicode/NSISpcre.dll rename InstallationScript/{ => Plugins/x86-ansi}/DotNetChecker.dll (100%) rename InstallationScript/{ => Plugins/x86-ansi}/KillProcWMI.dll (100%) create mode 100644 InstallationScript/Plugins/x86-ansi/NSISpcre.dll rename InstallationScript/{ => Plugins/x86-ansi}/ShellExecAsUser.dll (100%) create mode 100644 InstallationScript/Plugins/x86-ansi/ShellLink.dll create mode 100644 InstallationScript/Plugins/x86-unicode/DotNetChecker.dll create mode 100644 InstallationScript/Plugins/x86-unicode/KillProcWMI.dll create mode 100644 InstallationScript/Plugins/x86-unicode/NSISpcre.dll create mode 100644 InstallationScript/Plugins/x86-unicode/ShellExecAsUser.dll create mode 100644 InstallationScript/Plugins/x86-unicode/ShellLink.dll diff --git a/InstallationScript/Functions.nsh b/InstallationScript/Functions.nsh index 30ddcae2..b5b712ea 100644 --- a/InstallationScript/Functions.nsh +++ b/InstallationScript/Functions.nsh @@ -1,4 +1,34 @@ +!include LogicLib.nsh !include FileFunc.nsh +!include .\NSISpcre.nsh + +!insertmacro REMatches + + +; FileExists is already part of LogicLib, but returns true for directories as well as files +!macro _FileExists2 _a _b _t _f + !insertmacro _LOGICLIB_TEMP + StrCpy $_LOGICLIB_TEMP "0" + StrCmp `${_b}` `` +4 0 ; if path is not blank, continue to next check + IfFileExists `${_b}` `0` +3 ; if path exists, continue to next check (IfFileExists returns true if this is a directory) + IfFileExists `${_b}\*.*` +2 0 ; if path is not a directory, continue to confirm exists + StrCpy $_LOGICLIB_TEMP "1" ; file exists + ; now we have a definitive value - the file exists or it does not + StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}` +!macroend +!undef FileExists + +!define FileExists `"" FileExists2` +!macro _DirExists _a _b _t _f + !insertmacro _LOGICLIB_TEMP + StrCpy $_LOGICLIB_TEMP "0" + StrCmp `${_b}` `` +3 0 ; if path is not blank, continue to next check + IfFileExists `${_b}\*.*` 0 +2 ; if directory exists, continue to confirm exists + StrCpy $_LOGICLIB_TEMP "1" + StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}` +!macroend +!define DirExists `"" DirExists` + ;-------------------------------- ; Function Macros @@ -10,6 +40,7 @@ !macroend !define TrimQuotes `!insertmacro _TrimQuotes` + ;-------------------------------- ; Functions @@ -32,6 +63,7 @@ Function TrimQuotes Exch $R0 FunctionEnd + ;-------------------------------- Function UninstallPreviousVersions @@ -39,15 +71,15 @@ Function UninstallPreviousVersions Push $R1 ReadRegStr $R0 HKLM "${RegUninstallKey}" "UninstallString" - StrCmp $R0 "" done - - ${TrimQuotes} $R0 $R0 - ${GetParent} $R0 $R1 + ${If} $R0 != "" + ${TrimQuotes} $R0 $R0 + ${GetParent} $R0 $R1 - ClearErrors - ExecWait '$R0 _?=$R1' + ClearErrors + ExecWait '$R0 /S _?=$R1' + RMDir /r "$R1" + ${EndIf} Pop $R1 Pop $R0 -done: FunctionEnd diff --git a/InstallationScript/Install.nsi b/InstallationScript/Install.nsi index 3dd29f67..d1cc6490 100644 --- a/InstallationScript/Install.nsi +++ b/InstallationScript/Install.nsi @@ -1,17 +1,26 @@ +!define APPNAME "Toastify" +!define PUBLISHER "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" +!define DESCRIPTION "Toastify adds global hotkeys and toast notifications to Spotify" +!define VERSIONMAJOR 1 +!define VERSIONMINOR 10 +!define VERSIONBUILD 8 +!define HELPURL "https://github.com/aleab/toastify/issues" +!define UPDATEURL "https://github.com/aleab/toastify/releases" +!define ABOUTURL "https://aleab.github.io/toastify/" +!define ESTIMATEDSIZE 4510 + +!define RegUninstallKey "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" + + !include LogicLib.nsh !include MUI.nsh !include x64.nsh !include WinVer.nsh - -!define ProgramName "Toastify" -!define RegUninstallKey "Software\Microsoft\Windows\CurrentVersion\Uninstall\${ProgramName}" - +!include .\NSISpcre.nsh !include .\DotNetChecker.nsh !include .\Functions.nsh -!define EstimatedSize 4510 - -Name "${ProgramName} Installer" +Name "${APPNAME} Installer" RequestExecutionLevel admin CRCCheck force @@ -22,6 +31,7 @@ ManifestSupportedOS "{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" # Windows 10 OutFile "ToastifyInstaller.exe" InstallDir $PROGRAMFILES64\Toastify + ;-------------------------------- ; Pages @@ -30,32 +40,38 @@ Page directory Page instfiles # These statements modify settings for MUI_PAGE_FINISH -!define MUI_FINISHPAGE_AUTOCLOSE -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_NOTCHECKED -!define MUI_FINISHPAGE_RUN_TEXT "Launch ${ProgramName} now" -!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication" + !define MUI_FINISHPAGE_AUTOCLOSE + !define MUI_FINISHPAGE_RUN + !define MUI_FINISHPAGE_RUN_NOTCHECKED + !define MUI_FINISHPAGE_RUN_TEXT "Launch ${APPNAME} now" + !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication" !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE "English" +UninstPage components UninstPage uninstConfirm UninstPage instfiles + ;-------------------------------- ; Installer -Section "${ProgramName} (required)" +Var /GLOBAL PrevDesktopShortcutArgs +Var /GLOBAL PrevSMShortcutArgs +Var /GLOBAL PrevAutostartArgs + +Section "${APPNAME} (required)" SectionIn RO AddSize ${EstimatedSize} # Since process termination is non-destructive for Toastify, just kill it - DetailPrint "Shutting down ${ProgramName}..." + DetailPrint "Shutting down ${APPNAME}..." KillProcWMI::KillProc "Toastify.exe" Sleep 2000 # Uninstall previous versions - DetailPrint "Uninstalling previous versions of ${ProgramName}..." + DetailPrint "Uninstalling previous versions of ${APPNAME}..." Call UninstallPreviousVersions # Check .NET Framework @@ -92,41 +108,49 @@ Section "${ProgramName} (required)" Delete "$INSTDIR\uninstall.exe" # Write the uninstall keys for Windows - WriteRegStr HKLM "${RegUninstallKey}" "DisplayName" "Toastify" - WriteRegStr HKLM "${RegUninstallKey}" "UninstallString" '"$INSTDIR\uninst.exe"' + WriteRegStr HKLM "${RegUninstallKey}" "DisplayName" "${APPNAME}" WriteRegStr HKLM "${RegUninstallKey}" "DisplayIcon" "$INSTDIR\Toastify.exe,0" - WriteRegStr HKLM "${RegUninstallKey}" "Publisher" "Jesper Palm, Oren Nachman, Alessandro Attard Barbini" - WriteRegStr HKLM "${RegUninstallKey}" "Version" "1.10.8" - WriteRegStr HKLM "${RegUninstallKey}" "DisplayVersion" "1.10.8" + WriteRegStr HKLM "${RegUninstallKey}" "Publisher" "${PUBLISHER}" + WriteRegStr HKLM "${RegUninstallKey}" "Version" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}" + WriteRegStr HKLM "${RegUninstallKey}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}" + WriteRegStr HKLM "${RegUninstallKey}" "InstallLocation" "$INSTDIR" + WriteRegStr HKLM "${RegUninstallKey}" "UninstallString" '"$INSTDIR\uninst.exe"' + WriteRegStr HKLM "${RegUninstallKey}" "QuietUninstallString" '"$INSTDIR\uninst.exe" /S' + WriteRegStr HKLM "${RegUninstallKey}" "HelpLink" "${HELPURL}" + WriteRegStr HKLM "${RegUninstallKey}" "URLUpdateInfo" "${UPDATEURL}" + WriteRegStr HKLM "${RegUninstallKey}" "URLInfoAbout" "${ABOUTURL}" WriteRegDWORD HKLM "${RegUninstallKey}" "EstimatedSize" ${EstimatedSize} WriteRegDWORD HKLM "${RegUninstallKey}" "NoModify" 1 WriteRegDWORD HKLM "${RegUninstallKey}" "NoRepair" 1 WriteUninstaller "uninst.exe" - SectionEnd Section "Desktop icon" - CreateShortCut "$DESKTOP\Toastify.lnk" "$INSTDIR\Toastify.exe" "" "$INSTDIR\Toastify.exe" 0 + CreateShortCut "$DESKTOP\Toastify.lnk" "$INSTDIR\Toastify.exe" "$PrevDesktopShortcutArgs" "$INSTDIR\Toastify.exe" 0 SectionEnd Section "Start Menu icon" - CreateShortCut "$SMPROGRAMS\Toastify.lnk" "$INSTDIR\Toastify.exe" "" "$INSTDIR\Toastify.exe" 0 + CreateShortCut "$SMPROGRAMS\Toastify.lnk" "$INSTDIR\Toastify.exe" "$PrevSMShortcutArgs" "$INSTDIR\Toastify.exe" 0 SectionEnd Section /o "Autostart" - WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" '"$INSTDIR\Toastify.exe"' + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" '"$INSTDIR\Toastify.exe"$PrevAutostartArgs' SectionEnd + ;-------------------------------- ; Uninstaller -Section "Uninstall" - +Section "un.Toastify" + SectionIn RO + # Remove registry keys DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Toastify" + DeleteRegValue HKCU "Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run" "Toastify" DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" + DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" - # Remove files and uninstaller + # Remove files Delete "$INSTDIR\Toastify.exe" Delete "$INSTDIR\Toastify.exe.config" Delete "$INSTDIR\Toastify.pdb" @@ -143,18 +167,21 @@ Section "Uninstall" Delete "$INSTDIR\LICENSE" Delete "$INSTDIR\LICENSE-3RD-PARTY" Delete "$INSTDIR\uninst.exe" - - # remove the settings directory - Delete "$APPDATA\Toastify.xml" - RMDir "$APPDATA\Toastify" + + # Remove log files + Delete "$LOCALAPPDATA\Toastify\Toastify.log*" # Remove shortcuts Delete "$DESKTOP\Toastify.lnk" Delete "$SMPROGRAMS\Toastify.lnk" - # Remove directories used - RMDir "$INSTDIR" + # Remove directories + RMDir /r "$INSTDIR" +SectionEnd +Section /o "un.Settings" + Delete "$APPDATA\Toastify\Toastify.cfg" + Delete "$LOCALAPPDATA\Toastify\proxy.sec" SectionEnd @@ -162,8 +189,66 @@ SectionEnd ; Functions Function .onInit + Push $R0 + Push $R1 + + StrCpy $INSTDIR "$PROGRAMFILES64\Toastify" + + StrCpy $PrevDesktopShortcutArgs "" + StrCpy $PrevSMShortcutArgs "" + StrCpy $PrevAutostartArgs "" + + # Get previous install location + ReadRegStr $R0 HKLM "${RegUninstallKey}" "InstallLocation" + ${If} $R0 != "" + StrCpy $INSTDIR "$R0" + ${Else} + ReadRegStr $R0 HKLM "${RegUninstallKey}" "UninstallString" + ${If} $R0 != "" + ${TrimQuotes} $R0 $R0 + ${GetParent} $R0 $R1 + StrCpy $INSTDIR "$R1" + ${EndIf} + ${EndIf} + + # Get the arguments of the previous Desktop shortcut + ${If} ${FileExists} "$DESKTOP\Toastify.lnk" + ClearErrors + ShellLink::GetShortCutArgs "$DESKTOP\Toastify.lnk" + ${IfNot} ${Errors} + Pop $PrevDesktopShortcutArgs + ${EndIf} + ${EndIf} + + # Get the arguments of the previous StartMenu shortcut + ${If} ${FileExists} "$SMPROGRAMS\Toastify.lnk" + ClearErrors + ShellLink::GetShortCutArgs "$SMPROGRAMS\Toastify.lnk" + ${IfNot} ${Errors} + Pop $PrevSMShortcutArgs + ${EndIf} + ${EndIf} + + # Get the arguments of the previous Autostart entry + ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Toastify" + ${If} $R0 != "" + ${RECaptureMatches} $0 '.*Toastify.exe"?(.*)' $R0 0 + StrCpy $PrevAutostartArgs $1 + ${EndIf} + + Pop $R1 + Pop $R0 FunctionEnd Function LaunchApplication - ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Toastify.exe" "" + # Should we use some command line argument? + ${If} $PrevAutostartArgs != "" + StrCpy $0 $PrevAutostartArgs + ${ElseIf} $PrevSMShortcutArgs != "" + StrCpy $0 $PrevSMShortcutArgs + ${Else} + StrCpy $0 $PrevDesktopShortcutArgs + ${EndIf} + + ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Toastify.exe" "$0" FunctionEnd diff --git a/InstallationScript/NSISpcre.nsh b/InstallationScript/NSISpcre.nsh new file mode 100644 index 00000000..3c856fa0 --- /dev/null +++ b/InstallationScript/NSISpcre.nsh @@ -0,0 +1,1070 @@ +/* +_____________________________________________________________________________ + + PCRE Functions Header v1.0 +_____________________________________________________________________________ + +An NSIS plugin providing Perl compatible regular expression functions. + +A simple wrapper around the excellent PCRE library which was written by +Philip Hazel, University of Cambridge. + +For those that require documentation on how to construct regular expressions, +please see http://www.pcre.org/ + +_____________________________________________________________________________ + +Copyright (c) 2007 Computerway Business Solutions Ltd. +Copyright (c) 2005 Google Inc. +Copyright (c) 1997-2006 University of Cambridge + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the name of Google + Inc. nor the name of Computerway Business Solutions Ltd. nor the names + of their contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Core PCRE Library Written by: Philip Hazel, University of Cambridge +C++ Wrapper functions by: Sanjay Ghemawat, Google Inc. +Support for PCRE_XXX modifiers by: Giuseppe Maxia +NSIS integration by: Rob Stocks, Computerway Business Solutions Ltd. + +_____________________________________________________________________________ + +Usage: +====== + + ... + # include this header + !include NSISpcre.nsh + ... + # include any functions that will be used in the installer + !insertmacro RESetOption + !insertmacro REClearOption + !insertmacro REGetOption + !insertmacro REClearAllOptions + !insertmacro REMatches + !insertmacro RECaptureMatches + !insertmacro REReplace + ... + # include any functions that will be used in the uninstaller + !insertmacro un.RESetOption + !insertmacro un.REClearOption + !insertmacro un.REGetOption + !insertmacro un.REClearAllOptions + !insertmacro un.REMatches + !insertmacro un.RECaptureMatches + !insertmacro un.REReplace + ... + # Use a function or integrate with LogicLib + Section|Function ... + ... + ${REMatches} $0 ^A(.*)Z" "ABC...XYZ" 0 + ... + ${If} "subject" =~ "pattern" + ... + ${EndIf} + ... + SectionEnd|FunctionEnd + ... + + See NSISpcreTest.nsi for examples. + +LogicLib Integration: +===================== + + By including this header, two additional string "operators" are added to LogicLib + as follows: + + a =~ b Test if subject a matches pattern b + a !~ b Test if subject a does not match pattern b + + E.g. + + ${If} $0 =~ ".*\\" + # $0 has a trailing backslash + ${Else} + # $0 does not have a trailing backslash + ${EndIf} + + ${If} $0 !~ "http://.*" + # $0 does not start "http://" + ${Else} + # $0 does start with "http://" + ${EndIf} + + You must insert the REMatches function in order to use these "operators" with: + + !insertmacro REMatches + or + !insertmacro un.REMatches + + To integrate with LogicLib in the uninstaller, prefix the operators with 'un.' + as follows: + + ${If} $0 un.=~ ".*\\" + ... + ${EndIf} + +Available Functions: +==================== + + RECheckPattern RESULT PATTERN + + Checks whether the supplied regular expression string is valid. + + E.g. ${RECheckPattern} $0 ".*" + # Will return "" becasue the pattern is valid + ${RECheckPattern} $0 "(.*" + # Will return an error because of the unmatched bracket + + Params: + + RESULT (output) + + The result of the test. An empty string if PATTERN is ok otherwise a + description of what was wrong with it. + + PATTERN (input) + + See REMatches. + + Notes: + + Unlike the other functions, this function does not set the error flag if + the supplied PATTERN is invalid. + + REQuoteMeta RESULT SUBJECT + + Escapes characters in the subject so the entire string will be interpreted + literally. + + E.g. ${REQuoteMeta} $0 ".*" + # Will return "\.\*" + + Params: + + RESULT (output) + + The converted from of SUBJECT with special characters escaped. + + SUBJECT (input) + + The string to convert. + + REMatches RESULT PATTERN SUBJECT PARTIAL + + Test whether a string matches a regular expression. + + E.g. ${REMatches} $0 "A(.*)Z" "ABC...XYZ" 0 + # Will return "true" + ${REMatches} $0 "A(.*)" "ABC...XYZ" 0 + # Will return "false" because partial matching wasn't requested + ${REMatches} $0 "A(.*)" "ABC...XYZ" 1 + # Will return "true" because partial matching was requested + + Params: + + RESULT (output) + + The result of the test. After the call, the return variable will contain + one of the following values: + "true" The string in SUBJECT matches the PATTERN + "false" The string in SUBJECT does not match the PATTERN + "error " There was an error compiling the PATTERN. The + error text will be returned after the word error. + The error flag will be set in this case. + + PATTERN (input) + + The PCRE-compatible regular expression to check for (without the leading + and trailing slashes and without any options). E.g. '.+' (not '/.+/s'). + See http://www.pcre.org/ for documentation & examples. + + SUBJECT (input) + + The string to test. + + PARTIAL (input) + + Either 1 or 0. Pass the value 1 to enable partial matches (part of the + SUBJECT string must match the PATTERN string) or 0 to force full matches + (the whole SUBJECT string must match the PATTERN string). + + Notes: + + See SetOptions for more control over pattern matching (e.g. case sensitivity). + The PARTIAL option is ignored if in multiline mode. + + RECaptureMatches RESULT PATTERN SUBJECT PARTIAL + + Test whether a string matches a regular expression and return any substrings + captured. + + E.g. ${RECaptureMatches} $0 "([^=]+)=(.+)" "pcre=excellent" + # Will return 2 in $0 because 2 strings were captured + Pop $1 # Will contain "pcre" + Pop $2 # Will contain "excellent" + + Params: + + RESULT (output) + + The string "false" if SUBJECT does not match PATTERN. + The number of substrings captured by capture groups if SUBJECT does match + PATTERN. + The string "error" followed by an error message if there was a problem + compiling PATTERN (the error flag will be set in this case). + + PATTERN (input) + + See REMatches. + + SUBJECT (input) + + See REMatches. + + PARTIAL (input) + + See REMatches. + + Notes: + + This function is the same as REMatches except that if SUBJECT matches PATTERN, + the number of substring captured is returned instead of the string "true". Also, + each captured string is available on the stack in left-to-right order of capture. + To use this function, first read the RESULT. If the error flag is not set and + RESULT is not "false", read it as an integer and pop that number of values from + the stack (these will be the captured substrings). + + This function can return 0 on a successful match indicating that SUBJECT matches + the PATTERN but that no substrings were captured (e.g. because no capture groups + were specified or because the NO_AUTO_CAPTURE option was set). + + REFind RESULT PATTERN SUBJECT + REFindNext RESULT + REFindClose + + Extracts captured substrings from SUBJECT according to PATTERN and advances the + position in SUBJECT so subsequent calls to REFindNext will obtain the next set + of captured substrings. + + E.g. ${REFind} "([0-9]+)" "123 456" + # Will capture "123" + ${REFindNext} + # Will capture "456" + ${REFindClose} + + Params: + + RESULT (output) + + Does not apply to REFindClose which has no parameters. + See RECaptureMatches. + For REFindNext, RESULT will be "false" if there were no more matches. + + PATTERN (input) + + Only applies to REFind. + See REMatches. + + SUBJECT (input) + + Only applies to REFind. + See REMatches. + + Notes: + + Partial matching is always enabled. + Not compatible with the NO_AUTO_CAPTURE option (see RESetOption). + PATTERNS containing no capture groups will be bracketed to create a single + capture group that matches the entire pattern. + REFindClose must be called to free resources in the plugin. It may only be + omitted if REFind is called again since this will automatically free any + resources allocated by a previous call to REFind. + + REReplace RESULT PATTERN SUBJECT REPLACEMENT REPLACEALL + + Replaces one or all occurances of PATTERN found in SUBJECT with REPLACEMENT. + + E.g. ${REReplace} $0 "h(.*)" "hello world!" "H\1" 0 + + Params: + + RESULT (output) + + The SUBJECT string with any replacements made. If no matches of PATTERN were + found in SUBJECT, an empty string will be returned. If there was an error + compiling PATTERN, the error flag will be set and the error will be returned. + + PATTERN (input) + + See REMatches. The regular expression to search for. Up to 9 captured substrings + can be referenced (by number 1-9) in the REPLACEMENT string if required. + + SUBJECT (input) + + The string on which to perform the replacements. + + REPLACEMENT (input) + + The string to replace occurances of PATTERN with. This string may refer to up to + 9 captured substrings defined in PATTERN by using '\1' to '\9'. + + REPLACEALL + + Either 0 or 1. To replace only the first occurance of PATTERN in SUBJECT with + REPLACEMENT, specify 0. To replace all occurances, specify 1. + + REClearAllOptions + + Clears all options and reverts to default PCRE pattern matching behaviour. + + E.g. ${REClearAllOptions} + + Params: + + No parameters. + + Notes: + + See RESetOption for a list of available options. + + RESetOption OPTION + + Sets the option specified in OPTION (turns it on). + + E.g. ${RESetOption} "CASELESS" + + Params: + + OPTION (input) + + The option to set. One of the following strings: + + CASELESS + Perform case-insensitive matching + MULTILINE + Enable matching of individual lines. '^' and '$' can be used to + match the starts and ends of lines instead of the start and end + of the subject string. Forces partial matching. + DOTALL + Allow '.' to match newlines within the subject. + EXTENDED + Ignore whitespace & comments in patterns + DOLLAR_ENDONLY + When not in multiline mode, force '$' to match only the end of the + entire string (otherwise it will also match prior to the last + newline if that newline terminates the string) + EXTRA + See PCRE documentation. + UTF8 + Enable UTF8 handling (untested from NSIS). + UNGREEDY + Set quantifiers to be ungreedy by default instead of greedy. This + also reverses the meaning of the '?' ungreedy qualifier to mean + greedy. + NO_AUTO_CAPTURE + Don't capture subgroups. + m + Synonym for MULTILINE (Perl syntax). + i + Synonym for CASELESS (Perl syntax). + s + Synonym for DOTALL (Perl syntax). + x + Synonym for EXTENDED (Perl syntax). + + Notes: + + Once set, the option will apply to all further calls until cleared. + + REClearOption OPTION + + Clears the option specified in OPTION (turns it off). + + E.g. ${REClearOption} "CASELESS" + + Params: + + OPTION (input) + + See RESetOption. + + Notes: + + Once cleared, the option will not apply to all further calls until set. + + REGetOption RESULT OPTION + + Obtains the current state of the specified OPTION. + + E.g. ${REGetOption} $0 "CASELESS" + + Params: + + RESULT (output) + + The state of the option: "true" if set and "false" otherwise. + + OPTION (input) + + See RESetOption. + +_____________________________________________________________________________ + +*/ + +!ifndef PCRELIB_INCLUDED +!define PCRELIB_INCLUDED + +!define _PCRELIB_UN + +!include LogicLib.nsh + +# Macros + +!macro RECheckPatternCall RESULT PATTERN + Push `${PATTERN}` + Call RECheckPattern + Pop ${RESULT} +!macroend + +!macro un.RECheckPatternCall RESULT PATTERN + Push `${PATTERN}` + Call un.RECheckPattern + Pop ${RESULT} +!macroend + +!macro REQuoteMetaCall RESULT SUBJECT + Push `${SUBJECT}` + Call REQuoteMeta + Pop ${RESULT} +!macroend + +!macro un.REQuoteMetaCall RESULT SUBJECT + Push `${SUBJECT}` + Call un.REQuoteMeta + Pop ${RESULT} +!macroend + +!macro REClearAllOptionsCall + Call REClearAllOptions +!macroend + +!macro un.REClearAllOptionsCall + Call un.REClearAllOptions +!macroend + +!macro REClearOptionCall OPTION + Push `${OPTION}` + Call REClearOption +!macroend + +!macro un.REClearOptionCall OPTION + Push `${OPTION}` + Call un.REClearOption +!macroend + +!macro RESetOptionCall OPTION + Push `${OPTION}` + Call RESetOption +!macroend + +!macro un.RESetOptionCall OPTION + Push `${OPTION}` + Call un.RESetOption +!macroend + +!macro REGetOptionCall RESULT OPTION + Push `${OPTION}` + Call REGetOption + Pop ${RESULT} +!macroend + +!macro un.REGetOptionCall RESULT OPTION + Push `${OPTION}` + Call un.REGetOption + Pop ${RESULT} +!macroend + +!macro REMatchesCall RESULT PATTERN SUBJECT PARTIAL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${PARTIAL}` + Push "0" + Call REMatches + Pop ${RESULT} +!macroend + +!macro un.REMatchesCall RESULT PATTERN SUBJECT PARTIAL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${PARTIAL}` + Push "0" + Call un.REMatches + Pop ${RESULT} +!macroend + +!macro RECaptureMatchesCall RESULT PATTERN SUBJECT PARTIAL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${PARTIAL}` + Push "1" + Call REMatches + Pop ${RESULT} +!macroend + +!macro un.RECaptureMatchesCall RESULT PATTERN SUBJECT PARTIAL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${PARTIAL}` + Push "1" + Call un.REMatches + Pop ${RESULT} +!macroend + +!macro REFindCall RESULT PATTERN SUBJECT + Push `${PATTERN}` + Push `${SUBJECT}` + Call REFind + Pop ${RESULT} +!macroend + +!macro un.REFindCall RESULT PATTERN SUBJECT + Push `${PATTERN}` + Push `${SUBJECT}` + Call un.REFind + Pop ${RESULT} +!macroend + +!macro REFindNextCall RESULT + Call REFindNext + Pop ${RESULT} +!macroend + +!macro un.REFindNextCall RESULT + Call un.REFindNext + Pop ${RESULT} +!macroend + +!macro REFindCloseCall + Call REFindClose +!macroend + +!macro un.REFindCloseCall + Call un.REFindClose +!macroend + +!macro REReplaceCall RESULT PATTERN SUBJECT REPLACEMENT REPLACEALL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${REPLACEMENT}` + Push `${REPLACEALL}` + Call REReplace + Pop ${RESULT} +!macroend + +!macro un.REReplaceCall RESULT PATTERN SUBJECT REPLACEMENT REPLACEALL + Push `${PATTERN}` + Push `${SUBJECT}` + Push `${REPLACEMENT}` + Push `${REPLACEALL}` + Call un.REReplace + Pop ${RESULT} +!macroend + +# Functions + +!macro RECheckPattern + !ifndef ${_PCRELIB_UN}RECheckPattern + !define ${_PCRELIB_UN}RECheckPattern `!insertmacro ${_PCRELIB_UN}RECheckPatternCall` + Function ${_PCRELIB_UN}RECheckPattern + + Exch $0 + + NSISpcre::RECheckPattern /NOUNLOAD $0 + + Pop $0 + + Exch $0 + + FunctionEnd + !endif +!macroend + +!macro REQuoteMeta + !ifndef ${_PCRELIB_UN}REQuoteMeta + !define ${_PCRELIB_UN}REQuoteMeta `!insertmacro ${_PCRELIB_UN}REQuoteMetaCall` + Function ${_PCRELIB_UN}REQuoteMeta + + Exch $0 + + NSISpcre::REQuoteMeta /NOUNLOAD $0 + + Pop $0 + + Exch $0 + + FunctionEnd + !endif +!macroend + +!macro REClearAllOptions + !ifndef ${_PCRELIB_UN}REClearAllOptions + !define ${_PCRELIB_UN}REClearAllOptions `!insertmacro ${_PCRELIB_UN}REClearAllOptionsCall` + Function ${_PCRELIB_UN}REClearAllOptions + + NSISpcre::REClearAllOptions /NOUNLOAD + + FunctionEnd + !endif +!macroend + +!macro REClearOption + !ifndef ${_PCRELIB_UN}REClearOption + !define ${_PCRELIB_UN}REClearOption `!insertmacro ${_PCRELIB_UN}REClearOptionCall` + Function ${_PCRELIB_UN}REClearOption + + # [OPTION] + Exch $0 + + NSISpcre::REClearOption /NOUNLOAD $0 + + Pop $0 + + FunctionEnd + !endif +!macroend + +!macro RESetOption + !ifndef ${_PCRELIB_UN}RESetOption + !define ${_PCRELIB_UN}RESetOption `!insertmacro ${_PCRELIB_UN}RESetOptionCall` + Function ${_PCRELIB_UN}RESetOption + + # [OPTION] + Exch $0 + + NSISpcre::RESetOption /NOUNLOAD $0 + + Pop $0 + + FunctionEnd + !endif +!macroend + +!macro REGetOption + !ifndef ${_PCRELIB_UN}REGetOption + !define ${_PCRELIB_UN}REGetOption `!insertmacro ${_PCRELIB_UN}REGetOptionCall` + Function ${_PCRELIB_UN}REGetOption + + # [OPTION] + Exch $0 + + NSISpcre::REGetOption /NOUNLOAD $0 + + Pop $0 + + Exch $0 # [RESULT] + + FunctionEnd + !endif +!macroend + +!macro REMatches + !ifndef ${_PCRELIB_UN}REMatches + !define ${_PCRELIB_UN}REMatches `!insertmacro ${_PCRELIB_UN}REMatchesCall` + !define ${_PCRELIB_UN}RECaptureMatches `!insertmacro ${_PCRELIB_UN}RECaptureMatchesCall` + Function ${_PCRELIB_UN}REMatches + + # [PATTERN, SUBJECT, PARTIAL, CAPTURE] + Exch $0 # [PATTERN, SUBJECT, PARTIAL, $0] + Exch 3 # [$0, SUBJECT, PARTIAL, PATTERN] + Exch $1 # [$0, SUBJECT, PARTIAL, $1] + Exch 2 # [$0, $1, PARTIAL, SUBJECT] + Exch $2 # [$0, $1, PARTIAL, $2] + Exch # [$0, $1, $2, PARTIAL] + Exch $3 # [$0, $1, $2, $3] + Push $4 + + ${If} $0 != 0 + StrCpy $4 5 # Push captured strings under the 5 items at the top of the stack + ${Else} + StrCpy $4 0 # Push captured strings to the top of the stack + ${EndIf} + + NSISpcre::REMatches /NOUNLOAD $1 $2 $3 $4 + Pop $1 # true, false or error + ClearErrors + ${If} $1 == "true" + Pop $1 # Number of captured patterns + ${If} $0 != 0 + # Capturing so leave captured strings on stack + # Returned value is number of captured strings + ${Else} + # Remove captured strings from the stack + # Returned value is 'true' + ${For} $2 1 $1 + Pop $3 + ${Next} + StrCpy $1 "true" + ${EndIf} + ${ElseIf} $1 == "false" + # Do nothing - just return 'false' + ${Else} + SetErrors + ${EndIf} + + StrCpy $0 $1 + + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + FunctionEnd + !endif +!macroend + +!macro REFind + !ifndef ${_PCRELIB_UN}REFind + !define ${_PCRELIB_UN}REFind `!insertmacro ${_PCRELIB_UN}REFindCall` + Function ${_PCRELIB_UN}REFind + + # [PATTERN, SUBJECT] + Exch $0 # [PATTERN, $0] + Exch # [$0, PATTERN] + Exch $1 # [$0, $1] + + NSISpcre::REFind /NOUNLOAD $1 $0 2 + Pop $0 # true, false or error + ClearErrors + ${If} $0 == "true" + Pop $0 # Number of captured patterns + # Leave captured strings on stack + # Returned value is number of captured strings + ${ElseIf} $0 == "false" + # Do nothing - just return 'false' + ${Else} + SetErrors + ${EndIf} + + Pop $1 + Exch $0 + + FunctionEnd + !endif + !ifndef ${_PCRELIB_UN}REFindClose + !define ${_PCRELIB_UN}REFindClose `!insertmacro ${_PCRELIB_UN}REFindCloseCall` + Function ${_PCRELIB_UN}REFindClose + + NSISpcre::REFindClose /NOUNLOAD + + FunctionEnd + !endif +!macroend + +!macro REFindNext + !ifndef ${_PCRELIB_UN}REFindNext + !define ${_PCRELIB_UN}REFindNext `!insertmacro ${_PCRELIB_UN}REFindNextCall` + Function ${_PCRELIB_UN}REFindNext + + Push $0 + + NSISpcre::REFindNext /NOUNLOAD 1 + Pop $0 # true, false or error + ClearErrors + ${If} $0 == "true" + Pop $0 # Number of captured patterns + # Leave captured strings on stack + # Returned value is number of captured strings + ${ElseIf} $0 == "false" + # Do nothing - just return 'false' + ${Else} + SetErrors + ${EndIf} + + Exch $0 + + FunctionEnd + !endif +!macroend + +!macro REReplace + !ifndef ${_PCRELIB_UN}REReplace + !define ${_PCRELIB_UN}REReplace `!insertmacro ${_PCRELIB_UN}REReplaceCall` + Function ${_PCRELIB_UN}REReplace + + # [PATTERN, SUBJECT, REPLACEMENT, REPLACEALL] + Exch $0 # [PATTERN, SUBJECT, REPLACEMENT, $0] + Exch 3 # [$0, SUBJECT, REPLACEMENT, PATTERN] + Exch $1 # [$0, SUBJECT, REPLACEMENT, $1] + Exch 2 # [$0, $1, REPLACEMENT, SUBJECT] + Exch $2 # [$0, $1, REPLACEMENT, $2] + Exch # [$0, $1, $2, REPLACEMENT] + Exch $3 # [$0, $1, $2, $3] + + NSISpcre::REReplace /NOUNLOAD $1 $2 $3 $0 + Pop $1 # true, false or error + ClearErrors + ${If} $1 == "true" + Pop $0 # String with substitutions + ${ElseIf} $1 == "false" + StrCpy $0 "" + ${Else} + SetErrors + StrCpy $0 $1 + ${EndIf} + + Pop $3 + Pop $2 + Pop $1 + Exch $0 + + FunctionEnd + !endif +!macroend + +# LogicLib support (add =~ and !~ operators to LogicLib) +!macro _=~ _a _b _t _f + !define _t=${_t} + !ifdef _t= ; If no true label then make one + !define __t _LogicLib_Label_${__LINE__} + !else + !define __t ${_t} + !endif + + Push $0 + ${REMatches} $0 ${_b} ${_a} 1 + StrCmp $0 "true" +1 +3 + Pop $0 + Goto ${__t} + + Pop $0 + !define _f=${_f} + !ifndef _f= ; If a false label then go there + Goto ${_f} + !endif + !undef _f=${_f} + + !ifdef _t= ; If we made our own true label then place it + ${__t}: + !endif + !undef __t + !undef _t=${_t} +!macroend + +!macro _!~ _a _b _t _f + !define _t=${_t} + !ifdef _t= ; If no true label then make one + !define __t _LogicLib_Label_${__LINE__} + !else + !define __t ${_t} + !endif + + Push $0 + !ifdef PCRELLUN + ${un.REMatches} $0 ${_b} ${_a} 1 + !else + ${REMatches} $0 ${_b} ${_a} 1 + !endif + StrCmp $0 "true" +3 +1 + Pop $0 + Goto ${__t} + + Pop $0 + !define _f=${_f} + !ifndef _f= ; If a false label then go there + Goto ${_f} + !endif + !undef _f=${_f} + + !ifdef _t= ; If we made our own true label then place it + ${__t}: + !endif + !undef __t + !undef _t=${_t} +!macroend + +# Uninstaller support + +!macro un.RECheckPattern + !ifndef un.RECheckPattern + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro RECheckPattern + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REQuoteMeta + !ifndef un.REQuoteMeta + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REQuoteMeta + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REClearAllOptions + !ifndef un.REClearAllOptions + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REClearAllOptions + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REClearOption + !ifndef un.REClearOption + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REClearOption + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.RESetOption + !ifndef un.RESetOption + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro RESetOption + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REGetOption + !ifndef un.REGetOption + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REGetOption + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REMatches + !ifndef un.REMatches + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REMatches + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.RECaptureMatches + !ifndef un.RECaptureMatches + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro RECaptureMatches + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REFind + !ifndef un.REFind + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REFind + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REFindNext + !ifndef un.REFindNext + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REFindNext + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REFindClose + !ifndef un.REFindClose + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REFindClose + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro un.REReplace + !ifndef un.REReplace + !undef _PCRELIB_UN + !define _PCRELIB_UN `un.` + + !insertmacro REReplace + + !undef _PCRELIB_UN + !define _PCRELIB_UN + !endif +!macroend + +!macro _un.=~ _a _b _t _f + !define PCRELLUN + !insertmacro _=~ `${_a}` `${_b}` `${_t}` `${_f}` + !undef PCRELLUN +!macroend + +!macro _un.!~ _a _b _t _f + !define PCRELLUN + !insertmacro _!~ `${_a}` `${_b}` `${_t}` `${_f}` + !undef PCRELLUN +!macroend + +!endif + diff --git a/InstallationScript/Plugins/x64-ansi/NSISpcre.dll b/InstallationScript/Plugins/x64-ansi/NSISpcre.dll new file mode 100644 index 0000000000000000000000000000000000000000..f15074f091fc33b054e47e6b54c7feb962781da7 GIT binary patch literal 721920 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πS>%J@fnm#aexQ5kA*xV)EP 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

    d?;fz&OR>gtd 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

    gK5~&rXVof4-PpLS!DD_6ExT}b6K3bIe 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