Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 53 additions & 28 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,36 @@
*/
return [
'routes' => [
[
'name' => 'page#index',
'url' => '/',
'verb' => 'GET'
],
[
'name' => 'page#setup',
'url' => '/setup',
'verb' => 'GET'
],
[
'name' => 'page#keyboardShortcuts',
'url' => '/keyboard-shortcuts',
'verb' => 'GET'
],
[
'name' => 'page#accountSettings',
'url' => '/accounts/{id}/settings',
'verb' => 'GET'
],
[
'name' => 'page#mailbox',
'url' => '/box/{id}',
'verb' => 'GET'
],
[
'name' => 'page#thread',
'url' => '/box/{mailboxId}/thread/{id}',
'verb' => 'GET'
],
[
'name' => 'page#index',
'url' => '/',
Expand All @@ -36,92 +66,87 @@
],
[
'name' => 'accounts#send',
'url' => '/api/accounts/{accountId}/send',
'url' => '/api/accounts/{id}/send',
'verb' => 'POST'
],
[
'name' => 'accounts#draft',
'url' => '/api/accounts/{accountId}/draft',
'url' => '/api/accounts/{id}/draft',
'verb' => 'POST'
],
[
'name' => 'accounts#patchAccount',
'url' => '/api/accounts/{accountId}',
'url' => '/api/accounts/{id}',
'verb' => 'PATCH'
],
[
'name' => 'accounts#updateSignature',
'url' => '/api/accounts/{accountId}/signature',
'url' => '/api/accounts/{id}/signature',
'verb' => 'PUT'
],
[
'name' => 'accounts#getQuota',
'url' => '/api/accounts/{accountId}/quota',
'url' => '/api/accounts/{id}/quota',
'verb' => 'GET'
],
[
'name' => 'folders#sync',
'url' => '/api/accounts/{accountId}/folders/{folderId}/sync',
'name' => 'mailboxes#sync',
'url' => '/api/mailboxes/{id}/sync',
'verb' => 'POST'
],
[
'name' => 'folders#clearCache',
'url' => '/api/accounts/{accountId}/folders/{folderId}/sync',
'name' => 'mailboxes#clearCache',
'url' => '/api/mailboxes/{id}/sync',
'verb' => 'DELETE'
],
[
'name' => 'folders#markAllAsRead',
'url' => '/api/accounts/{accountId}/folders/{folderId}/read',
'name' => 'mailboxes#markAllAsRead',
'url' => '/api/mailboxes/{id}/read',
'verb' => 'POST'
],
[
'name' => 'folders#stats',
'url' => '/api/accounts/{accountId}/folders/{folderId}/stats',
'name' => 'mailboxes#stats',
'url' => '/api/mailboxes/{id}/stats',
'verb' => 'GET'
],
[
'name' => 'folders#delete',
'url' => '/api/accounts/{accountId}/folders/{folderId}',
'verb' => 'DELETE'
],
[
'name' => 'messages#downloadAttachment',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/attachment/{attachmentId}',
'url' => '/api/messages/{id}/attachment/{attachmentId}',
'verb' => 'GET'
],
[
'name' => 'messages#saveAttachment',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/attachment/{attachmentId}',
'url' => '/api/messages/{id}/attachment/{attachmentId}',
'verb' => 'POST'
],
[
'name' => 'messages#getBody',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/body',
'url' => '/api/messages/{id}/body',
'verb' => 'GET'
],
[
'name' => 'messages#getSource',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/source',
'url' => '/api/messages/{id}/source',
'verb' => 'GET'
],
[
'name' => 'messages#getHtmlBody',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/html',
'url' => '/api/messages/{id}/html',
'verb' => 'GET'
],
[
'name' => 'messages#getThread',
'url' => '/api/accounts/{accountId}/message/{id}/thread',
'url' => '/api/messages/{id}/thread',
'verb' => 'GET'
],
[
'name' => 'messages#setFlags',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/flags',
'url' => '/api/messages/{id}/flags',
'verb' => 'PUT'
],
[
'name' => 'messages#move',
'url' => '/api/accounts/{accountId}/folders/{folderId}/messages/{id}/move',
'url' => '/api/messages/{id}/move',
'verb' => 'POST'
],
[
Expand Down Expand Up @@ -159,9 +184,9 @@
'accounts' => ['url' => '/api/accounts'],
'aliases' => ['url' => '/api/accounts/{accountId}/aliases'],
'autoComplete' => ['url' => '/api/autoComplete'],
'folders' => ['url' => '/api/accounts/{accountId}/folders'],
'localAttachments' => ['url' => '/api/attachments'],
'messages' => ['url' => '/api/accounts/{accountId}/folders/{folderId}/messages'],
'mailboxes' => ['url' => '/api/mailboxes'],
'messages' => ['url' => '/api/messages'],
'preferences' => ['url' => '/api/preferences'],
]
];
14 changes: 7 additions & 7 deletions lib/Attachment.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ class Attachment {
/**
* @param \Horde_Imap_Client_Socket $conn
* @param \Horde_Imap_Client_Mailbox $mailBox
* @param int $messageId
* @param int $messageUid
* @param string $attachmentId
*/
public function __construct($conn, $mailBox, $messageId, $attachmentId) {
public function __construct($conn, $mailBox, $messageUid, $attachmentId) {
$this->conn = $conn;
$this->mailBox = $mailBox;
$this->messageId = $messageId;
$this->messageUid = $messageUid;
$this->attachmentId = $attachmentId;

$this->load();
Expand All @@ -53,7 +53,7 @@ public function __construct($conn, $mailBox, $messageId, $attachmentId) {
* @var \Horde_Imap_Client_Mailbox
*/
private $mailBox;
private $messageId;
private $messageUid;
private $attachmentId;

/**
Expand All @@ -67,13 +67,13 @@ private function load(): void {
$fetch_query->mimeHeader($this->attachmentId);

// $list is an array of Horde_Imap_Client_Data_Fetch objects.
$ids = new \Horde_Imap_Client_Ids($this->messageId);
$ids = new \Horde_Imap_Client_Ids($this->messageUid);
$headers = $this->conn->fetch($this->mailBox, $fetch_query, ['ids' => $ids]);
/** @var $fetch Horde_Imap_Client_Data_Fetch */
if (!isset($headers[$this->messageId])) {
if (!isset($headers[$this->messageUid])) {
throw new DoesNotExistException('Unable to load the attachment.');
}
$fetch = $headers[$this->messageId];
$fetch = $headers[$this->messageUid];
/** @var \Horde_Mime_Headers $mimeHeaders */
$mimeHeaders = $fetch->getMimeHeader($this->attachmentId, Horde_Imap_Client_Data_Fetch::HEADER_PARSE);

Expand Down
70 changes: 51 additions & 19 deletions lib/Contracts/IMailManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,27 @@

use OCA\Mail\Account;
use OCA\Mail\Db\Mailbox;
use OCA\Mail\Db\Message;
use OCA\Mail\Exception\ClientException;
use OCA\Mail\Exception\ServiceException;
use OCA\Mail\Folder;
use OCA\Mail\IMAP\FolderStats;
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
*
Expand All @@ -47,44 +59,63 @@ public function getMailboxes(Account $account): array;
* @param Account $account
* @param string $name
*
* @return Folder
* @return Mailbox
*
* @throws ServiceException
*/
public function createFolder(Account $account, string $name): Folder;
public function createMailbox(Account $account, string $name): Mailbox;

/**
* @param Account $account
* @param string $folderId
* @param Mailbox $mailbox
*
* @return FolderStats
*/
public function getMailboxStats(Account $account, Mailbox $mailbox): FolderStats;

/**
* @param Mailbox $mailbox
* @param $uid
*
* @throws ServiceException
* @return int|null
*/
public function getMessageIdForUid(Mailbox $mailbox, $uid): ?int;

/**
* @param string $uid
* @param int $id
*
* @return Mailbox
*
* @throws ClientException
*/
public function getFolderStats(Account $account, string $folderId): FolderStats;
public function getMessage(string $uid, int $id): Message;

/**
* @param Account $account
* @param string $mb
* @param int $id
* @param int $uid
*
* @return string
* @throws ClientException
* @throws ServiceException
*/
public function getSource(Account $account, string $mb, int $id): string;
public function getSource(Account $account, string $mb, int $uid): ?string;

/**
* @param Account $account
* @param string $mailbox
* @param int $id
* @param Mailbox $mailbox
* @param int $uid
* @param bool $loadBody
*
* @return IMAPMessage
*
* @throws ServiceException
*/
public function getMessage(Account $account, string $mailbox, int $id, bool $loadBody = false): IMAPMessage;
public function getImapMessage(Account $account,
Mailbox $mailbox,
int $uid,
bool $loadBody = false): IMAPMessage;

/**
* @param Account $account
Expand All @@ -97,14 +128,17 @@ public function getThread(Account $account, int $messageId): array;
/**
* @param Account $sourceAccount
* @param string $sourceFolderId
* @param int $messageId
* @param int $uid
* @param Account $destinationAccount
* @param string $destFolderId
*
* @throws ServiceException
*/
public function moveMessage(Account $sourceAccount, string $sourceFolderId, int $messageId,
Account $destinationAccount, string $destFolderId);
public function moveMessage(Account $sourceAccount,
string $sourceFolderId,
int $uid,
Account $destinationAccount,
string $destFolderId);

/**
* @param Account $account
Expand All @@ -119,11 +153,9 @@ public function deleteMessage(Account $account, string $mailboxId, int $messageI
* Mark all messages of a folder as read
*
* @param Account $account
* @param string $folderId
*
* @throws ServiceException
* @param Mailbox $mailbox
*/
public function markFolderAsRead(Account $account, string $folderId): void;
public function markFolderAsRead(Account $account, Mailbox $mailbox): void;

/**
* @param Account $account
Expand All @@ -146,9 +178,9 @@ public function getQuota(Account $account): ?Quota;

/**
* @param Account $account
* @param string $folderId
* @param Mailbox $mailbox
*
* @throws ServiceException
*/
public function deleteMailbox(Account $account, string $folderId): void;
public function deleteMailbox(Account $account, Mailbox $mailbox): void;
}
14 changes: 11 additions & 3 deletions lib/Contracts/IMailSearch.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
namespace OCA\Mail\Contracts;

use OCA\Mail\Account;
use OCA\Mail\Db\Mailbox;
use OCA\Mail\Db\Message;
use OCA\Mail\Exception\ClientException;
use OCA\Mail\Exception\ServiceException;
Expand All @@ -43,18 +44,25 @@ interface IMailSearch {
* @throws ClientException
* @throws ServiceException
*/
public function findMessage(Account $account, string $mailboxName, int $uid): Message;
public function findMessage(Account $account,
Mailbox $mailbox,
Message $message): Message;

/**
* @param Account $account
* @param string $mailboxName
* @param Mailbox $mailbox
* @param string|null $filter
* @param int|null $cursor
* @param int|null $limit
*
* @return Message[]
*
* @throws ClientException
* @throws ServiceException
*/
public function findMessages(Account $account, string $mailboxName, ?string $filter, ?int $cursor, ?int $limit): array;
public function findMessages(Account $account,
Mailbox $mailbox,
?string $filter,
?int $cursor,
?int $limit): array;
}
Loading