diff --git a/.gitignore b/.gitignore index 586695e..84a5e2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /local.db +/local.db-journal diff --git a/bot/bot.go b/bot/bot.go index 166eed3..c0e3b33 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -23,8 +23,7 @@ type Bot struct { federation bool prefix string domain string - rooms map[string]id.RoomID - roomsmu *sync.Mutex + rooms sync.Map log *logger.Logger lp *linkpearl.Linkpearl handledJoinEvents sync.Map @@ -35,9 +34,9 @@ func New(lp *linkpearl.Linkpearl, log *logger.Logger, prefix, domain string, noo return &Bot{ noowner: noowner, federation: federation, - roomsmu: &sync.Mutex{}, prefix: prefix, domain: domain, + rooms: sync.Map{}, log: log, lp: lp, } @@ -170,14 +169,15 @@ func (b *Bot) sendFiles(ctx context.Context, roomID id.RoomID, files []*utils.Fi // GetMappings returns mapping of mailbox = room func (b *Bot) GetMapping(mailbox string) (id.RoomID, bool) { - if len(b.rooms) == 0 { - err := b.syncRooms() - if err != nil { - return "", false - } + v, ok := b.rooms.Load(mailbox) + if !ok { + return "", ok + } + roomID, ok := v.(id.RoomID) + if !ok { + return "", ok } - roomID, ok := b.rooms[mailbox] return roomID, ok } diff --git a/bot/command.go b/bot/command.go index 127dbb2..a77f765 100644 --- a/bot/command.go +++ b/bot/command.go @@ -154,9 +154,7 @@ func (b *Bot) runStop(ctx context.Context) { return } - b.roomsmu.Lock() - delete(b.rooms, mailbox) - b.roomsmu.Unlock() + b.rooms.Delete(mailbox) err = b.setSettings(evt.RoomID, settings{}) if err != nil { @@ -230,9 +228,7 @@ func (b *Bot) setOption(ctx context.Context, name, value string) { if name == optionMailbox { msg = msg + "@" + b.domain cfg.Set(optionOwner, evt.Sender.String()) - b.roomsmu.Lock() - b.rooms[value] = evt.RoomID - b.roomsmu.Unlock() + b.rooms.Store(value, evt.RoomID) } err = b.setSettings(evt.RoomID, cfg) diff --git a/bot/data.go b/bot/data.go index e4705d9..c79b5c4 100644 --- a/bot/data.go +++ b/bot/data.go @@ -58,14 +58,10 @@ func (b *Bot) migrate() error { } func (b *Bot) syncRooms() error { - b.roomsmu.Lock() - defer b.roomsmu.Unlock() - resp, err := b.lp.GetClient().JoinedRooms() if err != nil { return err } - b.rooms = make(map[string]id.RoomID, len(resp.JoinedRooms)) for _, roomID := range resp.JoinedRooms { b.migrateSettings(roomID) cfg, serr := b.getSettings(roomID) @@ -75,7 +71,7 @@ func (b *Bot) syncRooms() error { } mailbox := cfg.Mailbox() if mailbox != "" { - b.rooms[mailbox] = roomID + b.rooms.Store(mailbox, roomID) } }