pyside_queue_sqlite/app/utils/webview_controller.py

45 lines
1.5 KiB
Python

from PySide6.QtCore import QObject
from .webview_queue_sqlite_operations import WebViewQueueSqliteOperations
from .base_webview_bridge import BaseWebViewBridge
from typing import List
from PySide6.QtWebChannel import QWebChannel
class WebviewController(QObject):
def __init__(
self,
web_engine_page,
webview_bridge_list: List[type[BaseWebViewBridge]],
web_webview,
scheduler,
parent=None,
):
super().__init__(parent)
self.page = web_engine_page
self.bridge_instances = {}
# 创建bridge实例并保存
for bridge_class in webview_bridge_list:
instance = bridge_class(web_webview)
bridge_name = bridge_class.__name__.lower()
setattr(self, bridge_name, instance)
self.bridge_instances[bridge_name] = instance
self.queue_sqlite_operations = WebViewQueueSqliteOperations(
web_webview, scheduler
)
self.channel = QWebChannel()
# 使用已创建的实例注册到channel
for bridge_name, instance in self.bridge_instances.items():
self.channel.registerObject(bridge_name, instance)
# 为了向前兼容,确保注册名为 "entrance" 的对象
if "webviewbridge" in self.bridge_instances:
self.channel.registerObject(
"entrance", self.bridge_instances["webviewbridge"]
)
self.channel.registerObject("queueSqlite", self.queue_sqlite_operations)
self.page.setWebChannel(self.channel)