File indexing completed on 2024-05-12 05:17:21
0001 /* 0002 Copyright (c) 2009 Andras Mantia <amantia@kde.org> 0003 0004 This library is free software; you can redistribute it and/or modify it 0005 under the terms of the GNU Library General Public License as published by 0006 the Free Software Foundation; either version 2 of the License, or (at your 0007 option) any later version. 0008 0009 This library is distributed in the hope that it will be useful, but WITHOUT 0010 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0011 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 0012 License for more details. 0013 0014 You should have received a copy of the GNU Library General Public License 0015 along with this library; see the file COPYING.LIB. If not, write to the 0016 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 0017 02110-1301, USA. 0018 */ 0019 0020 #include "deletejob.h" 0021 0022 #include "job_p.h" 0023 #include "message_p.h" 0024 #include "session_p.h" 0025 #include "rfccodecs.h" 0026 0027 namespace KIMAP2 0028 { 0029 class DeleteJobPrivate : public JobPrivate 0030 { 0031 public: 0032 DeleteJobPrivate(Session *session, const QString &name) : JobPrivate(session, name) { } 0033 ~DeleteJobPrivate() { } 0034 0035 QString mailBox; 0036 }; 0037 } 0038 0039 using namespace KIMAP2; 0040 0041 DeleteJob::DeleteJob(Session *session) 0042 : Job(*new DeleteJobPrivate(session, "Delete")) 0043 { 0044 } 0045 0046 DeleteJob::~DeleteJob() 0047 { 0048 } 0049 0050 void DeleteJob::doStart() 0051 { 0052 Q_D(DeleteJob); 0053 d->sendCommand("DELETE", '\"' + KIMAP2::encodeImapFolderName(d->mailBox.toUtf8()) + '\"'); 0054 } 0055 0056 void DeleteJob::handleResponse(const Message &response) 0057 { 0058 Q_D(DeleteJob); 0059 0060 if (!response.content.isEmpty() && 0061 d->tags.contains(response.content.first().toString())) { 0062 if (response.content.size() >= 2 && 0063 response.content[1].toString() == "NO") { 0064 for (auto it = response.responseCode.cbegin(), end = response.responseCode.cend(); 0065 it != end; ++it) { 0066 // NONEXISTENT can be considered a success during DELETE 0067 // cf. https://tools.ietf.org/html/rfc5530#section-3 0068 if (it->toString() == "NONEXISTENT") { 0069 // Code copied from handleErrorReplies: 0070 d->tags.removeAll(response.content.first().toString()); 0071 if (d->tags.isEmpty()) { // Only emit result when the last command returned 0072 emitResult(); 0073 } 0074 return; 0075 } 0076 } 0077 } 0078 } 0079 0080 handleErrorReplies(response); 0081 } 0082 0083 void DeleteJob::setMailBox(const QString &mailBox) 0084 { 0085 Q_D(DeleteJob); 0086 d->mailBox = mailBox; 0087 } 0088 0089 QString DeleteJob::mailBox() const 0090 { 0091 Q_D(const DeleteJob); 0092 return d->mailBox; 0093 }