mirror of
https://github.com/abdelkader/vCardEditor
synced 2025-12-12 08:27:19 +07:00
@@ -8,6 +8,7 @@ namespace vCardEditor
|
|||||||
{
|
{
|
||||||
private readonly LocalizationFile _localization;
|
private readonly LocalizationFile _localization;
|
||||||
private string _currentLanguage;
|
private string _currentLanguage;
|
||||||
|
|
||||||
public JsonLocalizationProvider(LocalizationFile localization, string defaultLanguage = "en")
|
public JsonLocalizationProvider(LocalizationFile localization, string defaultLanguage = "en")
|
||||||
{
|
{
|
||||||
_localization = localization;
|
_localization = localization;
|
||||||
@@ -20,21 +21,19 @@ namespace vCardEditor
|
|||||||
_currentLanguage = langCode;
|
_currentLanguage = langCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public string this[string key]
|
public string this[string key]
|
||||||
{
|
{
|
||||||
get
|
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;
|
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;
|
return fallbackMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,9 +41,8 @@ namespace vCardEditor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IReadOnlyDictionary<string, string> CurrentMessages =>
|
public IReadOnlyDictionary<string, string> CurrentMessages =>
|
||||||
_localization.languages.TryGetValue(_currentLanguage, out var lang)
|
_localization.languages.TryGetValue(_currentLanguage, out LanguageData lang)
|
||||||
? lang.messages
|
? lang.messages
|
||||||
: new Dictionary<string, string>();
|
: new Dictionary<string, string>();
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ namespace VCFEditor.Presenter
|
|||||||
_repository = repository;
|
_repository = repository;
|
||||||
_localization = localization;
|
_localization = localization;
|
||||||
|
|
||||||
|
|
||||||
_view.LoadForm += LoadFormHandler;
|
_view.LoadForm += LoadFormHandler;
|
||||||
_view.AddContact += AddContactHandler;
|
_view.AddContact += AddContactHandler;
|
||||||
_view.NewFileOpened += OpenNewFileHandler;
|
_view.NewFileOpened += OpenNewFileHandler;
|
||||||
@@ -321,11 +320,9 @@ namespace VCFEditor.Presenter
|
|||||||
|
|
||||||
private void SaveContactsHandler(object sender, EventArgs e)
|
private void SaveContactsHandler(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string filename;
|
string filename = _repository.fileName ?? _view.DisplaySaveDialog();
|
||||||
if (!string.IsNullOrEmpty(_repository.fileName))
|
if (string.IsNullOrWhiteSpace(filename))
|
||||||
filename = _repository.fileName;
|
return;
|
||||||
else
|
|
||||||
filename = _view.DisplaySaveDialog("");
|
|
||||||
|
|
||||||
_repository.SaveContactsToFile(filename);
|
_repository.SaveContactsToFile(filename);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace VCFEditor.Repository
|
|||||||
if (filePaths.Count() == 0)
|
if (filePaths.Count() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
foreach (var item in filePaths)
|
foreach (string item in filePaths)
|
||||||
{
|
{
|
||||||
var result = LoadContactFromFile(item);
|
var result = LoadContactFromFile(item);
|
||||||
Contacts.AddRange(result);
|
Contacts.AddRange(result);
|
||||||
@@ -117,9 +117,7 @@ namespace VCFEditor.Repository
|
|||||||
|
|
||||||
public void AddEmptyContact()
|
public void AddEmptyContact()
|
||||||
{
|
{
|
||||||
Contact contact = new Contact();
|
Contacts.Add(new Contact() { isDirty = true });
|
||||||
contact.isDirty = true;
|
|
||||||
Contacts.Add(contact);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveContactsToFile(string fileName)
|
public void SaveContactsToFile(string fileName)
|
||||||
@@ -137,7 +135,7 @@ namespace VCFEditor.Repository
|
|||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
foreach (var entry in Contacts)
|
foreach (Contact entry in Contacts)
|
||||||
{
|
{
|
||||||
//Do not save the deleted ones!
|
//Do not save the deleted ones!
|
||||||
if (!entry.isDeleted)
|
if (!entry.isDeleted)
|
||||||
@@ -221,24 +219,23 @@ namespace VCFEditor.Repository
|
|||||||
private void SaveExtraPhones(vCard newCard, vCard card)
|
private void SaveExtraPhones(vCard newCard, vCard card)
|
||||||
{
|
{
|
||||||
card.Phones.Clear();
|
card.Phones.Clear();
|
||||||
foreach (var item in newCard.Phones)
|
foreach (vCardPhone item in newCard.Phones)
|
||||||
card.Phones.Add(new vCardPhone(item.FullNumber, item.PhoneType));
|
card.Phones.Add(new vCardPhone(item.FullNumber, item.PhoneType));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveExtraField(vCard newCard, vCard card)
|
private void SaveExtraField(vCard newCard, vCard card)
|
||||||
{
|
{
|
||||||
card.Notes.Clear();
|
card.Notes.Clear();
|
||||||
foreach (var item in newCard.Notes)
|
foreach (vCardNote item in newCard.Notes)
|
||||||
card.Notes.Add(new vCardNote(item.Text));
|
card.Notes.Add(new vCardNote(item.Text));
|
||||||
|
|
||||||
card.Organization = newCard.Organization;
|
card.Organization = newCard.Organization;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveAddresses(vCard NewCard, vCard card)
|
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)
|
if (adr != null)
|
||||||
{
|
{
|
||||||
adr.City = item.City;
|
adr.City = item.City;
|
||||||
@@ -321,6 +318,7 @@ namespace VCFEditor.Repository
|
|||||||
|
|
||||||
private void SaveWebUrl(vCard NewCard, vCard card)
|
private void SaveWebUrl(vCard NewCard, vCard card)
|
||||||
{
|
{
|
||||||
|
//Personal
|
||||||
if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Personal) != null)
|
if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Personal) != null)
|
||||||
{
|
{
|
||||||
if (card.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;
|
card.Websites.GetFirstChoice(vCardWebsiteTypes.Personal).Url = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Work
|
||||||
if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
//if (NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
||||||
{
|
//{
|
||||||
if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
// if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
||||||
card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url;
|
// card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url;
|
||||||
else
|
// else
|
||||||
card.Websites.Add(new vCardWebsite(NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url, vCardWebsiteTypes.Work));
|
// card.Websites.Add(new vCardWebsite(NewCard.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url, vCardWebsiteTypes.Work));
|
||||||
}
|
//}
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
// if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
|
||||||
card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = string.Empty;
|
// card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = string.Empty;
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GenerateStringFromVCard(vCard card)
|
public string GenerateStringFromVCard(vCard card)
|
||||||
@@ -387,8 +385,7 @@ namespace VCFEditor.Repository
|
|||||||
|
|
||||||
public string GenerateFileName(string fileName, int index, string extension)
|
public string GenerateFileName(string fileName, int index, string extension)
|
||||||
{
|
{
|
||||||
string result = _fileHandler.GetFileNameWithExtension(fileName, index, extension);
|
return _fileHandler.GetFileNameWithExtension(fileName, index, extension);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int SaveSplittedFiles(string FolderPath)
|
public int SaveSplittedFiles(string FolderPath)
|
||||||
|
|||||||
@@ -57,23 +57,21 @@ namespace vCardEditor.Repository
|
|||||||
|
|
||||||
public string[] GetFiles(string path, string ext)
|
public string[] GetFiles(string path, string ext)
|
||||||
{
|
{
|
||||||
string[] filePaths = Directory.GetFiles(path, ext,SearchOption.TopDirectoryOnly);
|
return Directory.GetFiles(path, ext, SearchOption.TopDirectoryOnly);
|
||||||
return filePaths;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string LoadJsonFromAssembly(string EmbeddedResourceName)
|
public string LoadJsonFromAssembly(string EmbeddedResourceName)
|
||||||
{
|
{
|
||||||
string json;
|
string json;
|
||||||
var assembly = Assembly.GetExecutingAssembly();
|
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||||
using (var stream = assembly.GetManifestResourceStream(EmbeddedResourceName))
|
using (Stream stream = assembly.GetManifestResourceStream(EmbeddedResourceName))
|
||||||
{
|
{
|
||||||
if (stream == null)
|
if (stream == null)
|
||||||
throw new FileNotFoundException($"Embedded resource '{EmbeddedResourceName}' not found.");
|
throw new FileNotFoundException($"Embedded resource '{EmbeddedResourceName}' not found.");
|
||||||
|
|
||||||
using (var reader = new StreamReader(stream))
|
using (StreamReader reader = new StreamReader(stream))
|
||||||
json = reader.ReadToEnd();
|
json = reader.ReadToEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace VCFEditor.View
|
|||||||
bool AskMessage(string msg, string caption);
|
bool AskMessage(string msg, string caption);
|
||||||
void DisplayMessage(string msg, string caption);
|
void DisplayMessage(string msg, string caption);
|
||||||
string DisplayOpenFileDialog(string filter);
|
string DisplayOpenFileDialog(string filter);
|
||||||
string DisplaySaveDialog(string filename);
|
string DisplaySaveDialog();
|
||||||
void UpdateMRUMenu(FixedList MRUList);
|
void UpdateMRUMenu(FixedList MRUList);
|
||||||
|
|
||||||
void SendTextToClipBoard(string text);
|
void SendTextToClipBoard(string text);
|
||||||
|
|||||||
@@ -61,15 +61,18 @@ namespace vCardEditor.View
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
resources = new ComponentResourceManager(typeof(MainForm));
|
resources = new ComponentResourceManager(typeof(MainForm));
|
||||||
|
|
||||||
tbcAddress.AddTab += (sender, e) => AddressAdded?.Invoke(sender, e);
|
tbcAddress.AddTab += (sender, e) => AddressAdded?.Invoke(sender, e);
|
||||||
tbcAddress.RemoveTab += (sender, e) => AddressRemoved?.Invoke(sender, e);
|
tbcAddress.RemoveTab += (sender, e) => AddressRemoved?.Invoke(sender, e);
|
||||||
tbcAddress.ModifyTab += (sender, e) => AddressModified?.Invoke(sender, e);
|
tbcAddress.ModifyTab += (sender, e) => AddressModified?.Invoke(sender, e);
|
||||||
tbcAddress.TextChangedEvent += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
tbcAddress.TextChangedEvent += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
||||||
btnClearFilter.Click += (sender, e) => textBoxFilter.Clear();
|
btnClearFilter.Click += (sender, e) => textBoxFilter.Clear();
|
||||||
|
|
||||||
extendedPanelPhones.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
extendedPanelPhones.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
||||||
extendedPanelWeb.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
extendedPanelWeb.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
|
||||||
extendedPanelPhones.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e);
|
extendedPanelPhones.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e);
|
||||||
extendedPanelWeb.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e);
|
extendedPanelWeb.CardInfoRemoved += (sender, e) => CardInfoRemoved?.Invoke(sender, e);
|
||||||
|
|
||||||
BuildMRUMenu();
|
BuildMRUMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +129,6 @@ namespace vCardEditor.View
|
|||||||
int RowIndex = dgContacts.CurrentCell.RowIndex;
|
int RowIndex = dgContacts.CurrentCell.RowIndex;
|
||||||
if (LastRowIndex != RowIndex)
|
if (LastRowIndex != RowIndex)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (ChangeContactsSelected != null && dgContacts.CurrentCell != null)
|
if (ChangeContactsSelected != null && dgContacts.CurrentCell != null)
|
||||||
{
|
{
|
||||||
vCard data = GetvCardFromWindow();
|
vCard data = GetvCardFromWindow();
|
||||||
@@ -151,7 +153,7 @@ namespace vCardEditor.View
|
|||||||
|
|
||||||
ClearContactDetail();
|
ClearContactDetail();
|
||||||
|
|
||||||
Text = string.Format("{0} - vCard Editor", FileName);
|
Text = string.Format("{0} - vCard Editor", FileName ?? "New file");
|
||||||
|
|
||||||
tcMainTab.Enabled = true;
|
tcMainTab.Enabled = true;
|
||||||
gbNameList.Enabled = true;
|
gbNameList.Enabled = true;
|
||||||
@@ -171,14 +173,14 @@ namespace vCardEditor.View
|
|||||||
|
|
||||||
private void SetExtraInfos(vCard card)
|
private void SetExtraInfos(vCard card)
|
||||||
{
|
{
|
||||||
|
foreach (vCardPhone item in card.Phones)
|
||||||
|
extendedPanelPhones.AddControl(item);
|
||||||
|
|
||||||
foreach (vCardEmailAddress item in card.EmailAddresses)
|
foreach (vCardEmailAddress item in card.EmailAddresses)
|
||||||
extendedPanelWeb.AddControl(item);
|
extendedPanelWeb.AddControl(item);
|
||||||
|
|
||||||
foreach (vCardWebsite item in card.Websites)
|
foreach (vCardWebsite item in card.Websites)
|
||||||
extendedPanelWeb.AddControl(item);
|
extendedPanelWeb.AddControl(item);
|
||||||
|
|
||||||
foreach (vCardPhone item in card.Phones)
|
|
||||||
extendedPanelPhones.AddControl(item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetExtraTabFields(vCard card)
|
private void SetExtraTabFields(vCard card)
|
||||||
@@ -308,6 +310,7 @@ namespace vCardEditor.View
|
|||||||
getExtraPhones(card);
|
getExtraPhones(card);
|
||||||
getExtraWeb(card);
|
getExtraWeb(card);
|
||||||
getExtraData(card);
|
getExtraData(card);
|
||||||
|
|
||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,16 +449,20 @@ namespace vCardEditor.View
|
|||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string DisplaySaveDialog(string filename)
|
public string DisplaySaveDialog()
|
||||||
{
|
{
|
||||||
SaveFileDialog saveFileDialog = new SaveFileDialog
|
SaveFileDialog saveFileDialog = new SaveFileDialog
|
||||||
{
|
{
|
||||||
FileName = filename
|
Title = "Save vCard file",
|
||||||
|
Filter = "Virtual Contact File|*.vcf"
|
||||||
};
|
};
|
||||||
|
string filename = null;
|
||||||
|
|
||||||
DialogResult result = saveFileDialog.ShowDialog();
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
if (result == DialogResult.OK)
|
{
|
||||||
filename = saveFileDialog.FileName;
|
filename = saveFileDialog.FileName;
|
||||||
|
Text = string.Format("{0} - vCard Editor", filename);
|
||||||
|
}
|
||||||
|
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
@@ -681,12 +688,10 @@ namespace vCardEditor.View
|
|||||||
|
|
||||||
public string DisplayOpenFolderDialog()
|
public string DisplayOpenFolderDialog()
|
||||||
{
|
{
|
||||||
string result = string.Empty;
|
|
||||||
FolderBrowserDialog dialog = new FolderBrowserDialog();
|
FolderBrowserDialog dialog = new FolderBrowserDialog();
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
result = dialog.SelectedPath;
|
return dialog.SelectedPath;
|
||||||
|
return string.Empty;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadLocalizedUI(IReadOnlyDictionary<string, string> currentMessages)
|
public void LoadLocalizedUI(IReadOnlyDictionary<string, string> currentMessages)
|
||||||
@@ -696,7 +701,7 @@ namespace vCardEditor.View
|
|||||||
|
|
||||||
public void LoadAvailablesLangs(IEnumerable<string> availableLanguages)
|
public void LoadAvailablesLangs(IEnumerable<string> availableLanguages)
|
||||||
{
|
{
|
||||||
foreach (var lang in availableLanguages)
|
foreach (string lang in availableLanguages)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user