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