add 事件广播

This commit is contained in:
jxxghp
2023-06-16 07:11:14 +08:00
parent ed14485092
commit 6a5e117f0b
49 changed files with 70 additions and 49 deletions

View File

@ -10,7 +10,7 @@ from app.db import get_db
from app.db.models.subscribe import Subscribe
from app.db.models.user import User
from app.db.userauth import get_current_active_superuser
from app.utils.types import MediaType
from app.schemas.types import MediaType
router = APIRouter()

View File

@ -1,4 +1,3 @@
from pathlib import Path
from typing import Any, List
from fastapi import APIRouter, HTTPException, Depends
@ -12,7 +11,7 @@ from app.core.metainfo import MetaInfo
from app.db import get_db
from app.db.models.subscribe import Subscribe
from app.schemas import RadarrMovie, SonarrSeries
from app.utils.types import MediaType
from app.schemas.types import MediaType
from version import APP_VERSION
arr_router = APIRouter()

View File

@ -6,13 +6,14 @@ from typing import Optional, Any, Tuple, List, Set, Union, Dict
from ruamel.yaml import CommentedMap
from app.core.context import Context
from app.core.event import EventManager
from app.core.module import ModuleManager
from app.core.context import MediaInfo, TorrentInfo
from app.core.meta import MetaBase
from app.log import logger
from app.schemas.context import TransferInfo, TransferTorrent, ExistMediaInfo, DownloadingTorrent
from app.utils.singleton import AbstractSingleton, Singleton
from app.utils.types import TorrentStatus, MediaType
from app.schemas.types import TorrentStatus, MediaType
class ChainBase(AbstractSingleton, metaclass=Singleton):
@ -25,6 +26,7 @@ class ChainBase(AbstractSingleton, metaclass=Singleton):
公共初始化
"""
self.modulemanager = ModuleManager()
self.eventmanager = EventManager()
@abstractmethod
def process(self, *args, **kwargs) -> Optional[Context]:

View File

@ -9,7 +9,7 @@ from app.helper.torrent import TorrentHelper
from app.log import logger
from app.schemas.context import ExistMediaInfo, NotExistMediaInfo
from app.utils.string import StringUtils
from app.utils.types import MediaType, TorrentStatus
from app.schemas.types import MediaType, TorrentStatus, EventType
class DownloadChain(ChainBase):
@ -115,6 +115,12 @@ class DownloadChain(ChainBase):
self.post_download_message(meta=_meta, mediainfo=_media, torrent=_torrent, userid=userid)
# 下载成功后处理
self.download_added(context=_context, torrent_path=_torrent_file)
# 广播事件
self.eventmanager.send_event(EventType.DownloadAdded, {
"hash": _hash,
"torrent_file": _torrent_file,
"context": _context
})
else:
# 下载失败
logger.error(f"{_media.title_year} 添加下载任务失败:"

View File

@ -9,7 +9,7 @@ from app.helper.sites import SitesHelper
from app.log import logger
from app.schemas.context import NotExistMediaInfo
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class SearchChain(ChainBase):

View File

@ -11,7 +11,7 @@ from app.helper.sites import SitesHelper
from app.log import logger
from app.schemas.context import NotExistMediaInfo
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class SubscribeChain(ChainBase):

View File

@ -10,7 +10,7 @@ from app.log import logger
from app.schemas.context import TransferInfo, TransferTorrent
from app.utils.string import StringUtils
from app.utils.system import SystemUtils
from app.utils.types import TorrentStatus
from app.schemas.types import TorrentStatus, EventType
class TransferChain(ChainBase):
@ -114,6 +114,12 @@ class TransferChain(ChainBase):
self.refresh_mediaserver(mediainfo=mediainfo, file_path=transferinfo.target_path)
# 发送通知
self.__send_transfer_message(meta=meta, mediainfo=mediainfo, transferinfo=transferinfo)
# 广播事件
self.eventmanager.send_event(EventType.TransferComplete, {
'meta': meta,
'mediainfo': mediainfo,
'transferinfo': transferinfo
})
logger.info("下载器文件转移执行完成")
return True

View File

@ -7,7 +7,7 @@ from app.core.context import MediaInfo, TorrentInfo
from app.core.metainfo import MetaInfo
from app.core.event import EventManager
from app.log import logger
from app.utils.types import EventType
from app.schemas.types import EventType
class UserMessageChain(ChainBase):

View File

@ -3,6 +3,7 @@ from typing import Any
from app.chain import ChainBase
from app.utils.http import WebUtils
from app.schemas.types import EventType
class WebhookMessageChain(ChainBase):
@ -18,6 +19,8 @@ class WebhookMessageChain(ChainBase):
event_info: dict = self.webhook_parser(body=body, form=form, args=args)
if not event_info:
return
# 广播事件
self.eventmanager.send_event(EventType.WebhookMessage, event_info)
# 拼装消息内容
_webhook_actions = {
"library.new": "新入库",

View File

@ -1,4 +1,3 @@
import inspect
import traceback
from threading import Thread, Event
from typing import Any, Union
@ -16,7 +15,7 @@ from app.core.event import Event as ManagerEvent
from app.log import logger
from app.utils.object import ObjectUtils
from app.utils.singleton import Singleton
from app.utils.types import EventType
from app.schemas.types import EventType
class CommandChian(ChainBase):

View File

@ -3,7 +3,7 @@ from typing import Optional, Any, List
from app.core.config import settings
from app.core.meta import MetaBase
from app.core.metainfo import MetaInfo
from app.utils.types import MediaType
from app.schemas.types import MediaType
class TorrentInfo:

View File

@ -2,7 +2,7 @@ from queue import Queue, Empty
from app.log import logger
from app.utils.singleton import Singleton
from app.utils.types import EventType
from app.schemas.types import EventType
class EventManager(metaclass=Singleton):

View File

@ -4,7 +4,7 @@ import anitopy
from app.core.meta.metabase import MetaBase
from app.core.meta.release_groups import ReleaseGroupsMatcher
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class MetaAnime(MetaBase):

View File

@ -4,7 +4,7 @@ import cn2an
import regex as re
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class MetaBase(object):

View File

@ -6,7 +6,7 @@ from app.core.meta.metabase import MetaBase
from app.core.meta.release_groups import ReleaseGroupsMatcher
from app.utils.string import StringUtils
from app.utils.tokens import Tokens
from app.utils.types import MediaType
from app.schemas.types import MediaType
class MetaVideo(MetaBase):

View File

@ -5,7 +5,7 @@ from app.db import DbOper
from app.db.models.systemconfig import SystemConfig
from app.utils.object import ObjectUtils
from app.utils.singleton import Singleton
from app.utils.types import SystemConfigKey
from app.schemas.types import SystemConfigKey
class SystemConfigOper(DbOper, metaclass=Singleton):

View File

@ -12,7 +12,7 @@ from app.core.context import Context
from app.core.metainfo import MetaInfo
from app.log import logger
from app.utils.http import RequestUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class TorrentHelper:

View File

@ -7,7 +7,7 @@ from ruamel.yaml import CommentedMap
from app.core.context import MediaInfo, TorrentInfo, Context
from app.core.meta import MetaBase
from app.schemas.context import TransferInfo, TransferTorrent, ExistMediaInfo, DownloadingTorrent
from app.utils.types import TorrentStatus, MediaType
from app.schemas.types import TorrentStatus, MediaType
class _ModuleBase(metaclass=ABCMeta):

View File

@ -13,7 +13,7 @@ from app.modules.douban.apiv2 import DoubanApi
from app.utils.dom import DomUtils
from app.utils.http import RequestUtils
from app.utils.system import SystemUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class DoubanModule(_ModuleBase):

View File

@ -6,7 +6,7 @@ from app.log import logger
from app.modules import _ModuleBase
from app.modules.emby.emby import Emby
from app.schemas.context import ExistMediaInfo, RefreshMediaItem
from app.utils.types import MediaType
from app.schemas.types import MediaType
class EmbyModule(_ModuleBase):

View File

@ -9,7 +9,7 @@ from app.schemas.context import RefreshMediaItem
from app.utils.http import RequestUtils
from app.utils.singleton import Singleton
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class Emby(metaclass=Singleton):

View File

@ -6,7 +6,7 @@ from app.core.context import MediaInfo, settings
from app.log import logger
from app.modules import _ModuleBase
from app.utils.http import RequestUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class FanartModule(_ModuleBase):

View File

@ -13,7 +13,7 @@ from app.log import logger
from app.modules import _ModuleBase
from app.schemas.context import TransferInfo
from app.utils.system import SystemUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
lock = Lock()

View File

@ -11,7 +11,7 @@ from app.modules.indexer.spider import TorrentSpider
from app.modules.indexer.tnode import TNodeSpider
from app.modules.indexer.torrentleech import TorrentLeech
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class IndexerModule(_ModuleBase):

View File

@ -14,7 +14,7 @@ from app.helper.browser import PlaywrightHelper
from app.log import logger
from app.utils.http import RequestUtils
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class TorrentSpider:

View File

@ -7,7 +7,7 @@ from app.log import logger
from app.modules import _ModuleBase
from app.modules.jellyfin.jellyfin import Jellyfin
from app.schemas.context import ExistMediaInfo
from app.utils.types import MediaType
from app.schemas.types import MediaType
class JellyfinModule(_ModuleBase):

View File

@ -6,7 +6,7 @@ from app.log import logger
from app.modules import _ModuleBase
from app.modules.plex.plex import Plex
from app.schemas.context import ExistMediaInfo, RefreshMediaItem
from app.utils.types import MediaType
from app.schemas.types import MediaType
class PlexModule(_ModuleBase):

View File

@ -8,7 +8,7 @@ from app.modules import _ModuleBase
from app.modules.qbittorrent.qbittorrent import Qbittorrent
from app.schemas.context import TransferInfo, TransferTorrent, DownloadingTorrent
from app.utils.string import StringUtils
from app.utils.types import TorrentStatus
from app.schemas.types import TorrentStatus
class QbittorrentModule(_ModuleBase):

View File

@ -15,7 +15,7 @@ from app.modules.themoviedb.tmdb_cache import TmdbCache
from app.utils.dom import DomUtils
from app.utils.http import RequestUtils
from app.utils.system import SystemUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class TheMovieDbModule(_ModuleBase):

View File

@ -12,7 +12,7 @@ from app.core.config import settings
from app.log import logger
from app.utils.http import RequestUtils
from app.utils.string import StringUtils
from app.utils.types import MediaType
from app.schemas.types import MediaType
class TmdbHelper:

View File

@ -8,7 +8,7 @@ from typing import Optional
from app.core.config import settings
from app.core.meta import MetaBase
from app.utils.singleton import Singleton
from app.utils.types import MediaType
from app.schemas.types import MediaType
lock = RLock()

View File

@ -7,7 +7,7 @@ from app.log import logger
from app.modules import _ModuleBase
from app.modules.transmission.transmission import Transmission
from app.schemas.context import TransferInfo, TransferTorrent, DownloadingTorrent
from app.utils.types import TorrentStatus
from app.schemas.types import TorrentStatus
class TransmissionModule(_ModuleBase):

View File

@ -18,7 +18,7 @@ from app.plugins import _PluginBase
from app.utils.http import RequestUtils
from app.utils.site import SiteUtils
from app.utils.timer import TimerUtils
from app.utils.types import EventType
from app.schemas.types import EventType
class AutoSignIn(_PluginBase):

View File

@ -22,7 +22,7 @@ from app.utils.timer import TimerUtils
import warnings
from app.utils.types import EventType
from app.schemas.types import EventType
warnings.filterwarnings("ignore", category=FutureWarning)

View File

@ -13,7 +13,7 @@ from app.helper.cloudflare import under_challenge
from app.log import logger
from app.utils.http import RequestUtils
from app.utils.site import SiteUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
SITE_BASE_ORDER = 1000

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class DiscuzUserInfo(ISiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class FileListSiteUserInfo(ISiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class GazelleSiteUserInfo(ISiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class IptSiteUserInfo(ISiteUserInfo):

View File

@ -7,7 +7,7 @@ from lxml import etree
from app.log import logger
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class NexusPhpSiteUserInfo(ISiteUserInfo):

View File

@ -3,7 +3,7 @@ import re
from app.plugins.sitestatistic.siteuserinfo import SITE_BASE_ORDER
from app.plugins.sitestatistic.siteuserinfo.nexus_php import NexusPhpSiteUserInfo
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class NexusProjectSiteUserInfo(NexusPhpSiteUserInfo):

View File

@ -7,7 +7,7 @@ from lxml import etree
from app.log import logger
from app.plugins.sitestatistic.siteuserinfo import SITE_BASE_ORDER
from app.plugins.sitestatistic.siteuserinfo.nexus_php import NexusPhpSiteUserInfo
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class NexusRabbitSiteUserInfo(NexusPhpSiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class SmallHorseSiteUserInfo(ISiteUserInfo):

View File

@ -5,7 +5,7 @@ from typing import Optional
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class TNodeSiteUserInfo(ISiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class TorrentLeechSiteUserInfo(ISiteUserInfo):

View File

@ -6,7 +6,7 @@ from lxml import etree
from app.plugins.sitestatistic.siteuserinfo import ISiteUserInfo, SITE_BASE_ORDER
from app.utils.string import StringUtils
from app.utils.types import SiteSchema
from app.schemas.types import SiteSchema
class Unit3dSiteUserInfo(ISiteUserInfo):

View File

@ -3,7 +3,7 @@ from typing import Optional, Dict
from pydantic import BaseModel
from app.utils.types import MediaType
from app.schemas.types import MediaType
class MetaInfo(BaseModel):

View File

@ -22,6 +22,12 @@ class EventType(Enum):
SiteSignin = "site.signin"
# 站点数据统计
SiteStatistic = "site.statistic"
# Webhook消息
WebhookMessage = "webhook.message"
# 转移完成
TransferComplete = "transfer.complete"
# 添加下载
DownloadAdded = "download.added"
# 系统配置Key字典

View File

@ -10,7 +10,7 @@ import cn2an
import dateparser
import dateutil.parser
from app.utils.types import MediaType
from app.schemas.types import MediaType
class StringUtils: