add reaction content type
This commit is contained in:
parent
05b15c44ec
commit
94f0d9e346
3 changed files with 22 additions and 24 deletions
|
|
@ -20,12 +20,12 @@ import "package:nexus/models/requests/send_event_request.dart";
|
|||
import "package:nexus/models/requests/send_message_request.dart";
|
||||
import "package:nexus/models/room.dart";
|
||||
|
||||
class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
||||
class RoomChatController extends AsyncNotifier<IList<Event>> {
|
||||
final String roomId;
|
||||
RoomChatController(this.roomId);
|
||||
|
||||
@override
|
||||
Future<InMemoryChatController> build() async {
|
||||
Future<IList<Event>> build() async {
|
||||
final client = ref.watch(ClientController.provider.notifier);
|
||||
var room = ref.read(RoomsController.provider)[roomId];
|
||||
if (room == null) return InMemoryChatController();
|
||||
|
|
@ -204,7 +204,7 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
|||
RedactEventRequest(eventId: message.id, roomId: roomId, reason: reason),
|
||||
);
|
||||
|
||||
Future<bool> loadOlder([InMemoryChatController? chatController]) async {
|
||||
Future<bool> loadOlder() async {
|
||||
final response = await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.paginate(
|
||||
|
|
@ -239,26 +239,6 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
|||
addToNewEvents: false,
|
||||
);
|
||||
|
||||
final room = ref.read(RoomsController.provider)[roomId];
|
||||
if (room != null) {
|
||||
final messages = await ref.watch(
|
||||
MessagesController.provider(
|
||||
MessagesConfig(room: room, events: response.events.reversed),
|
||||
).future,
|
||||
);
|
||||
|
||||
final controller = chatController ?? await future;
|
||||
await controller.insertAllMessages(
|
||||
messages
|
||||
.where(
|
||||
(newMessage) => !controller.messages.any(
|
||||
(message) => message.id == newMessage.id,
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
index: 0,
|
||||
);
|
||||
}
|
||||
return response.hasMore;
|
||||
}
|
||||
|
||||
|
|
@ -381,7 +361,7 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
|||
}
|
||||
|
||||
static final provider = AsyncNotifierProvider.family
|
||||
.autoDispose<RoomChatController, InMemoryChatController, String>(
|
||||
.autoDispose<RoomChatController, IList<Event>, String>(
|
||||
RoomChatController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import "package:nexus/models/content/message.dart";
|
|||
import "package:nexus/models/content/name.dart";
|
||||
import "package:nexus/models/content/pinned_events.dart";
|
||||
import "package:nexus/models/content/power_levels.dart";
|
||||
import "package:nexus/models/content/reaction.dart";
|
||||
import "package:nexus/models/content/server_acl.dart";
|
||||
import "package:nexus/models/content/topic.dart";
|
||||
|
||||
|
|
@ -39,6 +40,7 @@ enum EventType {
|
|||
avatar("m.room.avatar", AvatarContent.fromJson),
|
||||
topic("m.room.topic", TopicContent.fromJson),
|
||||
name("m.room.name", NameContent.fromJson),
|
||||
reaction("m.reaction", ReactionContent.fromJson),
|
||||
pinnedEvents("m.room.pinned_events", PinnedEventsContent.fromJson),
|
||||
message("m.room.message", MessageContent.fromJson);
|
||||
|
||||
|
|
|
|||
16
lib/models/content/reaction.dart
Normal file
16
lib/models/content/reaction.dart
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import "package:freezed_annotation/freezed_annotation.dart";
|
||||
import "package:nexus/models/content/content.dart";
|
||||
part "reaction.freezed.dart";
|
||||
part "reaction.g.dart";
|
||||
|
||||
String? keyFromJson(Map<String, dynamic> json) => json["m.relates_to"]?["key"];
|
||||
|
||||
@freezed
|
||||
abstract class ReactionContent extends Content with _$ReactionContent {
|
||||
ReactionContent._();
|
||||
const factory ReactionContent({@JsonKey(fromJson: keyFromJson) String? key}) =
|
||||
_ReactionContent;
|
||||
|
||||
factory ReactionContent.fromJson(Map<String, Object?> json) =>
|
||||
_$ReactionContentFromJson(json);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue