From f9941fbf76d4d9542308d5bfeb60fd42c2e8b599 Mon Sep 17 00:00:00 2001 From: netandreus Date: Thu, 19 Mar 2020 15:25:12 +0300 Subject: [PATCH 1/2] Sync only subscribed folders, if set in config. Default - sync all folders as current behaviour. --- sync/config/default.ini | 3 +++ sync/src/Sync.php | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/sync/config/default.ini b/sync/config/default.ini index 4cb13eb..425ae43 100644 --- a/sync/config/default.ini +++ b/sync/config/default.ini @@ -13,6 +13,9 @@ db[sleep_minutes] = 1 sync[wait_seconds] = 10 sync[sleep_minutes] = 15 timezone = "America/New_York" +sync_only_subscribed_folders = false +mandatory_sync_folders[] = 'INBOX' +mandatory_sync_folders[] = 'Outbox' [log] diff --git a/sync/src/Sync.php b/sync/src/Sync.php index ae227cf..f166a65 100644 --- a/sync/src/Sync.php +++ b/sync/src/Sync.php @@ -574,7 +574,18 @@ private function syncFolders(AccountModel $account) $this->emitter, $this->interactive ); - $folderList = $this->mailbox->getFolders(); + $mandatorySyncFolders = $this->config['app']['mandatory_sync_folders']; + if (boolval($this->config['app']['sync_only_subscribed_folders'])) { + $folderList = new \AppendIterator(); + $folderList->append($this->mailbox->getFolders(null, true)); + if (count($mandatorySyncFolders) > 0) { + foreach ($mandatorySyncFolders as $folderName) { + $folderList->append($this->mailbox->getFolders($folderName)); + } + } + } else { + $folderList = $this->mailbox->getFolders(null); + } $savedFolders = (new FolderModel)->getByAccount($account->getId()); $folderSync->run($folderList, $savedFolders, $account); } catch (PDOException $e) { From 4a1c87a23b382767ecbd94d25c5d064749402c23 Mon Sep 17 00:00:00 2001 From: netandreus Date: Fri, 20 Mar 2020 15:29:40 +0300 Subject: [PATCH 2/2] Mandatory sync folder can not exists in IMAP server. --- sync/config/default.ini | 5 +++-- sync/src/Sync.php | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sync/config/default.ini b/sync/config/default.ini index 425ae43..ea01716 100644 --- a/sync/config/default.ini +++ b/sync/config/default.ini @@ -4,6 +4,8 @@ ; This contains the default configuration used through the application. ; To extend any of these settings, edit the local.ini file in the same ; directory as this file. +; mandatory_sync_folders: for multiple folders use comma +; to separate them like "INBOX,Outbox" ; ===================================================================== [app] @@ -14,8 +16,7 @@ sync[wait_seconds] = 10 sync[sleep_minutes] = 15 timezone = "America/New_York" sync_only_subscribed_folders = false -mandatory_sync_folders[] = 'INBOX' -mandatory_sync_folders[] = 'Outbox' +mandatory_sync_folders = 'INBOX' [log] diff --git a/sync/src/Sync.php b/sync/src/Sync.php index f166a65..e3d86b6 100644 --- a/sync/src/Sync.php +++ b/sync/src/Sync.php @@ -30,6 +30,7 @@ use App\Exceptions\MessagesSync as MessagesSyncException; use App\Traits\GarbageCollection as GarbageCollectionTrait; use App\Exceptions\MissingIMAPConfig as MissingIMAPConfigException; +use Zend\Mail\Storage\Exception\InvalidArgumentException; class Sync { @@ -574,13 +575,18 @@ private function syncFolders(AccountModel $account) $this->emitter, $this->interactive ); - $mandatorySyncFolders = $this->config['app']['mandatory_sync_folders']; + $mandatorySyncFolders = explode(",", $this->config['app']['mandatory_sync_folders']); if (boolval($this->config['app']['sync_only_subscribed_folders'])) { $folderList = new \AppendIterator(); $folderList->append($this->mailbox->getFolders(null, true)); if (count($mandatorySyncFolders) > 0) { foreach ($mandatorySyncFolders as $folderName) { - $folderList->append($this->mailbox->getFolders($folderName)); + try { + $folderList->append($this->mailbox->getFolders($folderName)); + } catch (InvalidArgumentException $e) { + $this->log->notice('Mandatory folder '.$folderName.' from config does not exists'. + ' in account '.$account->email); + } } } } else {