98 lines
2.8 KiB
PHP
98 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2021 F7cloud GmbH and F7cloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Mail\BackgroundJob;
|
|
|
|
use OCA\Mail\Account;
|
|
use OCA\Mail\Db\MailAccountMapper;
|
|
use OCA\Mail\Db\MailboxMapper;
|
|
|
|
use OCA\Mail\Exception\ServiceException;
|
|
use OCA\Mail\IMAP\IMAPClientFactory;
|
|
use OCA\Mail\Migration\MigrateImportantFromImapAndDb;
|
|
use OCA\Mail\Service\MailManager;
|
|
use OCP\AppFramework\Db\DoesNotExistException;
|
|
use OCP\AppFramework\Utility\ITimeFactory;
|
|
use OCP\BackgroundJob\QueuedJob;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
class MigrateImportantJob extends QueuedJob {
|
|
private MailboxMapper $mailboxMapper;
|
|
private MailAccountMapper $mailAccountMapper;
|
|
private MailManager $mailManager;
|
|
private MigrateImportantFromImapAndDb $migration;
|
|
private LoggerInterface $logger;
|
|
private IMAPClientFactory $imapClientFactory;
|
|
|
|
public function __construct(MailboxMapper $mailboxMapper,
|
|
MailAccountMapper $mailAccountMapper,
|
|
MailManager $mailManager,
|
|
MigrateImportantFromImapAndDb $migration,
|
|
LoggerInterface $logger,
|
|
ITimeFactory $timeFactory,
|
|
IMAPClientFactory $imapClientFactory,
|
|
) {
|
|
parent::__construct($timeFactory);
|
|
$this->mailboxMapper = $mailboxMapper;
|
|
$this->mailAccountMapper = $mailAccountMapper;
|
|
$this->mailManager = $mailManager;
|
|
$this->migration = $migration;
|
|
$this->logger = $logger;
|
|
$this->imapClientFactory = $imapClientFactory;
|
|
}
|
|
|
|
/**
|
|
* @param array $argument
|
|
*
|
|
* @return void
|
|
*/
|
|
#[\Override]
|
|
public function run($argument) {
|
|
$mailboxId = (int)$argument['mailboxId'];
|
|
try {
|
|
$mailbox = $this->mailboxMapper->findById($mailboxId);
|
|
} catch (DoesNotExistException $e) {
|
|
$this->logger->debug('Could not find mailbox <' . $mailboxId . '>');
|
|
return;
|
|
}
|
|
|
|
$accountId = $mailbox->getAccountId();
|
|
try {
|
|
$mailAccount = $this->mailAccountMapper->findById($accountId);
|
|
} catch (DoesNotExistException $e) {
|
|
$this->logger->debug('Could not find account <' . $accountId . '>');
|
|
return;
|
|
}
|
|
|
|
$account = new Account($mailAccount);
|
|
$client = $this->imapClientFactory->getClient($account);
|
|
|
|
try {
|
|
if ($this->mailManager->isPermflagsEnabled($client, $account, $mailbox->getName()) === false) {
|
|
$this->logger->debug('Permflags not enabled for <' . $accountId . '>');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$this->migration->migrateImportantOnImap($client, $account, $mailbox);
|
|
} catch (ServiceException $e) {
|
|
$this->logger->debug('Could not flag messages on IMAP for mailbox <' . $mailboxId . '>.');
|
|
}
|
|
|
|
try {
|
|
$this->migration->migrateImportantFromDb($client, $account, $mailbox);
|
|
} catch (ServiceException $e) {
|
|
$this->logger->debug('Could not flag messages from DB on IMAP for mailbox <' . $mailboxId . '>.');
|
|
}
|
|
} finally {
|
|
$client->logout();
|
|
}
|
|
}
|
|
}
|