Skip to content

Commit e08bd3c

Browse files
committed
[ADD] 自动更新
1 parent 2e771a4 commit e08bd3c

3 files changed

Lines changed: 106 additions & 11 deletions

File tree

StartWork.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,21 @@
1010
import MoocMain.initMooc as MoocInit
1111
import NewMoocMain.init_mooc as NewMoocInit
1212
from MoocMain.log import Logger
13+
from update import check_for_updates
1314

1415
logger = Logger(__name__).get_log()
1516

16-
logger.info('=' * 110)
17-
logger.info('%s【${TAG_NAME}】 程序运行!开源支持 By https://github.com/11273/mooc-work-answer %s', '=' * 20, '=' * 20)
18-
logger.info('=' * 110)
17+
APP_VERSION = 'dev' if 'TAG_NAME' in '${TAG_NAME}' else '${TAG_NAME}'
18+
19+
border = '*' * 80
20+
logger.info(border)
21+
logger.info(f'应用程序启动,版本: {APP_VERSION}')
22+
logger.info('开源支持: https://github.com/11273/mooc-work-answer')
23+
logger.info(border)
24+
25+
# ***************************************** 检查更新 ***************************************
26+
27+
check_for_updates(APP_VERSION)
1928

2029
# ****************************************** 配置 ******************************************
2130

@@ -119,14 +128,17 @@ def run_model(
119128
topic = int(input('是否自动讨论回复 1.是 or 2.否: ') or 2)
120129
topic_content = None
121130
if topic == 1:
122-
print('\t请输入讨论回复内容,回复的不包括井号(默认随机), 例如\n\t\t输入多个文本随机井号后面的: #好#加油#积极响应\n\t\t输入单个将固定回复统一内容: #好')
131+
print(
132+
'\t请输入讨论回复内容,回复的不包括井号(默认随机), 例如\n\t\t输入多个文本随机井号后面的: #好#加油#积极响应\n\t\t输入单个将固定回复统一内容: #好')
123133
topic_content = input('请输入回车默认(#好#加油#积极响应): ') or '#好#加油#积极响应'
124134
jump = int(input('是否有需要跳过的课程 1.是 or 2.否: ') or 2)
125135
jump_content = None
126136
if jump == 1:
127-
print('\t请输入跳过课程名(模糊匹配), 例如\n\t\t输入多个文本随机井号后面的: #设计#思想道德#技术\n\t\t输入单个将固定跳过一个课程: #思想')
137+
print(
138+
'\t请输入跳过课程名(模糊匹配), 例如\n\t\t输入多个文本随机井号后面的: #设计#思想道德#技术\n\t\t输入单个将固定跳过一个课程: #思想')
128139
jump_content = input('请输入需要跳过的课程关键字(#电商): ') or ''
129-
NewMoocInit.run(username=username1, password=password1, topic_content=topic_content, jump_content=jump_content, type_value=old)
140+
NewMoocInit.run(username=username1, password=password1, topic_content=topic_content,
141+
jump_content=jump_content, type_value=old)
130142
print("本次程序运行完成,正常结束。")
131143
except Exception as e:
132144
logger.exception(e)

requirements.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,5 @@ lxml==4.9.3
33
numpy==1.24.4
44
opencv_python_headless==4.6.0.66
55
Pillow==10.0.0
6-
pycryptodome==3.17
7-
requests==2.31.0
8-
9-
m3u8==3.6.0
10-
opencv-python==4.3.0.36
6+
pycryptodome~=3.18.0
7+
requests==2.31.0

update.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import tkinter as tk
2+
import webbrowser
3+
from tkinter import messagebox
4+
5+
import requests
6+
7+
from MoocMain.log import Logger
8+
9+
logger = Logger(__name__).get_log()
10+
11+
# 配置
12+
REPO = "11273/mooc-work-answer"
13+
14+
15+
def version_greater_than(v1, v2):
16+
# 去除版本号中的前缀 'v'
17+
v1_parts = map(int, v1.lstrip('v').split('.'))
18+
v2_parts = map(int, v2.lstrip('v').split('.'))
19+
20+
# 使用 zip_longest 以确保处理不同长度的版本号
21+
from itertools import zip_longest
22+
for v1_part, v2_part in zip_longest(v1_parts, v2_parts, fillvalue=0):
23+
if v1_part > v2_part:
24+
return True
25+
elif v1_part < v2_part:
26+
return False
27+
28+
return False
29+
30+
31+
def get_latest_release(repo):
32+
"""从 GitHub API 获取最新发布信息。"""
33+
url = f'https://api.github.com/repos/{repo}/releases/latest'
34+
try:
35+
response = requests.get(url)
36+
response.raise_for_status()
37+
return response.json()
38+
except requests.RequestException as e:
39+
logger.warn(f"获取发布信息时出错: {e}")
40+
return None
41+
42+
43+
def open_download_url(asset_url):
44+
"""打开默认浏览器以下载新版本。"""
45+
webbrowser.open(asset_url)
46+
logger.debug(f"浏览器已打开: {asset_url}。")
47+
48+
49+
def show_update_prompt(asset_url):
50+
"""显示更新提示弹窗。"""
51+
root = tk.Tk()
52+
root.withdraw() # 隐藏主窗口
53+
54+
if messagebox.askyesno("更新可用", "检测到新版本,是否下载?"):
55+
open_download_url(asset_url)
56+
57+
root.destroy()
58+
59+
60+
def check_for_updates(app_version):
61+
if app_version == 'dev':
62+
logger.debug("开发环境,不检查更新。")
63+
return
64+
65+
logger.info("检查更新中,请稍后...")
66+
release_info = get_latest_release(REPO)
67+
if not release_info:
68+
return
69+
70+
latest_version = release_info['tag_name']
71+
asset_html_url = release_info['html_url']
72+
73+
if version_greater_than(latest_version, app_version):
74+
# if 'assets' in release_info and release_info['assets']:
75+
# asset = release_info['assets'][0]
76+
# asset_browser_download_url = asset['browser_download_url']
77+
# asset_name = asset['name']
78+
#
79+
# logger.info(f"最新版本: {latest_version}, 文件: {asset_name}, 手动前往下载: {asset_browser_download_url}")
80+
# show_update_prompt(asset_browser_download_url)
81+
# else:
82+
# logger.warn("最新发布中没有找到资源。")
83+
# 不直接下载文件,使用进入页面查看新版更新信息
84+
show_update_prompt(asset_html_url)
85+
else:
86+
logger.info("当前已是最新版本。")

0 commit comments

Comments
 (0)