File indexing completed on 2024-05-12 05:17:15
0001 /* 0002 SPDX-FileCopyrightText: 2016 Daniel Vrátil <dvratil@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "movejob.h" 0008 0009 #include "job_p.h" 0010 #include "response_p.h" 0011 #include "rfccodecs.h" 0012 #include "session_p.h" 0013 0014 #include <KLocalizedString> 0015 0016 // TODO: when custom error codes are introduced, handle the NO [TRYCREATE] response 0017 0018 namespace KIMAP 0019 { 0020 class MoveJobPrivate : public JobPrivate 0021 { 0022 public: 0023 MoveJobPrivate(Session *session, const QString &name) 0024 : JobPrivate(session, name) 0025 { 0026 } 0027 0028 ~MoveJobPrivate() 0029 { 0030 } 0031 0032 QString mailBox; 0033 ImapSet set; 0034 ImapSet resultingUids; 0035 bool uidBased = false; 0036 }; 0037 } 0038 0039 using namespace KIMAP; 0040 0041 MoveJob::MoveJob(Session *session) 0042 : Job(*new MoveJobPrivate(session, i18n("Move"))) 0043 { 0044 Q_D(MoveJob); 0045 d->uidBased = false; 0046 } 0047 0048 MoveJob::~MoveJob() 0049 { 0050 } 0051 0052 void MoveJob::setMailBox(const QString &mailBox) 0053 { 0054 Q_D(MoveJob); 0055 d->mailBox = mailBox; 0056 } 0057 0058 QString MoveJob::mailBox() const 0059 { 0060 Q_D(const MoveJob); 0061 return d->mailBox; 0062 } 0063 0064 void MoveJob::setSequenceSet(const ImapSet &set) 0065 { 0066 Q_D(MoveJob); 0067 d->set = set; 0068 } 0069 0070 ImapSet MoveJob::sequenceSet() const 0071 { 0072 Q_D(const MoveJob); 0073 return d->set; 0074 } 0075 0076 void MoveJob::setUidBased(bool uidBased) 0077 { 0078 Q_D(MoveJob); 0079 d->uidBased = uidBased; 0080 } 0081 0082 bool MoveJob::isUidBased() const 0083 { 0084 Q_D(const MoveJob); 0085 return d->uidBased; 0086 } 0087 0088 ImapSet MoveJob::resultingUids() const 0089 { 0090 Q_D(const MoveJob); 0091 return d->resultingUids; 0092 } 0093 0094 void MoveJob::doStart() 0095 { 0096 Q_D(MoveJob); 0097 0098 d->set.optimize(); 0099 QByteArray parameters = d->set.toImapSequenceSet() + ' '; 0100 parameters += '\"' + KIMAP::encodeImapFolderName(d->mailBox.toUtf8()) + '\"'; 0101 0102 QByteArray command = "MOVE"; 0103 if (d->uidBased) { 0104 command = "UID " + command; 0105 } 0106 0107 d->tags << d->sessionInternal()->sendCommand(command, parameters); 0108 } 0109 0110 void MoveJob::handleResponse(const Response &response) 0111 { 0112 Q_D(MoveJob); 0113 0114 for (auto it = response.responseCode.cbegin(), end = response.responseCode.cend(); it != end; ++it) { 0115 if (it->toString() == "COPYUID") { 0116 it = it + 3; 0117 if (it < end) { 0118 d->resultingUids = ImapSet::fromImapSequenceSet(it->toString()); 0119 } 0120 break; 0121 } 0122 } 0123 0124 handleErrorReplies(response); 0125 } 0126 0127 #include "moc_movejob.cpp"