File indexing completed on 2024-06-23 05:21:14
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 "NumberOfMessagesTask.h" 0025 #include "Imap/Model/ItemRoles.h" 0026 #include "Imap/Model/Model.h" 0027 #include "Imap/Model/MailboxTree.h" 0028 #include "GetAnyConnectionTask.h" 0029 0030 namespace Imap 0031 { 0032 namespace Mailbox 0033 { 0034 0035 0036 NumberOfMessagesTask::NumberOfMessagesTask(Model *model, const QModelIndex &mailbox): 0037 ImapTask(model), mailboxIndex(mailbox) 0038 { 0039 Q_ASSERT(dynamic_cast<TreeItemMailbox *>(static_cast<TreeItem *>(mailbox.internalPointer()))); 0040 conn = model->m_taskFactory->createGetAnyConnectionTask(model); 0041 conn->addDependentTask(this); 0042 } 0043 0044 void NumberOfMessagesTask::perform() 0045 { 0046 parser = conn->parser; 0047 markAsActiveTask(); 0048 0049 IMAP_TASK_CHECK_ABORT_DIE; 0050 0051 if (! mailboxIndex.isValid()) { 0052 // FIXME: add proper fix 0053 log(QStringLiteral("Mailbox vanished before we could ask for number of messages inside")); 0054 _completed(); 0055 return; 0056 } 0057 TreeItemMailbox *mailbox = dynamic_cast<TreeItemMailbox *>(static_cast<TreeItem *>(mailboxIndex.internalPointer())); 0058 Q_ASSERT(mailbox); 0059 0060 tag = parser->status(mailbox->mailbox(), requestedStatusOptions()); 0061 } 0062 0063 /** @short What kind of information are we interested in? */ 0064 QStringList NumberOfMessagesTask::requestedStatusOptions() 0065 { 0066 return QStringList() << QStringLiteral("MESSAGES") << QStringLiteral("UNSEEN") << QStringLiteral("RECENT"); 0067 } 0068 0069 bool NumberOfMessagesTask::handleStateHelper(const Imap::Responses::State *const resp) 0070 { 0071 if (resp->tag.isEmpty()) 0072 return false; 0073 0074 if (resp->tag == tag) { 0075 if (resp->kind == Responses::OK) { 0076 _completed(); 0077 } else { 0078 _failed(tr("STATUS has failed")); 0079 // FIXME: error handling 0080 } 0081 return true; 0082 } else { 0083 return false; 0084 } 0085 } 0086 0087 QString NumberOfMessagesTask::debugIdentification() const 0088 { 0089 if (! mailboxIndex.isValid()) 0090 return QStringLiteral("[invalid mailboxIndex]"); 0091 0092 TreeItemMailbox *mailbox = dynamic_cast<TreeItemMailbox *>(static_cast<TreeItem *>(mailboxIndex.internalPointer())); 0093 Q_ASSERT(mailbox); 0094 return QStringLiteral("attached to %1").arg(mailbox->mailbox()); 0095 } 0096 0097 QVariant NumberOfMessagesTask::taskData(const int role) const 0098 { 0099 return role == RoleTaskCompactName ? QVariant(tr("Looking for messages")) : QVariant(); 0100 } 0101 0102 } 0103 }