HGhub 开发者HPP 1.0 草案

08 · 宿主界面

← 总览

本章说明界面层因插件化而发生的变更。界面不包含任何数据源知识:它只调用宿主命令, 把插件返回的数据按 05 内容模型 渲染。

1. 导航结构

首页      沉浸式播放器 / 从设置中选定的片源随机播放
分类      顶部按片源分栏 / 分类横向预览 / 全部与筛选
搜索      单选、多选或综合搜索
我的      收藏 / 来自片源 / 历史(追更收在收藏内)
插件      导入、开关、插件生成的表单、线路、日志、自检
设置      应用设置 + 插件相关设置

桌面侧栏上半部为首页、分类、插件中心、设置;搜索框单独放在顶部;下半部仅一个“我的片库”入口。 移动端复用旧版 40px 纯文字窄底栏:首页、搜索、分类、我的。插件中心放在“我的”的内容顶部,进入二级页面后隐藏底栏,返回后恢复。

排行榜页面删除。 上游的榜单不再有独立页面:插件用 catalog 的排序项(sorts) 或 home 里的一个分区表达(见 06 §6)。已有的榜单入口从导航中移除。

2. 插件页(新增)

插件中心在同一页面内提供“已安装”和“导入与订阅”两个分栏。前者管理数据源、解析器、账号、配置、状态及日志;后者处理文件、地址、代码、列表预览、订阅及更新。切换分栏保留正在填写的导入内容。

2.1 列表

按 meta.kind 分成两组:数据源与解析器。每行显示:

元素 说明
名称与版本 meta.name、meta.version;面向旧版协议时加标记
来源 导入时的本地路径或 URL;来自插件列表时显示列表名称
开关 启用 / 停用。停用后不再加载,也不出现在首页、分类、搜索的选择里
状态 停用 / 初始化中 / 就绪 / 初始化失败 / 缺少必需能力 / 运行时连续故障停用 / 有更新
操作 更新检查、移除(清除其数据)、进入详情

mature 为 true 的插件默认隐藏,在设置里开启"显示成人内容"后才出现。

2.2 导入

方式 界面
本地文件 文件选择器,支持一次选多个 .js
本地插件列表 选 manifest.json,展示条目列表供勾选
URL 输入地址;下载后识别 JS 插件或 JSON 列表,不要求扩展名
粘贴代码 文本框粘贴插件源码并导入(便于从聊天、论坛复制)

插件列表导入时,先展示条目(名称、版本、简介、是否已安装、已安装版本),默认全选,用户确认后逐个下载导入; 单个失败不影响其余,结束后汇总结果。已保存为订阅的列表,可在插件页顶部一键刷新。 默认启用并初始化新插件,也可选择仅安装。导入成功与初始化成功分别显示,不能把初始化失败伪装成文件未安装。 初始化中的插件不参与业务来源选择;需要人工处理时可直接进入详情页,不要求先搜索来触发加载。

2.3 插件详情

区块 内容
概况 名称、版本、简介、作者、主页、来源、protocol、声明的特性
插件生成的表单 §2.4
站点线路 实现 endpoints 时显示:线路列表、可达性探测(手动触发)、刷新、切换
设置 meta.settings 渲染表单;提交后宿主取消该插件调用、结束相关媒体会话并重新初始化
状态与数据 存储占用、清除缓存、清除数据(含登录态)
日志 最近日志,可复制导出
自检 按能力运行点播、直播或解析器链路;必要时用户提供条目 ID/播放页;分别显示通过、失败、跳过与缺少输入
更新 检查更新、更新到新版本(有新版本时)

2.4 插件生成的表单

插件声明表单,宿主渲染,用户在插件页里使用。 这是插件唯一能影响界面的方式。

两类来源,渲染方式一致:

来源 内容
auth 能力(06 §12) 登录方式:账号密码、验证码、网页登录等
ui 能力(06 §15) 插件自定义的动作:切换账号、自定义参数、选择线路等

渲染规则:

3. 首页

首页是打开即可播放的沉浸式舞台,不展示推荐卡片瀑布流、页面标题或宣传副标题。

3.1 片源选择

入口位于 设置 → 首页播放片源,首页不放换源入口。提供单选、多选、全选三种模式,选择在本机记忆,与搜索范围互不影响。只有已启用且具有播放及内容获取能力的片源参与;解析器不作为内容片源。

3.2 随机播放

3.3 播放交互

复用 Git 5f88442 的 Feed、PlayerControls、PlaybackLock、useSeekInput、底部 Sheet 与设置分组结构;VideoSurface 改接宿主准备的媒体会话,保留同一播放控制接口。

首页、搜索、分类、收藏和历史共用同一个播放器,不再使用独立作品详情页面。桌面详情、选集、评论从右侧伸出并让出视频空间,移动端使用底部抽屉。插件版不提供分享按钮。

移动端沿用单击清屏、双击暂停/播放、长按 2 倍速、长按上滑锁定倍速、横拖定位、双指缩放平移与纵向换片;清屏和全屏时隐藏底栏。

播放器提供播放 / 暂停、可拖动进度、音量与静音、倍速、字幕、全屏、平台支持时的画中画,以及触摸锁定。桌面支持 Space 播放、左右键跳转、M 静音、F 全屏。 控制栏闲置时淡出,鼠标移动、触碰或键盘焦点恢复显示。锁定时停止手势与快捷键换片。作品信息和播放线路设置保持次级层级;分集、更多信息和本地收藏从画面内操作。

4. 分类页

5. 搜索页

结果展示:

单源与聚合结果都使用旧版比例的海报卡片:封面、更新标记、标题、作者或片源,以及插件实际提供的播放/点赞数。合并卡片优先使用有封面的来源,通过该来源的宿主图片会话加载;桌面三至四列、移动端两列,保留紧凑间距。

模式 展示
单选 直接展示该插件的分页结果
多选 每个插件一个分栏(顶部标签),各自分页
综合 第一个分栏是"全部",按 06 §17.1 的规则把同一作品合并成一张卡片,卡片上标注来源数量;后续分栏是各插件的原始结果

6. 我的

片库提供三个互斥分栏:收藏、来自片源、历史。收藏中提供“只看追更”和更新检查。封面卡片展示片源、观看进度或来源不可用状态。“来自片源”才加载账号和云端列表,需要登录的来源在登录后加载;登录操作仍前往插件中心。

7. 统一播放器与详情抽屉

8. 设置页

分类 项
外观与播放 首页播放片源(单选 / 多选 / 全选)、主题、启动静音、音量记忆、默认清晰度偏好、自动播放下一条
网络 严格安全模式(说明作用于插件 API 与宿主媒体请求,网页视图使用独立平台网络栈)、网络诊断
插件 显示成人内容(mature)、启动时自动检查插件更新、默认参与综合搜索的插件、解析器偏好(按站点记住的选择,可清空)
存储 缓存清理(含插件缓存)、数据占用
关于 版本、更新检查、开源许可、日志导出

调整:

9. 界面用到的宿主命令

界面只通过这些命令与宿主交互,不直接接触插件对象。

命令 用途
plugin_call(pluginId, method, params, requestId) 调用已发布的能力方法,requestId 由界面预生成用于取消与日志关联
plugin_list() 插件清单:元信息、启用状态、初始化状态、来源、可用能力及具体方法、缺少的必需能力
plugin_import(source) 导入:本地路径、URL、粘贴的源码、插件列表
plugin_set_enabled(id, enabled) / plugin_remove(id) 开关与移除
plugin_check_update(id?) / plugin_apply_update(id) 检查与执行更新
plugin_form_actions(id) / plugin_form_submit(id, target, values) 插件页表单:target 为 auth 的方法 id 或 ui 的动作 id
plugin_settings_get(id) / plugin_settings_set(id, key, value) 插件设置
plugin_logs(id) / plugin_self_test(id) 日志与自检
plugin_retry_init(id) 重试初始化或在补齐必需能力后重新检查
endpoint_list(id, refresh?) / endpoint_set(id, endpointId) / endpoint_probe(id) 站点线路
resolver_preference_get() / resolver_preference_set(host, pluginId) 解析器偏好
library_* / history_* / progress_* 本地片库与进度
media_session_register(...) 内部:把 ImageRef / Stream 登记为本地媒体地址,供 <img> 与播放器使用
plugin_call_cancel(requestId) 通用调用取消;搜索改词、离开页面等使用同一机制
media_session_release(sessionId) 释放媒体会话,取消无人使用的资源请求

聚合搜索与首页播放队列由界面并行发起多个 plugin_call 实现,各来源的结果独立渲染; 宿主侧的限速与去重对界面透明(见 03 §3)。 plugin_call 接受界面预生成的 requestId,并在同一调用的日志、取消与返回中使用它; 只允许已发布的能力方法,不允许通过任意对象路径访问工厂、dispose 或宿主内部对象。