b06688f1dbc5000d67d1d91e7c06cf40f71293f6
主人 2026-10-06 拍板:分享进来的内容不再「一落地就发」,要像其他 IM 一样先给一个 确认面板。此前 ChatScreen 的分享落地 effect 取走内容后**直接**调 sendShared, 用户没有任何确认机会;现在它把取走的那一份放进 Compose 状态,面板靠它渲染。 新增 `ui/chat/ShareConfirmPanel.kt`(Miuix 自己的 `WindowDialog`,不是 Material3): - 预览:图片缩略图(与待发草稿预览同形)+ 文件芯片(显示名 / 体积)+ 分享正文(三行, 全文在下面那个输入框里,可编辑); - 输入框:初值就是分享进来的正文本身,**一个字符都不加**(不拼来源标记——那是红线); - 「取消」= 本次分享作废(不发送、也不塞回待发队列);「发送」才走既有 sendShared。 为什么这么接线(都在 ChatScreen 那一小段里): - **取走只发生一次**:`ShareIntake.take()` 只在 `shareConfirm == null` 时被调用,而 `shareConfirm == null` 同时是这个 effect 的键 ⇒ 面板一关就再跑一遍判据、把面板开着时 攒下的下一条分享接上(不加这个键,那一条会一直躺在队列里等连接状态碰巧再变一次); - 面板开着时新来的分享**原地留在队列里等**,不覆盖用户正看着的那一份; - 告知按**真正发出去的那一份**算(`share.copy(text = 输入框内容)`):正文可能刚被用户改过, 拿改之前那份去算会说出「正文较长、本想作为文件发送」这种与事实不符的话。 未动:shareLanding / shareNoticeFor / shareWaitingNotice 的语义,sendShared 里 「超长正文 → 文件」那条裁决,ShareIntake 的提取与暂存,W49/W50/W51 的判据。 判据抽成纯函数并单测(`ShareConfirmTest`,8 条):预览该显示哪几样(图片数 / 文件 / 正文是否 非空)、输入框初值、以及「发送」可点 ≙ 真的会有东西发出去(与 sendShared 开头那条早退同一条)。 验收:./gradlew.bat --console=plain assembleDebug testDebugUnitTest → BUILD SUCCESSFUL, 102 suite / 1278 tests / 0 失败(基线 101 / 1270)。
Releases
5
Alpha_v0.1.0_4
Latest