diff options
author | Anna Larch <anna@nextcloud.com> | 2021-05-06 23:36:20 +0300 |
---|---|---|
committer | Anna Larch <anna@nextcloud.com> | 2021-05-26 16:38:18 +0300 |
commit | 540ca4b1ef164f1a05e8c4f457ed8aca7ccebabd (patch) | |
tree | 20a536d98ca52f81010478c620208a2cbe5e6b90 /lib/BackgroundJob | |
parent | 4f5692a41c64d7878c9e6a167c72665cf70b8a33 (diff) |
Add bg job for label sync
Signed-off-by: Anna Larch <anna@nextcloud.com>
Diffstat (limited to 'lib/BackgroundJob')
-rw-r--r-- | lib/BackgroundJob/MigrateImportantJob.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/lib/BackgroundJob/MigrateImportantJob.php b/lib/BackgroundJob/MigrateImportantJob.php new file mode 100644 index 000000000..f04127435 --- /dev/null +++ b/lib/BackgroundJob/MigrateImportantJob.php @@ -0,0 +1,111 @@ +<?php +/** + * @copyright 2021 Anna Larch <anna.larch@nextcloud.com> + * + * @author Anna Larch <anna.larch@nextcloud.com> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Mail\BackgroundJob; + +use OCA\Mail\Account; +use OCA\Mail\Db\MailAccountMapper; +use OCA\Mail\Db\Mailbox; +use OCA\Mail\Db\MailboxMapper; + +use OCA\Mail\Exception\ServiceException; +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 { + + /** @var MailboxMapper */ + private $mailboxMapper; + + /** @var MailAccountMapper */ + private $mailAccountMapper; + + /** @var MailManager */ + private $mailManager; + + /** @var MigrateImportantFromImapAndDb */ + private $migration; + + /** @var LoggerInterface */ + private $logger; + + public function __construct(MailboxMapper $mailboxMapper, + MailAccountMapper $mailAccountMapper, + MailManager $mailManager, + MigrateImportantFromImapAndDb $migration, + LoggerInterface $logger, + ITimeFactory $timeFactory + ) { + parent::__construct($timeFactory); + $this->mailboxMapper = $mailboxMapper; + $this->mailAccountMapper = $mailAccountMapper; + $this->mailManager = $mailManager; + $this->migration = $migration; + $this->logger = $logger; + } + + /** + * @param array $argument + */ + public function run($argument) { + $mailboxId = (int)$argument['mailboxId']; + try { + /** @var Mailbox $mailbox*/ + $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); + if ($this->mailManager->isPermflagsEnabled($account, $mailbox->getName()) === false) { + $this->logger->debug('Permflags not enabled for <' . $accountId . '>'); + return; + } + + try { + $this->migration->migrateImportantOnImap($account, $mailbox); + } catch (ServiceException $e) { + $this->logger->debug('Could not flag messages on IMAP for mailbox <' . $mailboxId . '>.'); + } + + try { + $this->migration->migrateImportantFromDb($account, $mailbox); + } catch (ServiceException $e) { + $this->logger->debug('Could not flag messages from DB on IMAP for mailbox <' . $mailboxId . '>.'); + } + } +} |