From 04391a605a598543bb4529c5e774abea8ce73e66 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Fri, 11 Aug 2023 15:51:40 +0200 Subject: [PATCH 01/56] Update BUILD.md --- BUILD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index 4faa870..7933743 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,2 +1,2 @@ ## Build Command: -`dotnet publish HA -r win-x64 -c Release /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --output .\ha\bin\net6.0-windows10.0.17763.0\release\publish_self_contained` \ No newline at end of file +`dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --output .\HA\bin\Publish\net6.0-windows10.0.17763.0\` From 14b5b052c8ee6ab09719b9d2d6b1e16eebc38989 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Fri, 11 Aug 2023 15:54:58 +0200 Subject: [PATCH 02/56] Update BUILD.md --- BUILD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index 7933743..847f21e 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,2 +1,2 @@ ## Build Command: -`dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --output .\HA\bin\Publish\net6.0-windows10.0.17763.0\` +`dotnet publish HA -r win-x64 -c Release --self-contained /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --output .\ha\bin\Publish\net6.0-windows10.0.17763.0\` From 01ec65eeea981f9c1565490476bacd940f27774a Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Fri, 11 Aug 2023 16:12:46 +0200 Subject: [PATCH 03/56] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b6d0f0..58a5d8e 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Example Audio Notification: Example Emulate Send Key Notification: * Require `keys:` in your `configuration.yaml` ![image](https://github.com/GamerClassN7/HA_Desktop_Companion/assets/22167469/730fdbf4-4744-48a5-9b19-379978e81ef5) -* Keys Codes can be found [Here](//https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes) in Colum: __Value__ +* Keys Codes can be found [Here](https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes) in Colum: __Value__ ## Automation Ideas: Pause TTS when camera is in use (usefull when working from home) credits: [Hellis81](https://community.home-assistant.io/u/Hellis81) From 10c87053d913d8d0fcde2728ccc9e27eab33dcc3 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Tue, 16 Jan 2024 08:02:31 +0100 Subject: [PATCH 04/56] Log Class Fixes --- HA/App.xaml.cs | 2 +- HA/Class/Helpers/Logger.cs | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/HA/App.xaml.cs b/HA/App.xaml.cs index 8c15dc9..a812fd0 100644 --- a/HA/App.xaml.cs +++ b/HA/App.xaml.cs @@ -181,7 +181,7 @@ public string GetRootDir() public bool Start(bool sleepRecover = false) { - Logger.init(appDir + "/log.log"); + Logger.init(); string token = ""; string url = ""; diff --git a/HA/Class/Helpers/Logger.cs b/HA/Class/Helpers/Logger.cs index b2e27ec..01b3f42 100644 --- a/HA/Class/Helpers/Logger.cs +++ b/HA/Class/Helpers/Logger.cs @@ -18,6 +18,7 @@ namespace HA.Class.Helpers public class Logger { private static bool initialized = false; + private static DateTime lastInit; private static string path1; private static string[] secreetsStrings = new string[] { }; @@ -36,13 +37,21 @@ public static void setSecreets(string[] strings) secreetsStrings = strings.Where(x => !string.IsNullOrEmpty(x)).ToArray(); } - public static void init(string path = "./log.log") + public static void init() { - path1 = Path.Combine(appDir, path).ToString(); + + path1 = Path.Combine(appDir, (DateTime.Now).ToString("MM_dd_yyyy_log.log")).ToString(); + lastInit = DateTime.Now; if (!File.Exists(path1)) { File.WriteAllText(path1, getMessage("Initialization", 0 /*info*/), System.Text.Encoding.UTF8); } + + string pathToLogToDelete = Path.Combine(appDir, (DateTime.Now).ToString("MM_dd_yyyy_log.log")).ToString(); + if (File.Exists(pathToLogToDelete)) + { + File.Delete(pathToLogToDelete); + } initialized = true; } @@ -55,7 +64,8 @@ public static void init(string path = "./log.log") public static void write(string msg, int level = 0) { - if (!initialized) + int initBeforeDays = (int)(DateTime.Now - lastInit).TotalDays; + if (!initialized || initBeforeDays >= 1) { init(); } From 6ad6cc3f2edfdb93eb2fa20ab06e0d5cc24186a8 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Tue, 16 Jan 2024 08:04:30 +0100 Subject: [PATCH 05/56] Fix Overload --- HA/Class/Helpers/Logger.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/HA/Class/Helpers/Logger.cs b/HA/Class/Helpers/Logger.cs index 01b3f42..49f269b 100644 --- a/HA/Class/Helpers/Logger.cs +++ b/HA/Class/Helpers/Logger.cs @@ -47,7 +47,7 @@ public static void init() File.WriteAllText(path1, getMessage("Initialization", 0 /*info*/), System.Text.Encoding.UTF8); } - string pathToLogToDelete = Path.Combine(appDir, (DateTime.Now).ToString("MM_dd_yyyy_log.log")).ToString(); + string pathToLogToDelete = Path.Combine(appDir, (DateTime.Now).AddDays(-3).ToString("MM_dd_yyyy_log.log")).ToString(); if (File.Exists(pathToLogToDelete)) { File.Delete(pathToLogToDelete); @@ -82,7 +82,8 @@ public static void write(string msg, int level = 0) public static void write(object msg, int level = 0) { - if (!initialized) + int initBeforeDays = (int)(DateTime.Now - lastInit).TotalDays; + if (!initialized || initBeforeDays >= 1) { init(); } From 1759c180574cc923aed23f6e9552627d2f825a4b Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Tue, 16 Jan 2024 19:35:09 +0100 Subject: [PATCH 06/56] Trimurls tailing / same vai for api and ws --- HA/Class/HomeAssistant/HomeAssistantWS.cs | 4 ++-- HA/class/HomeAssistant/HomeAssistantAPI.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HA/Class/HomeAssistant/HomeAssistantWS.cs b/HA/Class/HomeAssistant/HomeAssistantWS.cs index 86a3365..981b762 100644 --- a/HA/Class/HomeAssistant/HomeAssistantWS.cs +++ b/HA/Class/HomeAssistant/HomeAssistantWS.cs @@ -49,7 +49,7 @@ public class HomeAssistantWS public HomeAssistantWS(string apiUrl, string webhookId, string apiToken) { - url = apiUrl; + url = apiUrl.TrimEnd('/'); token = apiToken; webhook = webhookId; @@ -68,7 +68,7 @@ public async Task registerAsync() { Logger.write("WS INITIALIZATION"); - Uri wsAddress = new Uri(url.TrimEnd('/') + "/api/websocket"); + Uri wsAddress = new Uri(url + "/api/websocket"); var exitEvent = new ManualResetEvent(false); socket.Options.KeepAliveInterval = TimeSpan.Zero; diff --git a/HA/class/HomeAssistant/HomeAssistantAPI.cs b/HA/class/HomeAssistant/HomeAssistantAPI.cs index f17ffe4..ac199bc 100644 --- a/HA/class/HomeAssistant/HomeAssistantAPI.cs +++ b/HA/class/HomeAssistant/HomeAssistantAPI.cs @@ -69,7 +69,7 @@ public HomeAssistantAPI(string apiRootUrl, string apiToken) throw new Exception("unnabůle to connect to" + apiRootUrl); } - url = apiRootUrl; + url = apiRootUrl.TrimEnd('/'); token = apiToken; } From 672f681cb522fef6695a66963a3bc3531463fa7a Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Tue, 16 Jan 2024 19:49:38 +0100 Subject: [PATCH 07/56] Emergency Log & CleanUp - Bug Fixes --- HA/Class/Helpers/Logger.cs | 14 +++++++++++--- HA/HA.csproj | 4 ++-- HA/meta.xml | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/HA/Class/Helpers/Logger.cs b/HA/Class/Helpers/Logger.cs index 49f269b..a623146 100644 --- a/HA/Class/Helpers/Logger.cs +++ b/HA/Class/Helpers/Logger.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.VisualBasic.Logging; +using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; @@ -40,18 +41,25 @@ public static void setSecreets(string[] strings) public static void init() { - path1 = Path.Combine(appDir, (DateTime.Now).ToString("MM_dd_yyyy_log.log")).ToString(); + path1 = Path.Combine(appDir, ((DateTime.Now).ToString("MM_dd_yyyy")+ "_log.log")).ToString(); lastInit = DateTime.Now; if (!File.Exists(path1)) { File.WriteAllText(path1, getMessage("Initialization", 0 /*info*/), System.Text.Encoding.UTF8); } - string pathToLogToDelete = Path.Combine(appDir, (DateTime.Now).AddDays(-3).ToString("MM_dd_yyyy_log.log")).ToString(); + string pathToLogToDelete = Path.Combine(appDir, ((DateTime.Now).AddDays(-3).ToString("MM_dd_yyyy") + "_log.log")).ToString(); if (File.Exists(pathToLogToDelete)) { File.Delete(pathToLogToDelete); } + + string oldPathToLogToDelete = Path.Combine(appDir, "log.log").ToString(); + if (File.Exists(oldPathToLogToDelete)) + { + File.Delete(oldPathToLogToDelete); + } + initialized = true; } diff --git a/HA/HA.csproj b/HA/HA.csproj index 600af3a..b0da331 100644 --- a/HA/HA.csproj +++ b/HA/HA.csproj @@ -8,8 +8,8 @@ true ha_logo.ico ha_logo.ico - 0.0.12.1 - 0.0.12.1 + 0.0.12.2 + 0.0.12.2 diff --git a/HA/meta.xml b/HA/meta.xml index e226e05..86f4622 100644 --- a/HA/meta.xml +++ b/HA/meta.xml @@ -1,6 +1,6 @@  - 0.0.12.1 + 0.0.12.2 https://github.com/GamerClassN7/HA_Desktop_Companion/releases/latest/download/HA_Self_Contained.zip https://github.com/GamerClassN7/HA_Desktop_Companion/releases/latest false From 5a4d3be6a12c5e92cb7fa1cc324b225b10ef24f2 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Mon, 11 Mar 2024 09:38:48 +0100 Subject: [PATCH 08/56] Version change --- HA/HA.csproj | 4 ++-- HA/meta.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HA/HA.csproj b/HA/HA.csproj index b0da331..04c0a56 100644 --- a/HA/HA.csproj +++ b/HA/HA.csproj @@ -8,8 +8,8 @@ true ha_logo.ico ha_logo.ico - 0.0.12.2 - 0.0.12.2 + 0.0.13.0 + 0.0.13.0 diff --git a/HA/meta.xml b/HA/meta.xml index 86f4622..a3747bd 100644 --- a/HA/meta.xml +++ b/HA/meta.xml @@ -1,6 +1,6 @@  - 0.0.12.2 + 0.0.13.0 https://github.com/GamerClassN7/HA_Desktop_Companion/releases/latest/download/HA_Self_Contained.zip https://github.com/GamerClassN7/HA_Desktop_Companion/releases/latest false From 50eea076b7e7564ae08b3cb6d06da27cfd74df60 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Mon, 11 Mar 2024 10:54:49 +0100 Subject: [PATCH 09/56] Testing --- HA/Class/HomeAssistant/HomeAssistantWS.cs | 44 ++++++++++++----------- HA/MainWindow.xaml | 2 +- HA/MainWindow.xaml.cs | 6 ++++ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/HA/Class/HomeAssistant/HomeAssistantWS.cs b/HA/Class/HomeAssistant/HomeAssistantWS.cs index 981b762..1908736 100644 --- a/HA/Class/HomeAssistant/HomeAssistantWS.cs +++ b/HA/Class/HomeAssistant/HomeAssistantWS.cs @@ -2,6 +2,7 @@ using HA.Class.HomeAssistant.Objects; using Microsoft.VisualBasic; using Newtonsoft.Json; +using Newtonsoft.Json.Bson; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; @@ -46,7 +47,6 @@ public class HomeAssistantWS [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void keybd_event(uint bVk, uint bScan, uint dwFlags, uint dwExtraInfo); - public HomeAssistantWS(string apiUrl, string webhookId, string apiToken) { url = apiUrl.TrimEnd('/'); @@ -67,9 +67,9 @@ public async Task registerAsync() try { Logger.write("WS INITIALIZATION"); - Uri wsAddress = new Uri(url + "/api/websocket"); var exitEvent = new ManualResetEvent(false); + socket = new ClientWebSocket(); socket.Options.KeepAliveInterval = TimeSpan.Zero; socket.ConnectAsync(wsAddress, CancellationToken.None).Wait(); @@ -110,7 +110,7 @@ public async Task registerAsync() isPingEnabled = true; StartPingAsyncTask(); - + isConnected = true; retryCount = 0; @@ -122,11 +122,11 @@ public async Task registerAsync() Logger.write("WS State " + socket.State); Close(); - if (retryCount <= 5 && socket.State == WebSocketState.Closed) + if (retryCount <= 5 && (socket.State == WebSocketState.Closed || socket.State == WebSocketState.Aborted)) { retryCount++; registerAsync(); - } + } } } @@ -141,18 +141,18 @@ private JObject sendAndRecieveAsync(dynamic payloadObj) socket.SendAsync(BYTEPayload, WebSocketMessageType.Text, true, CancellationToken.None).Wait(); - string JSONRecievedpayload = ""; - - Logger.write("SEND/RECIEVING"); - interactions = interactions + 1; + string JSONRecievedpayload = ""; - WebSocketReceiveResult result = socket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None).Result; + Logger.write("SEND/RECIEVING"); + interactions = interactions + 1; - JSONRecievedpayload = Encoding.UTF8.GetString(buffer, 0, result.Count); + WebSocketReceiveResult result = socket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None).Result; + + JSONRecievedpayload = Encoding.UTF8.GetString(buffer, 0, result.Count); + + Logger.write("RECIEVE"); + Logger.write(JSONRecievedpayload); - Logger.write("RECIEVE"); - Logger.write(JSONRecievedpayload); - return JObject.Parse(JSONRecievedpayload); } @@ -171,7 +171,7 @@ private async Task RecieveAsync() private async Task Send(dynamic payloadObj) { - try { + try { string JSONPayload = JsonConvert.SerializeObject(payloadObj, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }).ToString(); Logger.write("SEND"); @@ -189,9 +189,9 @@ private async Task Send(dynamic payloadObj) public bool getConectionStatus() { - return (isConnected && isSubscribed); + return (isConnected && isSubscribed); } - + private async Task StartPingAsyncTask() { Logger.write("Initializing Ping"); @@ -293,7 +293,7 @@ private void HandleEvent(JObject payloadObj) app.ShowNotification(msg_title, msg_text, msg_image, msg_audio); } - + if (eventData.ContainsKey("data")) { if (eventData["data"].ToObject().ContainsKey("key")) { @@ -312,11 +312,15 @@ public bool Close() Logger.write("WS state " + socket.State); - updatePingTimer.Stop(); - if (socket.State == WebSocketState.Open || socket.State == WebSocketState.CloseSent) + if (socket.State == WebSocketState.Open || socket.State == WebSocketState.CloseSent || socket.State == WebSocketState.Aborted) { + updatePingTimer.Stop(); socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + socket.Dispose(); + socket = null; + Thread.Sleep(5000); Logger.write("WS closed"); + registerAsync(); } return true; diff --git a/HA/MainWindow.xaml b/HA/MainWindow.xaml index 1013e25..514a871 100644 --- a/HA/MainWindow.xaml +++ b/HA/MainWindow.xaml @@ -45,7 +45,7 @@ - + diff --git a/HA/MainWindow.xaml.cs b/HA/MainWindow.xaml.cs index 6b106c4..5406f8e 100644 --- a/HA/MainWindow.xaml.cs +++ b/HA/MainWindow.xaml.cs @@ -130,5 +130,11 @@ public void settings_Save() loadingScreenStatus.Content = "Initialization Failed!"; loading_Hide(); } + + private void api_status_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) + { + app.ws.Close(); + app.Start(); + } } } From 9df1db9973dacaef6179f4ab8b2633c6362a8bf6 Mon Sep 17 00:00:00 2001 From: GamerClassN7 Date: Tue, 30 Apr 2024 04:49:28 -0700 Subject: [PATCH 10/56] Works on Reborn started --- HA.sln | 6 ++ HADC_REBORN/App.xaml | 10 +++ HADC_REBORN/App.xaml.cs | 47 ++++++++++++ HADC_REBORN/AssemblyInfo.cs | 10 +++ HADC_REBORN/HADC_REBORN.csproj | 27 +++++++ HADC_REBORN/MainWindow.xaml | 12 +++ HADC_REBORN/MainWindow.xaml.cs | 26 +++++++ HADC_REBORN/Resource.Designer.cs | 83 ++++++++++++++++++++ HADC_REBORN/Resource.resx | 127 +++++++++++++++++++++++++++++++ HADC_REBORN/Resource/ha_icon.ico | Bin 0 -> 13839 bytes HADC_REBORN/Resource/ha_logo.png | Bin 0 -> 23007 bytes 11 files changed, 348 insertions(+) create mode 100644 HADC_REBORN/App.xaml create mode 100644 HADC_REBORN/App.xaml.cs create mode 100644 HADC_REBORN/AssemblyInfo.cs create mode 100644 HADC_REBORN/HADC_REBORN.csproj create mode 100644 HADC_REBORN/MainWindow.xaml create mode 100644 HADC_REBORN/MainWindow.xaml.cs create mode 100644 HADC_REBORN/Resource.Designer.cs create mode 100644 HADC_REBORN/Resource.resx create mode 100644 HADC_REBORN/Resource/ha_icon.ico create mode 100644 HADC_REBORN/Resource/ha_logo.png diff --git a/HA.sln b/HA.sln index ea7199d..5ba1157 100644 --- a/HA.sln +++ b/HA.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.5.33516.290 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HA", "HA\HA.csproj", "{F4675A4D-373E-4C21-B77D-529E88181E5F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HADC_REBORN", "HADC_REBORN\HADC_REBORN.csproj", "{3C0F1F5F-1ADE-4CF2-A5B5-348A41ABCD84}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {F4675A4D-373E-4C21-B77D-529E88181E5F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F4675A4D-373E-4C21-B77D-529E88181E5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F4675A4D-373E-4C21-B77D-529E88181E5F}.Release|Any CPU.Build.0 = Release|Any CPU + {3C0F1F5F-1ADE-4CF2-A5B5-348A41ABCD84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C0F1F5F-1ADE-4CF2-A5B5-348A41ABCD84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C0F1F5F-1ADE-4CF2-A5B5-348A41ABCD84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C0F1F5F-1ADE-4CF2-A5B5-348A41ABCD84}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/HADC_REBORN/App.xaml b/HADC_REBORN/App.xaml new file mode 100644 index 0000000..0fe0910 --- /dev/null +++ b/HADC_REBORN/App.xaml @@ -0,0 +1,10 @@ + + + + + diff --git a/HADC_REBORN/App.xaml.cs b/HADC_REBORN/App.xaml.cs new file mode 100644 index 0000000..52252cd --- /dev/null +++ b/HADC_REBORN/App.xaml.cs @@ -0,0 +1,47 @@ +using System.Configuration; +using System.Data; +using System.Windows; + +using From = System.Windows.Forms; + +namespace HADC_REBORN +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : System.Windows.Application + { + public static NotifyIcon icon; + + protected override void OnStartup(StartupEventArgs e) + { + App.icon = new NotifyIcon(); + + icon.Click += new EventHandler(icon_click); + icon.Icon = HADC_REBORN.Resource.ha_icon; + icon.Text = System.AppDomain.CurrentDomain.FriendlyName; + icon.Visible = true; + + icon.ContextMenuStrip = new ContextMenuStrip(); + icon.ContextMenuStrip.Items.Add("Home Assistant", null, null); + icon.ContextMenuStrip.Items.Add("Log", null, null); + icon.ContextMenuStrip.Items.Add("Send Test Notification", null, null); + icon.ContextMenuStrip.Items.Add("Quit", null, null); + + base.OnStartup(e); + } + + protected override void OnExit(ExitEventArgs e) + { + icon.Dispose(); + + base.OnExit(e); + } + + private void icon_click(Object sender, EventArgs e) + { + + } + } + +} diff --git a/HADC_REBORN/AssemblyInfo.cs b/HADC_REBORN/AssemblyInfo.cs new file mode 100644 index 0000000..b0ec827 --- /dev/null +++ b/HADC_REBORN/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/HADC_REBORN/HADC_REBORN.csproj b/HADC_REBORN/HADC_REBORN.csproj new file mode 100644 index 0000000..ed79dd3 --- /dev/null +++ b/HADC_REBORN/HADC_REBORN.csproj @@ -0,0 +1,27 @@ + + + + WinExe + net8.0-windows + enable + enable + true + True + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + diff --git a/HADC_REBORN/MainWindow.xaml b/HADC_REBORN/MainWindow.xaml new file mode 100644 index 0000000..fcccf68 --- /dev/null +++ b/HADC_REBORN/MainWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/HADC_REBORN/MainWindow.xaml.cs b/HADC_REBORN/MainWindow.xaml.cs new file mode 100644 index 0000000..330eec2 --- /dev/null +++ b/HADC_REBORN/MainWindow.xaml.cs @@ -0,0 +1,26 @@ +using System.Drawing; +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; + +namespace HADC_REBORN +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + this.ShowInTaskbar = false; + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/HADC_REBORN/Resource.Designer.cs b/HADC_REBORN/Resource.Designer.cs new file mode 100644 index 0000000..f97625d --- /dev/null +++ b/HADC_REBORN/Resource.Designer.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace HADC_REBORN { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // 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", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HADC_REBORN.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon ha_icon { + get { + object obj = ResourceManager.GetObject("ha_icon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ha_logo { + get { + object obj = ResourceManager.GetObject("ha_logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/HADC_REBORN/Resource.resx b/HADC_REBORN/Resource.resx new file mode 100644 index 0000000..7eeb887 --- /dev/null +++ b/HADC_REBORN/Resource.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resource\ha_icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resource\ha_logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/HADC_REBORN/Resource/ha_icon.ico b/HADC_REBORN/Resource/ha_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c4200cebb8bc4f3e86d2b8726df867751f4be0e8 GIT binary patch literal 13839 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 literal 0 HcmV?d00001 From eeb12a7c12b594f006672d71e4a6f4e24c336842 Mon Sep 17 00:00:00 2001 From: GamerClassN7 Date: Tue, 30 Apr 2024 05:10:34 -0700 Subject: [PATCH 11/56] Create Logger.cs --- HADC_REBORN/Class/Helpers/Logger.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 HADC_REBORN/Class/Helpers/Logger.cs diff --git a/HADC_REBORN/Class/Helpers/Logger.cs b/HADC_REBORN/Class/Helpers/Logger.cs new file mode 100644 index 0000000..a9898fd --- /dev/null +++ b/HADC_REBORN/Class/Helpers/Logger.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Printing; +using System.Text; +using System.Threading.Tasks; + +namespace HADC_REBORN.Class.Helpers +{ + internal class Logger + { + private static bool isInistialized = false; +#if DEBUG + private string appDir = Directory.GetCurrentDirectory(); +#else + private string appDir = AppDomain.CurrentDomain.BaseDirectory(); +#endif + private string logFilePat + } +} From aa5bff6dcbb37ac2e5e57abaca32f893875f4697 Mon Sep 17 00:00:00 2001 From: GamerClassN7 Date: Tue, 30 Apr 2024 07:58:15 -0700 Subject: [PATCH 12/56] Progress --- HADC_REBORN/App.config | 11 +++++ HADC_REBORN/App.xaml.cs | 5 ++- HADC_REBORN/Class/Helpers/Logger.cs | 64 ++++++++++++++++++++++++++++- HADC_REBORN/HADC_REBORN.csproj | 22 +++++----- HADC_REBORN/MainWindow.xaml | 56 +++++++++++++++++++++++-- HADC_REBORN/MainWindow.xaml.cs | 42 ++++++++++++++++++- HADC_REBORN/Resource.resx | 3 ++ 7 files changed, 186 insertions(+), 17 deletions(-) create mode 100644 HADC_REBORN/App.config diff --git a/HADC_REBORN/App.config b/HADC_REBORN/App.config new file mode 100644 index 0000000..92b3fc7 --- /dev/null +++ b/HADC_REBORN/App.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/HADC_REBORN/App.xaml.cs b/HADC_REBORN/App.xaml.cs index 52252cd..e2c7e39 100644 --- a/HADC_REBORN/App.xaml.cs +++ b/HADC_REBORN/App.xaml.cs @@ -1,4 +1,5 @@ -using System.Configuration; +using HADC_REBORN.Class.Helpers; +using System.Configuration; using System.Data; using System.Windows; @@ -12,10 +13,12 @@ namespace HADC_REBORN public partial class App : System.Windows.Application { public static NotifyIcon icon; + public static Logger log; protected override void OnStartup(StartupEventArgs e) { App.icon = new NotifyIcon(); + App.log = new Logger(); icon.Click += new EventHandler(icon_click); icon.Icon = HADC_REBORN.Resource.ha_icon; diff --git a/HADC_REBORN/Class/Helpers/Logger.cs b/HADC_REBORN/Class/Helpers/Logger.cs index a9898fd..f797e4b 100644 --- a/HADC_REBORN/Class/Helpers/Logger.cs +++ b/HADC_REBORN/Class/Helpers/Logger.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Printing; @@ -8,7 +9,7 @@ namespace HADC_REBORN.Class.Helpers { - internal class Logger + public class Logger { private static bool isInistialized = false; #if DEBUG @@ -16,6 +17,65 @@ internal class Logger #else private string appDir = AppDomain.CurrentDomain.BaseDirectory(); #endif - private string logFilePat + private string logFilePath; + private DateTime lastInitializeDateTime; + + public Logger() { + initialize(); + } + + private void initialize() + { + string logFolderPath = Path.Combine(appDir, "logs"); + Debug.WriteLine(logFolderPath); + + if (!Directory.Exists(logFolderPath)) + { + Directory.CreateDirectory(logFolderPath); + } + + string logFileName = "log_" + ((DateTime.Now).ToString("MM_dd_yyyy")) + ".log"; + logFilePath = Path.Combine(logFolderPath, logFileName); + if (!File.Exists(logFilePath)) + { + File.WriteAllText(logFilePath, getLogMessage("Initializing",0), System.Text.Encoding.UTF8); + } + removeOldLogFiles(logFolderPath); + + lastInitializeDateTime = DateTime.Now; + isInistialized = true; + } + + private void removeOldLogFiles(string rootLogFolderPath, int daysBack = -3) + { + string logFileName = "log_"+((DateTime.Now).AddDays(daysBack).ToString("MM_dd_yyyy"))+".log"; + string LogFileToDelete = Path.Combine(rootLogFolderPath, logFileName); + if (File.Exists(LogFileToDelete)) + { + File.Delete(LogFileToDelete); + } + } + + private string getLogMessage(string text, int type = 0) + { + return DateTime.Now.ToString("[MM/dd/yyyy-HH:mm.ss]") + "[" + type + "]" + text + "\n"; + } + + public void writeLine(string msg, int type = 0) + { + int InitilizedBeforeNumberOfDays = (int)(DateTime.Now - lastInitializeDateTime).TotalDays; + if (!isInistialized || InitilizedBeforeNumberOfDays >= 1) + { + initialize(); + } + + Debug.WriteLine(msg); + + FileStream fileStream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); + StreamWriter streamWriter = new StreamWriter(fileStream); + streamWriter.Write(getLogMessage(msg, type)); + streamWriter.Dispose(); + fileStream.Dispose(); + } } } diff --git a/HADC_REBORN/HADC_REBORN.csproj b/HADC_REBORN/HADC_REBORN.csproj index ed79dd3..237c5b0 100644 --- a/HADC_REBORN/HADC_REBORN.csproj +++ b/HADC_REBORN/HADC_REBORN.csproj @@ -10,18 +10,20 @@ - - True - True - Resource.resx - + + + - - ResXFileCodeGenerator - Resource.Designer.cs - + + + - + + + ResXFileCodeGenerator + Resource.Designer.cs + + diff --git a/HADC_REBORN/MainWindow.xaml b/HADC_REBORN/MainWindow.xaml index fcccf68..a04a840 100644 --- a/HADC_REBORN/MainWindow.xaml +++ b/HADC_REBORN/MainWindow.xaml @@ -5,8 +5,58 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:HADC_REBORN" mc:Ignorable="d" - Title="MainWindow" Height="450" Width="800"> + Title="MainWindow" + Background="#FF03A9F4" + Height="196" + Width="450" + d:DesignHeight="196" + d:DesignWidth="450" + WindowStartupLocation="CenterScreen" + ResizeMode="NoResize" + > - + + + + + + + + + + + + + + + + + +