Files
A69WD/Src/A69WD/Service/Service_Importer.cs
T
CSiCoAlm 27795c5620 Importazione dei racconti dai file in una cartella
- Testata procedura e sembra corretta, ma diagnostica non corretta
- Manca navigazione per selezione della cartella.

ToDo:
- Aggiungere gestione parallela della FIFO secondo vecchi modello per aumentare il feedback alla UI
- Inserire anche l'estrazione dei racconti
- Per ora metto tutto il DB in memoria, poi dovrò ottimizzare come su ATDB
2025-12-27 18:34:09 +01:00

124 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using A69WD.Data;
using A69WD.Net;
using A69WD.Site;
namespace A69WD.Service {
public class Service_Importer {
// Thread worker che consuma la coda
private Thread _workerThread;
private readonly Label _lblInCorso;
private readonly ProgressBar _progressBar;
private string _path;
// Contatori
private int _totali = 0;
private int _completati = 0;
private int _errori = 0;
public Service_Importer(Label lblInCorso, ProgressBar pbStatus) {
_lblInCorso = lblInCorso;
_progressBar = pbStatus;
}
public void StartWorker(string path) {
_path = path;
_workerThread = new Thread(ProcessWorking) { IsBackground = true };
_workerThread.Start();
}
public void StopWorker() {
;
}
private async void ProcessWorking() {
string[] files = System.IO.Directory.GetFiles(_path, "A69_*.html");
_totali = files.Length;
_completati = 0;
_errori = 0;
UpdateCounters();
// foreach (string file in files) {
// Task.Run(async () => {
// Logger.Warning($"Start estrazione racconto: {file}");
// cLink_A69 lk = new cLink_A69("url", file);
// cRac rac = await lk.EstraiRac(file);
// if (rac != null) {
// // Racconto estratto correttamente, lo salvo sul DB
// Logger.Warning($"Start estrazione racconto: {file}");
// int res = App.DB.ImportRac(rac);
// if (res != 1) {
// // Errore nel salvataggio
// Interlocked.Increment(ref _errori);
// } else {
// // salvataggio corretto
// Interlocked.Increment(ref _completati);
// }
// } else {
// Interlocked.Increment(ref _errori);
// }
// UpdateCounters();
// });
// }
foreach (string file in files) {
string name = System.IO.Path.GetFileName(file);
Logger.Warning($"Import - Start estrazione racconto: {name}");
cLink_A69 lk = new cLink_A69(file, name);
cRac rac = await lk.EstraiRac(file);
if (rac != null) {
// Racconto estratto correttamente, lo salvo sul DB
Logger.Warning($"Import - estrazione corretta: {name}");
int res = App.DB.ImportRac(rac);
if (res != 1) {
// errore nel salvataggio
Logger.Warning($"Import - errore nel salvataggio: {name}");
Interlocked.Increment(ref _errori);
} else {
// salvataggio ok
Logger.Warning($"Import - racconto salvato: {name}");
Interlocked.Increment(ref _completati);
}
} else {
Logger.Warning($"Import - estrazione errata: {name}");
Interlocked.Increment(ref _errori);
}
UpdateCounters();
}
UpdateCounters();
}
private void UpdateCounters() {
if (_lblInCorso.InvokeRequired) {
_lblInCorso.Invoke(new Action(UpdateCounters));
return;
}
int daFare = _totali - _completati - _errori;
_lblInCorso.Text = $"Totali: {_totali} - Completati: {_completati} - Errori: {_errori} - Da fare: {daFare}";
_progressBar.Maximum = _totali > 0 ? _totali : 1;
_progressBar.Value = _completati + _errori;
}
}//class Service_Importer
}//namespace A69WD.Service