From 5014bb1ecb033fa00e60028f62ea892067a1012b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 27 Sep 2022 09:47:41 +0200 Subject: [PATCH] Inizio gestione filtro parametri con data max --- MP.Data/Controllers/MpSpecController.cs | 106 ++++++++++++----------- MP.Data/DatabaseModels/Dossiers.cs | 3 + MP.Data/MoonProContext.cs | 5 -- MP.SPEC/Components/ListDossiers.razor | 6 +- MP.SPEC/Components/ListDossiers.razor.cs | 16 ++++ MP.SPEC/Components/ListPARAMS.razor | 7 -- MP.SPEC/Components/ListPODL.razor.cs | 2 +- MP.SPEC/Components/ParamsFilter.razor | 13 ++- MP.SPEC/Components/ParamsFilter.razor.cs | 53 +++++++++--- MP.SPEC/Data/MpDataService.cs | 43 ++++++--- MP.SPEC/Data/SelectDossierParams.cs | 13 ++- MP.SPEC/Data/SelectFluxParams.cs | 1 + MP.SPEC/MP.SPEC.csproj | 2 +- MP.SPEC/Pages/Articoli.razor.cs | 2 +- MP.SPEC/Resources/ChangeLog.html | 2 +- MP.SPEC/Resources/VersNum.txt | 2 +- MP.SPEC/Resources/manifest.xml | 2 +- 17 files changed, 178 insertions(+), 100 deletions(-) diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs index 77989a0d..2a73213c 100644 --- a/MP.Data/Controllers/MpSpecController.cs +++ b/MP.Data/Controllers/MpSpecController.cs @@ -28,7 +28,7 @@ namespace MP.Data.Controllers /// Elenco Gruppi tipo Azienda /// /// - public List AnagGruppiAziende() + public List AnagGruppiAziende() { return AnagGruppiGetTipo("AZIENDA"); } @@ -37,7 +37,7 @@ namespace MP.Data.Controllers /// Elenco Gruppi tipo Fasi /// /// - public List AnagGruppiFase() + public List AnagGruppiFase() { return AnagGruppiGetTipo("FASE"); } @@ -46,9 +46,9 @@ namespace MP.Data.Controllers /// Elenco Gruppi /// /// - public List AnagGruppiGetAll() + public List AnagGruppiGetAll() { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -65,9 +65,9 @@ namespace MP.Data.Controllers /// /// /// - public List AnagGruppiGetTipo(string tipoGruppo) + public List AnagGruppiGetTipo(string tipoGruppo) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -84,7 +84,7 @@ namespace MP.Data.Controllers /// Elenco valori ammessi x Stati commessa (es Yacht Baglietto) /// /// - public List AnagStatiComm() + public List AnagStatiComm() { return ListValuesFilt("PODL", "StatoComm"); } @@ -93,7 +93,7 @@ namespace MP.Data.Controllers /// Elenco valori ammessi x Tipo articoli /// /// - public List AnagTipoArtLV() + public List AnagTipoArtLV() { return ListValuesFilt("AnagArticoli", "Tipo"); } @@ -103,7 +103,7 @@ namespace MP.Data.Controllers /// /// /// - public async Task ArticoliDeleteRecord(DatabaseModels.AnagArticoli currRec) + public async Task ArticoliDeleteRecord(AnagArticoli currRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) @@ -134,9 +134,9 @@ namespace MP.Data.Controllers /// /// /// - public List ArticoliGetSearch(int numRecord, string searchVal = "") + public List ArticoliGetSearch(int numRecord, string searchVal = "") { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -157,9 +157,9 @@ namespace MP.Data.Controllers /// /// /// - public List ArticoliGetSearch(int numRecord, string azienda = "*", string searchVal = "") + public List ArticoliGetSearch(int numRecord, string azienda = "*", string searchVal = "") { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -177,9 +177,9 @@ namespace MP.Data.Controllers /// Elenco tabella Articoli IMPIEGATI (da stored stp_ART_getUsed) /// /// - public List ArticoliGetUsed() + public List ArticoliGetUsed() { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -196,7 +196,7 @@ namespace MP.Data.Controllers /// /// /// - public async Task ArticoliUpdateRecord(DatabaseModels.AnagArticoli editRec) + public async Task ArticoliUpdateRecord(AnagArticoli editRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) @@ -236,9 +236,9 @@ namespace MP.Data.Controllers /// Elenco da tabella Config /// /// - public List ConfigGetAll() + public List ConfigGetAll() { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -254,10 +254,10 @@ namespace MP.Data.Controllers /// Update record config /// /// - public bool ConfigUpdate(DatabaseModels.ConfigModel updRec) + public bool ConfigUpdate(ConfigModel updRec) { bool fatto = false; - DatabaseModels.ConfigModel dbResult = new DatabaseModels.ConfigModel(); + ConfigModel dbResult = new ConfigModel(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -281,21 +281,29 @@ namespace MP.Data.Controllers /// /// Eliminazione di un dossier /// - /// record dossier da eliminare + /// record dossier da eliminare /// - public bool DossiersDelete(Dossiers selRecord) + public async Task DossiersDeleteRecord(Dossiers currRec) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { - var pIdxMacchina = new SqlParameter("@Original_IdxMacchina", selRecord.IdxMacchina); - var pIdxODL = new SqlParameter("@Original_IdxODL", selRecord.IdxODL); - var pDtRif = new SqlParameter("@Original_DtRif ", selRecord.DtRif); - - var dbResult = dbCtx - .Database - .ExecuteSqlRaw("EXEC stp_DOSS_deleteQuery @Original_IdxMacchina,@Original_IdxODL,@Original_DtRif", pIdxMacchina, pIdxODL, pDtRif); - answ = true; + try + { + var currVal = dbCtx + .DbSetDossiers + .Where(x => x.IdxDossier == currRec.IdxDossier) + .FirstOrDefault(); + dbCtx + .DbSetDossiers + .Remove(currVal); + await dbCtx.SaveChangesAsync(); + answ = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DossiersDeleteRecord{Environment.NewLine}{exc}"); + } } return answ; } @@ -308,9 +316,9 @@ namespace MP.Data.Controllers /// Data di riferimento (Massima) per estrazioen records /// numero massimo record da restituire /// - public List DossiersGetLastFilt(string IdxMacchina, DateTime DtRef, int MaxRec) + public List DossiersGetLastFilt(string IdxMacchina, DateTime DtRef, int MaxRec) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -351,7 +359,7 @@ namespace MP.Data.Controllers /// Elenco valori link (x home e navMenu laterale) /// /// - public List ElencoLink() + public List ElencoLink() { return ListLinkFilt("SpecLink"); } @@ -363,9 +371,9 @@ namespace MP.Data.Controllers /// *=tutti, altrimenti solo selezionato /// numero massimo record da restituire /// - public List FluxLogGetLastFilt(string IdxMacchina, string CodFlux, int MaxRec) + public List FluxLogGetLastFilt(string IdxMacchina, string CodFlux, int MaxRec) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -379,9 +387,9 @@ namespace MP.Data.Controllers return dbResult; } - public List ListLinkFilt(string tipoLink) + public List ListLinkFilt(string tipoLink) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -401,9 +409,9 @@ namespace MP.Data.Controllers /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) /// - public List ListODLFilt(bool inCorso, string codArt, string keyRichPart) + public List ListODLFilt(bool inCorso, string codArt, string keyRichPart) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -422,9 +430,9 @@ namespace MP.Data.Controllers /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) /// - public List ListPODLFilt(string codArt, string keyRichPart) + public List ListPODLFilt(string codArt, string keyRichPart) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -443,9 +451,9 @@ namespace MP.Data.Controllers /// /// /// - public List ListValuesFilt(string tabName, string fieldName) + public List ListValuesFilt(string tabName, string fieldName) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -462,9 +470,9 @@ namespace MP.Data.Controllers /// Elenco da tabella Macchine /// /// - public List MacchineGetAll() + public List MacchineGetAll() { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx @@ -499,9 +507,9 @@ namespace MP.Data.Controllers /// Elenco da tabella MappaStatoExpl /// /// - public List MseGetAll(int maxAge = 2000) + public List MseGetAll(int maxAge = 2000) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var maxAgeSec = new SqlParameter("@maxAgeSec", maxAge); @@ -541,7 +549,7 @@ namespace MP.Data.Controllers /// /// /// - public async Task PODLDeleteRecord(DatabaseModels.PODLModel currRec) + public async Task PODLDeleteRecord(PODLModel currRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) @@ -571,7 +579,7 @@ namespace MP.Data.Controllers /// /// /// - public async Task PODLUpdateRecord(DatabaseModels.PODLModel editRec) + public async Task PODLUpdateRecord(PODLModel editRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) diff --git a/MP.Data/DatabaseModels/Dossiers.cs b/MP.Data/DatabaseModels/Dossiers.cs index a44a47bf..46c294a1 100644 --- a/MP.Data/DatabaseModels/Dossiers.cs +++ b/MP.Data/DatabaseModels/Dossiers.cs @@ -14,6 +14,9 @@ namespace MP.Data.DatabaseModels { #region Public Properties + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int IdxDossier { get; set; } + [MaxLength(50)] public string DataType { get; set; } diff --git a/MP.Data/MoonProContext.cs b/MP.Data/MoonProContext.cs index 221d765b..9d62d4f3 100644 --- a/MP.Data/MoonProContext.cs +++ b/MP.Data/MoonProContext.cs @@ -296,11 +296,6 @@ namespace MP.Data { entity.HasKey(e => new { e.IdxMacchina, e.dtEvento, e.CodFlux }); - }); - modelBuilder.Entity(entity => - { - entity.HasKey(e => new { e.IdxMacchina, e.DtRif }); - }); OnModelCreatingPartial(modelBuilder); diff --git a/MP.SPEC/Components/ListDossiers.razor b/MP.SPEC/Components/ListDossiers.razor index 16e5bcf8..afe8d0a6 100644 --- a/MP.SPEC/Components/ListDossiers.razor +++ b/MP.SPEC/Components/ListDossiers.razor @@ -23,6 +23,7 @@ else Data ODL DATA TYPE + @@ -44,6 +45,8 @@ else @record.DataType + + } @@ -63,7 +66,7 @@ else Macchina Data - ODL + Data Type Valore @@ -89,7 +92,6 @@ else } - } diff --git a/MP.SPEC/Components/ListDossiers.razor.cs b/MP.SPEC/Components/ListDossiers.razor.cs index e89fe063..ed066ead 100644 --- a/MP.SPEC/Components/ListDossiers.razor.cs +++ b/MP.SPEC/Components/ListDossiers.razor.cs @@ -37,6 +37,22 @@ namespace MP.SPEC.Components return answ; } + /// + /// Eliminazione record selezionato (previa conferma) + /// + /// + /// + protected async Task deleteRecord(Dossiers selRec) + { + if (!await JSRuntime.InvokeAsync("confirm", "Eliminazione Dossier: sei sicuro di voler procedere?")) + return; + await Task.Delay(1); + var done = await MDService.DossiersDeleteRecord(selRec); + currRecord = null; + await reloadData(); + await Task.Delay(1); + } + public async Task reloadData(bool setChanged) { isLoading = true; diff --git a/MP.SPEC/Components/ListPARAMS.razor b/MP.SPEC/Components/ListPARAMS.razor index 9c77dbc2..7d93b2da 100644 --- a/MP.SPEC/Components/ListPARAMS.razor +++ b/MP.SPEC/Components/ListPARAMS.razor @@ -23,7 +23,6 @@ else Macchina Parametro Valore - @@ -45,12 +44,6 @@ else @record.Valore - - @*@if (ArticoloDelEnabled(record.CodArticolo)) - { - - }*@ - } diff --git a/MP.SPEC/Components/ListPODL.razor.cs b/MP.SPEC/Components/ListPODL.razor.cs index 01dd5644..6e3d1422 100644 --- a/MP.SPEC/Components/ListPODL.razor.cs +++ b/MP.SPEC/Components/ListPODL.razor.cs @@ -52,7 +52,7 @@ namespace MP.SPEC.Components #region Protected Methods /// - /// Eliminazione record selezioanto (previa conferma) + /// Eliminazione record selezionato (previa conferma) /// /// /// diff --git a/MP.SPEC/Components/ParamsFilter.razor b/MP.SPEC/Components/ParamsFilter.razor index 344eaea4..a23fe5b9 100644 --- a/MP.SPEC/Components/ParamsFilter.razor +++ b/MP.SPEC/Components/ParamsFilter.razor @@ -35,7 +35,7 @@
@if (showEditPar) { -
+
@@ -101,6 +101,15 @@ } } + @if (dtMax == null) + { + + } + else + { + + + }
diff --git a/MP.SPEC/Components/ParamsFilter.razor.cs b/MP.SPEC/Components/ParamsFilter.razor.cs index ccc5a601..0ac3ccc3 100644 --- a/MP.SPEC/Components/ParamsFilter.razor.cs +++ b/MP.SPEC/Components/ParamsFilter.razor.cs @@ -15,6 +15,23 @@ namespace MP.SPEC.Components #endregion Public Properties + #region Public Methods + + /// + /// Inizializzazione con periodo e arrotondamento + /// + /// + /// + public static DateTime RoundDatetime(int minRound) + { + TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today); + int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound; + DateTime endRounded = DateTime.Today.AddMinutes(minDay); + return endRounded; + } + + #endregion Public Methods + #region Protected Properties protected string lastUpdate @@ -64,10 +81,7 @@ namespace MP.SPEC.Components protected string selMacchina { - get - { - return SelFilter.IdxMacchina; - } + get => SelFilter.IdxMacchina; set { if (!SelFilter.IdxMacchina.Equals(value)) @@ -130,6 +144,14 @@ namespace MP.SPEC.Components await FilterChanged.InvokeAsync(SelFilter); } + protected void setDtMax() + { + dtMax = RoundDatetime(5); + // fermo udpate + liveUpdate = false; + lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}"; + } + protected async Task takeSnapshot() { // fermo udpate @@ -139,7 +161,7 @@ namespace MP.SPEC.Components // aggiungo 2 sec dtRif = dtRif.AddSeconds(1); await MDService.DossiersTakeParamsSnapshot(selMacchina, 10, dtRif); - lastUpdate = $"Last Snapshot: {DateTime.Now:yyyy/MM/dd HH:mm:ss}"; + lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}"; } protected void toggleParams() @@ -153,7 +175,11 @@ namespace MP.SPEC.Components await Task.Delay(1); if (!liveUpdate) { - lastUpdate = $"Last Snapshot: {DateTime.Now:yyyy/MM/dd HH:mm:ss}"; + lastUpdate = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss}"; + } + else + { + dtMax = null; } } @@ -162,19 +188,26 @@ namespace MP.SPEC.Components #region Private Fields private List? ListFlux = null; + private List? ListMacchine = null; #endregion Private Fields + #region Private Properties + + private DateTime? dtMax + { + get => SelFilter.dtMax; + set => SelFilter.dtMax = value; + } + + private bool showEditPar { get; set; } = false; + private string snapMode { get => SelFilter.dtRif == null ? "Realtime Rec" : $"Rec {SelFilter.dtRif:yyyy/MM/dd HH:mm:ss}"; } - #region Private Properties - - private bool showEditPar { get; set; } = false; - #endregion Private Properties #region Private Methods diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs index f14e6733..706a6f23 100644 --- a/MP.SPEC/Data/MpDataService.cs +++ b/MP.SPEC/Data/MpDataService.cs @@ -294,15 +294,18 @@ namespace MP.SPEC.Data /// /// record dossier da eliminare /// - public async Task DossiersDelete(Dossiers selRecord) + public async Task DossiersDeleteRecord(Dossiers selRecord) { bool result = false; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); - result = await Task.FromResult(dbController.DossiersDelete(selRecord)); + result = await dbController.DossiersDeleteRecord(selRecord); + // elimino cache redis... + RedisValue pattern = new RedisValue($"{redisDossByMac}:*"); + bool answ = await ExecFlushRedisPattern(pattern); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"DossiersDelete | IdxMacchina {selRecord.IdxMacchina} | DtRif {selRecord.DtRif} | IdxODL {selRecord.IdxODL} | {ts.TotalMilliseconds}ms"); + Log.Debug($"DossiersDeleteRecord | IdxMacchina {selRecord.IdxMacchina} | DtRif {selRecord.DtRif} | IdxODL {selRecord.IdxODL} | {ts.TotalMilliseconds}ms"); return result; } @@ -392,21 +395,37 @@ namespace MP.SPEC.Data public async Task FlushRedisCache() { await Task.Delay(1); + RedisValue pattern = new RedisValue($"{redisBaseAddr}*"); + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + + /// + /// Esegue flush memoria redis dato pattern + /// + /// + /// + private async Task ExecFlushRedisPattern(RedisValue pattern) + { bool answ = false; var listEndpoints = redisConnAdmin.GetEndPoints(); - var server = redisConnAdmin.GetServer(listEndpoints[0]); - RedisValue pattern = new RedisValue($"{redisBaseAddr}*"); - if (server != null) + foreach (var endPoint in listEndpoints) { - var keyList = server.Keys(redisDb.Database, pattern); - foreach (var item in keyList) + //var server = redisConnAdmin.GetServer(listEndpoints[0]); + var server = redisConnAdmin.GetServer(endPoint); + if (server != null) { - await redisDb.KeyDeleteAsync(item); + var keyList = server.Keys(redisDb.Database, pattern); + foreach (var item in keyList) + { + await redisDb.KeyDeleteAsync(item); + } + // brutalmente rimuovo intero contenuto DB... DANGER + //await server.FlushDatabaseAsync(); + answ = true; } - // brutalmente rimuovo intero contenuto DB... DANGER - //await server.FlushDatabaseAsync(); - answ = true; } + return answ; } diff --git a/MP.SPEC/Data/SelectDossierParams.cs b/MP.SPEC/Data/SelectDossierParams.cs index 9d55bb87..0c962273 100644 --- a/MP.SPEC/Data/SelectDossierParams.cs +++ b/MP.SPEC/Data/SelectDossierParams.cs @@ -13,7 +13,7 @@ public int CurrPage { get; set; } = 1; - public DateTime DtRef { get; set; } = Init(5); + public DateTime DtRef { get; set; } = InitDatetime(5); public string IdxMacchina { get; set; } = "*"; @@ -24,12 +24,11 @@ #region Public Methods /// -         /// Inizializzazione con periodo e arrotondamento -         /// -         /// -         /// -         /// - public static DateTime Init(int minRound) + /// Inizializzazione con periodo e arrotondamento + /// + /// + /// + public static DateTime InitDatetime(int minRound) { TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today); int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound; diff --git a/MP.SPEC/Data/SelectFluxParams.cs b/MP.SPEC/Data/SelectFluxParams.cs index f89ffdf6..96523e7f 100644 --- a/MP.SPEC/Data/SelectFluxParams.cs +++ b/MP.SPEC/Data/SelectFluxParams.cs @@ -14,6 +14,7 @@ public string CodFlux { get; set; } = "*"; public int CurrPage { get; set; } = 1; public DateTime? dtRif { get; set; } = null; + public DateTime? dtMax { get; set; } = null; public string IdxMacchina { get; set; } = "*"; public string lastUpdate { get; set; } = "-"; public bool LiveUpdate { get; set; } = true; diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj index f7fd0cfb..f700125a 100644 --- a/MP.SPEC/MP.SPEC.csproj +++ b/MP.SPEC/MP.SPEC.csproj @@ -5,7 +5,7 @@ enable enable MP.SPEC - 6.16.2209.2708 + 6.16.2209.2709 diff --git a/MP.SPEC/Pages/Articoli.razor.cs b/MP.SPEC/Pages/Articoli.razor.cs index c2f10873..2dabf683 100644 --- a/MP.SPEC/Pages/Articoli.razor.cs +++ b/MP.SPEC/Pages/Articoli.razor.cs @@ -97,7 +97,7 @@ namespace MP.SPEC.Pages } /// - /// Eliminazione record selezioanto (previa conferma) + /// Eliminazione record selezionato (previa conferma) /// /// /// diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html index bb3055e4..f3a7eab2 100644 --- a/MP.SPEC/Resources/ChangeLog.html +++ b/MP.SPEC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2209.2708

+

Versione: 6.16.2209.2709


Note di rilascio:
  • diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt index 9ec82147..f52746f8 100644 --- a/MP.SPEC/Resources/VersNum.txt +++ b/MP.SPEC/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2209.2708 +6.16.2209.2709 diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml index 813a0be2..e18d8c56 100644 --- a/MP.SPEC/Resources/manifest.xml +++ b/MP.SPEC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2209.2708 + 6.16.2209.2709 https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html false