From 98473745019d917d57e30a93ef4deebe91f2cfa3 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 23 Sep 2024 09:25:35 +0200 Subject: [PATCH] EACC - ok notifica in tray --- EgwControlCenter.App/BlazorForm.Designer.cs | 11 ++- EgwControlCenter.App/BlazorForm.cs | 47 ++++++++-- EgwControlCenter.App/BlazorForm.resx | 3 + .../Components/Compo/TargetSetup.razor | 4 +- .../Components/Pages/Index.razor.cs | 2 +- .../EgwControlCenter.App.csproj | 5 ++ EgwControlCenter.App/favicon.ico | Bin 0 -> 9662 bytes EgwControlCenter.App/wwwroot/css/app.css | 12 +++ EgwControlCenter.App/wwwroot/css/app.less | 19 +++- EgwControlCenter.App/wwwroot/css/app.min.css | 2 +- EgwControlCenter.Core/AppControlService.cs | 85 ++++++++++-------- EgwControlCenter.Core/IAppControlService.cs | 32 ++++++- 12 files changed, 170 insertions(+), 52 deletions(-) create mode 100644 EgwControlCenter.App/favicon.ico diff --git a/EgwControlCenter.App/BlazorForm.Designer.cs b/EgwControlCenter.App/BlazorForm.Designer.cs index 4b9b0d1..a11513f 100644 --- a/EgwControlCenter.App/BlazorForm.Designer.cs +++ b/EgwControlCenter.App/BlazorForm.Designer.cs @@ -33,6 +33,7 @@ blazorWebView1 = new Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView(); notifyIcon1 = new NotifyIcon(components); trayMenu = new ContextMenuStrip(components); + timerCheck = new System.Windows.Forms.Timer(components); SuspendLayout(); // // blazorWebView1 @@ -40,7 +41,7 @@ blazorWebView1.Dock = DockStyle.Fill; blazorWebView1.Location = new Point(0, 0); blazorWebView1.Name = "blazorWebView1"; - blazorWebView1.Size = new Size(800, 450); + blazorWebView1.Size = new Size(690, 370); blazorWebView1.StartPath = "/"; blazorWebView1.TabIndex = 0; blazorWebView1.Text = "blazorWebView1"; @@ -60,11 +61,16 @@ trayMenu.Size = new Size(61, 4); trayMenu.ItemClicked += trayMenu_ItemClicked; // + // timerCheck + // + timerCheck.Interval = 1000; + timerCheck.Tick += timerCheck_Tick; + // // BlazorForm // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); + ClientSize = new Size(690, 370); Controls.Add(blazorWebView1); Icon = (Icon)resources.GetObject("$this.Icon"); Name = "BlazorForm"; @@ -80,5 +86,6 @@ private Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView blazorWebView1; private NotifyIcon notifyIcon1; private ContextMenuStrip trayMenu; + private System.Windows.Forms.Timer timerCheck; } } diff --git a/EgwControlCenter.App/BlazorForm.cs b/EgwControlCenter.App/BlazorForm.cs index ea69bc4..0e5e878 100644 --- a/EgwControlCenter.App/BlazorForm.cs +++ b/EgwControlCenter.App/BlazorForm.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.VisualBasic.Logging; using NLog; using System.Data; +using System.Reflection; namespace EgwControlCenter.App { @@ -15,12 +16,21 @@ namespace EgwControlCenter.App public BlazorForm() { InitializeComponent(); - //init preliminare servizio controllo - MainAppControlService = new AppControlService(); + FormInit(); InitBlazorView(); ForceReload(); } + private void FormInit() + { + //init preliminare servizio controllo + MainAppControlService = new AppControlService(); + timerCheck.Interval = (MainAppControlService.RefreshPeriod * 1000); + MainAppControlService.EA_StatusUpdated += MainAppControlService_EA_StatusUpdated; + // sistemo timer + timerCheck.Start(); + } + #endregion Public Constructors #region Private Fields @@ -46,8 +56,8 @@ namespace EgwControlCenter.App private void BlazorForm_FormClosing(object sender, FormClosingEventArgs e) { - //timerCheck.Stop(); - //timerCheck.Dispose(); + timerCheck.Stop(); + timerCheck.Dispose(); } private void BlazorForm_Load(object sender, EventArgs e) @@ -95,7 +105,7 @@ namespace EgwControlCenter.App /// private void ForceReload() { - MainAppControlService.DoForceCheck(); + MainAppControlService.DoFullCheck(true); } private void InitBlazorView() @@ -113,6 +123,23 @@ namespace EgwControlCenter.App blazorWebView1.RootComponents.Add("#app"); } + /// + /// Verifica se ci siano update da mostrare come notifica in tray + /// + /// + private void MainAppControlService_EA_StatusUpdated() + { + // notifica ballontip se ho aggiornamenti... + if (WindowState != FormWindowState.Normal) + { + notifyIcon1.BalloonTipTitle = "EgalWare's App Control Center"; + notifyIcon1.BalloonTipText = "Update found!"; + notifyIcon1.BalloonTipIcon = ToolTipIcon.Warning; + notifyIcon1.BalloonTipClicked += NotifyIcon1_BalloonTipClicked; + notifyIcon1.ShowBalloonTip(200); + } + } + private void NotifyIcon1_BalloonTipClicked(object? sender, EventArgs e) { Show(); @@ -159,6 +186,16 @@ namespace EgwControlCenter.App { // fix icon! notifyIcon1.Text = $"EgalWare's AppControlCenter | {CurrAssembly.Version}"; + Assembly assembly = Assembly.GetExecutingAssembly(); + string startDir = Path.GetDirectoryName(assembly.Location)!; + string icoPath = Path.Combine(startDir, "favicon.ico"); + notifyIcon1.Icon = Icon.ExtractAssociatedIcon(icoPath); + } + + private void timerCheck_Tick(object sender, EventArgs e) + { + // esegue controllo locale ed eventualmente remoto se scaduto... + MainAppControlService.DoFullCheck(false); } /// diff --git a/EgwControlCenter.App/BlazorForm.resx b/EgwControlCenter.App/BlazorForm.resx index dc23c51..548a0ea 100644 --- a/EgwControlCenter.App/BlazorForm.resx +++ b/EgwControlCenter.App/BlazorForm.resx @@ -290,6 +290,9 @@ AAA= + + 236, 17 + AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/EgwControlCenter.App/Components/Compo/TargetSetup.razor b/EgwControlCenter.App/Components/Compo/TargetSetup.razor index 2d3da3a..14f1392 100644 --- a/EgwControlCenter.App/Components/Compo/TargetSetup.razor +++ b/EgwControlCenter.App/Components/Compo/TargetSetup.razor @@ -6,7 +6,7 @@ {
- +
@@ -21,7 +21,7 @@
- +
diff --git a/EgwControlCenter.App/Components/Pages/Index.razor.cs b/EgwControlCenter.App/Components/Pages/Index.razor.cs index a2cfa17..a19dfee 100644 --- a/EgwControlCenter.App/Components/Pages/Index.razor.cs +++ b/EgwControlCenter.App/Components/Pages/Index.razor.cs @@ -22,7 +22,7 @@ namespace EgwControlCenter.App.Components.Pages protected void ForceCheck() { - ACService.DoForceCheck(); + ACService.DoFullCheck(true); } #endregion Protected Methods diff --git a/EgwControlCenter.App/EgwControlCenter.App.csproj b/EgwControlCenter.App/EgwControlCenter.App.csproj index efffa66..cdc5737 100644 --- a/EgwControlCenter.App/EgwControlCenter.App.csproj +++ b/EgwControlCenter.App/EgwControlCenter.App.csproj @@ -27,4 +27,9 @@ PreserveNewest + + + Always + + \ No newline at end of file diff --git a/EgwControlCenter.App/favicon.ico b/EgwControlCenter.App/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..28dcc86b25b0d142765504fcd000d400a5fcd619 GIT binary patch literal 9662 zcmeHNOK%cU6dwPCYd0n?yEbanjWIDMCdReKwF?)icn$nKN0f4 zFoxCnOBVNEDrT9!w+(CkjQ9_>t6BZ0*|{-fTsvd}u0IiULnip6XNWlG#ITnMGS1I_ z_&4h^cwbxq`=y-&K|U7fi$CQ<$|Pa-)={uu-o+g%|ANRge>SV1Rz0OWQ((WcXCVB` z2Jly!4On=0+p_#A57j~z=I);0s)6dq2>)Aklnywtj`niXU^IVF6bRZL4=I0d%jT}{ zvQz@+{Zm{tsQ%|OO!Frd@pa|B{$?)fhncGfOxN(6f7)>VR7cCWCN=w+U>bi+MnkTG z=gB!!HJHht>Z!CE1;>rUrfD#nKWRv~K7;$w**07c&%n(1enT|z;18gH(rm6n10tVZ z8OJ|oLjRKSU7}u<)O_^Y-{e2-A+qfK>zSWjsJCwwl1t#YeyFcJ43a+yi8&^b|L&eO z=;6P*ywLW}s1LOM@x8ogS^ngMB&KlvbF3!~di-Ary415WIxky~3hrNbf{cC25-IO= zPwO8&{M8<(bH0sG_pWLG`fvDWC!vmKgjzxCpT&tgx^qDMi`iAC`NJ}!Hv6CGPX~S- zQnVyMt(b%F_fG24z=J<&qO)O^pnaE_@qNr1c=2DbzgK%kQv>EH^x^5y@uwVw-Cv-I zb*>flN*P=aPBUrX<$tR$Sf3&JcnBQV4r*%P&3}ISEtK ListAppStatus + { + get => CurrCheck.ListAppStatus; + set + { + CurrCheck.ListAppStatus = value; + ReportStatusUpd(); + } + } + public int RefreshPeriod { get => CurrCheck.CurrPatrolCont.RefreshIntSec; @@ -49,6 +60,16 @@ namespace EgwControlCenter.Core } } + public List TargetList + { + get => CurrCheck.CurrPatrolCont.TargetList; + set + { + CurrCheck.CurrPatrolCont.TargetList = value; + ReportConfigUpd(); + } + } + public int VetoCheck { get => CurrCheck.CurrPatrolCont.VetoCheckMinutes; @@ -63,47 +84,28 @@ namespace EgwControlCenter.Core } } - public List TargetList - { - get => CurrCheck.CurrPatrolCont.TargetList; - set - { - CurrCheck.CurrPatrolCont.TargetList = value; - ReportConfigUpd(); - } - } - - public List ListAppStatus - { - get => CurrCheck.ListAppStatus; - set - { - CurrCheck.ListAppStatus = value; - ReportStatusUpd(); - } - } - - public void DoForceCheck() - { - //// forzo rilettura... - //CurrCheck = new ReleaseChecker(ConfDir, DataDir); - // effettua un refresh del controllo status... - bool locCheckOk = CurrCheck.UpdateLocalStatus(true); - if (locCheckOk) - { - bool remCheckOk = CurrCheck.CheckRemoteReleases(); - } - ReportStatusUpd(); - } - #endregion Public Properties #region Public Methods /// - /// Effettua rilettura configurazione e setup controlli... + /// Effettua un controllo completo (loacele remoto) /// - /// + /// se true esegue anche prima della scadenza veto + public void DoFullCheck(bool doForce) + { + // effettua un refresh del controllo status... + bool locCheckOk = CurrCheck.UpdateLocalStatus(doForce); + if (locCheckOk) + { + bool remCheckOk = CurrCheck.CheckRemoteReleases(); + ReportStatusUpd(); + } + } + + /// + /// Effettua rilettura configurazione e setup controlli... + /// /// Effettua salvataggio configurazione /// - /// public void DoSaveConfig() { try @@ -168,11 +169,19 @@ namespace EgwControlCenter.Core EA_ConfigUpdated?.Invoke(); } } + private void ReportStatusUpd() { - if (EA_StatusUpdated!= null) + if (EA_StatusUpdated != null) { - EA_StatusUpdated?.Invoke(); + // controllo se almeno 1 app abbia update... + foreach (var item in ListAppStatus) + { + if (item.HasUpdate) + { + EA_StatusUpdated?.Invoke(); + } + } } } diff --git a/EgwControlCenter.Core/IAppControlService.cs b/EgwControlCenter.Core/IAppControlService.cs index f06d5b1..48942df 100644 --- a/EgwControlCenter.Core/IAppControlService.cs +++ b/EgwControlCenter.Core/IAppControlService.cs @@ -8,10 +8,38 @@ namespace EgwControlCenter.Core { public interface IAppControlService { + #region Public Events + + /// + /// Evento update configurazione + /// event Action EA_ConfigUpdated; + + /// + /// Evento udpate status app + /// event Action EA_StatusUpdated; - void DoForceCheck(); + + #endregion Public Events + + #region Public Methods + + /// + /// Effettua un controllo completo (loacele remoto) + /// + /// se true esegue anche prima della scadenza veto + void DoFullCheck(bool doForce); + + /// + /// Effettua rilettura configurazione e setup controlli... + /// void DoReloadConfig(); + + /// + /// Effettua salvataggio configurazione + /// void DoSaveConfig(); + + #endregion Public Methods } -} +} \ No newline at end of file