SuperAPI AI 工具集

follower-transport-stays-local

编程与开发

查看项目

更新于 10-17 16:17

技能介绍

用途

该技能讨论共享会话中“跟随者”(follower)的传输控制应如何实现。核心主张是:跟随不是被驱动。跟随者拥有自己的停止按钮,暂停是本地且静默的;按下播放时,应询问会话当前在哪里,而不是恢复本地播放位置。

主要能力

  • 跟随者的本地控制属于自己,暂停时不发布任何状态,避免一个人的停止按钮停掉整个会话。
  • 恢复时发出的是请求(requestSync),而非命令,通过普通应用路径应用中继返回的答案。
  • 将恢复后的答案视为完整状态(当前条目、位置和队列),而非仅传输更新。
  • 对本地传输流先去重(distinctUntilChanged),再决定是否触发追赶。
  • 角色检查(isSource/isHost)放在暂停与恢复分支之前,而非之内。
  • 仅共享轴是共享的;音量、输出设备、字幕、显示设置等本地设置不属于分歧。

使用方式

文档给出 Kotlin 代码片段,展示收集器如何映射本地运行标志并去重:

// adapted — names generalized; the collector maps the local running flag and dedupes it
.collect { locallyRunning ->
    val session = repository.session.value
    if (!session.inSession || session.isSource || applyingRemote) return@collect
    if (!locallyRunning) return@collect          // paused locally: leave the session running
    repository.requestSync()                     // resumed: ask where the session is NOW
}

并给出验证用的 grep 命令,用于检查跟随者本地传输收集器是否退出而非纠正,以及发布者是否真正按源角色门控:

grep -rn -B2 -A14 -E "\.(controlState|transportState)\b" --include="*.kt" . | grep -v "/build/" \
  | grep -E "isHost|isSource|applyingRemote|requestSync|\.play\(\)|\.pause\(\)|return@collect"
grep -rn -B1 -A2 "return@collect" --include="*.kt" . | grep -v "/build/" \
  | grep -E "!.*is(Host|Source)|is(Host|Source) *\|\|"
grep -rnE "if \(.*\bis(Host|Hosting|Source)\b.*\) *[a-z][A-Za-z]*\(" --include="*.kt" . | grep -v "/build/"

行为验证(双客户端):

  • 在跟随者上暂停:源必须继续播放,跟随者必须保持暂停,观察满十秒。
  • 跟随者暂停一分钟后恢复:必须落在源当前所在位置。
  • 跟随者暂停,让源切换条目两次,然后恢复:跟随者必须位于源当前条目。

适用场景

适用于实现共享会话中跟随者传输控制的 Kotlin 项目,尤其是需要让跟随者能够独立暂停而不影响整个会话的场景。

限制

文档未提供具体产品名称、安装命令、收费或价格信息。内容以设计原则、代码片段和验证命令为主,未给出完整可运行示例或平台支持范围。