66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package notifications
|
||
|
||
import (
|
||
"stream-bot/internal/audio" // вместо player
|
||
"stream-bot/internal/db"
|
||
"sync"
|
||
)
|
||
|
||
type Manager struct {
|
||
mu sync.RWMutex
|
||
settings map[string]*db.NotificationSetting
|
||
}
|
||
|
||
func NewManager() (*Manager, error) {
|
||
m := &Manager{
|
||
settings: make(map[string]*db.NotificationSetting),
|
||
}
|
||
if err := m.load(); err != nil {
|
||
return nil, err
|
||
}
|
||
return m, nil
|
||
}
|
||
|
||
func (m *Manager) load() error {
|
||
settings, err := db.GetAllNotificationSettings()
|
||
if err != nil {
|
||
return err
|
||
}
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
for _, s := range settings {
|
||
m.settings[s.EventName] = &s
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (m *Manager) PlayEvent(eventName string) error {
|
||
m.mu.RLock()
|
||
setting, ok := m.settings[eventName]
|
||
m.mu.RUnlock()
|
||
if !ok || !setting.Enabled || setting.SoundFile == "" {
|
||
return nil
|
||
}
|
||
// Используем audio.PlayWithVolume с громкостью из настроек
|
||
return audio.PlayWithVolume(setting.SoundFile, setting.Volume)
|
||
}
|
||
|
||
func (m *Manager) UpdateSetting(ns *db.NotificationSetting) error {
|
||
if err := db.SaveNotificationSetting(ns); err != nil {
|
||
return err
|
||
}
|
||
m.mu.Lock()
|
||
m.settings[ns.EventName] = ns
|
||
m.mu.Unlock()
|
||
return nil
|
||
}
|
||
|
||
func (m *Manager) GetAll() []db.NotificationSetting {
|
||
m.mu.RLock()
|
||
defer m.mu.RUnlock()
|
||
result := make([]db.NotificationSetting, 0, len(m.settings))
|
||
for _, v := range m.settings {
|
||
result = append(result, *v)
|
||
}
|
||
return result
|
||
} |