-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update: combine kernel and system into one file
- Loading branch information
1 parent
4a35b8b
commit 0619f11
Showing
4 changed files
with
175 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
{ | ||
"thyme": { | ||
"kernel_repo": "ArbitrarilyTong-Devices/Android-Kernel-Builder", | ||
"system_repo": "" | ||
"system_repo": "ArbitrarilyTong-Devices/device_xiaomi_thyme" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
[ | ||
{ | ||
"datetime": 1688685228.0, | ||
"desc": "- 更新了KernelSU内核版本\r\n- 原版没有变更", | ||
"filename": "thyme-kernelsu", | ||
"id": 115940736, | ||
"size": 25300846, | ||
"tag": "kernelsu", | ||
"type": "kernel", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/Android-Kernel-Builder/releases/download/v20230707.2/thyme-kernelsu_20230707.zip", | ||
"version": "v20230707.2" | ||
}, | ||
{ | ||
"datetime": 1688685981.0, | ||
"desc": "- 更新了KernelSU内核版本\r\n- 原版没有变更", | ||
"filename": "thyme-original", | ||
"id": 115941818, | ||
"size": 24352708, | ||
"tag": "original", | ||
"type": "kernel", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/Android-Kernel-Builder/releases/download/v20230707.2/thyme-original_20230707.zip", | ||
"version": "v20230707.2" | ||
}, | ||
{ | ||
"datetime": 1688520748.0, | ||
"desc": "- 第一版构建", | ||
"filename": "thyme-kernelsu", | ||
"id": 115644069, | ||
"size": 25301655, | ||
"tag": "kernelsu", | ||
"type": "kernel", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/Android-Kernel-Builder/releases/download/v20230705.1/thyme-kernelsu_20230705.zip", | ||
"version": "v20230705.1" | ||
}, | ||
{ | ||
"datetime": 1688521518.0, | ||
"desc": "- 第一版构建", | ||
"filename": "thyme-original", | ||
"id": 115645778, | ||
"size": 24357917, | ||
"tag": "original", | ||
"type": "kernel", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/Android-Kernel-Builder/releases/download/v20230705.1/thyme-original_20230705.zip", | ||
"version": "v20230705.1" | ||
}, | ||
{ | ||
"datetime": 1689374279.0, | ||
"desc": "", | ||
"filename": "ArbitrarilyTong-2.0.0", | ||
"id": 117109574, | ||
"size": 1642814097, | ||
"tag": "UNOFFICIAL", | ||
"type": "system", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/device_xiaomi_thyme/releases/download/Test/ArbitrarilyTong-2.0.0-20230713-UNOFFICIAL-thyme.zip", | ||
"version": "20230713@ArbitrarilyTong-Test" | ||
}, | ||
{ | ||
"datetime": 1689374903.0, | ||
"desc": "", | ||
"filename": "ArbitrarilyTong-2.0.0", | ||
"id": 117110322, | ||
"size": 1642814097, | ||
"tag": "UNOFFICIAL", | ||
"type": "system", | ||
"url": "https://github.com/ArbitrarilyTong-Devices/device_xiaomi_thyme/releases/download/Test/ArbitrarilyTong-2.0.0-20230714-UNOFFICIAL-thyme.zip", | ||
"version": "20230714@ArbitrarilyTong-Test" | ||
} | ||
] |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,122 +1,151 @@ | ||
import json | ||
import os | ||
from datetime import datetime | ||
|
||
import json | ||
import requests | ||
import sys | ||
from datetime import datetime | ||
|
||
|
||
def check_and_return(url): | ||
def send_get_request(url): | ||
""" | ||
该函数向指定 URL 发送 GET 请求,如果请求成功,则返回 JSON 响应。 | ||
:param url: `url` 参数是您想要向其发送 GET 请求的 API 端点的 URL。 | ||
:return: 如果状态代码为 200,则为 JSON 响应。如果状态代码为 403,则打印一条有关超出速率限制的消息。如果请求期间出现错误,则会打印错误消息。 | ||
""" | ||
try: | ||
response = requests.get(url) | ||
if response.status_code == 200: | ||
releases = response.json() | ||
return releases | ||
return response.json() | ||
elif response.status_code == 403: | ||
print( | ||
"Rate limit exceeded. Please try again later or provide an access token for authentication.") | ||
return None | ||
else: | ||
print(f"Error occurred during request: {response.text}") | ||
return None | ||
print("Rate limit exceeded. Please try again later or provide an access token for authentication.") | ||
except requests.exceptions.RequestException as e: | ||
print(f"Error occurred during request: {e}") | ||
return None | ||
|
||
|
||
def get_releases(repo_owner, repo_name): | ||
""" | ||
函数“get_releases”接受存储库所有者和名称,构造 GitHub API 的 URL,并发送 GET 请求以检索指定存储库的版本。 | ||
:param repo_owner: GitHub 上存储库的所有者。这通常是创建存储库的个人或组的用户名或组织名称。 | ||
:param repo_name: GitHub 上存储库的名称。 | ||
:return: 对 GitHub API 端点发出的 API 请求的响应,用于检索存储库的版本。 | ||
""" | ||
url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/releases" | ||
return check_and_return(url) | ||
return send_get_request(url) | ||
|
||
|
||
def get_release_files(release): | ||
""" | ||
函数“get_release_files”检索给定版本的版本文件和版本主体。 | ||
:param release: “release”参数是一个字典,其中包含有关发布的信息。它可能包括发布版本、发布日期以及与发布相关的资产列表等详细信息。 | ||
:return: 两个值:对release_files_url 的 GET 请求的结果和发布的正文。 | ||
""" | ||
release_files_url = release['assets_url'] | ||
release_body = release['body'] | ||
return check_and_return(release_files_url),release_body | ||
|
||
|
||
def generate_release_dict(release_files, release_name, mode_type, device_name, release_desc): | ||
if release_files is None: | ||
return | ||
|
||
release_infos = [] | ||
for file_info in release_files: | ||
if mode_type == "kernel": | ||
release_infos.append(generate_kernel_release_dict(file_info, release_name, device_name, release_desc)) | ||
elif mode_type == "system": | ||
release_infos.append(generate_system_release_dict(file_info, mode_type)) | ||
return release_infos | ||
|
||
|
||
def generate_kernel_release_dict(file_info, release_name, device_name: str, release_desc): | ||
name = str(file_info["name"]).replace(".zip", "").upper() | ||
# filter device | ||
if device_name.lower() not in name.lower(): | ||
return None | ||
tag = "KernelSU" if "KERNELSU" in name else "Original" | ||
return send_get_request(release_files_url), release['body'] | ||
|
||
|
||
def generate_release_info(file_info, name, tag, version, desc, mode_type): | ||
""" | ||
函数“generate_release_info”接受各种参数并返回包含有关发布信息的字典。 | ||
:param file_info: `file_info` 参数是一个字典,包含有关文件的信息。它应该具有以下键: | ||
:param name: name参数代表发布文件的文件名。 | ||
:param tag: “tag”参数是一个字符串,表示文件的标签或版本名称。它用于标识文件的特定版本或发行版。 | ||
:param version: “version”参数是一个字符串,表示版本的版本号。 | ||
:param desc: “desc”参数是一个字符串,表示版本的描述。它提供有关该版本的附加信息或详细信息。 | ||
:param mode_type: 参数“mode_type”用于指定释放的类型。它可以是表示发布类型的字符串,例如“stable”、“beta”、“alpha”等。 | ||
:return: 包含有关发布的信息的字典。 | ||
""" | ||
return { | ||
"datetime": datetime.strptime(file_info["updated_at"], '%Y-%m-%dT%H:%M:%SZ').timestamp(), | ||
"filename": name, | ||
"id": file_info["id"], | ||
"tag": tag, | ||
"size": file_info["size"], | ||
"url": file_info['browser_download_url'], | ||
"version": release_name, | ||
"desc": release_desc | ||
"version": version, | ||
"desc": desc, | ||
"type": mode_type | ||
} | ||
|
||
|
||
# TODO | ||
def generate_system_release_dict(file_info, release_name): | ||
return { | ||
"datetime": datetime.strptime(file_info["updated_at"], '%Y-%m-%dT%H:%M:%SZ').timestamp(), | ||
"filename": file_info["name"], | ||
"id": file_info["id"], | ||
"tag": "Tong", | ||
"size": file_info["size"], | ||
"url": file_info['browser_download_url'], | ||
"version": release_name | ||
} | ||
def generate_release_list(release_files, release_name, mode_type, device_name, release_desc): | ||
""" | ||
函数generate_release_list根据提供的发布文件、发布名称、模式类型、设备名称和发布描述生成发布信息列表。 | ||
:param release_files: 包含有关发布文件信息的字典列表。每个字典都应该有一个“name”键,其中包含发布文件的名称。 | ||
:param release_name: 发布的名称。 | ||
:param mode_type: `mode_type` 参数是一个字符串,指定释放模式的类型。它可以有两个可能的值:“kernel”或“system”。 | ||
:param device_name: “device_name”参数是为其生成发布列表的设备的名称。用于根据设备名称过滤发布文件。 | ||
:param release_desc: `release_desc` 参数是一个字符串,表示版本的描述或详细信息。它提供有关该版本的其他信息,例如新功能、错误修复或任何其他相关信息。 | ||
:return: 发布信息列表。 | ||
""" | ||
if release_files is None: | ||
return [] | ||
|
||
release_list = [] | ||
for file_info in release_files: | ||
if mode_type == "kernel": | ||
file_name = str(file_info["name"]).replace(".zip", "").split("_")[0] | ||
device, tag = file_name.split("-") | ||
if device == device_name: | ||
release_list.append(generate_release_info(file_info, file_name, tag, release_name, release_desc, mode_type)) | ||
elif mode_type == "system": | ||
file_name = str(file_info["name"]).replace(".zip", "").split("-") | ||
name = "-".join(file_name[:2]) | ||
tag = file_name[3] | ||
if file_name[4] == device_name: | ||
release_list.append(generate_release_info(file_info, name, tag, file_name[2] + "@" + release_name, release_desc, mode_type)) | ||
return release_list | ||
|
||
|
||
def get_repo_release_info(repo_owner, repo_name, mode_type, device_name): | ||
""" | ||
函数“get_repo_release_info”检索给定存储库、模式类型和设备名称的发布信息。 | ||
:param repo_owner: 存储库的所有者(例如 GitHub 上的用户名或组织名称)。 | ||
:param repo_name: `repo_name` 参数是存储库的名称。它是一个字符串,指定要从中获取发布信息的存储库的名称。 | ||
:param mode_type: `mode_type` 参数用于指定发布的模式。它可以是特定版本,例如“稳定”或“测试版”,也可以是该版本重点关注的特定特性或功能。 | ||
:param device_name: `device_name` 参数是您要检索其版本信息的设备的名称。 | ||
:return: 给定存储库、模式类型和设备名称的发布信息列表。 | ||
""" | ||
releases = get_releases(repo_owner, repo_name) | ||
|
||
download_list = [] | ||
release_list = [] | ||
|
||
if releases is not None: | ||
for release in releases: | ||
release_name = release['name'] | ||
release_files, release_desc = get_release_files(release) | ||
download_list.extend(generate_release_dict( | ||
release_files, release_name, mode_type, device_name, release_desc)) | ||
release_list.extend(generate_release_list(release_files, release_name, mode_type, device_name, release_desc)) | ||
|
||
return download_list | ||
return release_list | ||
|
||
|
||
def generate_save_path(mode_type, device_name): | ||
def generate_save_path(device_name): | ||
""" | ||
该函数根据当前工作目录和设备名称生成 JSON 文件的保存路径。 | ||
:param device_name: device_name 参数是一个字符串,表示要为其生成保存路径的设备的名称。 | ||
:return: 基于设备名称的 JSON 文件的保存路径。 | ||
""" | ||
root_dir = os.getcwd() | ||
combine_path = os.path.join(root_dir, device_name) | ||
os.makedirs(combine_path, exist_ok=True) # mkdir -p | ||
combine_path = os.path.join(combine_path, mode_type + ".json") | ||
return combine_path | ||
save_path = os.path.join(root_dir, device_name + ".json") | ||
return save_path | ||
|
||
|
||
def generate(owner,repo,mode_type,device_name): | ||
save_path = generate_save_path(mode_type, device_name) | ||
download_list = get_repo_release_info(owner, repo, mode_type, device_name) | ||
with open(save_path, "w", encoding='utf-8') as f: | ||
json.dump(download_list, f, indent=2, sort_keys=True, ensure_ascii=False) | ||
|
||
# `if __name__ == '__main__':` 块是一种常见的 Python 习惯用法,它允许脚本作为独立程序执行或作为模块导入。 | ||
if __name__ == '__main__': | ||
# Opening JSON file | ||
with open('sync.json',) as f: | ||
with open('sync.json') as f: | ||
sync_list = json.load(f) | ||
for device,repo_list in sync_list.items(): | ||
# For kernel | ||
if repo_list["kernel_repo"]: | ||
owner, repo = repo_list["kernel_repo"].split('/') | ||
generate(owner,repo,"kernel",device) | ||
# For system | ||
if repo_list["system_repo"]: | ||
owner, repo = repo_list["system_repo"].split('/') | ||
generate(owner,repo,"system",device) | ||
for device, repo_list in sync_list.items(): | ||
release_list = [] | ||
if kernel_repo := repo_list.get("kernel_repo"): | ||
owner, repo = kernel_repo.split('/') | ||
release_list.extend(get_repo_release_info(owner, repo, "kernel", device)) | ||
if system_repo := repo_list.get("system_repo"): | ||
owner, repo = system_repo.split('/') | ||
release_list.extend(get_repo_release_info(owner, repo, "system", device)) | ||
save_path = generate_save_path(device) | ||
with open(save_path, "w", encoding='utf-8') as f: | ||
json.dump(release_list, f, indent=2, sort_keys=True, ensure_ascii=False) |