# -*- coding: UTF-8 -*- import webbrowser from ngSkinTools2.api import versioncheck from ngSkinTools2.api.log import getLogger from ngSkinTools2.api.pyside import Qt, QtWidgets from ngSkinTools2.ui.options import bind_checkbox, config from .. import cleanup, signal, version from . import qt from .layout import scale_multiplier log = getLogger("plugin") def show(parent, silent_mode): """ :type parent: QWidget """ error_signal = signal.Signal("error") success_signal = signal.Signal("success") # noinspection PyShadowingNames def body(): result = QtWidgets.QWidget() layout = QtWidgets.QVBoxLayout() result.setLayout(layout) layout.setContentsMargins(20, 30, 20, 20) header = QtWidgets.QLabel(u"检查更新中...") result1 = QtWidgets.QLabel(u"当前版本: 2.1.4") result2 = QtWidgets.QLabel("最新版本: 2.1.4") download = QtWidgets.QPushButton("下载 中文ngSkinTools v2.0.1") # layout.addWidget(QtWidgets.QLabel("Checking for updates...")) layout.addWidget(header) layout.addWidget(result1) layout.addWidget(result2) layout.addWidget(download) result1.setVisible(False) result2.setVisible(False) download.setVisible(False) @signal.on(error_signal) def error_handler(error): header.setText("Error: {0}".format(error)) @signal.on(success_signal) def success_handler(info): """ :type info: ngSkinTools2.api.versioncheck. """ header.setText("{0}".format('更新可用!' if info.update_available else '中文ngSkinTools 已经是最新版.')) result1.setVisible(True) result1.setText(u"当前版本: {0}".format(version.pluginVersion())) if info.update_available: result2.setVisible(True) result2.setText( u"最新版本: {0}, 发布于 {1}".format(info.latest_version, info.update_date.strftime("%d %B, %Y")) ) download.setVisible(True) download.setText(u"下载 中文ngSkinTools v" + info.latest_version) @qt.on(download.clicked) def open_link(): webbrowser.open_new(info.download_url) return result # noinspection PyShadowingNames def buttonsRow(window): btn_close = QtWidgets.QPushButton("取消") btn_close.setMinimumWidth(100 * scale_multiplier) check_do_on_startup = bind_checkbox(QtWidgets.QCheckBox("启动时检查更新"), config.checkForUpdatesAtStartup) layout = QtWidgets.QHBoxLayout() layout.addWidget(check_do_on_startup) layout.addStretch() layout.addWidget(btn_close) layout.setContentsMargins(20 * scale_multiplier, 15 * scale_multiplier, 20 * scale_multiplier, 15 * scale_multiplier) btn_close.clicked.connect(lambda: window.close()) return layout window = QtWidgets.QWidget(parent, Qt.Window | Qt.WindowTitleHint | Qt.CustomizeWindowHint) window.resize(400 * scale_multiplier, 200 * scale_multiplier) window.setAttribute(Qt.WA_DeleteOnClose) window.setWindowTitle("ngSkinTools2 (中文) 版本更新") layout = QtWidgets.QVBoxLayout() window.setLayout(layout) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(body()) layout.addStretch(2) layout.addLayout(buttonsRow(window)) if not silent_mode: window.show() @signal.on(success_signal) def on_success(info): if silent_mode: if info.update_available: window.show() else: log.info("未显示窗口") window.close() cleanup.registerCleanupHandler(window.close) @qt.on(window.destroyed) def closed(): log.info("删除更新窗口") versioncheck.download_update_info(success_callback=success_signal.emit, failure_callback=error_signal.emit) def silent_check_and_show_if_available(parent): show(parent, silent_mode=True) def show_and_start_update(parent): show(parent, silent_mode=False) def build_action_check_for_updates(parent): from ngSkinTools2.ui import actions return actions.define_action(parent, "检查更新...", callback=lambda: show_and_start_update(parent))