Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e84659fca | |||
| 638461a4e3 | |||
| bf1dd1d526 | |||
| 7d121b2bd5 | |||
| dfb3e1f74a | |||
| 8980da46be | |||
| 531da47cbc | |||
| b279a287ec |
@@ -161,4 +161,9 @@ Public Module ConstIni
|
|||||||
Public Const K_TYPE As String = "Type"
|
Public Const K_TYPE As String = "Type"
|
||||||
Public Const K_DEFAULTQUANTITY As String = "DefaultQuantity"
|
Public Const K_DEFAULTQUANTITY As String = "DefaultQuantity"
|
||||||
|
|
||||||
|
Public Const S_BACKUPANDRESTORE As String = "Backup&Restore"
|
||||||
|
Public Const K_EXTERNALBACKUPACTIVE As String = "ExternalBackupActive"
|
||||||
|
Public Const K_EXTERNALFILEPATH As String = "ExternalFilePath"
|
||||||
|
Public Const K_REMINDERFREQUENCY As String = "ReminderFrequency"
|
||||||
|
|
||||||
End Module
|
End Module
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ Public Module LoadingWndHelper
|
|||||||
CHANGEPARAM = 10
|
CHANGEPARAM = 10
|
||||||
CREATINGPDF = 11
|
CREATINGPDF = 11
|
||||||
CHANGEMATERIAL = 12
|
CHANGEMATERIAL = 12
|
||||||
|
BACKUP = 13
|
||||||
|
RESTORE = 14
|
||||||
End Enum
|
End Enum
|
||||||
|
|
||||||
Dim m_MainWindow As Windows.Window
|
Dim m_MainWindow As Windows.Window
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</configSections>
|
</configSections>
|
||||||
<entityFramework>
|
<entityFramework>
|
||||||
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
||||||
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
|
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
|
||||||
<providers>
|
<providers>
|
||||||
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
||||||
</provider>
|
</provider>
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
using System.Diagnostics;
|
using Ionic.Zip;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace EgtBEAMWALL.DataLayer
|
namespace EgtBEAMWALL.DataLayer
|
||||||
{
|
{
|
||||||
@@ -18,6 +21,7 @@ namespace EgtBEAMWALL.DataLayer
|
|||||||
public static string DATABASE_SERV = "127.0.0.1";
|
public static string DATABASE_SERV = "127.0.0.1";
|
||||||
|
|
||||||
public static string DATABASE_USER = "EgtUser";
|
public static string DATABASE_USER = "EgtUser";
|
||||||
|
public static string ZIP_PWD = "viacremasca-viacremasca-viacremasca-viacremasca";
|
||||||
|
|
||||||
#endregion Public Fields
|
#endregion Public Fields
|
||||||
|
|
||||||
@@ -72,35 +76,130 @@ namespace EgtBEAMWALL.DataLayer
|
|||||||
// esecuzione script di install locale
|
// esecuzione script di install locale
|
||||||
return Controllers.DbController.man.refreshViews(DATABASE_NAME);
|
return Controllers.DbController.man.refreshViews(DATABASE_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Effettua DUMP del DB dato utente admin + percorso salvataggio
|
/// Effettua DUMP del DB dato utente admin + percorso salvataggio (zip cifrato)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="outFilePath">Percorso di salvataggio del dump (*.sql)</param>
|
/// <param name="zipFilePath">Percorso di salvataggio del dump (*.zip)</param>
|
||||||
|
/// <param name="dbName">Nome del DB da processare (se vuoto quello di default calcolato)</param>
|
||||||
|
/// <param name="mysqlDumpPath">Nome o Percorso Eseguibile mysqldump (opzionale)</param>
|
||||||
|
/// <param name="exportOpt">Opzioni in fase di export (default: --skip-extended-insert)</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static bool DumpDB(string mysqlDumpPath, string outFilePath)
|
public static bool DataBaseDumpToFile(string zipFilePath, string dbName = "", string mysqlDumpPath = "mysqldump", string exportOpt = "--skip-extended-insert")
|
||||||
{
|
{
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
// aggiungo sql finale
|
// fix path eseguibile
|
||||||
if (!outFilePath.EndsWith(".sql"))
|
if (string.IsNullOrEmpty(mysqlDumpPath))
|
||||||
{
|
{
|
||||||
outFilePath = $"{outFilePath}.sql";
|
mysqlDumpPath = "mysqldump";
|
||||||
}
|
}
|
||||||
|
if (string.IsNullOrEmpty(dbName))
|
||||||
|
{
|
||||||
|
dbName = DATABASE_NAME;
|
||||||
|
}
|
||||||
|
// verifica zip finale
|
||||||
|
if (!zipFilePath.EndsWith(".zip"))
|
||||||
|
{
|
||||||
|
zipFilePath = $"{zipFilePath}.zip";
|
||||||
|
}
|
||||||
|
// creo nome file per export sql (temporaneo)
|
||||||
|
string tempSqlPath = zipFilePath.Replace(".zip", ".sql");
|
||||||
// esecuzione script x dump del DB
|
// esecuzione script x dump del DB
|
||||||
string dirPath = Path.GetDirectoryName(outFilePath);
|
string dirPath = Path.GetDirectoryName(zipFilePath);
|
||||||
if (!Directory.Exists(dirPath))
|
if (!Directory.Exists(dirPath))
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(dirPath);
|
Directory.CreateDirectory(dirPath);
|
||||||
}
|
}
|
||||||
// se ci fosse già file elimino...
|
// se ci fosse già file elimino (sql/zip)
|
||||||
if (File.Exists(outFilePath))
|
if (File.Exists(tempSqlPath))
|
||||||
{
|
{
|
||||||
File.Delete(outFilePath);
|
File.Delete(tempSqlPath);
|
||||||
}
|
}
|
||||||
// chiamo script esterno...
|
if (File.Exists(zipFilePath))
|
||||||
string callScript = $"\"{mysqlDumpPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} {DATABASE_NAME} > {outFilePath}";
|
{
|
||||||
|
File.Delete(zipFilePath);
|
||||||
|
}
|
||||||
|
// creazione SQL, tramite script esterno... importante parametro "--skip-extended-insert" altrimenti problemi con restore (anche se + verboso e lento in backup...)
|
||||||
|
string callScript = $"\"{mysqlDumpPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} {dbName} {exportOpt} > {tempSqlPath}";
|
||||||
ExecuteCommand(callScript);
|
ExecuteCommand(callScript);
|
||||||
|
// compressione con pwd!
|
||||||
|
using (ZipFile zip = new ZipFile())
|
||||||
|
{
|
||||||
|
// aggiungo pwd
|
||||||
|
zip.Password = ZIP_PWD;
|
||||||
|
// inserisco file
|
||||||
|
zip.AddFile(tempSqlPath, "");
|
||||||
|
zip.Save(zipFilePath);
|
||||||
|
fatto = true;
|
||||||
|
}
|
||||||
|
// elimino file sql temporaneo...
|
||||||
|
if (File.Exists(tempSqlPath))
|
||||||
|
{
|
||||||
|
File.Delete(tempSqlPath);
|
||||||
|
}
|
||||||
return fatto;
|
return fatto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua restore come overwrite del DB di DEFAULT... irreversibile
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="zipFilePath">Percorso di lettura del dump cifrato (*.zip)</param>
|
||||||
|
/// <param name="dbName">Nome del DB da processare (se vuoto quello di default calcolato)</param>
|
||||||
|
/// <param name="tempFolder">Percorso cartella temp x esecuzione</param>
|
||||||
|
/// <param name="mysqlPath">Nome o Percorso Eseguibile mysql (opzionale)</param>
|
||||||
|
/// <param name="importOpt">Opzioni in fase di import (default: --force)</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool DataBaseRestoreFromFile(string zipFilePath, string dbName = "", string tempFolder="", string mysqlPath = "mysql", string importOpt = "--force")
|
||||||
|
{
|
||||||
|
bool fatto = false;
|
||||||
|
// fix path eseguibile
|
||||||
|
if (string.IsNullOrEmpty(mysqlPath))
|
||||||
|
{
|
||||||
|
mysqlPath = "mysql";
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(dbName))
|
||||||
|
{
|
||||||
|
dbName = DATABASE_NAME;
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(tempFolder))
|
||||||
|
{
|
||||||
|
tempFolder = "C:\\Temp";
|
||||||
|
}
|
||||||
|
// verifica zip finale
|
||||||
|
if (!zipFilePath.EndsWith(".zip"))
|
||||||
|
{
|
||||||
|
zipFilePath = $"{zipFilePath}.zip";
|
||||||
|
}
|
||||||
|
// elimino eventuale temp folder precedente...
|
||||||
|
if (Directory.Exists(tempFolder))
|
||||||
|
{
|
||||||
|
Directory.Delete(tempFolder, true);
|
||||||
|
}
|
||||||
|
Directory.CreateDirectory(tempFolder);
|
||||||
|
// scompatto file zip --> sql
|
||||||
|
using (ZipFile zip = ZipFile.Read(zipFilePath))
|
||||||
|
{
|
||||||
|
zip.Password = ZIP_PWD;
|
||||||
|
zip.ExtractAll(tempFolder, ExtractExistingFileAction.OverwriteSilently);
|
||||||
|
}
|
||||||
|
// verifico che ci sia 1 file sql...
|
||||||
|
var sqlFiles = Directory.GetFiles(tempFolder, "*.sql");
|
||||||
|
if (sqlFiles != null && sqlFiles.Length == 1)
|
||||||
|
{
|
||||||
|
// verifico nome file per export sql (temporaneo)
|
||||||
|
string tempSqlPath = sqlFiles.FirstOrDefault();
|
||||||
|
// chiamo script esterno...
|
||||||
|
string callScript = $"\"{mysqlPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} {importOpt} {dbName} < {tempSqlPath}";
|
||||||
|
ExecuteCommand(callScript);
|
||||||
|
// elimino il file sql importato...
|
||||||
|
File.Delete(tempSqlPath);
|
||||||
|
// elimino temp folder...
|
||||||
|
Directory.Delete(tempFolder, true);
|
||||||
|
fatto = true;
|
||||||
|
}
|
||||||
|
return fatto;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Esecuzione di un comando esterno
|
/// Esecuzione di un comando esterno
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -134,13 +233,12 @@ namespace EgtBEAMWALL.DataLayer
|
|||||||
process.Close();
|
process.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Metodo di init standard per DB in rete con Master_Key
|
/// Metodo di init standard per DB in rete con Master_Key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="server">Indirizzo del server (tipicamente indirizzo di rete)</param>
|
/// <param name="server">Indirizzo del server (tipicamente indirizzo di rete)</param>
|
||||||
/// <param name="nKey">Numero chiave</param>
|
/// <param name="nKey">Numero chiave</param>
|
||||||
/// <param name="sKey">Codice/pwd associato a chaive</param>
|
/// <param name="sKey">Codice/pwd associato a chiave</param>
|
||||||
/// <param name="masterKey">Numero di chiave master con cui è creato il DB</param>
|
/// <param name="masterKey">Numero di chiave master con cui è creato il DB</param>
|
||||||
public static void InitDb(string server, string nKey, string sKey, string masterKey = "")
|
public static void InitDb(string server, string nKey, string sKey, string masterKey = "")
|
||||||
{
|
{
|
||||||
@@ -150,6 +248,7 @@ namespace EgtBEAMWALL.DataLayer
|
|||||||
DATABASE_NAME = $"EgtBwDb_{masterKey}";
|
DATABASE_NAME = $"EgtBwDb_{masterKey}";
|
||||||
DATABASE_USER = $"user_{nKey}";
|
DATABASE_USER = $"user_{nKey}";
|
||||||
DATABASE_PWD = $"pwd_{sKey}";
|
DATABASE_PWD = $"pwd_{sKey}";
|
||||||
|
ZIP_PWD = $"{DATABASE_USER}:{DATABASE_PWD}:{DATABASE_USER}:{DATABASE_PWD}";
|
||||||
CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database={DATABASE_NAME};uid={DATABASE_USER};pwd={DATABASE_PWD};SslMode=None";
|
CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database={DATABASE_NAME};uid={DATABASE_USER};pwd={DATABASE_PWD};SslMode=None";
|
||||||
// stringa admin con utente root egalware...
|
// stringa admin con utente root egalware...
|
||||||
ADMIN_CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database=mysql;uid=root;pwd=Egalware_24068!;SslMode=none;CHARSET=utf8";
|
ADMIN_CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database=mysql;uid=root;pwd=Egalware_24068!;SslMode=none;CHARSET=utf8";
|
||||||
|
|||||||
@@ -40,6 +40,9 @@
|
|||||||
<Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
<Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
<HintPath>..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="EgtWPFLib5">
|
<Reference Include="EgtWPFLib5">
|
||||||
<HintPath>..\ExtLibs\EgtWPFLib5.dll</HintPath>
|
<HintPath>..\ExtLibs\EgtWPFLib5.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
||||||
|
<package id="DotNetZip" version="1.16.0" targetFramework="net472" />
|
||||||
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
||||||
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
||||||
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
||||||
|
|||||||
@@ -1,31 +1,51 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
<configSections>
|
||||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
||||||
</configSections>
|
</configSections>
|
||||||
<entityFramework>
|
<entityFramework>
|
||||||
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"/>
|
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
|
||||||
<providers>
|
<providers>
|
||||||
|
|
||||||
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
|
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
|
||||||
</providers>
|
</providers>
|
||||||
</entityFramework>
|
</entityFramework>
|
||||||
<connectionStrings>
|
<connectionStrings>
|
||||||
<add name="DefaultConnection" connectionString="server=localhost;port=3306;User Id=EgtUser;password=viacremasca;Persist Security Info=True;database=EgtBwDb;SslMode=none" providerName="MySql.Data.MySqlClient"/>
|
<add name="DefaultConnection" connectionString="server=localhost;port=3306;User Id=EgtUser;password=viacremasca;Persist Security Info=True;database=EgtBwDb;SslMode=none" providerName="MySql.Data.MySqlClient" />
|
||||||
</connectionStrings>
|
</connectionStrings>
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/>
|
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.10.9.0" newVersion="6.10.9.0"/>
|
<bindingRedirect oldVersion="0.0.0.0-6.10.9.0" newVersion="6.10.9.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-3.21.9.0" newVersion="3.21.9.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="K4os.Compression.LZ4.Streams" publicKeyToken="2186fa9121ef231d" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.3.5.0" newVersion="1.3.5.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.9.0.0" newVersion="1.9.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
<system.data>
|
<system.data>
|
||||||
<DbProviderFactories>
|
<DbProviderFactories>
|
||||||
<remove invariant="MySql.Data.MySqlClient"/>
|
<remove invariant="MySql.Data.MySqlClient" />
|
||||||
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
|
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
|
||||||
</DbProviderFactories>
|
</DbProviderFactories>
|
||||||
</system.data>
|
</system.data>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup></configuration>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>EgtBEAMWALL.StressTest</RootNamespace>
|
<RootNamespace>EgtBEAMWALL.StressTest</RootNamespace>
|
||||||
<AssemblyName>EgtBEAMWALL.StressTest</AssemblyName>
|
<AssemblyName>EgtBEAMWALL.StressTest</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ namespace EgtBEAMWALL.StressTest.Properties {
|
|||||||
// class via a tool like ResGen or Visual Studio.
|
// class via a tool like ResGen or Visual Studio.
|
||||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
// with the /str option, or rebuild your VS project.
|
// with the /str option, or rebuild your VS project.
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources {
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ namespace EgtBEAMWALL.StressTest.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|||||||
@@ -1,25 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace EgtBEAMWALL.StressTest
|
namespace EgtBEAMWALL.StressTest
|
||||||
{
|
{
|
||||||
public class Simulator
|
public class Simulator
|
||||||
{
|
{
|
||||||
#region Protected Fields
|
|
||||||
|
|
||||||
protected DataLayer.Controllers.BTLPartController BtlPartCtr = new DataLayer.Controllers.BTLPartController();
|
|
||||||
protected DataLayer.Controllers.MachGroupController MachGroupCtr = new DataLayer.Controllers.MachGroupController();
|
|
||||||
protected SimParams MaxParams = new SimParams();
|
|
||||||
|
|
||||||
protected DataLayer.Controllers.PartController PartCtr = new DataLayer.Controllers.PartController();
|
|
||||||
protected DataLayer.Controllers.ProdController ProdCtr = new DataLayer.Controllers.ProdController();
|
|
||||||
protected DataLayer.Controllers.ProjController ProjCtr = new DataLayer.Controllers.ProjController();
|
|
||||||
|
|
||||||
#endregion Protected Fields
|
|
||||||
|
|
||||||
#region Public Fields
|
#region Public Fields
|
||||||
|
|
||||||
public List<Core.BTLPartM> BtlPartList = new List<Core.BTLPartM>();
|
public List<Core.BTLPartM> BtlPartList = new List<Core.BTLPartM>();
|
||||||
@@ -30,30 +16,6 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
|
|
||||||
#endregion Public Fields
|
#endregion Public Fields
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// restituisce un set di parametri simulazione generando a caso dal set di base
|
|
||||||
/// </summary>
|
|
||||||
protected SimParams RandomParamSet
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Random rndGen = new Random();
|
|
||||||
SimParams answ = new SimParams()
|
|
||||||
{
|
|
||||||
BtlPart2Proj = rndGen.Next(MaxParams.BtlPart2Proj) + 1,
|
|
||||||
BtlRepeat = rndGen.Next(MaxParams.BtlRepeat) + 1,
|
|
||||||
Part2MachGroup = rndGen.Next(MaxParams.Part2MachGroup) + 1,
|
|
||||||
Proj2Prod = rndGen.Next(MaxParams.Proj2Prod) + 1
|
|
||||||
};
|
|
||||||
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -79,7 +41,7 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
List<DataLayer.DatabaseModels.BTLPartModel> currPartList = new List<DataLayer.DatabaseModels.BTLPartModel>();
|
List<DataLayer.DatabaseModels.BTLPartModel> currPartList = new List<DataLayer.DatabaseModels.BTLPartModel>();
|
||||||
List<Core.MyMachGroupM> currMachGroupList = new List<Core.MyMachGroupM>();
|
List<Core.MyMachGroupM> currMachGroupList = new List<Core.MyMachGroupM>();
|
||||||
List<Core.PartM> currMGPartList = new List<Core.PartM>();
|
List<Core.PartM> currMGPartList = new List<Core.PartM>();
|
||||||
ProjCtr.UpdateInfo(currProjId, $"{DateTime.Now:yyyyMMdd_HHmmssfff}", $"LN_{DateTime.Now:yyyyMMdd_HHmm}", DateTime.Now.AddSeconds(15), Core.ConstBeam.BWType.BEAM, "SIM01");
|
ProjCtr.UpdateInfo(currProjId, "TestBTL", $"{DateTime.Now:yyyyMMdd_HHmmssfff}", $"LN_{DateTime.Now:yyyyMMdd_HHmm}", DateTime.Now.AddSeconds(15), Core.ConstBeam.BWType.BEAM, "SIM01");
|
||||||
// genero le BTLParts ed assegno..
|
// genero le BTLParts ed assegno..
|
||||||
for (int j = 0; j < currRandom.BtlPart2Proj; j++)
|
for (int j = 0; j < currRandom.BtlPart2Proj; j++)
|
||||||
{
|
{
|
||||||
@@ -107,8 +69,8 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
{
|
{
|
||||||
for (int l = 0; l < currRandom.Part2MachGroup; l++)
|
for (int l = 0; l < currRandom.Part2MachGroup; l++)
|
||||||
{
|
{
|
||||||
// FixME!!! non può creare x loop in CreateBeamDL che vuole nParentMachGroup
|
// FixME!!! non può creare x loop in CreateBeamDL che vuole
|
||||||
// genero le Part x MachGroup ed assegno
|
// nParentMachGroup genero le Part x MachGroup ed assegno
|
||||||
Core.PartM currPart = Core.PartM.CreatePart(Core.ConstBeam.BWType.BEAM, currMachGroupList.FirstOrDefault(), currPartList[BPIdx].PartId, 1);
|
Core.PartM currPart = Core.PartM.CreatePart(Core.ConstBeam.BWType.BEAM, currMachGroupList.FirstOrDefault(), currPartList[BPIdx].PartId, 1);
|
||||||
currMGPartList.Add(currPart);
|
currMGPartList.Add(currPart);
|
||||||
//currMGPartList.Add(new DataLayer.DatabaseModels.PartModel() { BTLPartDbId = currBTLPart.BTLPartDbId, PDN = l * k * currRandom.Part2MachGroup, PartId = l, H = 10 * l, L = 50 * l, W = 5 * l });
|
//currMGPartList.Add(new DataLayer.DatabaseModels.PartModel() { BTLPartDbId = currBTLPart.BTLPartDbId, PDN = l * k * currRandom.Part2MachGroup, PartId = l, H = 10 * l, L = 50 * l, W = 5 * l });
|
||||||
@@ -138,9 +100,45 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
|
|
||||||
public void initDb()
|
public void initDb()
|
||||||
{
|
{
|
||||||
var firstData = ProjCtr.GetLastDesc(1);
|
var firstData = ProjCtr.GetLastDesc(1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected DataLayer.Controllers.BTLPartController BtlPartCtr = new DataLayer.Controllers.BTLPartController();
|
||||||
|
protected DataLayer.Controllers.MachGroupController MachGroupCtr = new DataLayer.Controllers.MachGroupController();
|
||||||
|
protected SimParams MaxParams = new SimParams();
|
||||||
|
|
||||||
|
protected DataLayer.Controllers.PartController PartCtr = new DataLayer.Controllers.PartController();
|
||||||
|
protected DataLayer.Controllers.ProdController ProdCtr = new DataLayer.Controllers.ProdController();
|
||||||
|
protected DataLayer.Controllers.ProjController ProjCtr = new DataLayer.Controllers.ProjController();
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Properties
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// restituisce un set di parametri simulazione generando a caso dal set di base
|
||||||
|
/// </summary>
|
||||||
|
protected SimParams RandomParamSet
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Random rndGen = new Random();
|
||||||
|
SimParams answ = new SimParams()
|
||||||
|
{
|
||||||
|
BtlPart2Proj = rndGen.Next(MaxParams.BtlPart2Proj) + 1,
|
||||||
|
BtlRepeat = rndGen.Next(MaxParams.BtlRepeat) + 1,
|
||||||
|
Part2MachGroup = rndGen.Next(MaxParams.Part2MachGroup) + 1,
|
||||||
|
Proj2Prod = rndGen.Next(MaxParams.Proj2Prod) + 1
|
||||||
|
};
|
||||||
|
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+49
-1
@@ -35,6 +35,10 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
this.buttonDataSeed = new System.Windows.Forms.Button();
|
this.buttonDataSeed = new System.Windows.Forms.Button();
|
||||||
this.labelResult = new System.Windows.Forms.Label();
|
this.labelResult = new System.Windows.Forms.Label();
|
||||||
|
this.btnDbDump = new System.Windows.Forms.Button();
|
||||||
|
this.btnDbRestore = new System.Windows.Forms.Button();
|
||||||
|
this.txtDumpFile = new System.Windows.Forms.TextBox();
|
||||||
|
this.txtDbName = new System.Windows.Forms.TextBox();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -92,17 +96,57 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
// labelResult
|
// labelResult
|
||||||
//
|
//
|
||||||
this.labelResult.AutoSize = true;
|
this.labelResult.AutoSize = true;
|
||||||
this.labelResult.Location = new System.Drawing.Point(479, 91);
|
this.labelResult.Location = new System.Drawing.Point(250, 75);
|
||||||
this.labelResult.Name = "labelResult";
|
this.labelResult.Name = "labelResult";
|
||||||
this.labelResult.Size = new System.Drawing.Size(35, 13);
|
this.labelResult.Size = new System.Drawing.Size(35, 13);
|
||||||
this.labelResult.TabIndex = 4;
|
this.labelResult.TabIndex = 4;
|
||||||
this.labelResult.Text = "label2";
|
this.labelResult.Text = "label2";
|
||||||
//
|
//
|
||||||
|
// btnDbDump
|
||||||
|
//
|
||||||
|
this.btnDbDump.Location = new System.Drawing.Point(18, 136);
|
||||||
|
this.btnDbDump.Name = "btnDbDump";
|
||||||
|
this.btnDbDump.Size = new System.Drawing.Size(75, 45);
|
||||||
|
this.btnDbDump.TabIndex = 5;
|
||||||
|
this.btnDbDump.Text = "DB Dump";
|
||||||
|
this.btnDbDump.UseVisualStyleBackColor = true;
|
||||||
|
this.btnDbDump.Click += new System.EventHandler(this.btnDbDump_Click);
|
||||||
|
//
|
||||||
|
// btnDbRestore
|
||||||
|
//
|
||||||
|
this.btnDbRestore.Location = new System.Drawing.Point(338, 136);
|
||||||
|
this.btnDbRestore.Name = "btnDbRestore";
|
||||||
|
this.btnDbRestore.Size = new System.Drawing.Size(75, 45);
|
||||||
|
this.btnDbRestore.TabIndex = 6;
|
||||||
|
this.btnDbRestore.Text = "DB Restore";
|
||||||
|
this.btnDbRestore.UseVisualStyleBackColor = true;
|
||||||
|
this.btnDbRestore.Click += new System.EventHandler(this.btnDbRestore_Click);
|
||||||
|
//
|
||||||
|
// txtDumpFile
|
||||||
|
//
|
||||||
|
this.txtDumpFile.Location = new System.Drawing.Point(118, 161);
|
||||||
|
this.txtDumpFile.Name = "txtDumpFile";
|
||||||
|
this.txtDumpFile.Size = new System.Drawing.Size(186, 20);
|
||||||
|
this.txtDumpFile.TabIndex = 3;
|
||||||
|
this.txtDumpFile.Text = "C:\\Temp\\MyDbDump.zip";
|
||||||
|
//
|
||||||
|
// txtDbName
|
||||||
|
//
|
||||||
|
this.txtDbName.Location = new System.Drawing.Point(118, 136);
|
||||||
|
this.txtDbName.Name = "txtDbName";
|
||||||
|
this.txtDbName.Size = new System.Drawing.Size(186, 20);
|
||||||
|
this.txtDbName.TabIndex = 7;
|
||||||
|
this.txtDbName.Text = "egtbwdb_000142";
|
||||||
|
//
|
||||||
// StressTest
|
// StressTest
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||||
|
this.Controls.Add(this.txtDbName);
|
||||||
|
this.Controls.Add(this.txtDumpFile);
|
||||||
|
this.Controls.Add(this.btnDbRestore);
|
||||||
|
this.Controls.Add(this.btnDbDump);
|
||||||
this.Controls.Add(this.labelResult);
|
this.Controls.Add(this.labelResult);
|
||||||
this.Controls.Add(this.groupBox1);
|
this.Controls.Add(this.groupBox1);
|
||||||
this.Name = "StressTest";
|
this.Name = "StressTest";
|
||||||
@@ -122,6 +166,10 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
private System.Windows.Forms.GroupBox groupBox1;
|
private System.Windows.Forms.GroupBox groupBox1;
|
||||||
private System.Windows.Forms.Button buttonDataSeed;
|
private System.Windows.Forms.Button buttonDataSeed;
|
||||||
private System.Windows.Forms.Label labelResult;
|
private System.Windows.Forms.Label labelResult;
|
||||||
|
private System.Windows.Forms.Button btnDbDump;
|
||||||
|
private System.Windows.Forms.Button btnDbRestore;
|
||||||
|
private System.Windows.Forms.TextBox txtDumpFile;
|
||||||
|
private System.Windows.Forms.TextBox txtDbName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,25 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace EgtBEAMWALL.StressTest
|
namespace EgtBEAMWALL.StressTest
|
||||||
{
|
{
|
||||||
public partial class StressTest : Form
|
public partial class StressTest : Form
|
||||||
{
|
{
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
public StressTest()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
// init cablato sul mio DB
|
||||||
|
DataLayer.DbConfig.InitDb("127.0.0.1", "000470", "36311", "000470");
|
||||||
|
//// warm up DB
|
||||||
|
//CurrSim.initDb();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -21,17 +29,6 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
public StressTest()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
// warm up DB
|
|
||||||
CurrSim.initDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
protected int numProj
|
protected int numProj
|
||||||
@@ -52,6 +49,54 @@ namespace EgtBEAMWALL.StressTest
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
private void btnDbDump_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show("Sicuro di voler generare il dump del DB corrente?", "DB Dump", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
labelResult.Text = "...";
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
sw.Start();
|
||||||
|
//string binPath = "C:\\Program Files\\MariaDB 10.5\\bin";
|
||||||
|
//string myDumpPath = Path.Combine(binPath, "mysqldump.exe");
|
||||||
|
string outPath = txtDumpFile.Text.Trim();
|
||||||
|
string dbName = txtDbName.Text.Trim();
|
||||||
|
if (!string.IsNullOrEmpty(outPath))
|
||||||
|
{
|
||||||
|
// effettua dump
|
||||||
|
//DataLayer.DbConfig.DataBaseDumpToFile(outPath, "mysqldump");
|
||||||
|
//DataLayer.DbConfig.DataBaseDumpToFile(outPath, "mysqldump", "--skip-extended-insert");
|
||||||
|
DataLayer.DbConfig.DataBaseDumpToFile(outPath, dbName);
|
||||||
|
sw.Stop();
|
||||||
|
var elapsed = sw.Elapsed;
|
||||||
|
labelResult.Text = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss} | Dump Done in {elapsed.TotalSeconds:N3} sec!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnDbRestore_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show("Sicuro di voler ripristinare il file dump sul DB corrente?", "DB Restore", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
labelResult.Text = "...";
|
||||||
|
string inPath = txtDumpFile.Text.Trim();
|
||||||
|
string dbName = txtDbName.Text.Trim();
|
||||||
|
string tempFolder = Path.Combine(Path.GetDirectoryName(inPath), "DbRestore");
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
sw.Start();
|
||||||
|
// effettua restore
|
||||||
|
DataLayer.DbConfig.DataBaseRestoreFromFile(inPath, dbName, tempFolder); sw.Stop();
|
||||||
|
//string binPath = "C:\\Program Files\\MariaDB 10.5\\bin";
|
||||||
|
//string mysqlPath = Path.Combine(binPath, "mysql.exe");
|
||||||
|
//DataLayer.DbConfig.DataBaseRestoreFromFile(inPath, "mysql");
|
||||||
|
var elapsed = sw.Elapsed;
|
||||||
|
labelResult.Text = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss} | Restore Done in {elapsed.TotalSeconds:N3} sec!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void buttonDataSeed_Click(object sender, EventArgs e)
|
private void buttonDataSeed_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// genero dati col SIM
|
// genero dati col SIM
|
||||||
|
|||||||
@@ -149,6 +149,9 @@
|
|||||||
<Reference Include="Csv, Version=1.0.31.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Csv, Version=1.0.31.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Csv.1.0.31\lib\net40\Csv.dll</HintPath>
|
<HintPath>..\packages\Csv.1.0.31\lib\net40\Csv.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="EgtUILib, Version=2.4.3.1, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="EgtUILib, Version=2.4.3.1, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ExtLibs\EgtUILib.dll</HintPath>
|
<HintPath>..\ExtLibs\EgtUILib.dll</HintPath>
|
||||||
@@ -177,9 +180,6 @@
|
|||||||
<HintPath>..\ExtLibs\Interop.FXServer.dll</HintPath>
|
<HintPath>..\ExtLibs\Interop.FXServer.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Ionic.Zip.1.9.1.8\lib\Ionic.Zip.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="ISOCNC.Remoting">
|
<Reference Include="ISOCNC.Remoting">
|
||||||
<HintPath>..\ExtLibs\ISOCNC.Remoting.dll</HintPath>
|
<HintPath>..\ExtLibs\ISOCNC.Remoting.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</configSections>
|
</configSections>
|
||||||
<entityFramework>
|
<entityFramework>
|
||||||
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
||||||
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
|
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
|
||||||
<providers>
|
<providers>
|
||||||
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
||||||
</provider>
|
</provider>
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
||||||
<package id="Csv" version="1.0.31" targetFramework="net472" />
|
<package id="Csv" version="1.0.31" targetFramework="net472" />
|
||||||
|
<package id="DotNetZip" version="1.16.0" targetFramework="net472" />
|
||||||
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
||||||
<package id="FluentFTP" version="19.2.2" targetFramework="net472" />
|
<package id="FluentFTP" version="19.2.2" targetFramework="net472" />
|
||||||
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
||||||
<package id="Ionic.Zip" version="1.9.1.8" targetFramework="net472" />
|
|
||||||
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
||||||
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net472" />
|
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net472" />
|
||||||
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net472" />
|
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net472" />
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</configSections>
|
</configSections>
|
||||||
<entityFramework>
|
<entityFramework>
|
||||||
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
|
||||||
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
|
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
|
||||||
<providers>
|
<providers>
|
||||||
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
|
||||||
</provider>
|
</provider>
|
||||||
@@ -41,6 +41,14 @@
|
|||||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
<system.data>
|
<system.data>
|
||||||
|
|||||||
@@ -71,6 +71,64 @@
|
|||||||
<CheckBox IsChecked="{Binding bPrintLabel_IsChecked}"
|
<CheckBox IsChecked="{Binding bPrintLabel_IsChecked}"
|
||||||
Margin="0,5,0,0"/>
|
Margin="0,5,0,0"/>
|
||||||
</UniformGrid>
|
</UniformGrid>
|
||||||
|
<GroupBox Header="Backup And Restore">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid Grid.Row="0"
|
||||||
|
Margin="0,2,0,5">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="1*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<CheckBox x:Name="ExternalBackup_CheckBox"
|
||||||
|
IsChecked="{Binding bExternalBackupActive}"
|
||||||
|
VerticalAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Text="External file path:"
|
||||||
|
VerticalAlignment="Center"/>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="1"
|
||||||
|
Margin="0,2,0,5">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBox Text="{Binding ExternalBackupFolderPath}"
|
||||||
|
IsEnabled="{Binding IsChecked, ElementName=ExternalBackup_CheckBox}"
|
||||||
|
Margin="0,0,2.5,0"/>
|
||||||
|
<Button Grid.Column="1"
|
||||||
|
Content="..."
|
||||||
|
Width="18"
|
||||||
|
Command="{Binding ChooseExternalBackupFolderPath_Command}"
|
||||||
|
IsEnabled="{Binding IsChecked, ElementName=ExternalBackup_CheckBox}"
|
||||||
|
Margin="2.5,0,0,0"/>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="2">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock Text="Reminder Frequency"/>
|
||||||
|
<ComboBox Grid.Column="1"
|
||||||
|
ItemsSource="{Binding ReminderList}"
|
||||||
|
SelectedItem="{Binding SelReminder}"/>
|
||||||
|
</Grid>
|
||||||
|
<StackPanel Grid.Row="3"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<Button Content="Backup"
|
||||||
|
Command="{Binding Backup_Command}"
|
||||||
|
Style="{StaticResource ToolBar_TextButton}"/>
|
||||||
|
<Button Content="Restore"
|
||||||
|
Command="{Binding Restore_Command}"
|
||||||
|
Style="{StaticResource ToolBar_TextButton}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem.Content>
|
</TabItem.Content>
|
||||||
|
|||||||
@@ -3,6 +3,12 @@ Imports System.IO
|
|||||||
Imports EgtUILib
|
Imports EgtUILib
|
||||||
Imports EgtWPFLib5
|
Imports EgtWPFLib5
|
||||||
Imports EgtBEAMWALL.Core
|
Imports EgtBEAMWALL.Core
|
||||||
|
Imports MS.Internal
|
||||||
|
Imports Org.BouncyCastle.X509
|
||||||
|
Imports Ionic.Zip
|
||||||
|
Imports Org.BouncyCastle.Bcpg
|
||||||
|
Imports Microsoft.VisualBasic.ApplicationServices
|
||||||
|
Imports Renci.SshNet.Security
|
||||||
|
|
||||||
Public Class ConfigurationPageVM
|
Public Class ConfigurationPageVM
|
||||||
Inherits VMBase
|
Inherits VMBase
|
||||||
@@ -36,8 +42,6 @@ Public Class ConfigurationPageVM
|
|||||||
' flag modifica parametri Macchina
|
' flag modifica parametri Macchina
|
||||||
Friend bModifyMachParam As Boolean
|
Friend bModifyMachParam As Boolean
|
||||||
|
|
||||||
' Definizione comandi
|
|
||||||
Private m_cmdSave As ICommand
|
|
||||||
|
|
||||||
Public ReadOnly Property MachinePanelVM As MachinePanelVM
|
Public ReadOnly Property MachinePanelVM As MachinePanelVM
|
||||||
Get
|
Get
|
||||||
@@ -160,6 +164,66 @@ Public Class ConfigurationPageVM
|
|||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
Private m_bBackupRunning As Boolean = False
|
||||||
|
Public ReadOnly Property bBackupRunning As Boolean
|
||||||
|
Get
|
||||||
|
Return m_bBackupRunning
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_bRestoreRunning As Boolean = False
|
||||||
|
Public ReadOnly Property bRestoreRunning As Boolean
|
||||||
|
Get
|
||||||
|
Return m_bRestoreRunning
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_bExternalBackupActive As Boolean
|
||||||
|
Public Property bExternalBackupActive As Boolean
|
||||||
|
Get
|
||||||
|
Return m_bExternalBackupActive
|
||||||
|
End Get
|
||||||
|
Set(value As Boolean)
|
||||||
|
m_bExternalBackupActive = value
|
||||||
|
WriteMainPrivateProfileString(S_BACKUPANDRESTORE, K_EXTERNALBACKUPACTIVE, If(m_bExternalBackupActive, 1, 0))
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_ExternalBackupFolderPath As String
|
||||||
|
Public Property ExternalBackupFolderPath As String
|
||||||
|
Get
|
||||||
|
Return m_ExternalBackupFolderPath
|
||||||
|
End Get
|
||||||
|
Set(value As String)
|
||||||
|
m_ExternalBackupFolderPath = value
|
||||||
|
WriteMainPrivateProfileString(S_BACKUPANDRESTORE, K_EXTERNALFILEPATH, m_ExternalBackupFolderPath)
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_ReminderList As New List(Of IdNameStruct)({New IdNameStruct(0, "Never"), New IdNameStruct(1, "1 day"), New IdNameStruct(2, "2 days"), New IdNameStruct(7, "1 week"), New IdNameStruct(14, "2 weeks"), New IdNameStruct(30, "1 month")})
|
||||||
|
Public ReadOnly Property ReminderList As List(Of IdNameStruct)
|
||||||
|
Get
|
||||||
|
Return m_ReminderList
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_SelReminder As IdNameStruct
|
||||||
|
Public Property SelReminder As IdNameStruct
|
||||||
|
Get
|
||||||
|
Return m_SelReminder
|
||||||
|
End Get
|
||||||
|
Set(value As IdNameStruct)
|
||||||
|
m_SelReminder = value
|
||||||
|
WriteMainPrivateProfileString(S_BACKUPANDRESTORE, K_REMINDERFREQUENCY, m_SelReminder.Id)
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
' Definizione comandi
|
||||||
|
Private m_cmdSave As ICommand
|
||||||
|
Private m_cmdChooseExternalBackupFolderPath As ICommand
|
||||||
|
Private m_cmdBackup As ICommand
|
||||||
|
Private m_cmdRestore As ICommand
|
||||||
|
|
||||||
#Region "Messages"
|
#Region "Messages"
|
||||||
|
|
||||||
Public ReadOnly Property L_Msg As String
|
Public ReadOnly Property L_Msg As String
|
||||||
@@ -327,7 +391,7 @@ Public Class ConfigurationPageVM
|
|||||||
' leggo SectionTime e PartTime
|
' leggo SectionTime e PartTime
|
||||||
GetMainPrivateProfileString(S_NEST, K_SECTIONTIME, "", SectionTime)
|
GetMainPrivateProfileString(S_NEST, K_SECTIONTIME, "", SectionTime)
|
||||||
GetMainPrivateProfileString(S_NEST, K_PARTTIME, "", PartTime)
|
GetMainPrivateProfileString(S_NEST, K_PARTTIME, "", PartTime)
|
||||||
m_bPrintLabel_IsChecked = ( GetMainPrivateProfileInt(S_PRINTER, K_ENABLE, 0) <> 0)
|
m_bPrintLabel_IsChecked = (GetMainPrivateProfileInt(S_PRINTER, K_ENABLE, 0) <> 0)
|
||||||
' assegno le liste dei parametri della macchina corrente alla ConfigMachTableList alla pagina di Configurazione
|
' assegno le liste dei parametri della macchina corrente alla ConfigMachTableList alla pagina di Configurazione
|
||||||
ConfigMachTableList = CurrentMachine.MachTableList
|
ConfigMachTableList = CurrentMachine.MachTableList
|
||||||
' carico i parametri Q dei Process letti dall'ini
|
' carico i parametri Q dei Process letti dall'ini
|
||||||
@@ -346,10 +410,19 @@ Public Class ConfigurationPageVM
|
|||||||
m_QBTLParamVMList_View = CollectionViewSource.GetDefaultView(m_QBTLParamVMList)
|
m_QBTLParamVMList_View = CollectionViewSource.GetDefaultView(m_QBTLParamVMList)
|
||||||
m_QBTLParamVMList_View.GroupDescriptions.Add(New PropertyGroupDescription(NameOf(QBTLParamVM.GroupType)))
|
m_QBTLParamVMList_View.GroupDescriptions.Add(New PropertyGroupDescription(NameOf(QBTLParamVM.GroupType)))
|
||||||
m_QBTLParamVMList_View.GroupDescriptions.Add(New PropertyGroupDescription(NameOf(QBTLParamVM.ghDesc)))
|
m_QBTLParamVMList_View.GroupDescriptions.Add(New PropertyGroupDescription(NameOf(QBTLParamVM.ghDesc)))
|
||||||
|
' leggo dati per backup
|
||||||
|
GetMainPrivateProfileString(S_BACKUPANDRESTORE, K_EXTERNALFILEPATH, "", m_ExternalBackupFolderPath)
|
||||||
|
Dim nDefaultReminderFrequency As Integer = GetMainPrivateProfileInt(S_BACKUPANDRESTORE, K_REMINDERFREQUENCY, 1)
|
||||||
|
SelReminder = m_ReminderList.FirstOrDefault(Function(x) x.Id = nDefaultReminderFrequency)
|
||||||
|
Dim nExternalBackupActive As Integer = GetMainPrivateProfileInt(S_BACKUPANDRESTORE, K_EXTERNALBACKUPACTIVE, 0)
|
||||||
|
m_bExternalBackupActive = nExternalBackupActive > 0
|
||||||
|
NotifyPropertyChanged(NameOf(bExternalBackupActive))
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
#End Region ' Constructor
|
#End Region ' Constructor
|
||||||
|
|
||||||
|
#Region "COMMANDS"
|
||||||
|
|
||||||
#Region "SaveCommand"
|
#Region "SaveCommand"
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -373,6 +446,333 @@ Public Class ConfigurationPageVM
|
|||||||
|
|
||||||
#End Region ' SaveCommand
|
#End Region ' SaveCommand
|
||||||
|
|
||||||
|
#Region "ChooseExternalBackupFolderPath"
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Returns a command that do Save.
|
||||||
|
''' </summary>
|
||||||
|
Public ReadOnly Property ChooseExternalBackupFolderPath_Command As ICommand
|
||||||
|
Get
|
||||||
|
If m_cmdChooseExternalBackupFolderPath Is Nothing Then
|
||||||
|
m_cmdChooseExternalBackupFolderPath = New Command(AddressOf ChooseExternalBackupFolderPath)
|
||||||
|
End If
|
||||||
|
Return m_cmdChooseExternalBackupFolderPath
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Execute the Save. This method is invoked by the SaveCommand.
|
||||||
|
''' </summary>
|
||||||
|
Public Sub ChooseExternalBackupFolderPath()
|
||||||
|
'Dim FileDialog As New System.Windows.Forms.FolderBrowserDialog With {.SelectedPath = m_ExternalBackupFolderPath,
|
||||||
|
' .Description = "Backup & Restore File Path"}
|
||||||
|
Dim FileDialog As New Microsoft.Win32.SaveFileDialog() With {.InitialDirectory = m_ExternalBackupFolderPath,
|
||||||
|
.CheckFileExists = False,
|
||||||
|
.CheckPathExists = False,
|
||||||
|
.DefaultExt = ".folder",
|
||||||
|
.OverwritePrompt = False,
|
||||||
|
.FileName = "Select this ",
|
||||||
|
.Title = "Backup & Restore File Path"}
|
||||||
|
If FileDialog.ShowDialog() Then
|
||||||
|
m_ExternalBackupFolderPath = Path.GetDirectoryName(FileDialog.FileName)
|
||||||
|
WriteMainPrivateProfileString(S_BACKUPANDRESTORE, K_EXTERNALFILEPATH, m_ExternalBackupFolderPath)
|
||||||
|
NotifyPropertyChanged(NameOf(ExternalBackupFolderPath))
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
#End Region ' ChooseExternalBackupFolderPath
|
||||||
|
|
||||||
|
#Region "Backup"
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Returns a command that do Save.
|
||||||
|
''' </summary>
|
||||||
|
Public ReadOnly Property Backup_Command As ICommand
|
||||||
|
Get
|
||||||
|
If m_cmdBackup Is Nothing Then
|
||||||
|
m_cmdBackup = New Command(AddressOf BackupCmd)
|
||||||
|
End If
|
||||||
|
Return m_cmdBackup
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Execute the Save. This method is invoked by the SaveCommand.
|
||||||
|
''' </summary>
|
||||||
|
Public Sub BackupCmd()
|
||||||
|
Backup(True)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub Backup(bLoadingWindow As Boolean)
|
||||||
|
m_bBackupRunning = True
|
||||||
|
' verifico se esiste cartella backup, altrimenti la creo
|
||||||
|
Dim sBackupFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir & "\Backup"
|
||||||
|
If Directory.Exists(sBackupFolder) Then
|
||||||
|
' verifico se devo cancellare backup vecchi
|
||||||
|
Dim nBackupCount As Integer = 0
|
||||||
|
Dim YearDirList() As String = Directory.GetDirectories(sBackupFolder)
|
||||||
|
For YearIndex = YearDirList.Length - 1 To 0 Step -1
|
||||||
|
Dim nYear As Integer = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(YearDirList(YearIndex)), nYear)
|
||||||
|
Dim sYearDir As String = sBackupFolder & "\" & nYear
|
||||||
|
Dim MonthDirList() As String = Directory.GetDirectories(sYearDir)
|
||||||
|
For MonthIndex = MonthDirList.Length - 1 To 0 Step -1
|
||||||
|
Dim nMonth As Integer = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(MonthDirList(MonthIndex)), nMonth)
|
||||||
|
Dim sMonthDir As String = sYearDir & "\" & nMonth
|
||||||
|
Dim DayDirList() As String = Directory.GetDirectories(sMonthDir)
|
||||||
|
For DayIndex = DayDirList.Length - 1 To 0 Step -1
|
||||||
|
Dim nDay As Integer = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(DayDirList(DayIndex)), nDay)
|
||||||
|
If nBackupCount > 3 Then
|
||||||
|
Directory.Delete(sBackupFolder & "\" & nYear & "\" & nMonth & "\" & nDay, True)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
DayDirList = Directory.GetDirectories(sMonthDir)
|
||||||
|
If IsNothing(DayDirList) OrElse DayDirList.Length = 0 Then
|
||||||
|
Directory.Delete(sMonthDir)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
MonthDirList = Directory.GetDirectories(sYearDir)
|
||||||
|
If IsNothing(MonthDirList) OrElse MonthDirList.Length = 0 Then
|
||||||
|
Directory.Delete(sYearDir)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Else
|
||||||
|
Directory.CreateDirectory(sBackupFolder)
|
||||||
|
End If
|
||||||
|
sBackupFolder &= "\" & DateTime.Now().Year
|
||||||
|
If Not Directory.Exists(sBackupFolder) Then
|
||||||
|
Directory.CreateDirectory(sBackupFolder)
|
||||||
|
End If
|
||||||
|
sBackupFolder &= "\" & DateTime.Now().Month
|
||||||
|
If Not Directory.Exists(sBackupFolder) Then
|
||||||
|
Directory.CreateDirectory(sBackupFolder)
|
||||||
|
End If
|
||||||
|
sBackupFolder &= "\" & DateTime.Now().Day
|
||||||
|
If Not Directory.Exists(sBackupFolder) Then
|
||||||
|
Directory.CreateDirectory(sBackupFolder)
|
||||||
|
End If
|
||||||
|
sBackupFolder &= "\" & DateTime.Now().ToString("yyyyMMddHHmmss") & ".bwbck"
|
||||||
|
Dim sBackupZipPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\DbBackup.zip"
|
||||||
|
' apro finestra di caricamento
|
||||||
|
If bLoadingWindow Then LoadingWndHelper.OpenLoadingWnd(ActiveIds.BACKUP, 2, "Backup", "Database backup", 15) ' Backup ' Database backup
|
||||||
|
Dim bOk As Boolean = True
|
||||||
|
' backup del Db corrente
|
||||||
|
Try
|
||||||
|
DataLayer.DbConfig.DataBaseDumpToFile(sBackupZipPath)
|
||||||
|
Catch ex As Exception
|
||||||
|
MessageBox.Show("Backup failed! Impossible to create the backup package!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
bOk = False
|
||||||
|
End Try
|
||||||
|
If bOk AndAlso File.Exists(sBackupZipPath) Then
|
||||||
|
If bLoadingWindow Then LoadingWndHelper.UpdateLoadingWnd(ActiveIds.BACKUP, 2, "Projects backup", 15, 100) ' Projects backup
|
||||||
|
' backup dei progetti correnti
|
||||||
|
Try
|
||||||
|
Using zip As New Ionic.Zip.ZipFile(sBackupFolder, Console.Out)
|
||||||
|
zip.AlternateEncodingUsage = ZipOption.Always
|
||||||
|
zip.AlternateEncoding = Text.Encoding.UTF8
|
||||||
|
zip.CompressionMethod = CompressionMethod.None
|
||||||
|
' aggiungo Db
|
||||||
|
zip.AddItem(sBackupZipPath, "")
|
||||||
|
' aggiungo cartella progetti
|
||||||
|
Dim sProjectFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir & "\"
|
||||||
|
Dim sKey As String = ""
|
||||||
|
EgtGetKeyInfo(sKey)
|
||||||
|
sKey = sKey.Replace(" ", "")
|
||||||
|
Dim sUserFolder As String = ""
|
||||||
|
If Not IsNothing(sKey) AndAlso sKey.Length > 11 Then
|
||||||
|
sUserFolder = sKey.Substring(3, 6)
|
||||||
|
sProjectFolder &= sUserFolder
|
||||||
|
End If
|
||||||
|
zip.AddItem(sProjectFolder, sUserFolder)
|
||||||
|
' salvo lo zip
|
||||||
|
zip.Save()
|
||||||
|
End Using
|
||||||
|
Catch ex As Exception
|
||||||
|
MessageBox.Show("Backup failed! Impossible to create the backup package!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
bOk = False
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
' se esiste zip del Db, lo elimino
|
||||||
|
If File.Exists(sBackupZipPath) Then
|
||||||
|
File.Delete(sBackupZipPath)
|
||||||
|
End If
|
||||||
|
' se richiesto faccio copia su external source
|
||||||
|
If m_bExternalBackupActive Then
|
||||||
|
If Directory.Exists(m_ExternalBackupFolderPath) Then
|
||||||
|
CopyForExternalBackup(sBackupFolder, m_ExternalBackupFolderPath)
|
||||||
|
Else
|
||||||
|
MessageBox.Show("External folder does not exist or is not reachable! Copy to external folder impossible!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
'chiudo finestra di caricamento
|
||||||
|
If bLoadingWindow Then LoadingWndHelper.CloseLoadingWnd(ActiveIds.BACKUP)
|
||||||
|
m_bBackupRunning = False
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Async Sub CopyForExternalBackup(sBackupFile As String, sExternalBackupFolder As String)
|
||||||
|
Using SourceStream As FileStream = File.Open(sBackupFile, FileMode.Open)
|
||||||
|
Dim sExternalBackupFile As String = sExternalBackupFolder & "\" & Path.GetFileName(sBackupFile)
|
||||||
|
Using DestinationStream As FileStream = File.Create(sExternalBackupFile)
|
||||||
|
Await SourceStream.CopyToAsync(DestinationStream)
|
||||||
|
End Using
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
#End Region ' Backup
|
||||||
|
|
||||||
|
#Region "Restore"
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Returns a command that do Save.
|
||||||
|
''' </summary>
|
||||||
|
Public ReadOnly Property Restore_Command As ICommand
|
||||||
|
Get
|
||||||
|
If m_cmdRestore Is Nothing Then
|
||||||
|
m_cmdRestore = New Command(AddressOf Restore)
|
||||||
|
End If
|
||||||
|
Return m_cmdRestore
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Execute the Save. This method is invoked by the SaveCommand.
|
||||||
|
''' </summary>
|
||||||
|
Public Sub Restore()
|
||||||
|
' recupero processo del supervisore
|
||||||
|
Dim sSupervisorName As String = "EgtBEAMWALL.SupervisorR32"
|
||||||
|
Dim localProc As Process() = Process.GetProcessesByName(sSupervisorName)
|
||||||
|
' verifico che sia chiuso
|
||||||
|
If localProc.Length > 0 Then
|
||||||
|
MessageBox.Show("Please verify the machine is stoped and close the supervisor before proceding with the restore operation!", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
|
||||||
|
Return
|
||||||
|
End If
|
||||||
|
m_bRestoreRunning = True
|
||||||
|
' verifico se esiste backup
|
||||||
|
Dim sBackupFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir & "\Backup"
|
||||||
|
Dim nYear As Integer = 0
|
||||||
|
Dim nMonth As Integer = 0
|
||||||
|
Dim nDay As Integer = 0
|
||||||
|
Dim sRestorePath As String = ""
|
||||||
|
If Directory.Exists(sBackupFolder) Then
|
||||||
|
Dim YearDirList() As String = Directory.GetDirectories(sBackupFolder)
|
||||||
|
For YearIndex = YearDirList.Length - 1 To 0 Step -1
|
||||||
|
nYear = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(YearDirList(YearIndex)), nYear)
|
||||||
|
Dim sYearDir As String = sBackupFolder & "\" & nYear
|
||||||
|
Dim MonthDirList() As String = Directory.GetDirectories(sYearDir)
|
||||||
|
For MonthIndex = MonthDirList.Length - 1 To 0 Step -1
|
||||||
|
nMonth = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(MonthDirList(MonthIndex)), nMonth)
|
||||||
|
Dim sMonthDir As String = sYearDir & "\" & nMonth
|
||||||
|
Dim DayDirList() As String = Directory.GetDirectories(sMonthDir)
|
||||||
|
For DayIndex = DayDirList.Length - 1 To 0 Step -1
|
||||||
|
nDay = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(DayDirList(DayIndex)), nDay)
|
||||||
|
Dim sDayDir As String = sMonthDir & "\" & nDay
|
||||||
|
Dim VersionList() As String = Directory.GetFiles(sDayDir)
|
||||||
|
If VersionList.Length > 0 Then
|
||||||
|
Dim nMaxVersion As Int64 = VersionList.Max(Function(x) Int64.Parse(Path.GetFileNameWithoutExtension(x)))
|
||||||
|
sRestorePath = sDayDir & "\" & nMaxVersion & ".bwbck"
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If Not String.IsNullOrEmpty(sRestorePath) Then Exit For
|
||||||
|
Next
|
||||||
|
If Not String.IsNullOrEmpty(sRestorePath) Then Exit For
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
If String.IsNullOrEmpty(sRestorePath) Then
|
||||||
|
MessageBox.Show("Restore impossible! Last backup not found!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
End If
|
||||||
|
If MessageBox.Show("Are you sure you want to restore the last backup from " & nYear & "\" & nMonth & "\" & nDay & "? If you proceed you will lose actual data!", "Warning", MessageBoxButton.OKCancel, MessageBoxImage.Warning) <> MessageBoxResult.OK Then Return
|
||||||
|
Dim bDoBackup = False
|
||||||
|
Select Case MessageBox.Show("Do you want to do a backup of the current project before proceding with the restore?", "Information", MessageBoxButton.YesNoCancel, MessageBoxImage.Information)
|
||||||
|
Case MessageBoxResult.Yes
|
||||||
|
bDoBackup = True
|
||||||
|
Case MessageBoxResult.No
|
||||||
|
bDoBackup = False
|
||||||
|
Case MessageBoxResult.Cancel
|
||||||
|
MessageBox.Show("Restore operation aborted!", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
|
||||||
|
m_bRestoreRunning = False
|
||||||
|
Return
|
||||||
|
End Select
|
||||||
|
' apro finestra di caricamento
|
||||||
|
LoadingWndHelper.OpenLoadingWnd(ActiveIds.RESTORE, 3, "Restore", "Backup current", If(bDoBackup, 40, 10)) ' Restore ' Database Restore
|
||||||
|
If bDoBackup Then
|
||||||
|
Backup(False)
|
||||||
|
End If
|
||||||
|
' recupero cartella corrente dei progetti
|
||||||
|
Dim sProjectFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir
|
||||||
|
Dim sKey As String = ""
|
||||||
|
EgtGetKeyInfo(sKey)
|
||||||
|
sKey = sKey.Replace(" ", "")
|
||||||
|
Dim sUserFolder As String = ""
|
||||||
|
If Not IsNothing(sKey) AndAlso sKey.Length > 11 Then
|
||||||
|
sUserFolder = sKey.Substring(3, 6)
|
||||||
|
End If
|
||||||
|
If Directory.Exists(sProjectFolder & "\" & sUserFolder) Then
|
||||||
|
' se faccio backup elimino cartella dei progetti
|
||||||
|
If bDoBackup Then
|
||||||
|
Directory.Delete(sProjectFolder & "\" & sUserFolder, True)
|
||||||
|
Else
|
||||||
|
' altrimenti la rinomino old
|
||||||
|
If Directory.Exists(sProjectFolder & "\" & sUserFolder & ".old") Then
|
||||||
|
Directory.Delete(sProjectFolder & "\" & sUserFolder & ".old", True)
|
||||||
|
End If
|
||||||
|
Directory.Move(sProjectFolder & "\" & sUserFolder, sProjectFolder & "\" & sUserFolder & ".old")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.RESTORE, 2, "Restore data extraction", If(bDoBackup, 40, 10), 80) ' Restore data extraction
|
||||||
|
' estraggo lo zip nella cartella Temp
|
||||||
|
Dim sRestoreDir As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\Restore"
|
||||||
|
If Directory.Exists(sRestoreDir) Then
|
||||||
|
Directory.Delete(sRestoreDir, True)
|
||||||
|
End If
|
||||||
|
Directory.CreateDirectory(sRestoreDir)
|
||||||
|
Dim bOk As Boolean = True
|
||||||
|
' apro file zip
|
||||||
|
Try
|
||||||
|
Using zip As New Ionic.Zip.ZipFile(sRestorePath, Console.Out)
|
||||||
|
' estraggo file da zip
|
||||||
|
zip.ExtractAll(sRestoreDir)
|
||||||
|
End Using
|
||||||
|
Catch ex1 As Exception
|
||||||
|
EgtOutLog("Error! Impossible importing Recovery file " & sRestorePath & "!")
|
||||||
|
EgtOutLog("Exception in zip: " & ex1.ToString())
|
||||||
|
MessageBox.Show("Impossible importing Recovery file!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
bOk = False
|
||||||
|
End Try
|
||||||
|
Dim sBackupTempPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\DbRestore"
|
||||||
|
LoadingWndHelper.UpdateLoadingWnd(ActiveIds.RESTORE, 3, "Database restore", 80, 100) ' Database restore
|
||||||
|
If bOk Then
|
||||||
|
' restore del Db
|
||||||
|
Try
|
||||||
|
DataLayer.DbConfig.DataBaseRestoreFromFile(sRestoreDir & "\DbBackup.zip", "", sBackupTempPath)
|
||||||
|
Catch ex As Exception
|
||||||
|
MessageBox.Show("Restore failed! Impossible to restore the backup Database!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
bOk = False
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
If File.Exists(sRestoreDir & "\DbBackup.zip") Then
|
||||||
|
File.Delete(sRestoreDir & "\DbBackup.zip")
|
||||||
|
End If
|
||||||
|
If bOk Then
|
||||||
|
' sposto il backup al posto giusto
|
||||||
|
Directory.Move(sRestoreDir & "\" & sUserFolder, sProjectFolder & "\" & sUserFolder)
|
||||||
|
End If
|
||||||
|
If Directory.Exists(sRestoreDir) Then
|
||||||
|
Directory.Delete(sRestoreDir)
|
||||||
|
End If
|
||||||
|
LoadingWndHelper.CloseLoadingWnd(ActiveIds.RESTORE)
|
||||||
|
m_bRestoreRunning = False
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
#End Region ' Restore
|
||||||
|
|
||||||
|
#End Region ' COMMANDS
|
||||||
|
|
||||||
#Region "Methods"
|
#Region "Methods"
|
||||||
|
|
||||||
' funzione che scrive i parametri modificati sul file INI
|
' funzione che scrive i parametri modificati sul file INI
|
||||||
|
|||||||
@@ -141,6 +141,9 @@
|
|||||||
<Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
<Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
<HintPath>..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="EgtUILib, Version=2.4.3.1, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="EgtUILib, Version=2.4.3.1, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ExtLibs\EgtUILib.dll</HintPath>
|
<HintPath>..\ExtLibs\EgtUILib.dll</HintPath>
|
||||||
@@ -158,9 +161,6 @@
|
|||||||
<Reference Include="Google.Protobuf, Version=3.21.9.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
<Reference Include="Google.Protobuf, Version=3.21.9.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Google.Protobuf.3.21.9\lib\net45\Google.Protobuf.dll</HintPath>
|
<HintPath>..\packages\Google.Protobuf.3.21.9\lib\net45\Google.Protobuf.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Ionic.Zip.1.9.1.8\lib\Ionic.Zip.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="K4os.Compression.LZ4, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
|
<Reference Include="K4os.Compression.LZ4, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\K4os.Compression.LZ4.1.3.5\lib\net462\K4os.Compression.LZ4.dll</HintPath>
|
<HintPath>..\packages\K4os.Compression.LZ4.1.3.5\lib\net462\K4os.Compression.LZ4.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|||||||
@@ -266,16 +266,67 @@ Public Class MainWindowVM
|
|||||||
End If
|
End If
|
||||||
' verifico se sono in modifica percorso libero
|
' verifico se sono in modifica percorso libero
|
||||||
If Map.refFreeContourManagerVM.bIsActive Then
|
If Map.refFreeContourManagerVM.bIsActive Then
|
||||||
MessageBox.Show("Before closing software exit from path modification!")
|
MessageBox.Show("Exit from path modification before closing software!")
|
||||||
Return
|
Return
|
||||||
End If
|
End If
|
||||||
'If Map.refOptionPanelVM.SelItem = OptionPanelVM.Tabs.SIMUL Then
|
' verifico se sto facendo backup
|
||||||
' Map.refSimulTabVM.ResetSimulation()
|
If Map.refConfigurationPageVM.bBackupRunning Then
|
||||||
'End If
|
MessageBox.Show("Backup running! Impossible closing the software until finish the backup process!", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
|
||||||
' Imposto contesto principale
|
End If
|
||||||
'EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx())
|
If Map.refConfigurationPageVM.bRestoreRunning Then
|
||||||
' Gestisco eventuale file corrente modificato
|
MessageBox.Show("Restore running! Impossible closing the software until finish the restore process!", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
|
||||||
Dim bOk As Boolean = True
|
End If
|
||||||
|
If Map.refConfigurationPageVM.SelReminder.Id <> 0 Then
|
||||||
|
Dim sBackupFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir & "\Backup"
|
||||||
|
Dim nYear As Integer = 0
|
||||||
|
Dim nMonth As Integer = 0
|
||||||
|
Dim nDay As Integer = 0
|
||||||
|
Dim LastBackupDate As Date = Date.MinValue
|
||||||
|
' verifico se esiste backup
|
||||||
|
If Directory.Exists(sBackupFolder) Then
|
||||||
|
' cerco ultimo backup
|
||||||
|
Dim YearDirList() As String = Directory.GetDirectories(sBackupFolder)
|
||||||
|
For YearIndex = YearDirList.Length - 1 To 0 Step -1
|
||||||
|
nYear = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(YearDirList(YearIndex)), nYear)
|
||||||
|
Dim sYearDir As String = sBackupFolder & "\" & nYear
|
||||||
|
Dim MonthDirList() As String = Directory.GetDirectories(sYearDir)
|
||||||
|
For MonthIndex = MonthDirList.Length - 1 To 0 Step -1
|
||||||
|
nMonth = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(MonthDirList(MonthIndex)), nMonth)
|
||||||
|
Dim sMonthDir As String = sYearDir & "\" & nMonth
|
||||||
|
Dim DayDirList() As String = Directory.GetDirectories(sMonthDir)
|
||||||
|
For DayIndex = DayDirList.Length - 1 To 0 Step -1
|
||||||
|
nDay = 0
|
||||||
|
Integer.TryParse(Path.GetFileName(DayDirList(DayIndex)), nDay)
|
||||||
|
Dim sDayDir As String = sMonthDir & "\" & nDay
|
||||||
|
Dim VersionList() As String = Directory.GetFiles(sDayDir)
|
||||||
|
If VersionList.Length > 0 Then
|
||||||
|
Dim nMaxVersion As Int64 = VersionList.Max(Function(x) Int64.Parse(Path.GetFileNameWithoutExtension(x)))
|
||||||
|
LastBackupDate = New Date(nYear, nMonth, nDay)
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If LastBackupDate <> Date.MinValue Then Exit For
|
||||||
|
Next
|
||||||
|
If LastBackupDate <> Date.MinValue Then Exit For
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Dim TimeFromLastBackup As TimeSpan = DateTime.Now - LastBackupDate
|
||||||
|
If TimeFromLastBackup > TimeSpan.FromDays(Map.refConfigurationPageVM.SelReminder.Id) Then
|
||||||
|
If MessageBox.Show(Map.refConfigurationPageVM.SelReminder.Name & " have passed from last backup. Do you want to do a backup before closing the software?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) = MessageBoxResult.Yes Then
|
||||||
|
Map.refConfigurationPageVM.Backup(True)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'If Map.refOptionPanelVM.SelItem = OptionPanelVM.Tabs.SIMUL Then
|
||||||
|
' Map.refSimulTabVM.ResetSimulation()
|
||||||
|
'End If
|
||||||
|
' Imposto contesto principale
|
||||||
|
'EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx())
|
||||||
|
' Gestisco eventuale file corrente modificato
|
||||||
|
Dim bOk As Boolean = True
|
||||||
Select Case Map.refMainMenuVM.SelPage
|
Select Case Map.refMainMenuVM.SelPage
|
||||||
Case Pages.VIEW
|
Case Pages.VIEW
|
||||||
bOk = ProjFileVM.VerifyProjectModification(Map.refProjManagerVM.CurrProj, ProjectType.PROJ)
|
bOk = ProjFileVM.VerifyProjectModification(Map.refProjManagerVM.CurrProj, ProjectType.PROJ)
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
<package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
|
||||||
|
<package id="DotNetZip" version="1.16.0" targetFramework="net472" />
|
||||||
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
|
||||||
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
<package id="Google.Protobuf" version="3.21.9" targetFramework="net472" />
|
||||||
<package id="Ionic.Zip" version="1.9.1.8" targetFramework="net472" />
|
|
||||||
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net472" />
|
||||||
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net472" />
|
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net472" />
|
||||||
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net472" />
|
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net472" />
|
||||||
|
|||||||
Reference in New Issue
Block a user