diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.cpp index 02847440d0..6f684799bc 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.cpp @@ -85,6 +85,20 @@ IMAPFolders::UnsubscribeFolder(const char* folder) } +status_t +IMAPFolders::GetQuota(double& used, double& total) +{ + GetQuotaCommand quotaCommand; + status_t status = ProcessCommand("aCommand); + if (status != B_OK) + return status; + + used = quotaCommand.UsedStorage(); + total = quotaCommand.TotalStorage(); + return status; +} + + status_t IMAPFolders::_GetAllFolders(StringList& folders) { diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.h b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.h index 0cab68eaa5..e6e2cfe9ca 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.h +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPFolders.h @@ -39,6 +39,7 @@ public: status_t SubscribeFolder(const char* folder); status_t UnsubscribeFolder(const char* folder); + status_t GetQuota(double& used, double& total); private: status_t _GetAllFolders(StringList& folders); status_t _GetSubscribedFolders(StringList& folders); diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.cpp index aa2139b7e2..8b7a425345 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.cpp @@ -852,3 +852,56 @@ UnsubscribeCommand::Handle(const BString& response) { return false; } + + + +GetQuotaCommand::GetQuotaCommand(const char* mailboxName) + : + fMailboxName(mailboxName), + + fUsedStorage(-1), + fTotalStorage(-1) +{ + +} + + +BString +GetQuotaCommand::Command() +{ + BString command = "GETQUOTA \""; + command += fMailboxName; + command += "\""; + return command; +} + + +bool +GetQuotaCommand::Handle(const BString& response) +{ + if (response.FindFirst("QUOTA") < 0) + return false; + + BString data = IMAPParser::ExtractBetweenBrackets(response, "(", ")"); + IMAPParser::RemovePrimitiveFromLeft(data); + fUsedStorage = IMAPParser::RemoveIntegerFromLeft(data); + fUsedStorage *= 1024; + fTotalStorage = IMAPParser::RemoveIntegerFromLeft(data); + fTotalStorage *= 1024; + + return true; +} + + +double +GetQuotaCommand::UsedStorage() +{ + return fUsedStorage; +} + + +double +GetQuotaCommand::TotalStorage() +{ + return fTotalStorage; +} diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.h b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.h index 031db60ceb..10352cc6ad 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.h +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPHandler.h @@ -280,4 +280,22 @@ private: }; +class GetQuotaCommand : public IMAPCommand { +public: + GetQuotaCommand(const char* mailboxName = ""); + + BString Command(); + bool Handle(const BString& response); + + double UsedStorage(); + double TotalStorage(); +private: + BString fMailboxName; + + double fUsedStorage; + double fTotalStorage; +}; + + + #endif // IMAP_HANDLER_H