Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions commet/lib/client/matrix/matrix_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import 'package:commet/client/member.dart';
import 'package:commet/client/permissions.dart';
import 'package:commet/client/role.dart';
import 'package:commet/client/timeline_events/timeline_event.dart';
import 'package:commet/client/timeline_events/timeline_event_emote.dart';
import 'package:commet/client/timeline_events/timeline_event_message.dart';
import 'package:commet/client/timeline_events/timeline_event_sticker.dart';
import 'package:commet/config/build_config.dart';
Expand Down Expand Up @@ -111,6 +112,9 @@ class MatrixRoom extends Room {
@override
TimelineEvent? lastEvent;

@override
TimelineEvent? lastMessage;

@override
Iterable<String> get memberIds =>
_matrixRoom.getParticipants([matrix.Membership.join]).map((e) => e.id);
Expand Down Expand Up @@ -223,6 +227,10 @@ class MatrixRoom extends Room {

if (latest != null) {
lastEvent = convertEvent(latest);

if (latest.type == matrix.EventTypes.Message) {
lastMessage = lastEvent;
}
}

updateAvatar();
Expand Down Expand Up @@ -284,6 +292,18 @@ class MatrixRoom extends Room {
lastEvent = event;
_onUpdate.add(null);
}

if (event is TimelineEventMessage ||
event is TimelineEventSticker ||
event is TimelineEventEmote) {
if (lastMessage == null) {
lastMessage = event;
_onUpdate.add(null);
} else if (event.originServerTs.isAfter(lastMessage!.originServerTs)) {
lastMessage = event;
_onUpdate.add(null);
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,9 @@ class MatrixBackgroundRoom implements Room {
@override
TimelineEvent<Client>? get lastEvent => throw UnimplementedError();

@override
TimelineEvent? get lastMessage => throw UnimplementedError();

@override
DateTime get lastEventTimestamp => throw UnimplementedError();

Expand Down
3 changes: 3 additions & 0 deletions commet/lib/client/room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ abstract class Room {
/// The last known event in the room timeline
TimelineEvent? get lastEvent;

/// The last message in the room timeline (filters out non-message events)
TimelineEvent? get lastMessage;

T? getComponent<T extends RoomComponent>();

List<T> getAllComponents<T extends RoomComponent<Client, Room>>();
Expand Down
16 changes: 8 additions & 8 deletions commet/lib/ui/navigation/quick_switcher.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ class QuickSwitcherSearchItemRoom implements QuickSwitcherSearchItem {

@override
Widget build(BuildContext context) {
var sender = room.lastEvent != null
? room.getMemberOrFallback(room.lastEvent!.senderId)
var sender = room.lastMessage != null
? room.getMemberOrFallback(room.lastMessage!.senderId)
: null;

return RoomPanel(
Expand All @@ -68,7 +68,7 @@ class QuickSwitcherSearchItemRoom implements QuickSwitcherSearchItem {
avatar: room.avatar,
recentEventSender: sender?.displayName,
recentEventSenderColor: sender?.defaultColor,
body: room.lastEvent?.plainTextBody,
body: room.lastMessage?.plainTextBody,
);
}

Expand Down Expand Up @@ -195,17 +195,17 @@ class _QuickSwitcherState extends State<QuickSwitcher> {
displayName: room.displayName,
color: room.defaultColor,
avatar: room.avatar,
recentEventSender: room.lastEvent != null
recentEventSender: room.lastMessage != null
? room
.getMemberOrFallback(room.lastEvent!.senderId)
.getMemberOrFallback(room.lastMessage!.senderId)
.displayName
: null,
recentEventSenderColor: room.lastEvent != null
recentEventSenderColor: room.lastMessage != null
? room
.getMemberOrFallback(room.lastEvent!.senderId)
.getMemberOrFallback(room.lastMessage!.senderId)
.defaultColor
: null,
body: room.lastEvent?.plainTextBody,
body: room.lastMessage?.plainTextBody,
)
],
))
Expand Down
20 changes: 10 additions & 10 deletions commet/lib/ui/organisms/home_screen/home_screen_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,14 @@ class HomeScreenView extends StatelessWidget {
displayName: room.displayName,
avatar: room.avatar,
color: room.defaultColor,
body: room.lastEvent?.plainTextBody,
recentEventSender: room.lastEvent != null
body: room.lastMessage?.plainTextBody,
recentEventSender: room.lastMessage != null
? room
.getMemberOrFallback(room.lastEvent!.senderId)
.getMemberOrFallback(room.lastMessage!.senderId)
.displayName
: null,
recentEventSenderColor: room.lastEvent != null
? room.getColorOfUser(room.lastEvent!.senderId)
recentEventSenderColor: room.lastMessage != null
? room.getColorOfUser(room.lastMessage!.senderId)
: null,
onTap: () => onRoomClicked?.call(room),
showUserAvatar: clientManager.rooms
Expand Down Expand Up @@ -147,14 +147,14 @@ class HomeScreenView extends StatelessWidget {
displayName: room.displayName,
avatar: room.avatar,
color: room.defaultColor,
body: room.lastEvent?.plainTextBody,
recentEventSender: room.lastEvent != null
body: room.lastMessage?.plainTextBody,
recentEventSender: room.lastMessage != null
? room
.getMemberOrFallback(room.lastEvent!.senderId)
.getMemberOrFallback(room.lastMessage!.senderId)
.displayName
: null,
recentEventSenderColor: room.lastEvent != null
? room.getColorOfUser(room.lastEvent!.senderId)
recentEventSenderColor: room.lastMessage != null
? room.getColorOfUser(room.lastMessage!.senderId)
: null,
onTap: () => onRoomClicked?.call(room),
showUserAvatar: clientManager.rooms
Expand Down
10 changes: 5 additions & 5 deletions commet/lib/ui/organisms/space_summary/space_summary_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -564,12 +564,12 @@ class SpaceSummaryViewState extends State<SpaceSummaryView> {
widget.onRoomTap?.call(room);
}
: null,
body: room.lastEvent?.plainTextBody,
recentEventSender: room.lastEvent != null
? room.getMemberOrFallback(room.lastEvent!.senderId).displayName
body: room.lastMessage?.plainTextBody,
recentEventSender: room.lastMessage != null
? room.getMemberOrFallback(room.lastMessage!.senderId).displayName
: null,
recentEventSenderColor: room.lastEvent != null
? room.getColorOfUser(room.lastEvent!.senderId)
recentEventSenderColor: room.lastMessage != null
? room.getColorOfUser(room.lastMessage!.senderId)
: null,
);
} else if (item case SpaceChildSpace _) {
Expand Down