Skip to content

Commit b4a6830

Browse files
fixup! feat: jmap support - part 2
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
1 parent 977c8f2 commit b4a6830

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

‎lib/JMAP/JmapMessageAdapter.php‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use JmapClient\Responses\Mail\MailPart as MailPartResponse;
1515
use OCA\Mail\Address;
1616
use OCA\Mail\AddressList;
17+
use OCA\Mail\Db\LocalMessage;
1718
use OCA\Mail\Db\Message;
1819
use OCA\Mail\Db\Tag;
1920
use OCA\Mail\Model\IMAPMessage;
@@ -94,6 +95,7 @@ public function convertToModelMessage(MailParametersResponse $source, int $uid,
9495
/** @var list<IMAPAttachment> $inlineAttachments */
9596
$dispositionNotificationTo = $this->firstHeaderValue($source, 'Disposition-Notification-To') ?? '';
9697
$hasDkimSignature = $this->firstHeaderValue($source, 'DKIM-Signature') !== null;
98+
$hasAiGeneratedHeader = trim($this->firstHeaderValue($source, LocalMessage::HEADER_AI_GENERATED) ?? '') === '1';
9799
[$unsubscribeUrl, $unsubscribeMailto] = $this->extractUnsubscribeTargets($source);
98100
$isOneClickUnsubscribe = $unsubscribeUrl !== null
99101
&& str_contains(strtolower($this->firstHeaderValue($source, 'List-Unsubscribe-Post') ?? ''), 'one-click');
@@ -120,6 +122,7 @@ public function convertToModelMessage(MailParametersResponse $source, int $uid,
120122
$this->normalizeRawMessageIdList($source->references()),
121123
$dispositionNotificationTo,
122124
$hasDkimSignature,
125+
$hasAiGeneratedHeader,
123126
[],
124127
$unsubscribeUrl,
125128
$isOneClickUnsubscribe,

‎tests/Unit/JMAP/JmapMessageAdapterTest.php‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,27 @@ public function testFallsBackToSenderWhenFromMissing(): void {
180180
self::assertNotNull($from);
181181
self::assertSame('sender@example.com', $from->getEmail());
182182
}
183+
184+
public static function aiGeneratedHeaderProvider(): array {
185+
return [
186+
'absent' => [null, false],
187+
'set' => ['1', true],
188+
'set with whitespace' => [' 1 ', true],
189+
'other value' => ['0', false],
190+
];
191+
}
192+
193+
/**
194+
* @dataProvider aiGeneratedHeaderProvider
195+
*/
196+
public function testModelMessageAiGeneratedHeader(?string $headerValue, bool $expected): void {
197+
$source = $this->source();
198+
$source->method('header')->willReturnCallback(
199+
static fn (string $name): ?string => $name === 'X-AI-Generated' ? $headerValue : null,
200+
);
201+
202+
$message = $this->adapter->convertToModelMessage($source, 1, false);
203+
204+
self::assertSame($expected, $message->jsonSerialize()['hasAiGeneratedHeader']);
205+
}
183206
}

0 commit comments

Comments
 (0)