refactor rooms/roomsmu to sync.Map

This commit is contained in:
Aine
2022-08-25 22:38:45 +03:00
parent b0c274491f
commit 0a5bc5d989
4 changed files with 13 additions and 20 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
/local.db /local.db
/local.db-journal

View File

@@ -23,8 +23,7 @@ type Bot struct {
federation bool federation bool
prefix string prefix string
domain string domain string
rooms map[string]id.RoomID rooms sync.Map
roomsmu *sync.Mutex
log *logger.Logger log *logger.Logger
lp *linkpearl.Linkpearl lp *linkpearl.Linkpearl
handledJoinEvents sync.Map handledJoinEvents sync.Map
@@ -35,9 +34,9 @@ func New(lp *linkpearl.Linkpearl, log *logger.Logger, prefix, domain string, noo
return &Bot{ return &Bot{
noowner: noowner, noowner: noowner,
federation: federation, federation: federation,
roomsmu: &sync.Mutex{},
prefix: prefix, prefix: prefix,
domain: domain, domain: domain,
rooms: sync.Map{},
log: log, log: log,
lp: lp, 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 // GetMappings returns mapping of mailbox = room
func (b *Bot) GetMapping(mailbox string) (id.RoomID, bool) { func (b *Bot) GetMapping(mailbox string) (id.RoomID, bool) {
if len(b.rooms) == 0 { v, ok := b.rooms.Load(mailbox)
err := b.syncRooms() if !ok {
if err != nil { return "", ok
return "", false
} }
roomID, ok := v.(id.RoomID)
if !ok {
return "", ok
} }
roomID, ok := b.rooms[mailbox]
return roomID, ok return roomID, ok
} }

View File

@@ -154,9 +154,7 @@ func (b *Bot) runStop(ctx context.Context) {
return return
} }
b.roomsmu.Lock() b.rooms.Delete(mailbox)
delete(b.rooms, mailbox)
b.roomsmu.Unlock()
err = b.setSettings(evt.RoomID, settings{}) err = b.setSettings(evt.RoomID, settings{})
if err != nil { if err != nil {
@@ -230,9 +228,7 @@ func (b *Bot) setOption(ctx context.Context, name, value string) {
if name == optionMailbox { if name == optionMailbox {
msg = msg + "@" + b.domain msg = msg + "@" + b.domain
cfg.Set(optionOwner, evt.Sender.String()) cfg.Set(optionOwner, evt.Sender.String())
b.roomsmu.Lock() b.rooms.Store(value, evt.RoomID)
b.rooms[value] = evt.RoomID
b.roomsmu.Unlock()
} }
err = b.setSettings(evt.RoomID, cfg) err = b.setSettings(evt.RoomID, cfg)

View File

@@ -58,14 +58,10 @@ func (b *Bot) migrate() error {
} }
func (b *Bot) syncRooms() error { func (b *Bot) syncRooms() error {
b.roomsmu.Lock()
defer b.roomsmu.Unlock()
resp, err := b.lp.GetClient().JoinedRooms() resp, err := b.lp.GetClient().JoinedRooms()
if err != nil { if err != nil {
return err return err
} }
b.rooms = make(map[string]id.RoomID, len(resp.JoinedRooms))
for _, roomID := range resp.JoinedRooms { for _, roomID := range resp.JoinedRooms {
b.migrateSettings(roomID) b.migrateSettings(roomID)
cfg, serr := b.getSettings(roomID) cfg, serr := b.getSettings(roomID)
@@ -75,7 +71,7 @@ func (b *Bot) syncRooms() error {
} }
mailbox := cfg.Mailbox() mailbox := cfg.Mailbox()
if mailbox != "" { if mailbox != "" {
b.rooms[mailbox] = roomID b.rooms.Store(mailbox, roomID)
} }
} }