diff --git a/Src/A69WD/Data/cRac.cs b/Src/A69WD/Data/cRac.cs index 12a708c..3557c59 100644 --- a/Src/A69WD/Data/cRac.cs +++ b/Src/A69WD/Data/cRac.cs @@ -8,98 +8,116 @@ using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace A69WD.Data { + /// + /// Rappresenta un singolo racconto all'interno del database ATDB. + /// Questa classe mappa la tabella [Racconti] e tutte le sue relazioni correlate. + /// public class cRac { - #region Costruttori + #region Propietà: IDrac, Title, SubTitle, Creato, Updated, Trama, Voto, Autori, Tags, Origini, Notes + + #region --- DATI BASE (Tabella [Racconti]) --- /// - /// Costruttore + /// Identificativo univoco del racconto + /// Default: -1 + /// Mappa [IDrac] /// - public cRac() { isValid = false; } + public long IDrac { get; set; } = -1; - /// - /// Costruttore per un racconto nullo, utilizzato per mostrare eventuali errori o messaggi + /// Titolo del racconto + /// Default: 'Unknown' + /// Mappa [Title] /// - /// Stringa che si vuole visualizzare come titolo del racconto - /// Stringa che si vuole visualizzare come testo del racconto - public cRac(string title, string trama) { - this.IDrac = 0; - this.Title = title; - this.Trama = "\n\n" + trama + "\n\n"; - this.Creato = DateTime.Now; - this.Updated = DateTime.Now; - this.isValid = true; - } + public string Title { get; set; } = "Unknown"; - - #endregion - - - #region Propietà e Fields: - - /// - /// Identificativo del racconto - /// - public long IDrac = -1; - - /// - /// Titolo del racconto - /// - public string Title = null; - - /// + /// /// Sottotitolo del racconto + /// Default: '' + /// Mappa [SubTitle] /// - public string SubTitle = null; - - /// - /// Elenco dei tag (ex Props) associati al racconto - /// - public List Tags = null; - - /// - /// Note aggiuntive associate al racconto, sono del tipo: {Key} - {Descrizione} - /// Un tipo di nota sempre presente è la "Src" che individua la sorgente (link del file downloadato) da dove ho preso il racconto - /// Devo poter aver più source e quindi abbandono la struttura dizionario per avere una lista di coppie di stringhe - /// - //public System.Collections.Generic.Dictionary Notes = null; - public List Notes = null; - - /// - /// Elenco degli autori del racconto - /// - public List Autori = null; - - /// - /// Elenco delle origini del racconto - /// - public List Origini = null; - - /// - /// Voto assegnato al racconto - /// - public string Voto = null; - - /// - /// Trama del racconto - /// - public string Trama = null; + public string SubTitle { get; set; } = ""; /// /// Data di creazione/pubblicazione del racconto o in mancanza di essa, data di inserimento del racconto in ATDB + /// Default: DateTime.MinValue + /// Mappa [Creato] /// - public DateTime Creato = DateTime.MinValue; + public DateTime Creato { get; set; } = DateTime.MinValue; /// - /// Data dell'ultimo update del racconto. - /// Inizialmente sarà la data di inserimento in ATDB, poi sarà la data dell'ultima lettura o dell'ultima iterazione con il racconto stesso. + /// Data dell'ultima modifica + /// Default: DateTime.MinValue + /// Mappa [Aggiornato] /// - public DateTime Updated = DateTime.MinValue; + public DateTime Updated { get; set; } = DateTime.MinValue; + + #endregion + + #region --- CONTENUTO (Relazione 1-1 con Tabella [Trame]) --- + + /// + /// Testo completo della trama del racconto + /// Default: null + /// Mappa [Trama] + /// + public string Trama { get; set; } = null; + + #endregion + + #region --- CONTENUTO (Relazione 1-1 con Tabella [Voti]) --- + + /// + /// Etichetta testuale del voto assegnato al racconto (es. 'Bello') + /// Default: 'Non Letto' + /// Mappa [Voto] + /// + public string Voto { get; set; } = "Non Letto"; + + #endregion + + #region --- RELAZIONI MOLTI-A-MOLTI (Tramite tabelle Links_Rac_...) --- + + /// + /// Elenco dei nomi degli autori associati al racconto. + /// Default: null + /// Mappa la relazione tramite [Links_Rac_Aut] con la tabella [Autori]. + /// + public List Autori { get; set; } = null; + + /// + /// Elenco dei tag o proprietà associati (es. Genere, Mood). + /// Default: null + /// Mappa la relazione tramite [Links_Rac_Tag] con la tabella [Tags]. + /// + public List Tags { get; set; } = null; + + /// + /// Elenco delle sorgenti o origini da cui proviene il racconto. + /// Default: null + /// Mappa la relazione tramite [Links_Rac_Ori] con la tabella [Origini]. + /// + public List Origini { get; set; } = null; + + /// + /// Note informative strutturate come coppia Chiave-Valore (es. Link, Resume). + /// Note aggiuntive associate al racconto, sono del tipo: {Key} - {Descrizione} + /// Un tipo di nota sempre presente è la "Src" che individua la sorgente (link del file downloadato) da dove ho preso il racconto + /// Devo poter aver più source e quindi abbandono la struttura dizionario per avere una lista di coppie di stringhe + /// Default: null + /// Mappa la relazione tramite [Links_Rac_Not] con la tabella [Notes]. + /// + //public Dictionary Note { get; set; } = new Dictionary(); + public List Notes { get; set; } = null; + + #endregion #endregion - #region Metodi: strIDrac, strTags, fullTitle + #region Metodi: str..., fullTitle, IsValid, Validate, FileRacName + + #region Conversioni a stringa dei campi non stringhe: /// /// ID del racconto espresso in formato testuale @@ -166,6 +184,8 @@ namespace A69WD.Data { } } + #endregion + /// /// Indica se il racconto è valido o no (nullo) /// @@ -224,9 +244,41 @@ namespace A69WD.Data { return isValid; } + /// + /// Crea un nome univoco per il file htm che rappresenta un racconto. + /// Rac00000.htm + /// + public static string FileRacName(long RacID) { return "Rac" + RacID.ToString("00000") + ".htm"; } + #endregion + #region Costruttori + + /// + /// Costruttore + /// + public cRac() { isValid = false; } + + /// + /// Costruttore per un racconto nullo, utilizzato per mostrare eventuali errori o messaggi + /// + /// Stringa che si vuole visualizzare come titolo del racconto + /// Stringa che si vuole visualizzare come testo del racconto + public cRac(string title, string trama) { + this.IDrac = 0; + this.Title = title; + this.Trama = "\n\n" + trama + "\n\n"; + this.Creato = DateTime.Now; + this.Updated = DateTime.Now; + this.isValid = true; + } + + + #endregion + + + /// /// Crea il file html che rappresenta il racconto. @@ -331,24 +383,6 @@ namespace A69WD.Data { } - /// - /// Crea un nome univoco per il file htm che rappresenta un racconto. - /// Rac00000.htm - /// - public static string FileRacName(long RacID) { return "Rac" + RacID.ToString("00000") + ".htm"; } - - /// - /// Stringa di separazione fra i vari campi quando esprimo un elenco tramite una singola stringa - /// - private const string SEPARATORETXT = " -|- "; - - /// - /// Esprime la data indicata con una stringa opportunamente formattata - /// - /// DateTime da esprimere in testo - /// Il testo opportunamente formattato - private string DateFormat(DateTime dt) { return dt.ToString("yyyy/MM/dd"); } - /// /// Override per esprimere in modo formale un racconto con una singola stringa. /// @@ -404,6 +438,19 @@ namespace A69WD.Data { } + + /// + /// Stringa di separazione fra i vari campi quando esprimo un elenco tramite una singola stringa + /// + private const string SEPARATORETXT = " -|- "; + + /// + /// Esprime la data indicata con una stringa opportunamente formattata + /// + /// DateTime da esprimere in testo + /// Il testo opportunamente formattato + private string DateFormat(DateTime dt) { return dt.ToString("yyyy/MM/dd"); } + /// /// Esprime il racconto in formato HTML formale. /// @@ -827,9 +874,6 @@ namespace A69WD.Data { } } - - - public static string EsportaInHtml(cRac racconto, string cartellaDestinazione) { // Crea il nome del file pulendo il titolo da caratteri non validi diff --git a/Src/A69WD/Net/cLink_A69.cs b/Src/A69WD/Net/cLink_A69.cs index 3d3a7a2..84ea899 100644 --- a/Src/A69WD/Net/cLink_A69.cs +++ b/Src/A69WD/Net/cLink_A69.cs @@ -222,10 +222,11 @@ namespace A69WD.Net { if (parts.Length == 3) { CultureInfo culture = CultureInfo.CreateSpecificCulture("it-IT"); DateTimeStyles styles = DateTimeStyles.None; - rac.Creato = DateTime.Now; - if (!DateTime.TryParse(parts[0].Trim(), culture, styles, out rac.Creato)) { + DateTime tmpDT = DateTime.Now; + if (!DateTime.TryParse(parts[0].Trim(), culture, styles, out tmpDT)) { Logger.Error($"A69 - Import - No data - {filePathName}"); } + rac.Creato = tmpDT; } } } catch (Exception ex) { Logger.Warning(string.Format("Data non riconosciuta nel file {0}\r\n{1}", FileName, ex.Message)); return null; }