推送端技能输入补翻页循环:下一页/上一页/第N页/next/last/one page 与拉取端同一条 parse_page_cmd,编号/二次确认/路径直输全保留,26项测试全绿
This commit is contained in:
@@ -242,8 +242,9 @@ def _pull_one(name: str, src: dict) -> None:
|
||||
|
||||
|
||||
def _flow_push() -> None:
|
||||
"""推送 / 覆盖更新(宝宝级):选目标终端 -> 打印本机 skill 编号列表 ->
|
||||
输编号选技能(1 / 1. 二次确认打印名字+简介,confirm 执行 / cancel 回退;
|
||||
"""推送 / 覆盖更新(宝宝级):选目标终端 -> 打印本机 skill 编号列表(带翻页)->
|
||||
翻页(下一页/上一页/第N页/next/last,与拉取端同一条 parse_page_cmd)、
|
||||
输编号选技能(1 / 1. 二次确认打印名字+简介,confirm 执行 / cancel 回列表;
|
||||
1 -confirm 跳过二次确认)或直接贴路径 / zip / SKILL.md -> 校验规范 -> 探查同名
|
||||
-> 确有同名才问一次覆盖 -> 写入。
|
||||
目标没有同名文件夹时直接写(没有目录和内容,覆盖无从谈起,问了也是白问)。
|
||||
@@ -255,29 +256,53 @@ def _flow_push() -> None:
|
||||
return
|
||||
# 选完目标就打本机 skill 列表(带编号)——push 要推的是本机技能
|
||||
local_names = ocskill.list_skill_names(ocskill.WIN_LOCAL_ROOT)
|
||||
if local_names:
|
||||
ocskill.render_page(local_names, 1, ocskill.WIN_LOCAL_ROOT)
|
||||
print(" 提示:编号 1 / 1. 会打印名字+简介二次确认(confirm 执行 / cancel 回退),"
|
||||
"1 -confirm 跳过确认;也可以直接贴路径 / zip / SKILL.md")
|
||||
src = ocskill.clean_input(ask(" 技能输入(编号 / 路径 / zip / SKILL.md,可带引号,回车取消): "))
|
||||
if not src:
|
||||
return
|
||||
# 0) 编号选择本机 skill(协议:1 / 1. 二次确认,1 -confirm 跳过)
|
||||
sel = ocskill.parse_sel(src)
|
||||
if sel is not None:
|
||||
if not local_names:
|
||||
print(" 本机 skill 目录为空,编号没得选;请直接贴路径 / zip。")
|
||||
src = None
|
||||
if not local_names:
|
||||
# 本机没列表可打:退化成单次输入(没有编号/翻页可言)
|
||||
src = ocskill.clean_input(ask(" 技能输入(路径 / zip / SKILL.md,可带引号,回车取消): "))
|
||||
if not src:
|
||||
return
|
||||
idx, skip = sel
|
||||
if not (1 <= idx <= len(local_names)):
|
||||
print(" 序号超出范围(1-%d)。" % len(local_names))
|
||||
else:
|
||||
print(" 提示:编号 1 / 1. 会打印名字+简介二次确认(confirm 执行 / cancel 回列表),"
|
||||
"1 -confirm 跳过确认;翻页:下一页/上一页/第N页/next/last/one page;"
|
||||
"也可直接贴路径 / zip / SKILL.md")
|
||||
page = 1
|
||||
while True:
|
||||
# 每次进循环先把当前页(带编号)打出来 —— 含首次进入
|
||||
page, pages = ocskill.render_page(local_names, page, ocskill.WIN_LOCAL_ROOT)
|
||||
cmd = ocskill.clean_input(ask(
|
||||
" 技能输入:翻页(下一页/上一页/第N页/next/last);编号选本机技能;"
|
||||
"或贴路径 / zip / SKILL.md;q 取消: "))
|
||||
if not cmd:
|
||||
print(" 已取消推送(回车=取消;翻页 / 编号 / 路径都能输)。")
|
||||
return
|
||||
if _norm(cmd) in ("q", "quit", "退出", "取消", "0", "b", "back", "返回"):
|
||||
print(" 已取消推送。")
|
||||
return
|
||||
# 1) 翻页命令(与拉取端同一条 parse_page_cmd:中英双语全支持)
|
||||
np = ocskill.parse_page_cmd(cmd, page, pages)
|
||||
if np is not None:
|
||||
page = np
|
||||
continue
|
||||
# 2) 编号选择本机 skill(协议:1 / 1. 二次确认,1 -confirm 跳过)
|
||||
sel = ocskill.parse_sel(cmd)
|
||||
if sel is not None:
|
||||
idx, skip = sel
|
||||
if not (1 <= idx <= len(local_names)):
|
||||
print(" 序号超出范围(1-%d),重输。" % len(local_names))
|
||||
continue
|
||||
if not (skip or _confirm_sel(idx, local_names, ocskill.WIN_LOCAL_ROOT,
|
||||
extra="目标:%s" % tgt["dir"])):
|
||||
print(" 已回退到列表,未推送。")
|
||||
continue
|
||||
src = os.path.join(ocskill.WIN_LOCAL_ROOT, local_names[idx - 1])
|
||||
print(" 选定:「%s」 -> %s" % (local_names[idx - 1], src))
|
||||
break
|
||||
# 3) 其余输入 = 路径 / zip / SKILL.md,交给下面的规范校验去判
|
||||
src = cmd
|
||||
break
|
||||
if not src:
|
||||
return
|
||||
if not (skip or _confirm_sel(idx, local_names, ocskill.WIN_LOCAL_ROOT,
|
||||
extra="目标:%s" % tgt["dir"])):
|
||||
print(" 已取消推送。")
|
||||
return
|
||||
src = os.path.join(ocskill.WIN_LOCAL_ROOT, local_names[idx - 1])
|
||||
print(" 选定:「%s」 -> %s" % (local_names[idx - 1], src))
|
||||
# 1) 先过一遍规范校验(只读探查,不写盘)
|
||||
probe = ocskill.probe_push(src, root=tgt["dir"])
|
||||
if not probe.get("ok"):
|
||||
|
||||
Reference in New Issue
Block a user