Add tooltips to the message "read by" indicator

Hovered the read by counter on timeline events now shows who read said
event and when.
This commit is contained in:
miruka 2021-01-17 11:46:56 -04:00
parent 6184f1cfa5
commit f22758ea89

View File

@ -37,6 +37,7 @@ HRowLayout {
readonly property string timeText: utils.formatTime(model.date, false)
readonly property string stateText:
`<a href="#state-text" style="text-decoration: none">` +
`<font size=${theme.fontSize.small}px><font ` + (
model.is_local_echo ?
`color="${theme.chat.message.localEcho}">&nbsp;` : // U+29D7
@ -46,7 +47,7 @@ HRowLayout {
model.read_by_count : // U+29BF
">"
) + "</font></font>"
) + "</font></font></a>"
readonly property bool pureMedia: ! contentText && linksRepeater.count
@ -260,6 +261,37 @@ HRowLayout {
acceptedPointerTypes: PointerDevice.Finger | PointerDevice.Pen
}
HToolTip {
visible: eventContent.hoveredLink === "#state-text"
label.textFormat: HLabel.StyledText
text: {
if (! visible) return ""
const members =
ModelStore.get(chat.userId, chat.roomId, "members")
const readBy = Object.entries(
JSON.parse(model.last_read_by)
).sort((a, b) => a[1] - b[1]) // sort by values (dates)
const lines = []
for (const [userId, epoch] of readBy) {
const member = members.find(userId)
const by = utils.coloredNameHtml(
member ? member.display_name: userId, userId,
)
const at = utils.formatRelativeTime(
new Date(epoch) - model.date,
)
lines.push(qsTr("Seen by %1 %2 after").arg(by).arg(at))
}
return lines.join("<br>")
}
}
Rectangle {
id: contentBackground
width: Math.max(