diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2020-03-26 18:21:54 +0300 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2020-03-26 18:41:14 +0300 |
commit | 38ad0d54866c81b391906da32a7f2fb8bfda1b48 (patch) | |
tree | 0f2de58f800b152b2f6c0d84dd53f0b54b76cb66 /lib/Listener | |
parent | f36b56e9d195af4203304ed712b263d01f1e67eb (diff) |
Update the message cache when a message is flagged
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib/Listener')
-rw-r--r-- | lib/Listener/MessageCacheUpdaterListener.php (renamed from lib/Listener/MessageDeletedCacheUpdaterListener.php) | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/Listener/MessageDeletedCacheUpdaterListener.php b/lib/Listener/MessageCacheUpdaterListener.php index 4b6bab10a..bd710adb1 100644 --- a/lib/Listener/MessageDeletedCacheUpdaterListener.php +++ b/lib/Listener/MessageCacheUpdaterListener.php @@ -27,28 +27,44 @@ namespace OCA\Mail\Listener; use OCA\Mail\Db\MessageMapper; use OCA\Mail\Events\MessageDeletedEvent; +use OCA\Mail\Events\MessageFlaggedEvent; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; +use OCP\ILogger; -class MessageDeletedCacheUpdaterListener implements IEventListener { +class MessageCacheUpdaterListener implements IEventListener { /** @var MessageMapper */ private $mapper; - public function __construct(MessageMapper $mapper) { + /** @var ILogger */ + private $logger; + + public function __construct(MessageMapper $mapper, + ILogger $logger) { $this->mapper = $mapper; + $this->logger = $logger; } public function handle(Event $event): void { - if (!($event instanceof MessageDeletedEvent)) { - // Unrelated - return; - } + if ($event instanceof MessageFlaggedEvent) { + $messages = $this->mapper->findByUids($event->getMailbox(), [$event->getUid()]); + $message = reset($messages); + + if ($message === false) { + $this->logger->warning("Flagged message is not cached"); + return; + } - $this->mapper->deleteByUid( - $event->getMailbox(), - $event->getMessageId() - ); + $message->setFlag($event->getFlag(), $event->isSet()); + + $this->mapper->update($message); + } elseif ($event instanceof MessageDeletedEvent) { + $this->mapper->deleteByUid( + $event->getMailbox(), + $event->getMessageId() + ); + } } } |