From 3f9320c6a2008081ad5ba858a75a1f656cb8d875 Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Wed, 16 Mar 2011 19:12:30 +0000 Subject: [PATCH] Add a GetQuota command for the IMAP QUOTA extension. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40975 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../imap/imap_lib/IMAPFolders.cpp | 14 +++++ .../imap/imap_lib/IMAPFolders.h | 1 + .../imap/imap_lib/IMAPHandler.cpp | 53 +++++++++++++++++++ .../imap/imap_lib/IMAPHandler.h | 18 +++++++ 4 files changed, 86 insertions(+) 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