feat 事件管理器
This commit is contained in:
parent
515d43fd09
commit
7218519e54
@ -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:
|
||||
# 同步间隔
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
1
app/plugins/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from .event_manager import EventManager, Event
|
||||
109
app/plugins/event_manager.py
Normal file
109
app/plugins/event_manager.py
Normal 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 = {}
|
||||
@ -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):
|
||||
|
||||
@ -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
11
run.py
@ -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())
|
||||
|
||||
@ -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的随机背景图
|
||||
"""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user