a cui si levano i DIV interni.
+ try {
+ nodes = root.SelectNodes("//div[@class='testoracc']");
+ foreach (HtmlNode nd in nodes) {
+ foreach (HtmlNode n in nd.ChildNodes) {
+ if (n.Name.ToUpper() == "#TEXT") { rac.Trama += cTools.FormattaTesto(n.InnerText.Trim(), false); }
+ if (n.Name.ToUpper() == "BR") { rac.Trama += "\r"; }
+ if (n.Name.ToUpper() == "DIV") {; }
+ }
+ }
+ } catch (Exception ex) { Logger.Error(string.Format("Fallita estrazione Trama dal file {0}\r\n{1}", FileName, ex.Message)); return null; }
+ #endregion
+
+ #region Voto: --> Sempre "Non Letto"
+ rac.Voto = "Non Letto";
+ #endregion
+
+ #region Notes: --> SrcFile - Nome del file che si analizza
+ rac.Notes = new List
();
+ rac.Notes.Add(new Data.cNota("SrcFile", System.IO.Path.GetFileName(FileName)));
+ #endregion
+
+ // Formalizzo esito estrazione:
+ if (!rac.Validate()) {
+ rac = null;
+ }
+
+ } catch (Exception ex) {
+ Logger.Error($"A69 - Import Error - {FileName}: {ex.Message}");
+ Console.WriteLine($"A69 - Import Error - {FileName}: {ex.Message}");
+ return null;
+ }
+ return rac;
+ }
protected virtual void Format_Insert_Tags(Data.cRac rac, List items) {
// Per ora riporto tutti i tag rilevati, mentre in futuro dovrò:
diff --git a/Src/A69WD/Net/iLink.cs b/Src/A69WD/Net/iLink.cs
index 19799e8..59da2de 100644
--- a/Src/A69WD/Net/iLink.cs
+++ b/Src/A69WD/Net/iLink.cs
@@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using A69WD.Data;
+using HtmlAgilityPack;
+
namespace A69WD.Net {
@@ -42,6 +45,8 @@ namespace A69WD.Net {
eLinkState Status { get; set; }
+ cRac EstraiRac(HtmlDocument doc);
+
}//interface iLink
}//namespace A69WD.Net
diff --git a/Src/A69WD/Properties/AssemblyInfo.cs b/Src/A69WD/Properties/AssemblyInfo.cs
index 61070cc..2d7310d 100644
--- a/Src/A69WD/Properties/AssemblyInfo.cs
+++ b/Src/A69WD/Properties/AssemblyInfo.cs
@@ -32,8 +32,24 @@ using System.Runtime.InteropServices;
// È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build
// usando l'asterisco '*' come illustrato di seguito:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.4.0.0")]
-[assembly: AssemblyFileVersion("0.4.0.0")]
+[assembly: AssemblyVersion("0.5.0.0")]
+[assembly: AssemblyFileVersion("0.5.0.0")]
+
+
+/*
+ *
+ * Vrs 0.5.0.0
+ *
+ * Compilata da CSiCoAlm il 2025/12/29
+ * Inserito reader basilare (solo lettura, navigazione random o sequenziale)
+ * Integrato import e skraping sul reader
+ *
+ * ToDo:
+ * - Aggiungere gestione parallela della FIFO secondo vecchi modello per aumentare il feedback alla UI
+ * - Inserire anche l'estrazione dei racconti
+ * - Inserire funzionalità avanzate sul lettore
+ *
+ */
/*
diff --git a/Src/A69WD/Service/Service_Crawler.cs b/Src/A69WD/Service/Service_Crawler.cs
index adc3e8f..dfe5e41 100644
--- a/Src/A69WD/Service/Service_Crawler.cs
+++ b/Src/A69WD/Service/Service_Crawler.cs
@@ -32,26 +32,14 @@ namespace A69WD.Service {
// HttpClient autenticato (fornito da AuthService)
private iSiteType _site;
-
- public Service_Crawler(Label lblInCorso, ProgressBar pbStatus) {
- _semaphore = new SemaphoreSlim(Cfg.Settings.nThread);
- _lblInCorso = lblInCorso;
- _progressBar = pbStatus;
- }
-
-
-
-
-
-
// Riferimenti ai controlli UI per aggiornare i contatori e la progress bar
- private readonly Label _lblInCorso;
- //private readonly Label _lblCompletati;
- //private readonly Label _lblDaFare;
- //private readonly Label _lblErrori;
- private readonly ProgressBar _progressBar;
+ private readonly StatusStrip _sb;
+ public Service_Crawler(StatusStrip sb) {
+ _semaphore = new SemaphoreSlim(Cfg.Settings.nThread);
+ _sb = sb;
+ }
@@ -93,13 +81,13 @@ namespace A69WD.Service {
try {
List urls = await _site.CrawlPageAsync(link);
Logger.Information("ProcessQueue: end url " + link.FileName + " - URL trovati: " + urls.Count.ToString("000"));
- foreach (iLink url in urls) {
+ foreach (iLink url in urls) {
if (url.Validate) {
- // Logger.Warning("URL Validato: " + url.FileName);
+ // Logger.Warning("URL Validato: " + url.FileName);
App.DB.LinkLog(url);
_urlQueue.Add(url);
- //} else {
- // Logger.Warning("URL NON Validato: " + url.FileName);
+ //} else {
+ // Logger.Warning("URL NON Validato: " + url.FileName);
}
}
} catch (Exception ex) {
@@ -121,30 +109,27 @@ namespace A69WD.Service {
/// Aggiorna i contatori e la progress bar sulla UI.
///
private void UpdateCounters() {
- if (_lblInCorso.InvokeRequired) {
- _lblInCorso.Invoke(new Action(UpdateCounters));
+ if (_sb.InvokeRequired) {
+ _sb.Invoke(new Action(UpdateCounters));
return;
}
int daFare = _urlQueue.Count;
-
- _lblInCorso.Text = $"In corso: {_inCorso} - Completati: {_completati} - Errori: {_errori} - Da fare: {daFare}";
-
int totale = _inCorso + _completati + _errori + daFare;
int fatti = _completati + _errori;
-
- _progressBar.Maximum = totale > 0 ? totale : 1;
- _progressBar.Value = fatti;
+
+ //_sb.Items["sbStatusLabel"].Text = $"In corso: {_inCorso} - Completati: {_completati} - Errori: {_errori} - Da fare: {daFare}";
+ _sb.Items["sbStatusLabel"].Text = $"{totale}|{_inCorso}|{fatti}|{_errori}";
+ _sb.Items["sbStatusLabel"].ToolTipText = "Totali | In Corso | Fatti | Error";
+
+ (_sb.Items["sbProgressBar"] as ToolStripProgressBar).Maximum = totale > 0 ? totale : 1;
+ (_sb.Items["sbProgressBar"] as ToolStripProgressBar).Value = fatti;
}
-
-
-
-
}
}
diff --git a/Src/A69WD/Service/Service_Importer.cs b/Src/A69WD/Service/Service_Importer.cs
index c14c1f1..6fc9e38 100644
--- a/Src/A69WD/Service/Service_Importer.cs
+++ b/Src/A69WD/Service/Service_Importer.cs
@@ -19,17 +19,15 @@ namespace A69WD.Service {
// Thread worker che consuma la coda
private Thread _workerThread;
- private readonly Label _lblInCorso;
- private readonly ProgressBar _progressBar;
+ private readonly StatusStrip _sb;
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 Service_Importer(StatusStrip sb) {
+ _sb = sb;
}
public void StartWorker(string path) {
@@ -104,17 +102,18 @@ namespace A69WD.Service {
private void UpdateCounters() {
- if (_lblInCorso.InvokeRequired) {
- _lblInCorso.Invoke(new Action(UpdateCounters));
+ if (_sb.InvokeRequired) {
+ _sb.Invoke(new Action(UpdateCounters));
return;
}
int daFare = _totali - _completati - _errori;
- _lblInCorso.Text = $"Totali: {_totali} - Completati: {_completati} - Errori: {_errori} - Da fare: {daFare}";
+ _sb.Items["sbStatusLabel"].Text = $"{_totali}|{_completati}|{_errori}";
+ _sb.Items["sbStatusLabel"].ToolTipText = "Totali | Completati | Error";
- _progressBar.Maximum = _totali > 0 ? _totali : 1;
- _progressBar.Value = _completati + _errori;
+ (_sb.Items["sbProgressBar"] as ToolStripProgressBar).Maximum = _totali > 0 ? _totali : 1;
+ (_sb.Items["sbProgressBar"] as ToolStripProgressBar).Value = _completati + _errori;
}
diff --git a/Src/A69WD/Settings.cfg b/Src/A69WD/Settings.cfg
index 7b4bc86..2b28f54 100644
--- a/Src/A69WD/Settings.cfg
+++ b/Src/A69WD/Settings.cfg
@@ -20,7 +20,7 @@
C:\Program Files\Notepad++\notepad++.exe
- 9
+ 3
\ No newline at end of file
diff --git a/Src/A69WD/Site/cSite_A69.cs b/Src/A69WD/Site/cSite_A69.cs
index 5d2a816..4601ae9 100644
--- a/Src/A69WD/Site/cSite_A69.cs
+++ b/Src/A69WD/Site/cSite_A69.cs
@@ -5,6 +5,7 @@ using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
+using A69WD.Data;
using A69WD.Net;
using HtmlAgilityPack;
@@ -239,6 +240,17 @@ namespace A69WD.Site {
}
#endregion
+ #region Estraggo il racconto dal file e lo inserisco nel DB
+ if (lk.FileName.StartsWith("A69_")) {
+ // Link ad un racconto
+ cRac rac = lk.EstraiRac(tdoc);
+ if (rac != null) {
+ // Racconto estratto correttamente, lo salvo sul DB
+ App.DB.ImportRac(rac);
+ }
+ }
+ #endregion
+
lk.Status = eLinkState.End;
App.DB.LinkLog(lk);
}
diff --git a/Src/A69WD/UI/frmDownloader.Designer.cs b/Src/A69WD/UI/frmDownloader.Designer.cs
deleted file mode 100644
index 2c1e625..0000000
--- a/Src/A69WD/UI/frmDownloader.Designer.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-namespace A69WD {
- partial class frmDownloader {
- ///
- /// 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.btnClose = new System.Windows.Forms.Button();
- this.btnDownloadAll = new System.Windows.Forms.Button();
- this.lblST = new System.Windows.Forms.Label();
- this.btnImportLinks = new System.Windows.Forms.Button();
- this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
- this.btnShowLog = new System.Windows.Forms.Button();
- this.pbST = new System.Windows.Forms.ProgressBar();
- this.btnImport = new System.Windows.Forms.Button();
- this.btnTest = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // btnClose
- //
- this.btnClose.Location = new System.Drawing.Point(348, 12);
- this.btnClose.Name = "btnClose";
- this.btnClose.Size = new System.Drawing.Size(79, 33);
- this.btnClose.TabIndex = 14;
- this.btnClose.Text = "Close";
- this.btnClose.UseVisualStyleBackColor = true;
- this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
- //
- // btnDownloadAll
- //
- this.btnDownloadAll.Location = new System.Drawing.Point(12, 12);
- this.btnDownloadAll.Name = "btnDownloadAll";
- this.btnDownloadAll.Size = new System.Drawing.Size(79, 33);
- this.btnDownloadAll.TabIndex = 11;
- this.btnDownloadAll.Text = "Start A69";
- this.btnDownloadAll.UseVisualStyleBackColor = true;
- this.btnDownloadAll.Click += new System.EventHandler(this.btnDownloadAll_Click);
- //
- // lblST
- //
- this.lblST.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.lblST.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.lblST.Location = new System.Drawing.Point(0, 73);
- this.lblST.Name = "lblST";
- this.lblST.Size = new System.Drawing.Size(433, 22);
- this.lblST.TabIndex = 9;
- this.lblST.Text = "Status";
- this.lblST.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- //
- // btnImportLinks
- //
- this.btnImportLinks.Enabled = false;
- this.btnImportLinks.Location = new System.Drawing.Point(97, 12);
- this.btnImportLinks.Name = "btnImportLinks";
- this.btnImportLinks.Size = new System.Drawing.Size(79, 33);
- this.btnImportLinks.TabIndex = 15;
- this.btnImportLinks.Text = "From DB";
- this.btnImportLinks.UseVisualStyleBackColor = true;
- this.btnImportLinks.Click += new System.EventHandler(this.btnImportLinks_Click);
- //
- // openFileDialog1
- //
- this.openFileDialog1.FileName = "openFileDialog1";
- this.openFileDialog1.Filter = "File Testo|*.tes|Tutti i file|*.*";
- //
- // btnShowLog
- //
- this.btnShowLog.Location = new System.Drawing.Point(263, 12);
- this.btnShowLog.Name = "btnShowLog";
- this.btnShowLog.Size = new System.Drawing.Size(79, 33);
- this.btnShowLog.TabIndex = 17;
- this.btnShowLog.Text = "Show Log";
- this.btnShowLog.UseVisualStyleBackColor = true;
- this.btnShowLog.Click += new System.EventHandler(this.btnShowLog_Click);
- //
- // pbST
- //
- this.pbST.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.pbST.Location = new System.Drawing.Point(0, 55);
- this.pbST.Name = "pbST";
- this.pbST.Size = new System.Drawing.Size(433, 18);
- this.pbST.TabIndex = 18;
- //
- // btnImport
- //
- this.btnImport.Location = new System.Drawing.Point(182, 12);
- this.btnImport.Name = "btnImport";
- this.btnImport.Size = new System.Drawing.Size(79, 33);
- this.btnImport.TabIndex = 19;
- this.btnImport.Text = "Import Rac";
- this.btnImport.UseVisualStyleBackColor = true;
- this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
- //
- // btnTest
- //
- this.btnTest.Location = new System.Drawing.Point(121, -1);
- this.btnTest.Name = "btnTest";
- this.btnTest.Size = new System.Drawing.Size(55, 33);
- this.btnTest.TabIndex = 20;
- this.btnTest.Text = "Test";
- this.btnTest.UseVisualStyleBackColor = true;
- this.btnTest.Click += new System.EventHandler(this.btnTest_Click);
- //
- // frmDownloader
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(433, 95);
- this.Controls.Add(this.btnTest);
- this.Controls.Add(this.btnImport);
- this.Controls.Add(this.pbST);
- this.Controls.Add(this.btnShowLog);
- this.Controls.Add(this.btnImportLinks);
- this.Controls.Add(this.btnClose);
- this.Controls.Add(this.btnDownloadAll);
- this.Controls.Add(this.lblST);
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
- this.Name = "frmDownloader";
- this.Text = "frmDownloader";
- this.ResumeLayout(false);
-
- }
-
- #endregion
- private System.Windows.Forms.Button btnClose;
- private System.Windows.Forms.Button btnDownloadAll;
- private System.Windows.Forms.Label lblST;
- private System.Windows.Forms.Button btnImportLinks;
- private System.Windows.Forms.OpenFileDialog openFileDialog1;
- private System.Windows.Forms.Button btnShowLog;
- private System.Windows.Forms.ProgressBar pbST;
- private System.Windows.Forms.Button btnImport;
- private System.Windows.Forms.Button btnTest;
- }
-}
\ No newline at end of file
diff --git a/Src/A69WD/UI/frmDownloader.cs b/Src/A69WD/UI/frmDownloader.cs
deleted file mode 100644
index cc3562d..0000000
--- a/Src/A69WD/UI/frmDownloader.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Threading;
-using System.Net;
-using static System.Windows.Forms.LinkLabel;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
-using A69WD.Site;
-using A69WD.Net;
-using System.Collections.Concurrent;
-using System.Xml.Linq;
-using A69WD.Service;
-using A69WD.Data;
-
-namespace A69WD {
-
- public partial class frmDownloader : Form {
-
- // Coda thread-safe di URL da scaricare
- private readonly BlockingCollection _urlQueue = new BlockingCollection(new ConcurrentQueue());
-
- // Semaforo per limitare il numero massimo di download simultanei
- private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1);
-
-
-
- public frmDownloader() {
- InitializeComponent();
- this.Text = String.Format("A69WD - Dowloader Testi Vrs {0}", cTools.AssemblyVersion);
- //engine = new cA69Engine();
- //engine.Updating += Engine_Updating;
- }
-
- //cA69Engine engine = null;
-
-
- ///
- /// Metodo per scansionare i link da un file di testo ed inserirli come da downloadare se non ci sono già
- ///
- private void btnImportLinks_Click(object sender, EventArgs e) {
- //// Chiedo il file di testo da caricare
- //lblST.Text = " ";
- //this.openFileDialog1.InitialDirectory = Cfg.Settings.PathApplicationRoot;
- //if (this.openFileDialog1.ShowDialog() == DialogResult.OK) {
- // lblST.Text = string.Format("Importati {0} link", engine.ImportLinkFromFile(openFileDialog1.FileNames[0]));
- //}
- }
-
- private async void btnDownloadAll_Click(object sender, EventArgs e) {
- btnDownloadAll.Enabled = false;
-
- // - Creo istanza del client per il sito con autenticazione:
- lblST.Text = DateTime.Now.ToString() + " - Login";
- A69WD.Site.iSiteType siteA69 = new cSite_A69();
- // - Eseguo l'autenticazione
- bool res = await siteA69.Authenticate();
- if (res) {
- lblST.Text = DateTime.Now.ToString() + " - sito loggato: " + res.ToString();
- Logger.Information("Sito correttamente loggato.");
- } else {
- Logger.Information("Errore di autenticazione al sito.");
- return;
- }
- // - Verifico path per il download
- if (!System.IO.Directory.Exists(Cfg.Settings.PathDownloadWorking)) System.IO.Directory.CreateDirectory(Cfg.Settings.PathDownloadWorking);
- // // Test downloadando tutti i 10 primi link per categoria
- // List links = cLink_A69.GetStartLink();
- // int i = 1;
- // foreach (iLink link in links) {
- // lblST.Text = "Start url " + link.FileName;
- // Logger.Information("Start url " + link.FileName);
- // await siteA69.CrawlPageAsync(link);
- // Logger.Information(" end url " + link.FileName);
- // i++;
- // }
-
- // // Inserisco i link iniziali sulla coda dei download:
- // if (!cLink_A69.InsertStartLink(_urlQueue)) {
- // lblST.Text = "Inserimento A69 start link fault.";
- // return;
- // }
- // lblST.Text = "In coda vi sono: " + _urlQueue.Count.ToString() + " url.";
- //
- // // Test estrazione link dal primo indice:
- // iLink link = new cLink_A69("https://www.annunci69.it/racconti-erotici/racconti_lista.php?genere=altro&pagina=1", "Idx_altro_1.html");
- // Logger.Information("Start url " + link.FileName);
- // List urls = await siteA69.CrawlPageAsync(link);
- // Logger.Information(" end url " + link.FileName + " - URL trovati: " + urls.Count.ToString("000"));
- // foreach (iLink url in urls) { _urlQueue.Add(url); }
- // lblST.Text = "In coda vi sono: " + _urlQueue.Count.ToString() + " url.";
-
-
- // Preparo il servizio
- serviceCrawler = new Service_Crawler(lblST, pbST);
- // Inserisco i link iniziali nella coda
- if (!cLink_A69.InsertStartLink(serviceCrawler)) {
- lblST.Text = "Inserimento A69 start link fault.";
- return;
- }
- // avvio il servizio
- serviceCrawler.StartWorker(siteA69);
-
-
- }
- private Service_Crawler serviceCrawler = null;
-
-
- private void btnShowLog_Click(object sender, EventArgs e) {
- cTools.ShowOnNotepad(Cfg.Settings.PathFileLogs);
- }
-
- private void btnHide_Click(object sender, EventArgs e) {
- if (MessageBox.Show("Metodo ancora da terminare, la finestra non sarà più visibile, killare il processo", "ATTENZIONE", MessageBoxButtons.OKCancel) == DialogResult.OK){
- this.Hide();
- }
- }
-
- private void btnClose_Click(object sender, EventArgs e) {
- //if (engine.Stop()) this.Close();
-
- // fermo i servizi
- if (serviceCrawler != null) serviceCrawler.StopWorker();
- if (serviceImporter != null) serviceImporter.StopWorker();
-
- this.Close();
- }
-
-
-
- #region Gestione eventi dal engine
- //
- // private void Engine_Updating(object sender, EngineEventArgs e) { EngineUpdatingStatus(e.Message, e.NTot, e.NtoDown, e.NDown); }
- //
- // delegate void EngineUpdatingStatusCallback(string Message, int NTot, int NtoDown, int NDown);
- // private void EngineUpdatingStatus(string Message, int NTot, int NtoDown, int NDown) {
- // try {
- // // InvokeRequired required compares the thread ID of the
- // // calling thread to the thread ID of the creating thread.
- // // If these threads are different, it returns true.
- // if (lblST.InvokeRequired) {
- // EngineUpdatingStatusCallback callBack = new EngineUpdatingStatusCallback(EngineUpdatingStatus);
- // this.Invoke(callBack, new object[] { Message, NTot, NtoDown, NDown });
- // } else {
- // lblST.Text = string.Format("{4} - {3} | {2} | {1} - {0}", Message, NTot, NtoDown, NDown, DateTime.Now.ToString("HH:mm:ss"));
- // Logger.Information(lblST.Text);
- // }
- // } catch (Exception ex) {
- // Logger.Log(new object[] { "Error Code: ER05553", "Errore in EngineUpdatingStatus():", ex });
- // }
- // }
- //
- #endregion
-
- private void btnImport_Click(object sender, EventArgs e) {
- // string fp = "C:\\Commesse\\_zPrivate\\A69WD\\Test\\Down\\__A69_altro_Collarini-e-fantasie_166756.html";
- // cLink_A69 lk = new cLink_A69("Tmp", "tmp");
- // cRac rac = await lk.EstraiRac(fp);
- // if (rac != null) {
- // //foreach (string tag in rac.Tags) {
- // for (int i = 0; i
+ /// 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(452, 19);
+ this.sbMessage.Spring = true;
+ this.sbMessage.Tag = "Messaggi";
+ 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(100, 18);
+ this.sbProgressBar.Tag = "ProgressBar";
+ 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(100, 19);
+ this.sbStatusLabel.Tag = "Label";
+ 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.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmReader_FormClosing);
+ 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..2152825
--- /dev/null
+++ b/Src/A69WD/UI/frmReader.cs
@@ -0,0 +1,737 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using A69WD.Data;
+using A69WD.Net;
+using A69WD.Service;
+using A69WD.Site;
+
+namespace A69WD.UI {
+ public partial class frmReader : Form {
+
+ MenuItem mSkrStart;
+ MenuItem mSkrStop;
+ MenuItem mImpStart;
+ MenuItem mImpStop;
+
+ private Service_Crawler serviceCrawler = null;
+ private Service_Importer ServiceImporter = null;
+ A69WD.Site.iSiteType siteA69 = null;
+
+ 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"));
+
+ // Menu comandi skraping:
+ MenuItem mSkr = new MenuItem("Skraping");
+ mSkrStart = new MenuItem("Start", MenuItem_Skraping_Start_Click, Shortcut.None);
+ mSkrStop = new MenuItem("Stop", MenuItem_Skraping_Stop_Click, Shortcut.None);
+ mSkr.MenuItems.Add(mSkrStart);
+ mSkr.MenuItems.Add(mSkrStop);
+ // Menu comandi importer:
+ MenuItem mImp = new MenuItem("Importer");
+ mImpStart = new MenuItem("Start", MenuItem_Importer_Start_Click, Shortcut.None);
+ mImpStop = new MenuItem("Stop", MenuItem_Importer_Stop_Click, Shortcut.None);
+ mImp.MenuItems.Add(mImpStart);
+ mImp.MenuItems.Add(mImpStop);
+ // Menu contestuale:
+ this.ContextMenu = new ContextMenu();
+ this.ContextMenu.MenuItems.Add(mSkr);
+ this.ContextMenu.MenuItems.Add(mImp);
+ // Enable only start
+ mSkrStart.Enabled = true;
+ mSkrStop.Enabled = false;
+ mImpStart.Enabled = true;
+ mImpStop.Enabled = false;
+
+ }
+
+ ///
+ /// 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();
+ this.Close();
+ 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
+ }
+
+
+ private void frmReader_FormClosing(object sender, FormClosingEventArgs e) {
+ // Prima di chiudere, devo fermare l'importazione o lo scraping
+ if (serviceCrawler != null) { serviceCrawler.StopWorker(); }
+ if (ServiceImporter != null) { ServiceImporter.StopWorker(); }
+ }
+
+
+ async void MenuItem_Skraping_Start_Click(object sender, EventArgs e) {
+ // Update menu
+ mSkrStart.Enabled = false;
+ mSkrStop.Enabled = true;
+ mImpStart.Enabled = false;
+ mImpStop.Enabled = false;
+
+ // - Creo istanza del client per il sito con autenticazione:
+ sbStatusLabel.Text = "Login on A69";
+ siteA69 = new cSite_A69();
+
+ // - Eseguo l'autenticazione
+ bool res = await siteA69.Authenticate();
+ if (res) {
+ sbStatusLabel.Text = "A69 logged";
+ Logger.Information("Sito A69 loggato: " + res.ToString());
+ } else {
+ Logger.Information("Login Fault");
+ return;
+ }
+
+ // - Verifico path per il download
+ if (!System.IO.Directory.Exists(Cfg.Settings.PathDownloadWorking)) System.IO.Directory.CreateDirectory(Cfg.Settings.PathDownloadWorking);
+
+ // Preparo il servizio
+ serviceCrawler = new Service_Crawler(sb);
+ // Inserisco i link iniziali nella coda
+ if (!cLink_A69.InsertStartLink(serviceCrawler)) {
+ sbStatusLabel.Text = "A69 fault.";
+ return;
+ }
+ // avvio il servizio
+ serviceCrawler.StartWorker(siteA69);
+ }
+
+ void MenuItem_Skraping_Stop_Click(object sender, EventArgs e) {
+ // Update menu
+ mSkrStart.Enabled = false;
+ mSkrStop.Enabled = false;
+ mImpStart.Enabled = true;
+ mImpStop.Enabled = false;
+
+ if (serviceCrawler != null) { serviceCrawler.StopWorker(); }
+ }
+
+ void MenuItem_Importer_Start_Click(object sender, EventArgs e) {
+ // Update menu
+ mSkrStart.Enabled = false;
+ mSkrStop.Enabled = false;
+ mImpStart.Enabled = false;
+ mImpStop.Enabled = true;
+
+ // Preparo il servizio
+ ServiceImporter = new Service_Importer(sb);
+
+ // Per ora uso la directory di default, poi metteremo selezione
+ string path = Cfg.Settings.PathDownloadWorking;
+
+ // avvio il servizio
+ ServiceImporter.StartWorker(path);
+
+ }
+ void MenuItem_Importer_Stop_Click(object sender, EventArgs e) {; }
+
+
+ }
+}
diff --git a/Src/A69WD/UI/frmDownloader.resx b/Src/A69WD/UI/frmReader.resx
similarity index 95%
rename from Src/A69WD/UI/frmDownloader.resx
rename to Src/A69WD/UI/frmReader.resx
index 3a7d671..81d325e 100644
--- a/Src/A69WD/UI/frmDownloader.resx
+++ b/Src/A69WD/UI/frmReader.resx
@@ -117,7 +117,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
17, 17
\ No newline at end of file