Add message and status fields to status events
This commit is contained in:
parent
7ccc0d005e
commit
6f5070b243
2
go.mod
2
go.mod
|
@ -15,7 +15,7 @@ require (
|
|||
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e
|
||||
google.golang.org/protobuf v1.28.0
|
||||
maunium.net/go/maulogger/v2 v2.3.2
|
||||
maunium.net/go/mautrix v0.11.1-0.20220711120626-546455a7c0ef
|
||||
maunium.net/go/mautrix v0.11.1-0.20220712101332-3467963a8fe8
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
4
go.sum
4
go.sum
|
@ -108,5 +108,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.11.1-0.20220711120626-546455a7c0ef h1:XCq8B290fN3IsoLhng/+I3puv6FoW9SanDJqvOJ0O+4=
|
||||
maunium.net/go/mautrix v0.11.1-0.20220711120626-546455a7c0ef/go.mod h1:85mjebfgKX7jjca7XNKTt7lHueX3YQsFUU+5o/FxpTw=
|
||||
maunium.net/go/mautrix v0.11.1-0.20220712101332-3467963a8fe8 h1:/i2u7iVWhfRcHieby7+uhog6k9yzIauYqVCESpCfw4s=
|
||||
maunium.net/go/mautrix v0.11.1-0.20220712101332-3467963a8fe8/go.mod h1:85mjebfgKX7jjca7XNKTt7lHueX3YQsFUU+5o/FxpTw=
|
||||
|
|
|
@ -61,7 +61,7 @@ var (
|
|||
errTimeoutBeforeHandling = errors.New("message timed out before handling was started")
|
||||
)
|
||||
|
||||
func errorToStatusReason(err error) (reason event.MessageStatusReason, isCertain, canRetry, sendNotice bool) {
|
||||
func errorToStatusReason(err error) (reason event.MessageStatusReason, status event.MessageStatus, isCertain, sendNotice bool, humanMessage string) {
|
||||
switch {
|
||||
case errors.Is(err, whatsmeow.ErrBroadcastListUnsupported),
|
||||
errors.Is(err, errUnexpectedParsedContentType),
|
||||
|
@ -71,28 +71,30 @@ func errorToStatusReason(err error) (reason event.MessageStatusReason, isCertain
|
|||
errors.Is(err, whatsmeow.ErrRecipientADJID),
|
||||
errors.Is(err, errBroadcastReactionNotSupported),
|
||||
errors.Is(err, errBroadcastSendDisabled):
|
||||
return event.MessageStatusUnsupported, true, false, true
|
||||
return event.MessageStatusUnsupported, event.MessageStatusFail, true, true, ""
|
||||
case errors.Is(err, errTimeoutBeforeHandling):
|
||||
return event.MessageStatusTooOld, true, true, true
|
||||
case errors.Is(err, context.DeadlineExceeded), errors.Is(err, errMessageTakingLong):
|
||||
return event.MessageStatusTooOld, false, true, true
|
||||
return event.MessageStatusTooOld, event.MessageStatusRetriable, true, true, "the message was too old when it reached the bridge, so it was not handled"
|
||||
case errors.Is(err, context.DeadlineExceeded):
|
||||
return event.MessageStatusTooOld, event.MessageStatusRetriable, false, true, "handling the message took too long and was cancelled"
|
||||
case errors.Is(err, errMessageTakingLong):
|
||||
return event.MessageStatusTooOld, event.MessageStatusPending, false, true, err.Error()
|
||||
case errors.Is(err, errTargetNotFound),
|
||||
errors.Is(err, errTargetIsFake),
|
||||
errors.Is(err, errReactionDatabaseNotFound),
|
||||
errors.Is(err, errReactionTargetNotFound),
|
||||
errors.Is(err, errTargetSentBySomeoneElse):
|
||||
return event.MessageStatusGenericError, true, false, false
|
||||
return event.MessageStatusGenericError, event.MessageStatusFail, true, false, ""
|
||||
case errors.Is(err, whatsmeow.ErrNotConnected),
|
||||
errors.Is(err, errUserNotConnected):
|
||||
return event.MessageStatusGenericError, true, true, true
|
||||
return event.MessageStatusGenericError, event.MessageStatusRetriable, true, true, ""
|
||||
case errors.Is(err, errUserNotLoggedIn),
|
||||
errors.Is(err, errDifferentUser):
|
||||
return event.MessageStatusGenericError, true, true, false
|
||||
return event.MessageStatusGenericError, event.MessageStatusRetriable, true, false, ""
|
||||
case errors.Is(err, errMessageDisconnected),
|
||||
errors.Is(err, errMessageRetryDisconnected):
|
||||
return event.MessageStatusGenericError, false, true, true
|
||||
return event.MessageStatusGenericError, event.MessageStatusRetriable, false, true, ""
|
||||
default:
|
||||
return event.MessageStatusGenericError, false, true, true
|
||||
return event.MessageStatusGenericError, event.MessageStatusRetriable, false, true, ""
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,17 +145,15 @@ func (portal *Portal) sendStatusEvent(evtID, lastRetry id.EventID, err error) {
|
|||
Type: event.RelReference,
|
||||
EventID: evtID,
|
||||
},
|
||||
Success: err == nil,
|
||||
LastRetry: lastRetry,
|
||||
}
|
||||
if !content.Success {
|
||||
reason, isCertain, canRetry, _ := errorToStatusReason(err)
|
||||
content.Reason = reason
|
||||
content.IsCertain = &isCertain
|
||||
content.CanRetry = &canRetry
|
||||
content.StillWorking = errors.Is(err, errMessageTakingLong)
|
||||
if err == nil {
|
||||
content.Status = event.MessageStatusSuccess
|
||||
} else {
|
||||
content.Reason, content.Status, _, _, content.Message = errorToStatusReason(err)
|
||||
content.Error = err.Error()
|
||||
}
|
||||
content.FillLegacyBooleans()
|
||||
_, err = intent.SendMessageEvent(portal.MXID, event.BeeperMessageStatus, &content)
|
||||
if err != nil {
|
||||
portal.log.Warnln("Failed to send message status event:", err)
|
||||
|
@ -195,12 +195,9 @@ func (portal *Portal) sendMessageMetrics(evt *event.Event, err error, part strin
|
|||
level = log.LevelDebug
|
||||
}
|
||||
portal.log.Logfln(level, "%s %s %s from %s: %v", part, msgType, evtDescription, evt.Sender, err)
|
||||
reason, isCertain, _, sendNotice := errorToStatusReason(err)
|
||||
status := bridge.ReasonToCheckpointStatus(reason)
|
||||
if errors.Is(err, errMessageTakingLong) {
|
||||
status = bridge.MsgStatusWillRetry
|
||||
}
|
||||
portal.bridge.SendMessageCheckpoint(evt, bridge.MsgStepRemote, err, status, ms.getRetryNum())
|
||||
reason, status, isCertain, sendNotice, _ := errorToStatusReason(err)
|
||||
checkpointStatus := bridge.ReasonToCheckpointStatus(reason, status)
|
||||
portal.bridge.SendMessageCheckpoint(evt, bridge.MsgStepRemote, err, checkpointStatus, ms.getRetryNum())
|
||||
if sendNotice {
|
||||
ms.setNoticeID(portal.sendErrorMessage(evt, err, isCertain, ms.getNoticeID()))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue