diff --git a/app/config.py b/app/config.py
index a1c9410..af1fcc5 100644
--- a/app/config.py
+++ b/app/config.py
@@ -1,6 +1,6 @@
import os
-version = '1.1.2'
+version = '2.0.0'
contact = '701805520'
github = 'https://github.com/LC044/WeChatMsg'
website = 'https://memotrace.cn/'
diff --git a/app/ui/mainview.py b/app/ui/mainview.py
index f599b8a..a02bb73 100644
--- a/app/ui/mainview.py
+++ b/app/ui/mainview.py
@@ -9,11 +9,16 @@
"""
import json
import os.path
+import subprocess
+import sys
+import time
import traceback
+from urllib.parse import urljoin
+import requests
from PyQt5.QtCore import pyqtSignal, QThread, QSize, QUrl, Qt
from PyQt5.QtGui import QPixmap, QIcon, QDesktopServices
-from PyQt5.QtWidgets import QMainWindow, QLabel, QMessageBox
+from PyQt5.QtWidgets import QMainWindow, QLabel, QMessageBox, QPushButton
from app.DataBase import misc_db, micro_msg_db, close_db
from app.ui.Icon import Icon
@@ -26,12 +31,12 @@ from app.ui.home.home_window import HomeWindow
from .menu.export import ExportDialog
from app.util.exporter.output import Output
from ..components.QCursorGif import QCursorGif
-from ..config import INFO_FILE_PATH, DB_DIR
+from ..config import INFO_FILE_PATH, DB_DIR, SERVER_API_URL, version
from ..log import logger
from ..person import Me
try:
- from app.ui.menu.about_dialog import AboutDialog, version, UpdateThread
+ from app.ui.menu.about_dialog import AboutDialog
except ModuleNotFoundError:
logger.error(f'Python版本错误:Python>=3.10,仅支持3.10、3.11、3.12')
raise ValueError('Python版本错误:Python>=3.10,仅支持3.10、3.11、3.12')
@@ -333,6 +338,9 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
self.action_help_faq.triggered.connect(
lambda: QDesktopServices.openUrl(QUrl("https://blog.lc044.love/post/7")))
self.about_view = AboutDialog(main_window=self, parent=self)
+ self.update_thread = UpdateThread(check_time=True)
+ self.update_thread.updateSignal.connect(self.show_update)
+ self.update_thread.start()
# self.statusbar.set
def setCurrentIndex(self, row):
@@ -430,9 +438,41 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
当前版本:{version},最新版本:{update_info.get('latest_version')}
更新内容:
{update_info.get('description')}
-
点击下载
+
查看详情
'''
- QMessageBox.information(self, '更新通知', detail)
+
+ # 创建一个 QMessageBox 对象
+ error_box = QMessageBox()
+
+ # 设置对话框的标题
+ error_box.setWindowTitle("更新通知")
+ pixmap = QPixmap(Icon.logo_ico_path)
+ icon = QIcon(pixmap)
+ error_box.setWindowIcon(icon)
+ # 设置对话框的文本消息
+ error_box.setText(detail)
+ # 设置对话框的图标,使用 QMessageBox.Critical 作为图标类型
+ error_box.setIcon(QMessageBox.Information)
+ # 添加一个“确定”按钮
+ # 添加自定义按钮
+ custom_button = error_box.addButton('更新', QMessageBox.ActionRole)
+ is_update_online = update_info.get('is_update_online')
+ custom_button.clicked.connect(lambda x:self.update_(update_info.get('download_url'),is_update_online))
+ error_box.addButton(QMessageBox.Cancel)
+ # 显示对话框
+ error_box.exec_()
+
+ def update_(self, url,is_update_online):
+ if is_update_online:
+ print('更新软件', url)
+ exe_path = r'./update.exe'
+ self.close()
+ if os.path.exists(exe_path):
+ subprocess.run(f'start /B {exe_path} --url {url}', shell=True, check=True)
+ sys.exit()
+ else:
+ QDesktopServices.openUrl(QUrl("https://memotrace.cn/"))
+
def about(self):
"""
@@ -445,15 +485,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
self.close()
def closeEvent(self, event):
- reply = QMessageBox.question(self, '确认退出', '确定要退出吗?',
- QMessageBox.Yes | QMessageBox.No,
- QMessageBox.No)
-
- if reply == QMessageBox.Yes:
- close_db()
- event.accept()
- else:
- event.ignore()
+ close_db()
def close(self) -> bool:
close_db()
@@ -461,3 +493,40 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
super().close()
self.exitSignal.emit(True)
+class UpdateThread(QThread):
+ updateSignal = pyqtSignal(dict)
+
+ def __init__(self, check_time=False):
+ super().__init__()
+ self.check_time = check_time
+
+ def run(self):
+ now_time = time.time()
+ try:
+ with open(INFO_FILE_PATH, "r", encoding="utf-8") as f:
+ data = json.load(f)
+ update_time = data.get('update_time')
+ if update_time:
+ if now_time - update_time < 14400 and self.check_time:
+ return
+ except:
+ os.makedirs(os.path.dirname(INFO_FILE_PATH), exist_ok=True)
+ data = {
+ 'update_time': now_time
+ }
+ data['update_time'] = now_time
+
+ with open(INFO_FILE_PATH, "w", encoding="utf-8") as f:
+ json.dump(data, f, ensure_ascii=False, indent=4)
+ server_url = urljoin(SERVER_API_URL,'update')
+ data = {'version': version}
+ try:
+ response = requests.post(server_url, json=data)
+ if response.status_code == 200:
+ update_info = response.json()
+ self.updateSignal.emit(update_info)
+ else:
+ print("检查更新失败")
+ except:
+ update_info = {'update_available': False}
+ self.updateSignal.emit(update_info)
\ No newline at end of file
diff --git a/app/ui/menu/about_dialog.cp310-win_amd64.pyd b/app/ui/menu/about_dialog.cp310-win_amd64.pyd
index a306706..a6c1e1c 100644
Binary files a/app/ui/menu/about_dialog.cp310-win_amd64.pyd and b/app/ui/menu/about_dialog.cp310-win_amd64.pyd differ
diff --git a/app/ui/menu/about_dialog.cp311-win_amd64.pyd b/app/ui/menu/about_dialog.cp311-win_amd64.pyd
index edf66eb..77b025b 100644
Binary files a/app/ui/menu/about_dialog.cp311-win_amd64.pyd and b/app/ui/menu/about_dialog.cp311-win_amd64.pyd differ
diff --git a/app/ui/menu/about_dialog.cp312-win_amd64.pyd b/app/ui/menu/about_dialog.cp312-win_amd64.pyd
index d822bd5..de89c01 100644
Binary files a/app/ui/menu/about_dialog.cp312-win_amd64.pyd and b/app/ui/menu/about_dialog.cp312-win_amd64.pyd differ
diff --git a/app/ui/update/updateUi.py b/app/ui/update/updateUi.py
index 45e4dc9..df4464f 100644
--- a/app/ui/update/updateUi.py
+++ b/app/ui/update/updateUi.py
@@ -31,6 +31,15 @@ class Ui_Dialog(object):
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName("progressBar")
self.verticalLayout.addWidget(self.progressBar)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.btn_start_update = QtWidgets.QPushButton(Dialog)
+ self.btn_start_update.setObjectName("btn_start_update")
+ self.horizontalLayout.addWidget(self.btn_start_update)
+ self.btn_cancle = QtWidgets.QPushButton(Dialog)
+ self.btn_cancle.setObjectName("btn_cancle")
+ self.horizontalLayout.addWidget(self.btn_cancle)
+ self.verticalLayout.addLayout(self.horizontalLayout)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
@@ -38,4 +47,6 @@ class Ui_Dialog(object):
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
- self.btn_report.setText(_translate("Dialog", "正在更新"))
+ self.btn_report.setText(_translate("Dialog", "更新程序"))
+ self.btn_start_update.setText(_translate("Dialog", "开始更新"))
+ self.btn_cancle.setText(_translate("Dialog", "取消更新"))
diff --git a/main.py b/main.py
index b6ab97e..973eec9 100644
--- a/main.py
+++ b/main.py
@@ -34,6 +34,7 @@ def excepthook(exc_type, exc_value, traceback_):
error_box.setIcon(QMessageBox.Critical)
# 添加一个“确定”按钮
error_box.addButton(QMessageBox.Ok)
+
# 显示对话框
error_box.exec_()