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 #ifndef IMAP_GETANYCONNECTIONTASK_H
0024 #define IMAP_GETANYCONNECTIONTASK_H
0025 
0026 #include "ImapTask.h"
0027 #include "../Model/Model.h"
0028 
0029 namespace Imap
0030 {
0031 namespace Mailbox
0032 {
0033 
0034 /** @short Come up with a connection that is (at least) in the authenticated state
0035 
0036 In contrast to OpenConnectionTask, this task merely looks at any existing connection
0037 and returns it, unless there are no connections, in which case it creates a new one.
0038 
0039 In order to prevent some funny ordering issues, this task will sleep until no other
0040 Tasks are using the connection in question, effectively serializing commands. Note
0041 that this aspect of behavior can (and most likely will) change in future in order to
0042 better accommodate command pipelining. Another thing to note is that this "sleeping"
0043 only waits stuff which got queued before this task, and that GetAnyConnection typically
0044 finishes immediately, so the serialization effectively isn't here.
0045 */
0046 class GetAnyConnectionTask : public ImapTask
0047 {
0048     Q_OBJECT
0049 public:
0050     explicit GetAnyConnectionTask(Model *model);
0051     void perform() override;
0052     bool isReadyToRun() const override;
0053     QVariant taskData(const int role) const override;
0054     bool needsMailbox() const override {return false;}
0055 private:
0056     ImapTask *newConn;
0057 };
0058 
0059 }
0060 }
0061 
0062 #endif // IMAP_GETANYCONNECTIONTASK_H