2026-07-17 15:27:33 +08:00
|
|
|
|
import os
|
|
|
|
|
|
import time
|
|
|
|
|
|
import logging
|
|
|
|
|
|
import threading
|
|
|
|
|
|
|
|
|
|
|
|
from .plugin_registry import Event
|
|
|
|
|
|
from PySide6.QtWidgets import QFrame
|
|
|
|
|
|
from PySide6.QtCore import Signal
|
|
|
|
|
|
from .plugins_card_ui import Ui_FramePluginsCard
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class PluginsCard(QFrame, Ui_FramePluginsCard):
|
|
|
|
|
|
"""工具卡片类
|
|
|
|
|
|
|
|
|
|
|
|
继承自 QFrame(Qt 帧基类)和 Ui_FrameToolCard(Qt Designer 生成的 UI 界面)
|
|
|
|
|
|
负责显示工具的卡片界面,包含工具的图标、名称和描述。
|
|
|
|
|
|
"""
|
|
|
|
|
|
send_event_signal = Signal(Event,str)
|
|
|
|
|
|
def __init__(self, name: str, info:dict, parent=None) -> None:
|
|
|
|
|
|
super().__init__(parent)
|
|
|
|
|
|
self.setupUi(self)
|
|
|
|
|
|
|
|
|
|
|
|
self.name = name
|
|
|
|
|
|
self.info = info
|
|
|
|
|
|
|
|
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
|
|
self.textBrowser.setReadOnly(True)
|
2026-07-20 13:15:16 +08:00
|
|
|
|
|
|
|
|
|
|
self.refresh()
|
2026-07-20 10:31:10 +08:00
|
|
|
|
self.pushButtonInstall.clicked.connect(self.on_install_event)
|
|
|
|
|
|
self.pushButtonUninstall.clicked.connect(self.on_uninstall_event)
|
2026-07-17 15:27:33 +08:00
|
|
|
|
|
2026-07-20 13:15:16 +08:00
|
|
|
|
def refresh(self) -> None:
|
|
|
|
|
|
"""根据 info 刷新卡片显示与按钮状态。"""
|
|
|
|
|
|
self.textBrowser.setMarkdown(self.to_card())
|
|
|
|
|
|
installed = self.info["local version"] is not None
|
|
|
|
|
|
self.pushButtonInstall.setEnabled(not installed)
|
|
|
|
|
|
self.pushButtonUninstall.setEnabled(installed)
|
|
|
|
|
|
if installed:
|
|
|
|
|
|
self.pushButtonUpdate.setEnabled(
|
|
|
|
|
|
self.info['remote version'] > self.info['local version']
|
|
|
|
|
|
)
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.pushButtonUpdate.setEnabled(False)
|
|
|
|
|
|
|
2026-07-17 15:27:33 +08:00
|
|
|
|
def to_card(self):
|
|
|
|
|
|
card = f"# {self.name}\n\n"
|
|
|
|
|
|
card += f"**最新:** V{self.info['remote version']}\n\n"
|
|
|
|
|
|
if self.info['local version'] is None:
|
|
|
|
|
|
card += f"**当前:** 未安装!\n\n"
|
|
|
|
|
|
else:
|
|
|
|
|
|
card += f"**当前:** V{self.info['local version']}\n\n"
|
|
|
|
|
|
card += f"**描述:** {self.info['remote description']}"
|
|
|
|
|
|
return card
|
|
|
|
|
|
|
2026-07-20 10:31:10 +08:00
|
|
|
|
def on_install_event(self):
|
|
|
|
|
|
self.send_event_signal.emit(Event.Install, self.name)
|
|
|
|
|
|
|
|
|
|
|
|
def on_uninstall_event(self):
|
|
|
|
|
|
self.send_event_signal.emit(Event.Uninstall, self.name)
|
|
|
|
|
|
pass
|