Override mode fix
This commit is contained in:
parent
abdd2a313a
commit
12d1bd57dc
7 changed files with 249 additions and 181 deletions
|
|
@ -680,6 +680,9 @@ public class ImageCreatorSharp(PicSettings picSettings, ILogger<ImageCreatorShar
|
|||
|
||||
private void SalvaFoto(Bitmap imgOutputBig, ImageState imgState, ImageFormat thisFormat)
|
||||
{
|
||||
|
||||
var fileName = Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig);
|
||||
|
||||
using var image1Stream = new MemoryStream();
|
||||
if (picSettings.FotoGrandeDimOrigina == false)
|
||||
{
|
||||
|
|
@ -699,52 +702,60 @@ public class ImageCreatorSharp(PicSettings picSettings, ILogger<ImageCreatorShar
|
|||
using var g2 = Image.FromStream(image1Stream);
|
||||
imgState.ThumbSizeBig = g2.Width > g2.Height ? NewthumbSize(g2.Width, g2.Height, picSettings.LarghezzaBig, "Larghezza") : NewthumbSize(g2.Width, g2.Height, picSettings.AltezzaBig, "Altezza");
|
||||
using var imgOutputBig2 = new Bitmap(g2, imgState.ThumbSizeBig.Width, imgState.ThumbSizeBig.Height);
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputBig2, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), picSettings.JpegQuality);
|
||||
|
||||
if (!picSettings.OverwriteFiles && File.Exists(fileName))
|
||||
{
|
||||
logger.LogInformation("Saltata foto {FileName}, esiste", fileName);
|
||||
}
|
||||
else
|
||||
imgOutputBig2.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), thisFormat);
|
||||
|
||||
//imgOutputBig2.Dispose();
|
||||
|
||||
//imgOutputBig.Dispose();
|
||||
//g2.Dispose();
|
||||
{
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputBig2, fileName, picSettings.JpegQuality);
|
||||
else
|
||||
imgOutputBig2.Save(fileName, thisFormat);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputBig, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), picSettings.JpegQuality);
|
||||
if (!picSettings.OverwriteFiles && File.Exists(fileName))
|
||||
{
|
||||
logger.LogInformation("Saltata foto {FileName}, esiste", fileName);
|
||||
}
|
||||
else
|
||||
imgOutputBig.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), thisFormat);
|
||||
|
||||
//imgOutputBig.Dispose();
|
||||
{
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputBig, fileName, picSettings.JpegQuality);
|
||||
else
|
||||
imgOutputBig.Save(fileName, thisFormat);
|
||||
}
|
||||
}
|
||||
|
||||
image1Stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
if (!picSettings.CreaMiniature) return;
|
||||
if (!picSettings.AggiungiScritteMiniature) return;
|
||||
|
||||
using var g1 = picSettings.FotoGrandeDimOrigina ? (Image)imgOutputBig.Clone() : Image.FromStream(image1Stream);
|
||||
//if (_picSettings.FotoGrandeDimOrigina == false)
|
||||
// g1 = Image.FromStream(image1Stream);
|
||||
////g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig));
|
||||
//else
|
||||
// g1 = (Image)imgOutputBig.Clone();
|
||||
//g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, NomeFileBig));
|
||||
using Bitmap imgOutputSmall = new Bitmap(g1, imgState.ThumbSizeSmall.Width, imgState.ThumbSizeSmall.Height);
|
||||
|
||||
using var imgOutputSmall = new Bitmap(g1, imgState.ThumbSizeSmall.Width, imgState.ThumbSizeSmall.Height);
|
||||
|
||||
if (string.Equals(picSettings.DirectorySorgente, picSettings.DirectoryDestinazione, StringComparison.OrdinalIgnoreCase))
|
||||
imgState.NomeFileSmall = imgState.NomeFileSmall.Substring(0, imgState.NomeFileSmall.Length - 4) + picSettings.Codice + imgState.NomeFileSmall.Substring(imgState.NomeFileSmall.Length - 4);
|
||||
//
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputSmall, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall), picSettings.JpegQualityMin);
|
||||
|
||||
var tnFileName = Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall);
|
||||
|
||||
if (!picSettings.OverwriteFiles && File.Exists(tnFileName))
|
||||
{
|
||||
logger.LogInformation("Saltata miniatura foto {TnFileName}, esiste", tnFileName);
|
||||
}
|
||||
else
|
||||
imgOutputSmall.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall), thisFormat);
|
||||
|
||||
//imgOutputSmall.Dispose();
|
||||
|
||||
//g1.Dispose();
|
||||
|
||||
//if (File.Exists(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)))
|
||||
// File.Delete(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig));
|
||||
{
|
||||
if (thisFormat.Equals(ImageFormat.Jpeg))
|
||||
SalvaImmagineCustomQuality(imgOutputSmall, tnFileName, picSettings.JpegQualityMin);
|
||||
else
|
||||
imgOutputSmall.Save(tnFileName, thisFormat);
|
||||
}
|
||||
}
|
||||
|
||||
private void SalvaImmagineCustomQuality(Bitmap imageToSave, string nomeFileFinale, long quality)
|
||||
|
|
|
|||
|
|
@ -64,4 +64,5 @@ public class PicSettings
|
|||
public bool FotoRuotaADestra { get; set; } = false;
|
||||
public bool FotoRuotaASinistra { get; set; } = false;
|
||||
public string TempMinText { get; set; } = string.Empty;
|
||||
public bool OverwriteFiles { get; set; } = false;
|
||||
}
|
||||
|
|
@ -77,6 +77,18 @@ namespace ImageCatalog_2
|
|||
}
|
||||
}
|
||||
|
||||
private bool _overwriteImages;
|
||||
|
||||
public bool OverwriteImages
|
||||
{
|
||||
get => _overwriteImages;
|
||||
set
|
||||
{
|
||||
_overwriteImages = value;
|
||||
NotifyPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private bool _uiEnabled = true;
|
||||
|
||||
public bool UiEnabled
|
||||
|
|
|
|||
1
imagecatalog/MainForm.Designer.cs
generated
1
imagecatalog/MainForm.Designer.cs
generated
|
|
@ -617,6 +617,7 @@ namespace ImageCatalog
|
|||
//
|
||||
// chkSovrascriviFile
|
||||
//
|
||||
chkSovrascriviFile.DataBindings.Add(new Binding("Checked", bindingSource1, "OverwriteImages", true, DataSourceUpdateMode.OnPropertyChanged));
|
||||
chkSovrascriviFile.AutoSize = true;
|
||||
chkSovrascriviFile.Location = new Point(21, 94);
|
||||
chkSovrascriviFile.Margin = new Padding(4, 5, 4, 5);
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ public partial class MainForm
|
|||
|
||||
private ConcurrentBag<string> _results;
|
||||
|
||||
private void setDefaults()
|
||||
private void SetDefaults()
|
||||
{
|
||||
//txtSorgente.Text = "";
|
||||
Model.SourcePath = string.Empty;
|
||||
|
|
@ -205,7 +205,7 @@ public partial class MainForm
|
|||
{
|
||||
bindingSource1.DataSource = Model;
|
||||
Application.EnableVisualStyles();
|
||||
setDefaults();
|
||||
SetDefaults();
|
||||
// /* TODO ERROR: Skipped IfDirectiveTrivia */
|
||||
// AllocConsole();
|
||||
// /* TODO ERROR: Skipped EndIfDirectiveTrivia */
|
||||
|
|
@ -318,77 +318,77 @@ public partial class MainForm
|
|||
SaveFileDlg.Filter = "Setup (*.xml)|*.xml|All valid files (*.*)|*.*";
|
||||
SaveFileDlg.FilterIndex = 0;
|
||||
SaveFileDlg.RestoreDirectory = true;
|
||||
if (DialogResult.OK == SaveFileDlg.ShowDialog())
|
||||
if (DialogResult.OK != SaveFileDlg.ShowDialog()) return;
|
||||
|
||||
var ilNome = SaveFileDlg.FileName;
|
||||
_parametriSetup.NomeFileSetup = ilNome;
|
||||
_parametriSetup.AggiornaParametro("DirSorgente", Model.SourcePath);
|
||||
_parametriSetup.AggiornaParametro("DirDestinazione", Model.DestinationPath);
|
||||
_parametriSetup.AggiornaParametro("DirSottoDirectory", chkAggiornaSottodirectory.Checked);
|
||||
_parametriSetup.AggiornaParametro("DirDividiDestinazione", chkCreaSottocartelle.Checked);
|
||||
_parametriSetup.AggiornaParametro("DirDividiNumFile", txtFilePerCartella.Text);
|
||||
_parametriSetup.AggiornaParametro("DirDividiSuffisso", txtSuffissoCartelle.Text);
|
||||
_parametriSetup.AggiornaParametro("DirDividiNumCifre", txtCifreContatore.Text);
|
||||
if (rdbNumProgressiva.Checked == true)
|
||||
{
|
||||
string IlNome = SaveFileDlg.FileName;
|
||||
_parametriSetup.NomeFileSetup = IlNome;
|
||||
_parametriSetup.AggiornaParametro("DirSorgente", Model.SourcePath);
|
||||
_parametriSetup.AggiornaParametro("DirDestinazione", Model.DestinationPath);
|
||||
_parametriSetup.AggiornaParametro("DirSottoDirectory", chkAggiornaSottodirectory.Checked);
|
||||
_parametriSetup.AggiornaParametro("DirDividiDestinazione", chkCreaSottocartelle.Checked);
|
||||
_parametriSetup.AggiornaParametro("DirDividiNumFile", txtFilePerCartella.Text);
|
||||
_parametriSetup.AggiornaParametro("DirDividiSuffisso", txtSuffissoCartelle.Text);
|
||||
_parametriSetup.AggiornaParametro("DirDividiNumCifre", txtCifreContatore.Text);
|
||||
if (rdbNumProgressiva.Checked == true)
|
||||
{
|
||||
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Progressiva");
|
||||
}
|
||||
else
|
||||
{
|
||||
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Files");
|
||||
}
|
||||
|
||||
_parametriSetup.AggiornaParametro("MiniatureCrea", CheckBox1.Checked);
|
||||
_parametriSetup.AggiornaParametro("MiniatureSuffisso", TextBox3.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAltezza", TextBox5.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureLarghezza", TextBox6.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAddScritta", RadioButton3.Checked);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAddOrario", RadioButton4.Checked);
|
||||
_parametriSetup.AggiornaParametro("FotoAltezza", TextBox27.Text);
|
||||
_parametriSetup.AggiornaParametro("FotoLarghezza", TextBox28.Text);
|
||||
// SetupIni.AggiornaParametro("FotoCodice", TextBox13.Text)
|
||||
// SetupIni.AggiornaParametro("FotoDimOriginali", CheckBox2.Checked)
|
||||
|
||||
_parametriSetup.AggiornaParametro("FontDimensione", TextBox11.Text);
|
||||
_parametriSetup.AggiornaParametro("FontDimensioneMiniatura", TextBox25.Text);
|
||||
_parametriSetup.AggiornaParametro("FontBold", CheckBox3.Checked);
|
||||
_parametriSetup.AggiornaParametro("FontNome", ComboBox3.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoTesto", Model.HorizontalText);
|
||||
_parametriSetup.AggiornaParametro("TestoTrasparente", TextBox9.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoMargine", TextBox12.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoPosizione", ComboBox1.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoAllineamento", ComboBox2.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioFile", TextBox10.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAltezza", TextBox14.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioLarghezza", TextBox15.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioMargine", TextBox16.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAllOrizzontale", ComboBox4.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAllVerticale", ComboBox5.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioTrasparenza", TextBox19.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAggiungi", CheckBox5.Checked);
|
||||
_parametriSetup.AggiornaParametro("TempoGara", CheckBox7.Checked);
|
||||
_parametriSetup.AggiornaParametro("Orario", CheckBox8.Checked);
|
||||
_parametriSetup.AggiornaParametro("EtichettaOrario", TextBox18.Text);
|
||||
_parametriSetup.AggiornaParametro("GeneraleForzaJpg", chkForzaJpg.Checked);
|
||||
_parametriSetup.AggiornaParametro("GeneraleRotazioneAutomatica", chkRotazioneAutomatica.Checked);
|
||||
_parametriSetup.AggiornaParametro("GrandezzaVerticale", TextBox30.Text);
|
||||
_parametriSetup.AggiornaParametro("MargineVerticale", TextBox31.Text);
|
||||
_parametriSetup.AggiornaParametro("DimensioniOriginali", CheckBox15.Checked);
|
||||
_parametriSetup.AggiornaParametro("TestoVerticale", Model.VerticalText);
|
||||
_parametriSetup.AggiornaParametro("NomeMiniatura", RadioButton6.Checked);
|
||||
_parametriSetup.AggiornaParametro("DataFoto", CheckBox16.Checked);
|
||||
_parametriSetup.AggiornaParametro("NumeroFoto", CheckBox17.Checked);
|
||||
_parametriSetup.AggiornaParametro("ColoreTestoRGB", TextBox34.Text);
|
||||
_parametriSetup.AggiornaParametro("TempoSmall", RadioButton5.Checked);
|
||||
_parametriSetup.AggiornaParametro("NumTempoSmall", RadioButton7.Checked);
|
||||
_parametriSetup.AggiornaParametro("CompressioneJpeg", TextBox32.Text);
|
||||
_parametriSetup.AggiornaParametro("CompressioneJpegMiniatura", TextBox33.Text);
|
||||
// 2021
|
||||
_parametriSetup.AggiornaParametro("ChunkSize", TextBox8.Text);
|
||||
_parametriSetup.AggiornaParametro("ThreadsCount", TextBox7.Text);
|
||||
_parametriSetup.SalvaParametriSetup();
|
||||
Text = "Image Catalog - " + LeggiSoloNomeFile(IlNome);
|
||||
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Progressiva");
|
||||
}
|
||||
else
|
||||
{
|
||||
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Files");
|
||||
}
|
||||
|
||||
_parametriSetup.AggiornaParametro("MiniatureCrea", CheckBox1.Checked);
|
||||
_parametriSetup.AggiornaParametro("MiniatureSuffisso", TextBox3.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAltezza", TextBox5.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureLarghezza", TextBox6.Text);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAddScritta", RadioButton3.Checked);
|
||||
_parametriSetup.AggiornaParametro("MiniatureAddOrario", RadioButton4.Checked);
|
||||
_parametriSetup.AggiornaParametro("FotoAltezza", TextBox27.Text);
|
||||
_parametriSetup.AggiornaParametro("FotoLarghezza", TextBox28.Text);
|
||||
// SetupIni.AggiornaParametro("FotoCodice", TextBox13.Text)
|
||||
// SetupIni.AggiornaParametro("FotoDimOriginali", CheckBox2.Checked)
|
||||
|
||||
_parametriSetup.AggiornaParametro("FontDimensione", TextBox11.Text);
|
||||
_parametriSetup.AggiornaParametro("FontDimensioneMiniatura", TextBox25.Text);
|
||||
_parametriSetup.AggiornaParametro("FontBold", CheckBox3.Checked);
|
||||
_parametriSetup.AggiornaParametro("FontNome", ComboBox3.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoTesto", Model.HorizontalText);
|
||||
_parametriSetup.AggiornaParametro("TestoTrasparente", TextBox9.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoMargine", TextBox12.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoPosizione", ComboBox1.Text);
|
||||
_parametriSetup.AggiornaParametro("TestoAllineamento", ComboBox2.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioFile", TextBox10.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAltezza", TextBox14.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioLarghezza", TextBox15.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioMargine", TextBox16.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAllOrizzontale", ComboBox4.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAllVerticale", ComboBox5.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioTrasparenza", TextBox19.Text);
|
||||
_parametriSetup.AggiornaParametro("MarchioAggiungi", CheckBox5.Checked);
|
||||
_parametriSetup.AggiornaParametro("TempoGara", CheckBox7.Checked);
|
||||
_parametriSetup.AggiornaParametro("Orario", CheckBox8.Checked);
|
||||
_parametriSetup.AggiornaParametro("EtichettaOrario", TextBox18.Text);
|
||||
_parametriSetup.AggiornaParametro("GeneraleForzaJpg", chkForzaJpg.Checked);
|
||||
_parametriSetup.AggiornaParametro("GeneraleRotazioneAutomatica", chkRotazioneAutomatica.Checked);
|
||||
_parametriSetup.AggiornaParametro("GrandezzaVerticale", TextBox30.Text);
|
||||
_parametriSetup.AggiornaParametro("MargineVerticale", TextBox31.Text);
|
||||
_parametriSetup.AggiornaParametro("DimensioniOriginali", CheckBox15.Checked);
|
||||
_parametriSetup.AggiornaParametro("TestoVerticale", Model.VerticalText);
|
||||
_parametriSetup.AggiornaParametro("NomeMiniatura", RadioButton6.Checked);
|
||||
_parametriSetup.AggiornaParametro("DataFoto", CheckBox16.Checked);
|
||||
_parametriSetup.AggiornaParametro("NumeroFoto", CheckBox17.Checked);
|
||||
_parametriSetup.AggiornaParametro("ColoreTestoRGB", TextBox34.Text);
|
||||
_parametriSetup.AggiornaParametro("TempoSmall", RadioButton5.Checked);
|
||||
_parametriSetup.AggiornaParametro("NumTempoSmall", RadioButton7.Checked);
|
||||
_parametriSetup.AggiornaParametro("CompressioneJpeg", TextBox32.Text);
|
||||
_parametriSetup.AggiornaParametro("CompressioneJpegMiniatura", TextBox33.Text);
|
||||
// 2021
|
||||
_parametriSetup.AggiornaParametro("ChunkSize", TextBox8.Text);
|
||||
_parametriSetup.AggiornaParametro("ThreadsCount", TextBox7.Text);
|
||||
_parametriSetup.AggiornaParametro("OverwriteImages", Model.OverwriteImages);
|
||||
_parametriSetup.SalvaParametriSetup();
|
||||
Text = "Image Catalog - " + LeggiSoloNomeFile(ilNome);
|
||||
}
|
||||
|
||||
private void Button6_Click(object sender, EventArgs e)
|
||||
|
|
@ -471,6 +471,7 @@ public partial class MainForm
|
|||
TextBox32.Text = _parametriSetup.LeggiParametroString("CompressioneJpeg");
|
||||
TextBox33.Text = _parametriSetup.LeggiParametroString("CompressioneJpegMiniatura");
|
||||
TextBox34.Text = _parametriSetup.LeggiParametroString("ColoreTestoRGB");
|
||||
Model.OverwriteImages = _parametriSetup.LeggiParametroBoolean("OverwriteImages");
|
||||
if (File.Exists(TextBox10.Text))
|
||||
{
|
||||
PictureBox1.Image = Image.FromFile(TextBox10.Text);
|
||||
|
|
@ -572,6 +573,7 @@ public partial class MainForm
|
|||
_picSettings.TestoMin = RadioButton6.Checked;
|
||||
_picSettings.JpegQuality = int.Parse(TextBox32.Text);
|
||||
_picSettings.JpegQualityMin = int.Parse(TextBox33.Text);
|
||||
_picSettings.OverwriteFiles = Model.OverwriteImages;
|
||||
}
|
||||
|
||||
private List<FileInfo> getFiles(DirectoryInfo sourceDir)
|
||||
|
|
|
|||
|
|
@ -57,21 +57,21 @@ namespace ImageCatalog
|
|||
return Risposta;
|
||||
}
|
||||
|
||||
public bool LeggiParametroBoolean(string NomeParametro)
|
||||
public bool LeggiParametroBoolean(string nomeParametro)
|
||||
{
|
||||
string Risposta = "";
|
||||
var risposta = "";
|
||||
try
|
||||
{
|
||||
var LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'");
|
||||
foreach (var LaRiga in LElenco)
|
||||
Risposta = LaRiga["Valore"].ToString();
|
||||
var lElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + nomeParametro + "'");
|
||||
foreach (var laRiga in lElenco)
|
||||
risposta = laRiga["Valore"].ToString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
Risposta = "";
|
||||
risposta = "";
|
||||
}
|
||||
|
||||
switch (Risposta.ToUpper() ?? "")
|
||||
switch (risposta.ToUpper() ?? "")
|
||||
{
|
||||
case "TRUE":
|
||||
case "OK":
|
||||
|
|
|
|||
|
|
@ -4,97 +4,138 @@ using ImageCatalog_2.Services;
|
|||
using MaddoShared;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Logging.Console;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace ImageCatalog_2
|
||||
namespace ImageCatalog_2;
|
||||
|
||||
static class Program
|
||||
{
|
||||
static class Program
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
private static extern bool AllocConsole();
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr GetStdHandle(int nStdHandle);
|
||||
|
||||
private const int STD_OUTPUT_HANDLE = -11;
|
||||
private const int STD_ERROR_HANDLE = -12;
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool SetStdHandle(int nStdHandle, IntPtr handle);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr GetConsoleWindow();
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool AttachConsole(int dwProcessId);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr CreateFile(
|
||||
string lpFileName,
|
||||
uint dwDesiredAccess,
|
||||
uint dwShareMode,
|
||||
IntPtr lpSecurityAttributes,
|
||||
uint dwCreationDisposition,
|
||||
uint dwFlagsAndAttributes,
|
||||
IntPtr hTemplateFile);
|
||||
|
||||
private const uint GENERIC_WRITE = 0x40000000;
|
||||
private const uint OPEN_EXISTING = 3;
|
||||
|
||||
private static void RedirectConsoleOutput()
|
||||
{
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
private static extern bool AllocConsole();
|
||||
var stdOutHandle = CreateFile("CONOUT$", GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
|
||||
var safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdOutHandle, true);
|
||||
var fileStream = new FileStream(safeFileHandle, FileAccess.Write);
|
||||
var standardOutput = new StreamWriter(fileStream) { AutoFlush = true };
|
||||
Console.SetOut(standardOutput);
|
||||
Console.SetError(standardOutput);
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr GetStdHandle(int nStdHandle);
|
||||
public static IServiceProvider ServiceProvider { get; private set; }
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
private const int STD_OUTPUT_HANDLE = -11;
|
||||
private const int STD_ERROR_HANDLE = -12;
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool SetStdHandle(int nStdHandle, IntPtr handle);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr GetConsoleWindow();
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool AttachConsole(int dwProcessId);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern IntPtr CreateFile(
|
||||
string lpFileName,
|
||||
uint dwDesiredAccess,
|
||||
uint dwShareMode,
|
||||
IntPtr lpSecurityAttributes,
|
||||
uint dwCreationDisposition,
|
||||
uint dwFlagsAndAttributes,
|
||||
IntPtr hTemplateFile);
|
||||
|
||||
private const uint GENERIC_WRITE = 0x40000000;
|
||||
private const uint OPEN_EXISTING = 3;
|
||||
|
||||
private static void RedirectConsoleOutput()
|
||||
{
|
||||
var stdOutHandle = CreateFile("CONOUT$", GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
|
||||
var safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdOutHandle, true);
|
||||
var fileStream = new FileStream(safeFileHandle, FileAccess.Write);
|
||||
var standardOutput = new StreamWriter(fileStream) { AutoFlush = true };
|
||||
Console.SetOut(standardOutput);
|
||||
Console.SetError(standardOutput);
|
||||
}
|
||||
|
||||
public static IServiceProvider ServiceProvider { get; private set; }
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
AllocConsole();
|
||||
RedirectConsoleOutput();
|
||||
AllocConsole();
|
||||
RedirectConsoleOutput();
|
||||
|
||||
var serviceCollection = new ServiceCollection();
|
||||
ConfigureServices(serviceCollection);
|
||||
var serviceCollection = new ServiceCollection();
|
||||
ConfigureServices(serviceCollection);
|
||||
|
||||
ServiceProvider = serviceCollection.BuildServiceProvider();
|
||||
ServiceProvider = serviceCollection.BuildServiceProvider();
|
||||
|
||||
var mainForm = ServiceProvider.GetRequiredService<MainForm>();
|
||||
//var mainViewModel = ServiceProvider.GetRequiredService<DataModel>();
|
||||
var mainForm = ServiceProvider.GetRequiredService<MainForm>();
|
||||
//var mainViewModel = ServiceProvider.GetRequiredService<DataModel>();
|
||||
|
||||
//mainForm.Model = mainViewModel;
|
||||
//mainForm.Model = mainViewModel;
|
||||
|
||||
Application.Run(mainForm);
|
||||
}
|
||||
Application.Run(mainForm);
|
||||
}
|
||||
|
||||
private static void ConfigureServices(ServiceCollection services)
|
||||
{
|
||||
// Register your services here
|
||||
services.AddTransient<ITestService, TestService>();
|
||||
private static void ConfigureServices(ServiceCollection services)
|
||||
{
|
||||
// Register your services here
|
||||
services.AddTransient<ITestService, TestService>();
|
||||
|
||||
services.AddTransient<DataModel>();
|
||||
services.AddTransient<DataModel>();
|
||||
|
||||
services.AddTransient<ImageCreationStuff>();
|
||||
services.AddTransient<ImageCreatorSharp>();
|
||||
services.AddTransient<ImageCreationStuff>();
|
||||
services.AddTransient<ImageCreatorSharp>();
|
||||
|
||||
services.AddSingleton<ParametriSetup>();
|
||||
services.AddSingleton<PicSettings>();
|
||||
services.AddSingleton<ParametriSetup>();
|
||||
services.AddSingleton<PicSettings>();
|
||||
|
||||
// Register your forms
|
||||
services.AddTransient<MainForm>();
|
||||
// Register your forms
|
||||
services.AddTransient<MainForm>();
|
||||
|
||||
services.AddLogging(configure =>
|
||||
{
|
||||
configure.AddConsole();
|
||||
configure.SetMinimumLevel(LogLevel.Debug);
|
||||
});
|
||||
}
|
||||
services.AddLogging(configure =>
|
||||
{
|
||||
configure.AddCustomFormatter();
|
||||
configure.AddConsole();
|
||||
configure.SetMinimumLevel(LogLevel.Debug);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static class ConsoleLoggerExtensions
|
||||
{
|
||||
public static ILoggingBuilder AddCustomFormatter(
|
||||
this ILoggingBuilder builder) =>
|
||||
builder.AddConsole(options => options.FormatterName = nameof(CustomLoggingFormatter))
|
||||
.AddConsoleFormatter<CustomLoggingFormatter, ConsoleFormatterOptions>();
|
||||
}
|
||||
public sealed class CustomLoggingFormatter : ConsoleFormatter, IDisposable
|
||||
{
|
||||
private readonly IDisposable _optionsReloadToken;
|
||||
private ConsoleFormatterOptions _formatterOptions;
|
||||
public CustomLoggingFormatter(IOptionsMonitor<ConsoleFormatterOptions> options)
|
||||
// Case insensitive
|
||||
: base(nameof(CustomLoggingFormatter)) =>
|
||||
(_optionsReloadToken, _formatterOptions) =
|
||||
(options.OnChange(ReloadLoggerOptions), options.CurrentValue);
|
||||
private void ReloadLoggerOptions(ConsoleFormatterOptions options) =>
|
||||
_formatterOptions = options;
|
||||
|
||||
public override void Write<TState>(
|
||||
in LogEntry<TState> logEntry,
|
||||
IExternalScopeProvider scopeProvider,
|
||||
TextWriter textWriter)
|
||||
{
|
||||
string? message =
|
||||
logEntry.Formatter?.Invoke(
|
||||
logEntry.State, logEntry.Exception);
|
||||
|
||||
if (message is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
textWriter.WriteLine($"{message}");
|
||||
}
|
||||
public void Dispose() => _optionsReloadToken?.Dispose();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue