From e3421fb65719de3dfaf2a136e4842eecb8fd777e Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Sat, 21 Sep 2024 10:26:46 +0200 Subject: [PATCH] Ok componente editing config! --- EgwControlCenter.App/BlazorForm.Designer.cs | 5 +- EgwControlCenter.App/BlazorForm.cs | 26 ++- .../Components/Compo/CmpFooter.razor.cs | 58 ++++--- .../Components/Compo/TargetSetup.razor | 103 ++++++++++++ .../Components/Pages/Index.razor | 58 +++---- .../Components/Pages/Index.razor.cs | 68 ++++++++ EgwControlCenter.App/ConfPatrol.json | 24 +++ .../EgwControlCenter.App.csproj | 5 + EgwControlCenter.App/MainBlazor.razor | 20 +-- EgwControlCenter.App/MainBlazor.razor.cs | 5 - EgwControlCenter.Core/AppControlService.cs | 153 ++++++++++++++++++ EgwControlCenter.Core/Const.cs | 13 ++ EgwControlCenter.Core/ReleaseChecker.cs | 105 +++++++----- EgwControlCenter.sln | 2 +- EgwControlCenter/EgwControlCenter.csproj | 6 + 15 files changed, 528 insertions(+), 123 deletions(-) create mode 100644 EgwControlCenter.App/Components/Compo/TargetSetup.razor create mode 100644 EgwControlCenter.App/Components/Pages/Index.razor.cs create mode 100644 EgwControlCenter.App/ConfPatrol.json create mode 100644 EgwControlCenter.Core/AppControlService.cs create mode 100644 EgwControlCenter.Core/Const.cs diff --git a/EgwControlCenter.App/BlazorForm.Designer.cs b/EgwControlCenter.App/BlazorForm.Designer.cs index 6f5d158..8dbf3fd 100644 --- a/EgwControlCenter.App/BlazorForm.Designer.cs +++ b/EgwControlCenter.App/BlazorForm.Designer.cs @@ -42,15 +42,16 @@ blazorWebView1.TabIndex = 0; blazorWebView1.Text = "blazorWebView1"; // - // Form1 + // BlazorForm // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); Controls.Add(blazorWebView1); Icon = (Icon)resources.GetObject("$this.Icon"); - Name = "Form1"; + Name = "BlazorForm"; Text = "EgalWare's AppControlCenter"; + Load += BlazorForm_Load; ResumeLayout(false); } diff --git a/EgwControlCenter.App/BlazorForm.cs b/EgwControlCenter.App/BlazorForm.cs index f01ecbc..062dc56 100644 --- a/EgwControlCenter.App/BlazorForm.cs +++ b/EgwControlCenter.App/BlazorForm.cs @@ -1,4 +1,5 @@ using EgwControlCenter.App.Components.Pages; +using EgwControlCenter.Core; using Microsoft.AspNetCore.Components.WebView.WindowsForms; using Microsoft.Extensions.DependencyInjection; @@ -6,21 +7,40 @@ namespace EgwControlCenter.App { public partial class BlazorForm : Form { + #region Public Constructors + public BlazorForm() { InitializeComponent(); InitBlazorView(); } + #endregion Public Constructors + + #region Private Methods + + private void BlazorForm_Load(object sender, EventArgs e) + { + SetPosition(); + } + private void InitBlazorView() { var services = new ServiceCollection(); services.AddWindowsFormsBlazorWebView(); - //services.AddSingleton(); + services.AddSingleton(); blazorWebView1.HostPage = "wwwroot\\index.html"; blazorWebView1.Services = services.BuildServiceProvider(); blazorWebView1.RootComponents.Add("#app"); - //blazorWebView1.RootComponents.Add("#app"); } + + private void SetPosition() + { + // posiziono in basso a sx... + Rectangle workArea = Screen.GetWorkingArea(this); + this.Location = new Point(workArea.Right - Size.Width, workArea.Bottom - Size.Height); + } + + #endregion Private Methods } -} +} \ No newline at end of file diff --git a/EgwControlCenter.App/Components/Compo/CmpFooter.razor.cs b/EgwControlCenter.App/Components/Compo/CmpFooter.razor.cs index 7a42da7..37df427 100644 --- a/EgwControlCenter.App/Components/Compo/CmpFooter.razor.cs +++ b/EgwControlCenter.App/Components/Compo/CmpFooter.razor.cs @@ -1,3 +1,4 @@ +using EgwControlCenter.Core; using Microsoft.AspNetCore.Components; namespace EgwControlCenter.App.Components.Compo @@ -14,6 +15,7 @@ namespace EgwControlCenter.App.Components.Compo aTimer.Stop(); aTimer.Dispose(); } + ACService.EA_ConfigUpdated -= ACService_EA_ConfigUpdated; } #endregion Public Methods @@ -24,23 +26,12 @@ namespace EgwControlCenter.App.Components.Compo #endregion Protected Fields + + [Inject] + protected AppControlService ACService { get; set; } = null!; + #region Protected Methods - private System.Reflection.AssemblyName? CurrAssembly { get; set; } = System.Reflection.Assembly.GetExecutingAssembly().GetName(); - - private Version AppVers - { - get - { - Version answ = new Version(0, 0, 0, 0); - if (CurrAssembly != null && CurrAssembly.Version != null) - { - answ = CurrAssembly.Version; - } - return answ; - } - } - protected void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e) { adesso = DateTime.Now; @@ -54,9 +45,20 @@ namespace EgwControlCenter.App.Components.Compo protected override void OnInitialized() { - //var rawVers = typeof(Program).Assembly.GetName().Version; - //version = rawVers != null ? rawVers : new Version("0.0.0.0"); StartTimer(); + ACService.EA_ConfigUpdated += ACService_EA_ConfigUpdated; + } + + private void ACService_EA_ConfigUpdated() + { + //fermo il timer e lo riavvio... + StartTimer(); + } + + protected int RefreshPeriod + { + get => ACService.RefreshPeriod; + set => ACService.RefreshPeriod = value; } protected void StartTimer() @@ -67,7 +69,8 @@ namespace EgwControlCenter.App.Components.Compo aTimer.Dispose(); } //int tOutPeriod = 300000; - int tOutPeriod = 1000; + //int tOutPeriod = 1000; + int tOutPeriod = RefreshPeriod < 1000 ? RefreshPeriod * 1000 : RefreshPeriod; aTimer = new System.Timers.Timer(tOutPeriod); aTimer.Elapsed += ElapsedTimer; aTimer.Enabled = true; @@ -81,5 +84,24 @@ namespace EgwControlCenter.App.Components.Compo private System.Timers.Timer aTimer = null!; #endregion Private Fields + + #region Private Properties + + private Version AppVers + { + get + { + Version answ = new Version(0, 0, 0, 0); + if (CurrAssembly != null && CurrAssembly.Version != null) + { + answ = CurrAssembly.Version; + } + return answ; + } + } + + private System.Reflection.AssemblyName? CurrAssembly { get; set; } = System.Reflection.Assembly.GetExecutingAssembly().GetName(); + + #endregion Private Properties } } \ No newline at end of file diff --git a/EgwControlCenter.App/Components/Compo/TargetSetup.razor b/EgwControlCenter.App/Components/Compo/TargetSetup.razor new file mode 100644 index 0000000..2d3da3a --- /dev/null +++ b/EgwControlCenter.App/Components/Compo/TargetSetup.razor @@ -0,0 +1,103 @@ +@using EgwControlCenter.Core +@using EgwControlCenter.Core.Models +@inject AppControlService ACService + +@if (PwdOk) +{ +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ + + + + + + + + + + @foreach (var item in ListRecords) + { + + + + + + + } + +
+ + TipoPathEnabled
@item.Idx@item.ApplicationType + + +
+ +
+
+
+
+} +else +{ +
+ Verify Auth Password + +
+} + +@code { + protected int RefreshPeriod + { + get => ACService.RefreshPeriod; + set => ACService.RefreshPeriod = value; + } + + protected void DoCancel() + { + ACService.DoReloadConfig(); + } + + protected void DoSave() + { + ACService.DoSaveConfig(); + } + + + private string SetupPwd { get; set; } = ""; + private int VetoCheck + { + get => ACService.VetoCheck; + set => ACService.VetoCheck = value; + } + + private bool PwdOk + { + get => !string.IsNullOrEmpty(SetupPwd) && SetupPwd == EgwControlCenter.Core.Const.EditPwd; + } + + private List ListRecords + { + get => ACService.TargetList; + set => ACService.TargetList = value; + } + +} diff --git a/EgwControlCenter.App/Components/Pages/Index.razor b/EgwControlCenter.App/Components/Pages/Index.razor index 7e88dab..6a42c90 100644 --- a/EgwControlCenter.App/Components/Pages/Index.razor +++ b/EgwControlCenter.App/Components/Pages/Index.razor @@ -3,7 +3,6 @@ @page "/Index" @page "/Nav01" -@inject NavigationManager NavMan
@@ -12,25 +11,32 @@

App Control Center

- +
-

Current count: @currentCount

- -
-
-
- + @if (ReqSetup) + { + + } + else + { +

Current count: @currentCount

+ +
+
+
+ +
+
+ +
+
+ +
-
- -
-
- -
-
+ }
-@code { - private int currentCount = 0; - - private System.Reflection.AssemblyName? CurrAssembly { get; set; } = System.Reflection.Assembly.GetExecutingAssembly().GetName(); - private void IncrementCount() - { - currentCount++; - } - - private void GoTo01() - { - NavMan.NavigateTo("Nav01"); - } - private void GoTo02() - { - NavMan.NavigateTo("Nav02"); - } - private void GoTo03() - { - NavMan.NavigateTo("Nav03"); - } -} \ No newline at end of file diff --git a/EgwControlCenter.App/Components/Pages/Index.razor.cs b/EgwControlCenter.App/Components/Pages/Index.razor.cs new file mode 100644 index 0000000..323e23e --- /dev/null +++ b/EgwControlCenter.App/Components/Pages/Index.razor.cs @@ -0,0 +1,68 @@ +using EgwControlCenter.Core; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace EgwControlCenter.App.Components.Pages +{ + public partial class Index + { + #region Protected Properties + + [Inject] + protected NavigationManager NavMan { get; set; } = null!; + + #endregion Protected Properties + + #region Private Fields + + private int currentCount = 0; + + #endregion Private Fields + + #region Private Properties + + private System.Reflection.AssemblyName? CurrAssembly { get; set; } = System.Reflection.Assembly.GetExecutingAssembly().GetName(); + + #endregion Private Properties + + #region Private Methods + + private void GoTo01() + { + NavMan.NavigateTo("Nav01"); + } + + private void GoTo02() + { + NavMan.NavigateTo("Nav02"); + } + + private void GoTo03() + { + NavMan.NavigateTo("Nav03"); + } + + private void IncrementCount() + { + currentCount++; + } + + [Inject] + protected IJSRuntime JSRuntime { get; set; } = null!; + + private bool ReqSetup { get; set; } = false; + + + private string SetupBtnClass + { + get => ReqSetup ? "btn-info" : "btn-primary"; + } + + protected void ToggleSetup() + { + ReqSetup = !ReqSetup; + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/EgwControlCenter.App/ConfPatrol.json b/EgwControlCenter.App/ConfPatrol.json new file mode 100644 index 0000000..1d520a9 --- /dev/null +++ b/EgwControlCenter.App/ConfPatrol.json @@ -0,0 +1,24 @@ +{ + "RefreshIntSec": 60, + "VetoCheckMinutes": 600, + "TargetList": [ + { + "Idx": 1, + "ApplicationType": "Machine", + "BasePath": "C:\\EgtData\\Machines", + "IsEnabled": true + }, + { + "Idx": 2, + "ApplicationType": "Machine", + "BasePath": "C:\\TechnoEssetre7\\EgalTech\\EgtCAM5\\Machines", + "IsEnabled": true + }, + { + "Idx": 3, + "ApplicationType": "Machine", + "BasePath": "C:\\Testing\\Machine", + "IsEnabled": true + } + ] +} diff --git a/EgwControlCenter.App/EgwControlCenter.App.csproj b/EgwControlCenter.App/EgwControlCenter.App.csproj index 6f60d57..efffa66 100644 --- a/EgwControlCenter.App/EgwControlCenter.App.csproj +++ b/EgwControlCenter.App/EgwControlCenter.App.csproj @@ -22,4 +22,9 @@ + + + PreserveNewest + + \ No newline at end of file diff --git a/EgwControlCenter.App/MainBlazor.razor b/EgwControlCenter.App/MainBlazor.razor index 782c754..b941644 100644 --- a/EgwControlCenter.App/MainBlazor.razor +++ b/EgwControlCenter.App/MainBlazor.razor @@ -1,22 +1,4 @@ -@* -
-
-

Counter

-
-
-

Current count: @currentCount

- - -
- -
*@ - - + diff --git a/EgwControlCenter.App/MainBlazor.razor.cs b/EgwControlCenter.App/MainBlazor.razor.cs index f6b5a10..ef62c7b 100644 --- a/EgwControlCenter.App/MainBlazor.razor.cs +++ b/EgwControlCenter.App/MainBlazor.razor.cs @@ -1,8 +1,3 @@ -using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; -using NLog; -using System.Diagnostics; - namespace EgwControlCenter.App { public partial class MainBlazor diff --git a/EgwControlCenter.Core/AppControlService.cs b/EgwControlCenter.Core/AppControlService.cs new file mode 100644 index 0000000..0ca7f40 --- /dev/null +++ b/EgwControlCenter.Core/AppControlService.cs @@ -0,0 +1,153 @@ +using EgwControlCenter.Core.Models; +using Newtonsoft.Json; +using NLog; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace EgwControlCenter.Core +{ + public class AppControlService + { + #region Public Constructors + + public AppControlService() + { + Assembly assembly = Assembly.GetExecutingAssembly(); + string startDir = Path.GetDirectoryName(assembly.Location)!; + ConfDir = startDir; + DataDir = Environment.GetEnvironmentVariable("ClickOnce_DataDirectory") ?? startDir; + CurrCheck = new ReleaseChecker(ConfDir, DataDir); + Log.Trace($"Folder Setup | {ConfDir} | {DataDir}"); + } + + #endregion Public Constructors + + #region Public Events + + public event Action EA_ConfigUpdated = null!; + + #endregion Public Events + + #region Public Properties + + public int RefreshPeriod + { + get => CurrCheck.CurrPatrolCont.RefreshIntSec; + set + { + if (CurrCheck.CurrPatrolCont.RefreshIntSec != value) + { + // verifico ammissibilità + CurrCheck.CurrPatrolCont.RefreshIntSec = value < 1 ? 1 : value > 3600 ? 3600 : value; + ReportConfigUpd(); + } + } + } + + public int VetoCheck + { + get => CurrCheck.CurrPatrolCont.VetoCheckMinutes; + set + { + if (CurrCheck.CurrPatrolCont.VetoCheckMinutes != value) + { + // verifico ammissibilità + CurrCheck.CurrPatrolCont.VetoCheckMinutes = value < 1 ? 1 : value > 14400 ? 14400 : value; + ReportConfigUpd(); + } + } + } + + public List TargetList + { + get => CurrCheck.CurrPatrolCont.TargetList; + set + { + if (CurrCheck.CurrPatrolCont.TargetList != value) + { + CurrCheck.CurrPatrolCont.TargetList = value; + ReportConfigUpd(); + } + } + } + + #endregion Public Properties + + #region Public Methods + + /// + /// Effettua rilettura configurazione e setup controlli... + /// + /// + public void DoReloadConfig() + { + try + { + CurrCheck = new ReleaseChecker(ConfDir, DataDir); + Log.Trace($"Riletta config Setup | {ConfDir} | {DataDir}"); + } + catch (Exception exc) + { + Log.Equals($"Eccezione in DoReloadConfig{Environment.NewLine}{exc}"); + } + ReportConfigUpd(); + } + + /// + /// Effettua salvataggio configurazione + /// + /// + public void DoSaveConfig() + { + try + { + var rawData = JsonConvert.SerializeObject(CurrCheck.CurrPatrolCont, Formatting.Indented); + if (rawData != null && rawData.Length > 2) + { + File.WriteAllText(CurrCheck.ConfPath, rawData); + Log.Trace($"Effettuato salvataggio Config Setup! | {ConfDir} | {DataDir}"); + } + } + catch (Exception exc) + { + Log.Equals($"Eccezione in DoSaveConfig{Environment.NewLine}{exc}"); + } + ReportConfigUpd(); + } + + #endregion Public Methods + + #region Private Fields + + /// + /// Classe logger + /// + private static Logger Log = LogManager.GetCurrentClassLogger(); + + #endregion Private Fields + + #region Private Properties + + private string ConfDir { get; set; } = ""; + private ReleaseChecker CurrCheck { get; set; } = null!; + private string DataDir { get; set; } = ""; + + #endregion Private Properties + + #region Private Methods + + private void ReportConfigUpd() + { + if (EA_ConfigUpdated != null) + { + EA_ConfigUpdated?.Invoke(); + } + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/EgwControlCenter.Core/Const.cs b/EgwControlCenter.Core/Const.cs new file mode 100644 index 0000000..7148b9f --- /dev/null +++ b/EgwControlCenter.Core/Const.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EgwControlCenter.Core +{ + public class Const + { + public static string EditPwd = "24068Seriate"; + } +} diff --git a/EgwControlCenter.Core/ReleaseChecker.cs b/EgwControlCenter.Core/ReleaseChecker.cs index da76a31..e1b54e3 100644 --- a/EgwControlCenter.Core/ReleaseChecker.cs +++ b/EgwControlCenter.Core/ReleaseChecker.cs @@ -16,41 +16,39 @@ namespace EgwControlCenter.Core { #region Public Constructors + /// + /// Init classe ReleaseChecker + /// + /// + /// + /// public ReleaseChecker(string appDir, string dataDir, string confName) { - AppDir = appDir; - DataDir = dataDir; - ConfName = confName; - // imposto veto controlli secondo config verifico path... - if (string.IsNullOrEmpty(AppDir)) - { - AppDir = AppDomain.CurrentDomain.BaseDirectory; - } - if (File.Exists(ConfPath)) - { - var rawData = File.ReadAllText(ConfPath); - if (!string.IsNullOrEmpty(rawData)) - { - CurrPatrolCont = JsonConvert.DeserializeObject(rawData) ?? new PatrolSettings(); - // imposto il veto dalla conf... - AutoRefreshVeto = TimeSpan.FromMinutes(CurrPatrolCont.VetoCheckMinutes); - } - } - // cerco se presente file status precedente e lo ricarico... - if (File.Exists(StatusPath)) - { - var rawData = File.ReadAllText(StatusPath); - if (!string.IsNullOrEmpty(rawData)) - { - ListStatus = JsonConvert.DeserializeObject>(rawData) ?? new List(); - } - } + InitObj(appDir, dataDir, confName); + } + + /// + /// Init classe ReleaseChecker + /// + /// + /// + public ReleaseChecker(string appDir, string dataDir) + { + InitObj(appDir, dataDir, CPName); } #endregion Public Constructors #region Public Properties + /// + /// Path file di conf check + /// + public string ConfPath + { + get => Path.Combine(AppDir, ConfName); + } + /// /// Configurazione degli oggetti da monitorare /// @@ -260,25 +258,19 @@ namespace EgwControlCenter.Core private TimeSpan AutoRefreshVeto { get; set; } = TimeSpan.FromSeconds(30); private string ConfName { get; set; } = ""; - - /// - /// Path file di conf check - /// - private string ConfPath - { - get => Path.Combine(AppDir, ConfName); - } + private string CPName { get; set; } = "ConfPatrol.json"; private string DataDir { get; set; } = ""; - private string StatusName { get; set; } = "LastStatus.json"; + + private string LSName { get; set; } = "LastStatus.json"; /// /// Path file salvataggio status /// private string StatusPath { - get => Path.Combine(DataDir, StatusName); - //get => Path.Combine(ApplicationDeployment.CurrentDeployment.DataDirectory, StatusName); + get => Path.Combine(DataDir, LSName); + //get => Path.Combine(ApplicationDeployment.CurrentDeployment.DataDirectory, LSName); } #endregion Private Properties @@ -339,6 +331,43 @@ namespace EgwControlCenter.Core return answ; } + /// + /// init privato oggetti + /// + /// + /// + /// + private void InitObj(string appDir, string dataDir, string confName) + { + AppDir = appDir; + DataDir = dataDir; + ConfName = confName; + // imposto veto controlli secondo config verifico path... + if (string.IsNullOrEmpty(AppDir)) + { + AppDir = AppDomain.CurrentDomain.BaseDirectory; + } + if (File.Exists(ConfPath)) + { + var rawData = File.ReadAllText(ConfPath); + if (!string.IsNullOrEmpty(rawData)) + { + CurrPatrolCont = JsonConvert.DeserializeObject(rawData) ?? new PatrolSettings(); + // imposto il veto dalla conf... + AutoRefreshVeto = TimeSpan.FromMinutes(CurrPatrolCont.VetoCheckMinutes); + } + } + // cerco se presente file status precedente e lo ricarico... + if (File.Exists(StatusPath)) + { + var rawData = File.ReadAllText(StatusPath); + if (!string.IsNullOrEmpty(rawData)) + { + ListStatus = JsonConvert.DeserializeObject>(rawData) ?? new List(); + } + } + } + /// /// Recupera oggetto releaseDTO da file indicato /// diff --git a/EgwControlCenter.sln b/EgwControlCenter.sln index 568731b..4fcc9a2 100644 --- a/EgwControlCenter.sln +++ b/EgwControlCenter.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwControlCenter", "EgwCont EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwControlCenter.Core", "EgwControlCenter.Core\EgwControlCenter.Core.csproj", "{D30ACE10-49B2-4EA8-B16F-C2E8788EBA2A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwControlCenter.App", "EgwControlCenter.App\EgwControlCenter.App.csproj", "{1D86ABFB-F09B-4E71-9185-0E727D630816}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwControlCenter.App", "EgwControlCenter.App\EgwControlCenter.App.csproj", "{1D86ABFB-F09B-4E71-9185-0E727D630816}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/EgwControlCenter/EgwControlCenter.csproj b/EgwControlCenter/EgwControlCenter.csproj index 57adf28..eaa87a4 100644 --- a/EgwControlCenter/EgwControlCenter.csproj +++ b/EgwControlCenter/EgwControlCenter.csproj @@ -15,6 +15,7 @@ + @@ -24,6 +25,11 @@ + + + + +