From bb84e8f46f3748fbbf765a38bbd86f3a4a2f20b2 Mon Sep 17 00:00:00 2001 From: erinn Date: Tue, 8 Dec 2020 23:03:22 -0800 Subject: [PATCH] fix acks, fix lists and bulletin for groups --- go/ui/gcd.go | 2 ++ go/ui/messagemodel.go | 19 ++++++------------- qml/opaque | 2 +- qml/overlays/ChatOverlay.qml | 6 +++--- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/go/ui/gcd.go b/go/ui/gcd.go index 7754febd..5d3fe715 100644 --- a/go/ui/gcd.go +++ b/go/ui/gcd.go @@ -352,6 +352,8 @@ func (this *GrandCentralDispatcher) loadMessagesPaneHelper(handle string) { this.SetToolbarTitle(nick) } + this.legacyLoadOverlay(handle) + return } // ELSE LOAD CONTACT diff --git a/go/ui/messagemodel.go b/go/ui/messagemodel.go index 3c0ad573..8446aa2a 100644 --- a/go/ui/messagemodel.go +++ b/go/ui/messagemodel.go @@ -4,10 +4,10 @@ import ( "cwtch.im/cwtch/model" "cwtch.im/ui/go/the" "encoding/hex" + "fmt" "git.openprivacy.ca/openprivacy/log" "github.com/therecipe/qt/core" "reflect" - "strings" ) type MessageModel struct { @@ -119,6 +119,8 @@ func (this *MessageModel) num() int { return 0 } +// caveat emptor: accessing messages this way returns a MessageWrapper QObject whose properties have not yet been +// initialized (but soon will be). accessing .Message parent class properties instead should work right away. func (this *MessageModel) getMessage(idx int) *MessageWrapper { modelmsg := model.Message{Message: "[an unexpected cwtch error occurred]"} var ackd bool @@ -170,20 +172,11 @@ func (this *MessageModel) data(index *core.QModelIndex, role int) *core.QVariant role = index.Column() + int(core.Qt__UserRole) + 1 } - // modelData-element [role]-field value (aka the data ~_~) - mderfv := reflect.ValueOf(*this.getMessage(index.Row())).Field(role - int(core.Qt__UserRole) - 1) - typeStr := reflect.TypeOf([]MessageWrapper{}).Elem().Field(role - int(core.Qt__UserRole) - 1).Type.String() - if typeStr == "string" { - return core.NewQVariant1(mderfv.String()) - } else if strings.HasPrefix(typeStr, "int") { - return core.NewQVariant1(mderfv.Int()) - } else if strings.HasPrefix(typeStr, "float") { - return core.NewQVariant1(mderfv.Float()) - } else if typeStr == "bool" { - return core.NewQVariant1(mderfv.Bool()) + if role == this.ackIdx { + return core.NewQVariant1((*this.getMessage(index.Row())).Acknowledged) } - return core.NewQVariant1("unknown type " + typeStr) + return core.NewQVariant1(fmt.Sprintf("unimplemented role %s (%d)", this.roleNames()[role].ConstData(), role)) } func (this *MessageModel) headerData(section int, orientation core.Qt__Orientation, role int) *core.QVariant { diff --git a/qml/opaque b/qml/opaque index dd8dde1f..48d9d1d1 160000 --- a/qml/opaque +++ b/qml/opaque @@ -1 +1 @@ -Subproject commit dd8dde1fb38e296530570d31e95780ff707e2895 +Subproject commit 48d9d1d11f4efe612419ea66371c4b147f74667d diff --git a/qml/overlays/ChatOverlay.qml b/qml/overlays/ChatOverlay.qml index 250b95aa..b34472e8 100644 --- a/qml/overlays/ChatOverlay.qml +++ b/qml/overlays/ChatOverlay.qml @@ -108,13 +108,13 @@ W.Overlay { from: msg.peerID displayName: mm.getNick(msg.peerID) message: obj.o == 1 ? obj.d : "" - //rawMessage: msg.rawMessage + rawMessage: msg.rawMessage image: mm.getImage(msg.peerID) messageID: msg.signature fromMe: msg.peerID == gcd.selectedProfile timestamp: parseInt(msg.timestamp) - //ackd: acknowledged - //error: msg.error + ackd: acknowledged + error: msg.error calendarEvent: msg.peerID == "calendar" // listview doesnt do anchors right // https://stackoverflow.com/questions/31381997/why-does-anchors-fill-does-not-work-in-a-qml-listviews-delegates-subviews-and/31382307