mirror of
https://github.com/abdelkader/vCardEditor
synced 2025-12-12 08:27:19 +07:00
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>
This commit is contained in:
@@ -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>();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user