File indexing completed on 2024-06-23 05:21:13
0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net> 0002 0003 This file is part of the Trojita Qt IMAP e-mail client, 0004 http://trojita.flaska.net/ 0005 0006 This program is free software; you can redistribute it and/or 0007 modify it under the terms of the GNU General Public License as 0008 published by the Free Software Foundation; either version 2 of 0009 the License or (at your option) version 3 or any later version 0010 accepted by the membership of KDE e.V. (or its successor approved 0011 by the membership of KDE e.V.), which shall act as a proxy 0012 defined in Section 14 of version 3 of the license. 0013 0014 This program is distributed in the hope that it will be useful, 0015 but WITHOUT ANY WARRANTY; without even the implied warranty of 0016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0017 GNU General Public License for more details. 0018 0019 You should have received a copy of the GNU General Public License 0020 along with this program. If not, see <http://www.gnu.org/licenses/>. 0021 */ 0022 0023 0024 #include "CreateMailboxTask.h" 0025 #include "Common/InvokeMethod.h" 0026 #include "Imap/Model/ItemRoles.h" 0027 #include "Imap/Model/Model.h" 0028 #include "Imap/Model/MailboxTree.h" 0029 #include "GetAnyConnectionTask.h" 0030 0031 namespace Imap 0032 { 0033 namespace Mailbox 0034 { 0035 0036 0037 CreateMailboxTask::CreateMailboxTask(Model *model, const QString &mailbox): 0038 ImapTask(model), mailbox(mailbox) 0039 { 0040 conn = model->m_taskFactory->createGetAnyConnectionTask(model); 0041 conn->addDependentTask(this); 0042 } 0043 0044 void CreateMailboxTask::perform() 0045 { 0046 parser = conn->parser; 0047 markAsActiveTask(); 0048 0049 IMAP_TASK_CHECK_ABORT_DIE; 0050 0051 tagCreate = parser->create(mailbox); 0052 } 0053 0054 bool CreateMailboxTask::handleStateHelper(const Imap::Responses::State *const resp) 0055 { 0056 if (resp->tag.isEmpty()) 0057 return false; 0058 0059 if (resp->tag == tagCreate) { 0060 if (resp->kind == Responses::OK) { 0061 EMIT_LATER(model, mailboxCreationSucceded, Q_ARG(QString, mailbox)); 0062 if (_dead) { 0063 // Got to check if we're still allowed to execute before launching yet another command 0064 _failed(tr("Asked to die")); 0065 return true; 0066 } 0067 tagList = parser->list(QLatin1String(""), mailbox); 0068 // Don't call _completed() yet, we're going to update mbox list before that 0069 } else { 0070 EMIT_LATER(model, mailboxCreationFailed, Q_ARG(QString, mailbox), Q_ARG(QString, resp->message)); 0071 _failed(tr("Cannot create mailbox")); 0072 } 0073 return true; 0074 } else if (resp->tag == tagList) { 0075 if (resp->kind == Responses::OK) { 0076 model->finalizeIncrementalList(parser, mailbox); 0077 _completed(); 0078 } else { 0079 _failed(tr("Error with the LIST command after the CREATE")); 0080 } 0081 return true; 0082 } else { 0083 return false; 0084 } 0085 } 0086 0087 QVariant CreateMailboxTask::taskData(const int role) const 0088 { 0089 return role == RoleTaskCompactName ? QVariant(tr("Creating mailbox")) : QVariant(); 0090 } 0091 0092 0093 } 0094 }