From e929be413e7e5d158d371020bfa9b8c21bcd25fd Mon Sep 17 00:00:00 2001 From: tomse <1444539+tomse@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:24:51 +0200 Subject: [PATCH] autoload project file if it exists --- .../PDFWorkflowManager/MainForm.cs | 116 ++++++++++++------ 1 file changed, 77 insertions(+), 39 deletions(-) diff --git a/PDFWorkflowManager/PDFWorkflowManager/MainForm.cs b/PDFWorkflowManager/PDFWorkflowManager/MainForm.cs index cadd77b..4728357 100644 --- a/PDFWorkflowManager/PDFWorkflowManager/MainForm.cs +++ b/PDFWorkflowManager/PDFWorkflowManager/MainForm.cs @@ -301,6 +301,7 @@ namespace PDFWorkflowManager { } txtProjectDir.ReadOnly = true; checkSimplex.Enabled = true; + AutoLoadProjectIfExists(); } check_input_dir(); @@ -732,10 +733,10 @@ namespace PDFWorkflowManager TiffToPdfConverter tiffConverter = new TiffToPdfConverter { // MaxDegreeOfParallelism = trackBarCores.Value // slider to select cores - MaxDegreeOfParallelism = 8 // slider to select cores + MaxDegreeOfParallelism = 20 // slider to select cores }; - string outputPdfFileName = "output.pdf"; // saved in project folder + string outputPdfFileName = Path.Combine(txtProjectDir.Text + txtFileName.Text); // saved in project folder await tiffConverter.ConvertTiffToPdfWithOcrAsync( workOutDir, outputPdfFileName, @@ -1272,47 +1273,84 @@ namespace PDFWorkflowManager if (openFileDialog.ShowDialog() == DialogResult.OK) { string selectedFile = openFileDialog.FileName; - var lines = File.ReadAllLines(selectedFile); - var dict = new Dictionary(); - foreach (var line in lines) - { - var parts = line.Split(new[] { '=' }, 2); - if (parts.Length == 2) - dict[parts[0]] = parts[1]; - } - - txtFileName.Text = dict.ContainsKey("FileName") ? dict["FileName"] : ""; - txtTitle.Text = dict.ContainsKey("Title") ? dict["Title"] : ""; - cmbLanguage.SelectedIndex = cmbLanguage.FindStringExact(dict.ContainsKey("Language") ? dict["Language"] : ""); - txtLanguages.Text = dict.ContainsKey("Languages") ? dict["Languages"] : ""; - txtType.Text = dict.ContainsKey("Type") ? dict["Type"] : ""; - txtPublisher.Text = dict.ContainsKey("Publisher") ? dict["Publisher"] : ""; - txtAuthor.Text = dict.ContainsKey("Author") ? dict["Author"] : ""; - txtISBN.Text = dict.ContainsKey("ISBN") ? dict["ISBN"] : ""; - txtDate.Text = dict.ContainsKey("Date") ? dict["Date"] : ""; - txtPageCount.Text = dict.ContainsKey("PageCount") ? dict["PageCount"] : ""; - cmbResolution.SelectedIndex = cmbResolution.FindStringExact(dict.ContainsKey("Resolution") ? dict["Resolution"] : ""); - checkPhotocopy.Checked = dict.ContainsKey("Photocopy") ? dict["Photocopy"] == "True" : false; - checkReplace.Checked = dict.ContainsKey("Replace") ? dict["Replace"] == "True" : false; - txtPartnumber.Text = dict.ContainsKey("Partnumber") ? dict["Partnumber"] : ""; - if (int.TryParse(dict.ContainsKey("Quality") ? dict["Quality"] : "4", out int quality)) - trackBar1.Value = Math.Max(trackBar1.Minimum, Math.Min(trackBar1.Maximum, quality)); - txtContributor.Text = dict.ContainsKey("Contributor") ? dict["Contributor"] : ""; - txtContributorURL.Text = dict.ContainsKey("ContributorURL") ? dict["ContributorURL"] : ""; - txtPostProcessor.Text = dict.ContainsKey("PostProcessor") ? dict["PostProcessor"] : ""; - txtTimeSpent.Text = dict.ContainsKey("TimeSpent") ? dict["TimeSpent"] : ""; - txtPDFAuthor.Text = dict.ContainsKey("PDFMetaAuthor") ? dict["PDFMetaAuthor"] : ""; - txtPDFKeywords.Text = dict.ContainsKey("PDFKeywords") ? dict["PDFKeywords"] : ""; - cmbBanner.SelectedIndex = cmbBanner.FindStringExact(dict.ContainsKey("Banner") ? dict["Banner"] : ""); - chkMagazines.Checked = dict.ContainsKey("Magazine") ? dict["Magazine"] == "True" : false; - checkSimplex.Checked = dict.ContainsKey("Simplex") ? dict["Simplex"] == "True" : false; - txtProjectDir.Text = dict.ContainsKey("ProjectDir") ? dict["ProjectDir"] : ""; - - MessageBox.Show("Loaded file: " + selectedFile, "File Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information); + LoadProjectFromFile(selectedFile); } } } + + private void LoadProjectFromFile(string filePath) + { + var lines = File.ReadAllLines(filePath); + var dict = new Dictionary(); + foreach (var line in lines) + { + var parts = line.Split(new[] { '=' }, 2); + if (parts.Length == 2) + dict[parts[0]] = parts[1]; + } + + txtFileName.Text = dict.ContainsKey("FileName") ? dict["FileName"] : ""; + txtTitle.Text = dict.ContainsKey("Title") ? dict["Title"] : ""; + cmbLanguage.SelectedIndex = cmbLanguage.FindStringExact(dict.ContainsKey("Language") ? dict["Language"] : ""); + txtLanguages.Text = dict.ContainsKey("Languages") ? dict["Languages"] : ""; + txtType.Text = dict.ContainsKey("Type") ? dict["Type"] : ""; + txtPublisher.Text = dict.ContainsKey("Publisher") ? dict["Publisher"] : ""; + txtAuthor.Text = dict.ContainsKey("Author") ? dict["Author"] : ""; + txtISBN.Text = dict.ContainsKey("ISBN") ? dict["ISBN"] : ""; + txtDate.Text = dict.ContainsKey("Date") ? dict["Date"] : ""; + txtPageCount.Text = dict.ContainsKey("PageCount") ? dict["PageCount"] : ""; + cmbResolution.SelectedIndex = cmbResolution.FindStringExact(dict.ContainsKey("Resolution") ? dict["Resolution"] : ""); + checkPhotocopy.Checked = dict.ContainsKey("Photocopy") ? dict["Photocopy"] == "True" : false; + checkReplace.Checked = dict.ContainsKey("Replace") ? dict["Replace"] == "True" : false; + txtPartnumber.Text = dict.ContainsKey("Partnumber") ? dict["Partnumber"] : ""; + if (int.TryParse(dict.ContainsKey("Quality") ? dict["Quality"] : "4", out int quality)) + trackBar1.Value = Math.Max(trackBar1.Minimum, Math.Min(trackBar1.Maximum, quality)); + txtContributor.Text = dict.ContainsKey("Contributor") ? dict["Contributor"] : ""; + txtContributorURL.Text = dict.ContainsKey("ContributorURL") ? dict["ContributorURL"] : ""; + txtPostProcessor.Text = dict.ContainsKey("PostProcessor") ? dict["PostProcessor"] : ""; + txtTimeSpent.Text = dict.ContainsKey("TimeSpent") ? dict["TimeSpent"] : ""; + txtPDFAuthor.Text = dict.ContainsKey("PDFMetaAuthor") ? dict["PDFMetaAuthor"] : ""; + txtPDFKeywords.Text = dict.ContainsKey("PDFKeywords") ? dict["PDFKeywords"] : ""; + cmbBanner.SelectedIndex = cmbBanner.FindStringExact(dict.ContainsKey("Banner") ? dict["Banner"] : ""); + chkMagazines.Checked = dict.ContainsKey("Magazine") ? dict["Magazine"] == "True" : false; + checkSimplex.Checked = dict.ContainsKey("Simplex") ? dict["Simplex"] == "True" : false; + txtProjectDir.Text = dict.ContainsKey("ProjectDir") ? dict["ProjectDir"] : ""; + + MessageBox.Show("Loaded file: " + filePath, "File Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void AutoLoadProjectIfExists() + { + try + { + string projectDir = txtProjectDir.Text; + + if (string.IsNullOrWhiteSpace(projectDir) || !Directory.Exists(projectDir)) + return; + + var projFiles = Directory.GetFiles(projectDir, "*.pdfproj", SearchOption.TopDirectoryOnly); + + if (projFiles.Length == 0) + return; + + var latestProjFile = projFiles + .Select(f => new FileInfo(f)) + .OrderByDescending(fi => fi.LastWriteTime) + .First() + .FullName; + + LoadProjectFromFile(latestProjFile); + } + catch (Exception ex) + { + MessageBox.Show($"Error while auto-loading project: {ex.Message}", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) { using (SaveFileDialog saveFileDialog = new SaveFileDialog())