forked from MirrorHub/mautrix-whatsapp
Send fully read marker too when bridging read receipts to Matrix
This commit is contained in:
parent
cd29b36a07
commit
1ebfeedcb7
3 changed files with 26 additions and 9 deletions
2
go.mod
2
go.mod
|
@ -15,7 +15,7 @@ require (
|
|||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||
maunium.net/go/mauflag v1.0.0
|
||||
maunium.net/go/maulogger/v2 v2.3.2
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117133225-66726fa3ee9a
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117200125-6d9d537973fa
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
4
go.sum
4
go.sum
|
@ -222,5 +222,5 @@ maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
|
|||
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
|
||||
maunium.net/go/maulogger/v2 v2.3.2 h1:1XmIYmMd3PoQfp9J+PaHhpt80zpfmMqaShzUTC7FwY0=
|
||||
maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117133225-66726fa3ee9a h1:Ydo0Kj/mlUw/OAXzkDGMDc2kdCJ9MPj0aP15Kh8qLoE=
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117133225-66726fa3ee9a/go.mod h1:4XljZZGZiIlpfbQ+Tt2ykjapskJ8a7Z2i9y/+YaceF8=
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117200125-6d9d537973fa h1:PA9cvjbiV2tqd5qgrnk42G4HfSLVWWqs27dKKvG1tCQ=
|
||||
maunium.net/go/mautrix v0.10.11-0.20220117200125-6d9d537973fa/go.mod h1:4XljZZGZiIlpfbQ+Tt2ykjapskJ8a7Z2i9y/+YaceF8=
|
||||
|
|
29
user.go
29
user.go
|
@ -659,6 +659,12 @@ type CustomReadReceipt struct {
|
|||
DoublePuppetSource string `json:"fi.mau.double_puppet_source,omitempty"`
|
||||
}
|
||||
|
||||
type CustomReadMarkers struct {
|
||||
mautrix.ReqSetReadMarkers
|
||||
ReadExtra CustomReadReceipt `json:"com.beeper.read.extra"`
|
||||
FullyReadExtra CustomReadReceipt `json:"com.beeper.fully_read.extra"`
|
||||
}
|
||||
|
||||
func (user *User) syncChatDoublePuppetDetails(portal *Portal, justCreated bool) {
|
||||
doublePuppet := portal.bridge.GetPuppetByCustomMXID(user.MXID)
|
||||
if doublePuppet == nil {
|
||||
|
@ -871,12 +877,8 @@ func (user *User) handleReceipt(receipt *events.Receipt) {
|
|||
}
|
||||
}
|
||||
intent := user.bridge.GetPuppetByJID(receipt.Sender).IntentFor(portal)
|
||||
var rrContent CustomReadReceipt
|
||||
if intent.IsCustomPuppet {
|
||||
rrContent.DoublePuppetSource = doublePuppetValue
|
||||
}
|
||||
for _, msg := range markAsRead {
|
||||
err := intent.MarkReadWithContent(portal.MXID, msg.MXID, &rrContent)
|
||||
err := intent.SetReadMarkers(portal.MXID, makeReadMarkerContent(msg.MXID, intent.IsCustomPuppet))
|
||||
if err != nil {
|
||||
user.log.Warnfln("Failed to mark message %s as read by %s: %v", msg.MXID, intent.UserID, err)
|
||||
} else {
|
||||
|
@ -885,6 +887,21 @@ func (user *User) handleReceipt(receipt *events.Receipt) {
|
|||
}
|
||||
}
|
||||
|
||||
func makeReadMarkerContent(eventID id.EventID, doublePuppet bool) CustomReadMarkers {
|
||||
var extra CustomReadReceipt
|
||||
if doublePuppet {
|
||||
extra.DoublePuppetSource = doublePuppetValue
|
||||
}
|
||||
return CustomReadMarkers{
|
||||
ReqSetReadMarkers: mautrix.ReqSetReadMarkers{
|
||||
Read: eventID,
|
||||
FullyRead: eventID,
|
||||
},
|
||||
ReadExtra: extra,
|
||||
FullyReadExtra: extra,
|
||||
}
|
||||
}
|
||||
|
||||
func (user *User) markSelfReadFull(portal *Portal) {
|
||||
puppet := user.bridge.GetPuppetByCustomMXID(user.MXID)
|
||||
if puppet == nil || puppet.CustomIntent() == nil {
|
||||
|
@ -895,7 +912,7 @@ func (user *User) markSelfReadFull(portal *Portal) {
|
|||
return
|
||||
}
|
||||
user.SetLastReadTS(portal.Key, lastMessage.Timestamp)
|
||||
err := puppet.CustomIntent().MarkReadWithContent(portal.MXID, lastMessage.MXID, &CustomReadReceipt{DoublePuppetSource: doublePuppetValue})
|
||||
err := puppet.CustomIntent().SetReadMarkers(portal.MXID, makeReadMarkerContent(lastMessage.MXID, true))
|
||||
if err != nil {
|
||||
user.log.Warnfln("Failed to mark %s (last message) in %s as read: %v", lastMessage.MXID, portal.MXID, err)
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue