diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2019-10-02 12:47:00 +0300 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2020-01-31 18:43:51 +0300 |
commit | c287787f8df599b567f399f6022ffc88db3a0582 (patch) | |
tree | 6d1863eff65f5c43db73c1e36df6938c505ef58e /lib/Model | |
parent | 31f89d71f860c8c2f75234537a8d64f38da696ab (diff) |
Add a cache for IMAP message in the database
Co-authored-by: Roeland Jago Douma <roeland@famdouma.nl>
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib/Model')
-rw-r--r-- | lib/Model/IMAPMessage.php | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/lib/Model/IMAPMessage.php b/lib/Model/IMAPMessage.php index 714342d6a..be30a78ad 100644 --- a/lib/Model/IMAPMessage.php +++ b/lib/Model/IMAPMessage.php @@ -48,6 +48,7 @@ use OCP\AppFramework\Db\DoesNotExistException; use OCP\Files\File; use OCP\Files\SimpleFS\ISimpleFile; use function base64_encode; +use function json_encode; use function mb_convert_encoding; class IMAPMessage implements IMessage, JsonSerializable { @@ -69,6 +70,7 @@ class IMAPMessage implements IMessage, JsonSerializable { * @param Horde_Imap_Client_Data_Fetch|null $fetch * @param bool $loadHtmlMessage * @param Html|null $htmlService + * * @throws DoesNotExistException */ public function __construct($conn, @@ -145,6 +147,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param array $flags + * * @throws Exception */ public function setFlags(array $flags) { @@ -168,6 +171,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param AddressList $from + * * @throws Exception */ public function setFrom(AddressList $from) { @@ -183,6 +187,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param AddressList $to + * * @throws Exception */ public function setTo(AddressList $to) { @@ -198,6 +203,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param AddressList $cc + * * @throws Exception */ public function setCC(AddressList $cc) { @@ -213,6 +219,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param AddressList $bcc + * * @throws Exception */ public function setBcc(AddressList $bcc) { @@ -237,6 +244,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param string $subject + * * @throws Exception */ public function setSubject(string $subject) { @@ -259,6 +267,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $part + * * @return bool */ private function hasAttachments($part) { @@ -319,7 +328,7 @@ class IMAPMessage implements IMessage, JsonSerializable { } else { if (!is_null($structure->findBody())) { // get the body from the server - $partId = (int) $structure->findBody(); + $partId = (int)$structure->findBody(); $this->getPart($structure->getPart($partId), $partId); } } @@ -328,6 +337,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $p * @param mixed $partNo + * * @throws DoesNotExistException */ private function getPart(Horde_Mime_Part $p, $partNo) { @@ -427,6 +437,7 @@ class IMAPMessage implements IMessage, JsonSerializable { * @param int $accountId * @param string $folderId * @param int $messageId + * * @return string */ public function getHtmlBody(int $accountId, string $folderId, int $messageId): string { @@ -457,6 +468,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $part * @param mixed $partNo + * * @throws DoesNotExistException */ private function handleMultiPartMessage(Horde_Mime_Part $part, $partNo) { @@ -470,6 +482,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $p * @param mixed $partNo + * * @throws DoesNotExistException */ private function handleTextMessage(Horde_Mime_Part $p, $partNo) { @@ -480,6 +493,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $p * @param mixed $partNo + * * @throws DoesNotExistException */ private function handleHtmlMessage(Horde_Mime_Part $p, $partNo) { @@ -493,6 +507,7 @@ class IMAPMessage implements IMessage, JsonSerializable { /** * @param Horde_Mime_Part $p * @param mixed $partNo + * * @return string * @throws DoesNotExistException * @throws Exception @@ -582,4 +597,30 @@ class IMAPMessage implements IMessage, JsonSerializable { throw new Exception('not implemented'); } + public function toDbMessage(int $mailboxId): \OCA\Mail\Db\Message { + $msg = new \OCA\Mail\Db\Message(); + + $msg->setUid($this->getUid()); + $msg->setMessageId($this->getMessageId()); + $msg->setMailboxId($mailboxId); + $msg->setFrom($this->getFrom()); + $msg->setTo($this->getTo()); + $msg->setCc($this->getCc()); + $msg->setBcc($this->getBcc()); + $msg->setSubject(mb_substr($this->getSubject(), 0, 255)); + $msg->setSentAt($this->getSentDate()->getTimestamp()); + + $flags = $this->fetch->getFlags(); + $msg->setFlagAnswered(in_array(Horde_Imap_Client::FLAG_ANSWERED, $flags, true)); + $msg->setFlagDeleted(in_array(Horde_Imap_Client::FLAG_DELETED, $flags, true)); + $msg->setFlagDraft(in_array(Horde_Imap_Client::FLAG_DRAFT, $flags, true)); + $msg->setFlagFlagged(in_array(Horde_Imap_Client::FLAG_FLAGGED, $flags, true)); + $msg->setFlagSeen(in_array(Horde_Imap_Client::FLAG_SEEN, $flags, true)); + $msg->setFlagForwarded(in_array(Horde_Imap_Client::FLAG_FORWARDED, $flags, true)); + $msg->setFlagJunk(in_array(Horde_Imap_Client::FLAG_JUNK, $flags, true)); + $msg->setFlagNotjunk(in_array(Horde_Imap_Client::FLAG_NOTJUNK, $flags, true)); + + return $msg; + } + } |