feat: enhance contact management and vCard support

- Added support for parsing and generating additional vCard properties including GENDER, LOGO, SOUND, LABEL, CALURI, CALADRURI, FBURL, and SOURCE.
- Extended ContactCard interface to include new fields such as gender, media, anniversaries, online services, and personal info.
- Implemented logic to handle multi-part TLDs for domain extraction in avatars.
- Improved avatar component to prioritize contact photos and handle inline images in emails.
- Updated localization files to include new fields and labels for contact details.
- Refactored contact store to expose a method for retrieving contact photos.
- Enhanced unit tests to cover new vCard properties and ensure correct parsing and generation.
This commit is contained in:
Linus Rath
2026-03-12 15:54:09 +01:00
parent 4737f2928b
commit 7fedcb8e58
12 changed files with 2042 additions and 361 deletions
+96 -1
View File
@@ -161,6 +161,7 @@
"load_external_content": "Load images",
"trust_sender": "Always trust this sender",
"back_to_list": "Back to list",
"view_contact": "View contact",
"message_details": "Message Details",
"more_reply_options": "More reply options",
"set_color": "Set tag",
@@ -1233,28 +1234,122 @@
"organizations": "Organizations",
"addresses": "Addresses",
"notes": "Notes",
"titles": "Titles & Roles",
"online_services": "Online Services",
"anniversaries": "Anniversaries",
"personal_info": "Personal Info",
"languages": "Languages",
"categories": "Categories",
"related_contacts": "Related Contacts",
"crypto_keys": "Crypto Keys",
"no_contact_selected": "Select a contact to view details",
"compose_email": "Compose email",
"copy_email": "Copy email",
"copy_phone": "Copy phone number",
"copy_url": "Copy URL",
"copied": "Copied to clipboard",
"copy_failed": "Failed to copy to clipboard",
"created": "Created",
"updated": "Last updated"
"updated": "Last updated",
"timezone": "Timezone",
"anniversary_birth": "Birthday",
"anniversary_death": "Passed away",
"anniversary_wedding": "Anniversary",
"anniversary_other": "Other",
"personal_expertise": "Expertise",
"personal_hobby": "Hobby",
"personal_interest": "Interest",
"personal_other": "Other",
"gender": "Gender",
"gender_M": "Male",
"gender_F": "Female",
"gender_O": "Other",
"gender_N": "Not applicable",
"gender_U": "Unknown",
"calendar": "Calendar",
"calendar_uri": "Calendar URL",
"scheduling_uri": "Scheduling URL",
"freebusy_uri": "Free/Busy URL"
},
"form": {
"create_title": "New Contact",
"edit_title": "Edit Contact",
"section_identity": "Name & Identity",
"section_work": "Work & Organization",
"prefix": "Prefix",
"prefix_placeholder": "Dr., Mr., Mrs.",
"given_name": "First name",
"middle_name": "Middle name",
"surname": "Last name",
"suffix": "Suffix",
"suffix_placeholder": "Jr., Sr., III",
"nickname": "Nickname",
"nickname_placeholder": "Nickname",
"email": "Email",
"email_placeholder": "email@example.com",
"phone": "Phone",
"phone_placeholder": "+1 234 567 890",
"phone_type": "Type",
"phone_voice": "Voice",
"phone_cell": "Mobile",
"phone_fax": "Fax",
"phone_pager": "Pager",
"phone_video": "Video",
"phone_text": "Text",
"organization": "Organization",
"organization_placeholder": "Company name",
"department": "Department",
"department_placeholder": "Department",
"job_title": "Job title",
"job_title_placeholder": "e.g., Software Engineer",
"role": "Role",
"role_placeholder": "e.g., Team Lead",
"addresses": "Addresses",
"add_address": "Add address",
"street": "Street",
"city": "City",
"region": "State / Region",
"postcode": "Postal code",
"country": "Country",
"online_services": "Online Services",
"add_online_service": "Add online service",
"url_placeholder": "https://...",
"service_placeholder": "Service",
"anniversaries": "Anniversaries",
"add_anniversary": "Add date",
"anniversary_birth": "Birthday",
"anniversary_wedding": "Anniversary",
"anniversary_death": "Memorial",
"anniversary_other": "Other",
"personal_info": "Personal Info",
"add_personal_info": "Add entry",
"personal_info_placeholder": "e.g., Photography",
"personal_expertise": "Expertise",
"personal_hobby": "Hobby",
"personal_interest": "Interest",
"personal_other": "Other",
"level": "Level",
"level_high": "High",
"level_medium": "Medium",
"level_low": "Low",
"categories": "Categories",
"categories_placeholder": "e.g., Family, Friends, Colleagues",
"categories_hint": "Separate with commas",
"note": "Notes",
"note_placeholder": "Add a note...",
"gender": "Gender",
"gender_sex": "Sex",
"gender_male": "Male",
"gender_female": "Female",
"gender_other": "Other",
"gender_none": "Not applicable",
"gender_unknown": "Unknown",
"gender_identity": "Gender identity",
"gender_identity_placeholder": "Gender identity...",
"calendar": "Calendar",
"calendar_uri": "Calendar URL",
"scheduling_uri": "Scheduling URL",
"freebusy_uri": "Free/Busy URL",
"context_work": "Work",
"context_private": "Private",
"add_email": "Add email",