TTHSD Python便捷接口回调函数示例
python
from typing import Literal, TypedDict
# 事件字典类型定义
class Event(TypedDict):
Type: Literal['start', 'startOne', 'update', 'end', 'endOne', 'msg']
Name: str
ShowName: str
ID: str
def callback_func(event_dict: Event, msg_dict: dict[str, str | int | float]):
# 处理不同类型的事件消息
event_type: Literal['start', 'startOne', 'update', 'end', 'endOne', 'msg'] = event_dict.get('Type', '')
event_name: str = event_dict.get('Name', '') # pyright: ignore[reportUnusedVariable] # 事件名称
event_showname: str = event_dict.get('ShowName', '') # 事件显示名称
event_id: str = event_dict.get('ID', '') # 事件会话/实例ID
if event_type == 'update': # 更新类型事件
total: int = msg_dict.get('Total', 0) # 待下载总字节数 # pyright: ignore[reportAssignmentType]
downloaded: int = msg_dict.get('Downloaded', 0) # 已下载字节数 # pyright: ignore[reportAssignmentType]
speed: float = msg_dict.get('Speed', 0.0) # 下载速度(新版TTHSD内核已移除此字段) # pyright: ignore[reportAssignmentType]
# 更新进度显示
print(f"{event_showname}({event_id}):速度:{speed:.2f} B/s {downloaded}/{total} 字节,{msg_dict.get('aaa')}", end='\r', flush=True)
elif event_type == 'startOne': # 单个文件开始下载事件
url: str = msg_dict.get('URL', '') # 下载URL地址 # pyright: ignore[reportAssignmentType]
task_id: str = msg_dict.get('ID', '') # 任务标识符 # pyright: ignore[reportUnusedVariable, reportAssignmentType]
index: int = msg_dict.get('Index', 0) # 任务索引编号 # pyright: ignore[reportAssignmentType]
total_tasks: int = msg_dict.get('Total', 0) # 总任务数量 # pyright: ignore[reportAssignmentType]
print(f"\n{event_showname}({event_id}):开始下载:{url},这是第 {index} 个下载任务,总共 {total_tasks} 个任务。")
elif event_type == 'start': # 整体下载开始事件
print(f"\n{event_showname}({event_id}):开始下载")
elif event_type == 'endOne': # 单个文件下载完成事件
url: str = msg_dict.get('URL', '') # 下载URL地址 # pyright: ignore[reportAssignmentType]
task_id: str = msg_dict.get('ID', '') # 任务标识符 # pyright: ignore[reportUnusedVariable, reportAssignmentType]
index: int = msg_dict.get('Index', 0) # 任务索引编号 # pyright: ignore[reportAssignmentType]
total_tasks: int = msg_dict.get('Total', 0) # 总任务数量 # pyright: ignore[reportAssignmentType]
print(f"\n{event_showname}({event_id}):下载完成:{url},这是第 {index} 个下载任务,总共 {total_tasks} 个任务。")
elif event_type == 'end': # 整体下载结束事件
print(f"\n{event_showname}({event_id}):下载完成或已被取消")
elif event_type == 'msg': # 消息类型事件
text: str = msg_dict.get('Text', '') # 消息文本内容 # pyright: ignore[reportAssignmentType]
print(f"\n{event_showname}({event_id}):{text}")
elif event_type == 'err': # 错误事件
error: str = msg_dict.get('Error', '') # 错误消息内容 # pyright: ignore[reportAssignmentType]
print(f"\n{event_showname}({event_id}):{error}")