feat 事件管理器

This commit is contained in:
jxxghp 2023-02-14 11:25:02 +08:00
parent 515d43fd09
commit 7218519e54
9 changed files with 138 additions and 16 deletions

View File

@ -25,6 +25,7 @@ class DoubanSync:
downloader = None
dbhelper = None
subscribe = None
message = None
_interval = None
_auto_search = None
_auto_rss = None
@ -33,6 +34,9 @@ class DoubanSync:
_types = None
def __init__(self):
self.init_config()
def init_config(self):
self.douban = DouBan()
self.searcher = Searcher()
self.downloader = Downloader()
@ -40,9 +44,6 @@ class DoubanSync:
self.message = Message()
self.dbhelper = DbHelper()
self.subscribe = Subscribe()
self.init_config()
def init_config(self):
douban = Config().get_config('douban')
if douban:
# 同步间隔

View File

@ -1,4 +1,4 @@
from .chrome_helper import ChromeHelper
from .chrome_helper import ChromeHelper, init_chrome
from .indexer_helper import IndexerHelper, IndexerConf
from .meta_helper import MetaHelper
from .progress_helper import ProgressHelper

View File

@ -238,3 +238,10 @@ class ChromeWithPrefs(uc.Chrome):
# pylint: disable=protected-access
# remove the experimental_options to avoid an error
del options._experimental_options["prefs"]
def init_chrome():
"""
初始化chrome驱动
"""
ChromeHelper().init_driver()

1
app/plugins/__init__.py Normal file
View File

@ -0,0 +1 @@
from .event_manager import EventManager, Event

View File

@ -0,0 +1,109 @@
from queue import Queue, Empty
from threading import Thread, Timer
import log
from app.utils.commons import singleton
@singleton
class EventManager:
"""
事件管理器
"""
def __init__(self):
# 事件队列
self._eventQueue = Queue()
# 事件响应函数字典
self._handlers = {}
# 事件处理线程
self._thread = Thread(target=self.__run)
# 开关
self._active = True
# 默认启动
self.start()
def __run(self):
"""
事件处理线程
"""
while self._active:
try:
event = self._eventQueue.get(block=True, timeout=1)
log.info(f"处理事件:{event}")
self.__process_event(event)
except Empty:
pass
def __process_event(self, event):
"""
处理事件
"""
if event.etype in self._handlers:
for handler in self._handlers[event.etype]:
try:
handler(event)
except Exception as err:
log.error(f"处理事件出错:{err}")
def start(self):
"""
启动
"""
# 将事件管理器设为启动
self._active = True
# 启动事件处理线程
log.info("事件管理器启动")
self._thread.start()
def stop(self):
"""
停止
"""
# 将事件管理器设为停止
self._active = False
# 等待事件处理线程退出
log.info("【System】事件管理器停止")
self._thread.join()
def add_event_listener(self, etype, handler):
"""
注册事件处理
"""
try:
handlerList = self._handlers[etype]
except KeyError:
handlerList = []
self._handlers[etype] = handlerList
if handler not in handlerList:
handlerList.append(handler)
def remove_event_listener(self, etype, handler):
"""
移除监听器的处理函数
"""
try:
handlerList = self._handlers[etype]
if handler in handlerList:
handlerList.remove(handler)
if not handlerList:
del self._handlers[etype]
except KeyError:
pass
def send_event(self, event):
"""
发送事件
"""
self._eventQueue.put(event)
class Event:
"""
事件对象
"""
def __init__(self, etype=None):
# 事件类型
self.etype = etype
# 字典用于保存具体的事件数据
self.dict = {}

View File

@ -20,21 +20,22 @@ class Rss:
_sites = []
filter = None
media = None
sites = None
downloader = None
searcher = None
dbhelper = None
subscribe = None
def __init__(self):
self.init_config()
def init_config(self):
self.media = Media()
self.downloader = Downloader()
self.sites = Sites()
self.filter = Filter()
self.dbhelper = DbHelper()
self.subscribe = Subscribe()
self.init_config()
def init_config(self):
self._sites = self.sites.get_sites(rss=True)
def rssdownload(self):

View File

@ -20,15 +20,15 @@ class Searcher:
_search_auto = True
def __init__(self):
self.init_config()
def init_config(self):
self.downloader = Downloader()
self.media = Media()
self.message = Message()
self.progress = ProgressHelper()
self.dbhelper = DbHelper()
self.indexer = Indexer()
self.init_config()
def init_config(self):
self._search_auto = Config().get_config("pt").get('search_auto', True)
def search_medias(self,

11
run.py
View File

@ -37,13 +37,14 @@ from web.main import App
from app.utils import SystemUtils, ConfigLoadCache
from app.utils.commons import INSTANCES
from app.db import init_db, update_db, init_data
from app.helper import IndexerHelper, DisplayHelper, ChromeHelper
from app.helper import IndexerHelper, DisplayHelper, init_chrome
from app.brushtask import BrushTask
from app.rsschecker import RssChecker
from app.scheduler import run_scheduler, restart_scheduler
from app.sync import run_monitor, restart_monitor
from app.torrentremover import TorrentRemover
from app.speedlimiter import SpeedLimiter
from app.plugins import EventManager
from check_config import update_config, check_config
from version import APP_VERSION
@ -124,9 +125,8 @@ def start_service():
TorrentRemover()
# 启动播放限速服务
SpeedLimiter()
# 初始化浏览器驱动
if not is_windows_exe:
ChromeHelper().init_driver()
# 启动事件管理器
EventManager()
def monitor_config():
@ -194,6 +194,9 @@ if __name__ == '__main__':
if len(os.popen("tasklist| findstr %s" % os.path.basename(sys.executable), 'r').read().splitlines()) <= 2:
p1 = threading.Thread(target=traystart, daemon=True)
p1.start()
else:
# 初始化浏览器驱动
init_chrome()
# gunicorn 启动
App.run(**get_run_config())

View File

@ -15,7 +15,7 @@ def get_login_wallpaper(today=datetime.datetime.strftime(datetime.datetime.now()
wallpaper = Config().get_config('app').get('wallpaper')
tmdbkey = Config().get_config('app').get('rmt_tmdbkey')
if (not wallpaper or wallpaper == "themoviedb") and tmdbkey:
img_url = __get_themoviedb_wallpaper(today)
img_url = __get_themoviedb_wallpaper()
else:
img_url = __get_bing_wallpaper(today)
if img_url:
@ -25,7 +25,7 @@ def get_login_wallpaper(today=datetime.datetime.strftime(datetime.datetime.now()
return ""
def __get_themoviedb_wallpaper(today):
def __get_themoviedb_wallpaper():
"""
获取TheMovieDb的随机背景图
"""