* * Mail * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * 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, version 3, * along with this program. If not, see * */ namespace OCA\Mail\Contracts; use Horde_Imap_Client_Socket; use OCA\Mail\Account; use OCA\Mail\Db\Mailbox; use OCA\Mail\Db\Message; use OCA\Mail\Db\Tag; use OCA\Mail\Exception\ClientException; use OCA\Mail\Exception\ServiceException; use OCA\Mail\Model\IMAPMessage; use OCA\Mail\Service\Quota; use OCP\AppFramework\Db\DoesNotExistException; interface IMailManager { /** * @param string $uid * @param int $id * * @return Mailbox * * @throws DoesNotExistException */ public function getMailbox(string $uid, int $id): Mailbox; /** * @param Account $account * * @return Mailbox[] * * @throws ServiceException */ public function getMailboxes(Account $account): array; /** * @param Account $account * @param string $name * * @return Mailbox * * @throws ServiceException */ public function createMailbox(Account $account, string $name): Mailbox; /** * @param Mailbox $mailbox * @param $uid * * @return int|null */ public function getMessageIdForUid(Mailbox $mailbox, $uid): ?int; /** * @param string $uid * @param int $id * * @return Message * * @throws DoesNotExistException */ public function getMessage(string $uid, int $id): Message; /** * @param Account $account * @param string $mailbox * @param int $uid * * @return string * @throws ClientException * @throws ServiceException */ public function getSource(Account $account, string $mailbox, int $uid): ?string; /** * @param Account $account * @param Mailbox $mailbox * @param int $uid * @param bool $loadBody * * @return IMAPMessage * * @throws ServiceException */ public function getImapMessage(Account $account, Mailbox $mailbox, int $uid, bool $loadBody = false): IMAPMessage; /** * @param Account $account * @param string $threadRootId thread root id * * @return Message[] */ public function getThread(Account $account, string $threadRootId): array; /** * @param Account $sourceAccount * @param string $sourceFolderId * @param int $uid * @param Account $destinationAccount * @param string $destFolderId * * @throws ServiceException */ public function moveMessage(Account $sourceAccount, string $sourceFolderId, int $uid, Account $destinationAccount, string $destFolderId); /** * @param Account $account * @param string $mailboxId * @param int $messageId * * @throws ClientException * @throws ServiceException */ public function deleteMessage(Account $account, string $mailboxId, int $messageId): void; /** * Mark all messages of a folder as read * * @param Account $account * @param Mailbox $mailbox */ public function markFolderAsRead(Account $account, Mailbox $mailbox): void; /** * @param Account $account * @param string $mailbox * @param int $uid * @param string $flag * @param bool $value * * @throws ClientException * @throws ServiceException */ public function flagMessage(Account $account, string $mailbox, int $uid, string $flag, bool $value): void; /** * @param Account $account * @param string $mailbox * @param Message $message * @param Tag $tag * @param bool $value * * @throws ClientException * @throws ServiceException */ public function tagMessage(Account $account, string $mailbox, Message $message, Tag $tag, bool $value): void; /** * @param Account $account * * @return Quota|null */ public function getQuota(Account $account): ?Quota; /** * Rename a mailbox and get the new (cached) version * * @param Account $account * @param Mailbox $mailbox * @param string $name * * @return Mailbox * * @throw ServiceException */ public function renameMailbox(Account $account, Mailbox $mailbox, string $name): Mailbox; /** * @param Account $account * @param Mailbox $mailbox * * @throws ServiceException */ public function deleteMailbox(Account $account, Mailbox $mailbox): void; /** * @param Account $account * @param Mailbox $mailbox * @param bool $subscribed * * @return Mailbox * @throws ClientException * @throws ServiceException */ public function updateSubscription(Account $account, Mailbox $mailbox, bool $subscribed): Mailbox; /** * @param Mailbox $mailbox * @param bool $syncInBackground * * @return Mailbox * @throws ClientException * @throws ServiceException */ public function enableMailboxBackgroundSync(Mailbox $mailbox, bool $syncInBackground): Mailbox; /** * @param Account $account * @param Mailbox $mailbox * @param Message $message * @return array */ public function getMailAttachments(Account $account, Mailbox $mailbox, Message $message) : array; /** * @param string $imapLabel * @param string $userId * @return Tag * @throws ClientException */ public function getTagByImapLabel(string $imapLabel, string $userId): Tag; /** * Check IMAP server for support for PERMANENTFLAGS * * @param Account $account * @param string $mailbox * @return boolean */ public function isPermflagsEnabled(Horde_Imap_Client_Socket $client, Account $account, string $mailbox): bool; /** * Create a mail tag * * @param string $userId * @param string $displayName * @param string $color * @return Tag * @throws ClientException if display name does not work as imap label */ public function createTag(string $displayName, string $color, string $userId): Tag; /** * Update a mail tag * * @param string $userId * @param int $id * @param string $displayName * @param string $color * @return Tag * @throws ClientException if the given tag does not exist */ public function updateTag(int $id, string $displayName, string $color, string $userId): Tag; /** * @param Account $srcAccount * @param Mailbox $srcMailbox * @param Account $dstAccount * @param Mailbox $dstMailbox * @param string $threadRootId * @return void * @throws ServiceException */ public function moveThread(Account $srcAccount, Mailbox $srcMailbox, Account $dstAccount, Mailbox $dstMailbox, string $threadRootId): void; /** * @param Account $account * @param Mailbox $mailbox * @param string $threadRootId * @return void * @throws ClientException * @throws ServiceException */ public function deleteThread(Account $account, Mailbox $mailbox, string $threadRootId): void; /** * @param Account $account * @param string $messageId * @return Message[] */ public function getByMessageId(Account $account, string $messageId): array; }