From 4dd09dacb46cfb9e4c8d7704db3431435e4b124e Mon Sep 17 00:00:00 2001 From: Aine Date: Mon, 17 Oct 2022 19:01:21 +0300 Subject: [PATCH] move migration to the postmoogle inital room sync --- bot/data.go | 1 + bot/settings_room.go | 78 ++++++++++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 31 deletions(-) diff --git a/bot/data.go b/bot/data.go index e29f645..f100ae8 100644 --- a/bot/data.go +++ b/bot/data.go @@ -41,6 +41,7 @@ func (b *Bot) syncRooms() error { if serr != nil { continue } + b.migrateRoomSettings(roomID) mailbox := cfg.Mailbox() if mailbox != "" { b.rooms.Store(mailbox, roomID) diff --git a/bot/settings_room.go b/bot/settings_room.go index abf86b1..349ffeb 100644 --- a/bot/settings_room.go +++ b/bot/settings_room.go @@ -89,40 +89,10 @@ func (s roomSettings) SpamcheckMX() bool { } func (s roomSettings) Spamlist() []string { - s.migrateSpamlist() return utils.StringSlice(s.Get(roomOptionSpamlist)) } -// ContentOptions converts room display settings to content options -func (s roomSettings) ContentOptions() *utils.ContentOptions { - return &utils.ContentOptions{ - HTML: !s.NoHTML(), - Sender: !s.NoSender(), - Recipient: !s.NoRecipient(), - Subject: !s.NoSubject(), - Threads: !s.NoThreads(), - - FromKey: eventFromKey, - SubjectKey: eventSubjectKey, - MessageIDKey: eventMessageIDkey, - InReplyToKey: eventInReplyToKey, - } -} - -func (b *Bot) getRoomSettings(roomID id.RoomID) (roomSettings, error) { - config, err := b.lp.GetRoomAccountData(roomID, acRoomSettingsKey) - if config == nil { - config = map[string]string{} - } - - return config, utils.UnwrapError(err) -} - -func (b *Bot) setRoomSettings(roomID id.RoomID, cfg roomSettings) error { - return utils.UnwrapError(b.lp.SetRoomAccountData(roomID, acRoomSettingsKey, cfg)) -} - -func (s roomSettings) migrateSpamlist() { +func (s roomSettings) migrateSpamlistSettings() { uniq := map[string]struct{}{} emails := utils.StringSlice(s.Get("spamlist:emails")) localparts := utils.StringSlice(s.Get("spamlist:localparts")) @@ -166,3 +136,49 @@ func (s roomSettings) migrateSpamlist() { } s.Set(roomOptionSpamlist, strings.Join(spamlist, ",")) } + +// ContentOptions converts room display settings to content options +func (s roomSettings) ContentOptions() *utils.ContentOptions { + return &utils.ContentOptions{ + HTML: !s.NoHTML(), + Sender: !s.NoSender(), + Recipient: !s.NoRecipient(), + Subject: !s.NoSubject(), + Threads: !s.NoThreads(), + + FromKey: eventFromKey, + SubjectKey: eventSubjectKey, + MessageIDKey: eventMessageIDkey, + InReplyToKey: eventInReplyToKey, + } +} + +func (b *Bot) getRoomSettings(roomID id.RoomID) (roomSettings, error) { + config, err := b.lp.GetRoomAccountData(roomID, acRoomSettingsKey) + if config == nil { + config = map[string]string{} + } + + return config, utils.UnwrapError(err) +} + +func (b *Bot) setRoomSettings(roomID id.RoomID, cfg roomSettings) error { + return utils.UnwrapError(b.lp.SetRoomAccountData(roomID, acRoomSettingsKey, cfg)) +} + +func (b *Bot) migrateRoomSettings(roomID id.RoomID) { + cfg, err := b.getRoomSettings(roomID) + if err != nil { + b.log.Error("cannot retrieve room settings: %v", err) + return + } + + if cfg["spamlist:emails"] == "" && cfg["spamlist:localparts"] == "" && cfg["spamlist:hosts"] == "" { + return + } + cfg.migrateSpamlistSettings() + err = b.setRoomSettings(roomID, cfg) + if err != nil { + b.log.Error("cannot migrate room settings: %v", err) + } +}