KIMAP2

deletejob.cpp
1 /*
2  Copyright (c) 2009 Andras Mantia <[email protected]>
3 
4  This library is free software; you can redistribute it and/or modify it
5  under the terms of the GNU Library General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or (at your
7  option) any later version.
8 
9  This library is distributed in the hope that it will be useful, but WITHOUT
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12  License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to the
16  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  02110-1301, USA.
18 */
19 
20 #include "deletejob.h"
21 
22 #include "job_p.h"
23 #include "message_p.h"
24 #include "session_p.h"
25 #include "rfccodecs.h"
26 
27 namespace KIMAP2
28 {
29 class DeleteJobPrivate : public JobPrivate
30 {
31 public:
32  DeleteJobPrivate(Session *session, const QString &name) : JobPrivate(session, name) { }
33  ~DeleteJobPrivate() { }
34 
35  QString mailBox;
36 };
37 }
38 
39 using namespace KIMAP2;
40 
41 DeleteJob::DeleteJob(Session *session)
42  : Job(*new DeleteJobPrivate(session, "Delete"))
43 {
44 }
45 
46 DeleteJob::~DeleteJob()
47 {
48 }
49 
50 void DeleteJob::doStart()
51 {
52  Q_D(DeleteJob);
53  d->sendCommand("DELETE", '\"' + KIMAP2::encodeImapFolderName(d->mailBox.toUtf8()) + '\"');
54 }
55 
56 void DeleteJob::handleResponse(const Message &response)
57 {
58  Q_D(DeleteJob);
59 
60  if (!response.content.isEmpty() &&
61  d->tags.contains(response.content.first().toString())) {
62  if (response.content.size() >= 2 &&
63  response.content[1].toString() == "NO") {
64  for (auto it = response.responseCode.cbegin(), end = response.responseCode.cend();
65  it != end; ++it) {
66  // NONEXISTENT can be considered a success during DELETE
67  // cf. https://tools.ietf.org/html/rfc5530#section-3
68  if (it->toString() == "NONEXISTENT") {
69  // Code copied from handleErrorReplies:
70  d->tags.removeAll(response.content.first().toString());
71  if (d->tags.isEmpty()) { // Only emit result when the last command returned
72  emitResult();
73  }
74  return;
75  }
76  }
77  }
78  }
79 
80  handleErrorReplies(response);
81 }
82 
84 {
85  Q_D(DeleteJob);
86  d->mailBox = mailBox;
87 }
88 
90 {
91  Q_D(const DeleteJob);
92  return d->mailBox;
93 }
This file is part of the IMAP support library and defines the RfcCodecs class.
QString mailBox() const
The mailbox that will be deleted.
Definition: deletejob.cpp:89
void setMailBox(const QString &mailBox)
Set the mailbox to delete.
Definition: deletejob.cpp:83
void emitResult()
Definition: acl.cpp:25
Delete a mailbox.
Definition: deletejob.h:47
const QList< QKeySequence > & end()
QString mailBox() const
The mailbox that will be acted upon.
Definition: acljobbase.cpp:86
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Mon Dec 6 2021 23:00:24 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.