File indexing completed on 2024-05-12 05:17:12
0001 /* 0002 SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "appendjob.h" 0008 0009 #include <KLocalizedString> 0010 0011 #include "job_p.h" 0012 #include "response_p.h" 0013 #include "rfccodecs.h" 0014 #include "session_p.h" 0015 0016 namespace KIMAP 0017 { 0018 class AppendJobPrivate : public JobPrivate 0019 { 0020 public: 0021 AppendJobPrivate(Session *session, const QString &name) 0022 : JobPrivate(session, name) 0023 { 0024 } 0025 ~AppendJobPrivate() 0026 { 0027 } 0028 0029 QString mailBox; 0030 QList<QByteArray> flags; 0031 QDateTime internalDate; 0032 QByteArray content; 0033 qint64 uid = 0; 0034 }; 0035 } 0036 0037 using namespace KIMAP; 0038 0039 AppendJob::AppendJob(Session *session) 0040 : Job(*new AppendJobPrivate(session, i18n("Append"))) 0041 { 0042 } 0043 0044 AppendJob::~AppendJob() 0045 { 0046 } 0047 0048 void AppendJob::setMailBox(const QString &mailBox) 0049 { 0050 Q_D(AppendJob); 0051 d->mailBox = mailBox; 0052 } 0053 0054 QString AppendJob::mailBox() const 0055 { 0056 Q_D(const AppendJob); 0057 return d->mailBox; 0058 } 0059 0060 void AppendJob::setFlags(const QList<QByteArray> &flags) 0061 { 0062 Q_D(AppendJob); 0063 d->flags = flags; 0064 } 0065 0066 QList<QByteArray> AppendJob::flags() const 0067 { 0068 Q_D(const AppendJob); 0069 return d->flags; 0070 } 0071 0072 void AppendJob::setInternalDate(const QDateTime &internalDate) 0073 { 0074 Q_D(AppendJob); 0075 d->internalDate = internalDate; 0076 } 0077 0078 QDateTime AppendJob::internalDate() const 0079 { 0080 Q_D(const AppendJob); 0081 return d->internalDate; 0082 } 0083 0084 void AppendJob::setContent(const QByteArray &content) 0085 { 0086 Q_D(AppendJob); 0087 d->content = content; 0088 } 0089 0090 QByteArray AppendJob::content() const 0091 { 0092 Q_D(const AppendJob); 0093 return d->content; 0094 } 0095 0096 qint64 AppendJob::uid() const 0097 { 0098 Q_D(const AppendJob); 0099 return d->uid; 0100 } 0101 0102 void AppendJob::doStart() 0103 { 0104 Q_D(AppendJob); 0105 0106 QByteArray parameters = '\"' + KIMAP::encodeImapFolderName(d->mailBox.toUtf8()) + '\"'; 0107 0108 if (!d->flags.isEmpty()) { 0109 parameters += " ("; 0110 for (const QByteArray &flag : std::as_const(d->flags)) { 0111 parameters += flag + ' '; 0112 } 0113 parameters.chop(1); 0114 parameters += ')'; 0115 } 0116 0117 if (!d->internalDate.isNull()) { 0118 const QDateTime utcDateTime = d->internalDate.toUTC(); 0119 parameters += " \"" + QLocale::c().toString(utcDateTime, QStringLiteral("dd-MMM-yyyy hh:mm:ss")).toLatin1() + " +0000" + '\"'; 0120 } 0121 0122 parameters += " {" + QByteArray::number(d->content.size()) + '}'; 0123 0124 d->tags << d->sessionInternal()->sendCommand("APPEND", parameters); 0125 } 0126 0127 void AppendJob::handleResponse(const Response &response) 0128 { 0129 Q_D(AppendJob); 0130 const QList<Response::Part>::ConstIterator end(response.responseCode.end()); 0131 for (QList<Response::Part>::ConstIterator it = response.responseCode.begin(); it != end; ++it) { 0132 if (it->toString() == "APPENDUID") { 0133 it = it + 2; 0134 if (it != end) { 0135 d->uid = it->toString().toLongLong(); 0136 } 0137 break; 0138 } 0139 } 0140 0141 if (handleErrorReplies(response) == NotHandled) { 0142 if (!response.content.isEmpty() && response.content[0].toString() == "+") { 0143 d->sessionInternal()->sendData(d->content); 0144 } 0145 } 0146 } 0147 0148 #include "moc_appendjob.cpp"