mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-07 15:27:43 +08:00
Improved MailClient::FolderDelete and MailClient::MessageSetFlag
This commit is contained in:
parent
69ac75959c
commit
81bcc99426
2 changed files with 39 additions and 111 deletions
|
@ -12,6 +12,7 @@
|
|||
namespace MailSo\Mail;
|
||||
|
||||
use MailSo\Imap\Enumerations\FolderResponseStatus;
|
||||
use MailSo\Imap\Enumerations\MessageFlag;
|
||||
use MailSo\Imap\Enumerations\StoreAction;
|
||||
use MailSo\Imap\SequenceSet;
|
||||
|
||||
|
@ -116,41 +117,6 @@ class MailClient
|
|||
// return \MailSo\Imap\Enumerations\FetchType::ENVELOPE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
* @throws \MailSo\Mail\Exceptions\Exception
|
||||
*/
|
||||
public function MessageSetFlagToAll(string $sFolderName, string $sMessageFlag, bool $bSetAction = true, bool $bSkipUnsupportedFlag = false, ?array $aCustomUids = null) : void
|
||||
{
|
||||
$oFolderInfo = $this->oImapClient->FolderSelect($sFolderName);
|
||||
if (!$oFolderInfo->IsFlagSupported($sMessageFlag))
|
||||
{
|
||||
if (!$bSkipUnsupportedFlag)
|
||||
{
|
||||
throw new Exceptions\RuntimeException('Message flag "'.$sMessageFlag.'" is not supported.');
|
||||
}
|
||||
}
|
||||
|
||||
if ($oFolderInfo && 0 < $oFolderInfo->MESSAGES)
|
||||
{
|
||||
$oRange = null;
|
||||
if (\is_array($aCustomUids)) {
|
||||
if (\count($aCustomUids)) {
|
||||
$oRange = new SequenceSet($aCustomUids);
|
||||
}
|
||||
} else {
|
||||
$oRange = new SequenceSet('1:*', false);
|
||||
}
|
||||
|
||||
if ($oRange) {
|
||||
$sStoreAction = $bSetAction ? StoreAction::ADD_FLAGS_SILENT : StoreAction::REMOVE_FLAGS_SILENT;
|
||||
$this->oImapClient->MessageStoreFlag($oRange, array($sMessageFlag), $sStoreAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
|
@ -159,51 +125,15 @@ class MailClient
|
|||
*/
|
||||
public function MessageSetFlag(string $sFolderName, SequenceSet $oRange, string $sMessageFlag, bool $bSetAction = true, bool $bSkipUnsupportedFlag = false) : void
|
||||
{
|
||||
$oFolderInfo = $this->oImapClient->FolderSelect($sFolderName);
|
||||
if (!$oFolderInfo->IsFlagSupported($sMessageFlag))
|
||||
{
|
||||
if (!$bSkipUnsupportedFlag)
|
||||
{
|
||||
if (\count($oRange)) {
|
||||
$oFolderInfo = $this->oImapClient->FolderSelect($sFolderName);
|
||||
if ($oFolderInfo->IsFlagSupported($sMessageFlag)) {
|
||||
$sStoreAction = $bSetAction ? StoreAction::ADD_FLAGS_SILENT : StoreAction::REMOVE_FLAGS_SILENT;
|
||||
$this->oImapClient->MessageStoreFlag($oRange, array($sMessageFlag), $sStoreAction);
|
||||
} else if (!$bSkipUnsupportedFlag) {
|
||||
throw new Exceptions\RuntimeException('Message flag "'.$sMessageFlag.'" is not supported.');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$sStoreAction = $bSetAction ? StoreAction::ADD_FLAGS_SILENT : StoreAction::REMOVE_FLAGS_SILENT;
|
||||
$this->oImapClient->MessageStoreFlag($oRange, array($sMessageFlag), $sStoreAction);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
*/
|
||||
public function MessageSetFlagged(string $sFolderName, SequenceSet $oRange, bool $bSetAction = true, bool $bSkipUnsupportedFlag = false) : void
|
||||
{
|
||||
$this->MessageSetFlag($sFolderName, $oRange,
|
||||
\MailSo\Imap\Enumerations\MessageFlag::FLAGGED, $bSetAction, $bSkipUnsupportedFlag);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
*/
|
||||
public function MessageSetSeenToAll(string $sFolderName, bool $bSetAction = true, array $aCustomUids = null) : void
|
||||
{
|
||||
$this->MessageSetFlagToAll($sFolderName, \MailSo\Imap\Enumerations\MessageFlag::SEEN, $bSetAction, true, $aCustomUids);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
*/
|
||||
public function MessageSetSeen(string $sFolderName, SequenceSet $oRange, bool $bSetAction = true) : void
|
||||
{
|
||||
$this->MessageSetFlag($sFolderName, $oRange,
|
||||
\MailSo\Imap\Enumerations\MessageFlag::SEEN, $bSetAction, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -382,7 +312,7 @@ class MailClient
|
|||
$this->oImapClient->FolderSelect($sFolder);
|
||||
|
||||
$this->oImapClient->MessageStoreFlag($oRange,
|
||||
array(\MailSo\Imap\Enumerations\MessageFlag::DELETED),
|
||||
array(MessageFlag::DELETED),
|
||||
StoreAction::ADD_FLAGS_SILENT
|
||||
);
|
||||
|
||||
|
@ -571,7 +501,7 @@ class MailClient
|
|||
$aFlags = \array_map('strtolower', $oFetchResponse->GetFetchValue(
|
||||
\MailSo\Imap\Enumerations\FetchType::FLAGS));
|
||||
|
||||
if (!\in_array(\strtolower(\MailSo\Imap\Enumerations\MessageFlag::SEEN), $aFlags))
|
||||
if (!\in_array(\strtolower(MessageFlag::SEEN), $aFlags))
|
||||
{
|
||||
$iUid = (int) $oFetchResponse->GetFetchValue(\MailSo\Imap\Enumerations\FetchType::UID);
|
||||
$sHeaders = $oFetchResponse->GetHeaderFieldsValue();
|
||||
|
@ -1344,26 +1274,24 @@ class MailClient
|
|||
*/
|
||||
public function FolderDelete(string $sFolderFullName, bool $bUnsubscribeOnDeletion = true) : self
|
||||
{
|
||||
if (!\strlen($sFolderFullName) || 'INBOX' === $sFolderFullName)
|
||||
{
|
||||
if (!\strlen($sFolderFullName) || 'INBOX' === $sFolderFullName) {
|
||||
throw new \MailSo\Base\Exceptions\InvalidArgumentException;
|
||||
}
|
||||
|
||||
$this->oImapClient->FolderExamine($sFolderFullName);
|
||||
|
||||
$aIndexOrUids = $this->oImapClient->MessageSimpleSearch('ALL');
|
||||
if (\count($aIndexOrUids))
|
||||
{
|
||||
if ($this->IsSupported('IMAP4rev2')) {
|
||||
$oInfo = $this->oImapClient->FolderExamine($sFolderFullName);
|
||||
} else {
|
||||
$oInfo = $this->oImapClient->FolderStatus($sFolderFullName);
|
||||
}
|
||||
if ($oInfo->MESSAGES) {
|
||||
throw new Exceptions\NonEmptyFolder;
|
||||
}
|
||||
|
||||
$this->oImapClient->FolderExamine('INBOX');
|
||||
|
||||
if ($bUnsubscribeOnDeletion)
|
||||
{
|
||||
if ($bUnsubscribeOnDeletion) {
|
||||
$this->oImapClient->FolderUnsubscribe($sFolderFullName);
|
||||
}
|
||||
|
||||
$this->oImapClient->FolderUnselect();
|
||||
$this->oImapClient->FolderDelete($sFolderFullName);
|
||||
|
||||
return $this;
|
||||
|
@ -1378,7 +1306,7 @@ class MailClient
|
|||
if (0 < $oFolderInformation->MESSAGES)
|
||||
{
|
||||
$this->oImapClient->MessageStoreFlag(new SequenceSet('1:*', false),
|
||||
array(\MailSo\Imap\Enumerations\MessageFlag::DELETED),
|
||||
array(MessageFlag::DELETED),
|
||||
StoreAction::ADD_FLAGS_SILENT
|
||||
);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ use RainLoop\Exceptions\ClientException;
|
|||
use RainLoop\Model\Account;
|
||||
use RainLoop\Notifications;
|
||||
use MailSo\Imap\SequenceSet;
|
||||
use MailSo\Imap\Enumerations\MessageFlag;
|
||||
|
||||
trait Messages
|
||||
{
|
||||
|
@ -114,9 +115,8 @@ trait Messages
|
|||
|
||||
$iNewUid = 0;
|
||||
$this->MailClient()->MessageAppendStream(
|
||||
$rMessageStream, $iMessageStreamSize, $sDraftFolder, array(
|
||||
\MailSo\Imap\Enumerations\MessageFlag::SEEN
|
||||
), $iNewUid);
|
||||
$rMessageStream, $iMessageStreamSize, $sDraftFolder, array(MessageFlag::SEEN), $iNewUid
|
||||
);
|
||||
|
||||
if (!empty($sMessageId) && (null === $iNewUid || 0 === $iNewUid))
|
||||
{
|
||||
|
@ -186,7 +186,7 @@ trait Messages
|
|||
case 'reply':
|
||||
case 'reply-all':
|
||||
$this->MailClient()->MessageSetFlag($sDraftInfoFolder, new SequenceSet($iDraftInfoUid),
|
||||
\MailSo\Imap\Enumerations\MessageFlag::ANSWERED);
|
||||
MessageFlag::ANSWERED);
|
||||
break;
|
||||
case 'forward':
|
||||
$sForwardedFlag = $this->Config()->Get('labs', 'imap_forwarded_flag', '');
|
||||
|
@ -219,9 +219,7 @@ trait Messages
|
|||
array($oAccount, &$rMessageStream, &$iMessageStreamSize));
|
||||
|
||||
$this->MailClient()->MessageAppendStream(
|
||||
$rMessageStream, $iMessageStreamSize, $sSentFolder, array(
|
||||
\MailSo\Imap\Enumerations\MessageFlag::SEEN
|
||||
)
|
||||
$rMessageStream, $iMessageStreamSize, $sSentFolder, array(MessageFlag::SEEN)
|
||||
);
|
||||
}
|
||||
else
|
||||
|
@ -235,9 +233,8 @@ trait Messages
|
|||
array($oAccount, &$rAppendMessageStream, &$iAppendMessageStreamSize));
|
||||
|
||||
$this->MailClient()->MessageAppendStream(
|
||||
$rAppendMessageStream, $iAppendMessageStreamSize, $sSentFolder, array(
|
||||
\MailSo\Imap\Enumerations\MessageFlag::SEEN
|
||||
));
|
||||
$rAppendMessageStream, $iAppendMessageStreamSize, $sSentFolder, array(MessageFlag::SEEN)
|
||||
);
|
||||
|
||||
if (\is_resource($rAppendMessageStream))
|
||||
{
|
||||
|
@ -391,21 +388,23 @@ trait Messages
|
|||
|
||||
public function DoMessageSetSeen() : array
|
||||
{
|
||||
return $this->messageSetFlag('MessageSetSeen', __FUNCTION__);
|
||||
return $this->messageSetFlag(MessageFlag::SEEN, __FUNCTION__);
|
||||
}
|
||||
|
||||
public function DoMessageSetSeenToAll() : array
|
||||
{
|
||||
$this->initMailClientConnection();
|
||||
|
||||
$sFolder = $this->GetActionParam('Folder', '');
|
||||
$bSetAction = '1' === (string) $this->GetActionParam('SetAction', '0');
|
||||
$sThreadUids = \trim($this->GetActionParam('ThreadUids', ''));
|
||||
|
||||
try
|
||||
{
|
||||
$this->MailClient()->MessageSetSeenToAll($sFolder, $bSetAction,
|
||||
!empty($sThreadUids) ? explode(',', $sThreadUids) : null);
|
||||
$this->MessageSetFlag(
|
||||
$this->GetActionParam('Folder', ''),
|
||||
empty($sThreadUids) ? new SequenceSet('1:*', false) : new SequenceSet(\explode(',', $sThreadUids)),
|
||||
MessageFlag::SEEN,
|
||||
!empty($this->GetActionParam('SetAction', '0'))
|
||||
);
|
||||
}
|
||||
catch (\Throwable $oException)
|
||||
{
|
||||
|
@ -417,7 +416,7 @@ trait Messages
|
|||
|
||||
public function DoMessageSetFlagged() : array
|
||||
{
|
||||
return $this->messageSetFlag('MessageSetFlagged', __FUNCTION__);
|
||||
return $this->messageSetFlag(MessageFlag::FLAGGED, __FUNCTION__, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -530,7 +529,7 @@ trait Messages
|
|||
{
|
||||
try
|
||||
{
|
||||
$this->MailClient()->MessageSetSeen($sFromFolder, $oUids);
|
||||
$this->MailClient()->MessageSetFlag($sFromFolder, $oUids, MessageFlag::SEEN);
|
||||
}
|
||||
catch (\Throwable $oException)
|
||||
{
|
||||
|
@ -799,17 +798,18 @@ trait Messages
|
|||
}
|
||||
}
|
||||
|
||||
private function messageSetFlag(string $sActionFunction, string $sResponseFunction) : array
|
||||
private function messageSetFlag(string $sMessageFlag, string $sResponseFunction, bool $bSkipUnsupportedFlag = false) : array
|
||||
{
|
||||
$this->initMailClientConnection();
|
||||
|
||||
try
|
||||
{
|
||||
$this->MailClient()->{$sActionFunction}(
|
||||
$this->MailClient()->MessageSetFlag(
|
||||
$this->GetActionParam('Folder', ''),
|
||||
new SequenceSet(\explode(',', (string) $this->GetActionParam('Uids', ''))),
|
||||
$sMessageFlag,
|
||||
!empty($this->GetActionParam('SetAction', '0')),
|
||||
true
|
||||
$bSkipUnsupportedFlag
|
||||
);
|
||||
}
|
||||
catch (\Throwable $oException)
|
||||
|
|
Loading…
Reference in a new issue