Bring back room subtitles

Show last appropriate room message/event as subtitle
This commit is contained in:
miruka 2019-04-14 14:09:54 -04:00
parent 9c66166c4f
commit d36cbbc7df
7 changed files with 58 additions and 26 deletions

View File

@ -18,3 +18,5 @@
- Better names and organization for the Message components
- Load previous events on scroll up
- Migrate more JS functions to their own files

View File

@ -2,7 +2,7 @@ import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.4
import "../base" as Base
import "get_event_text.js" as GetEventTextJS
import "utils.js" as ChatJS
Row {
id: row
@ -11,9 +11,7 @@ Row {
anchors.right: isOwn ? parent.right : undefined
readonly property string contentText:
(isMessage || isUndecryptableEvent) ?
"" :
GetEventTextJS.get_event_text(type, dict)
isMessage ? "" : ChatJS.get_event_text(type, dict)
Base.Avatar {
id: avatar
@ -24,7 +22,8 @@ Row {
Base.HLabel {
id: contentLabel
text: "<font color=gray>" +
text: "<font color='" +
(isUndecryptableEvent ? "darkred" : "gray") + "'>" +
displayName + " " + contentText +
"&nbsp;&nbsp;<font size=" + smallSize + "px>" +
Qt.formatDateTime(date_time, "hh:mm:ss") +

View File

@ -38,9 +38,7 @@ Row {
//"</font>" +
// (isOwn ? "&nbsp;&nbsp;" + content : "")
text: (isUndecryptableEvent ?
"<font color=darkred>Missing decryption keys for this message.</font>" :
dict.formatted_body || dict.body) +
text: (dict.formatted_body || dict.body) +
"&nbsp;&nbsp;<font size=" + smallSize + "px color=gray>" +
Qt.formatDateTime(date_time, "hh:mm:ss") +
"</font>"

View File

@ -55,7 +55,7 @@ Column {
Daybreak { visible: dayBreak }
MessageContent { visible: isMessage || isUndecryptableEvent }
MessageContent { visible: isMessage }
EventContent { visible: ! (isMessage || isUndecryptableEvent) }
EventContent { visible: ! isMessage }
}

View File

@ -45,6 +45,10 @@ function get_event_text(type, dict) {
return "turned on encryption for this room."
break
case "OlmEvent":
case "MegolmEvent":
return "hasn't sent your device the keys to decrypt this message."
default:
console.log(type + "\n" + JSON.stringify(dict, null, 4) + "\n")
return "did something this client does not understand."

View File

@ -2,6 +2,7 @@ import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.4
import "../base" as Base
import "utils.js" as SidePaneJS
MouseArea {
id: "root"
@ -38,24 +39,10 @@ MouseArea {
rightPadding: leftPadding
}
Base.HLabel {
property var msgModel: Backend.models.roomEvents.get(room_id)
function get_text() {
if (msgModel.count < 1) { return "" }
var msg = msgModel.get(-1)
var color_ = (msg.sender_id === roomList.user_id ?
"darkblue" : "purple")
return "<font color=\"" + color_ + "\">" +
Backend.getUser(msg.sender_id).display_name +
":</font> " +
msg.content
}
id: subtitleLabel
visible: text !== ""
//text: msgModel.reloadThis, get_text()
text: Backend.models.roomEvents.get(room_id).reloadThis,
SidePaneJS.get_last_room_event_text(room_id)
textFormat: Text.StyledText
font.pixelSize: smallSize

View File

@ -0,0 +1,42 @@
.import "../chat/utils.js" as ChatJS
function get_last_room_event_text(room_id) {
var eventsModel = Backend.models.roomEvents.get(room_id)
for (var i = -1; i >= -eventsModel.count; i--) {
var ev = eventsModel.get(i)
if (ev.type !== "RoomMemberEvent") {
var found = true
break
}
}
if (! found) { return "" }
var name = Backend.getUser(ev.dict.sender).display_name
var undecryptable = ev.type === "OlmEvent" || ev.type === "MegolmEvent"
if (undecryptable || ev.type.startsWith("RoomMessage")) {
var color = ev.dict.sender === roomList.for_user_id ?
"darkblue" : "purple"
return "<font color='" +
color +
"'>" +
name +
":</font> " +
(undecryptable ?
"<font color='darkred'>Undecryptable<font>" :
ev.dict.body)
} else {
return "<font color='" +
(undecryptable ? "darkred" : "#444") +
"'>" +
name +
" " +
ChatJS.get_event_text(ev.type, ev.dict) +
"</font>"
}
}