butubb
3bd7f636a0
feat(大屏): 顶部加「📤 发布」按钮 —— 选设备直接注入视频/图片、注入剪贴板
用户要求:"大屏按钮右边加一个按钮叫发布,就是选择设备号注入视频或者图片,位置就和发布页面的一样,
然后还有在选择设备号注入剪贴板"。
大屏(`/wall`)顶栏「一键亮屏」右边加 **「📤 发布」**,点开是一块面板:
· **设备**下拉(设备名 + 地址,离线会标注;每次打开现取最新列表)
· **视频 / 图片**:选文件 → 「注入素材」→ 推到该机相册 `/sdcard/DCIM/Camera`
· **剪贴板文字**:填一段 → 「注入剪贴板」→ 写进该机剪贴板(发文案用)
· 面板下方是操作日志(✅/❌ + 原因),失败会写清为什么
后端(`web/tools_api.py`,都按 **设备位** 放行 —— 大屏上随手一推是设备操作,不该要管理员位):
· `POST /api/tools/push_material`(form-data:file + serial):
保存上传 → `publish_flow.push_video` 推到相册(文件名带 `wall` 前缀、mtime 改成现在,
保证它在相册里排最前)→ `verify_pushed` 校验进没进相册索引 → 返回 `{ok,msg,remote,verify}`
· **不占位、不写库**:与「发布计划 → 推送」是两回事(那条按计划走占位/去重/回写状态);
这条是"手上有一段素材,想马上在这台机器上发"
· 扩展名按 `video_plan.MEDIA_EXTS` 校验(视频+图片),不在其中 → 400;设备不在线 → 400
· 临时目录用完即删(`finally` 里 rmtree)
· `POST /api/tools/push_clipboard`:与 `/api/tools/clipboard/set` **同一个实现**
(`_set_device_clipboard`),只是权限位不同
真机验过(A01):剪贴板注入 ✅;1×1 测试图推到相册 ✅(`verify=no_index` 的 ⚠ 是这张图太小、
媒体库没索引它,真视频/图片是 ✅);`.txt` 被 400 拦住 ✅;测试文件已从手机删掉、不留痕。
文档:doc/API.md 加两条接口(含请求/返回/错误口径)、README 实时看屏那行补上发布面板。