Fix issue uint64 values with high bit are not supported
in presence (#2562)
* Fix issue #2528 * Use gomatrixserverlib.Timestamp * Use ParseUint instead of ParseInt
This commit is contained in:
parent
f3e8a9a4cb
commit
f76f28e6db
|
@ -144,7 +144,7 @@ func (s *PresenceConsumer) onMessage(ctx context.Context, msg *nats.Msg) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
ts, err := strconv.Atoi(timestamp)
|
ts, err := strconv.ParseUint(timestamp, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -157,12 +157,12 @@ func (s *PresenceConsumer) onMessage(ctx context.Context, msg *nats.Msg) bool {
|
||||||
// already checked, so no need to check error
|
// already checked, so no need to check error
|
||||||
p, _ := types.PresenceFromString(presence)
|
p, _ := types.PresenceFromString(presence)
|
||||||
|
|
||||||
s.EmitPresence(ctx, userID, p, statusMsg, ts, fromSync)
|
s.EmitPresence(ctx, userID, p, statusMsg, gomatrixserverlib.Timestamp(ts), fromSync)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PresenceConsumer) EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts int, fromSync bool) {
|
func (s *PresenceConsumer) EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts gomatrixserverlib.Timestamp, fromSync bool) {
|
||||||
pos, err := s.db.UpdatePresence(ctx, userID, presence, statusMsg, gomatrixserverlib.Timestamp(ts), fromSync)
|
pos, err := s.db.UpdatePresence(ctx, userID, presence, statusMsg, ts, fromSync)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.WithError(err).WithField("user", userID).WithField("presence", presence).Warn("failed to updated presence for user")
|
logrus.WithError(err).WithField("user", userID).WithField("presence", presence).Warn("failed to updated presence for user")
|
||||||
return
|
return
|
||||||
|
|
|
@ -61,7 +61,7 @@ type PresencePublisher interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type PresenceConsumer interface {
|
type PresenceConsumer interface {
|
||||||
EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts int, fromSync bool)
|
EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts gomatrixserverlib.Timestamp, fromSync bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequestPool makes a new RequestPool
|
// NewRequestPool makes a new RequestPool
|
||||||
|
@ -171,7 +171,7 @@ func (rp *RequestPool) updatePresence(db storage.Presence, presence string, user
|
||||||
// the /sync response else we may not return presence: online immediately.
|
// the /sync response else we may not return presence: online immediately.
|
||||||
rp.consumer.EmitPresence(
|
rp.consumer.EmitPresence(
|
||||||
context.Background(), userID, presenceID, newPresence.ClientFields.StatusMsg,
|
context.Background(), userID, presenceID, newPresence.ClientFields.StatusMsg,
|
||||||
int(gomatrixserverlib.AsTimestamp(time.Now())), true,
|
gomatrixserverlib.AsTimestamp(time.Now()), true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (d dummyDB) MaxStreamPositionForPresence(ctx context.Context) (types.Stream
|
||||||
|
|
||||||
type dummyConsumer struct{}
|
type dummyConsumer struct{}
|
||||||
|
|
||||||
func (d dummyConsumer) EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts int, fromSync bool) {
|
func (d dummyConsumer) EmitPresence(ctx context.Context, userID string, presence types.Presence, statusMsg *string, ts gomatrixserverlib.Timestamp, fromSync bool) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue