Files
A69WD/Src/A69WD/General/Cfg.cs
T
CSiCoAlm 3cd03879f0 Vrs 0.3.0.0
Compilata da CSiCoAlm il 2022/09/22
- Versione in cui ho sostituito l'oggetto WebBrowser con
  la classe WebClient per poter gestire in parallelo i download.
2022-09-22 12:05:25 +02:00

357 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Serialization;
namespace A69WD {
/// <summary>
/// Classe per gestire le configurazioni dei plugin.
/// La classe con le configurazioni dell'applicativo, deve derivare da questa.
/// </summary>
[Serializable]
public class Cfg {
#region Costruttore statico
public static Cfg Settings {
get {
//if (settings == null) {
// settings = new Cfg();
// settings.Deserialize();
//}
//return settings;
if (val == 0) {
settings = new Cfg();
settings.Deserialize();
val++;
}
return settings;
}
}
[NonSerialized]
private static Cfg settings = null;
[NonSerialized]
private static int val = 0;
[NonSerialized]
private string SettingsFilePath = "Settings.cfg";
/// <summary>
/// Costruttore per la serializzazione
/// </summary>
public Cfg() {; }
#endregion
#region Gestione della Serializzazione
public void Serialize() {
XmlTextWriter writer = null;
try {
// Creo un flusso per l'operazione di scrittura dei dati su file
writer = new XmlTextWriter(SettingsFilePath, Encoding.UTF8);
// write a readable file
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
// Occorre un'istanza della classe XmlSerializer
XmlSerializer serializer = new XmlSerializer(typeof(Cfg));
// e questo é tutto ciò che serve per persistere i dati
serializer.Serialize(writer, Settings);
} catch (Exception ex) {
throw new ApplicationException("Serialize: " + ex.Message);
} finally {
// Chiudere sempre i flussi non appena possibile
writer.Close();
}
}
public void Deserialize() {
//if (File.Exists(SettingsFilePath)) {
XmlTextReader reader = null;
try {
// Creo un flusso per l'operazione di lettura dei dati dal file
reader = new XmlTextReader(SettingsFilePath);
// Occorre un'istanza della classe XmlSerializer
XmlSerializer serializer = new XmlSerializer(typeof(Cfg));
// Collego l'istanza XmlSerializer al gestore dell'evento
serializer.UnknownElement += new XmlElementEventHandler(serializer_UnknownElement);
// e questo é tutto ciò che serve per leggere i dati dal formato XML
settings = (Cfg)serializer.Deserialize(reader);
} catch (FileNotFoundException) {
throw new ApplicationException("File inesistente");
} finally {
reader.Close();
}
//}
}
///<summary>
///Metodo: Gestore dell'evento UnknownElement
///</summary>
private void serializer_UnknownElement(object sender, XmlElementEventArgs e) {
string msg = "Unknown Element";
msg += "\t" + e.Element.Name + " " + e.Element.InnerXml;
msg += "\t LineNumber: " + e.LineNumber;
msg += "\t LinePosition: " + e.LinePosition;
Cfg x = (Cfg)e.ObjectBeingDeserialized;
}
#endregion
#region Settings:
#region Serializzati nel file di configurazione:
/// <summary>
/// Path root dell'applicazione. Da questo derivano tutti gli altri path.
/// </summary>
public virtual string PathApplicationRoot { get { return applicationRootPath; } set { applicationRootPath = value; } }
private string applicationRootPath;
/// <summary>
/// Nome del database usato dall'applicazione [DEPRECATE].
/// </summary>
public virtual string DBName { get { return dbName; } set { dbName = value; } }
private string dbName;
/// <summary>
/// Dimensione massima dei singoli file di log espressa in KB.
/// </summary>
public int LogsFileSizeLimitKB { get { return logsFileSizeLimitKB; } set { logsFileSizeLimitKB = value; } }
private int logsFileSizeLimitKB;
/// <summary>
/// Nome di riferimento per gli eventi inseriti nell'event logger di windows.
/// Se lasciato nullo o vuoto, disabilita l'inserimento dei log nell'event logger di windows.
/// </summary>
public virtual string LogsWinLoggerRef { get { return logsWinLoggerRef; } set { logsWinLoggerRef = value; } }
private string logsWinLoggerRef;
/// <summary>
/// Editor per la visualizzazione dei testi e dei logs
/// </summary>
public virtual string TextEditor { get { return textEditor; } set { textEditor = value; } }
private string textEditor;
#endregion
#region Ricavati indirettamente dal file di configurazione
/// <summary>
/// Path del database usato dall'applicazione.
/// Vecchia versione:
/// public virtual string PathDB { get { return dbPath; } set { dbPath = value; } } private string dbPath;
/// </summary>
public virtual string PathDB { get { return Path.Combine(PathApplicationRoot, "DB"); } }
/// <summary>
/// Stringa di connessione al database dell'applicazione [DEPRECATE].
/// </summary>
public virtual string DBConnectionString { get { return string.Format("data source=\"{0}\"", Path.Combine(PathDB, dbName)); } }
/// <summary>
/// Path completo del file di log
/// Vecchia versione:
/// public virtual string PathFileLogs { get { return logsFilePath; } set { logsFilePath = value; } } private string logsFilePath;
/// </summary>
public virtual string PathFileLogs { get { return Path.Combine(Path.Combine(PathApplicationRoot, "Logs"), "Log.tes"); } }
/// <summary>
/// Path della directory su cui memorizzo in modo temporaneo i file downloadati.
/// </summary>
public virtual string PathDownloadWorking { get { return Path.Combine(PathApplicationRoot, "Down"); } }
/// <summary>
/// Path della directory su cui riporto i file di indice, correttamente analizzati.
/// </summary>
public virtual string PathAnalizadedIndexFile {
get {
//// root/Down/YYYY-MM-DD/Index
//if (string.IsNullOrEmpty(pathAnalizadedIndexFile)) {
// // creo path e verifico l'esistenza
// pathAnalizadedIndexFile = Path.Combine(Path.Combine(PathDownloadWorking, DateTime.Now.ToString("yyyy-MM-dd")), "Index");
// if (!Directory.Exists(pathAnalizadedIndexFile)) Directory.CreateDirectory(pathAnalizadedIndexFile);
//}
// root/Txt/Idx/YYYY-MM-DD
if (string.IsNullOrEmpty(pathAnalizadedIndexFile)) {
// creo path e verifico l'esistenza
pathAnalizadedIndexFile = Path.Combine(Path.Combine(Path.Combine(PathApplicationRoot, "Txt"), "Idx"), DateTime.Now.ToString("yyyy-MM-dd"));
if (!Directory.Exists(pathAnalizadedIndexFile)) Directory.CreateDirectory(pathAnalizadedIndexFile);
}
return pathAnalizadedIndexFile;
}
}
private string pathAnalizadedIndexFile = "";
/// <summary>
/// Path della directory su cui riporto i file dei racconti, correttamente analizzati.
/// </summary>
public virtual string PathAnalizadedRaccFile {
get {
//// root/Down/YYYY-MM-DD/Testi
//if (string.IsNullOrEmpty(pathAnalizadedRaccFile)) {
// // creo path e verifico l'esistenza
// pathAnalizadedRaccFile = Path.Combine(Path.Combine(PathDownloadWorking, DateTime.Now.ToString("yyyy-MM-dd")), "Testi");
// if (!Directory.Exists(pathAnalizadedRaccFile)) Directory.CreateDirectory(pathAnalizadedRaccFile);
//}
// root/Txt/Src/YYYY-MM-DD
if (string.IsNullOrEmpty(pathAnalizadedRaccFile)) {
// creo path e verifico l'esistenza
pathAnalizadedRaccFile = Path.Combine(Path.Combine(Path.Combine(PathApplicationRoot, "Txt"), "Src"), DateTime.Now.ToString("yyyy-MM-dd"));
if (!Directory.Exists(pathAnalizadedRaccFile)) Directory.CreateDirectory(pathAnalizadedRaccFile);
}
return pathAnalizadedRaccFile;
}
}
private string pathAnalizadedRaccFile = "";
#endregion
/*
/// <summary>
/// Path, relativo al plugin, del file con l'elenco dei link ai file di indice.
/// </summary>
public string FileIndexLinkPath { get { return fileIndexLinkPath; } set { fileIndexLinkPath = value; } }
private string fileIndexLinkPath;
/// <summary>
/// Path completo dell'applicazione esterna da usare per il download dei file dal web
/// </summary>
public string DownloaderPrg { get { return downloaderPrg; } set { downloaderPrg = value; } }
private string downloaderPrg;
/// <summary>
/// Path, relativo al plugin, del file di log per l'applicativo di download.
/// </summary>
public string FileDownloadLogPath { get { return fileDownloadLogPath; } set { fileDownloadLogPath = value; } }
private string fileDownloadLogPath;
/// <summary>
/// Directory, relativa al plugin, su cui vengono messi i file indice downloadati dal downloader.
/// </summary>
public string DownloadFolderIndex { get { return downloadFolderIndex; } set { downloadFolderIndex = value; } }
private string downloadFolderIndex;
/// <summary>
/// Directory, relativa al plugin, su cui vengono archiviati i file indice dopo l'analisi.
/// </summary>
public string ArchiveFolderIndex { get { return archiveFolderIndex; } set { archiveFolderIndex = value; } }
private string archiveFolderIndex;
/// <summary>
/// Path, relativo al plugin, del file con l'elenco dei link ai file dei singoli racconti.
/// </summary>
public string FileRaccLinkPath { get { return fileRaccLinkPath; } set { fileRaccLinkPath = value; } }
private string fileRaccLinkPath;
/// <summary>
/// Numero massimo di racconti da raccogliere su ciascun file di testo.
/// </summary>
public int NumRaccontiForFile { get { return numRaccontiForFile; } set { numRaccontiForFile = value; } }
private int numRaccontiForFile;
/// <summary>
/// Directory, relativa al plugin, su cui vengono archiviati i file dei racconti dopo l'analisi.
/// </summary>
public string ArchiveFolderRacc { get { return archiveFolderRacc; } set { archiveFolderRacc = value; } }
private string archiveFolderRacc;
/// <summary>
/// Struttura, relativa al plugin, del path dei file su cui raccolgo i racconti estratti.
/// </summary>
public string RaccontiExtractedFileName { get { return raccontiExtractedFileName; } set { raccontiExtractedFileName = value; } }
private string raccontiExtractedFileName;
/// <summary>
/// Path del file da usare come log temporaneo del programma di download
/// </summary>
public string TmpLogPath { get { return tmpLogPath; } set { tmpLogPath = value; } }
private string tmpLogPath;
/// <summary>
/// Path del file con i link agli indici dei racconti, pronto per essere downloadato con _Down1.
/// </summary>
public string IndexLinkPath { get { return indexLinkPath; } set { indexLinkPath = value; } }
private string indexLinkPath;
/// <summary>
/// Path del file su cui memorizzo il DB dei link finora trovati.
/// </summary>
public string LinkDBPath { get { return linkDBPath; } set { linkDBPath = value; } }
private string linkDBPath;
/// <summary>
/// Path del file su cui scrivo i link dei racconti non precedentemente contenuti nel DB.
/// </summary>
public string LinkNewPath { get { return linkNewPath; } set { linkNewPath = value; } }
private string linkNewPath;
/// <summary>
/// Directory su cui voglio spostare i file degli indici downloadati.
/// </summary>
public string IndexDstFolder { get { return indexDstFolder; } set { indexDstFolder = value; } }
private string indexDstFolder;
/// <summary>
/// Directory contenente i file html, dei racconti, downloadati
/// </summary>
public string RaccontiSrcFolder { get { return raccontiSrcFolder; } set { raccontiSrcFolder = value; } }
private string raccontiSrcFolder;
/// <summary>
/// Directory su cui riporto i racconti estratti automaticamente dai file html
/// </summary>
public string RaccontiExtractFolder { get { return raccontiExtractFolder; } set { raccontiExtractFolder = value; } }
private string raccontiExtractFolder;
/// <summary>
/// Nome principale per i file su cui riporto i racconti estratti automaticamente.
/// </summary>
public string RaccontiExtractedFileName { get { return raccontiExtractedFileName; } set { raccontiExtractedFileName = value; } }
private string raccontiExtractedFileName;
/// <summary>
/// Numero di racconti massimo contenuti nel file di esportazione dei racconti estratti automaticamente.
/// </summary>
public int NumRaccontiForFile { get { return numRaccontiForFile; } set { numRaccontiForFile = value; } }
private int numRaccontiForFile;
//*/
#endregion
} // class Cfg
} // namespace A69WD