Ignore unknown old messages
This commit is contained in:
parent
bd213bf550
commit
dbab44c945
1 changed files with 18 additions and 0 deletions
18
portal.go
18
portal.go
|
@ -23,6 +23,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
_ "image/gif"
|
_ "image/gif"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
@ -509,6 +510,14 @@ func (portal *Portal) handleExistingMessage(ctx context.Context, source *User, e
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func idToInt(id string) int {
|
||||||
|
i, err := strconv.Atoi(id)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
func (portal *Portal) handleMessage(source *User, evt *gmproto.Message) {
|
func (portal *Portal) handleMessage(source *User, evt *gmproto.Message) {
|
||||||
eventTS := time.UnixMicro(evt.GetTimestamp())
|
eventTS := time.UnixMicro(evt.GetTimestamp())
|
||||||
if eventTS.After(portal.lastMessageTS) {
|
if eventTS.After(portal.lastMessageTS) {
|
||||||
|
@ -518,6 +527,7 @@ func (portal *Portal) handleMessage(source *User, evt *gmproto.Message) {
|
||||||
Str("message_id", evt.MessageID).
|
Str("message_id", evt.MessageID).
|
||||||
Str("participant_id", evt.ParticipantID).
|
Str("participant_id", evt.ParticipantID).
|
||||||
Str("status", evt.GetMessageStatus().GetStatus().String()).
|
Str("status", evt.GetMessageStatus().GetStatus().String()).
|
||||||
|
Time("message_timestamp", eventTS).
|
||||||
Str("action", "handle google message").
|
Str("action", "handle google message").
|
||||||
Logger()
|
Logger()
|
||||||
ctx := log.WithContext(context.TODO())
|
ctx := log.WithContext(context.TODO())
|
||||||
|
@ -527,6 +537,14 @@ func (portal *Portal) handleMessage(source *User, evt *gmproto.Message) {
|
||||||
if evt.GetMessageStatus().GetStatus() == gmproto.MessageStatusType_MESSAGE_DELETED {
|
if evt.GetMessageStatus().GetStatus() == gmproto.MessageStatusType_MESSAGE_DELETED {
|
||||||
log.Debug().Msg("Not handling unknown deleted message")
|
log.Debug().Msg("Not handling unknown deleted message")
|
||||||
return
|
return
|
||||||
|
} else if eventTS.Add(24 * time.Hour).Before(time.Now()) {
|
||||||
|
lastMessage, err := portal.bridge.DB.Message.GetLastInChat(ctx, portal.Key)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Err(err).Msg("Failed to get last message to check if received old message is too old")
|
||||||
|
} else if lastMessage != nil && lastMessage.Timestamp.After(eventTS) && idToInt(lastMessage.ID) > idToInt(evt.MessageID) {
|
||||||
|
log.Debug().Msg("Not handling old message")
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
converted := portal.convertGoogleMessage(ctx, source, evt, false)
|
converted := portal.convertGoogleMessage(ctx, source, evt, false)
|
||||||
|
|
Loading…
Reference in a new issue