Skip to content

Commit 28fe577

Browse files
committed
fix: ensure drafts folder exists
Signed-off-by: Daniel Kesselberg <[email protected]>
1 parent 2cd4b6b commit 28fe577

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

lib/Db/LocalMessageMapper.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,11 @@ public function findDueDrafts(int $time): array {
164164
->where(
165165
$qb->expr()->isNull('send_at'),
166166
$qb->expr()->eq('type', $qb->createNamedParameter(LocalMessage::TYPE_DRAFT, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT),
167-
$qb->expr()->lte('updated_at', $qb->createNamedParameter($time - 300, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT),
167+
/*$qb->expr()->lte('updated_at', $qb->createNamedParameter($time - 300, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT),
168168
$qb->expr()->orX(
169169
$qb->expr()->isNull('failed'),
170170
$qb->expr()->eq('failed', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL), IQueryBuilder::PARAM_BOOL),
171-
)
171+
)*/
172172
)
173173
->orderBy('updated_at', 'asc')
174174
->orderBy('account_id', 'asc');

lib/IMAP/FolderMapper.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,10 @@ public function getFolders(Account $account, Horde_Imap_Client_Socket $client,
7373
}, $toPersist);
7474
}
7575

76-
public function createFolder(Horde_Imap_Client_Socket $client,
77-
string $name): Folder {
78-
$client->createMailbox($name);
76+
public function createFolder(Horde_Imap_Client_Socket $client, string $name, array $specialUse = []): Folder {
77+
$client->createMailbox($name, [
78+
'special_use' => $specialUse,
79+
]);
7980

8081
$list = $client->listMailboxes($name, Horde_Imap_Client::MBOX_ALL_SUBSCRIBED, [
8182
'delimiter' => true,

lib/Service/MailManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ public function getMailboxes(Account $account): array {
149149
* @throws ServiceException
150150
*/
151151
#[\Override]
152-
public function createMailbox(Account $account, string $name): Mailbox {
152+
public function createMailbox(Account $account, string $name, array $specialUse = []): Mailbox {
153153
$client = $this->imapClientFactory->getClient($account);
154154
try {
155-
$folder = $this->folderMapper->createFolder($client, $name);
155+
$folder = $this->folderMapper->createFolder($client, $name, $specialUse);
156156
$this->folderMapper->fetchFolderAcls([$folder], $client);
157157
} catch (Horde_Imap_Client_Exception $e) {
158158
throw new ServiceException(

lib/Service/MailTransmission.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Horde_Imap_Client_Data_Fetch;
1515
use Horde_Imap_Client_Fetch_Query;
1616
use Horde_Imap_Client_Ids;
17+
use Horde_Imap_Client_Socket;
1718
use Horde_Mail_Transport_Null;
1819
use Horde_Mail_Transport_Smtphorde;
1920
use Horde_Mime_Exception;
@@ -28,6 +29,7 @@
2829
use OCA\Mail\Account;
2930
use OCA\Mail\Address;
3031
use OCA\Mail\AddressList;
32+
use OCA\Mail\Contracts\IMailManager;
3133
use OCA\Mail\Contracts\IMailTransmission;
3234
use OCA\Mail\Db\LocalMessage;
3335
use OCA\Mail\Db\Mailbox;
@@ -67,6 +69,7 @@ public function __construct(
6769
private PerformanceLogger $performanceLogger,
6870
private AliasesService $aliasesService,
6971
private TransmissionService $transmissionService,
72+
private IMailManager $mailManager
7073
) {
7174
}
7275

@@ -231,6 +234,7 @@ public function saveLocalDraft(Account $account, LocalMessage $message): void {
231234
$transport = new Horde_Mail_Transport_Null();
232235
$mail->send($transport, false, false);
233236
$perfLogger->step('create IMAP draft message');
237+
$this->ensureDraftsMailbox($account);
234238
// save the message in the drafts folder
235239
$draftsMailboxId = $account->getMailAccount()->getDraftsMailboxId();
236240
if ($draftsMailboxId === null) {
@@ -258,6 +262,19 @@ public function saveLocalDraft(Account $account, LocalMessage $message): void {
258262
$perfLogger->end();
259263
}
260264

265+
private function ensureDraftsMailbox(Account $account): void {
266+
$mailAccount = $account->getMailAccount();
267+
if ($mailAccount->getDraftsMailboxId() !== null) {
268+
return;
269+
}
270+
271+
$this->mailManager->createMailbox(
272+
$account,
273+
'Drafts',
274+
[Horde_Imap_Client::SPECIALUSE_DRAFTS]
275+
);
276+
}
277+
261278
/**
262279
* @param NewMessageData $message
263280
* @param Message|null $previousDraft

0 commit comments

Comments
 (0)