progress
This commit is contained in:
parent
541933a939
commit
63a9d2d169
15 changed files with 388 additions and 299 deletions
|
|
@ -18,10 +18,8 @@ class EventsController extends AsyncNotifier<GetRoomEventsResponse> {
|
|||
return response;
|
||||
}
|
||||
|
||||
Future<GetRoomEventsResponse> prev() async {
|
||||
final resp = await build(from: ref.read(FromController.provider(room)));
|
||||
return resp;
|
||||
}
|
||||
Future<GetRoomEventsResponse> prev() async =>
|
||||
build(from: ref.read(FromController.provider(room)));
|
||||
|
||||
static final provider = AsyncNotifierProvider.autoDispose
|
||||
.family<EventsController, GetRoomEventsResponse, Room>(
|
||||
|
|
|
|||
|
|
@ -9,17 +9,15 @@ class MessageController extends AsyncNotifier<TextMessage?> {
|
|||
|
||||
@override
|
||||
Future<TextMessage?> build() async {
|
||||
final room = await ref.watch(
|
||||
SelectedRoomController.provider.selectAsync((a) => a),
|
||||
);
|
||||
final room = await ref.watch(SelectedRoomController.provider.future);
|
||||
if (room == null) return null;
|
||||
|
||||
final event = await room.roomData.getEventById(id);
|
||||
return (await event?.toMessage(mustBeText: true)) as TextMessage?;
|
||||
}
|
||||
|
||||
static final provider =
|
||||
AsyncNotifierProvider.family<MessageController, TextMessage?, String>(
|
||||
static final provider = AsyncNotifierProvider.family
|
||||
.autoDispose<MessageController, TextMessage?, String>(
|
||||
MessageController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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:matrix/matrix.dart";
|
||||
import "package:nexus/controllers/avatar_controller.dart";
|
||||
import "package:nexus/controllers/events_controller.dart";
|
||||
import "package:nexus/helpers/extensions/event_to_message.dart";
|
||||
import "package:nexus/helpers/extensions/list_to_messages.dart";
|
||||
|
|
@ -13,7 +14,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
|
||||
@override
|
||||
Future<ChatController> build() async {
|
||||
final response = await ref.watch(EventsController.provider(room).future);
|
||||
final response = await ref.watch(
|
||||
EventsController.provider(room).selectAsync((a) => a),
|
||||
);
|
||||
|
||||
ref.onDispose(
|
||||
room.client.onTimelineEvent.stream.listen((event) async {
|
||||
|
|
@ -75,10 +78,10 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
.watch(EventsController.provider(room).notifier)
|
||||
.prev();
|
||||
|
||||
await controller.insertAllMessages(
|
||||
await response.chunk.toMessages(room),
|
||||
index: 0,
|
||||
);
|
||||
final messages = await response.chunk.toMessages(room);
|
||||
|
||||
await controller.insertAllMessages(messages, index: 0);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> markRead() async {
|
||||
|
|
@ -92,30 +95,22 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
Future<void> updateMessage(Message message, Message newMessage) async =>
|
||||
(await future).updateMessage(message, newMessage);
|
||||
|
||||
Future<void> send(Message message, {Message? replyTo}) async {
|
||||
final controller = await future;
|
||||
controller.insertMessage(message);
|
||||
|
||||
if (message is TextMessage) {
|
||||
await room.sendTextEvent(
|
||||
message.text,
|
||||
Future<void> send(String message, {Message? replyTo}) async =>
|
||||
room.sendTextEvent(
|
||||
message,
|
||||
inReplyTo: replyTo == null ? null : await room.getEventById(replyTo.id),
|
||||
);
|
||||
}
|
||||
// TODO: Handle other types of message
|
||||
}
|
||||
|
||||
Future<chat.User> resolveUser(String id) async {
|
||||
final user = await room.client.getUserProfile(id);
|
||||
return chat.User(
|
||||
id: id,
|
||||
name: user.displayname,
|
||||
imageSource: (await user.avatarUrl?.getThumbnailUri(
|
||||
// TODO: Fix use of account avatar not room avatar
|
||||
room.client,
|
||||
width: 24,
|
||||
height: 24,
|
||||
))?.toString(),
|
||||
imageSource: user.avatarUrl == null
|
||||
? null
|
||||
: (await ref.watch(
|
||||
AvatarController.provider(user.avatarUrl!.toString()).future,
|
||||
)).toString(),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ import "package:nexus/models/space.dart";
|
|||
class SelectedSpaceController extends AsyncNotifier<Space> {
|
||||
@override
|
||||
Future<Space> build() async {
|
||||
final spaces = await ref.watch(SpacesController.provider.future);
|
||||
final spaces = await ref.watch(
|
||||
SpacesController.provider.selectAsync((data) => data),
|
||||
);
|
||||
final selectedSpaceId = ref.watch(
|
||||
KeyController.provider(KeyController.spaceKey),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class SpacesController extends AsyncNotifier<IList<Space>> {
|
|||
title: "Home",
|
||||
id: "home",
|
||||
children: topLevelRooms,
|
||||
icon: Icon(Icons.home),
|
||||
icon: Icons.home,
|
||||
),
|
||||
Space(
|
||||
client: client,
|
||||
|
|
@ -54,7 +54,7 @@ class SpacesController extends AsyncNotifier<IList<Space>> {
|
|||
.map((room) => room.fullRoom),
|
||||
),
|
||||
),
|
||||
icon: Icon(Icons.person),
|
||||
icon: Icons.person,
|
||||
),
|
||||
...(await Future.wait(
|
||||
topLevelSpaces.map(
|
||||
|
|
|
|||
|
|
@ -10,9 +10,7 @@ class ThumbnailController extends AsyncNotifier<String?> {
|
|||
@override
|
||||
Future<String?> build({String? from}) async {
|
||||
final client = await ref.watch(ClientController.provider.future);
|
||||
final uri = await Uri.tryParse(data.uri)?.getDownloadUri(
|
||||
client,
|
||||
); // TODO: Should use thumb when c10y fixes animated thumbs
|
||||
final uri = await Uri.tryParse(data.uri)?.getDownloadUri(client);
|
||||
|
||||
return uri.toString();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue