Files
Mapo-IOB/SMGen/Pages/SMIn2Event.razor.cs
2023-09-22 16:18:16 +02:00

218 lines
6.4 KiB
C#

using EgwCoreLib.Razor;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using NLog;
using SMGen.Core;
using SMGen.Data;
using SMGen.Data.Data;
using SMGen.Data.Services;
namespace SMGen.Pages
{
public partial class SMIn2Event
{
#region Protected Fields
protected static Logger Log = LogManager.GetCurrentClassLogger();
protected SelectSMIn2EvParams currFilter = new SelectSMIn2EvParams();
protected DataPager? pagerSMIn2Ev = null!;
#endregion Protected Fields
#region Protected Properties
protected List<string> Bits { get; set; } = new List<string>();
protected string circleCssColor
{
get
{
string answ = "";
if ((Files.Count() >= (Files.Count() / 100) * 60) && (Files.Count() <= (Files.Count() / 100) * 90))
{
answ = "#F1C40F";
}
else if ((Files.Count() >= (Files.Count() / 100) * 90))
{
answ = "#C0392B";
}
else
{
answ = "#27AE60";
}
return answ;
}
}
[Inject]
protected IConfiguration conf { get; set; } = null!;
[Inject]
protected IWebHostEnvironment env { get; set; } = null!;
protected Dictionary<string, FilesClass> Files { get; set; } = new Dictionary<string, FilesClass>();
protected int maxAllowedFiles { get; set; } = 100;
protected string pathDir { get; set; } = "";
protected string pathFile { get; set; } = "";
protected int resetSucc { get; set; } = 0;
[Inject]
protected SMGDataService SMGDService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected void ForceReload(int newNum)
{
numRecord = newNum;
}
protected void ForceReloadPage(int newNum)
{
currPage = newNum;
}
protected override async Task OnInitializedAsync()
{
// path cartella root (development)
pathDir = Path.Combine("Temp", "unsafe_uploads");
//se la cartella non esistesse la creo
if (!Directory.Exists(pathDir))
{
Directory.CreateDirectory(pathDir);
Log.Info($"Creato directory {pathDir}");
}
// svuoto cartella prima di partire
deleteOldFiles(pathDir);
await Task.Delay(1);
await SMGDService.ExecFlushRedisPattern(Constants.FILES_TO_PROC);
}
protected async Task pgResetReq(bool doReset)
{
if (doReset)
{
await Task.Delay(1);
if (pagerSMIn2Ev != null)
{
pagerSMIn2Ev.resetCurrPage();
}
}
}
protected void UpdateTotCount(int newTotCount)
{
totalCount = newTotCount;
}
#endregion Protected Methods
#region Private Properties
private int currPage
{
get => currFilter.CurrPage;
set => currFilter.CurrPage = value;
}
private int numRecord
{
get => currFilter.NumRec;
set => currFilter.NumRec = value;
}
private int totalCount
{
get => currFilter.TotCount;
set => currFilter.TotCount = value;
}
#endregion Private Properties
#region Private Methods
/// <summary>
/// Procedee a bonificare la cartella di upload dei files + vecchi di 3 mesi
/// </summary>
private void deleteOldFiles(string dirPath)
{
// elenco files nella directory
string[] files = Directory.GetFiles(dirPath);
// li guardo tutti e se vecchi li elimino...
foreach (string file in files)
{
FileInfo fi = new FileInfo(file);
if (fi.LastAccessTime < DateTime.Now.AddMinutes(-10))
{
fi.Delete();
}
}
}
//// va dopo
//private StreamWriter objWriter { get; set; };
private async Task LoadFiles(InputFileChangeEventArgs e)
{
List<IBrowserFile> loadedFiles = new();
long maxFileSize = 1024 * 1024;
loadedFiles.Clear();
Files.Clear();
// svuoto cartella prima di partire
deleteOldFiles(pathDir);
foreach (var file in e.GetMultipleFiles(maxAllowedFiles))
{
try
{
loadedFiles.Add(file);
//assegno un nome file randomico x sicurezza
var trustedFileNameForFileStorage = Path.GetRandomFileName();
//path del file da scrivere
pathFile = Path.Combine(pathDir, trustedFileNameForFileStorage);
// creo file
using (FileStream fs = new(pathFile, FileMode.Create))
{
// copio il contenuto del file
await file.OpenReadStream(maxFileSize).CopyToAsync(fs);
// scrivo log
Log.Info($"Salvato file temp {pathFile}");
}
if (file.Name.Contains(".rul"))
{
var newFIle = new FilesClass()
{
tempFileName = pathFile,
isOk = false,
origFileName = file.Name,
calcRunning = false,
DLoadFileName = ""
};
Files.Add(file.Name, newFIle);
}
}
catch (Exception exc)
{
Log.Error($"Errore durante salvataggio file temp {file.Name}: {exc}{Environment.NewLine}");
}
}
if (Files != null && Files.Count > 0)
{
await SMGDService.FilesLoadRedis(Files);
}
resetSucc = 0;
await InvokeAsync(() => StateHasChanged());
}
#endregion Private Methods
}
}