From a60ae3c5a29a352037266b0e28202adecc1460d1 Mon Sep 17 00:00:00 2001 From: Lev Rusanov <30170278+JDM170@users.noreply.github.com> Date: Fri, 13 Jun 2025 22:29:16 +0700 Subject: [PATCH] Update * Updated DisplaySaveDialog * Fixed a bug in SaveContactsHandler, when an exception was thrown when canceling file saving * The window title displays "New file" instead of empty when creating a new file * Commented out the code that saves a website with the "work" type (the program does not work with this type of website) * Explicitly specified data types for some variables * Minor code formatting Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com> --- vCardEditor/JsonLocalizationProvider.cs | 14 +++--- vCardEditor/Presenter/MainPresenter.cs | 9 ++-- vCardEditor/Repository/ContactRepository.cs | 47 ++++++++++----------- vCardEditor/Repository/FileHandler.cs | 10 ++--- vCardEditor/View/IMainView.cs | 2 +- vCardEditor/View/MainForm.cs | 33 +++++++++------ 6 files changed, 55 insertions(+), 60 deletions(-) diff --git a/vCardEditor/JsonLocalizationProvider.cs b/vCardEditor/JsonLocalizationProvider.cs index c4360c5..68cf201 100644 --- a/vCardEditor/JsonLocalizationProvider.cs +++ b/vCardEditor/JsonLocalizationProvider.cs @@ -8,6 +8,7 @@ namespace vCardEditor { private readonly LocalizationFile _localization; private string _currentLanguage; + public JsonLocalizationProvider(LocalizationFile localization, string defaultLanguage = "en") { _localization = localization; @@ -20,21 +21,19 @@ namespace vCardEditor _currentLanguage = langCode; } - - public string this[string key] { get { - if (_localization.languages.TryGetValue(_currentLanguage, out var lang)) + if (_localization.languages.TryGetValue(_currentLanguage, out LanguageData lang)) { - if (lang.messages.TryGetValue(key, out var value)) + if (lang.messages.TryGetValue(key, out string value)) return value; } - if (_localization.languages.TryGetValue("en", out var fallbackLang)) + if (_localization.languages.TryGetValue("en", out LanguageData fallbackLang)) { - if (fallbackLang.messages.TryGetValue(key, out var fallbackMsg)) + if (fallbackLang.messages.TryGetValue(key, out string fallbackMsg)) return fallbackMsg; } @@ -42,9 +41,8 @@ namespace vCardEditor } } - public IReadOnlyDictionary CurrentMessages => - _localization.languages.TryGetValue(_currentLanguage, out var lang) + _localization.languages.TryGetValue(_currentLanguage, out LanguageData lang) ? lang.messages : new Dictionary(); diff --git a/vCardEditor/Presenter/MainPresenter.cs b/vCardEditor/Presenter/MainPresenter.cs index fa9ec95..ca674b0 100644 --- a/vCardEditor/Presenter/MainPresenter.cs +++ b/vCardEditor/Presenter/MainPresenter.cs @@ -23,7 +23,6 @@ namespace VCFEditor.Presenter _repository = repository; _localization = localization; - _view.LoadForm += LoadFormHandler; _view.AddContact += AddContactHandler; _view.NewFileOpened += OpenNewFileHandler; @@ -321,11 +320,9 @@ namespace VCFEditor.Presenter private void SaveContactsHandler(object sender, EventArgs e) { - string filename; - if (!string.IsNullOrEmpty(_repository.fileName)) - filename = _repository.fileName; - else - filename = _view.DisplaySaveDialog(""); + string filename = _repository.fileName ?? _view.DisplaySaveDialog(); + if (string.IsNullOrWhiteSpace(filename)) + return; _repository.SaveContactsToFile(filename); } diff --git a/vCardEditor/Repository/ContactRepository.cs b/vCardEditor/Repository/ContactRepository.cs index 4dbeac3..3a63f1f 100644 --- a/vCardEditor/Repository/ContactRepository.cs +++ b/vCardEditor/Repository/ContactRepository.cs @@ -54,7 +54,7 @@ namespace VCFEditor.Repository if (filePaths.Count() == 0) return false; - foreach (var item in filePaths) + foreach (string item in filePaths) { var result = LoadContactFromFile(item); Contacts.AddRange(result); @@ -117,9 +117,7 @@ namespace VCFEditor.Repository public void AddEmptyContact() { - Contact contact = new Contact(); - contact.isDirty = true; - Contacts.Add(contact); + Contacts.Add(new Contact() { isDirty = true }); } public void SaveContactsToFile(string fileName) @@ -137,7 +135,7 @@ namespace VCFEditor.Repository StringBuilder sb = new StringBuilder(); - foreach (var entry in Contacts) + foreach (Contact entry in Contacts) { //Do not save the deleted ones! if (!entry.isDeleted) @@ -221,24 +219,23 @@ namespace VCFEditor.Repository private void SaveExtraPhones(vCard newCard, vCard card) { card.Phones.Clear(); - foreach (var item in newCard.Phones) + foreach (vCardPhone item in newCard.Phones) card.Phones.Add(new vCardPhone(item.FullNumber, item.PhoneType)); } private void SaveExtraField(vCard newCard, vCard card) { card.Notes.Clear(); - foreach (var item in newCard.Notes) + foreach (vCardNote item in newCard.Notes) card.Notes.Add(new vCardNote(item.Text)); - card.Organization = newCard.Organization; } private void SaveAddresses(vCard NewCard, vCard card) { - foreach (var item in NewCard.DeliveryAddresses) + foreach (vCardDeliveryAddress item in NewCard.DeliveryAddresses) { - var adr = card.DeliveryAddresses.Where(x => x.AddressType.FirstOrDefault() == item.AddressType.FirstOrDefault()).FirstOrDefault(); + vCardDeliveryAddress adr = card.DeliveryAddresses.Where(x => x.AddressType.FirstOrDefault() == item.AddressType.FirstOrDefault()).FirstOrDefault(); if (adr != null) { adr.City = item.City; @@ -321,6 +318,7 @@ namespace VCFEditor.Repository private void SaveWebUrl(vCard NewCard, vCard card) { + //Personal if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Personal) != null) { if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Personal) != null) @@ -334,19 +332,19 @@ namespace VCFEditor.Repository card.Websites.GetFirstChoice(vCardWebsiteTypes.Personal).Url = string.Empty; } - - if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) - { - if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) - card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url; - else - card.Websites.Add(new vCardWebsite(NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url, vCardWebsiteTypes.Work)); - } - else - { - if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) - card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = string.Empty; - } + //Work + //if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) + //{ + // if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) + // card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url; + // else + // card.Websites.Add(new vCardWebsite(NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url, vCardWebsiteTypes.Work)); + //} + //else + //{ + // if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null) + // card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = string.Empty; + //} } public string GenerateStringFromVCard(vCard card) @@ -387,8 +385,7 @@ namespace VCFEditor.Repository public string GenerateFileName(string fileName, int index, string extension) { - string result = _fileHandler.GetFileNameWithExtension(fileName, index, extension); - return result; + return _fileHandler.GetFileNameWithExtension(fileName, index, extension); } public int SaveSplittedFiles(string FolderPath) diff --git a/vCardEditor/Repository/FileHandler.cs b/vCardEditor/Repository/FileHandler.cs index e313a49..e5ab3b3 100644 --- a/vCardEditor/Repository/FileHandler.cs +++ b/vCardEditor/Repository/FileHandler.cs @@ -57,23 +57,21 @@ namespace vCardEditor.Repository public string[] GetFiles(string path, string ext) { - string[] filePaths = Directory.GetFiles(path, ext,SearchOption.TopDirectoryOnly); - return filePaths; + return Directory.GetFiles(path, ext, SearchOption.TopDirectoryOnly); } public string LoadJsonFromAssembly(string EmbeddedResourceName) { string json; - var assembly = Assembly.GetExecutingAssembly(); - using (var stream = assembly.GetManifestResourceStream(EmbeddedResourceName)) + Assembly assembly = Assembly.GetExecutingAssembly(); + using (Stream stream = assembly.GetManifestResourceStream(EmbeddedResourceName)) { if (stream == null) throw new FileNotFoundException($"Embedded resource '{EmbeddedResourceName}' not found."); - using (var reader = new StreamReader(stream)) + using (StreamReader reader = new StreamReader(stream)) json = reader.ReadToEnd(); } - return json; } } diff --git a/vCardEditor/View/IMainView.cs b/vCardEditor/View/IMainView.cs index 9eb6311..c6965d2 100644 --- a/vCardEditor/View/IMainView.cs +++ b/vCardEditor/View/IMainView.cs @@ -41,7 +41,7 @@ namespace VCFEditor.View bool AskMessage(string msg, string caption); void DisplayMessage(string msg, string caption); string DisplayOpenFileDialog(string filter); - string DisplaySaveDialog(string filename); + string DisplaySaveDialog(); void UpdateMRUMenu(FixedList MRUList); void SendTextToClipBoard(string text); diff --git a/vCardEditor/View/MainForm.cs b/vCardEditor/View/MainForm.cs index 5a2b40a..0dc23b0 100644 --- a/vCardEditor/View/MainForm.cs +++ b/vCardEditor/View/MainForm.cs @@ -61,15 +61,18 @@ namespace vCardEditor.View InitializeComponent(); resources = new ComponentResourceManager(typeof(MainForm)); + tbcAddress.AddTab += (sender, e) => AddressAdded?.Invoke(sender, e); tbcAddress.RemoveTab += (sender, e) => AddressRemoved?.Invoke(sender, e); tbcAddress.ModifyTab += (sender, e) => AddressModified?.Invoke(sender, e); tbcAddress.TextChangedEvent += (sender, e) => TextBoxValueChanged?.Invoke(sender, e); btnClearFilter.Click += (sender, e) => textBoxFilter.Clear(); + extendedPanelPhones.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e); extendedPanelWeb.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e); extendedPanelPhones.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e); extendedPanelWeb.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e); + BuildMRUMenu(); } @@ -126,7 +129,6 @@ namespace vCardEditor.View int RowIndex = dgContacts.CurrentCell.RowIndex; if (LastRowIndex != RowIndex) { - if (ChangeContactsSelected != null && dgContacts.CurrentCell != null) { vCard data = GetvCardFromWindow(); @@ -151,7 +153,7 @@ namespace vCardEditor.View ClearContactDetail(); - Text = string.Format("{0} - vCard Editor", FileName); + Text = string.Format("{0} - vCard Editor", FileName ?? "New file"); tcMainTab.Enabled = true; gbNameList.Enabled = true; @@ -171,14 +173,14 @@ namespace vCardEditor.View private void SetExtraInfos(vCard card) { + foreach (vCardPhone item in card.Phones) + extendedPanelPhones.AddControl(item); + foreach (vCardEmailAddress item in card.EmailAddresses) extendedPanelWeb.AddControl(item); foreach (vCardWebsite item in card.Websites) extendedPanelWeb.AddControl(item); - - foreach (vCardPhone item in card.Phones) - extendedPanelPhones.AddControl(item); } private void SetExtraTabFields(vCard card) @@ -308,6 +310,7 @@ namespace vCardEditor.View getExtraPhones(card); getExtraWeb(card); getExtraData(card); + return card; } @@ -446,16 +449,20 @@ namespace vCardEditor.View return filename; } - public string DisplaySaveDialog(string filename) + public string DisplaySaveDialog() { SaveFileDialog saveFileDialog = new SaveFileDialog { - FileName = filename + Title = "Save vCard file", + Filter = "Virtual Contact File|*.vcf" }; + string filename = null; - DialogResult result = saveFileDialog.ShowDialog(); - if (result == DialogResult.OK) + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { filename = saveFileDialog.FileName; + Text = string.Format("{0} - vCard Editor", filename); + } return filename; } @@ -681,12 +688,10 @@ namespace vCardEditor.View public string DisplayOpenFolderDialog() { - string result = string.Empty; FolderBrowserDialog dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() == DialogResult.OK) - result = dialog.SelectedPath; - - return result; + return dialog.SelectedPath; + return string.Empty; } public void LoadLocalizedUI(IReadOnlyDictionary currentMessages) @@ -696,7 +701,7 @@ namespace vCardEditor.View public void LoadAvailablesLangs(IEnumerable availableLanguages) { - foreach (var lang in availableLanguages) + foreach (string lang in availableLanguages) { }