/PIM

VCard builder classes

Primary Language4DMIT LicenseMIT

PIM

language language-top code-size license discord sponsors

personal information manager stuff, ie. VCard and VCalendar

VCard

VCard builder class

rfc6350

Create

$vCard = PIM.VCard.new()

// set properties
$vCard.firstName := "Eric"
$vCard.middleName := ""
$vCard.lastName := "Marchand"
$vCard.organization := "4D"
$vCard.photo.attachFromUrl("https://avatars.githubusercontent.com/u/59135882?v=4"; "JPEG")
$vCard.workPhone := "312-555-1212"
$vCard.title := "Software Developer"
$vCard.url := "https://github.com/mesopelagique"
$vCard.note := "Notes on Eric"

save to file

$vCard.saveToFile(Folder(...).file("eric-marchand.vcf"))

get as formatted text

$text:=$vCard.getText()

send it when responding to http request

$vCard.webSend("eric-marchand.vcf")

Embedding Images

Instead of using url you could embedded images

With files

$vCard.photo.embedFromFile(File("/path/to/file.png"))
$vCard.logo.embedFromFile(File("/path/to/file.png"))

With base 64 data

$vCard.photo.embedFromString("iVBORw0KGgoAAAANSUhEUgAAA2..."; "image/png"')
$vCard.logo.embedFromString("iVBORw0KGgoAAAANSUhEUgAAA2..."; "image/png")

Multiple Email, Fax, & Phone Examples

// multiple email entry
$vCard.email := New collection(\
    "e.marchand@emailhost.tld";\
    "e.marchand@emailhost2.tld";\
    "e.marchand@emailhost3.tld"\
)

// multiple cellphone
$vCard.cellPhone := New collection(\
    "312-555-1414";\
    "312-555-1415";\
    "312-555-1416"\
)

VCalendar(🚧)

VCalendar builder class

Create

$calendar = PIM.VCalendar.new()

Add events

TODO

get as formatted text

$text:=$calendar.getText()

send it when responding to http request

$calendar.webSend("eric-marchand.ics")

Testing

To do unit test, this component use expect BDD/TDD component as git submodule in Components

When opening this database, the test component expect will be compiled by onStartUp method with the new v19 Compile project command.

💡 If you have issue with previous version of 4D, just remove "expect" component, and test files like test_pim

🌏 To test web, you could also launch the web server and do any request on it, a vcard will be downloaded, vcard produced by test_web

TODO

  • Fix format VCard bugs, seems to not import well with macOS calendar app
  • Implement calendar event formatting
  • Parse VCard (partially implemented in _parse or _parseFile but not enough file tested)
  • Parse VCalendar

To help

If you run a business and you’re using one of my projects in a revenue-generating product, it makes business sense to sponsor this open source development

sponsors

Thank you for your support!

Other components

mesopelagique

Acknowledgements