Add (WIP) ban/klck ability
This commit is contained in:
parent
c130d28b93
commit
3a1bcb5b8f
13 changed files with 113 additions and 30 deletions
|
|
@ -6,6 +6,7 @@ import "package:flutter_riverpod/flutter_riverpod.dart";
|
|||
import "package:nexus/controllers/client_state_controller.dart";
|
||||
import "package:nexus/controllers/members_controller.dart";
|
||||
import "package:nexus/models/membership.dart";
|
||||
import "package:nexus/models/membership_status.dart";
|
||||
|
||||
class AuthorController extends AsyncNotifier<Membership> {
|
||||
final Message message;
|
||||
|
|
@ -35,6 +36,7 @@ class AuthorController extends AsyncNotifier<Membership> {
|
|||
);
|
||||
|
||||
return Membership(
|
||||
status: member?.status ?? MembershipStatus.leave,
|
||||
avatarUrl: pmp?.avatarUrl ?? member?.avatarUrl,
|
||||
displayName:
|
||||
pmp?.displayName ??
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import "package:nexus/models/requests/paginate_request.dart";
|
|||
import "package:nexus/models/requests/redact_event_request.dart";
|
||||
import "package:nexus/models/requests/report_request.dart";
|
||||
import "package:nexus/models/requests/send_message_request.dart";
|
||||
import "package:nexus/models/requests/set_membership_request.dart";
|
||||
import "package:nexus/models/room.dart";
|
||||
import "package:nexus/models/sync_data.dart";
|
||||
import "package:nexus/models/sync_status.dart";
|
||||
|
|
@ -224,8 +225,11 @@ class ClientController extends AsyncNotifier<int> {
|
|||
Future<Profile> getProfile(String userId) async =>
|
||||
Profile.fromJson(await _sendCommand("get_profile", {"user_id": userId}));
|
||||
|
||||
Future<void> reportEvent(ReportRequest report) =>
|
||||
_sendCommand("report_event", report.toJson());
|
||||
Future<void> reportEvent(ReportRequest request) =>
|
||||
_sendCommand("report_event", request.toJson());
|
||||
|
||||
Future<void> setMembership(SetMembershipRequest request) =>
|
||||
_sendCommand("set_membership", request.toJson());
|
||||
|
||||
Future<void> markRead(Room room) async {
|
||||
final event = room.events.firstWhereOrNull(
|
||||
|
|
|
|||
25
lib/controllers/members_by_type_controller.dart
Normal file
25
lib/controllers/members_by_type_controller.dart
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:nexus/controllers/members_controller.dart";
|
||||
import "package:nexus/models/membership.dart";
|
||||
import "package:nexus/models/membership_status.dart";
|
||||
|
||||
class MembersByTypeController extends AsyncNotifier<IList<Membership>> {
|
||||
final MembershipStatus status;
|
||||
MembersByTypeController(this.status);
|
||||
|
||||
@override
|
||||
Future<IList<Membership>> build() => ref.watch(
|
||||
MembersController.provider.selectAsync(
|
||||
(members) =>
|
||||
members.where((membership) => membership.status == status).toIList(),
|
||||
),
|
||||
);
|
||||
|
||||
static final provider =
|
||||
AsyncNotifierProvider.family<
|
||||
MembersByTypeController,
|
||||
IList<Membership>,
|
||||
MembershipStatus
|
||||
>(MembersByTypeController.new);
|
||||
}
|
||||
|
|
@ -29,7 +29,7 @@ class MembersController extends AsyncNotifier<IList<Membership>> {
|
|||
);
|
||||
|
||||
return state.nonNulls
|
||||
.where((member) => member.content["membership"] == "join")
|
||||
.where((state) => state.type == "m.room.member")
|
||||
.map(
|
||||
(membership) => Membership.fromContent(
|
||||
membership.content,
|
||||
|
|
|
|||
|
|
@ -145,11 +145,11 @@ class MessageController extends AsyncNotifier<Message?> {
|
|||
"${content["displayname"] ?? event.stateKey} ${switch (content["membership"]) {
|
||||
"invite" => "was invited to",
|
||||
"join" => "joined",
|
||||
"leave" => event.authorId == event.stateKey ? "left" : "was kicked",
|
||||
"leave" => event.authorId == event.stateKey ? "left" : (event.unsigned["prev_content"]?["membership"] == "ban" ? "was unbanned from" : "was kicked from"),
|
||||
"ban" => "was banned from",
|
||||
"knock" => "asked to join",
|
||||
_ => "did something relating to",
|
||||
}} the room.",
|
||||
}} the room. ${content["reason"] ?? ""}",
|
||||
),
|
||||
|
||||
"m.room.server_acl" => toSystemMessage(
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import "dart:async";
|
|||
import "package:collection/collection.dart";
|
||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||
import "package:flutter_chat_core/flutter_chat_core.dart";
|
||||
import "package:flutter_chat_core/flutter_chat_core.dart" as chat;
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:fluttertagger/fluttertagger.dart";
|
||||
import "package:nexus/controllers/client_controller.dart";
|
||||
|
|
@ -258,21 +257,6 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
|||
if (message != null) insertMessage(message);
|
||||
}
|
||||
|
||||
Future<chat.User> resolveUser(String id) async {
|
||||
final user = await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.getProfile(id);
|
||||
return chat.User(
|
||||
id: id,
|
||||
name: user.displayName,
|
||||
// imageSource: user.avatarUrl == null
|
||||
// ? null
|
||||
// : (await ref.watch(
|
||||
// AvatarController.provider(user.avatarUrl!.toString()).future,
|
||||
// )).toString(),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> scrollToMessage(Message message) async {
|
||||
final controller = await future;
|
||||
Future<void> setFlashing(bool flashing) => controller.updateMessage(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue