46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
from typing import List, Optional
|
|
from app.notifications.base import NotificationProvider
|
|
from app.config import settings
|
|
|
|
|
|
class NotificationManager:
|
|
_instance = None
|
|
|
|
def __new__(cls):
|
|
if cls._instance is None:
|
|
cls._instance = super().__new__(cls)
|
|
cls._instance._initialized = False
|
|
return cls._instance
|
|
|
|
def __init__(self):
|
|
if self._initialized:
|
|
return
|
|
self.providers: List[NotificationProvider] = []
|
|
self._initialized = True
|
|
|
|
def add_provider(self, provider: NotificationProvider):
|
|
self.providers.append(provider)
|
|
|
|
async def send_notification(self, title: str, content: str):
|
|
for provider in self.providers:
|
|
try:
|
|
await provider.send(title, content)
|
|
except Exception:
|
|
pass
|
|
|
|
def load_providers(self):
|
|
from app.notifications.serverchan import ServerChanProvider
|
|
from app.notifications.pushplus import PushPlusProvider
|
|
|
|
if "serverchan" in settings.NOTIFICATION_PROVIDERS:
|
|
provider = ServerChanProvider()
|
|
if provider.validate_config():
|
|
self.add_provider(provider)
|
|
|
|
if "pushplus" in settings.NOTIFICATION_PROVIDERS:
|
|
provider = PushPlusProvider()
|
|
if provider.validate_config():
|
|
self.add_provider(provider)
|
|
|
|
|
|
notification_manager = NotificationManager() |