mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-04-13 17:52:28 +08:00
fix https://github.com/jxxghp/MoviePilot/pull/2610 整合同步消息到dev分支
This commit is contained in:
@@ -187,17 +187,20 @@ class Command(metaclass=Singleton):
|
||||
event, handlers = self.eventmanager.get_event()
|
||||
if event:
|
||||
logger.info(f"处理事件:{event.event_type} - {handlers}")
|
||||
if not handlers and event.event_callback:
|
||||
event.event_callback()
|
||||
for handler in handlers:
|
||||
names = handler.__qualname__.split(".")
|
||||
[class_name, method_name] = names
|
||||
try:
|
||||
if class_name in self.pluginmanager.get_plugin_ids():
|
||||
# 插件事件
|
||||
self.threader.submit(
|
||||
result = self.threader.submit(
|
||||
self.pluginmanager.run_plugin_method,
|
||||
class_name, method_name, copy.deepcopy(event)
|
||||
)
|
||||
|
||||
if event.event_callback:
|
||||
event.event_callback(result)
|
||||
else:
|
||||
# 检查全局变量中是否存在
|
||||
if class_name not in globals():
|
||||
@@ -210,7 +213,6 @@ class Command(metaclass=Singleton):
|
||||
except Exception as e:
|
||||
logger.error(f"事件处理出错:{str(e)} - {traceback.format_exc()}")
|
||||
continue
|
||||
|
||||
else:
|
||||
# 通过类名创建类实例
|
||||
class_obj = globals()[class_name]()
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import threading
|
||||
import typing
|
||||
from queue import Queue, Empty
|
||||
from typing import Dict, Any
|
||||
|
||||
@@ -76,17 +78,40 @@ class EventManager(metaclass=Singleton):
|
||||
self._disabled_handlers.remove(class_name)
|
||||
logger.debug(f"Event Enabled:{class_name}")
|
||||
|
||||
def send_event(self, etype: EventType, data: dict = None):
|
||||
def send_event(self, etype: EventType, data: dict = None, callback: typing.Callable = None):
|
||||
"""
|
||||
发送事件
|
||||
发送事件(异步响应)
|
||||
"""
|
||||
if etype not in EventType:
|
||||
return
|
||||
event = Event(etype.value)
|
||||
event.event_data = data or {}
|
||||
logger.debug(f"发送事件:{etype.value} - {event.event_data}")
|
||||
event.event_callback = callback
|
||||
logger.debug(f"发送事件:{etype.value} - data:{event.event_data},callback:{callback}")
|
||||
self._eventQueue.put(event)
|
||||
|
||||
def send_event_sync(self, etype: EventType, data: dict = None):
|
||||
"""
|
||||
发送事件(同步响应)
|
||||
"""
|
||||
result: any = None
|
||||
condition = threading.Condition()
|
||||
|
||||
def callback(res):
|
||||
nonlocal result
|
||||
if res:
|
||||
result = res.result()
|
||||
with condition:
|
||||
condition.notify_all()
|
||||
|
||||
thread = threading.Thread(target=self.send_event, args=(etype, data, callback))
|
||||
thread.start()
|
||||
|
||||
with condition:
|
||||
condition.wait()
|
||||
|
||||
return result
|
||||
|
||||
def register(self, etype: [EventType, list]):
|
||||
"""
|
||||
事件注册
|
||||
@@ -117,6 +142,8 @@ class Event(object):
|
||||
self.event_type = event_type
|
||||
# 字典用于保存具体的事件数据
|
||||
self.event_data = {}
|
||||
# 事件完成后回调函数
|
||||
self.event_callback = None
|
||||
|
||||
|
||||
# 实例引用,用于注册事件
|
||||
|
||||
Reference in New Issue
Block a user