chore: implement serice interface changes
All checks were successful
Build Test / test (pull_request) Successful in 41s
JS Unit Tests / test (pull_request) Successful in 39s
PHP Unit Tests / test (pull_request) Successful in 55s

Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
2026-05-28 23:27:01 -04:00
parent d1d102e46b
commit aecbd1dc3c
4 changed files with 571 additions and 221 deletions

View File

@@ -23,91 +23,91 @@ class MessageProperties extends MessagePropertiesMutableAbstract {
*/
public function fromJmap(array $parameters): static {
if (isset($parameters['messageId'])) {
$this->data['urid'] = $parameters['messageId'][0];
}
if (isset($parameters['size'])) {
$this->data['size'] = $parameters['size'];
$this->data[static::PROPERTY_SIZE] = $parameters['size'];
}
if (isset($parameters['headers']) && is_array($parameters['headers'])) {
$this->data[static::PROPERTY_HEADERS] = $parameters['headers'];
}
if (isset($parameters['messageId'])) {
$this->data[static::PROPERTY_URID] = $parameters['messageId'][0];
}
if (isset($parameters['receivedAt'])) {
$this->data['received'] = $parameters['receivedAt'];
$this->data[static::PROPERTY_RECEIVED] = $parameters['receivedAt'];
}
if (isset($parameters['sentAt'])) {
$this->data['date'] = $parameters['sentAt'];
$this->data[static::PROPERTY_SENT] = $parameters['sentAt'];
}
if (isset($parameters['inReplyTo'])) {
$this->data['inReplyTo'] = $parameters['inReplyTo'];
$this->data[static::PROPERTY_IN_REPLY_TO] = $parameters['inReplyTo'];
}
if (isset($parameters['references'])) {
$this->data['references'] = is_array($parameters['references']) ? $parameters['references'] : [];
}
if (isset($parameters['subject'])) {
$this->data['subject'] = $parameters['subject'];
}
if (isset($parameters['preview'])) {
$this->data['snippet'] = $parameters['preview'];
$this->data[static::PROPERTY_REFERENCES] = is_array($parameters['references']) ? $parameters['references'] : [];
}
if (isset($parameters['sender'])) {
$this->data['sender'] = $parameters['sender'];
$this->data[static::PROPERTY_SENDER] = $parameters['sender'];
}
if (isset($parameters['from']) && is_array($parameters['from']) && !empty($parameters['from'])) {
$this->data['from'] = [
$this->data[static::PROPERTY_FROM] = [
'address' => $parameters['from'][0]['email'] ?? '',
'label' => $parameters['from'][0]['name'] ?? null
];
}
if (isset($parameters['to']) && is_array($parameters['to'])) {
$this->data['to'] = [];
foreach ($parameters['to'] as $addr) {
$this->data['to'][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['cc']) && is_array($parameters['cc'])) {
$this->data['cc'] = [];
foreach ($parameters['cc'] as $addr) {
$this->data['cc'][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['bcc']) && is_array($parameters['bcc'])) {
$this->data['bcc'] = [];
foreach ($parameters['bcc'] as $addr) {
$this->data['bcc'][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['replyTo']) && is_array($parameters['replyTo'])) {
$this->data['replyTo'] = [];
$this->data[static::PROPERTY_REPLY_TO] = [];
foreach ($parameters['replyTo'] as $addr) {
$this->data['replyTo'][] = [
$this->data[static::PROPERTY_REPLY_TO][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['keywords']) && is_array($parameters['keywords'])) {
$this->data['flags'] = [];
foreach ($parameters['keywords'] as $keyword => $value) {
$flag = match($keyword) {
'$seen' => 'read',
'$flagged' => 'flagged',
'$answered' => 'answered',
'$draft' => 'draft',
'$deleted' => 'deleted',
default => $keyword
};
$this->data['flags'][$flag] = $value;
if (isset($parameters['to']) && is_array($parameters['to'])) {
$this->data[static::PROPERTY_TO] = [];
foreach ($parameters['to'] as $addr) {
$this->data[static::PROPERTY_TO][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['cc']) && is_array($parameters['cc'])) {
$this->data[static::PROPERTY_CC] = [];
foreach ($parameters['cc'] as $addr) {
$this->data[static::PROPERTY_CC][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['bcc']) && is_array($parameters['bcc'])) {
$this->data[static::PROPERTY_BCC] = [];
foreach ($parameters['bcc'] as $addr) {
$this->data[static::PROPERTY_BCC][] = [
'address' => $addr['email'] ?? '',
'label' => $addr['name'] ?? null
];
}
}
if (isset($parameters['subject'])) {
$this->data[static::PROPERTY_SUBJECT] = $parameters['subject'];
}
if (isset($parameters['bodyStructure'])) {
$this->data['body'] = $parameters['bodyStructure'];
$this->data[static::PROPERTY_BODY] = $parameters['bodyStructure'];
// Recursively add content from bodyValues to matching parts
if (isset($parameters['bodyValues']) && is_array($parameters['bodyValues'])) {
$addContentToParts = function(&$structure, $bodyValues) use (&$addContentToParts) {
@@ -123,14 +123,27 @@ class MessageProperties extends MessagePropertiesMutableAbstract {
}
};
$addContentToParts($this->data['body'], $parameters['bodyValues']);
$addContentToParts($this->data[static::PROPERTY_BODY], $parameters['bodyValues']);
}
}
if (isset($parameters['headers']) && is_array($parameters['headers'])) {
$this->data['headers'] = $parameters['headers'];
}
if (isset($parameters['attachments'])) {
$this->data['attachments'] = $parameters['attachments'];
$this->data[static::PROPERTY_ATTACHMENTS] = $parameters['attachments'];
}
if (isset($parameters['keywords']) && is_array($parameters['keywords'])) {
$this->data[static::PROPERTY_FLAGS] = [];
foreach ($parameters['keywords'] as $keyword => $value) {
$flag = match($keyword) {
'$seen' => 'read',
'$flagged' => 'flagged',
'$answered' => 'answered',
'$draft' => 'draft',
'$deleted' => 'deleted',
default => $keyword
};
$this->data[static::PROPERTY_FLAGS][$flag] = $value;
}
}
return $this;