forked from MirrorHub/mautrix-whatsapp
Only create goroutines for next hour of disappearing messages
This commit is contained in:
parent
3d457d005e
commit
a61a3f5cf9
3 changed files with 15 additions and 9 deletions
|
@ -54,7 +54,7 @@ func (dmq *DisappearingMessageQuery) NewWithValues(roomID id.RoomID, eventID id.
|
||||||
|
|
||||||
const (
|
const (
|
||||||
getAllScheduledDisappearingMessagesQuery = `
|
getAllScheduledDisappearingMessagesQuery = `
|
||||||
SELECT room_id, event_id, expire_in, expire_at FROM disappearing_message WHERE expire_at IS NOT NULL
|
SELECT room_id, event_id, expire_in, expire_at FROM disappearing_message WHERE expire_at IS NOT NULL AND expire_at <= $1
|
||||||
`
|
`
|
||||||
startUnscheduledDisappearingMessagesInRoomQuery = `
|
startUnscheduledDisappearingMessagesInRoomQuery = `
|
||||||
UPDATE disappearing_message SET expire_at=$1+expire_in WHERE room_id=$2 AND expire_at IS NULL
|
UPDATE disappearing_message SET expire_at=$1+expire_in WHERE room_id=$2 AND expire_at IS NULL
|
||||||
|
@ -62,8 +62,8 @@ const (
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
func (dmq *DisappearingMessageQuery) GetAllScheduled() (messages []*DisappearingMessage) {
|
func (dmq *DisappearingMessageQuery) GetUpcomingScheduled(duration time.Duration) (messages []*DisappearingMessage) {
|
||||||
rows, err := dmq.db.Query(getAllScheduledDisappearingMessagesQuery)
|
rows, err := dmq.db.Query(getAllScheduledDisappearingMessagesQuery, time.Now().Add(duration).UnixMilli())
|
||||||
if err != nil || rows == nil {
|
if err != nil || rows == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
16
disappear.go
16
disappear.go
|
@ -42,15 +42,21 @@ func (portal *Portal) ScheduleDisappearing() {
|
||||||
if !portal.bridge.Config.Bridge.DisappearingMessagesInGroups && portal.IsGroupChat() {
|
if !portal.bridge.Config.Bridge.DisappearingMessagesInGroups && portal.IsGroupChat() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
nowPlusHour := time.Now().Add(1 * time.Hour)
|
||||||
for _, msg := range portal.bridge.DB.DisappearingMessage.StartAllUnscheduledInRoom(portal.MXID) {
|
for _, msg := range portal.bridge.DB.DisappearingMessage.StartAllUnscheduledInRoom(portal.MXID) {
|
||||||
go portal.sleepAndDelete(msg)
|
if msg.ExpireAt.Before(nowPlusHour) {
|
||||||
|
go portal.sleepAndDelete(msg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bridge *Bridge) RestartAllDisappearing() {
|
func (bridge *Bridge) DisappearingLoop() {
|
||||||
for _, msg := range bridge.DB.DisappearingMessage.GetAllScheduled() {
|
for {
|
||||||
portal := bridge.GetPortalByMXID(msg.RoomID)
|
for _, msg := range bridge.DB.DisappearingMessage.GetUpcomingScheduled(1 * time.Hour) {
|
||||||
go portal.sleepAndDelete(msg)
|
portal := bridge.GetPortalByMXID(msg.RoomID)
|
||||||
|
go portal.sleepAndDelete(msg)
|
||||||
|
}
|
||||||
|
time.Sleep(1 * time.Hour)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
main.go
2
main.go
|
@ -333,7 +333,7 @@ func (bridge *Bridge) Start() {
|
||||||
if bridge.Config.Bridge.ResendBridgeInfo {
|
if bridge.Config.Bridge.ResendBridgeInfo {
|
||||||
go bridge.ResendBridgeInfo()
|
go bridge.ResendBridgeInfo()
|
||||||
}
|
}
|
||||||
go bridge.RestartAllDisappearing()
|
go bridge.DisappearingLoop()
|
||||||
bridge.AS.Ready = true
|
bridge.AS.Ready = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue