From 9fad86eb1785eaf5b4d4dfcbfbb814a9c9acde56 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 21 Oct 2024 20:09:28 +0200 Subject: [PATCH 1/5] PROG - correzione tag extraction - correzione indentazione json --- MP.FileData/Controllers/FileController.cs | 38 +++++--- MP.FileData/DatabaseModels/FileModel.cs | 17 +++- MP.FileData/TagsUtils.cs | 15 ++-- MP.Prog/Components/ArchiveStatus.razor.cs | 105 +++++++++++----------- MP.Prog/Components/DiffView.razor | 4 +- MP.Prog/Components/FileEditor.razor.cs | 2 +- MP.Prog/Conf/Rule05.json | 3 +- MP.Prog/Data/FileArchDataService.cs | 25 ++++-- MP.Prog/MP.Prog.csproj | 2 +- MP.Prog/Pages/Archive.razor | 4 +- MP.Prog/Pages/Archive.razor.cs | 7 +- MP.Prog/Program.cs | 5 +- MP.Prog/Resources/ChangeLog.html | 2 +- MP.Prog/Resources/VersNum.txt | 2 +- MP.Prog/Resources/manifest.xml | 2 +- MP.Prog/appsettings.json | 2 +- 16 files changed, 137 insertions(+), 98 deletions(-) diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index 93038046..a244408d 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -138,13 +138,27 @@ namespace MP.FileData.Controllers { fileList = fileListRaw.ToList(); } - Log.Trace($"CheckFileArchived S01 | file trovati: {fileList.Count()}"); + Log.Debug($"CheckFileArchived S01 | file trovati: {fileList.Count()}"); List fileNew = new List(); List fileChecked = new List(); List fileMod = new List(); // recupera elenco file nel DB - var archivedFile = FileGetByPath(path, true); + List archivedFile = new List(); + List foundFile = FileGetByPath(path, true); + // rimuovo eventuali file con estensioni escluse... + foreach (var fRec in foundFile) + { + if (!string.IsNullOrEmpty(fRec.Extension) && currRule.ExcludedFileExt.Contains(fRec.Extension)) + { + Log.Trace($"CheckFileArchived S01.B: escluso {fRec.Name} | estensione {fRec.Extension}"); + } + else + { + archivedFile.Add(fRec); + } + } + Log.Debug($"CheckFileArchived S01.C | Recuperati {archivedFile.Count()} da DB per confronto"); using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) { // verifica i file @@ -159,9 +173,9 @@ namespace MP.FileData.Controllers { // cerca nel DB... FileModel currRecord = archivedFile - .Where(x => x.Active && x.Path == file.FullName) - .OrderByDescending(y => y.Rev) - .FirstOrDefault(); + .Where(x => x.Active && x.Path == file.FullName) + .OrderByDescending(y => y.Rev) + .FirstOrDefault(); // se NON trova lo crea if (currRecord == null) { @@ -389,7 +403,7 @@ namespace MP.FileData.Controllers using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { // converto - List newRec = newFiles.Select(o => new DatabaseModels.FileModel() + List newRec = newFiles.Select(o => new FileModel() { Active = true, DiskStatus = FileState.Ok, @@ -427,15 +441,15 @@ namespace MP.FileData.Controllers // cerco codice tag da configurazione if (currRule.Mode == SearchMode.StringOnFile) { - Tags = TagsUtils.searchProgComment(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchProgComment(fileName, item.FileStringContent, currRule); } else if (currRule.Mode == SearchMode.TagListed) { - Tags = TagsUtils.searchTagListed(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchTagListed(fileName, item.FileStringContent, currRule); } else { - Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); + Tags = TagsUtils.SearchPathName(item.Path, basePath, currRule); } foreach (var tag in Tags) @@ -594,15 +608,15 @@ namespace MP.FileData.Controllers // cerco codice tag da configurazione if (currRule.Mode == SearchMode.StringOnFile) { - Tags = TagsUtils.searchProgComment(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchProgComment(fileName, item.FileStringContent, currRule); } else if (currRule.Mode == SearchMode.TagListed) { - Tags = TagsUtils.searchTagListed(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchTagListed(fileName, item.FileStringContent, currRule); } else { - Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); + Tags = TagsUtils.SearchPathName(item.Path, basePath, currRule); } foreach (var tag in Tags) diff --git a/MP.FileData/DatabaseModels/FileModel.cs b/MP.FileData/DatabaseModels/FileModel.cs index 206eaf3b..120fb8ee 100644 --- a/MP.FileData/DatabaseModels/FileModel.cs +++ b/MP.FileData/DatabaseModels/FileModel.cs @@ -48,7 +48,22 @@ namespace MP.FileData.DatabaseModels set { // serializzo a byte - FileContent = Encoding.ASCII.GetBytes(value); + //FileContent = Encoding.ASCII.GetBytes(value); + FileContent = Encoding.UTF8.GetBytes(value); + } + } + [NotMapped] + public string Extension + { + get + { + string answ = ""; + if(!string.IsNullOrEmpty(Name)) + { + int sPos = Name.LastIndexOf('.'); + answ = Name.Substring(sPos); + } + return answ; } } diff --git a/MP.FileData/TagsUtils.cs b/MP.FileData/TagsUtils.cs index eae78062..5fa5e69d 100644 --- a/MP.FileData/TagsUtils.cs +++ b/MP.FileData/TagsUtils.cs @@ -36,7 +36,7 @@ namespace MP.FileData /// Nome del file (path completo) /// Parametri analisi /// - public static List searchPathName(string filePath, string basePath, SearchRules currRule) + public static List SearchPathName(string filePath, string basePath, SearchRules currRule) { List answ = new List(); string fileName = Path.GetFileName(filePath); @@ -74,7 +74,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchPathName Attenzione Tag non trovati | {filePath} | basePath: {basePath}"); + Log.Warn($"SearchPathName Attenzione Tag non trovati | {filePath} | basePath: {basePath}"); } return answ; } @@ -89,7 +89,7 @@ namespace MP.FileData /// Contenuto del file da analizzare /// Parametri analisi /// - public static List searchProgComment(string fileName, string fileContent, SearchRules currRule) + public static List SearchProgComment(string fileName, string fileContent, SearchRules currRule) { // verifico se trimmare contenuto file if (fileContent.Length > currRule.MaxChar2Search && currRule.MaxChar2Search > 0) @@ -148,7 +148,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchProgComment Attenzione Tag non trovati | {fileName} | pattern: {pattern}"); + Log.Warn($"SearchProgComment Attenzione Tag non trovati | {fileName} | pattern: {pattern}"); //Log.Trace($"{fileName}:{Environment.NewLine}{fileContent}"); } return answ; @@ -164,7 +164,7 @@ namespace MP.FileData /// Contenuto del file da analizzare /// Parametri analisi /// - public static List searchTagListed(string fileName, string fileContent, SearchRules currRule) + public static List SearchTagListed(string fileName, string fileContent, SearchRules currRule) { // verifico se trimmare contenuto file if (fileContent.Length > currRule.MaxChar2Search && currRule.MaxChar2Search > 0) @@ -183,7 +183,7 @@ namespace MP.FileData { foreach (var row in fileRows) { - if (row.StartsWith(tag2check)) + if (row.StartsWith(tag2check) || row.Contains(tag2check)) { answ.Add(row.Trim()); break; @@ -195,8 +195,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchTagListed Attenzione Tag non trovati | {fileName} | tags cercati: {currRule.Tag2Collect.Count}"); - //Log.Trace($"{Environment.NewLine}{fileContent}"); + Log.Warn($"SearchTagListed Attenzione Tag non trovati | {fileName} | tags cercati: {currRule.Tag2Collect.Count}"); } return answ; } diff --git a/MP.Prog/Components/ArchiveStatus.razor.cs b/MP.Prog/Components/ArchiveStatus.razor.cs index 301b9255..6a82f597 100644 --- a/MP.Prog/Components/ArchiveStatus.razor.cs +++ b/MP.Prog/Components/ArchiveStatus.razor.cs @@ -27,10 +27,10 @@ namespace MP.Prog.Components #region Protected Properties [Inject] - protected FileArchDataService FDService { get; set; } + protected IConfiguration Configuration { get; set; } [Inject] - protected IConfiguration Configuration { get; set; } + protected FileArchDataService FDService { get; set; } protected int percLoading { get; set; } = 0; protected bool showProgress { get; set; } = false; @@ -39,42 +39,6 @@ namespace MP.Prog.Components #region Protected Methods - protected async Task ArchiveCheck(int maxHour) - { - showProgress = true; - percLoading = 0; - await verificaTutte(maxHour); - - setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); - } - - protected async Task ArchiveSingleCheck(string idxMacchina, int maxHour) - { - showProgress = true; - percLoading = 0; - await verificaSingola(idxMacchina, maxHour, 2); - - setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); - } - - protected async Task ClearMessage() - { - await Task.Delay(10); - setupMessages = new List(); - } - - protected async Task SelEdit(string idxMacc) - { - // recupero macchina e mando a edit! - SelRecord = await FDService.ArchMaccGetByKey(idxMacc); - } - - protected async void ResetSel() - { - SelRecord = null; - await ReloadData(); - } - protected void AddNew() { DateTime adesso = DateTime.Now; @@ -89,25 +53,51 @@ namespace MP.Prog.Components Note = "" }; } + + protected async Task ArchiveCheck(int maxHour) + { + showProgress = true; + percLoading = 0; + await VerificaTutte(maxHour); + + setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); + } + + protected async Task ArchiveSingleCheck(string idxMacchina, int maxHour) + { + showProgress = true; + percLoading = 0; + await VerificaSingola(idxMacchina, maxHour, 2); + + setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); + } + + protected void ClearMessage() + { + setupMessages = new List(); + } + protected async Task ForceCheck(int maxHour) { + ListRecords = null; + await InvokeAsync(StateHasChanged); setupMessages.Add("Inizio Analisi Archivio..."); await InvokeAsync(StateHasChanged); - ListRecords = null; - await Task.Delay(1); await ArchiveCheck(maxHour); - await ClearMessage(); + await Task.Delay(400); + ClearMessage(); await ReloadData(); } protected async Task ForceCheckMacchina(string idxMacchina) { + ListRecords = null; + await InvokeAsync(StateHasChanged); setupMessages.Add($"Inizio Analisi Archivio | Archivio {idxMacchina}"); await InvokeAsync(StateHasChanged); - ListRecords = null; - await Task.Delay(1); await ArchiveSingleCheck(idxMacchina, 0); - await ClearMessage(); + await Task.Delay(400); + ClearMessage(); await ReloadData(); } @@ -131,16 +121,25 @@ namespace MP.Prog.Components await InvokeAsync(StateHasChanged); } + protected async void ResetSel() + { + SelRecord = null; + await ReloadData(); + } + + protected async Task SelEdit(string idxMacc) + { + // recupero macchina e mando a edit! + SelRecord = await FDService.ArchMaccGetByKey(idxMacc); + } + #endregion Protected Methods #region Private Fields private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private List ListRecords; - private ArchMaccModel? SelRecord { get; set; } = null; - private int numChecks = 0; - private Stopwatch sw = new Stopwatch(); private int totalCount = 0; @@ -148,35 +147,35 @@ namespace MP.Prog.Components #region Private Properties + private ArchMaccModel? SelRecord { get; set; } = null; private List setupMessages { get; set; } = new List(); #endregion Private Properties #region Private Methods - private async Task verificaSingola(string idxMacchina, int numDays, int numMacchine) + private async Task VerificaSingola(string idxMacchina, int numDays, int numMacchine) { sw.Restart(); // recupero elenco macchine percLoading += 100 / numMacchine; - numChecks = await FDService.updateMachineArchive(idxMacchina, numDays, true, false); + numChecks = await FDService.UpdateMachineArchive(idxMacchina, numDays, true, false); await Task.Delay(1); setupMessages.Add($"{idxMacchina}: {numChecks} files"); await InvokeAsync(StateHasChanged); await Task.Delay(1); sw.Stop(); - var elapsTime = sw.Elapsed; - Log.Trace($"verificaSingola | idxMacchina: {idxMacchina} | {elapsTime.TotalMilliseconds}ms"); + Log.Info($"VerificaSingola | idxMacchina: {idxMacchina} | {sw.ElapsedMilliseconds:N0}ms"); } - private async Task verificaTutte(int numDays) + private async Task VerificaTutte(int numDays) { // recupero elenco macchine var listaMacchine = await FDService.ArchMaccGetAll(); int numMacchine = listaMacchine.Count(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - await verificaSingola(item.IdxMacchina, numDays, numMacchine); + await VerificaSingola(item.IdxMacchina, numDays, numMacchine); } } diff --git a/MP.Prog/Components/DiffView.razor b/MP.Prog/Components/DiffView.razor index 3120bfdd..600ec22d 100644 --- a/MP.Prog/Components/DiffView.razor +++ b/MP.Prog/Components/DiffView.razor @@ -75,7 +75,7 @@ { get { - return _oldText.Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + return _oldText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); } } @@ -83,7 +83,7 @@ { get { - return _newText.Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + return _newText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); } } [Parameter] diff --git a/MP.Prog/Components/FileEditor.razor.cs b/MP.Prog/Components/FileEditor.razor.cs index bb5420a8..5abe2ba4 100644 --- a/MP.Prog/Components/FileEditor.razor.cs +++ b/MP.Prog/Components/FileEditor.razor.cs @@ -116,7 +116,7 @@ namespace MP.Prog.Components await DataReset.InvokeAsync(0); await DataService.FileExport(_currItem); await DataReset.InvokeAsync(0); - await DataService.updateMachineArchive(_currItem.IdxMacchina, 1, false, false); + await DataService.UpdateMachineArchive(_currItem.IdxMacchina, 1, false, false); await DataUpdated.InvokeAsync(1); } else diff --git a/MP.Prog/Conf/Rule05.json b/MP.Prog/Conf/Rule05.json index 11c042fe..8607aced 100644 --- a/MP.Prog/Conf/Rule05.json +++ b/MP.Prog/Conf/Rule05.json @@ -2,7 +2,8 @@ "ExcludedTags": [ ], "ExcludedFileExt": [ ".bak", - ".bck" + ".bck", + ".file" ], "FileNameExtReplace": { }, diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs index cfd6740c..48e00d90 100644 --- a/MP.Prog/Data/FileArchDataService.cs +++ b/MP.Prog/Data/FileArchDataService.cs @@ -69,9 +69,17 @@ namespace MP.Prog.Data public async Task ArchivioMaccUpsert(ArchMaccModel currRec) { bool fatto = await dbController.ArchMaccUpsert(currRec); + await ResetArchiveCache(); + return fatto; + } + /// + /// Reset della cache dati ArchivioMacchine in redis + /// + /// + private async Task ResetArchiveCache() + { await ExecFlushRedisPattern($"{redisBaseAddr}:ArchMacc:*"); await ExecFlushRedisPattern($"{redisBaseAddr}:ArchStatus:*"); - return fatto; } public async Task> ArchMaccGetAll() @@ -263,13 +271,13 @@ namespace MP.Prog.Data /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite /// /// - public async Task updateAllArchive(int numDayPre, bool forceTag) + public async Task UpdateAllArchive(int numDayPre, bool forceTag) { int checkDone = 0; var listaMacchine = await ArchMaccGetAll(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - checkDone += await updateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); + checkDone += await UpdateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); } return await Task.FromResult(checkDone); @@ -285,7 +293,7 @@ namespace MP.Prog.Data /// Forza la riverifica dei tags (x update da setup) /// Scrittura log verboso macchina /// - public async Task updateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) + public async Task UpdateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) { int checkDone = 0; Stopwatch stopWatch = new Stopwatch(); @@ -293,7 +301,7 @@ namespace MP.Prog.Data string ruleName = "Rule00.json"; try { - var macchina = ArchMaccGetByKey(idxMacchina).Result; + ArchMaccModel macchina = await ArchMaccGetByKey(idxMacchina); if (macchina != null && !string.IsNullOrEmpty(macchina.BasePath)) { if (!string.IsNullOrEmpty(macchina.RuleName)) @@ -351,13 +359,16 @@ namespace MP.Prog.Data } catch (Exception exc) { - Log.Error($"Eccezione in updateMachineArchive{Environment.NewLine}{exc}{Environment.NewLine}{exc.InnerException}"); + Log.Error($"Eccezione in UpdateMachineArchive{Environment.NewLine}{exc}{Environment.NewLine}{exc.InnerException}"); } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Log.Info($"Effettuato update archivio file MACCHINA | last {numDayPre} days | {checkDone} checked | {ts.TotalMilliseconds} ms"); - return await Task.FromResult(checkDone); + // svuoto cache! + await ResetArchiveCache(); + // restituisco conteggio + return checkDone; } #endregion Public Methods diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj index 2c515213..de16f6e2 100644 --- a/MP.Prog/MP.Prog.csproj +++ b/MP.Prog/MP.Prog.csproj @@ -3,7 +3,7 @@ net6.0 MP.Prog - 6.16.2410.2116 + 6.16.2410.2120 diff --git a/MP.Prog/Pages/Archive.razor b/MP.Prog/Pages/Archive.razor index 0eb25b9e..e4b457ab 100644 --- a/MP.Prog/Pages/Archive.razor +++ b/MP.Prog/Pages/Archive.razor @@ -1,7 +1,5 @@ @page "/Archive" -@using MP.Prog.Components -
@@ -83,7 +81,7 @@
@if (DeleteDialogOpen) { - + }
diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index d5203f1b..22fae417 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -5,10 +5,9 @@ using MP.Prog.Data; using NLog; using System; using System.Collections.Generic; -using System.Linq; -using System.Threading; using System.Threading.Tasks; + namespace MP.Prog.Pages { public partial class Archive : ComponentBase, IDisposable @@ -371,7 +370,7 @@ namespace MP.Prog.Pages { SelTag = searchVal; currPage = 1; - await ReloadAllData(); + await ReloadData(); isLoading = false; } @@ -382,7 +381,7 @@ namespace MP.Prog.Pages // importante altrimenti NON mostra update UI await Task.Delay(1); //AppMService.File_Filter = SelectData.Init(5, 10); - var numCheck = await DataService.updateAllArchive(numDays, false); + var numCheck = await DataService.UpdateAllArchive(numDays, false); await ReloadAllData(); await Task.Delay(1); await RefreshDisplayLoading(); diff --git a/MP.Prog/Program.cs b/MP.Prog/Program.cs index e5b33f61..592ac919 100644 --- a/MP.Prog/Program.cs +++ b/MP.Prog/Program.cs @@ -23,10 +23,13 @@ namespace MP.Prog }) .ConfigureLogging(logging => { + // impostante per non perdere le regole di log logging.ClearProviders(); logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Error); }) - .UseNLog(); + // importante per eseguire la conf regike logging + .UseNLog(new NLogAspNetCoreOptions() { RemoveLoggerFactoryFilter = false }); + //.UseNLog(); public static void Main(string[] args) { diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html index dc5c645b..414f0fd9 100644 --- a/MP.Prog/Resources/ChangeLog.html +++ b/MP.Prog/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo gestione Programmi MAPO -

Versione: 6.16.2410.2116

+

Versione: 6.16.2410.2120


Note di rilascio:
    diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt index 7c94c9f8..2fd4f529 100644 --- a/MP.Prog/Resources/VersNum.txt +++ b/MP.Prog/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2410.2116 +6.16.2410.2120 diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml index b774c00c..94b2e066 100644 --- a/MP.Prog/Resources/manifest.xml +++ b/MP.Prog/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2410.2116 + 6.16.2410.2120 https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/MP.Prog.zip https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/ChangeLog.html false diff --git a/MP.Prog/appsettings.json b/MP.Prog/appsettings.json index 3f754328..397f561f 100644 --- a/MP.Prog/appsettings.json +++ b/MP.Prog/appsettings.json @@ -39,7 +39,7 @@ "rules": [ { "logger": "*", - "minLevel": "Info", + "minLevel": "Trace", "writeTo": "logconsole" }, { From 5cea4857ddae650c529c20f34a4b4084beff39fd Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 22 Oct 2024 10:06:56 +0200 Subject: [PATCH 2/5] PROG: - fix display size - fix display status - review modulo DiffView --- MP.FileData/MeasureUtils.cs | 53 +++++++++++ MP.Prog/Components/DiffView.razor | 110 +---------------------- MP.Prog/Components/DiffView.razor.cs | 128 +++++++++++++++++++++++++++ MP.Prog/Components/FileEditor.razor | 10 +-- MP.Prog/MP.Prog.csproj | 2 +- MP.Prog/Pages/Archive.razor | 2 +- MP.Prog/Pages/Archive.razor.cs | 29 ++++-- MP.Prog/Resources/ChangeLog.html | 2 +- MP.Prog/Resources/VersNum.txt | 2 +- MP.Prog/Resources/manifest.xml | 2 +- 10 files changed, 213 insertions(+), 127 deletions(-) create mode 100644 MP.FileData/MeasureUtils.cs create mode 100644 MP.Prog/Components/DiffView.razor.cs diff --git a/MP.FileData/MeasureUtils.cs b/MP.FileData/MeasureUtils.cs new file mode 100644 index 00000000..14a9384f --- /dev/null +++ b/MP.FileData/MeasureUtils.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MP.FileData +{ + public class MeasureUtils + { + #region Public Fields + + public static readonly string[] SizeSuffixes = { "b", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb" }; + + #endregion Public Fields + + #region Public Methods + + /// + /// Calcola dimensione file automaticamwente secondo dimensione + /// + /// + /// + /// + /// + public static string SizeSuffix(Int64 value, int decimalPlaces = 1) + { + if (decimalPlaces < 0) { throw new ArgumentOutOfRangeException("decimalPlaces"); } + if (value < 0) { return "-" + SizeSuffix(-value, decimalPlaces); } + if (value == 0) { return string.Format("{0:n" + decimalPlaces + "} bytes", 0); } + + // mag is 0 for bytes, 1 for KB, 2, for MB, etc. + int mag = (int)Math.Log(value, 1024); + + // 1L << (mag * 10) == 2 ^ (10 * mag) [i.e. the number of bytes in the unit + // corresponding to mag] + decimal adjustedSize = (decimal)value / (1L << (mag * 10)); + + // make adjustment when the value is large enough that it would round up to 1000 or more + if (Math.Round(adjustedSize, decimalPlaces) >= 1000) + { + mag += 1; + adjustedSize /= 1024; + } + + return string.Format("{0:n" + decimalPlaces + "} {1}", + adjustedSize, + SizeSuffixes[mag]); + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/MP.Prog/Components/DiffView.razor b/MP.Prog/Components/DiffView.razor index 600ec22d..af2aab1c 100644 --- a/MP.Prog/Components/DiffView.razor +++ b/MP.Prog/Components/DiffView.razor @@ -31,119 +31,13 @@
    -

    @((MarkupString)oldResult)

    +

    @((MarkupString)StrFix(oldResult))

    -

    @((MarkupString)newResult)

    +

    @((MarkupString)StrFix(newResult))

    -@code { - - string sepDest = "
    "; - - protected int pHeight = 25; - - protected string oldResult = ""; - protected string newResult = ""; - - protected string _oldText = ""; - protected string _newText = ""; - - [Parameter] - public EventCallback diffDone { get; set; } - - protected int numChanges { get; set; } = 0; - - [Parameter] - public string oldText - { - get - { - return _oldText; - } - set - { - _oldText = value; - } - } - - protected string oldTextFix - { - get - { - return _oldText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); - } - } - - protected string newTextFix - { - get - { - return _newText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); - } - } - [Parameter] - public string newText - { - get - { - return _newText; - } - set - { - _newText = value; - ReloadData(); - } - } - protected void ReloadData() - { - numChanges = 0; - // calcolo diff - diff_match_patch dmp = new diff_match_patch(); - List diff = dmp.diff_main(oldTextFix, newTextFix); - dmp.diff_cleanupSemantic(diff); - - // predispongo la stringa secondo l'elenco dei diff.... - StringBuilder sbNew = new StringBuilder(); - StringBuilder sbOld = new StringBuilder(); - foreach (var item in diff) - { - switch (item.operation) - { - case Operation.DELETE: - sbOld.Append($"{item.text}"); - numChanges++; - break; - case Operation.INSERT: - sbNew.Append($"{item.text}"); - numChanges++; - break; - case Operation.EQUAL: - sbNew.Append($"{item.text}"); - sbOld.Append($"{item.text}"); - break; - default: - break; - } - } - - newResult = sbNew.ToString().Trim(); - oldResult = sbOld.ToString().Trim(); - var pUpd = Task.Run(async () => - { - await diffDone.InvokeAsync(numChanges); - }); - pUpd.Wait(); - } - - protected override Task OnInitializedAsync() - { - ReloadData(); - return base.OnInitializedAsync(); - } - -} \ No newline at end of file diff --git a/MP.Prog/Components/DiffView.razor.cs b/MP.Prog/Components/DiffView.razor.cs new file mode 100644 index 00000000..7b9ce7b8 --- /dev/null +++ b/MP.Prog/Components/DiffView.razor.cs @@ -0,0 +1,128 @@ +using DiffMatchPatch; +using Microsoft.AspNetCore.Components; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace MP.Prog.Components +{ + public partial class DiffView + { + #region Public Properties + + [Parameter] + public EventCallback diffDone { get; set; } + + [Parameter] + public string newText + { + get => _newText; + set => _newText = value; + } + + [Parameter] + public string oldText + { + get => _oldText; + set => _oldText = value; + } + + #endregion Public Properties + + #region Protected Fields + + protected string _newText = ""; + + protected string _oldText = ""; + + protected string newResult = ""; + + protected string oldResult = ""; + + protected int pHeight = 25; + + #endregion Protected Fields + + #region Protected Properties + + protected int numChanges { get; set; } = 0; + + #endregion Protected Properties + + #region Protected Methods + + protected override Task OnInitializedAsync() + { + ReloadData(); + return base.OnInitializedAsync(); + } + + protected override void OnParametersSet() + { + ReloadData(); + } + + protected void ReloadData() + { + numChanges = 0; + // calcolo diff + diff_match_patch dmp = new diff_match_patch(); + List diff = dmp.diff_main(oldText, newText); + //List diff = dmp.diff_main(oldTextFix, newTextFix); + dmp.diff_cleanupSemantic(diff); + + // predispongo la stringa secondo l'elenco dei diff.... + StringBuilder sbNew = new StringBuilder(); + StringBuilder sbOld = new StringBuilder(); + foreach (var item in diff) + { + switch (item.operation) + { + case Operation.DELETE: + sbOld.Append($"{item.text}"); + numChanges++; + break; + + case Operation.INSERT: + sbNew.Append($"{item.text}"); + numChanges++; + break; + + case Operation.EQUAL: + sbNew.Append($"{item.text}"); + sbOld.Append($"{item.text}"); + break; + + default: + break; + } + } + + newResult = sbNew.ToString().Trim(); + oldResult = sbOld.ToString().Trim(); + var pUpd = Task.Run(async () => + { + await diffDone.InvokeAsync(numChanges); + }); + pUpd.Wait(); + } + + #endregion Protected Methods + + #region Private Fields + + private string sepDest = "
    "; + + #endregion Private Fields + + #region Private Methods + + private string StrFix(string origVal) + { + return origVal.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/MP.Prog/Components/FileEditor.razor b/MP.Prog/Components/FileEditor.razor index 03f788a7..be370606 100644 --- a/MP.Prog/Components/FileEditor.razor +++ b/MP.Prog/Components/FileEditor.razor @@ -11,10 +11,10 @@ {
    - +
    - +
    } @@ -23,7 +23,7 @@ {
    - +
    @@ -33,11 +33,11 @@
    - +
    - +
    \ No newline at end of file diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj index de16f6e2..1bde64d9 100644 --- a/MP.Prog/MP.Prog.csproj +++ b/MP.Prog/MP.Prog.csproj @@ -3,7 +3,7 @@ net6.0 MP.Prog - 6.16.2410.2120 + 6.16.2410.2210 diff --git a/MP.Prog/Pages/Archive.razor b/MP.Prog/Pages/Archive.razor index e4b457ab..a38313e0 100644 --- a/MP.Prog/Pages/Archive.razor +++ b/MP.Prog/Pages/Archive.razor @@ -150,7 +150,7 @@
    @record.Rev
    -
    @((((double)record.Size) / 1024).ToString("N2")) k
    + @CalcSize(record.Size) diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index 22fae417..affad72a 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; +using MP.FileData; using MP.FileData.DatabaseModels; using MP.Prog.Data; using NLog; @@ -293,26 +294,26 @@ namespace MP.Prog.Pages return answ; } - private string cssStatusByCod(FileData.FileState currStatus) + private string cssStatusByCod(FileState currStatus) { string answ = "badge"; switch (currStatus) { - case FileData.FileState.Changed: - answ += " badge-warning"; + case FileState.Changed: + answ += " text-bg-warning"; break; - case FileData.FileState.Deleted: - answ += " badge-danger"; + case FileState.Deleted: + answ += " text-bg-danger"; break; - case FileData.FileState.Ok: - answ += " badge-success"; + case FileState.Ok: + answ += " text-bg-success"; break; - case FileData.FileState.ND: + case FileState.ND: default: - answ += " badge-light"; + answ += " text-bg-light"; break; } return answ; @@ -366,6 +367,16 @@ namespace MP.Prog.Pages isLoading = false; } + /// + /// Restituisce size calcolata + /// + /// + /// + protected string CalcSize(long origSize) + { + return MeasureUtils.SizeSuffix(origSize, 1); + } + protected async Task FilterTag(string searchVal) { SelTag = searchVal; diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html index 414f0fd9..bbb1bb4e 100644 --- a/MP.Prog/Resources/ChangeLog.html +++ b/MP.Prog/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo gestione Programmi MAPO -

    Versione: 6.16.2410.2120

    +

    Versione: 6.16.2410.2210


    Note di rilascio:
      diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt index 2fd4f529..ce5039c4 100644 --- a/MP.Prog/Resources/VersNum.txt +++ b/MP.Prog/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2410.2120 +6.16.2410.2210 diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml index 94b2e066..08d26d10 100644 --- a/MP.Prog/Resources/manifest.xml +++ b/MP.Prog/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2410.2120 + 6.16.2410.2210 https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/MP.Prog.zip https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/ChangeLog.html false From f92d2f7f277281ead2985f79d7e271deeaa2bd50 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 22 Oct 2024 10:28:37 +0200 Subject: [PATCH 3/5] Correzione display XML files --- MP.Prog/Components/DiffView.razor | 4 ++-- MP.Prog/Components/DiffView.razor.cs | 27 +++++++++++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/MP.Prog/Components/DiffView.razor b/MP.Prog/Components/DiffView.razor index af2aab1c..f1c3b368 100644 --- a/MP.Prog/Components/DiffView.razor +++ b/MP.Prog/Components/DiffView.razor @@ -31,12 +31,12 @@
      -

      @((MarkupString)StrFix(oldResult))

      +

      @StrFix(oldResult)

      -

      @((MarkupString)StrFix(newResult))

      +

      @StrFix(newResult)

      diff --git a/MP.Prog/Components/DiffView.razor.cs b/MP.Prog/Components/DiffView.razor.cs index 7b9ce7b8..73e490dc 100644 --- a/MP.Prog/Components/DiffView.razor.cs +++ b/MP.Prog/Components/DiffView.razor.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using System.Web; namespace MP.Prog.Components { @@ -77,21 +78,26 @@ namespace MP.Prog.Components StringBuilder sbOld = new StringBuilder(); foreach (var item in diff) { + // se fosse testo vuoto --> metto spazio! + if (string.IsNullOrEmpty(item.text)) + { + item.text = " "; + } switch (item.operation) { case Operation.DELETE: - sbOld.Append($"{item.text}"); + sbOld.Append($"{HttpUtility.HtmlEncode(item.text)}"); numChanges++; break; case Operation.INSERT: - sbNew.Append($"{item.text}"); + sbNew.Append($"{HttpUtility.HtmlEncode(item.text)}"); numChanges++; break; case Operation.EQUAL: - sbNew.Append($"{item.text}"); - sbOld.Append($"{item.text}"); + sbNew.Append($"{HttpUtility.HtmlEncode(item.text)}"); + sbOld.Append($"{HttpUtility.HtmlEncode(item.text)}"); break; default: @@ -99,8 +105,8 @@ namespace MP.Prog.Components } } - newResult = sbNew.ToString().Trim(); - oldResult = sbOld.ToString().Trim(); + newResult = sbNew.ToString(); + oldResult = sbOld.ToString(); var pUpd = Task.Run(async () => { await diffDone.InvokeAsync(numChanges); @@ -118,9 +124,14 @@ namespace MP.Prog.Components #region Private Methods - private string StrFix(string origVal) + private MarkupString StrFix(string origVal) { - return origVal.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + string fixVal = origVal.Trim() + .Replace(" ", "  ") + .Replace(Environment.NewLine, sepDest); + //.Replace("\r", sepDest) + //.Replace("\n", sepDest); + return new MarkupString(fixVal); } #endregion Private Methods From 76b84f24d39dbea02453982f5aa17b2f56bb6bbb Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 22 Oct 2024 11:03:13 +0200 Subject: [PATCH 4/5] Aggiunta migrazione x dato UserAppr --- MP.FileData/DatabaseModels/FileModel.cs | 1 + .../20241022090211_AddUserAppr.Designer.cs | 181 ++++++++++++++++++ .../Migrations/20241022090211_AddUserAppr.cs | 27 +++ .../MoonPro_ProgContextModelSnapshot.cs | 123 ++++++------ 4 files changed, 276 insertions(+), 56 deletions(-) create mode 100644 MP.FileData/Migrations/20241022090211_AddUserAppr.Designer.cs create mode 100644 MP.FileData/Migrations/20241022090211_AddUserAppr.cs diff --git a/MP.FileData/DatabaseModels/FileModel.cs b/MP.FileData/DatabaseModels/FileModel.cs index 120fb8ee..31bdf618 100644 --- a/MP.FileData/DatabaseModels/FileModel.cs +++ b/MP.FileData/DatabaseModels/FileModel.cs @@ -28,6 +28,7 @@ namespace MP.FileData.DatabaseModels public string Name { get; set; } = ""; public int Rev { get; set; } = 0; public DateTime LastMod { get; set; } + public string UserAppr { get; set; } = ""; public long Size { get; set; } = 0; public string Path { get; set; } = ""; public string MimeType { get; set; } = ""; diff --git a/MP.FileData/Migrations/20241022090211_AddUserAppr.Designer.cs b/MP.FileData/Migrations/20241022090211_AddUserAppr.Designer.cs new file mode 100644 index 00000000..1ab3ab91 --- /dev/null +++ b/MP.FileData/Migrations/20241022090211_AddUserAppr.Designer.cs @@ -0,0 +1,181 @@ +// +using System; +using MP.FileData; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace MP.FileData.Migrations +{ + [DbContext(typeof(MoonPro_ProgContext))] + [Migration("20241022090211_AddUserAppr")] + partial class AddUserAppr + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("SQL_Latin1_General_CP1_CI_AS") + .HasAnnotation("ProductVersion", "6.0.33") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("FileModelTagModel", b => + { + b.Property("FilesFileId") + .HasColumnType("int"); + + b.Property("TagsTagId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("FilesFileId", "TagsTagId"); + + b.HasIndex("TagsTagId"); + + b.ToTable("FileModelTagModel"); + }); + + modelBuilder.Entity("MP.FileData.DatabaseModels.ArchMaccModel", b => + { + b.Property("IdxMacchina") + .HasColumnType("nvarchar(450)"); + + b.Property("BasePath") + .HasColumnType("nvarchar(max)"); + + b.Property("Descrizione") + .HasColumnType("nvarchar(max)"); + + b.Property("ImgUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("Nome") + .HasColumnType("nvarchar(max)"); + + b.Property("Note") + .HasColumnType("nvarchar(max)"); + + b.Property("RuleName") + .HasColumnType("nvarchar(max)"); + + b.Property("ShowOrder") + .HasColumnType("int"); + + b.HasKey("IdxMacchina"); + + b.ToTable("Macchine"); + + b.HasData( + new + { + IdxMacchina = "0", + BasePath = "", + Descrizione = "--- Tutte ---", + ImgUrl = "", + Nome = "--- Tutte ---", + Note = "", + RuleName = "0", + ShowOrder = 0 + }); + }); + + modelBuilder.Entity("MP.FileData.DatabaseModels.FileModel", b => + { + b.Property("FileId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("FileId"), 1L, 1); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("DiskStatus") + .HasColumnType("int"); + + b.Property("FileContent") + .HasColumnType("varbinary(max)"); + + b.Property("IdxMacchina") + .HasColumnType("nvarchar(450)"); + + b.Property("LastCheck") + .HasColumnType("datetime2"); + + b.Property("LastMod") + .HasColumnType("datetime2"); + + b.Property("MD5") + .HasColumnType("nvarchar(max)"); + + b.Property("MimeType") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("Path") + .HasColumnType("nvarchar(max)"); + + b.Property("Rev") + .HasColumnType("int"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("UserAppr") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)") + .HasDefaultValueSql("('')"); + + b.HasKey("FileId"); + + b.HasIndex("IdxMacchina", "Active", "DiskStatus"); + + b.ToTable("Files"); + }); + + modelBuilder.Entity("MP.FileData.DatabaseModels.TagModel", b => + { + b.Property("TagId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("TagId"); + + b.ToTable("Tags"); + }); + + modelBuilder.Entity("FileModelTagModel", b => + { + b.HasOne("MP.FileData.DatabaseModels.FileModel", null) + .WithMany() + .HasForeignKey("FilesFileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MP.FileData.DatabaseModels.TagModel", null) + .WithMany() + .HasForeignKey("TagsTagId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("MP.FileData.DatabaseModels.FileModel", b => + { + b.HasOne("MP.FileData.DatabaseModels.ArchMaccModel", "Macchina") + .WithMany() + .HasForeignKey("IdxMacchina"); + + b.Navigation("Macchina"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/MP.FileData/Migrations/20241022090211_AddUserAppr.cs b/MP.FileData/Migrations/20241022090211_AddUserAppr.cs new file mode 100644 index 00000000..54719d28 --- /dev/null +++ b/MP.FileData/Migrations/20241022090211_AddUserAppr.cs @@ -0,0 +1,27 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MP.FileData.Migrations +{ + public partial class AddUserAppr : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "UserAppr", + table: "Files", + type: "nvarchar(250)", + maxLength: 250, + nullable: false, + defaultValueSql: "('')"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "UserAppr", + table: "Files"); + } + } +} diff --git a/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs b/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs index 9e9ff30e..fe7fc1e0 100644 --- a/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs +++ b/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs @@ -6,6 +6,8 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +#nullable disable + namespace MP.FileData.Migrations { [DbContext(typeof(MoonPro_ProgContext))] @@ -15,10 +17,11 @@ namespace MP.FileData.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + .UseCollation("SQL_Latin1_General_CP1_CI_AS") + .HasAnnotation("ProductVersion", "6.0.33") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); modelBuilder.Entity("FileModelTagModel", b => { @@ -35,57 +38,7 @@ namespace MP.FileData.Migrations b.ToTable("FileModelTagModel"); }); - modelBuilder.Entity("MP.FileData.DatabaseModels.FileModel", b => - { - b.Property("FileId") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("Active") - .HasColumnType("bit"); - - b.Property("DiskStatus") - .HasColumnType("int"); - - b.Property("FileContent") - .HasColumnType("varbinary(max)"); - - b.Property("IdxMacchina") - .HasColumnType("nvarchar(450)"); - - b.Property("LastCheck") - .HasColumnType("datetime2"); - - b.Property("LastMod") - .HasColumnType("datetime2"); - - b.Property("MD5") - .HasColumnType("nvarchar(max)"); - - b.Property("MimeType") - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .HasColumnType("nvarchar(max)"); - - b.Property("Path") - .HasColumnType("nvarchar(max)"); - - b.Property("Rev") - .HasColumnType("int"); - - b.Property("Size") - .HasColumnType("bigint"); - - b.HasKey("FileId"); - - b.HasIndex("IdxMacchina", "Active", "DiskStatus"); - - b.ToTable("Files"); - }); - - modelBuilder.Entity("MP.FileData.DatabaseModels.MacchinaModel", b => + modelBuilder.Entity("MP.FileData.DatabaseModels.ArchMaccModel", b => { b.Property("IdxMacchina") .HasColumnType("nvarchar(450)"); @@ -129,6 +82,64 @@ namespace MP.FileData.Migrations }); }); + modelBuilder.Entity("MP.FileData.DatabaseModels.FileModel", b => + { + b.Property("FileId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("FileId"), 1L, 1); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("DiskStatus") + .HasColumnType("int"); + + b.Property("FileContent") + .HasColumnType("varbinary(max)"); + + b.Property("IdxMacchina") + .HasColumnType("nvarchar(450)"); + + b.Property("LastCheck") + .HasColumnType("datetime2"); + + b.Property("LastMod") + .HasColumnType("datetime2"); + + b.Property("MD5") + .HasColumnType("nvarchar(max)"); + + b.Property("MimeType") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("Path") + .HasColumnType("nvarchar(max)"); + + b.Property("Rev") + .HasColumnType("int"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("UserAppr") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)") + .HasDefaultValueSql("('')"); + + b.HasKey("FileId"); + + b.HasIndex("IdxMacchina", "Active", "DiskStatus"); + + b.ToTable("Files"); + }); + modelBuilder.Entity("MP.FileData.DatabaseModels.TagModel", b => { b.Property("TagId") @@ -156,7 +167,7 @@ namespace MP.FileData.Migrations modelBuilder.Entity("MP.FileData.DatabaseModels.FileModel", b => { - b.HasOne("MP.FileData.DatabaseModels.MacchinaModel", "Macchina") + b.HasOne("MP.FileData.DatabaseModels.ArchMaccModel", "Macchina") .WithMany() .HasForeignKey("IdxMacchina"); From d9fa23b17bae51452da93aab9dbeb834cd0e1c93 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 22 Oct 2024 12:06:25 +0200 Subject: [PATCH 5/5] PROG: - Aggiunta preliminare gestione UserName - verifica gestione auth windows - update in prod --- MP.FileData/Controllers/FileController.cs | 19 +- MP.FileData/MoonPro_ProgContext.cs | 11 +- MP.Prog/App.razor | 24 +- MP.Prog/Components/ArchiveStatus.razor | 2 +- MP.Prog/Components/ArchiveStatus.razor.cs | 5 +- MP.Prog/Components/CmpTop.razor | 3 + MP.Prog/Components/CmpTop.razor.cs | 46 +- MP.Prog/Components/FileEditor.razor.cs | 103 +-- MP.Prog/Components/LoadingData.razor | 7 - MP.Prog/Data/FileArchDataService.cs | 85 ++- MP.Prog/Data/MessageService.cs | 44 +- MP.Prog/MP.Prog.csproj | 4 +- MP.Prog/Pages/Archive.razor | 27 +- MP.Prog/Pages/Archive.razor.cs | 868 +++++++++++----------- MP.Prog/Properties/launchSettings.json | 4 +- MP.Prog/Resources/ChangeLog.html | 2 +- MP.Prog/Resources/VersNum.txt | 2 +- MP.Prog/Resources/manifest.xml | 2 +- MP.Prog/Startup.cs | 16 +- 19 files changed, 693 insertions(+), 581 deletions(-) delete mode 100644 MP.Prog/Components/LoadingData.razor diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index a244408d..acdb8df1 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -114,8 +114,9 @@ namespace MP.FileData.Controllers /// pattern di ricerca (*.*) /// Forza il controllo dei Tags /// Regole di ricerca applicate + /// Utente connesso x approvazione /// - public int CheckFileArchived(string idxMacchina, string path, int numDayPre, string searchPattern, bool forceTag, SearchRules currRule) + public int CheckFileArchived(string idxMacchina, string path, int numDayPre, string searchPattern, bool forceTag, SearchRules currRule, string UserName) { Log.Info($"CheckFileArchived S00 | macchina: {idxMacchina} | path: {path} | pattern: {searchPattern} | # ExcludedFileExt: {currRule.ExcludedFileExt.Count()}"); int checkDone = 0; @@ -212,7 +213,7 @@ namespace MP.FileData.Controllers if (fileNew != null && fileNew.Count > 0) { checkDone += fileNew.Count; - FileInsert(idxMacchina, path, fileNew, 0, currRule); + FileInsert(idxMacchina, path, fileNew, UserName, 0, currRule); Log.Trace($"CheckFileArchived S03 | insert {fileNew.Count} files"); } // aggiorno i file modificati @@ -388,10 +389,11 @@ namespace MP.FileData.Controllers /// Macchina /// Path base macchina /// Elenco files + /// Utente che ha approvato la modifica, "" = NON confermata/eliminabile /// rev da usare x creazione /// Configuraizone ricerca /// - public bool FileInsert(string idxMacchina, string basePath, List newFiles, int rev, SearchRules currRule) + public bool FileInsert(string idxMacchina, string basePath, List newFiles, string UserName, int rev, SearchRules currRule) { // fare: lettura conf x macchina Log.Info($"FileInsert S01 per macchina {idxMacchina}: {newFiles.Count} files da valutare"); @@ -410,6 +412,7 @@ namespace MP.FileData.Controllers IdxMacchina = idxMacchina, LastCheck = adesso, LastMod = o.LastWriteTime, + UserAppr = UserName, MimeType = o.Extension, Name = o.Name, Path = o.FullName, @@ -493,7 +496,13 @@ namespace MP.FileData.Controllers return answ; } - public bool FileModApprove(FileModel currFile) + /// + /// Approvazione modifica File + /// + /// + /// + /// + public bool FileModApprove(FileModel currFile, string UserName) { bool done = false; // recupero file regole json da macchina.. @@ -526,7 +535,7 @@ namespace MP.FileData.Controllers if (currRule.Name != "ND") { // inserisco come REVISIONE - FileInsert(currFile.IdxMacchina, currMacchina.BasePath, listUpdate, currFile.Rev + 1, currRule); + FileInsert(currFile.IdxMacchina, currMacchina.BasePath, listUpdate, UserName, currFile.Rev + 1, currRule); // archivio vecchio file currFile.Active = false; diff --git a/MP.FileData/MoonPro_ProgContext.cs b/MP.FileData/MoonPro_ProgContext.cs index 73df70a1..b67d7ca5 100644 --- a/MP.FileData/MoonPro_ProgContext.cs +++ b/MP.FileData/MoonPro_ProgContext.cs @@ -93,7 +93,16 @@ namespace MP.FileData { modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS"); - // + // fix valori default + modelBuilder.Entity(entity => + { + entity.Property(e => e.UserAppr) + .HasMaxLength(250) + .IsRequired() + .HasDefaultValueSql("('')"); + }); + + modelBuilder.Seed(); OnModelCreatingPartial(modelBuilder); diff --git a/MP.Prog/App.razor b/MP.Prog/App.razor index 3a2af530..3aa0a947 100644 --- a/MP.Prog/App.razor +++ b/MP.Prog/App.razor @@ -1,10 +1,14 @@ - - - - - - -

      Sorry, there's nothing at this address.

      -
      -
      -
      + + + + + + @* *@ + + + +

      Sorry, there's nothing at this address.

      +
      +
      +
      +
      \ No newline at end of file diff --git a/MP.Prog/Components/ArchiveStatus.razor b/MP.Prog/Components/ArchiveStatus.razor index ec156edd..f734e27c 100644 --- a/MP.Prog/Components/ArchiveStatus.razor +++ b/MP.Prog/Components/ArchiveStatus.razor @@ -47,7 +47,7 @@ }
      - +
      } diff --git a/MP.Prog/Components/ArchiveStatus.razor.cs b/MP.Prog/Components/ArchiveStatus.razor.cs index 6a82f597..6630245e 100644 --- a/MP.Prog/Components/ArchiveStatus.razor.cs +++ b/MP.Prog/Components/ArchiveStatus.razor.cs @@ -32,6 +32,9 @@ namespace MP.Prog.Components [Inject] protected FileArchDataService FDService { get; set; } + [Inject] + protected MessageService MServ { get; set; } + protected int percLoading { get; set; } = 0; protected bool showProgress { get; set; } = false; @@ -159,7 +162,7 @@ namespace MP.Prog.Components sw.Restart(); // recupero elenco macchine percLoading += 100 / numMacchine; - numChecks = await FDService.UpdateMachineArchive(idxMacchina, numDays, true, false); + numChecks = await FDService.UpdateMachineArchive(idxMacchina, numDays, true, false, MServ.UserName); await Task.Delay(1); setupMessages.Add($"{idxMacchina}: {numChecks} files"); await InvokeAsync(StateHasChanged); diff --git a/MP.Prog/Components/CmpTop.razor b/MP.Prog/Components/CmpTop.razor index 232870dc..546f0ba2 100644 --- a/MP.Prog/Components/CmpTop.razor +++ b/MP.Prog/Components/CmpTop.razor @@ -1,6 +1,9 @@ 
      +
      + @UserName +
      @PageName
      diff --git a/MP.Prog/Components/CmpTop.razor.cs b/MP.Prog/Components/CmpTop.razor.cs index 454a0a5b..cff8ad1d 100644 --- a/MP.Prog/Components/CmpTop.razor.cs +++ b/MP.Prog/Components/CmpTop.razor.cs @@ -1,10 +1,13 @@ using Microsoft.AspNetCore.Components; using System.Threading.Tasks; + //using MP.Prog.Components; //using System.Security.Claims; //using Microsoft.AspNetCore.Components.Authorization; using MP.Prog.Data; +using System; +using Microsoft.AspNetCore.Components.Authorization; namespace MP.Prog.Components { @@ -14,15 +17,13 @@ namespace MP.Prog.Components public void Dispose() { - AppMessages.EA_PageUpdated -= OnPageUpdate; + MServ.EA_PageUpdated -= OnPageUpdate; } - //[Inject] - //protected AuthenticationStateProvider AuthenticationStateProvider { get; set; } public void OnPageUpdate() { - PageName = AppMessages.PageName; - PageIcon = AppMessages.PageIcon; + PageName = MServ.PageName; + PageIcon = MServ.PageIcon; InvokeAsync(() => { StateHasChanged(); @@ -34,30 +35,23 @@ namespace MP.Prog.Components #region Protected Properties [Inject] - protected MessageService AppMessages { get; set; } + protected AuthenticationStateProvider AuthenticationStateProvider { get; set; } + + [Inject] + protected MessageService MServ { get; set; } #endregion Protected Properties #region Protected Methods - protected override void OnInitialized() - { - AppMessages.EA_PageUpdated += OnPageUpdate; - } - protected override async Task OnInitializedAsync() { + MServ.EA_PageUpdated += OnPageUpdate; await forceReload(); } #endregion Protected Methods - #region Private Fields - - private string userName = ""; - - #endregion Private Fields - #region Private Properties private string PageIcon { get; set; } @@ -67,14 +61,28 @@ namespace MP.Prog.Components [CascadingParameter(Name = "ShowSearch")] private bool ShowSearch { get; set; } + private string UserName + { + get => MServ.UserName; + set => MServ.UserName = value; + } + #endregion Private Properties #region Private Methods private async Task forceReload() { - userName = "N.A."; - await Task.Delay(1); + var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); + var user = authState.User; + if (user.Identity != null && user.Identity.IsAuthenticated) + { + UserName = $"{user.Identity.Name}"; + } + else + { + UserName = ""; + } } #endregion Private Methods diff --git a/MP.Prog/Components/FileEditor.razor.cs b/MP.Prog/Components/FileEditor.razor.cs index 5abe2ba4..20f5e634 100644 --- a/MP.Prog/Components/FileEditor.razor.cs +++ b/MP.Prog/Components/FileEditor.razor.cs @@ -12,28 +12,12 @@ namespace MP.Prog.Components { public partial class FileEditor : ComponentBase { - #region Protected Fields - - protected int numDiff = 0; - - #endregion Protected Fields - #region Public Fields public FileModel _currItem = new FileModel(); #endregion Public Fields - #region Protected Properties - - [Inject] - protected FileArchDataService DataService { get; set; } - - [Inject] - protected IJSRuntime JSRuntime { get; set; } - - #endregion Protected Properties - #region Public Properties [Parameter] @@ -63,6 +47,56 @@ namespace MP.Prog.Components #endregion Public Properties + #region Public Methods + + public string CurrFileContent(string fullPath) + { + string answ = ""; + if (File.Exists(fullPath)) + { + answ = File.ReadAllText(fullPath); + } + return answ; + } + + #endregion Public Methods + + #region Protected Fields + + protected int numDiff = 0; + + #endregion Protected Fields + + #region Protected Properties + + [Inject] + protected FileArchDataService FDService { get; set; } + + [Inject] + protected IJSRuntime JSRuntime { get; set; } + + [Inject] + protected MessageService MServ { get; set; } + + #endregion Protected Properties + + #region Protected Methods + + protected void diffDoneHandler(int numChanges) + { +#if false + numDiff = numChanges; +#endif + } + + #endregion Protected Methods + + //private string userName = ""; + //protected override void OnInitialized() + //{ + // userName = MServ.UserName; + //} + #region Private Methods private async Task ApproveChange() @@ -72,7 +106,7 @@ namespace MP.Prog.Components if (_currItem != null) { - await DataService.FileApprove(_currItem); + await FDService.FileApprove(_currItem, MServ.UserName); await DataUpdated.InvokeAsync(1); } else @@ -93,7 +127,7 @@ namespace MP.Prog.Components if (_currItem != null) { - await DataService.FileDelete(_currItem); + await FDService.FileDelete(_currItem); await DataUpdated.InvokeAsync(1); } else @@ -114,9 +148,9 @@ namespace MP.Prog.Components if (_currItem != null) { await DataReset.InvokeAsync(0); - await DataService.FileExport(_currItem); + await FDService.FileExport(_currItem); await DataReset.InvokeAsync(0); - await DataService.UpdateMachineArchive(_currItem.IdxMacchina, 1, false, false); + await FDService.UpdateMachineArchive(_currItem.IdxMacchina, 1, false, false,MServ.UserName); await DataUpdated.InvokeAsync(1); } else @@ -132,7 +166,7 @@ namespace MP.Prog.Components if (_currItem != null) { - await DataService.FileReject(_currItem); + await FDService.FileReject(_currItem); await DataUpdated.InvokeAsync(1); } else @@ -145,7 +179,7 @@ namespace MP.Prog.Components { if (_currItem != null) { - await DataService.FileUpdate(_currItem); + await FDService.FileUpdate(_currItem); await DataUpdated.InvokeAsync(1); } else @@ -155,30 +189,5 @@ namespace MP.Prog.Components } #endregion Private Methods - - #region Protected Methods - - protected void diffDoneHandler(int numChanges) - { -#if false - numDiff = numChanges; -#endif - } - - #endregion Protected Methods - - #region Public Methods - - public string CurrFileContent(string fullPath) - { - string answ = ""; - if (File.Exists(fullPath)) - { - answ = File.ReadAllText(fullPath); - } - return answ; - } - - #endregion Public Methods } } \ No newline at end of file diff --git a/MP.Prog/Components/LoadingData.razor b/MP.Prog/Components/LoadingData.razor deleted file mode 100644 index 2aa17997..00000000 --- a/MP.Prog/Components/LoadingData.razor +++ /dev/null @@ -1,7 +0,0 @@ -@*

      Working

      *@ -
      -
      -

      loading data

      - -
      -
      \ No newline at end of file diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs index 48e00d90..e5a352af 100644 --- a/MP.Prog/Data/FileArchDataService.cs +++ b/MP.Prog/Data/FileArchDataService.cs @@ -72,15 +72,6 @@ namespace MP.Prog.Data await ResetArchiveCache(); return fatto; } - /// - /// Reset della cache dati ArchivioMacchine in redis - /// - /// - private async Task ResetArchiveCache() - { - await ExecFlushRedisPattern($"{redisBaseAddr}:ArchMacc:*"); - await ExecFlushRedisPattern($"{redisBaseAddr}:ArchStatus:*"); - } public async Task> ArchMaccGetAll() { @@ -267,17 +258,17 @@ namespace MP.Prog.Data /// /// Aggiorna intero archivio scansionando dati x tutte le macchine che hanno un path valido /// - /// - /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite - /// + /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite + /// Indica se forzare il tag + /// Utente attivo /// - public async Task UpdateAllArchive(int numDayPre, bool forceTag) + public async Task UpdateAllArchive(int numDayPre, bool forceTag, string UserName) { int checkDone = 0; var listaMacchine = await ArchMaccGetAll(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - checkDone += await UpdateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); + checkDone += await UpdateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false, UserName); } return await Task.FromResult(checkDone); @@ -292,8 +283,9 @@ namespace MP.Prog.Data /// /// Forza la riverifica dei tags (x update da setup) /// Scrittura log verboso macchina + /// Utente attivo /// - public async Task UpdateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) + public async Task UpdateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog, string UserName) { int checkDone = 0; Stopwatch stopWatch = new Stopwatch(); @@ -353,7 +345,7 @@ namespace MP.Prog.Data Log.Trace($"Conf rule generato:{Environment.NewLine}{rawRule}"); } } - checkDone = dbController.CheckFileArchived(macchina.IdxMacchina, macchina.BasePath, numDayPre, "*.*", forceTag, currRule); + checkDone = dbController.CheckFileArchived(macchina.IdxMacchina, macchina.BasePath, numDayPre, "*.*", forceTag, currRule, UserName); } } } @@ -375,29 +367,55 @@ namespace MP.Prog.Data #region Internal Methods - internal Task FileApprove(FileModel currItem) + /// + /// Approvazione modifica file + /// + /// + /// + /// + internal async Task FileApprove(FileModel currItem, string UserName) { - return Task.FromResult(dbController.FileModApprove(currItem)); + bool answ = dbController.FileModApprove(currItem, UserName); + // svuoto cache! + await ResetArchiveCache(); + return answ; } - internal Task FileDelete(FileModel currItem) + /// + /// Eliminazione file (x rifiuto modifica) + /// + /// + /// + internal async Task FileDelete(FileModel currItem) { - return Task.FromResult(dbController.FileDelete(currItem)); + bool answ = dbController.FileDelete(currItem); + // svuoto cache! + await ResetArchiveCache(); + return answ; } - internal Task FileExport(FileModel currItem) + internal async Task FileExport(FileModel currItem) { - return Task.FromResult(dbController.FileExport(currItem)); + bool answ = dbController.FileExport(currItem); + // svuoto cache! + await ResetArchiveCache(); + return answ; } - internal Task FileReject(FileModel currItem) + internal async Task FileReject(FileModel currItem) { - return Task.FromResult(dbController.FileModReject(currItem)); + bool answ = dbController.FileModReject(currItem); + // svuoto cache! + await ResetArchiveCache(); + return answ; } - internal Task FileUpdate(FileModel updItem) + internal async Task FileUpdate(FileModel updItem) { - return Task.FromResult(dbController.FileUpdate(updItem)); + bool answ = dbController.FileUpdate(updItem); + // svuoto cache! + await ResetArchiveCache(); + return answ; } internal void ResetController() @@ -410,6 +428,7 @@ namespace MP.Prog.Data #region Protected Fields protected static string connStringBBM = ""; + protected static string connStringFatt = ""; #endregion Protected Fields @@ -422,9 +441,13 @@ namespace MP.Prog.Data private const string redisBaseAddr = "MP:PROG"; private static IConfiguration _configuration; + private static ILogger _logger; + private static List ElencoMacchine = new List(); + private static JsonSerializerSettings? JSSettings; + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); /// @@ -508,6 +531,16 @@ namespace MP.Prog.Data return answ; } + /// + /// Reset della cache dati ArchivioMacchine in redis + /// + /// + private async Task ResetArchiveCache() + { + await ExecFlushRedisPattern($"{redisBaseAddr}:ArchMacc:*"); + await ExecFlushRedisPattern($"{redisBaseAddr}:ArchStatus:*"); + } + #endregion Private Methods } } \ No newline at end of file diff --git a/MP.Prog/Data/MessageService.cs b/MP.Prog/Data/MessageService.cs index bd9fc0cc..cea111cc 100644 --- a/MP.Prog/Data/MessageService.cs +++ b/MP.Prog/Data/MessageService.cs @@ -8,16 +8,6 @@ namespace MP.Prog.Data { public class MessageService { - #region Private Fields - - private SelectData _fileFilter = SelectData.Init(5, 15); - private string _pageIcon; - private string _pageName; - private string _searchVal = ""; - private bool showSearch; - - #endregion Private Fields - #region Public Events public event Action EA_FilterUpdated; @@ -30,6 +20,8 @@ namespace MP.Prog.Data public event Action EA_ShowSearch; + public event Action EA_UserUpdated; + #endregion Public Events #region Public Properties @@ -106,8 +98,32 @@ namespace MP.Prog.Data } } + public string UserName + { + get => _userName; + set + { + if (_userName != value) + { + _userName = value; + ReportUserUpd(); + } + } + } + #endregion Public Properties + #region Private Fields + + private SelectData _fileFilter = SelectData.Init(5, 15); + private string _pageIcon; + private string _pageName; + private string _searchVal = ""; + private string _userName = ""; + private bool showSearch; + + #endregion Private Fields + #region Private Methods private void ReportFilter() @@ -150,6 +166,14 @@ namespace MP.Prog.Data } } + private void ReportUserUpd() + { + if (EA_UserUpdated != null) + { + EA_UserUpdated?.Invoke(); + } + } + #endregion Private Methods } } \ No newline at end of file diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj index 1bde64d9..5c77f33a 100644 --- a/MP.Prog/MP.Prog.csproj +++ b/MP.Prog/MP.Prog.csproj @@ -3,7 +3,7 @@ net6.0 MP.Prog - 6.16.2410.2210 + 6.16.2410.2211 @@ -20,6 +20,8 @@ + + diff --git a/MP.Prog/Pages/Archive.razor b/MP.Prog/Pages/Archive.razor index a38313e0..2039d0c7 100644 --- a/MP.Prog/Pages/Archive.razor +++ b/MP.Prog/Pages/Archive.razor @@ -95,7 +95,7 @@ } @if (ListRecords == null) { - + } else if (totalCount == 0) { @@ -110,9 +110,7 @@ File - Rev - Size - State + Rev / State / Size Macchina Tags Modificato @@ -147,17 +145,26 @@
      -
      @record.Rev
      - - - @CalcSize(record.Size) - - +
      +
      + @record.Rev +
      +
      @record.DiskStatus +
      +
      + @CalcSize(record.Size) +
      +
      + +
      +
      +
      @record.UserAppr
      +
      @record.Macchina.Nome
      diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index affad72a..e79a7898 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -8,247 +8,71 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; - namespace MP.Prog.Pages { public partial class Archive : ComponentBase, IDisposable { - #region Private Fields + #region Public Properties - private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); - private FileModel currRecord = null; - private List ListRecords; - private List MacList; - private List TagList; + public bool DeleteDialogOpen { get; set; } - #endregion Private Fields + #endregion Public Properties + + #region Public Methods + + public string checkSelect(int FileId) + { + string answ = ""; + if (currRecord != null) + { + try + { + answ = (currRecord.FileId == FileId) ? "table-info" : ""; + } + catch + { } + } + return answ; + } + + public void Dispose() + { + MServ.EA_SearchUpdated -= OnSeachUpdated; + MServ.EA_FilterUpdated -= OnFilterUpdated; + } + + public async void OnFilterUpdated() + { + await ReloadData(); + } + + public void OnSeachUpdated() + { + SearchVal = MServ.SearchVal; + StateHasChanged(); + } + + #endregion Public Methods #region Protected Fields protected string _SearchTag; - protected string defTag = ""; - protected int totalCount = 0; #endregion Protected Fields - #region Private Properties - - private int currPage - { - get - { - return AppMService.File_Filter.PageNum; - } - set - { - AppMService.File_Filter.PageNum = value; - } - } - - private bool isLoading { get; set; } = false; - - private int numRecord - { - get - { - return AppMService.File_Filter.PageSize; - } - set - { - AppMService.File_Filter.PageSize = value; - } - } - - private bool OnlyActive - { - get - { - bool answ = false; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.OnlyActive; - } - return answ; - } - set - { - if (!AppMService.File_Filter.OnlyActive.Equals(value)) - { - AppMService.File_Filter.OnlyActive = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private bool OnlyMod - { - get - { - bool answ = false; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.OnlyMod; - } - return answ; - } - set - { - if (!AppMService.File_Filter.OnlyMod.Equals(value)) - { - AppMService.File_Filter.OnlyMod = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private bool OnlyNoTag - { - get - { - bool answ = false; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.OnlyNoTag; - } - return answ; - } - set - { - if (!AppMService.File_Filter.OnlyNoTag.Equals(value)) - { - AppMService.File_Filter.OnlyNoTag = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private string SearchVal - { - get - { - string answ = ""; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.SearchVal; - } - return answ; - } - set - { - if (!AppMService.File_Filter.SearchVal.Equals(value)) - { - AppMService.File_Filter.SearchVal = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private string SelFileName - { - get - { - string answ = ""; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.FileName; - } - return answ; - } - set - { - if (!AppMService.File_Filter.FileName.Equals(value)) - { - AppMService.File_Filter.FileName = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private string SelIdxMacc - { - get - { - string answ = ""; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.IdxMacchina; - } - return answ; - } - set - { - if (!AppMService.File_Filter.IdxMacchina.Equals(value)) - { - AppMService.File_Filter.IdxMacchina = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - private string SelTag - { - get - { - string answ = ""; - if (AppMService.File_Filter != null) - { - answ = AppMService.File_Filter.Tag; - } - return answ; - } - set - { - if (!AppMService.File_Filter.Tag.Equals(value)) - { - AppMService.File_Filter.Tag = value; - var pUpd = Task.Run(async () => - { - await AsyncReload(); - }); - pUpd.Wait(); - } - } - } - - #endregion Private Properties - #region Protected Properties [Inject] - protected MessageService AppMService { get; set; } - - [Inject] - protected FileArchDataService DataService { get; set; } + protected FileArchDataService FDService { get; set; } [Inject] protected IJSRuntime JSRuntime { get; set; } + [Inject] + protected MessageService MServ { get; set; } + [Inject] protected NavigationManager NavManager { get; set; } @@ -270,7 +94,7 @@ namespace MP.Prog.Pages { var pUpd = Task.Run(async () => { - TagList = await DataService.TagGetFilt(SearchTag); + TagList = await FDService.TagGetFilt(SearchTag); }); pUpd.Wait(); } @@ -280,11 +104,396 @@ namespace MP.Prog.Pages #endregion Protected Properties - #region Public Properties + #region Protected Methods - public bool DeleteDialogOpen { get; set; } + protected async Task AsyncReload() + { + isLoading = true; + currRecord = null; + ListRecords = null; + await ReloadData(); + isLoading = false; + } - #endregion Public Properties + /// + /// Restituisce size calcolata + /// + /// + /// + protected string CalcSize(long origSize) + { + return MeasureUtils.SizeSuffix(origSize, 1); + } + + protected async Task Edit(FileModel selRecord) + { + if (!selRecord.Active) + { + if (!await JSRuntime.InvokeAsync("confirm", "Sicuro di voler confrontare una revisione vecchia/inattiva del programma??")) + return; + } + + // rileggo dal DB il record corrente... + currRecord = await FDService.FileGetByKey(selRecord.FileId); + } + + protected async Task FilterPath(string searchVal) + { + SelFileName = searchVal; + OnlyActive = false; + currPage = 1; + await ReloadAllData(); + isLoading = false; + } + + protected async Task FilterTag(string searchVal) + { + SelTag = searchVal; + currPage = 1; + await ReloadData(); + isLoading = false; + } + + protected async Task ForceCheck(int numDays) + { + currRecord = null; + ListRecords = null; + // importante altrimenti NON mostra update UI + await Task.Delay(1); + //MServ.File_Filter = SelectData.Init(5, 10); + var numCheck = await FDService.UpdateAllArchive(numDays, false, MServ.UserName); + await ReloadAllData(); + await Task.Delay(1); + await RefreshDisplayLoading(); + } + + protected override async Task OnInitializedAsync() + { + SearchTag = defTag; + MServ.ShowSearch = true; + MServ.PageName = "Archivio File Programmi"; + MServ.PageIcon = "fas fa-folder pr-2"; + MServ.EA_SearchUpdated += OnSeachUpdated; + MServ.EA_FilterUpdated += OnFilterUpdated; + await ReloadAllData(); + isLoading = false; + } + + protected async Task PagerReloadNum(int newNum) + { + numRecord = newNum; + await ReloadData(); + isLoading = false; + } + + protected async Task PagerReloadPage(int newNum) + { + currPage = newNum; + await ReloadData(); + isLoading = false; + } + + protected async Task RefreshDisplayLoading() + { + await Task.Delay(1); + isLoading = false; + } + + protected async Task ReloadAllData() + { + isLoading = true; + MacList = await FDService.ArchMaccGetAll(); + SelIdxMacc = "0"; + SearchTag = defTag; + TagList = await FDService.TagGetFilt(SearchTag); + await ReloadData(); + } + + protected async Task ReloadData() + { + isLoading = true; + // importante altrimenti NON mostra update UI + await Task.Delay(1); + totalCount = await FDService.FileCountFilt(MServ.File_Filter); + //SearchRecords = await FDService.FileGetFilt(MServ.File_Filter); + //// faccio paginazione SOLO NELLA DECINA attuale... (quindi non tutte le pagine ma solo subset) + //ListRecords = SearchRecords.Skip(numRecord * (currPage % 10 - 1)).Take(numRecord).ToList(); + + ListRecords = await FDService.FileGetFilt(MServ.File_Filter); + await Task.Delay(1); + } + + protected void ResetData() + { + FDService.rollBackEdit(currRecord); + currRecord = null; + } + + protected async Task ResetFilter() + { + currRecord = null; + ListRecords = null; + currPage = 1; + MServ.File_Filter = SelectData.Init(5, 10); + MServ.SearchVal = ""; + SearchTag = defTag; + await ReloadAllData(); + isLoading = false; + } + + protected void ResetSearchTag() + { + SearchTag = defTag; + } + + protected void ResetTag() + { + SelTag = ""; + currPage = 1; + } + + protected void Select(FileModel selRecord) + { + // applico filtro da selezione + currRecord = selRecord; + } + + protected string TextReduce(string textOriginal, int maxChar) + { + string answ = textOriginal; + if (answ.Length > maxChar) + { + answ = $"...{textOriginal.Substring(answ.Length - maxChar)}"; + } + return answ; + } + + protected async Task UpdateData() + { + currRecord = null; + ListRecords = null; + FDService.ResetController(); + await ReloadData(); + await Task.Delay(1); + isLoading = false; + } + + #endregion Protected Methods + + #region Private Fields + + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + private FileModel currRecord = null; + private List ListRecords; + private List MacList; + private List TagList; + + #endregion Private Fields + + #region Private Properties + + private int currPage + { + get + { + return MServ.File_Filter.PageNum; + } + set + { + MServ.File_Filter.PageNum = value; + } + } + + private bool isLoading { get; set; } = false; + + private int numRecord + { + get + { + return MServ.File_Filter.PageSize; + } + set + { + MServ.File_Filter.PageSize = value; + } + } + + private bool OnlyActive + { + get + { + bool answ = false; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.OnlyActive; + } + return answ; + } + set + { + if (!MServ.File_Filter.OnlyActive.Equals(value)) + { + MServ.File_Filter.OnlyActive = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private bool OnlyMod + { + get + { + bool answ = false; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.OnlyMod; + } + return answ; + } + set + { + if (!MServ.File_Filter.OnlyMod.Equals(value)) + { + MServ.File_Filter.OnlyMod = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private bool OnlyNoTag + { + get + { + bool answ = false; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.OnlyNoTag; + } + return answ; + } + set + { + if (!MServ.File_Filter.OnlyNoTag.Equals(value)) + { + MServ.File_Filter.OnlyNoTag = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private string SearchVal + { + get + { + string answ = ""; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.SearchVal; + } + return answ; + } + set + { + if (!MServ.File_Filter.SearchVal.Equals(value)) + { + MServ.File_Filter.SearchVal = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private string SelFileName + { + get + { + string answ = ""; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.FileName; + } + return answ; + } + set + { + if (!MServ.File_Filter.FileName.Equals(value)) + { + MServ.File_Filter.FileName = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private string SelIdxMacc + { + get + { + string answ = ""; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.IdxMacchina; + } + return answ; + } + set + { + if (!MServ.File_Filter.IdxMacchina.Equals(value)) + { + MServ.File_Filter.IdxMacchina = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + private string SelTag + { + get + { + string answ = ""; + if (MServ.File_Filter != null) + { + answ = MServ.File_Filter.Tag; + } + return answ; + } + set + { + if (!MServ.File_Filter.Tag.Equals(value)) + { + MServ.File_Filter.Tag = value; + var pUpd = Task.Run(async () => + { + await AsyncReload(); + }); + pUpd.Wait(); + } + } + } + + #endregion Private Properties #region Private Methods @@ -334,218 +543,5 @@ namespace MP.Prog.Pages } #endregion Private Methods - - #region Protected Methods - - protected async Task AsyncReload() - { - isLoading = true; - currRecord = null; - ListRecords = null; - await ReloadData(); - isLoading = false; - } - - protected async Task Edit(FileModel selRecord) - { - if (!selRecord.Active) - { - if (!await JSRuntime.InvokeAsync("confirm", "Sicuro di voler confrontare una revisione vecchia/inattiva del programma??")) - return; - } - - // rileggo dal DB il record corrente... - currRecord = await DataService.FileGetByKey(selRecord.FileId); - } - - protected async Task FilterPath(string searchVal) - { - SelFileName = searchVal; - OnlyActive = false; - currPage = 1; - await ReloadAllData(); - isLoading = false; - } - - /// - /// Restituisce size calcolata - /// - /// - /// - protected string CalcSize(long origSize) - { - return MeasureUtils.SizeSuffix(origSize, 1); - } - - protected async Task FilterTag(string searchVal) - { - SelTag = searchVal; - currPage = 1; - await ReloadData(); - isLoading = false; - } - - protected async Task ForceCheck(int numDays) - { - currRecord = null; - ListRecords = null; - // importante altrimenti NON mostra update UI - await Task.Delay(1); - //AppMService.File_Filter = SelectData.Init(5, 10); - var numCheck = await DataService.UpdateAllArchive(numDays, false); - await ReloadAllData(); - await Task.Delay(1); - await RefreshDisplayLoading(); - } - - protected override async Task OnInitializedAsync() - { - SearchTag = defTag; - AppMService.ShowSearch = true; - AppMService.PageName = "Archivio File Programmi"; - AppMService.PageIcon = "fas fa-folder pr-2"; - AppMService.EA_SearchUpdated += OnSeachUpdated; - AppMService.EA_FilterUpdated += OnFilterUpdated; - await ReloadAllData(); - isLoading = false; - } - - protected async Task PagerReloadNum(int newNum) - { - numRecord = newNum; - await ReloadData(); - isLoading = false; - } - - protected async Task PagerReloadPage(int newNum) - { - currPage = newNum; - await ReloadData(); - isLoading = false; - } - - protected async Task RefreshDisplayLoading() - { - await Task.Delay(1); - isLoading = false; - } - - protected async Task ReloadAllData() - { - isLoading = true; - MacList = await DataService.ArchMaccGetAll(); - SelIdxMacc = "0"; - SearchTag = defTag; - TagList = await DataService.TagGetFilt(SearchTag); - await ReloadData(); - } - - protected async Task ReloadData() - { - isLoading = true; - // importante altrimenti NON mostra update UI - await Task.Delay(1); - totalCount = await DataService.FileCountFilt(AppMService.File_Filter); - //SearchRecords = await FDService.FileGetFilt(AppMService.File_Filter); - //// faccio paginazione SOLO NELLA DECINA attuale... (quindi non tutte le pagine ma solo subset) - //ListRecords = SearchRecords.Skip(numRecord * (currPage % 10 - 1)).Take(numRecord).ToList(); - - ListRecords = await DataService.FileGetFilt(AppMService.File_Filter); - await Task.Delay(1); - } - - protected void ResetData() - { - DataService.rollBackEdit(currRecord); - currRecord = null; - } - - protected async Task ResetFilter() - { - currRecord = null; - ListRecords = null; - currPage = 1; - AppMService.File_Filter = SelectData.Init(5, 10); - AppMService.SearchVal = ""; - SearchTag = defTag; - await ReloadAllData(); - isLoading = false; - } - - protected void ResetSearchTag() - { - SearchTag = defTag; - } - - protected void ResetTag() - { - SelTag = ""; - currPage = 1; - } - - protected void Select(FileModel selRecord) - { - // applico filtro da selezione - currRecord = selRecord; - } - - protected string TextReduce(string textOriginal, int maxChar) - { - string answ = textOriginal; - if (answ.Length > maxChar) - { - answ = $"...{textOriginal.Substring(answ.Length - maxChar)}"; - } - return answ; - } - - protected async Task UpdateData() - { - currRecord = null; - ListRecords = null; - DataService.ResetController(); - await ReloadData(); - await Task.Delay(1); - isLoading = false; - } - - #endregion Protected Methods - - #region Public Methods - - public string checkSelect(int FileId) - { - string answ = ""; - if (currRecord != null) - { - try - { - answ = (currRecord.FileId == FileId) ? "table-info" : ""; - } - catch - { } - } - return answ; - } - - public void Dispose() - { - AppMService.EA_SearchUpdated -= OnSeachUpdated; - AppMService.EA_FilterUpdated -= OnFilterUpdated; - } - - public async void OnFilterUpdated() - { - await ReloadData(); - //StateHasChanged(); - } - - public void OnSeachUpdated() - { - SearchVal = AppMService.SearchVal; - StateHasChanged(); - } - - #endregion Public Methods } } \ No newline at end of file diff --git a/MP.Prog/Properties/launchSettings.json b/MP.Prog/Properties/launchSettings.json index 9f3861d2..00384491 100644 --- a/MP.Prog/Properties/launchSettings.json +++ b/MP.Prog/Properties/launchSettings.json @@ -1,7 +1,7 @@ { "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, + "windowsAuthentication": true, + "anonymousAuthentication": false, "iisExpress": { "applicationUrl": "http://localhost:7312", "sslPort": 44309 diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html index bbb1bb4e..b2c82f16 100644 --- a/MP.Prog/Resources/ChangeLog.html +++ b/MP.Prog/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo gestione Programmi MAPO -

      Versione: 6.16.2410.2210

      +

      Versione: 6.16.2410.2211


      Note di rilascio:
        diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt index ce5039c4..608c2973 100644 --- a/MP.Prog/Resources/VersNum.txt +++ b/MP.Prog/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2410.2210 +6.16.2410.2211 diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml index 08d26d10..bfe55f7a 100644 --- a/MP.Prog/Resources/manifest.xml +++ b/MP.Prog/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2410.2210 + 6.16.2410.2211 https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/MP.Prog.zip https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/ChangeLog.html false diff --git a/MP.Prog/Startup.cs b/MP.Prog/Startup.cs index a1cb43b6..fc459f4f 100644 --- a/MP.Prog/Startup.cs +++ b/MP.Prog/Startup.cs @@ -1,3 +1,4 @@ +using Microsoft.AspNetCore.Authentication.Negotiate; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Hosting; @@ -8,6 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using MP.Prog.Data; +using NLog; using StackExchange.Redis; using System; using System.Collections.Generic; @@ -84,8 +86,8 @@ namespace MP.Prog app.UseRouting(); - //app.UseAuthentication(); - //app.UseAuthorization(); + app.UseAuthentication(); + app.UseAuthorization(); app.UseEndpoints(endpoints => { @@ -105,6 +107,16 @@ namespace MP.Prog // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { + // Aggiunta auth windows + services.AddAuthentication(NegotiateDefaults.AuthenticationScheme) + .AddNegotiate(); + + services.AddAuthorization(options => + { + // By default, all incoming requests will be authorized according to the default policy. + options.FallbackPolicy = options.DefaultPolicy; + }); + // cookie applicazione da 14 gg (defaul) a 30 services.ConfigureApplicationCookie(o =>