diff --git a/config/bridge.go b/config/bridge.go index b3f89bf..ee3381f 100644 --- a/config/bridge.go +++ b/config/bridge.go @@ -37,10 +37,11 @@ type BridgeConfig struct { MaxConnectionAttempts int `yaml:"max_connection_attempts"` ReportConnectionRetry bool `yaml:"report_connection_retry"` - InitialChatSync int `yaml:"initial_chat_sync_count"` - InitialHistoryFill int `yaml:"initial_history_fill_count"` - RecoverChatSync int `yaml:"recovery_chat_sync_count"` - RecoverHistory bool `yaml:"recovery_history_backfill"` + InitialChatSync int `yaml:"initial_chat_sync_count"` + InitialHistoryFill int `yaml:"initial_history_fill_count"` + RecoverChatSync int `yaml:"recovery_chat_sync_count"` + RecoverHistory bool `yaml:"recovery_history_backfill"` + SyncChatMaxAge uint64 `yaml:"sync_max_chat_age"` CommandPrefix string `yaml:"command_prefix"` @@ -59,6 +60,7 @@ func (bc *BridgeConfig) setDefaults() { bc.InitialHistoryFill = 20 bc.RecoverChatSync = -1 bc.RecoverHistory = true + bc.SyncChatMaxAge = 259200 } type umBridgeConfig BridgeConfig diff --git a/example-config.yaml b/example-config.yaml index 4475485..4970bee 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -75,6 +75,11 @@ bridge: recovery_chat_sync_limit: -1 # Whether or not to sync history when recovering from downtime. recovery_history_backfill: true + # Maximum number of seconds since last message in chat to skip + # syncing the chat in any case. This setting will take priority + # over both recovery_chat_sync_limit and initial_chat_sync_count. + # Default is 3 days = 259200 seconds + sync_max_chat_age: 259200 # The prefix for commands. Only required in non-management rooms. command_prefix: "!wa" diff --git a/user.go b/user.go index d1131de..ff09156 100644 --- a/user.go +++ b/user.go @@ -312,7 +312,11 @@ func (user *User) syncPortals() { if limit < 0 { limit = len(chats) } + now := uint64(time.Now().Unix()) for i, chat := range chats { + if chat.LastMessageTime + user.bridge.Config.Bridge.SyncChatMaxAge < now { + break + } create := (chat.LastMessageTime >= user.LastConnection && user.LastConnection > 0) || i < limit if len(chat.Portal.MXID) > 0 || create { chat.Portal.Sync(user, chat.Contact)