From 5cfd295e00751adbbfe9bd39d59e2e571c9d250f Mon Sep 17 00:00:00 2001 From: Lev Rusanov <30170278+JDM170@users.noreply.github.com> Date: Sun, 22 Jun 2025 21:09:26 +0700 Subject: [PATCH] Refactor * Added ability to control window title * Added several new checks * Removed old and unnecessary checks * Cleaned up and optimized code a bit Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com> --- vCardEditor/Presenter/MainPresenter.cs | 73 +++++++++------------ vCardEditor/Repository/ContactRepository.cs | 37 ++++++----- vCardEditor/View/IMainView.cs | 4 +- vCardEditor/View/MainForm.cs | 59 ++++++++--------- 4 files changed, 80 insertions(+), 93 deletions(-) diff --git a/vCardEditor/Presenter/MainPresenter.cs b/vCardEditor/Presenter/MainPresenter.cs index ca674b0..abcb2cf 100644 --- a/vCardEditor/Presenter/MainPresenter.cs +++ b/vCardEditor/Presenter/MainPresenter.cs @@ -49,53 +49,44 @@ public MainPresenter(IMainView view, IContactRepository repository, ILocalizatio _view.CardInfoRemoved += CardInfoRemovedHandler; } - private void OpenNewFolderHandler(object sender, EventArg e) + private void OpenNewFolderHandler(object sender, EventArgs e) { BeforeOpeningNewFileHandler(); - string path = e.Data; + string path = _view.DisplayOpenFolderDialog(); if (string.IsNullOrEmpty(path)) - path = _view.DisplayOpenFolderDialog(); + return; - if (!string.IsNullOrEmpty(path)) + if (!_repository.LoadMultipleFilesContact(path)) { - bool Loaded =_repository.LoadMultipleFilesContact(path); - if (!Loaded) - { - _view.DisplayMessage("No file loaded!", "Error"); - return; - } - - AddPathToMostRecentUsedFiles(path); - _view.DisplayContacts(_repository.Contacts); + _view.SetWindowTitle(""); + _view.DisplayMessage("No file loaded!", "Error"); + return; } + + AddPathToMostRecentUsedFiles(path); + _view.SetWindowTitle(path); + _view.DisplayContacts(_repository.Contacts); } public void OpenNewFileHandler(object sender, EventArg e) { BeforeOpeningNewFileHandler(); - string path = e.Data; + string path = string.IsNullOrEmpty(e.Data) ? _view.DisplayOpenFileDialog("vCard file|*.vcf") : e.Data; if (string.IsNullOrEmpty(path)) - path = _view.DisplayOpenFileDialog("vCard Files|*.vcf"); + return; - if (!string.IsNullOrEmpty(path)) + if (!_repository.LoadContacts(path)) { - string ext = _repository.GetExtension(path); - if (!string.Equals(ext, ".vcf", StringComparison.OrdinalIgnoreCase)) - { - _view.DisplayMessage("Only vcf extension accepted!", "Error"); - return; - } - - if (!_repository.LoadContacts(path)) - _view.DisplayMessage("File seems missing or corrupted!", "Error"); - else - { - _view.DisplayContacts(_repository.Contacts); - AddPathToMostRecentUsedFiles(path); - } + _view.SetWindowTitle(""); + _view.DisplayMessage("File seems missing or corrupted!", "Error"); + return; } + + AddPathToMostRecentUsedFiles(path); + _view.SetWindowTitle(path); + _view.DisplayContacts(_repository.Contacts); } private void AddPathToMostRecentUsedFiles(string path) @@ -176,11 +167,9 @@ private void CopyTextToClipboardHandler(object sender, EventArgs e) if (_view.SelectedContactIndex < 0) return; - var contact = _repository.Contacts[_view.SelectedContactIndex]; - - string SerializedCard = _repository.GenerateStringFromVCard(contact.card); - - _view.SendTextToClipBoard(SerializedCard); + _view.SendTextToClipBoard( + _repository.GenerateStringFromVCard( + _repository.Contacts[_view.SelectedContactIndex].card)); _view.DisplayMessage("vCard copied to clipboard!", "Information"); } @@ -192,8 +181,7 @@ private void LoadFormHandler(object sender, EventArg e) string[] paths = Environment.GetCommandLineArgs(); if (paths.Length > 1) { - var evt = new EventArg(paths[1]); - OpenNewFileHandler(sender, evt); + OpenNewFileHandler(sender, new EventArg(paths[1])); } } @@ -303,12 +291,13 @@ public void CardInfoRemovedHandler(object sender, EventArgs e) public void FilterTextChangedHandler(object sender, EventArg e) { - var FilteredContacts = _repository.FilterContacts(e.Data); - _view.DisplayContacts(FilteredContacts); + _view.DisplayContacts(_repository.FilterContacts(e.Data)); } private void AddContactHandler(object sender, EventArgs e) { + if (_repository.Contacts.Count == 0) + _view.SetWindowTitle("New file"); _repository.AddEmptyContact(); _view.DisplayContacts(_repository.Contacts); } @@ -332,10 +321,10 @@ private void SaveSplittedFileHandler(object sender, EventArgs e) if (_repository.Contacts == null || _repository.Contacts.Count == 0) return; - string Path = _view.DisplayOpenFolderDialog(); - if (!string.IsNullOrEmpty(Path)) + string path = _view.DisplayOpenFolderDialog(); + if (!string.IsNullOrEmpty(path)) { - int count = _repository.SaveSplittedFiles(Path); + int count = _repository.SaveSplittedFiles(path); _view.DisplayMessage(string.Format("{0} contact(s) processed!", count), "Information"); } } diff --git a/vCardEditor/Repository/ContactRepository.cs b/vCardEditor/Repository/ContactRepository.cs index 3a63f1f..1acb314 100644 --- a/vCardEditor/Repository/ContactRepository.cs +++ b/vCardEditor/Repository/ContactRepository.cs @@ -18,8 +18,8 @@ public class ContactRepository : IContactRepository /// Keep a copy of contact list when filtering /// private SortableBindingList OriginalContactList = null; - private SortableBindingList _contacts; + private SortableBindingList _contacts; public SortableBindingList Contacts { get @@ -37,8 +37,14 @@ public SortableBindingList Contacts private bool _dirty; public bool dirty { - get { return (_contacts != null && _contacts.Any(x => x.isDirty)) || _dirty; } - set { _dirty = true; } + get + { + return (_contacts != null && _contacts.Any(x => x.isDirty)) || _dirty; + } + set + { + _dirty = true; + } } public ContactRepository(IFileHandler fileHandler) @@ -54,12 +60,15 @@ public bool LoadMultipleFilesContact(string path) if (filePaths.Count() == 0) return false; + SortableBindingList loaded; foreach (string item in filePaths) { - var result = LoadContactFromFile(item); - Contacts.AddRange(result); - OriginalContactList = Contacts; + loaded = LoadContactFromFile(item); + if (loaded != null) + Contacts.AddRange(loaded); } + OriginalContactList = Contacts; + return true; } @@ -68,6 +77,8 @@ public bool LoadContacts(string fileName) Contacts.Clear(); this.fileName = fileName; Contacts = LoadContactFromFile(fileName); + if (Contacts == null) + return false; OriginalContactList = Contacts; return true; } @@ -82,7 +93,6 @@ public SortableBindingList LoadContactFromFile(string fileName) string[] lines = _fileHandler.ReadAllLines(fileName); StringBuilder RawContent = new StringBuilder(); - Contact contact; for (int i = 0; i < lines.Length; i++) { @@ -91,9 +101,8 @@ public SortableBindingList LoadContactFromFile(string fileName) { if (string.Equals(lines[i].TrimEnd(), "END:VCARD", StringComparison.OrdinalIgnoreCase)) { - contact = new Contact(ParseRawContent(RawContent)); - ListOfContacts.Add(contact); - RawContent.Length = 0; + ListOfContacts.Add(new Contact(ParseRawContent(RawContent))); + RawContent.Clear(); } } catch (Exception) @@ -417,13 +426,7 @@ public int SaveSplittedFiles(string FolderPath) private string GenerateFileName(string FolderPath, string familyName, int index) { - string FinalPath; - if (string.IsNullOrEmpty(familyName)) - FinalPath = _fileHandler.GetVcfFileName(FolderPath, index.ToString()); - else - FinalPath = _fileHandler.GetVcfFileName(FolderPath, familyName); - - return FinalPath; + return _fileHandler.GetVcfFileName(FolderPath, familyName ?? index.ToString()); } } } diff --git a/vCardEditor/View/IMainView.cs b/vCardEditor/View/IMainView.cs index c6965d2..07bd60d 100644 --- a/vCardEditor/View/IMainView.cs +++ b/vCardEditor/View/IMainView.cs @@ -30,7 +30,7 @@ public interface IMainView event EventHandler CountImagesEvent; event EventHandler ClearImagesEvent; event EventHandler BatchExportImagesEvent; - event EventHandler> OpenFolderEvent; + event EventHandler OpenFolderEvent; event EventHandler SplitFileEvent; event EventHandler CardInfoRemoved; @@ -53,6 +53,8 @@ public interface IMainView void ClearImageFromForm(); string DisplayOpenFolderDialog(); + void SetWindowTitle(string text); + void LoadLocalizedUI(IReadOnlyDictionary currentMessages); void LoadAvailablesLangs(IEnumerable availableLanguages); } diff --git a/vCardEditor/View/MainForm.cs b/vCardEditor/View/MainForm.cs index 0dc23b0..2cbe1cf 100644 --- a/vCardEditor/View/MainForm.cs +++ b/vCardEditor/View/MainForm.cs @@ -37,7 +37,7 @@ public partial class MainForm : Form, IMainView public event EventHandler CountImagesEvent; public event EventHandler ClearImagesEvent; public event EventHandler BatchExportImagesEvent; - public event EventHandler> OpenFolderEvent; + public event EventHandler OpenFolderEvent; public event EventHandler SplitFileEvent; public event EventHandler CardInfoRemoved; @@ -153,8 +153,6 @@ public void DisplayContactDetail(vCard card, string FileName) ClearContactDetail(); - Text = string.Format("{0} - vCard Editor", FileName ?? "New file"); - tcMainTab.Enabled = true; gbNameList.Enabled = true; @@ -240,7 +238,7 @@ private void SetSummaryValue(StateTextBox valueLabel, string value) valueLabel.oldText = value; } - void SetPhotoValue(vCardPhotoCollection photos) + private void SetPhotoValue(vCardPhotoCollection photos) { if (photos.Any()) { @@ -321,8 +319,7 @@ private void getExtraPhones(vCard card) { if (item is vCardPhone) { - vCardPhone phone = item as vCardPhone; - card.Phones.Add(phone); + card.Phones.Add(item as vCardPhone); } } } @@ -369,8 +366,7 @@ private void getExtraData(vCard card) private void dgContacts_RowLeave(object sender, DataGridViewCellEventArgs e) { - vCard data = GetvCardFromWindow(); - BeforeLeavingContact?.Invoke(sender, new EventArg(data)); + BeforeLeavingContact?.Invoke(sender, new EventArg(GetvCardFromWindow())); } private void miQuit_Click(object sender, EventArgs e) @@ -389,7 +385,7 @@ private void MainForm_DragDrop(object sender, DragEventArgs e) string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false); if (FileList.Count() > 1) { - MessageBox.Show("Only one file at the time!"); + DisplayMessage("Only one file at the time!", "Warning"); return; } @@ -439,14 +435,12 @@ public void DisplayMessage(string msg, string caption) public string DisplayOpenFileDialog(string filter = "") { - string filename = string.Empty; openFileDialog.Filter = filter; - - DialogResult result = openFileDialog.ShowDialog(); - if (result == DialogResult.OK) - filename = openFileDialog.FileName; - - return filename; + + if (openFileDialog.ShowDialog() == DialogResult.OK) + return openFileDialog.FileName; + + return string.Empty; } public string DisplaySaveDialog() @@ -454,14 +448,14 @@ public string DisplaySaveDialog() SaveFileDialog saveFileDialog = new SaveFileDialog { Title = "Save vCard file", - Filter = "Virtual Contact File|*.vcf" + Filter = "vCard file|*.vcf" }; string filename = null; if (saveFileDialog.ShowDialog() == DialogResult.OK) { filename = saveFileDialog.FileName; - Text = string.Format("{0} - vCard Editor", filename); + SetWindowTitle(filename); } return filename; @@ -538,11 +532,12 @@ private void modifiyColumnsToolStripMenuItem_Click(object sender, EventArgs e) private List GetListColumnsForDataGrid() { List Columns = new List(); + string name; for (int i = 2; i < dgContacts.Columns.Count; i++) { if (dgContacts.Columns[i].Visible) { - string name = dgContacts.Columns[i].Name; + name = dgContacts.Columns[i].Name; Column enumType = (Column)Enum.Parse(typeof(Column), name, true); Columns.Add(enumType); } @@ -589,8 +584,7 @@ public FormState GetFormState() private void MainForm_Load(object sender, EventArgs e) { - var evt = new EventArg(new FormState()); - LoadForm?.Invoke(sender, evt); + LoadForm?.Invoke(sender, new EventArg(new FormState())); } public void LoadIntialState(FormState state) @@ -614,20 +608,17 @@ private void tbsQR_Click(object sender, EventArgs e) public void DisplayQRCode(string content) { - QRDialog qr = new QRDialog(content); - qr.ShowDialog(); + new QRDialog(content).ShowDialog(); } private void addNotesToolStripMenuItem_Click(object sender, EventArgs e) { - var evt = new EventArg(vCardPropeties.NOTE); - AddExtraField?.Invoke(sender, evt); + AddExtraField?.Invoke(sender, new EventArg(vCardPropeties.NOTE)); } private void addOrgToolStripMenuItem_Click(object sender, EventArgs e) { - var evt = new EventArg(vCardPropeties.ORG); - AddExtraField?.Invoke(sender, evt); + AddExtraField?.Invoke(sender, new EventArg(vCardPropeties.ORG)); } private void btnAddExtraText_Click(object sender, EventArgs e) @@ -640,14 +631,12 @@ private void btnAddExtraText_Click(object sender, EventArgs e) private void miNote_Click(object sender, EventArgs e) { - var evt = new EventArg(vCardPropeties.NOTE); - AddExtraField?.Invoke(sender, evt); + AddExtraField?.Invoke(sender, new EventArg(vCardPropeties.NOTE)); } private void miOrg_Click(object sender, EventArgs e) { - var evt = new EventArg(vCardPropeties.ORG); - AddExtraField?.Invoke(sender, evt); + AddExtraField?.Invoke(sender, new EventArg(vCardPropeties.ORG)); } private void panelTabExtra_ControlAdded(object sender, ControlEventArgs e) @@ -677,8 +666,7 @@ private void exportToolStripMenuItem_Click(object sender, EventArgs e) private void openFolderToolStripMenuItem_Click(object sender, EventArgs e) { - var evt = new EventArg(string.Empty); - OpenFolderEvent?.Invoke(sender, evt); + OpenFolderEvent?.Invoke(sender, e); } private void splitToFilesToolStripMenuItem_Click(object sender, EventArgs e) @@ -694,6 +682,11 @@ public string DisplayOpenFolderDialog() return string.Empty; } + public void SetWindowTitle(string text) + { + Text = string.IsNullOrWhiteSpace(text) ? "vCard Editor" : $"{text} - vCard Editor"; + } + public void LoadLocalizedUI(IReadOnlyDictionary currentMessages) { //this.fileToolStripMenuItem.Text = currentMessages["MSG_002"];