File indexing completed on 2024-05-12 05:17:13
0001 /* 0002 SPDX-FileCopyrightText: 2009 Andras Mantia <amantia@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "getquotarootjob.h" 0008 0009 #include <KLocalizedString> 0010 0011 #include "quotajobbase_p.h" 0012 #include "response_p.h" 0013 #include "rfccodecs.h" 0014 #include "session_p.h" 0015 0016 namespace KIMAP 0017 { 0018 class GetQuotaRootJobPrivate : public QuotaJobBasePrivate 0019 { 0020 public: 0021 GetQuotaRootJobPrivate(Session *session, const QString &name) 0022 : QuotaJobBasePrivate(session, name) 0023 { 0024 } 0025 ~GetQuotaRootJobPrivate() 0026 { 0027 } 0028 0029 QString mailBox; 0030 QList<QByteArray> rootList; 0031 QMap<QByteArray, QMap<QByteArray, QPair<qint64, qint64>>> quotas; 0032 }; 0033 } 0034 0035 using namespace KIMAP; 0036 0037 GetQuotaRootJob::GetQuotaRootJob(Session *session) 0038 : QuotaJobBase(*new GetQuotaRootJobPrivate(session, i18n("GetQuotaRoot"))) 0039 { 0040 } 0041 0042 GetQuotaRootJob::~GetQuotaRootJob() 0043 { 0044 } 0045 0046 void GetQuotaRootJob::doStart() 0047 { 0048 Q_D(GetQuotaRootJob); 0049 d->tags << d->sessionInternal()->sendCommand("GETQUOTAROOT", '\"' + KIMAP::encodeImapFolderName(d->mailBox.toUtf8()) + '\"'); 0050 } 0051 0052 void GetQuotaRootJob::handleResponse(const Response &response) 0053 { 0054 Q_D(GetQuotaRootJob); 0055 if (handleErrorReplies(response) == NotHandled) { 0056 if (response.content.size() >= 3) { 0057 if (response.content[1].toString() == "QUOTAROOT") { 0058 d->rootList.clear(); 0059 // some impls don't give the root a name which for us seems as if 0060 // there were no message part 0061 if (response.content.size() == 3) { 0062 d->rootList.append(""); 0063 } else { 0064 int i = 3; 0065 while (i < response.content.size()) { 0066 d->rootList.append(response.content[i].toString()); 0067 i++; 0068 } 0069 } 0070 } else if (response.content[1].toString() == "QUOTA") { 0071 QByteArray rootName; 0072 int quotaContentIndex = 3; 0073 // some impls don't give the root a name in the response 0074 if (response.content.size() == 3) { 0075 quotaContentIndex = 2; 0076 } else { 0077 rootName = response.content[2].toString(); 0078 } 0079 0080 const QMap<QByteArray, QPair<qint64, qint64>> "a = d->readQuota(response.content[quotaContentIndex]); 0081 if (d->quotas.contains(rootName)) { 0082 d->quotas[rootName].insert(quota); 0083 } else { 0084 d->quotas[rootName] = quota; 0085 } 0086 } 0087 } 0088 } 0089 } 0090 0091 void GetQuotaRootJob::setMailBox(const QString &mailBox) 0092 { 0093 Q_D(GetQuotaRootJob); 0094 d->mailBox = mailBox; 0095 } 0096 0097 QString GetQuotaRootJob::mailBox() const 0098 { 0099 Q_D(const GetQuotaRootJob); 0100 return d->mailBox; 0101 } 0102 0103 QList<QByteArray> GetQuotaRootJob::roots() const 0104 { 0105 Q_D(const GetQuotaRootJob); 0106 return d->rootList; 0107 } 0108 0109 qint64 GetQuotaRootJob::usage(const QByteArray &root, const QByteArray &resource) const 0110 { 0111 Q_D(const GetQuotaRootJob); 0112 QByteArray r = resource.toUpper(); 0113 0114 if (d->quotas.contains(root) && d->quotas[root].contains(r)) { 0115 return d->quotas[root][r].first; 0116 } 0117 return -1; 0118 } 0119 0120 qint64 GetQuotaRootJob::limit(const QByteArray &root, const QByteArray &resource) const 0121 { 0122 Q_D(const GetQuotaRootJob); 0123 0124 QByteArray r = resource.toUpper(); 0125 0126 if (d->quotas.contains(root) && d->quotas[root].contains(r)) { 0127 return d->quotas[root][r].second; 0128 } 0129 return -1; 0130 } 0131 0132 QMap<QByteArray, qint64> GetQuotaRootJob::allUsages(const QByteArray &root) const 0133 { 0134 Q_D(const GetQuotaRootJob); 0135 0136 QMap<QByteArray, qint64> result; 0137 0138 if (d->quotas.contains(root)) { 0139 const QMap<QByteArray, QPair<qint64, qint64>> quota = d->quotas[root]; 0140 QMap<QByteArray, QPair<qint64, qint64>>::const_iterator it = quota.cbegin(); 0141 const QMap<QByteArray, QPair<qint64, qint64>>::const_iterator itEnd = quota.cend(); 0142 for (; it != itEnd; ++it) { 0143 result[it.key()] = it.value().first; 0144 } 0145 } 0146 return result; 0147 } 0148 0149 QMap<QByteArray, qint64> GetQuotaRootJob::allLimits(const QByteArray &root) const 0150 { 0151 Q_D(const GetQuotaRootJob); 0152 0153 QMap<QByteArray, qint64> result; 0154 0155 if (d->quotas.contains(root)) { 0156 const QMap<QByteArray, QPair<qint64, qint64>> quota = d->quotas[root]; 0157 QMap<QByteArray, QPair<qint64, qint64>>::const_iterator it = quota.cbegin(); 0158 const QMap<QByteArray, QPair<qint64, qint64>>::const_iterator itEnd = quota.cend(); 0159 for (; it != itEnd; ++it) { 0160 result[it.key()] = it.value().second; 0161 } 0162 } 0163 return result; 0164 } 0165 0166 #include "moc_getquotarootjob.cpp"