75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package notifier
|
|
|
|
import (
|
|
"github.com/rs/zerolog"
|
|
"github.com/samber/mo"
|
|
"path/filepath"
|
|
"seanime/internal/database/models"
|
|
"sync"
|
|
)
|
|
|
|
type (
|
|
Notifier struct {
|
|
dataDir mo.Option[string]
|
|
settings mo.Option[*models.NotificationSettings]
|
|
mu sync.Mutex
|
|
logoPath string
|
|
logger mo.Option[*zerolog.Logger]
|
|
}
|
|
|
|
Notification string
|
|
)
|
|
|
|
const (
|
|
AutoDownloader Notification = "Auto Downloader"
|
|
AutoScanner Notification = "Auto Scanner"
|
|
Debrid Notification = "Debrid"
|
|
)
|
|
|
|
var GlobalNotifier = NewNotifier()
|
|
|
|
func init() {
|
|
GlobalNotifier = NewNotifier()
|
|
}
|
|
|
|
func NewNotifier() *Notifier {
|
|
return &Notifier{
|
|
dataDir: mo.None[string](),
|
|
settings: mo.None[*models.NotificationSettings](),
|
|
mu: sync.Mutex{},
|
|
logger: mo.None[*zerolog.Logger](),
|
|
}
|
|
}
|
|
|
|
func (n *Notifier) SetSettings(datadir string, settings *models.NotificationSettings, logger *zerolog.Logger) {
|
|
if datadir == "" || settings == nil {
|
|
return
|
|
}
|
|
|
|
n.mu.Lock()
|
|
n.dataDir = mo.Some(datadir)
|
|
n.settings = mo.Some(settings)
|
|
n.logoPath = filepath.Join(datadir, "logo.png")
|
|
n.logger = mo.Some(logger)
|
|
n.mu.Unlock()
|
|
}
|
|
|
|
func (n *Notifier) canProceed(id Notification) bool {
|
|
if !n.dataDir.IsPresent() || !n.settings.IsPresent() {
|
|
return false
|
|
}
|
|
|
|
if n.settings.MustGet().DisableNotifications {
|
|
return false
|
|
}
|
|
|
|
switch id {
|
|
case AutoDownloader:
|
|
return !n.settings.MustGet().DisableAutoDownloaderNotifications
|
|
case AutoScanner:
|
|
return !n.settings.MustGet().DisableAutoScannerNotifications
|
|
}
|
|
|
|
return false
|
|
}
|