@@ -171,39 +171,42 @@ def custum_ver_select(resource_list):
171171
172172
173173def get_github_download_options ():
174- """获取Github的最新版本下载列表
175-
176- Returns:
177- list -- 下载版本合集
178- 或者是None,说明下载出问题了
179- """
174+ """获取Github的下载选项(前5个版本)"""
180175 try :
181176 response = requests .get (
182- "https://api.github.com/repos/MaaXYZ/MaaFramework/releases/latest " ,
177+ "https://api.github.com/repos/MaaXYZ/MaaFramework/releases" ,
183178 timeout = 10
184179 )
185- response .raise_for_status () # 如果状态码不是200则抛出异常
186-
187- assets = response .json ().get ("assets" , [])
180+ response .raise_for_status ()
188181
189- if not assets :
190- print ("该发布版未包含任何可下载资源" )
182+ releases = response .json ()
183+ if not releases :
184+ print ("未找到任何发布版本" )
191185 return None
192186
193- # 创建结构化资源列表
194- resource_list = []
195- print ("\n 可用的下载选项:" )
196- for idx , asset in enumerate (assets ):
197- size_mb = asset ['size' ] / (1024 * 1024 )
198- print (f"{ idx } . { asset ['name' ]} ({ size_mb :.2f} MB)" )
187+ # 只取前5个版本
188+ recent_releases = releases [:5 ]
199189
200- # 将资源信息添加到列表
190+ resource_list = []
191+ print ("\n 可用的版本:" )
192+ for idx , release in enumerate (recent_releases ):
193+ version = release ['tag_name' ]
194+ print (f"{ idx } . { version } " )
195+ # 收集该版本的资源
196+ assets = release .get ("assets" , [])
197+ asset_list = []
198+ for asset_idx , asset in enumerate (assets ):
199+ size_mb = asset ['size' ] / (1024 * 1024 )
200+ asset_list .append ({
201+ "index" : asset_idx ,
202+ "name" : asset ['name' ],
203+ "url" : asset ['browser_download_url' ],
204+ "size" : asset ['size' ],
205+ "size_mb" : size_mb
206+ })
201207 resource_list .append ({
202- "index" : idx , # 从0开始的索引
203- "name" : asset ['name' ],
204- "url" : asset ['browser_download_url' ],
205- "size" : asset ['size' ],
206- "size_mb" : size_mb
208+ "version" : version ,
209+ "assets" : asset_list
207210 })
208211
209212 return resource_list
@@ -217,27 +220,51 @@ def get_github_download_options():
217220
218221
219222def select_download_resource (resource_list , auto = False ):
220- """选择下载包
221-
222- Arguments:
223- resource_list {list} -- 通过Release获取到的列表
224-
225- Keyword Arguments:
226- auto {bool} -- 是否自动选择下载包 (default: {False})
227-
228- Returns:
229- str -- 下载路径或者是False
230- 如果是False则不进行下载
231- """
232- combo_key = None
223+ """选择下载资源(先选版本,再选资源)"""
233224 if not resource_list :
234225 print ("没有可用的下载资源" )
235226 return None
236- elif auto :
227+
228+ # 自动模式:使用最新版本
229+ if auto :
230+ latest_release = resource_list [0 ]
231+ assets = latest_release ['assets' ]
237232 combo_key = get_local_platform ()
238- return auto_ver_select (resource_list , combo_key )
239- else :
240- return custum_ver_select (resource_list )
233+ return auto_ver_select (assets , combo_key )
234+
235+ # 手动模式:选择版本
236+ print ("\n 请选择版本:" )
237+ for idx , release in enumerate (resource_list ):
238+ print (f"{ idx } . { release ['version' ]} " )
239+
240+ while True :
241+ try :
242+ choice = input ("\n 请输入版本编号 (输入 'q' 退出): " )
243+ if choice .lower () == 'q' :
244+ return False
245+
246+ version_idx = int (choice )
247+ if 0 <= version_idx < len (resource_list ):
248+ selected_release = resource_list [version_idx ]
249+ print (f"\n 已选择版本: { selected_release ['version' ]} " )
250+
251+ # 显示该版本的资源
252+ assets = selected_release ['assets' ]
253+ # print(assets)
254+ if not assets :
255+ print ("该版本没有可用的资源" )
256+ return False
257+
258+ print ("\n 可用的资源:" )
259+ for idx , asset in enumerate (assets ):
260+ print (
261+ f"{ idx } . { asset ['name' ]} ({ asset ['size_mb' ]:.2f} MB)" )
262+
263+ return custum_ver_select (assets )
264+ else :
265+ print (f"无效的选择,请输入 0-{ len (resource_list )- 1 } 之间的数字" )
266+ except ValueError :
267+ print ("请输入有效的数字" )
241268
242269
243270def check_version (file_ver , url_ver ):
@@ -402,7 +429,8 @@ def main(is_debug=False, is_delete=True):
402429 print ("仅进行版本检查,不下载" )
403430 file_ver = get_local_version_from_dll (dll_path )
404431 print (file_ver )
405- url_ver = select_download_resource (get_github_download_options (), True )
432+ url_ver = select_download_resource (
433+ get_github_download_options (), False )
406434 print (url_ver )
407435 check_resalt = check_version (file_ver , url_ver )
408436 print (check_resalt )
0 commit comments