Skip to content

Commit 4c181b9

Browse files
committed
chore: fix high cpu usage with unedited messages containing emojis
1 parent 09a7984 commit 4c181b9

File tree

8 files changed

+55
-24
lines changed

8 files changed

+55
-24
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
branches: [main]
66

77
env:
8-
FLUTTER_VERSION: '3.29.0'
8+
FLUTTER_VERSION: '3.29.1'
99

1010
jobs:
1111
analyze:

lib/chat/chat_room/common/timeline_model.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class TimelineModel extends SafeChangeNotifier {
2828
}
2929

3030
await timeline.requestHistory(filter: filter, historyCount: historyCount);
31+
await timeline.room.requestParticipants();
3132
if (notify) {
3233
setUpdatingTimeline(roomId: timeline.room.id, value: false);
3334
}

lib/chat/chat_room/common/view/chat_seen_by_indicator.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,8 @@ class ChatEventSeenByIndicator extends StatelessWidget with WatchItMixin {
2121

2222
@override
2323
Widget build(BuildContext context) {
24-
watchFuture(
25-
(ChatModel m) => m.requestParticipants(event.room),
26-
initialValue: event.room.getParticipants(),
27-
);
28-
2924
final seenByUsers = watchStream(
30-
(ChatModel m) => m.getRoomsReceipts(event),
25+
(ChatModel m) => m.getRoomsReceiptsStream(event),
3126
initialValue: event.receipts,
3227
)
3328
.data

lib/chat/common/chat_model.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,9 @@ class ChatModel extends SafeChangeNotifier {
5656
/// The unfiltered onSync stream of the [Client]
5757
Stream<SyncUpdate> get syncStream => _client.onSync.stream;
5858

59-
Stream<List<Receipt>> getRoomsReceipts(Event event) =>
59+
Stream<List<Receipt>> getRoomsReceiptsStream(Event event) =>
6060
getJoinedRoomUpdate(event.room.id).map((_) => event.receipts);
6161

62-
Future<List<User>> requestParticipants(Room room) async =>
63-
room.requestParticipants();
64-
6562
Stream<List<User>> getUsersStreamOfJoinedRoom(
6663
Room room, {
6764
List<Membership> membershipFilter = const [
Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import 'dart:async';
22

3+
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
34
import 'package:shared_preferences/shared_preferences.dart';
45

5-
const _kShowChatAvatarChangesKey = 'showChatAvatarChanges';
6-
const _kShowChatDisplaynameChangesKey = 'showChatDisplaynameChanges';
7-
86
class SettingsService {
9-
SettingsService({required SharedPreferences sharedPreferences})
10-
: _sharedPreferences = sharedPreferences;
11-
12-
Future<void> dispose() async => _propertiesChangedController.close();
7+
SettingsService({
8+
required SharedPreferences sharedPreferences,
9+
required FlutterSecureStorage secureStorage,
10+
}) : _sharedPreferences = sharedPreferences,
11+
_secureStorage = secureStorage;
1312

13+
final FlutterSecureStorage _secureStorage;
1414
final SharedPreferences _sharedPreferences;
1515
final _propertiesChangedController = StreamController<bool>.broadcast();
1616
Stream<bool> get propertiesChanged => _propertiesChangedController.stream;
@@ -19,14 +19,51 @@ class SettingsService {
1919
}
2020

2121
bool get showAvatarChanges =>
22-
_sharedPreferences.getBool(_kShowChatAvatarChangesKey) ?? false;
22+
_sharedPreferences.getBool(SettingKeys.showChatAvatarChanges) ?? false;
2323
void setShowAvatarChanges(bool value) => _sharedPreferences
24-
.setBool(_kShowChatAvatarChangesKey, value)
24+
.setBool(SettingKeys.showChatAvatarChanges, value)
2525
.then(notify);
2626

2727
bool get showChatDisplaynameChanges =>
28-
_sharedPreferences.getBool(_kShowChatDisplaynameChangesKey) ?? false;
28+
_sharedPreferences.getBool(SettingKeys.showChatDisplaynameChanges) ??
29+
false;
2930
void setShowChatDisplaynameChanges(bool value) => _sharedPreferences
30-
.setBool(_kShowChatDisplaynameChangesKey, value)
31+
.setBool(SettingKeys.showChatDisplaynameChanges, value)
3132
.then(notify);
33+
34+
Object? get<T>(String key) => switch (T) {
35+
const (String) => _sharedPreferences.getString(key),
36+
const (bool) => _sharedPreferences.getBool(key),
37+
const (double) => _sharedPreferences.getDouble(key),
38+
const (int) => _sharedPreferences.getInt(key),
39+
const (List<String>) => _sharedPreferences.getStringList(key),
40+
_ => throw Exception('Invalid type'),
41+
};
42+
43+
void set({required String key, required Object value}) => switch (value) {
44+
const (String) =>
45+
_sharedPreferences.setString(key, value as String).then(notify),
46+
const (bool) =>
47+
_sharedPreferences.setBool(key, value as bool).then(notify),
48+
const (double) =>
49+
_sharedPreferences.setDouble(key, value as double).then(notify),
50+
const (int) =>
51+
_sharedPreferences.setInt(key, value as int).then(notify),
52+
const (List<String>) => _sharedPreferences
53+
.setStringList(key, value as List<String>)
54+
.then(notify),
55+
_ => throw Exception('Invalid type'),
56+
};
57+
58+
Future<String?> getSecure<T>(String key) => _secureStorage.read(key: key);
59+
60+
void setSecure({required String key, required String value}) =>
61+
_secureStorage.write(key: key, value: value).then((_) => notify(true));
62+
63+
Future<void> dispose() async => _propertiesChangedController.close();
64+
}
65+
66+
class SettingKeys {
67+
static const showChatAvatarChanges = 'showChatAvatarChanges';
68+
static const showChatDisplaynameChanges = 'showChatDisplaynameChanges';
3269
}

lib/register.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ void registerDependencies() => di
4242
..registerSingletonWithDependencies<SettingsService>(
4343
() => SettingsService(
4444
sharedPreferences: di<SharedPreferences>(),
45+
secureStorage: di<FlutterSecureStorage>(),
4546
),
4647
dispose: (s) => s.dispose(),
4748
dependsOn: [SharedPreferences],

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1766,4 +1766,4 @@ packages:
17661766
version: "0.0.3+1"
17671767
sdks:
17681768
dart: ">=3.7.0 <4.0.0"
1769-
flutter: ">=3.29.0"
1769+
flutter: ">=3.29.1"

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ version: 1.0.0+1
77

88
environment:
99
sdk: ">=3.4.4 <4.0.0"
10-
flutter: ">=3.29.0"
10+
flutter: ">=3.29.1"
1111

1212
dependencies:
1313
adaptive_dialog: ^2.3.0

0 commit comments

Comments
 (0)