#include "chatline.h"
#include "chatlinemodelitem.h"
#include "chatscene.h"
+#include "client.h"
+#include "clientbacklogmanager.h"
#include "columnhandleitem.h"
#include "qtui.h"
#include "qtuisettings.h"
_selectingItem = 0;
_isSelecting = false;
_selectionStart = -1;
+ _fetchingBacklog = false;
+
connect(this, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(rectChanged(const QRectF &)));
connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int)));
for(int i = end+1; i < _lines.count(); i++) {
_lines[i]->setRow(i);
}
-
+
if(h > 0) {
_height += h;
for(int i = end+1; i < _lines.count(); i++) {
setSceneRect(QRectF(0, 0, _width, _height));
emit heightChanged(_height);
}
+
+ requestBacklogIfNeeded();
}
void ChatScene::modelReset() {
}
return result;
}
+
+void ChatScene::setIsFetchingBacklog(bool fetch) {
+ if(!isBacklogFetchingEnabled()) return;
+
+ if(!fetch) {
+ _fetchingBacklog = false;
+ } else {
+ _fetchingBacklog = true;
+ requestBacklogIfNeeded();
+ }
+}
+
+void ChatScene::requestBacklogIfNeeded() {
+ const int REQUEST_COUNT = 50;
+
+ if(!isBacklogFetchingEnabled() || !isFetchingBacklog() || !model()->rowCount()) return;
+
+ MsgId msgId = model()->data(model()->index(0, 0), ChatLineModel::MsgIdRole).value<MsgId>();
+ if(!_lastBacklogOffset.isValid() || (msgId < _lastBacklogOffset && _lastBacklogSize + REQUEST_COUNT <= model()->rowCount())) {
+ Client::backlogManager()->requestBacklog(bufferForBacklogFetching(), REQUEST_COUNT, msgId.toInt());
+ _lastBacklogOffset = msgId;
+ _lastBacklogSize = model()->rowCount();
+ }
+}