58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/widgets.dart';
 | |
| 
 | |
| import 'package:fluffychat/generated/l10n/l10n.dart';
 | |
| import 'package:matrix/matrix.dart';
 | |
| 
 | |
| import '../config/app_config.dart';
 | |
| 
 | |
| extension RoomStatusExtension on Room {
 | |
|   String getLocalizedTypingText(BuildContext context) {
 | |
|     var typingText = '';
 | |
|     final typingUsers = this.typingUsers;
 | |
|     typingUsers.removeWhere((User u) => u.id == client.userID);
 | |
| 
 | |
|     if (AppConfig.hideTypingUsernames) {
 | |
|       typingText = L10n.of(context).isTyping;
 | |
|       if (typingUsers.first.id != directChatMatrixID) {
 | |
|         typingText = L10n.of(context).numUsersTyping(typingUsers.length);
 | |
|       }
 | |
|     } else if (typingUsers.length == 1) {
 | |
|       typingText = L10n.of(context).isTyping;
 | |
|       if (typingUsers.first.id != directChatMatrixID) {
 | |
|         typingText =
 | |
|             L10n.of(context).userIsTyping(typingUsers.first.calcDisplayname());
 | |
|       }
 | |
|     } else if (typingUsers.length == 2) {
 | |
|       typingText = L10n.of(context).userAndUserAreTyping(
 | |
|         typingUsers.first.calcDisplayname(),
 | |
|         typingUsers[1].calcDisplayname(),
 | |
|       );
 | |
|     } else if (typingUsers.length > 2) {
 | |
|       typingText = L10n.of(context).userAndOthersAreTyping(
 | |
|         typingUsers.first.calcDisplayname(),
 | |
|         (typingUsers.length - 1),
 | |
|       );
 | |
|     }
 | |
|     return typingText;
 | |
|   }
 | |
| 
 | |
|   List<User> getSeenByUsers(Timeline timeline, {String? eventId}) {
 | |
|     if (timeline.events.isEmpty) return [];
 | |
|     eventId ??= timeline.events.first.eventId;
 | |
| 
 | |
|     final lastReceipts = <User>{};
 | |
|     // now we iterate the timeline events until we hit the first rendered event
 | |
|     for (final event in timeline.events) {
 | |
|       lastReceipts.addAll(event.receipts.map((r) => r.user));
 | |
|       if (event.eventId == eventId) {
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     lastReceipts.removeWhere(
 | |
|       (user) =>
 | |
|           user.id == client.userID || user.id == timeline.events.first.senderId,
 | |
|     );
 | |
|     return lastReceipts.toList();
 | |
|   }
 | |
| }
 |