* 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>
This commit is contained in:
2025-06-13 22:29:16 +07:00
parent 9c66157599
commit a60ae3c5a2
6 changed files with 55 additions and 60 deletions

View File

@@ -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<string, string> CurrentMessages =>
_localization.languages.TryGetValue(_currentLanguage, out var lang)
_localization.languages.TryGetValue(_currentLanguage, out LanguageData lang)
? lang.messages
: new Dictionary<string, string>();

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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;
}
}

View File

@@ -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);

View File

@@ -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<string, string> currentMessages)
@@ -696,7 +701,7 @@ namespace vCardEditor.View
public void LoadAvailablesLangs(IEnumerable<string> availableLanguages)
{
foreach (var lang in availableLanguages)
foreach (string lang in availableLanguages)
{
}