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