API 接口说明
注意
API 接口将在 Ghost Downloader v3.6 版本中正式推出。本文档为预览版,随着开发进展可能会有所变化。
本文档提供了 Ghost Downloader 插件系统的详细 API 参考,帮助开发者了解可用的接口、类和方法。
核心 API
GhostPlugin 类
所有插件必须继承的基类,提供插件的基本功能和生命周期管理。
python
class GhostPlugin:
def __init__(self, app):
"""
初始化插件
参数:
app: 应用程序实例
"""
pass
def initialize(self):
"""
插件初始化,在应用程序加载插件时调用
返回:
bool: 初始化是否成功
"""
pass
def shutdown(self):
"""
插件关闭,在应用程序卸载插件时调用
返回:
bool: 关闭是否成功
"""
pass
def get_settings(self):
"""
获取插件设置
返回:
PluginSettings: 插件设置实例
"""
pass
def on(self, event, callback):
"""
注册事件监听器
参数:
event: 事件名称
callback: 回调函数
返回:
int: 监听器ID
"""
pass
def off(self, event, listener_id):
"""
移除事件监听器
参数:
event: 事件名称
listener_id: 监听器ID
返回:
bool: 是否成功移除
"""
pass
def emit(self, event, *args, **kwargs):
"""
触发事件
参数:
event: 事件名称
*args, **kwargs: 传递给事件监听器的参数
"""
pass
PluginSettings 类
用于管理插件设置的类。
python
class PluginSettings:
def get(self, key, default=None):
"""
获取设置值
参数:
key: 设置键名
default: 默认值,如果设置不存在则返回此值
返回:
设置值或默认值
"""
pass
def set(self, key, value):
"""
设置值
参数:
key: 设置键名
value: 设置值
返回:
bool: 是否成功设置
"""
pass
def has(self, key):
"""
检查设置是否存在
参数:
key: 设置键名
返回:
bool: 设置是否存在
"""
pass
def remove(self, key):
"""
移除设置
参数:
key: 设置键名
返回:
bool: 是否成功移除
"""
pass
def clear(self):
"""
清除所有设置
返回:
bool: 是否成功清除
"""
pass
Logger 类
提供日志记录功能的类。
python
class Logger:
def debug(self, message):
"""记录调试信息"""
pass
def info(self, message):
"""记录信息"""
pass
def warning(self, message):
"""记录警告"""
pass
def error(self, message):
"""记录错误"""
pass
def set_level(self, level):
"""
设置日志级别
参数:
level: 日志级别 ("debug", "info", "warning", "error")
"""
pass
下载 API
DownloadManager 类
管理下载任务的类。
python
class DownloadManager:
def create_task(self, url, save_path, options=None):
"""
创建下载任务
参数:
url: 下载链接
save_path: 保存路径
options: 下载选项
返回:
DownloadTask: 下载任务实例
"""
pass
def start_task(self, task_id):
"""
开始下载任务
参数:
task_id: 任务ID
返回:
bool: 是否成功开始
"""
pass
def pause_task(self, task_id):
"""
暂停下载任务
参数:
task_id: 任务ID
返回:
bool: 是否成功暂停
"""
pass
def resume_task(self, task_id):
"""
恢复下载任务
参数:
task_id: 任务ID
返回:
bool: 是否成功恢复
"""
pass
def cancel_task(self, task_id):
"""
取消下载任务
参数:
task_id: 任务ID
返回:
bool: 是否成功取消
"""
pass
def get_task(self, task_id):
"""
获取下载任务
参数:
task_id: 任务ID
返回:
DownloadTask: 下载任务实例
"""
pass
def get_all_tasks(self):
"""
获取所有下载任务
返回:
list: 下载任务列表
"""
pass
def on(self, event, callback):
"""
注册事件监听器
支持的事件:
- task_created: 任务创建时触发
- task_started: 任务开始时触发
- task_paused: 任务暂停时触发
- task_resumed: 任务恢复时触发
- task_cancelled: 任务取消时触发
- task_completed: 任务完成时触发
- task_failed: 任务失败时触发
- task_progress: 任务进度更新时触发
参数:
event: 事件名称
callback: 回调函数
返回:
int: 监听器ID
"""
pass
DownloadTask 类
表示下载任务的类。
python
class DownloadTask:
@property
def id(self):
"""任务ID"""
pass
@property
def url(self):
"""下载链接"""
pass
@property
def save_path(self):
"""保存路径"""
pass
@property
def file_name(self):
"""文件名"""
pass
@property
def status(self):
"""
任务状态
可能的值:
- "pending": 等待中
- "downloading": 下载中
- "paused": 已暂停
- "completed": 已完成
- "cancelled": 已取消
- "failed": 失败
"""
pass
@property
def progress(self):
"""下载进度 (0-100)"""
pass
@property
def speed(self):
"""下载速度 (bytes/s)"""
pass
@property
def size(self):
"""文件总大小 (bytes)"""
pass
@property
def downloaded(self):
"""已下载大小 (bytes)"""
pass
@property
def remaining(self):
"""剩余时间 (秒)"""
pass
@property
def created_at(self):
"""创建时间"""
pass
@property
def started_at(self):
"""开始时间"""
pass
@property
def completed_at(self):
"""完成时间"""
pass
@property
def error(self):
"""错误信息"""
pass
@property
def options(self):
"""下载选项"""
pass
ProtocolHandler 类
自定义下载协议处理器的基类。
python
class ProtocolHandler:
def can_handle(self, url):
"""
检查是否可以处理指定URL
参数:
url: 下载链接
返回:
bool: 是否可以处理
"""
pass
def process(self, task):
"""
处理下载任务
参数:
task: 下载任务实例
返回:
bool: 是否成功处理
"""
pass
UI API
UIManager 类
管理用户界面的类。
python
class UIManager:
def create_action(self, text, callback, icon=None, shortcut=None, tooltip=None):
"""
创建动作
参数:
text: 动作文本
callback: 回调函数
icon: 图标
shortcut: 快捷键
tooltip: 工具提示
返回:
Action: 动作实例
"""
pass
def add_menu_action(self, menu, action, before=None):
"""
添加菜单动作
参数:
menu: 菜单名称
action: 动作实例
before: 插入位置
返回:
bool: 是否成功添加
"""
pass
def add_toolbar_action(self, action):
"""
添加工具栏动作
参数:
action: 动作实例
返回:
bool: 是否成功添加
"""
pass
def register_settings_page(self, id, title, widget_class):
"""
注册设置页面
参数:
id: 页面ID
title: 页面标题
widget_class: 设置页面控件类
返回:
bool: 是否成功注册
"""
pass
def show_message(self, title, message, type="info"):
"""
显示消息对话框
参数:
title: 标题
message: 消息内容
type: 消息类型 ("info", "warning", "error", "question")
"""
pass
def show_notification(self, message, duration=3000):
"""
显示通知
参数:
message: 通知内容
duration: 显示时间 (毫秒)
"""
pass
SettingsWidget 类
用于创建设置页面的基类。
python
class SettingsWidget:
def __init__(self, parent=None):
"""
初始化设置控件
参数:
parent: 父控件
"""
pass
def save_settings(self):
"""
保存设置
返回:
bool: 是否成功保存
"""
pass
def load_settings(self):
"""
加载设置
返回:
bool: 是否成功加载
"""
pass
工具 API
FileSystem 类
提供文件系统操作的类。
python
class FileSystem:
def read_file(self, path, encoding="utf-8"):
"""
读取文件内容
参数:
path: 文件路径
encoding: 编码
返回:
str: 文件内容
"""
pass
def write_file(self, path, content, encoding="utf-8"):
"""
写入文件内容
参数:
path: 文件路径
content: 文件内容
encoding: 编码
返回:
bool: 是否成功写入
"""
pass
def file_exists(self, path):
"""
检查文件是否存在
参数:
path: 文件路径
返回:
bool: 文件是否存在
"""
pass
def dir_exists(self, path):
"""
检查目录是否存在
参数:
path: 目录路径
返回:
bool: 目录是否存在
"""
pass
def create_dir(self, path):
"""
创建目录
参数:
path: 目录路径
返回:
bool: 是否成功创建
"""
pass
def list_dir(self, path):
"""
列出目录内容
参数:
path: 目录路径
返回:
list: 目录内容列表
"""
pass
Network 类
提供网络操作的类。
python
class Network:
async def http_get(self, url, headers=None, params=None, timeout=30):
"""
发送HTTP GET请求
参数:
url: 请求URL
headers: 请求头
params: 请求参数
timeout: 超时时间 (秒)
返回:
Response: 响应对象
"""
pass
async def http_post(self, url, data=None, json=None, headers=None, timeout=30):
"""
发送HTTP POST请求
参数:
url: 请求URL
data: 表单数据
json: JSON数据
headers: 请求头
timeout: 超时时间 (秒)
返回:
Response: 响应对象
"""
pass
async def download_file(self, url, save_path, progress_callback=None, headers=None, timeout=30):
"""
下载文件
参数:
url: 下载链接
save_path: 保存路径
progress_callback: 进度回调函数
headers: 请求头
timeout: 超时时间 (秒)
返回:
bool: 是否成功下载
"""
pass
Response 类
表示HTTP响应的类。
python
class Response:
@property
def status_code(self):
"""状态码"""
pass
@property
def headers(self):
"""响应头"""
pass
@property
def cookies(self):
"""Cookie"""
pass
async def text(self):
"""
获取响应文本
返回:
str: 响应文本
"""
pass
async def json(self):
"""
获取JSON响应
返回:
dict: JSON数据
"""
pass
async def bytes(self):
"""
获取二进制响应
返回:
bytes: 二进制数据
"""
pass
事件系统
Ghost Downloader 使用事件系统进行组件间通信。以下是主要的事件:
应用程序事件
app:startup
: 应用程序启动时触发app:shutdown
: 应用程序关闭时触发app:settings_changed
: 应用程序设置更改时触发app:theme_changed
: 主题更改时触发app:language_changed
: 语言更改时触发
下载管理器事件
download_manager:task_created
: 任务创建时触发download_manager:task_started
: 任务开始时触发download_manager:task_paused
: 任务暂停时触发download_manager:task_resumed
: 任务恢复时触发download_manager:task_cancelled
: 任务取消时触发download_manager:task_completed
: 任务完成时触发download_manager:task_failed
: 任务失败时触发download_manager:task_progress
: 任务进度更新时触发
插件管理器事件
plugin_manager:plugin_loaded
: 插件加载时触发plugin_manager:plugin_unloaded
: 插件卸载时触发plugin_manager:plugin_enabled
: 插件启用时触发plugin_manager:plugin_disabled
: 插件禁用时触发
自定义事件
插件可以发出自定义事件,建议使用以下格式:
plugin_id:event_name
例如:
python
# 发出事件
self.emit("my_plugin:data_ready", data)
# 监听事件
self.app.plugin_manager.on("my_plugin:data_ready", self.on_data_ready)
常量
下载状态常量
python
DOWNLOAD_STATUS = {
"PENDING": "pending",
"DOWNLOADING": "downloading",
"PAUSED": "paused",
"COMPLETED": "completed",
"CANCELLED": "cancelled",
"FAILED": "failed"
}
消息类型常量
python
MESSAGE_TYPE = {
"INFO": "info",
"WARNING": "warning",
"ERROR": "error",
"QUESTION": "question"
}
日志级别常量
python
LOG_LEVEL = {
"DEBUG": "debug",
"INFO": "info",
"WARNING": "warning",
"ERROR": "error"
}
辅助函数
python
def format_size(size, precision=2):
"""
格式化文件大小
参数:
size: 文件大小 (bytes)
precision: 精度
返回:
str: 格式化后的大小
"""
pass
def format_time(seconds):
"""
格式化时间
参数:
seconds: 时间 (秒)
返回:
str: 格式化后的时间
"""
pass
def format_speed(bytes_per_second):
"""
格式化速度
参数:
bytes_per_second: 速度 (bytes/s)
返回:
str: 格式化后的速度
"""
pass
def parse_url(url):
"""
解析URL
参数:
url: URL
返回:
dict: 解析结果
"""
pass
def generate_id():
"""
生成唯一ID
返回:
str: 唯一ID
"""
pass
使用示例
以下是一些 API 使用示例:
创建下载任务
python
# 创建下载任务
async def create_download(self):
url = "https://example.com/file.zip"
save_path = "downloads/file.zip"
# 创建任务
task = self.app.download_manager.create_task(url, save_path, {
"threads": 8,
"use_ai": True,
"headers": {
"User-Agent": "Ghost Downloader/3.6"
}
})
# 启动任务
self.app.download_manager.start_task(task.id)
# 监听任务完成事件
def on_task_completed(task_id, task_data):
if task_id == task.id:
self.logger.info(f"Task completed: {task_data['file_name']}")
# 移除监听器
self.app.download_manager.off("task_completed", listener_id)
# 注册监听器
listener_id = self.app.download_manager.on("task_completed", on_task_completed)
添加菜单项
python
def add_menu_item(self):
# 创建动作
action = self.app.ui_manager.create_action(
"我的插件选项",
self.on_menu_item_clicked,
icon="path/to/icon.png",
shortcut="Ctrl+Shift+M",
tooltip="打开我的插件选项"
)
# 添加到工具菜单
self.app.ui_manager.add_menu_action("tools", action)
def on_menu_item_clicked(self):
# 显示消息
self.app.ui_manager.show_message(
"我的插件",
"您点击了菜单项!",
"info"
)
使用文件系统 API
python
async def process_file(self):
# 检查文件是否存在
if not self.app.file_system.file_exists("data.json"):
# 创建目录
self.app.file_system.create_dir("data")
# 写入文件
self.app.file_system.write_file(
"data/data.json",
'{"version": "1.0.0", "data": []}'
)
# 读取文件
content = self.app.file_system.read_file("data/data.json")
# 解析 JSON
data = json.loads(content)
# 修改数据
data["data"].append({"timestamp": time.time()})
# 写回文件
self.app.file_system.write_file(
"data/data.json",
json.dumps(data, indent=2)
)
使用网络 API
python
async def fetch_data(self):
try:
# 发送 GET 请求
response = await self.app.network.http_get(
"https://api.example.com/data",
headers={
"Authorization": "Bearer token"
}
)
# 检查状态码
if response.status_code == 200:
# 解析 JSON 响应
data = await response.json()
return data
else:
self.logger.error(f"API error: {response.status_code}")
return None
except Exception as e:
self.logger.error(f"Network error: {e}")
return None
更多信息
有关 API 的更多信息,请参考:
如果您发现任何问题或有改进建议,请在 GitHub 上提交 issue。