refactor rooms/roomsmu to sync.Map
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
/local.db
|
/local.db
|
||||||
|
/local.db-journal
|
||||||
|
|||||||
16
bot/bot.go
16
bot/bot.go
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user