|
@@ -9,6 +9,7 @@ import (
|
|
|
"sync"
|
|
|
"time"
|
|
|
|
|
|
+ "maunium.net/go/mautrix/bridge/status"
|
|
|
"maunium.net/go/mautrix/crypto/attachment"
|
|
|
"maunium.net/go/mautrix/util/variationselector"
|
|
|
|
|
@@ -984,7 +985,7 @@ var (
|
|
|
errUnknownEmoji = errors.New("unknown emoji")
|
|
|
)
|
|
|
|
|
|
-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, errUnknownMsgType),
|
|
|
errors.Is(err, errUnknownRelationType),
|
|
@@ -993,19 +994,19 @@ func errorToStatusReason(err error) (reason event.MessageStatusReason, isCertain
|
|
|
errors.Is(err, id.InvalidContentURI),
|
|
|
errors.Is(err, attachment.UnsupportedVersion),
|
|
|
errors.Is(err, attachment.UnsupportedAlgorithm):
|
|
|
- return event.MessageStatusUnsupported, true, false, true
|
|
|
+ return event.MessageStatusUnsupported, event.MessageStatusFail, true, true, ""
|
|
|
case errors.Is(err, attachment.HashMismatch),
|
|
|
errors.Is(err, attachment.InvalidKey),
|
|
|
errors.Is(err, attachment.InvalidInitVector):
|
|
|
- return event.MessageStatusUndecryptable, true, false, true
|
|
|
+ return event.MessageStatusUndecryptable, event.MessageStatusFail, true, true, ""
|
|
|
case errors.Is(err, errUserNotReceiver):
|
|
|
- return event.MessageStatusNoPermission, true, false, false
|
|
|
+ return event.MessageStatusNoPermission, event.MessageStatusFail, true, false, ""
|
|
|
case errors.Is(err, errUnknownEditTarget):
|
|
|
- return event.MessageStatusGenericError, true, false, false
|
|
|
+ return event.MessageStatusGenericError, event.MessageStatusFail, true, false, ""
|
|
|
case errors.Is(err, errTargetNotFound):
|
|
|
- return event.MessageStatusGenericError, true, false, true
|
|
|
+ return event.MessageStatusGenericError, event.MessageStatusFail, true, true, ""
|
|
|
default:
|
|
|
- return event.MessageStatusGenericError, false, true, true
|
|
|
+ return event.MessageStatusGenericError, event.MessageStatusRetriable, false, true, ""
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1025,13 +1026,12 @@ func (portal *Portal) sendStatusEvent(evtID id.EventID, err error) {
|
|
|
Type: event.RelReference,
|
|
|
EventID: evtID,
|
|
|
},
|
|
|
- Success: err == nil,
|
|
|
+ Status: event.MessageStatusSuccess,
|
|
|
}
|
|
|
- if !content.Success {
|
|
|
- reason, isCertain, canRetry, _ := errorToStatusReason(err)
|
|
|
- content.Reason = reason
|
|
|
- content.IsCertain = &isCertain
|
|
|
- content.CanRetry = &canRetry
|
|
|
+ if err == nil {
|
|
|
+ content.Status = event.MessageStatusSuccess
|
|
|
+ } else {
|
|
|
+ content.Reason, content.Status, _, _, content.Message = errorToStatusReason(err)
|
|
|
content.Error = err.Error()
|
|
|
}
|
|
|
_, err = intent.SendMessageEvent(portal.MXID, event.BeeperMessageStatus, &content)
|
|
@@ -1062,9 +1062,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)
|
|
|
- portal.bridge.SendMessageCheckpoint(evt, bridge.MsgStepRemote, err, status, 0)
|
|
|
+ reason, statusCode, isCertain, sendNotice, _ := errorToStatusReason(err)
|
|
|
+ checkpointStatus := status.ReasonToCheckpointStatus(reason, statusCode)
|
|
|
+ portal.bridge.SendMessageCheckpoint(evt, status.MsgStepRemote, err, checkpointStatus, 0)
|
|
|
if sendNotice {
|
|
|
portal.sendErrorMessage(msgType, err.Error(), isCertain)
|
|
|
}
|
|
@@ -1072,7 +1072,7 @@ func (portal *Portal) sendMessageMetrics(evt *event.Event, err error, part strin
|
|
|
} else {
|
|
|
portal.log.Debugfln("Handled Matrix %s %s", msgType, evtDescription)
|
|
|
portal.sendDeliveryReceipt(evt.ID)
|
|
|
- portal.bridge.SendMessageSuccessCheckpoint(evt, bridge.MsgStepRemote, 0)
|
|
|
+ portal.bridge.SendMessageSuccessCheckpoint(evt, status.MsgStepRemote, 0)
|
|
|
portal.sendStatusEvent(evt.ID, nil)
|
|
|
}
|
|
|
}
|