fix read indicators
This commit is contained in:
parent
919e8d11b2
commit
e55d7c4c58
6 changed files with 36 additions and 14 deletions
|
|
@ -1,21 +1,20 @@
|
|||
import "dart:convert";
|
||||
import "dart:io";
|
||||
import "package:flutter/foundation.dart";
|
||||
import "package:nexus/controllers/database_controller.dart";
|
||||
import "package:vodozemac/vodozemac.dart" as voz;
|
||||
import "package:flutter_vodozemac/flutter_vodozemac.dart" as voz_fl;
|
||||
import "package:matrix/matrix.dart";
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:nexus/controllers/secure_storage_controller.dart";
|
||||
import "package:nexus/models/session_backup.dart";
|
||||
import "package:path/path.dart";
|
||||
import "package:path_provider/path_provider.dart";
|
||||
import "package:sqflite_common_ffi/sqflite_ffi.dart";
|
||||
|
||||
class ClientController extends AsyncNotifier<Client> {
|
||||
static const sessionBackupKey = "sessionBackup";
|
||||
@override
|
||||
Future<Client> build() async {
|
||||
if (!voz.isInitialized()) await voz_fl.init();
|
||||
|
||||
final client = Client(
|
||||
"nexus",
|
||||
logLevel: kReleaseMode ? Level.warning : Level.verbose,
|
||||
|
|
@ -23,9 +22,7 @@ class ClientController extends AsyncNotifier<Client> {
|
|||
supportedLoginTypes: {AuthenticationTypes.password},
|
||||
database: await MatrixSdkDatabase.init(
|
||||
"nexus",
|
||||
database: await databaseFactoryFfi.openDatabase(
|
||||
join((await getApplicationSupportDirectory()).path, "database.db"),
|
||||
),
|
||||
database: await ref.watch(DatabaseController.provider.future),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
|||
18
lib/controllers/database_controller.dart
Normal file
18
lib/controllers/database_controller.dart
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:path/path.dart";
|
||||
import "package:path_provider/path_provider.dart";
|
||||
import "package:sqflite_common_ffi/sqflite_ffi.dart";
|
||||
|
||||
class DatabaseController extends AsyncNotifier<Database> {
|
||||
@override
|
||||
Future<Database> build() async {
|
||||
databaseFactory = databaseFactoryFfi;
|
||||
return databaseFactoryFfi.openDatabase(
|
||||
join((await getApplicationSupportDirectory()).path, "database.db"),
|
||||
);
|
||||
}
|
||||
|
||||
static final provider = AsyncNotifierProvider<DatabaseController, Database>(
|
||||
DatabaseController.new,
|
||||
);
|
||||
}
|
||||
|
|
@ -64,7 +64,8 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
|
||||
Future<void> markRead() async {
|
||||
final controller = await future;
|
||||
await room.setReadMarker(controller.messages.last.id);
|
||||
final id = controller.messages.last.id;
|
||||
await room.setReadMarker(id, mRead: id);
|
||||
}
|
||||
|
||||
Future<void> updateMessage(Message message, Message newMessage) async =>
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ extension ToMessage on Event {
|
|||
return switch (type) {
|
||||
EventTypes.Encrypted => asText.copyWith(
|
||||
text: "Unable to decrypt message.",
|
||||
metadata: {"formatted": "Unable to decrypt message.", ...metadata},
|
||||
),
|
||||
EventTypes.Message => switch (messageType) {
|
||||
MessageTypes.Image => Message.image(
|
||||
|
|
|
|||
|
|
@ -29,12 +29,13 @@ class AvatarOrHash extends StatelessWidget {
|
|||
width: height,
|
||||
height: height,
|
||||
child: Center(
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
child: Badge(
|
||||
isLabelVisible: hasBadge,
|
||||
smallSize: 10,
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
child: Badge(
|
||||
isLabelVisible: hasBadge,
|
||||
label: SizedBox.shrink(),
|
||||
offset: Offset(8, -8),
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
child: SizedBox(
|
||||
width: height,
|
||||
height: height,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import "package:nexus/widgets/chat_page/room_appbar.dart";
|
|||
import "package:nexus/widgets/chat_page/spoiler_text.dart";
|
||||
import "package:nexus/widgets/chat_page/top_widget.dart";
|
||||
import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart";
|
||||
import "package:nexus/widgets/loading.dart";
|
||||
|
||||
class RoomChat extends HookConsumerWidget {
|
||||
final bool isDesktop;
|
||||
|
|
@ -110,12 +111,15 @@ class RoomChat extends HookConsumerWidget {
|
|||
onTap: () => replyToMessage.value = message,
|
||||
),
|
||||
builders: Builders(
|
||||
loadMoreBuilder: (_) => Loading(),
|
||||
chatAnimatedListBuilder: (_, itemBuilder) =>
|
||||
ChatAnimatedList(
|
||||
itemBuilder:
|
||||
itemBuilder, // TODO: Load earlier
|
||||
onEndReached: notifier.loadOlder,
|
||||
onStartReached: () => notifier.markRead(),
|
||||
onStartReached: () async {
|
||||
notifier.markRead();
|
||||
},
|
||||
),
|
||||
composerBuilder: (_) => ChatBox(
|
||||
replyToMessage: replyToMessage.value,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue