using qdr.app.studiou.orders2printpack.Properties; using System.IO.Abstractions; namespace qdr.app.studiou.orders2printpack { public partial class FormDigitalSend : Form { #region *** Cnstants *** private const string CS_DigitalDirSent = ".sent"; private const string CS_DigitalDirTemp = ".temp"; private const string CS_DigitalMetadata = "metadata.json"; #endregion #region *** Fields *** private IFileSystem _fileSystem = new FileSystem(); private string? _openedDigitalDir = null; private string? _openedDigitalDirSent = null; private string? _openedDigitalDirTemp = null; #endregion #region *** Constructors *** public FormDigitalSend() { InitializeComponent(); } #endregion #region *** Form Handlers *** private void mmOpenDir_Click(object sender, EventArgs e) { dlgOpenDir.Description = "Otevřít další složku s digitálním obsahem ..."; dlgOpenDir.UseDescriptionForTitle = true; dlgOpenDir.InitialDirectory = AppSettings.Default.LastDigitalDir; if (dlgOpenDir.ShowDialog() == DialogResult.OK) { AppSettings.Default.LastDigitalDir = dlgOpenDir.SelectedPath; AppSettings.Default.Save(); OpenDigitalDir(_openedDigitalDir); } } private void mmSend_Click(object sender, EventArgs e) { } #endregion #region *** Private Methods *** #region **** Error Handling ***** private void BlockErrorHandled(Action block) { try { block(); } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); RefreshToolButtons(); } } #endregion #region **** Refresh UI ***** private void RefreshToolButtons() { throw new NotImplementedException(); } #endregion #region **** Digital Directory Operations ***** private void OpenDigitalDir(string selectedPath) { BlockErrorHandled(()=>{ EnsureDigitalDirStructureExists(selectedPath); }); } private void EnsureDigitalDirStructureExists(string selectedPath) { if (string.IsNullOrEmpty(selectedPath) || !_fileSystem.Directory.Exists(selectedPath)) { throw new DirectoryNotFoundException($"Adresář '{selectedPath}' neexistuje."); } _openedDigitalDir = selectedPath; _openedDigitalDirSent = _fileSystem.Path.Combine(selectedPath, CS_DigitalDirSent); _openedDigitalDirTemp = _fileSystem.Path.Combine(selectedPath, CS_DigitalDirTemp); if (!_fileSystem.Directory.Exists(_openedDigitalDirSent)) { _fileSystem.Directory.CreateDirectory(_openedDigitalDirSent); Log($"Vytvořen adresář pro odeslaná data '{_openedDigitalDirSent}'"); } if (!_fileSystem.Directory.Exists(_openedDigitalDirTemp)) { _fileSystem.Directory.CreateDirectory(_openedDigitalDirTemp); Log($"Vytvořen pracovní adresář '{_openedDigitalDirTemp}'"); } EnsureDigitalMetadataExists(selectedPath); } private void EnsureDigitalMetadataExists(string selectedPath) { var metadataFilePath = _fileSystem.Path.Combine(selectedPath, CS_DigitalMetadata); if (!_fileSystem.File.Exists(metadataFilePath)) { RefreshMetadataFile(metadataFilePath); } } private void RefreshMetadataFile(string metadataFilePath) { Log($"Aktualizuji soubor s metadaty '{metadataFilePath}'..."); var metadata = new EmailStorage.Metadata(); _fileSystem.File.WriteAllText(metadataFilePath, System.Text.Json.JsonSerializer.Serialize(metadata, new System.Text.Json.JsonSerializerOptions { WriteIndented = true })); Log($"Soubor s metadaty '{metadataFilePath}' byl vytvořen."); } #endregion #region **** Logging ***** private void LogBreak() { Log(new string('-', 80)); } private void LogCaption(string message) { Log($"*** {message} ***"); } private void LogError(string message) { Log($"[ERROR] {message}"); } private void Log(string message) { lbLog.BeginUpdate(); lbLog.Items.Insert(0, message); lbLog.EndUpdate(); } #endregion #endregion } }