SELECT count(*)
FROM backlog
-WHERE bufferid = :bufferid AND messageid < :messageid
+WHERE bufferid = :bufferid AND messageid >= :messageid
if(!bufferInfo.isValid())
return messagelist;
- // we have to determine the real offset first
- QSqlQuery *offsetQuery = cachedQuery("select_messagesOffset");
- offsetQuery->bindValue(":bufferid", bufferId.toInt());
- offsetQuery->bindValue(":messageid", offset);
- offsetQuery->exec();
- offsetQuery->first();
- offset = offsetQuery->value(0).toInt();
+ if(offset == -1) {
+ offset = 0;
+ } else {
+ // we have to determine the real offset first
+ QSqlQuery *offsetQuery = cachedQuery("select_messagesOffset");
+ offsetQuery->bindValue(":bufferid", bufferId.toInt());
+ offsetQuery->bindValue(":messageid", offset);
+ offsetQuery->exec();
+ offsetQuery->first();
+ offset = offsetQuery->value(0).toInt();
+ }
// now let's select the messages
QSqlQuery *msgQuery = cachedQuery("select_messages");
#include "chatline-old.h"
#include "qtui.h"
#include "uisettings.h"
-
-ChatWidget::ChatWidget(QWidget *parent) : QAbstractScrollArea(parent) {
+#include "client.h"
+#include "buffer.h"
+#include "clientbacklogmanager.h"
+
+ChatWidget::ChatWidget(QWidget *parent)
+ : QAbstractScrollArea(parent),
+ lastBacklogOffset(0),
+ lastBacklogSize(0)
+{
//setAutoFillBackground(false);
//QPalette palette;
//palette.setColor(backgroundRole(), QColor(0, 0, 0, 50));
mouseMode = Normal;
selectionMode = NoSelection;
connect(scrollTimer, SIGNAL(timeout()), this, SLOT(handleScrollTimer()));
+
+ if(bufferId.isValid())
+ connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(viewportChanged(int)));
}
ChatWidget::~ChatWidget() {
return lines[selectionLine]->text().mid(selectionStart, selectionEnd - selectionStart);
}
+void ChatWidget::viewportChanged(int newPos) {
+ const int REQUEST_COUNT = 50;
+ QAbstractSlider *vbar = verticalScrollBar();
+ if(!vbar)
+ return;
+
+ int relativePos = 100;
+ if(vbar->maximum() - vbar->minimum() != 0)
+ relativePos = (newPos - vbar->minimum()) * 100 / (vbar->maximum() - vbar->minimum());
+
+ if(relativePos < 20) {
+ Buffer *buffer = Client::buffer(bufferId);
+ Q_CHECK_PTR(buffer);
+ if(buffer->contents().isEmpty())
+ return;
+ MsgId msgId = buffer->contents().first()->msgId();
+ if(!lastBacklogOffset.isValid() || msgId < lastBacklogOffset && lastBacklogSize + REQUEST_COUNT <= buffer->contents().count()) {
+ Client::backlogManager()->requestBacklog(bufferId, REQUEST_COUNT, msgId.toInt());
+ lastBacklogOffset = msgId;
+ lastBacklogSize = buffer->contents().size();
+ }
+ }
+}
void scrollBarValChanged(int);
void ensureVisible(int line);
void handleScrollTimer();
+ void viewportChanged(int newPos);
private:
BufferId bufferId;
QString selectionToString();
void handleMouseMoveEvent(const QPoint &pos);
+ MsgId lastBacklogOffset;
+ int lastBacklogSize;
};
#endif
void MainWin::connectedToCore() {
foreach(BufferInfo id, Client::allBufferInfos()) {
- // emit requestBacklog(id, 1000, -1);
- Client::backlogManager()->requestBacklog(id.bufferId(), 1000, -1);
+ Client::backlogManager()->requestBacklog(id.bufferId(), 500, -1);
}
ui.menuViews->setEnabled(true);
{ using namespace Global;
quasselVersion = "0.2.0-alpha4-pre";
- quasselDate = "2008-03-16";
- quasselBuild = 641;
+ quasselDate = "2008-03-18";
+ quasselBuild = 642;
//! Minimum client build number the core needs
- clientBuildNeeded = 641;
+ clientBuildNeeded = 642;
clientVersionNeeded = quasselVersion;
//! Minimum core build number the client needs
- coreBuildNeeded = 641;
+ coreBuildNeeded = 642;
coreVersionNeeded = quasselVersion;
}