diff --git a/Src/A69WD/.vs/A69WD.csproj.dtbcache.json b/Src/A69WD/.vs/A69WD.csproj.dtbcache.json index e9b8bfe..5d191b6 100644 --- a/Src/A69WD/.vs/A69WD.csproj.dtbcache.json +++ b/Src/A69WD/.vs/A69WD.csproj.dtbcache.json @@ -1 +1 @@ -{"RootPath":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\A69WD","ProjectFileName":"A69WD.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"App.cs"},{"SourceFile":"Data\\cNota.cs"},{"SourceFile":"Data\\cRac.cs"},{"SourceFile":"Data\\DBTools.cs"},{"SourceFile":"Net\\eLinkState.cs"},{"SourceFile":"Net\\cLink_A69.cs"},{"SourceFile":"Service\\Service_Crawler.cs"},{"SourceFile":"Site\\cSite_A69.cs"},{"SourceFile":"UI\\frmDownloader.cs"},{"SourceFile":"UI\\frmDownloader.Designer.cs"},{"SourceFile":"General\\Cfg.cs"},{"SourceFile":"General\\cTools.cs"},{"SourceFile":"General\\Logger.cs"},{"SourceFile":"Net\\iLink.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Site\\iSiteType.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\_Lib\\HtmlAgilityPack.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\_Lib\\System.Data.SQLite.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\A69WD\\bin\\Debug\\A69WD.exe","OutputItemRelativePath":"A69WD.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]} \ No newline at end of file +{"RootPath":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\A69WD","ProjectFileName":"A69WD.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"App.cs"},{"SourceFile":"Data\\cNota.cs"},{"SourceFile":"Data\\cRac.cs"},{"SourceFile":"Data\\DBTools.cs"},{"SourceFile":"Data\\Helper.cs"},{"SourceFile":"Net\\eLinkState.cs"},{"SourceFile":"Net\\cLink_A69.cs"},{"SourceFile":"Service\\Service_Crawler.cs"},{"SourceFile":"Service\\Service_Importer.cs"},{"SourceFile":"Site\\cSite_A69.cs"},{"SourceFile":"UI\\frmDownloader.cs"},{"SourceFile":"UI\\frmDownloader.Designer.cs"},{"SourceFile":"General\\Cfg.cs"},{"SourceFile":"General\\cTools.cs"},{"SourceFile":"General\\Logger.cs"},{"SourceFile":"Net\\iLink.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Site\\iSiteType.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\_Lib\\HtmlAgilityPack.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\_Lib\\System.Data.SQLite.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Commesse\\_zPrivate\\A69WD\\Src\\A69WD\\bin\\Debug\\A69WD.exe","OutputItemRelativePath":"A69WD.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/Src/A69WD/A69WD.csproj b/Src/A69WD/A69WD.csproj index 4fa7741..f07d334 100644 --- a/Src/A69WD/A69WD.csproj +++ b/Src/A69WD/A69WD.csproj @@ -63,6 +63,7 @@ + @@ -80,6 +81,12 @@ + + Form + + + frmReader.cs + frmDownloader.cs @@ -93,6 +100,9 @@ Resources.resx True + + frmReader.cs + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/Src/A69WD/App.cs b/Src/A69WD/App.cs index cd10c71..e7c00c5 100644 --- a/Src/A69WD/App.cs +++ b/Src/A69WD/App.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Windows.Forms; +using A69WD.UI; @@ -34,7 +35,8 @@ namespace A69WD { // Start application: Logger.Information(" - - - START Application - - - "); if (DB.DB_ok) { - Application.Run(new frmDownloader()); + //Application.Run(new frmDownloader()); + Application.Run(new frmReader()); Logger.Information(" - - - STOP Application - - - "); diff --git a/Src/A69WD/Data/DBTools.cs b/Src/A69WD/Data/DBTools.cs index 1b3e1a4..e73bf57 100644 --- a/Src/A69WD/Data/DBTools.cs +++ b/Src/A69WD/Data/DBTools.cs @@ -1725,8 +1725,18 @@ namespace A69WD { + + + + + + + + // Metodi ricavati ottimizzando i miei tramite gemini + + /// /// Ricava il racconto con l'ID indicato leggendolo dal DB /// @@ -1934,6 +1944,77 @@ namespace A69WD { + #region Reader function: GetReport, GetRandomIDrac + + + private long GetNumRacs(string TagFilter = "") { + string query = "SELECT count (IDrac) FROM Racconti"; + if (TagFilter != "") { query = "SELECT count (Racconti.IDrac) AS NUM FROM Racconti, Links_Rac_Vot, Voti WHERE Racconti.IDrac=Links_Rac_Vot.IDrac AND Links_Rac_Vot.IDvot=Voti.IDvot AND Voti.Voto='" + TagFilter + "'"; } + return Helper.ExecuteScalar(cn,query,objLock); + } + + private long GetNumOri() { return Helper.CountSimpleRecord(cn, "Links_Rac_Ori", "IDori", objLock); } + + private long GetNumAuts() { return Helper.CountSimpleRecord(cn, "Links_Rac_Aut", "IDaut", objLock); } + + private long GetNumTags() { return Helper.CountSimpleRecord(cn, "Links_Rac_Tag", "IDtag", objLock); } + + private long GetNumVot() { return Helper.CountSimpleRecord(cn, "Links_Rac_Vot", "IDvot", objLock); } + + + /// + /// ritorna il riepilogo del DB: + /// + /// Stringa con il riepilogo del DB + public string Report { + get { + string report = "A69WD:\r\n\r\n"; + report += string.Format("L'archivio contiene {0} racconti:\r\n", GetNumRacs().ToString("000")); + report += string.Format("> {0} non letti\r\n", GetNumRacs("Non Letto").ToString("000")); + report += string.Format("> {0} sorgenti\r\n", GetNumOri().ToString("00")); + report += string.Format("> {0} autori\r\n", GetNumAuts().ToString("000")); + report += string.Format("> {0} tags\r\n", GetNumTags().ToString("000")); + report += string.Format("> {0} voti\r\n", GetNumVot().ToString("000")); + return report; + } + } + + + /// + /// Metodo per trovare un identificativo di un racconto scelto casualmente fra quelli che soddisfano il filtro indicato. + /// + /// Eventuale query per filtrare i racconti selezionabili + /// Identificativo del racconto scelto casualmente + public long GetRandomIDrac(string queryFilter = "") { + //long ID = -3; + //SQLiteDataReader rdr = null; + //lock (objLock) { + //try { + //// Preparo i comandi SQL da usare: + //string query = "SELECT Links_Rac_Vot.IDrac AS IDrac FROM Links_Rac_Vot, Voti WHERE Voti.Voto='Non Letto' AND Links_Rac_Vot.IDVot=Voti.IDvot ORDER BY RANDOM() LIMIT 1"; + //if (!string.IsNullOrEmpty(queryFilter)) query = string.Format("SELECT Links_Rac_Vot.IDrac AS IDrac FROM Links_Rac_Vot, Voti WHERE Links_Rac_Vot.IDVot=Voti.IDvot AND {0} ORDER BY RANDOM() LIMIT 1", queryFilter); + //SQLiteCommand cmd = new SQLiteCommand(query, cn); + //rdr = cmd.ExecuteReader(); + //while (rdr.Read()) { ID = (long)rdr["IDrac"]; } + //rdr.Close(); + //rdr = null; + //} catch (Exception ex) { + //Logger.Error(string.Format("Error Code: {0} - Errore in {1}.{2}: {3}", "ER00070", System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodInfo.GetCurrentMethod().Name, ex.Message)); + //ID = -2; + //} + //} + //return ID; + string query = "SELECT Links_Rac_Vot.IDrac AS IDrac FROM Links_Rac_Vot, Voti WHERE Voti.Voto='Non Letto' AND Links_Rac_Vot.IDVot=Voti.IDvot ORDER BY RANDOM() LIMIT 1"; + if (!string.IsNullOrEmpty(queryFilter)) query = string.Format("SELECT Links_Rac_Vot.IDrac AS IDrac FROM Links_Rac_Vot, Voti WHERE Links_Rac_Vot.IDVot=Voti.IDvot AND {0} ORDER BY RANDOM() LIMIT 1", queryFilter); + return Helper.ExecuteScalar(cn, query, objLock); + } + + public int UpdateVoto(long IDrac, string NewVoto) { + Logger.Warning("Funzione 'UpdateVoto(IDrac, NewVoto) ancora da fare."); + return -1; + } + + #endregion } //class DBTools diff --git a/Src/A69WD/Data/Helper.cs b/Src/A69WD/Data/Helper.cs index 78c9ff1..c213c24 100644 --- a/Src/A69WD/Data/Helper.cs +++ b/Src/A69WD/Data/Helper.cs @@ -70,6 +70,61 @@ namespace A69WD.Data { + + /// + /// Esegue una query che ritorna un scalare + /// + /// Query da eseguire sul DB + /// Scalare ritornato dalla query + public static long ExecuteScalar(SQLiteConnection conn, string query, object objLock) { + lock (objLock) { + try { + // Eseguo il comando + System.Data.SQLite.SQLiteCommand cm = new SQLiteCommand(query, conn); + long res = (long)cm.ExecuteScalar(System.Data.CommandBehavior.SingleResult); + return res; + } catch (Exception ex) { + if (ex.Message == "Object reference not set to an instance of an object.") { + // nessun record trovato che soddisfi la query + return 0; + } else { + Logger.Error(string.Format("Error Code: {0} - Errore in {1}.{2}: {3}", "ER00100", System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodInfo.GetCurrentMethod().Name, ex.Message)); + return -1; + } + } + } + } // ExecuteScalar + + + /// + /// Conteggia il numero di record nella colonna indicata contenuti nella tabella indicata. + /// + /// Connessione al DB + /// Nome della tabella in cui fare la query + /// Nome del campo da contare + /// Oggetto per il lock fra i thread + /// Il numero di record trovati, oppure un codice negativo in caso di errore. + public static long CountSimpleRecord(SQLiteConnection conn, string tableName, string columName, object objLock) { + // Ricreo la query: + string query = $"SELECT count(Distinct {tableName}.{columName}) AS NUM FROM {tableName}"; + lock (objLock) { + try { + // Eseguo il comando + System.Data.SQLite.SQLiteCommand cm = new SQLiteCommand(query, conn); + long res = (long)cm.ExecuteScalar(System.Data.CommandBehavior.SingleResult); + return res; + } catch (Exception ex) { + if (ex.Message == "Object reference not set to an instance of an object.") { + // nessun record trovato che soddisfi la query + return 0; + } else { + Logger.Error(string.Format("Error Code: {0} - Errore in {1}.{2}: {3}", "ER00100", System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodInfo.GetCurrentMethod().Name, ex.Message)); + return -1; + } + } + } + }//CountSimpleRecord + }//class Helper public enum SaveResult { diff --git a/Src/A69WD/General/Navigator.cs b/Src/A69WD/General/Navigator.cs new file mode 100644 index 0000000..186057c --- /dev/null +++ b/Src/A69WD/General/Navigator.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace A69WD { + + public class Navigator { + + + #region Fields: buffer, indice, DB + + /// + /// Array interno che mi memorizza gli ID degli ultimi racconti visualizzati + /// + private long[] buffer = null; + + /// + /// Indice del racconto attualmente visualizzato + /// + private long indice = 0; + + /// + /// Interfaccia con il database + /// + private DBTools DB = null; + + #endregion + + + #region Costrutore + + /// + /// Costruttore + /// + /// Dimensione del buffer, cioè numero di racconti di cui tener memoria + public Navigator(int size) { + buffer = new long[size]; + for (int i = 0; i < size; i++) { buffer[i] = -1; } + DB = App.DB; + } + + #endregion + + + #region Metodi di navigazione: + + /// + /// Ritorna l'ID del racconto attualmente visualizzato + /// 0 indica la pagina home con il riepilogo del ATDB + /// + public long ActualID { get { return buffer[indice]; } } + + /// + /// Ritorna il riepilogo dell'archivio + /// + public string Home { get { return DB.Report; } } + + /// + /// Ritorna il testo del racconto successivo a quello visualizzato attualmente, nel buffer di navigazione + /// + public string Forward { + get { + // Aggiorno indice attuale: + long tmp = indice + 1; + if (tmp >= buffer.Length) tmp = 0; + if (buffer[tmp] != -1) indice = tmp; + + // Ritorno il testo del racconto: + return DB.GetRacById(buffer[indice]).ToString(); + } + } + + /// + /// Ritorna il testo del racconto precedente a quello visualizzato attualmente, nel buffer di navigazione + /// + public string Backward { + get { + // Aggiorno indice attuale: + long tmp = indice - 1; + if (tmp < 0) tmp = buffer.Length - 1; + if (buffer[tmp] != -1) indice = tmp; + + // Ritorno il testo del racconto: + return DB.GetRacById(buffer[indice]).ToString(); + } + } + + /// + /// Ritorna il testo del racconto con ID successivo a quello visualizzato attualmente + /// + public string Next { + get { + // Aggiorno indice attuale: + long newID = buffer[indice]; + if (newID > 0) { + newID++; + return SwitchTo(newID); + } else { + return Refresh; + } + } + } + + /// + /// Ritorna il testo del racconto con ID precedente a quello visualizzato attualmente + /// + public string Previous { + get { + // Aggiorno indice attuale: + long newID = buffer[indice]; + if (newID > 1) { + newID--; + return SwitchTo(newID); + } else { + return Refresh; + } + } + } + + /// + /// Ricarica il testo del racconto attuale + /// + public string Refresh { + get { + if (buffer[indice] > 0) { + return DB.GetRacById(buffer[indice]).ToString(); + } else { return Home; } + } + } + + /// + /// Ritorna il testo di un racconto scelto casualmente nel DB + /// + public string RandomRac { + get { + // Aggiorno indice attuale: + indice++; + if (indice >= buffer.Length) indice = 0; + buffer[indice] = DB.GetRandomIDrac(); + + // Ritorno il testo del racconto: + return DB.GetRacById(buffer[indice]).ToString(); + } + } + + /// + /// Ritorna l'ID del nuovo racconto prendendo quello indicato + /// + /// ID del racconto da visualizzare + /// + public string SwitchTo(long NewIdRac) { + // Aggiorno indice attuale: + indice++; + if (indice >= buffer.Length) indice = 0; + buffer[indice] = NewIdRac; + + // Ritorno il testo del racconto: + return DB.GetRacById(buffer[indice]).ToString(); + } + + /// + /// Ricarica il testo del racconto attuale + /// + public string UpdateVoto(string newVoto) { + long id = buffer[indice]; + if (id > 0) { + DB.UpdateVoto(id, newVoto); + return DB.GetRacById(id).ToString(); + } else { return Home; } + } + + + #endregion + + + + }//class Navigator +}//namespace A69WD diff --git a/Src/A69WD/UI/frmReader.Designer.cs b/Src/A69WD/UI/frmReader.Designer.cs new file mode 100644 index 0000000..7727cfd --- /dev/null +++ b/Src/A69WD/UI/frmReader.Designer.cs @@ -0,0 +1,116 @@ +namespace A69WD.UI { + partial class frmReader { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.rtb = new System.Windows.Forms.RichTextBox(); + this.sb = new System.Windows.Forms.StatusStrip(); + this.sbMessage = new System.Windows.Forms.ToolStripStatusLabel(); + this.sbProgressBar = new System.Windows.Forms.ToolStripProgressBar(); + this.sbStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.sb.SuspendLayout(); + this.SuspendLayout(); + // + // rtb + // + this.rtb.BackColor = System.Drawing.Color.White; + this.rtb.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.rtb.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtb.Font = new System.Drawing.Font("Verdana", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rtb.Location = new System.Drawing.Point(0, 0); + this.rtb.Name = "rtb"; + this.rtb.Size = new System.Drawing.Size(700, 420); + this.rtb.TabIndex = 3; + this.rtb.Text = ""; + this.rtb.KeyDown += new System.Windows.Forms.KeyEventHandler(this.KeyDownAnalisi); + // + // sb + // + this.sb.AutoSize = false; + this.sb.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.sbMessage, + this.sbProgressBar, + this.sbStatusLabel}); + this.sb.Location = new System.Drawing.Point(0, 420); + this.sb.Name = "sb"; + this.sb.Size = new System.Drawing.Size(700, 24); + this.sb.TabIndex = 2; + this.sb.Text = "statusStrip1"; + // + // sbMessage + // + this.sbMessage.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.sbMessage.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner; + this.sbMessage.Name = "sbMessage"; + this.sbMessage.Size = new System.Drawing.Size(472, 19); + this.sbMessage.Spring = true; + this.sbMessage.Text = "Messaggi"; + this.sbMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.sbMessage.ToolTipText = "Messaggio"; + // + // sbProgressBar + // + this.sbProgressBar.Name = "sbProgressBar"; + this.sbProgressBar.Size = new System.Drawing.Size(60, 18); + this.sbProgressBar.ToolTipText = "Percentuale di lavoro"; + // + // sbStatusLabel + // + this.sbStatusLabel.AutoSize = false; + this.sbStatusLabel.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.sbStatusLabel.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner; + this.sbStatusLabel.Name = "sbStatusLabel"; + this.sbStatusLabel.Size = new System.Drawing.Size(120, 19); + this.sbStatusLabel.ToolTipText = "Stato di eventuali operazioni in background"; + // + // frmReader + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(700, 444); + this.ControlBox = false; + this.Controls.Add(this.rtb); + this.Controls.Add(this.sb); + this.Name = "frmReader"; + this.Text = "PlugIn_App_Reader.UI Reader (DB vrs1.3, App" + + " vrsX.X.X.X)"; + this.sb.ResumeLayout(false); + this.sb.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox rtb; + private System.Windows.Forms.StatusStrip sb; + private System.Windows.Forms.ToolStripStatusLabel sbMessage; + private System.Windows.Forms.ToolStripProgressBar sbProgressBar; + private System.Windows.Forms.ToolStripStatusLabel sbStatusLabel; + + } +} \ No newline at end of file diff --git a/Src/A69WD/UI/frmReader.cs b/Src/A69WD/UI/frmReader.cs new file mode 100644 index 0000000..b354307 --- /dev/null +++ b/Src/A69WD/UI/frmReader.cs @@ -0,0 +1,631 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using A69WD.Data; + +namespace A69WD.UI { + public partial class frmReader : Form { + + + public frmReader() { + InitializeComponent(); + + // Imposto caption: + this.Text = String.Format("A69WD - Reader Vrs {0}", cTools.AssemblyVersion); + + // Imposto field interni: + nav = new Navigator(25); + + // Visualizzo la pagina iniziale di riepilogo dell'archivio + rtb.Text = nav.Home; + + // Aggiorno la status bar + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + } + + /// + /// Gestione della navigazione fra i racconti + /// + private Navigator nav = null; + + + private void KeyDownAnalisi(object sender, KeyEventArgs e) { + + #region Keys.F1 --> Show Help + //if (e.KeyCode == Keys.F1) { + // sbMessage.Text = "Show Help"; + // MessageBox.Show(this, Help(), "Help", MessageBoxButtons.OK); + // return; + //} + #endregion + + #region Keys.ESC --> Hide Reader + if (e.KeyCode == Keys.Escape) { + this.Hide(); + return; + } + #endregion + + #region Keys.F2 --> Show Rac by ID + //if (e.KeyCode == Keys.F2) { + // // Form per richiedere l'ID di un racconto specifico da visualizzare: + // frmRqId frmi = new frmRqId(); + // frmi.Left = Left + (Width - frmi.Width) / 2; + // frmi.Top = Top + (Height - frmi.Height) / 2; + // // Visualizzo il racconto richiesto: + // if (frmi.ShowDialog() == DialogResult.OK) { + // rtb.Text = nav.SwitchTo(frmi.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // frmi.Close(); + // return; + //} + #endregion + + #region Keys.F3 --> Show Rac random + if (e.KeyCode == Keys.F3) { + // Show New Random Rac + rtb.Text = nav.RandomRac; + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.F4 --> Genera un racconto nuovo + if (e.KeyCode == Keys.F4) { + // Genera un racconto nuovo + StringBuilder sb = new StringBuilder(); + sb.AppendLine("- ID Rac: 0"); + sb.AppendLine("- Title: Titolo del nuovo racconto"); + sb.AppendLine("- SubTit: "); + sb.AppendLine("- Autors: Mrk"); + sb.AppendLine("- Voto: Non Letto"); + sb.AppendLine("- Tags: Uncategorized"); + sb.AppendLine("- Notes: SrcFile -|- Generated Internally"); + sb.AppendLine(string.Format("- Creato: {0}", DateTime.Now.ToString("yyyy/MM/dd"))); + sb.AppendLine(string.Format("- Update: {0}", DateTime.Now.ToString("yyyy/MM/dd"))); + sb.AppendLine("- Origin: Mrk"); + sb.AppendLine("- Trama: Trama del nuovo racconto"); + rtb.Text = sb.ToString(); + System.Windows.Forms.Clipboard.SetText(sb.ToString()); + sbMessage.Text = string.Format("Generato un racconto nuovo, salvarlo con F8"); + return; + } + #endregion + + #region Keys.F5 --> Refresh Rac + if (e.KeyCode == Keys.F5) { + rtb.Text = nav.Refresh; + sbMessage.Text = string.Format("Racconto {0} Refresh", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.F8 --> Edit Rac + if (e.KeyCode == Keys.F8) { + // Edit Rac + // Rileggo il testo che visualizzo (e che ho eventualmente editato) per recuperare i testi in esso e li salvo + // Se ID=0 o non specificato, aggiungo il testo come nuovo, altrimenti faccio l'update del racconto. + cRac[] racs = null; + int res = cRac.Read(rtb.Text, out racs); + if (res > 0) { + rtb.Text = string.Format("Trovati {0} racconti:\r\n", racs.Length); + res = 0; + foreach (cRac rac in racs) { + // Aggiorno il racconto in memoria + res += App.DB.UpdateRac(rac); + } + if (res == racs.Length) { + rtb.Text = nav.SwitchTo(racs[0].IDrac); + sbMessage.Text = string.Format("Importato/Aggiornato correttamente {0} racconti", res.ToString("00000")); + } else { + rtb.Text = App.DB.GetRacById(nav.ActualID).ToString(); + sbMessage.Text = string.Format("Errore in lettura di {0}", nav.ActualID.ToString("00000")); + } + } else { + rtb.Text = "Lettura del racconto non riuscita"; + } + return; + } + #endregion + + #region Keys.F10 --> Bookmarks + if (e.KeyCode == Keys.F10) { + // ToDo: Keys.F10 --> Bookmarks + sbMessage.Text = "Keys.F10 --> Comando in sviluppo, non tutte le funzioni sono completate"; + return; + } + #endregion + + #region Keys.F12 --> Votazione + //if (e.KeyCode == Keys.F12 && (!e.Control) && (!e.Alt) && (!e.Shift)) { + // // Vote Rac + // long id = nav.ActualID; + // if (id < 0) return; + // frmVoto frmv = new frmVoto(App.DB.GetRacById(id)); + // frmv.Left = Left + (Width - frmv.Width) / 2; + // frmv.Top = Top + (Height - frmv.Height) / 2; + // if (frmv.ShowDialog() == DialogResult.OK) { + // rtb.Text = nav.UpdateVoto(frmv.Voto); + // sbMessage.Text = string.Format("Racconto {0} Voted", nav.ActualID.ToString("00000")); + // } else { + // rtb.Text = nav.Refresh; + // sbMessage.Text = string.Format("Racconto {0} Refresh", nav.ActualID.ToString("00000")); + // } + // frmv.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.H --> Home + if (e.Alt && (e.KeyCode == Keys.H)) { + rtb.Text = nav.Home; + sbMessage.Text = string.Format("Home {0}", nav.ActualID.ToString("00000")); + } + #endregion + + #region Keys.Alt+Keys.Left --> Navigazione backward fra i racconti già visualizzati + if (e.Alt && (e.KeyCode == Keys.Left)) { + // Show Rac Backward + rtb.Text = nav.Backward; + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.Right --> Navigazione forward fra i racconti già visualizzati + if (e.Alt && (e.KeyCode == Keys.Right)) { + // Show Rac Forward + rtb.Text = nav.Forward; + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.Down --> Navigazione verso il racconto con ID precedente (ID Meno 1) a quello visualizzato + if (e.Alt && (e.KeyCode == Keys.Down)) { + // Show Rac Meno 1 + rtb.Text = nav.Previous; + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.Up --> Navigazione verso il racconto con ID successivo (ID Più 1) a quello visualizzato + if (e.Alt && (e.KeyCode == Keys.Up)) { + // Show Rac Più 1 + rtb.Text = nav.Next; + sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.+ --> Incrementa la dimensione del font + if (e.Alt && (e.KeyCode == Keys.Add)) { + // Increse text size + Font f = new System.Drawing.Font(rtb.Font.FontFamily, rtb.Font.Size + 1.0F); + rtb.Font = f; + sbMessage.Text = string.Format("Racconto {0} Size Increase", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.- --> Decrementa la dimensione del font + if (e.Alt && (e.KeyCode == Keys.Subtract)) { + // Decrease text size + Font f = new System.Drawing.Font(rtb.Font.FontFamily, rtb.Font.Size - 1.0F); + rtb.Font = f; + sbMessage.Text = string.Format("Racconto {0} Size Decrease", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.* --> Imposta il font alla dimensione di default + if (e.Alt && (e.KeyCode == Keys.Multiply)) { + // Reset text size + Font f = new System.Drawing.Font(rtb.Font.FontFamily, (float)10.0); + rtb.Font = f; + sbMessage.Text = string.Format("Racconto {0} Size Default", nav.ActualID.ToString("00000")); + return; + } + #endregion + + #region Keys.Alt+keys.F --> Editazione filtri: + //if (e.Alt && (e.KeyCode == Keys.F)) { + // // preparo l'interfaccia per la gestione filtri: + // frmFilters frmF = new frmFilters(DB); + // frmF.Left = Left + (Width - frmF.Width) / 2; + // frmF.Top = Top + (Height - frmF.Height) / 2; + // // Visualizzo l'interfaccia: + // if (frmF.ShowDialog() == DialogResult.OK) { sbMessage.Text = string.Format("FVoti: {0} - FTags: {1}", DB.FVoti, DB.FTags); } + // frmF.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.A --> Navigazione fra i racconti dello stesso autore + //if (e.Alt && (e.KeyCode == Keys.A)) { + // // Show All Rac of this Autor + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Racconti dell'autore:"; + // int res = DB.GetListByRacAutor(nav.ActualID, frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.T --> Navigazione fra i racconti via tag: + //if (e.Alt && (e.KeyCode == Keys.T)) { + // // Show All Tag + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Elenco Tags:"; + // int res = DB.GetListTags(nav.ActualID, frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Show all rac del tag selezionato + // res = DB.GetListByTags(frml.ID, frml.LV); + // frml.Title = "Racconti del tag: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.V --> Navigazione fra i racconti via Voto: + //if (e.Alt && (e.KeyCode == Keys.V)) { + // // Show All Voto + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Elenco Voti Assegnati:"; + // int res = DB.GetListVoti(nav.ActualID, frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Show all rac del tag selezionato + // frml.Title = "Racconti del voto: " + frml.Descr; + // res = DB.GetListByVoto(frml.ID, frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.D --> Navigazione fra i racconti via Data: + //if (e.Alt && (!e.Shift) && (e.KeyCode == Keys.D)) { + // // Show All Year + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Elenco per anno di creazione:"; + // int res = DB.GetListByCreationDate(frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // if (frml.Num == 1) { + // // Per l'anno vi è 1 solo racconto, e quindi lo mostro direttamente: + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } else { + // // Show all Month dell'anno selezionato + // string strYear = frml.Descr; + // res = DB.GetListByYear(strYear, frml.LV); + // frml.Title = "Elenco mesi dell'anno " + strYear; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // if (frml.Num == 1) { + // // Per l'anno e mese selezionato, vi è 1 solo racconto, e quindi lo mostro direttamente: + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } else { + // // Show all Days del mese, dell'anno, selezionato + // string strMonth = frml.Descr; + // res = DB.GetListByMonth(strYear, strMonth, frml.LV); + // frml.Title = "Elenco giorni del mese " + strMonth + "/" + strYear; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // if (frml.Num == 1) { + // // solo un racconto nel mese indicato, lo visualizzo subito + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } else { + // string strDay = frml.Descr; + // res = DB.GetListByDay(strYear, strMonth, strDay, frml.LV); + // frml.Title = "Elenco racconti del giorno " + strDay + "/" + strMonth + "/" + strYear; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // } + // } + // } + // } + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Keys.Alt+keys.L --> Navigazione degli ultimi 25 racconti updated e non letti: + //if (e.Alt && (e.KeyCode == Keys.L)) { + // #region + // // Show last 25 racconti updated: + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Ultimi 25 racconti modificati:"; + // int res = DB.GetListByUpdate(50, frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Vi è un solo racocnto e lo visualizzo: + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // frml.Close(); + // //this.Select(); + // return; + // #endregion + //} + #endregion + + #region Keys.Alt+keys.I --> Navigazione fra i racconti via iniziale titolo: + //if (e.Alt && (!e.Shift) && (e.KeyCode == Keys.I)) { + // // Show All Iniziali + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // frml.Title = "Elenco iniziali dei titoli:"; + // int res = DB.GetListByIniziali(frml.LV); + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // if (frml.Num == 1) { + // // Per l'iniziale vi è 1 solo racconto, e quindi lo mostro direttamente: + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } else { + // // Show all titoli con l'iniziale selezionata + // string iniziale = frml.Descr; + // res = DB.GetListByIniziale(iniziale, frml.LV); + // frml.Title = "Elenco titoli con l'iniziale " + iniziale; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Shift+keys.Alt+keys.D --> Visualizza tutti i racconti non letti con la data attuale: + //if (e.Alt && e.Shift && (e.KeyCode == Keys.D)) { + // // ricavo la data del racconto visualizzato: + // cRac rac = App.DB.GetRacById(nav.ActualID); + // string strYear = rac.Creato.Year.ToString("0000"); + // string strMonth = rac.Creato.Month.ToString("00"); + // string strDay = rac.Creato.Day.ToString("00"); + // // Show tutti i racconti non letti della data indicata: + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // int res = DB.GetListByDay(strYear, strMonth, strDay, frml.LV); + // frml.Title = "Elenco racconti del giorno " + strDay + "/" + strMonth + "/" + strYear; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Shift+Keys.Alt+keys.I --> Navigazione fra i racconti con la stessa iniziale del titolo: + //if (e.Alt && e.Shift && (e.KeyCode == Keys.I)) { + // // ricavo L'iniziale del titolo del racocnto visualizzato: + // cRac rac = App.DB.GetRacById(nav.ActualID); + // string iniziale = rac.Title.Substring(0, 1); + // // Show All Iniziali + // frmList frml = new frmList(); + // frml.Height = this.Height - 64; + // frml.Width = this.Width - 64; + // frml.Left = Left + (Width - frml.Width) / 2; + // frml.Top = Top + (Height - frml.Height) / 2; + // int res = DB.GetListByIniziale(iniziale, frml.LV); + // frml.Title = "Elenco titoli con l'iniziale " + iniziale; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // // Se racconto selezionato è uno solo, lo visualizzo, altrimenti mostro nuovo elenco + // if (frml.Num > 1) { + // // più racconti dallo stesso titolo: + // res = DB.GetListByTitle(frml.Descr, frml.LV); + // frml.Title = "Racconti con il titolo: " + frml.Descr; + // if ((res > 0) && (frml.ShowDialog() == DialogResult.OK)) { + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } else { + // // 1 solo racconto + // rtb.Text = nav.SwitchTo(frml.ID); + // sbMessage.Text = string.Format("Racconto {0}", nav.ActualID.ToString("00000")); + // } + // } + // frml.Close(); + // return; + //} + #endregion + + #region Shift+keys.Alt+F12 --> Ricrea l'intero DB eliminando i racconti segnati da eliminare + if (e.KeyCode == Keys.F12 && (!e.Control) && e.Alt && e.Shift) { + // ToDo: Shift+Alt+F12 --> Ricrea l'intero DB eliminando i racconti segnati da eliminare + sbMessage.Text = "Shift+Alt+F12 --> Comando in sviluppo, non tutte le funzioni sono completate"; + return; + } + #endregion + + #region Keys.Alt+Keys.Q --> Esegue una query personalizzata: + if (e.Alt && (e.KeyCode == Keys.Z)) { + // ToDo: Keys.Alt+Keys.Q --> Esegue una query personalizzata + sbMessage.Text = "Keys.Alt+Keys.Q --> Comando in sviluppo, non tutte le funzioni sono completate"; + return; + } + #endregion + + #region Keys.Alt+keys.Z --> Analisi Racconti Duplicati: + if (e.Alt && (e.KeyCode == Keys.Z)) { + // ToDo: Keys.Alt+keys.Z --> Analisi Racconti Duplicati: + sbMessage.Text = "Shift+Alt+F12 --> Comando in sviluppo, non tutte le funzioni sono completate"; + return; + } + #endregion + + #region Keys.Alt+keys.S --> Crea uno snapshot di n racconti formattati e li converte in ebook + //if (e.Alt && (e.KeyCode == Keys.S)) { + // // // ToDo: Keys.Alt+keys.S --> Crea uno snapshot di n racconti formattati e li converte in ebook + // // sbMessage.Text = "Keys.Alt+keys.S --> Comando in sviluppo, non tutte le funzioni sono completate"; + // // return; + // cmdCreaEbook(); + //} + #endregion + + #region Keys.Alt+keys.U --> Unione di due racconti + //if (e.Alt && (e.KeyCode == Keys.U)) { + // // ToDo: Keys.Alt+keys.U --> Unione di due racconti + // // - chiede l'ID dei due racconti da unire + // frmIDs frmid = new frmIDs(); + // frmid.Left = Left + (Width - frmid.Width) / 2; + // frmid.Top = Top + (Height - frmid.Height) / 2; + // if (frmid.ShowDialog() != DialogResult.OK) { + // sbMessage.Text = "Anullato inserimento degli ID dei racconti da unire"; + // return; + // } + // if ((frmid.IDleft <= 0) || (frmid.IDright <= 0)) { + // sbMessage.Text = "ID dei racconti da unire non validi"; + // return; + // } + // // - ricavo i due racconti da unire: + // cRac left = DB.GetRacById(frmid.IDleft); + // cRac right = DB.GetRacById(frmid.IDright); + // frmid.Close(); + // // - visualizza il form di unione + // frmUnion frm = new frmUnion(left, right, DB); + // if (frm.ShowDialog() == DialogResult.OK) { + // // - Left: il racconto unione: + // left = frm.Unione; + // // - Right: lo indico come duplicato: + // right.Title = "Doppione"; + // right.SubTitle = left.strIDrac; + // right.Voto = "Da Cancellare"; + // right.Tags.Clear(); + // right.Tags.Add("Doppione"); + // right.Notes.Clear(); + // right.Notes.Add(new cNota("SrcFile", "Doppione")); + // right.Trama = "Racconto duplicato del " + left.strIDrac; + // // - Aggiorno il DB + // if ((right.IsValid) && (left.IsValid)) { + // App.DB.UpdateRac(right); + // App.DB.UpdateRac(left); + // } + // } + // frm.Close(); + // return; + //} + #endregion + + #region + + #endregion + } + + + + + } +} diff --git a/Src/A69WD/UI/frmReader.resx b/Src/A69WD/UI/frmReader.resx new file mode 100644 index 0000000..81d325e --- /dev/null +++ b/Src/A69WD/UI/frmReader.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file