From de266d2485fc26812a1c0c4a3ed31bdedaee5abd Mon Sep 17 00:00:00 2001 From: Jana Peper Date: Thu, 14 May 2026 14:47:47 +0200 Subject: [PATCH 1/2] feat: make some events webhook compatible Signed-off-by: Jana Peper --- lib/Events/MessageDeletedEvent.php | 11 ++++++++++- lib/Events/MessageFlaggedEvent.php | 13 ++++++++++++- lib/Events/MessageSentEvent.php | 9 ++++++++- lib/Events/NewMessageReceivedEvent.php | 12 +++++++++++- lib/Listener/NewMessagesNotifier.php | 2 +- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/Events/MessageDeletedEvent.php b/lib/Events/MessageDeletedEvent.php index 311966d9b8..4fe967a552 100644 --- a/lib/Events/MessageDeletedEvent.php +++ b/lib/Events/MessageDeletedEvent.php @@ -12,8 +12,9 @@ use OCA\Mail\Account; use OCA\Mail\Db\Mailbox; use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IWebhookCompatibleEvent; -class MessageDeletedEvent extends Event { +class MessageDeletedEvent extends Event implements IWebhookCompatibleEvent { /** @var Account */ private $account; @@ -43,4 +44,12 @@ public function getMailbox(): Mailbox { public function getMessageId(): int { return $this->messageId; } + + public function getWebhookSerializable(): array { + return [ + 'accountId' => $this->account->getId(), + 'mailboxId' => $this->mailbox->getId(), + 'messageId' => $this->messageId, + ]; + } } diff --git a/lib/Events/MessageFlaggedEvent.php b/lib/Events/MessageFlaggedEvent.php index 3fbafddd1f..66ad8f749e 100644 --- a/lib/Events/MessageFlaggedEvent.php +++ b/lib/Events/MessageFlaggedEvent.php @@ -12,8 +12,9 @@ use OCA\Mail\Account; use OCA\Mail\Db\Mailbox; use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IWebhookCompatibleEvent; -class MessageFlaggedEvent extends Event { +class MessageFlaggedEvent extends Event implements IWebhookCompatibleEvent { /** @var Account */ private $account; @@ -61,4 +62,14 @@ public function getFlag(): string { public function isSet(): bool { return $this->set; } + + public function getWebhookSerializable(): array { + return [ + 'accountId' => $this->account->getId(), + 'mailboxId' => $this->mailbox->getId(), + 'messageId' => $this->uid, + 'flag' => $this->flag, + 'set' => $this->set, + ]; + } } diff --git a/lib/Events/MessageSentEvent.php b/lib/Events/MessageSentEvent.php index b51ff7cfc8..c7044493d8 100644 --- a/lib/Events/MessageSentEvent.php +++ b/lib/Events/MessageSentEvent.php @@ -12,11 +12,12 @@ use OCA\Mail\Account; use OCA\Mail\Db\LocalMessage; use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IWebhookCompatibleEvent; /** * @psalm-immutable */ -class MessageSentEvent extends Event { +class MessageSentEvent extends Event implements IWebhookCompatibleEvent { /** @var Account */ private $account; @@ -35,4 +36,10 @@ public function getAccount(): Account { public function getLocalMessage(): LocalMessage { return $this->localMessage; } + + public function getWebhookSerializable(): array { + return [ + 'message' => $this->localMessage, + ]; + } } diff --git a/lib/Events/NewMessageReceivedEvent.php b/lib/Events/NewMessageReceivedEvent.php index 1d63326f1c..e00ab039b0 100644 --- a/lib/Events/NewMessageReceivedEvent.php +++ b/lib/Events/NewMessageReceivedEvent.php @@ -8,11 +8,14 @@ namespace OCA\Mail\Events; +use OCA\Mail\Db\Message; use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IWebhookCompatibleEvent; -class NewMessageReceivedEvent extends Event { +class NewMessageReceivedEvent extends Event implements IWebhookCompatibleEvent { public function __construct( private string $uri, + private Message $message, ) { parent::__construct(); } @@ -20,4 +23,11 @@ public function __construct( public function getUri(): string { return $this->uri; } + + public function getWebhookSerializable(): array { + return [ + 'messageUri' => $this->uri, + 'message' => $this->message, + ]; + } } diff --git a/lib/Listener/NewMessagesNotifier.php b/lib/Listener/NewMessagesNotifier.php index 0ae4cb8e0e..8a5ea67d9c 100644 --- a/lib/Listener/NewMessagesNotifier.php +++ b/lib/Listener/NewMessagesNotifier.php @@ -36,7 +36,7 @@ public function handle(Event $event): void { foreach ($event->getMessages() as $message) { $uri = $this->urlGenerator->linkToOCSRouteAbsolute('mail.messageApi.get', ['id' => $message->getId()]); - $this->eventDispatcher->dispatchTyped(new NewMessageReceivedEvent($uri)); + $this->eventDispatcher->dispatchTyped(new NewMessageReceivedEvent($uri, $message)); } } } From d9199cc09da35f00632536fe33960d95073191b7 Mon Sep 17 00:00:00 2001 From: Jana Peper Date: Thu, 14 May 2026 15:02:13 +0200 Subject: [PATCH 2/2] fix: tests Signed-off-by: Jana Peper --- tests/Unit/Events/NewMessageReceivedEventTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/Unit/Events/NewMessageReceivedEventTest.php b/tests/Unit/Events/NewMessageReceivedEventTest.php index 2d1a1b49da..822b30a5ca 100644 --- a/tests/Unit/Events/NewMessageReceivedEventTest.php +++ b/tests/Unit/Events/NewMessageReceivedEventTest.php @@ -10,13 +10,15 @@ namespace OCA\Mail\Tests\Unit\Events; use ChristophWurst\Nextcloud\Testing\TestCase; +use OCA\Mail\Db\Message; use OCA\Mail\Events\NewMessageReceivedEvent; class NewMessageReceivedEventTest extends TestCase { public function testConstructorAndGetter(): void { $uri = 'imap://user@example.com/INBOX;UID=123'; + $message = new Message(); - $event = new NewMessageReceivedEvent($uri); + $event = new NewMessageReceivedEvent($uri, $message); $this->assertSame($uri, $event->getUri()); }