qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
offlinemsgengine.cpp
Go to the documentation of this file.
1 /*
2  Copyright © 2014-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "offlinemsgengine.h"
21 #include "src/core/core.h"
22 #include "src/model/friend.h"
23 #include "src/nexus.h"
26 #include "src/model/status.h"
27 #include <QMutexLocker>
28 #include <QTimer>
29 #include <QCoreApplication>
30 #include <chrono>
31 
38 {
39  QMutexLocker ml(&mutex);
41 }
42 
44 {
45  QMutexLocker ml(&mutex);
47 }
48 
58 void OfflineMsgEngine::addUnsentMessage(Message const& message, CompletionFn completionCallback)
59 {
60  QMutexLocker ml(&mutex);
61  unsentMessages.push_back(OfflineMessage{message, std::chrono::steady_clock::now(), completionCallback});
62 }
63 
75  CompletionFn completionCallback)
76 {
77  QMutexLocker ml(&mutex);
78  receiptResolver.notifyMessageSent(receipt, {message, std::chrono::steady_clock::now(), completionCallback});
79 }
80 
82  CompletionFn completionCallback)
83 {
84  QMutexLocker ml(&mutex);
85  extendedReceiptResolver.notifyMessageSent(receipt, {message, std::chrono::steady_clock::now(), completionCallback});
86 }
87 
91 std::vector<OfflineMsgEngine::RemovedMessage> OfflineMsgEngine::removeAllMessages()
92 {
93  QMutexLocker ml(&mutex);
94  auto messages = receiptResolver.clear();
95  auto extendedMessages = extendedReceiptResolver.clear();
96 
97  messages.insert(
98  messages.end(),
99  std::make_move_iterator(extendedMessages.begin()),
100  std::make_move_iterator(extendedMessages.end()));
101 
102  messages.insert(
103  messages.end(),
104  std::make_move_iterator(unsentMessages.begin()),
105  std::make_move_iterator(unsentMessages.end()));
106 
107  unsentMessages.clear();
108 
109  std::sort(messages.begin(), messages.end(), [] (const OfflineMessage& a, const OfflineMessage& b) {
110  return a.authorshipTime < b.authorshipTime;
111  });
112 
113  auto ret = std::vector<RemovedMessage>();
114  ret.reserve(messages.size());
115 
116  std::transform(messages.begin(), messages.end(), std::back_inserter(ret), [](const OfflineMessage& msg) {
117  return RemovedMessage{msg.message, msg.completionFn};
118  });
119 
120  return ret;
121 }
profile.h
OfflineMsgEngine::extendedReceiptResolver
ReceiptResolver< ExtendedReceiptNum > extendedReceiptResolver
Definition: offlinemsgengine.h:118
OfflineMsgEngine::OfflineMessage
Definition: offlinemsgengine.h:59
OfflineMsgEngine::ReceiptResolver::notifyReceiptReceived
void notifyReceiptReceived(ReceiptT receipt)
Definition: offlinemsgengine.h:86
friend.h
settings.h
OfflineMsgEngine::mutex
CompatibleRecursiveMutex mutex
Definition: offlinemsgengine.h:66
OfflineMsgEngine::ReceiptResolver::clear
std::vector< OfflineMessage > clear()
Definition: offlinemsgengine.h:98
offlinemsgengine.h
OfflineMsgEngine::addSentCoreMessage
void addSentCoreMessage(ReceiptNum receipt, Message const &message, CompletionFn completionCallback)
Add a message which has been saved to history, and which has been sent to the peer.
Definition: offlinemsgengine.cpp:74
HistMessageContentType::message
@ message
OfflineMsgEngine::onReceiptReceived
void onReceiptReceived(ReceiptNum receipt)
Notification that the message is now delivered.
Definition: offlinemsgengine.cpp:37
ExtendedReceiptNum
NamedType< uint32_t, struct ExtendedReceiptNumTag, Orderable > ExtendedReceiptNum
Definition: receiptnum.h:30
OfflineMsgEngine::addUnsentMessage
void addUnsentMessage(Message const &message, CompletionFn completionCallback)
Add a message which has been saved to history, but not sent yet to the peer.
Definition: offlinemsgengine.cpp:58
OfflineMsgEngine::removeAllMessages
std::vector< RemovedMessage > removeAllMessages()
Removes all messages which are being tracked.
Definition: offlinemsgengine.cpp:91
OfflineMsgEngine::addSentExtendedMessage
void addSentExtendedMessage(ExtendedReceiptNum receipt, Message const &message, CompletionFn completionCallback)
Definition: offlinemsgengine.cpp:81
OfflineMsgEngine::CompletionFn
std::function< void(bool)> CompletionFn
Definition: offlinemsgengine.h:41
OfflineMsgEngine::onExtendedReceiptReceived
void onExtendedReceiptReceived(ExtendedReceiptNum receipt)
Definition: offlinemsgengine.cpp:43
core.h
ReceiptNum
NamedType< uint32_t, struct ReceiptNumTag, Orderable > ReceiptNum
Definition: receiptnum.h:27
OfflineMsgEngine::receiptResolver
ReceiptResolver< ReceiptNum > receiptResolver
Definition: offlinemsgengine.h:117
OfflineMsgEngine::ReceiptResolver::notifyMessageSent
void notifyMessageSent(ReceiptT receipt, OfflineMessage const &message)
Definition: offlinemsgengine.h:72
nexus.h
status.h
OfflineMsgEngine::unsentMessages
std::vector< OfflineMessage > unsentMessages
Definition: offlinemsgengine.h:119
Message
Definition: message.h:52