Faster infinite scroll.

This commit is contained in:
Black Hat 2018-09-30 17:09:58 +08:00
parent 7ad988df4a
commit 57f04cf308
2 changed files with 15 additions and 25 deletions

View File

@ -111,7 +111,6 @@ Item {
displayMarginEnd: 40 displayMarginEnd: 40
verticalLayoutDirection: ListView.BottomToTop verticalLayoutDirection: ListView.BottomToTop
spacing: 8 spacing: 8
cacheBuffer: 200
flickDeceleration: 4096 flickDeceleration: 4096
@ -126,17 +125,18 @@ Item {
{ {
// Request the amount of messages enough to scroll at this // Request the amount of messages enough to scroll at this
// rate for 3 more seconds // rate for 3 more seconds
var avgHeight = contentHeight / count currentRoom.getPreviousContent(20);
currentRoom.getPreviousContent(-curVelocity*3 / avgHeight);
} }
} }
onMovementEnded: currentRoom.saveViewport(sortedMessageEventModel.mapToSource(indexAt(contentX, contentY)), sortedMessageEventModel.mapToSource(largestVisibleIndex)) onMovementEnded: currentRoom.saveViewport(sortedMessageEventModel.mapToSource(indexAt(contentX, contentY)), sortedMessageEventModel.mapToSource(largestVisibleIndex))
displaced: Transition { NumberAnimation { displaced: Transition {
NumberAnimation {
property: "y"; duration: 200 property: "y"; duration: 200
easing.type: Easing.OutQuad easing.type: Easing.OutQuad
}} }
}
model: SortFilterProxyModel { model: SortFilterProxyModel {
id: sortedMessageEventModel id: sortedMessageEventModel

View File

@ -210,15 +210,11 @@ QDateTime MessageEventModel::makeMessageTimestamp(
QString MessageEventModel::renderDate(QDateTime timestamp) const { QString MessageEventModel::renderDate(QDateTime timestamp) const {
auto date = timestamp.toLocalTime().date(); auto date = timestamp.toLocalTime().date();
if (QMatrixClient::SettingsGroup("UI")
.value("banner_human_friendly_date", true)
.toBool()) {
if (date == QDate::currentDate()) return tr("Today"); if (date == QDate::currentDate()) return tr("Today");
if (date == QDate::currentDate().addDays(-1)) return tr("Yesterday"); if (date == QDate::currentDate().addDays(-1)) return tr("Yesterday");
if (date == QDate::currentDate().addDays(-2)) if (date == QDate::currentDate().addDays(-2))
return tr("The day before yesterday"); return tr("The day before yesterday");
if (date > QDate::currentDate().addDays(-7)) return date.toString("dddd"); if (date > QDate::currentDate().addDays(-7)) return date.toString("dddd");
}
return date.toString(Qt::DefaultLocaleShortDate); return date.toString(Qt::DefaultLocaleShortDate);
} }
@ -504,13 +500,11 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
if (is<RedactionEvent>(evt)) return EventStatus::Hidden; if (is<RedactionEvent>(evt)) return EventStatus::Hidden;
auto* memberEvent = timelineIt->viewAs<RoomMemberEvent>(); auto* memberEvent = timelineIt->viewAs<RoomMemberEvent>();
if (memberEvent) { if (memberEvent) {
if ((memberEvent->isJoin() || memberEvent->isLeave()) && if ((memberEvent->isJoin() || memberEvent->isLeave()))
!Settings().value("UI/show_joinleave", true).toBool())
return EventStatus::Hidden; return EventStatus::Hidden;
} }
if (memberEvent || evt.isRedacted()) { if (memberEvent || evt.isRedacted()) {
if (evt.senderId() == m_currentRoom->localUser()->id() || if (evt.senderId() == m_currentRoom->localUser()->id()) {
Settings().value("UI/show_spammy").toBool()) {
// QElapsedTimer et; et.start(); // QElapsedTimer et; et.start();
auto hide = !isUserActivityNotable(timelineIt); auto hide = !isUserActivityNotable(timelineIt);
// qDebug() << "Checked user activity for" << evt.id() << // qDebug() << "Checked user activity for" << evt.id() <<
@ -518,14 +512,10 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
if (hide) return EventStatus::Hidden; if (hide) return EventStatus::Hidden;
} }
} }
if (evt.isRedacted()) if (evt.isRedacted()) return EventStatus::Redacted;
return Settings().value("UI/show_redacted").toBool()
? EventStatus::Redacted
: EventStatus::Hidden;
if (evt.isStateEvent() && if (evt.isStateEvent() &&
static_cast<const StateEventBase&>(evt).repeatsState() && static_cast<const StateEventBase&>(evt).repeatsState())
!Settings().value("UI/show_noop_events").toBool())
return EventStatus::Hidden; return EventStatus::Hidden;
return EventStatus::Normal; return EventStatus::Normal;