moment/harmonyqml/components/chat/MessageDelegate.qml
miruka f0dab1801a Order the roomEvents models from newest to oldest
Qt somehow handles scrolling on new messages on its own when the
ListView direction is bottom to top.
In normal top to bottom, manual scrolling is completly buggy.
2019-04-17 16:43:18 -04:00

70 lines
1.9 KiB
QML

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.4
import "../base" as Base
Column {
id: "rootCol"
function mins_between(date1, date2) {
console.log(Math.round((((date2 - date1) % 86400000) % 3600000) / 60000))
return Math.round((((date2 - date1) % 86400000) % 3600000) / 60000)
}
function is_message(type_) { return type_.startsWith("RoomMessage") }
readonly property var previousItem:
index < messageListView.model.count - 1 ?
messageListView.model.get(index + 1) : null
readonly property bool isMessage: is_message(type)
readonly property bool isUndecryptableEvent:
type === "OlmEvent" || type === "MegolmEvent"
readonly property string displayName:
Backend.getUser(dict.sender).display_name
readonly property bool isOwn:
chatPage.user_id === dict.sender
readonly property bool isFirstMessage: ! previousItem
readonly property bool combine:
! isFirstMessage &&
! talkBreak &&
! dayBreak &&
is_message(previousItem.type) === isMessage &&
previousItem.dict.sender === dict.sender &&
mins_between(previousItem.date_time, date_time) <= 5
readonly property bool dayBreak:
isFirstMessage ||
date_time.getDay() != previousItem.date_time.getDay()
readonly property bool talkBreak:
! isFirstMessage &&
! dayBreak &&
mins_between(previousItem.date_time, date_time) >= 20
property int standardSpacing: 16
property int horizontalPadding: 7
property int verticalPadding: 5
width: parent.width
topPadding:
! previousItem ? 0 :
talkBreak ? standardSpacing * 3 :
combine ? standardSpacing / 4 :
standardSpacing
//Text { text: rootCol.topPadding }
Daybreak { visible: dayBreak }
MessageContent { visible: isMessage }
EventContent { visible: ! isMessage }
}