#include "messagemodel.h"
-#include "message.h"
-
#include <QEvent>
+#include "backlogsettings.h"
+#include "clientbacklogmanager.h"
+#include "client.h"
+#include "message.h"
+#include "networkmodel.h"
+
class ProcessBufferEvent : public QEvent {
public:
inline ProcessBufferEvent() : QEvent(QEvent::User) {}
return false;
}
-
-
bool MessageModel::insertMessage(const Message &msg, bool fakeMsg) {
MsgId id = msg.msgId();
int idx = indexForId(id);
break;
processedMsgs++;
+ if(grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId
+ idx = indexForId((*iter).msgId());
+ if(idx >= 0 && !_messageList.isEmpty())
+ dupeId = _messageList[idx]->msgId();
+ }
if((*iter).msgId() != dupeId) {
if(!grouplist.isEmpty()) {
QDateTime nextTs = grouplist.value(0).timestamp();
break;
processedMsgs++;
+ if(grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId
+ idx = indexForId((*iter).msgId());
+ if(idx >= 0 && !_messageList.isEmpty())
+ dupeId = _messageList[idx]->msgId();
+ }
if((*iter).msgId() != dupeId) {
if(!grouplist.isEmpty()) {
QDateTime nextTs = grouplist.value(0).timestamp();
}
}
- Q_ASSERT(idx == indexForId(grouplist.first().msgId()) && idx == indexForId(grouplist.last().msgId()));
- insertMessageGroup(grouplist);
+ if(!grouplist.isEmpty())
+ insertMessageGroup(grouplist);
return processedMsgs;
}
qDeleteAll(_messageList);
_messageList.clear();
endRemoveRows();
+ _messagesWaiting.clear();
}
-
-
// returns index of msg with given Id or of the next message after that (i.e., the index where we'd insert this msg)
int MessageModel::indexForId(MsgId id) {
if(_messageList.isEmpty() || id <= _messageList.value(0)->msgId())
_nextDayChange = _nextDayChange.addSecs(86400);
}
-/**********************************************************************************/
+void MessageModel::requestBacklog(BufferId bufferId) {
+ if(_messagesWaiting.contains(bufferId))
+ return;
+
+ BacklogSettings backlogSettings;
+ int requestCount = backlogSettings.dynamicBacklogAmount();
+
+ for(int i = 0; i < _messageList.count(); i++) {
+ if(_messageList.at(i)->bufferId() == bufferId) {
+ _messagesWaiting[bufferId] = requestCount;
+ Client::backlogManager()->emitMessagesRequested(tr("Requesting %1 messages from backlog for buffer %2:%3")
+ .arg(requestCount)
+ .arg(Client::networkModel()->networkName(bufferId))
+ .arg(Client::networkModel()->bufferName(bufferId)));
+ Client::backlogManager()->requestBacklog(bufferId, requestCount, _messageList.at(i)->msgId().toInt());
+ return;
+ }
+ }
+}
+
+void MessageModel::messagesReceived(BufferId bufferId, int count) {
+ if(!_messagesWaiting.contains(bufferId))
+ return;
+
+ _messagesWaiting[bufferId] -= count;
+ if(_messagesWaiting[bufferId] <= 0)
+ _messagesWaiting.remove(bufferId);
+}
+// ========================================
+// MessageModelItem
+// ========================================
MessageModelItem::MessageModelItem(const Message &msg) :
_timestamp(msg.timestamp()),
_msgId(msg.msgId()),