fluffychat/lib/pangea/join_codes/knock_room_extension.dart
wcjord 7f1e8f5ea0
feat: client-side knock auto-accept via KnockTracker (#5794)
* feat: client-side knock auto-accept via KnockTracker

Replace server-side AutoAcceptInviteIfKnocked (removed in
synapse-pangea-chat PR #21) with client-side KnockTracker.

- Record knocked room IDs in Matrix account data (org.pangea.knocked_rooms)
- Auto-join when invite arrives for a previously knocked room
- Migrate storage from GetStorage to Matrix account data for
  cross-device sync and reinstall persistence
- Add joining-courses.instructions.md design doc

* formatting

* centralizes calls to knock-storage related functions

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-24 14:44:36 -05:00

24 lines
639 B
Dart

import 'package:matrix/matrix.dart';
import 'package:fluffychat/pangea/join_codes/knock_tracker.dart';
extension KnockRoomExtension on Room {
bool get hasKnocked => KnockTracker.hasKnocked(client, id);
Future<void> joinKnockedRoom() async {
await join();
await KnockTracker.clearKnock(client, id);
}
}
extension KnockClientExtension on Client {
Future<String> knockAndRecordRoom(
String roomIdOrAlias, {
List<String>? via,
String? reason,
}) async {
final resp = await knockRoom(roomIdOrAlias, via: via, reason: reason);
await KnockTracker.recordKnock(this, roomIdOrAlias);
return resp;
}
}