Skip to content

Commit f1512ed

Browse files
authored
chore: postpone timeline search (#23)
1 parent d357387 commit f1512ed

File tree

5 files changed

+22
-124
lines changed

5 files changed

+22
-124
lines changed

lib/chat/chat_room/common/timeline_model.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@ import 'package:matrix/matrix.dart';
22
import 'package:safe_change_notifier/safe_change_notifier.dart';
33

44
class TimelineModel extends SafeChangeNotifier {
5+
final Map<String, String> _timelineQuery = {};
6+
String? getTimelineQuery(String roomId) => _timelineQuery[roomId];
7+
void setTimelineQuery({required String roomId, required String query}) {
8+
if (query == _timelineQuery[roomId]) return;
9+
_timelineQuery[roomId] = query;
10+
notifyListeners();
11+
}
12+
13+
final Map<String, bool> _timelineSearchActive = {};
14+
bool getTimelineSearchActive(String roomId) =>
15+
_timelineSearchActive[roomId] == true;
16+
void setTimelineSearchActive({
17+
required String roomId,
18+
required bool value,
19+
}) {
20+
if (_timelineSearchActive[roomId] == value) return;
21+
_timelineSearchActive[roomId] = value;
22+
notifyListeners();
23+
}
24+
525
final Map<String, bool> _updatingTimeline = {};
626
bool getUpdatingTimeline(String roomId) => _updatingTimeline[roomId] == true;
727
void setUpdatingTimeline({

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import '../../../common/chat_model.dart';
1414
import '../../../common/event_x.dart';
1515
import '../../../events/view/chat_event_tile.dart';
1616
import '../../../settings/settings_model.dart';
17-
import '../../titlebar/chat_room_title_bar.dart';
1817
import '../timeline_model.dart';
1918
import 'chat_room_pinned_events_dialog.dart';
2019
import 'chat_seen_by_indicator.dart';
@@ -163,29 +162,6 @@ class _ChatRoomTimelineListState extends State<ChatRoomTimelineList> {
163162
),
164163
),
165164
),
166-
if (_showScrollButton)
167-
Positioned(
168-
right: kBigPadding,
169-
bottom: kBigPadding,
170-
child: AnimatedContainer(
171-
duration: const Duration(milliseconds: 200),
172-
padding: EdgeInsets.only(
173-
bottom: _showScrollButton ? 3 * kBigPadding : 0,
174-
),
175-
child: FloatingActionButton.small(
176-
backgroundColor: getMonochromeBg(theme: theme, darkFactor: 5),
177-
onPressed: () => showDialog(
178-
context: context,
179-
builder: (context) =>
180-
ChatRoomSearchDialog(room: widget.timeline.room),
181-
),
182-
child: Icon(
183-
YaruIcons.search,
184-
color: theme.colorScheme.onSurface,
185-
),
186-
),
187-
),
188-
),
189165
if (_showScrollButton)
190166
Positioned(
191167
right: kBigPadding,

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,13 @@ class ChatRoomUsersList extends StatelessWidget with WatchItMixin {
2727
Widget build(BuildContext context) {
2828
final membershipFilter = [Membership.join];
2929

30-
watchStream(
30+
final users = watchStream(
3131
(ChatModel m) => m.getUsersStreamOfJoinedRoom(
3232
room,
3333
membershipFilter: membershipFilter,
3434
),
3535
initialValue: room.getParticipants(membershipFilter),
3636
preserveState: false,
37-
);
38-
39-
final users = watchFuture(
40-
(users) => users,
41-
target: room.requestParticipants(membershipFilter),
42-
initialValue: room.getParticipants(membershipFilter),
43-
preserveState: false,
4437
).data?.sorted(
4538
(a, b) => b.powerLevel.compareTo(a.powerLevel),
4639
);

lib/chat/chat_room/titlebar/chat_room_title_bar.dart

Lines changed: 1 addition & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@ import 'dart:io';
33
import 'package:flutter/foundation.dart';
44
import 'package:flutter/material.dart';
55
import 'package:matrix/matrix.dart';
6-
import 'package:watch_it/watch_it.dart';
76
import 'package:yaru/yaru.dart';
87

98
import '../../../common/view/build_context_x.dart';
10-
import '../../../common/view/common_widgets.dart';
119
import '../../../common/view/space.dart';
1210
import '../../../common/view/ui_constants.dart';
1311
import '../../../l10n/l10n.dart';
14-
import '../../common/chat_model.dart';
15-
import 'side_bar_button.dart';
1612
import '../common/view/chat_room_page.dart';
1713
import 'chat_room_encryption_status_button.dart';
1814
import 'chat_room_pin_button.dart';
15+
import 'side_bar_button.dart';
1916

2017
class ChatRoomTitleBar extends StatelessWidget implements PreferredSizeWidget {
2118
const ChatRoomTitleBar({super.key, required this.room});
@@ -65,85 +62,3 @@ class ChatRoomTitleBar extends StatelessWidget implements PreferredSizeWidget {
6562
@override
6663
Size get preferredSize => const Size(0, kYaruTitleBarHeight);
6764
}
68-
69-
class ChatRoomSearchDialog extends StatefulWidget
70-
with WatchItStatefulWidgetMixin {
71-
const ChatRoomSearchDialog({
72-
super.key,
73-
required this.room,
74-
});
75-
76-
final Room room;
77-
78-
@override
79-
State<ChatRoomSearchDialog> createState() => _ChatRoomSearchDialogState();
80-
}
81-
82-
class _ChatRoomSearchDialogState extends State<ChatRoomSearchDialog> {
83-
final TextEditingController _controller = TextEditingController();
84-
85-
@override
86-
void dispose() {
87-
_controller.dispose();
88-
super.dispose();
89-
}
90-
91-
@override
92-
Widget build(BuildContext context) {
93-
final events = watchFuture(
94-
(ChatModel m) => m.getEvents(widget.room),
95-
initialValue: <Event>[],
96-
).data;
97-
98-
final filteredEvents = events?.where(
99-
(e) => e.body.toLowerCase().contains(_controller.text.toLowerCase()),
100-
);
101-
102-
return SimpleDialog(
103-
titlePadding: EdgeInsets.zero,
104-
title: YaruDialogTitleBar(
105-
title:
106-
Text(context.l10n.searchIn(widget.room.getLocalizedDisplayname())),
107-
border: BorderSide.none,
108-
backgroundColor: Colors.transparent,
109-
),
110-
children: [
111-
Padding(
112-
padding: const EdgeInsets.all(kBigPadding),
113-
child: TextField(
114-
autocorrect: true,
115-
autofocus: true,
116-
controller: _controller,
117-
decoration: InputDecoration(
118-
label: Text(
119-
context.l10n.search,
120-
),
121-
),
122-
),
123-
),
124-
filteredEvents == null
125-
? const Center(
126-
child: Progress(),
127-
)
128-
: Padding(
129-
padding: const EdgeInsets.all(kMediumPadding),
130-
child: SizedBox(
131-
height: 500,
132-
width: 500,
133-
child: ListView.builder(
134-
reverse: true,
135-
itemCount: filteredEvents.length,
136-
itemBuilder: (context, index) {
137-
final event = filteredEvents.elementAt(index);
138-
return ListTile(
139-
dense: true,
140-
title: Text(event.body),
141-
);
142-
},
143-
),
144-
),
145-
),
146-
],
147-
);
148-
}
149-
}

lib/chat/common/chat_model.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:matrix/matrix.dart';
33
import 'package:safe_change_notifier/safe_change_notifier.dart';
44

55
import '../../common/logging.dart';
6-
import 'event_x.dart';
76
import 'rooms_filter.dart';
87

98
class ChatModel extends SafeChangeNotifier {
@@ -100,11 +99,6 @@ class ChatModel extends SafeChangeNotifier {
10099
Stream<Event?> getLastEventStream(Room room) =>
101100
getJoinedRoomUpdate(room.id).map((update) => room.lastEvent);
102101

103-
Future<List<Event>> getEvents(Room room) async {
104-
final timeline = await room.getTimeline();
105-
return timeline.events.where((e) => !e.showAsBadge).toList();
106-
}
107-
108102
Stream<List<Room>> get spacesStream =>
109103
syncStream.map((e) => rooms.where((e) => e.isSpace).toList());
110104

0 commit comments

Comments
 (0)