- 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
124 lines
4.3 KiB
C#
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
|