Show talk-circle partners and topic on the location panel and Now tab.

The frame and card share member ids; the client builds the sentence from the directory and locale.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 10:43:16 +03:00
co-authored by Cursor
parent 1a21a64b4b
commit 2034946378
20 changed files with 356 additions and 30 deletions
+17
View File
@@ -218,6 +218,23 @@ public sealed class School : IDisposable
public IReadOnlyList<PresenceSnapshot> CapturePresence() => PresenceSystem.Capture(this);
/// <summary>
/// Live circle for the presence frame and the person card. Null when this person is not talking.
/// Member ids include self and are sorted; names stay off the wire.
/// </summary>
public TalkCirclePresence? TalkCircleOf(string personId)
{
if (!TalkCircleByPerson.TryGetValue(personId, out var circleId)
|| !TalkCirclesById.TryGetValue(circleId, out var circle))
{
return null;
}
var members = circle.Members.ToArray();
Array.Sort(members, StringComparer.Ordinal);
return new TalkCirclePresence(circle.TopicId, members);
}
public void RestorePresence(IReadOnlyList<PresenceSnapshot>? saved) => PresenceSystem.Restore(this, saved);
public bool IsCampusEmpty() => PresenceSystem.IsEmpty(this);