Remove flutter chat #26
3 changed files with 22 additions and 24 deletions
add reaction content type
commit
94f0d9e346
|
|
@ -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/requests/send_message_request.dart";
|
||||||
import "package:nexus/models/room.dart";
|
import "package:nexus/models/room.dart";
|
||||||
|
|
||||||
class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
class RoomChatController extends AsyncNotifier<IList<Event>> {
|
||||||
final String roomId;
|
final String roomId;
|
||||||
RoomChatController(this.roomId);
|
RoomChatController(this.roomId);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<InMemoryChatController> build() async {
|
Future<IList<Event>> build() async {
|
||||||
final client = ref.watch(ClientController.provider.notifier);
|
final client = ref.watch(ClientController.provider.notifier);
|
||||||
var room = ref.read(RoomsController.provider)[roomId];
|
var room = ref.read(RoomsController.provider)[roomId];
|
||||||
if (room == null) return InMemoryChatController();
|
if (room == null) return InMemoryChatController();
|
||||||
|
|
@ -204,7 +204,7 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
||||||
RedactEventRequest(eventId: message.id, roomId: roomId, reason: reason),
|
RedactEventRequest(eventId: message.id, roomId: roomId, reason: reason),
|
||||||
);
|
);
|
||||||
|
|
||||||
Future<bool> loadOlder([InMemoryChatController? chatController]) async {
|
Future<bool> loadOlder() async {
|
||||||
final response = await ref
|
final response = await ref
|
||||||
.watch(ClientController.provider.notifier)
|
.watch(ClientController.provider.notifier)
|
||||||
.paginate(
|
.paginate(
|
||||||
|
|
@ -239,26 +239,6 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
||||||
addToNewEvents: false,
|
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;
|
return response.hasMore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -381,7 +361,7 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
||||||
}
|
}
|
||||||
|
|
||||||
static final provider = AsyncNotifierProvider.family
|
static final provider = AsyncNotifierProvider.family
|
||||||
.autoDispose<RoomChatController, InMemoryChatController, String>(
|
.autoDispose<RoomChatController, IList<Event>, String>(
|
||||||
RoomChatController.new,
|
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/name.dart";
|
||||||
import "package:nexus/models/content/pinned_events.dart";
|
import "package:nexus/models/content/pinned_events.dart";
|
||||||
import "package:nexus/models/content/power_levels.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/server_acl.dart";
|
||||||
import "package:nexus/models/content/topic.dart";
|
import "package:nexus/models/content/topic.dart";
|
||||||
|
|
||||||
|
|
@ -39,6 +40,7 @@ enum EventType {
|
||||||
avatar("m.room.avatar", AvatarContent.fromJson),
|
avatar("m.room.avatar", AvatarContent.fromJson),
|
||||||
topic("m.room.topic", TopicContent.fromJson),
|
topic("m.room.topic", TopicContent.fromJson),
|
||||||
name("m.room.name", NameContent.fromJson),
|
name("m.room.name", NameContent.fromJson),
|
||||||
|
reaction("m.reaction", ReactionContent.fromJson),
|
||||||
pinnedEvents("m.room.pinned_events", PinnedEventsContent.fromJson),
|
pinnedEvents("m.room.pinned_events", PinnedEventsContent.fromJson),
|
||||||
message("m.room.message", MessageContent.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