Skip to content

feat(room): hand the screen the room's retained posts when it seats itself #110

Description

@smileygames

purpose

画面が席に着いた時点で、部屋が保持している発言を渡して描く。発言を一度拒否させなくても、webview が読み込み直されたあとの画面が部屋の記憶に追いつく。

観測(Master、2026-08-27)

訂正を含む。 この issue は当初「スリープ後に履歴が戻らない」と書いて起票された。その後 Master が実機で追加観測している:

スリープ後に書き込むと履歴が出てきて、もう一度書き込むと書き込める。

戻っている。 #108 が入れた経路(拒否が運んできた発言をその場で描く)がそのとおりに働いており、実機で確認できた。当初の観測「消えたまま」は、書き込みを試す前の画面を見た報告であった。

したがってこの issue が残す問題は、当初書いたものより小さい。履歴に追いつくために、まず一度拒否される投稿を出さなければならないという点である。スリープから戻った画面が部屋を見るのに、失敗する操作を一度挟む必要はない。

premise

消え方は二種類あり、片方は今日の材料で戻せる

経路 Floor の保持分 取り戻し
webview の読み込み直し(スリープ復帰・再読み込み) 生きている(部屋のプロセスは動いたまま) この issue
アプリ自体の再起動 部屋ごと消える #48(ディスク永続化)

スリープで観測されているのは上の経路である。部屋は room_floor::FloorVecDeque に直近 512 件(DEFAULT_CAPACITY)を持ち続けているのに、画面はそれを受け取る口を持たない。

画面には部屋を読む口が無い(席に着く時点では)

Tauri コマンドは room_port / room_participants / room_join / room_post のみであり、room_joinResult<(), String> を返す——席に着いたことだけを返し、部屋が何を覚えているかは渡さない。

当初この節は「イベントを受け取れなかった発言は二度と画面に来ない」と書いていた。これは誤りである——#108 のあとに書きながら、#108 が入る前の状態を書いていた。実際には room_post の拒否が発言を運んでおり、そこが唯一の読み出し口として働いている。残っているのは、その口が投稿の失敗にしか開かないことである。

描く仕組みは #108 で既に在る

src/main.tsdrawMissed が、渡された発言列を drawnIds で重複を落としながら順に描き、透かしを最後の発言まで進める。この issue が足すのは渡す経路であって、描き方ではない。

constraints

未確定(詰めるところ)

  1. room_join の戻り値に載せるか、独立したコマンドにするか。席に着く瞬間と描く瞬間を分けたいなら後者。
  2. 席の sinceFloor::seq の初期位置)との関係。現状「接続より前の発言は配信されていないので missed に数えない」という設計であり、画面が過去分を描いたあとの透かしがどこに立つかを決める必要がある。
  3. 描いた分の見え方。bug(room): a refusal throws away the posts it was handed, locking the screen out of speaking #108 と同じく印を付けない方針でよいか。

範囲外

  • ディスクへの永続化(feat(room): the room keeps no history #48)。アプリの再起動をまたぐ履歴はそちらの担当であり、この issue はアプリが生きている間だけを扱う。

#48 / #108

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新機能・改善要望forming本文を再構築しながら要求を整えている状態

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions