faster group loading

This commit is contained in:
erinn 2019-04-08 13:28:36 -07:00
parent 493fbeba38
commit a3108c2581
5 changed files with 108 additions and 83 deletions

View File

@ -36,6 +36,7 @@ type GrandCentralDispatcher struct {
// messages pane stuff
_ func(handle, from, displayName, message, image string, mID string, fromMe bool, ts string, ackd bool, error bool) `signal:"AppendMessage"`
_ func(handle, from, displayName, message, image string, mID string, fromMe bool, ts string, ackd bool, error bool) `signal:"PrependMessage"`
_ func() `signal:"ClearMessages"`
_ func() `signal:"ResetMessagePane"`
_ func(mID string) `signal:"Acknowledged"`
@ -188,7 +189,7 @@ func (this *GrandCentralDispatcher) loadMessagesPaneHelper(handle string) {
this.SetToolbarTitle(nick)
}
log.Debugf("messages: %d", len(tl))
for i := range tl {
for i := len(tl) - 1; i >= 0; i-- {
if tl[i].PeerID == the.Peer.GetProfile().Onion {
handle = "me"
} else {
@ -203,7 +204,7 @@ func (this *GrandCentralDispatcher) loadMessagesPaneHelper(handle string) {
name = tl[i].PeerID[:16] + "..."
}
}
this.AppendMessage(
this.PrependMessage(
handle,
tl[i].PeerID,
name,

View File

@ -12,93 +12,101 @@ import "../utils.js" as Utils
ColumnLayout {
Layout.fillWidth: true
Flickable { // THE MESSAGE LIST ITSELF
id: sv
clip: true
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
Layout.fillHeight: true
Layout.fillWidth: true
contentWidth: colMessages.width
contentHeight: colMessages.height
boundsBehavior: Flickable.StopAtBounds
maximumFlickVelocity: 800
ListModel { // MESSAGE OBJECTS ARE STORED HERE ...
id: messagesModel
}
ListView {
id: messagesListView
Layout.fillHeight: true
Layout.fillWidth: true
model: messagesModel
spacing: 6
clip: true
ScrollBar.vertical: ScrollBar {}
delegate: Message {
handle: _handle
from: _from
displayName: _displayName
message: _message
rawMessage: _rawMessage
image: _image
messageID: _mid
fromMe: _fromMe
timestamp: _ts
ackd: _ackd
error: _error
}
Connections {
target: gcd
Connections {
target: gcd
onClearMessages: function() {
messagesModel.clear()
txtMessage.text = ""
}
onClearMessages: function() {
messagesModel.clear()
txtMessage.text = ""
}
onAppendMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ackd, error) {
var msg
try {
msg = JSON.parse(message)
} catch (e) {
msg = {"o": 1, "d": "(legacy message type) " + message}
}
if (msg.o != 1) return
onAppendMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ackd, error) {
var msg
try {
msg = JSON.parse(message)
} catch (e) {
msg = {"o": 1, "d": "(legacy message type) " + message}
}
if (msg.o != 1) return
messagesModel.append({
"_handle": handle,
"_from": from,
"_displayName": displayName,
"_message":parse(msg.d, 12),
"_image": image,
"_mid": mid,
"_fromMe": fromMe,
"_ts": ts,
"_ackd": ackd,
"_error": error == true ? "this message failed to send" : "",
})
messagesModel.append({
"_handle": handle,
"_from": from,
"_displayName": displayName,
"_message":parse(msg.d, 12),
"_rawMessage":msg.d,
"_image": image,
"_mid": mid,
"_fromMe": fromMe,
"_ts": ts,
"_ackd": ackd,
"_error": error == true ? "this message failed to send" : "",
})
messagesListView.positionViewAtEnd()
// If the window is out of focus, alert the user (makes taskbar light up)
windowItem.alert(0)
}
onPrependMessage: function(handle, from, displayName, message, image, mid, fromMe, ts, ackd, error) {
var msg
try {
msg = JSON.parse(message)
} catch (e) {
msg = {"o": 1, "d": "(legacy message type) " + message}
}
if (msg.o != 1) return
messagesModel.insert(0, {
"_handle": handle,
"_from": from,
"_displayName": displayName,
"_message":parse(msg.d, 12),
"_rawMessage":msg.d,
"_image": image,
"_mid": mid,
"_fromMe": fromMe,
"_ts": ts,
"_ackd": ackd,
"_error": error == true ? "this message failed to send" : "",
})
// If the window is out of focus, alert the user (makes taskbar light up)
windowItem.alert(0)
if (sv.contentY + sv.height >= sv.contentHeight - colMessages.height && sv.contentHeight > sv.height) {
sv.contentY = sv.contentHeight - sv.height
}
}
}
ScrollBar.vertical: ScrollBar{
policy: ScrollBar.AlwaysOn
}
ColumnLayout {
id: colMessages
width: sv.width
ListModel { // MESSAGE OBJECTS ARE STORED HERE ...
id: messagesModel
}
Item { height: 6 }
Repeater { // ... AND DISPLAYED HERE
model: messagesModel
delegate: Message {
handle: _handle
from: _from
displayName: _displayName
message: _message
image: _image
messageID: _mid
fromMe: _fromMe
timestamp: _ts
ackd: _ackd
error: _error
}
}
}
}
messagesListView.positionViewAtEnd()
}
}
}
RowLayout { // THE BOTTOM DRAWER
Rectangle { // MESSAGE ENTRY TEXTFIELD

View File

@ -122,7 +122,6 @@ ColumnLayout { // groupSettingsPane
target: gcd
onSupplyGroupSettings: function(gid, name, server, invite, accepted, addrbooknames, addrbookaddrs) {
console.log("Supplied " + gid + " " + name)
gsp.groupID = gid
toolbar.text = name
txtGroupName.text = name

View File

@ -151,7 +151,6 @@ ColumnLayout {
}
onSupplyGroupSettings: function(gid, name, server, invite, accepted, addrbooknames, addrbookaddrs) {
console.log("Supplied " + gid + " " + name + "Accepted " + accepted)
overlay.name = name
overlay.accepted = accepted
overlay.inGroup = true

View File

@ -14,6 +14,7 @@ RowLayout {
height: Math.max(imgProfile.height, rectMessageBubble.height)
property alias message: lbl.text
property string rawMessage
property string from
property string handle
property string displayName
@ -112,7 +113,7 @@ RowLayout {
padding: 6
leftPadding: 10
font.pixelSize: gcd.themeScale * 12
selectByMouse: true
selectByMouse: false
readOnly: true
width: Math.min(dummy.width, root.parent.width - (imgProfile.visible ? imgProfile.width : 0) - 40)
wrapMode: TextEdit.Wrap
@ -160,5 +161,22 @@ RowLayout {
}
}
}
TextEdit {
id: copyhelper
visible: false
text: root.rawMessage
}
MouseArea {
anchors.fill: parent
onPressAndHold: {
copyhelper.selectAll()
copyhelper.copy()
gcd.popup("message copied")
}
}
}
}