Skip to content

Commit 17a02a2

Browse files
committed
feat: Completed with meilisearch integrations
1 parent 9b3addf commit 17a02a2

File tree

1 file changed

+36
-45
lines changed

1 file changed

+36
-45
lines changed

lib/controllers/rooms_controller.dart

Lines changed: 36 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import 'package:resonate/models/appwrite_upcomming_room.dart';
1313
import 'package:resonate/services/appwrite_service.dart';
1414
import 'package:resonate/services/room_service.dart';
1515
import 'package:resonate/themes/theme_controller.dart';
16-
import 'package:resonate/utils/enums/log_type.dart';
1716
import 'package:resonate/utils/enums/room_state.dart';
18-
import 'package:resonate/views/widgets/snackbar.dart';
1917

2018
import '../utils/constants.dart';
2119
import 'auth_state_controller.dart';
@@ -42,7 +40,7 @@ class RoomsController extends GetxController {
4240
@override
4341
void onInit() async {
4442
super.onInit();
45-
roomsIndex = meilisearchClient.index('rooms');
43+
roomsIndex = meilisearchClient.index('live_rooms');
4644
upcomingRoomsIndex = meilisearchClient.index('upcoming_rooms');
4745
await getRooms();
4846
filteredRooms.value = rooms;
@@ -182,58 +180,51 @@ class RoomsController extends GetxController {
182180
}
183181
try {
184182
if (isUsingMeilisearch) {
185-
final indexToUse = isLiveRooms ? roomsIndex : upcomingRoomsIndex;
186-
final meilisearchResult = await indexToUse.search(
187-
query,
188-
SearchQuery(
189-
attributesToHighlight: ['name'],
190-
attributesToSearchOn: ['name'],
191-
),
192-
);
193-
if (isLiveRooms) {
194-
filteredRooms.value = await convertMeilisearchResults(
195-
meilisearchResult.hits,
196-
isLiveRooms: true,
197-
);
198-
} else {
199-
filteredUpcomingRooms.value = await convertMeilisearchResults(
200-
meilisearchResult.hits,
201-
isLiveRooms: false,
202-
originalUpcomingRooms: upcomingRooms ?? [],
183+
try {
184+
final indexToUse = isLiveRooms ? roomsIndex : upcomingRoomsIndex;
185+
final meilisearchResult = await indexToUse.search(query);
186+
187+
if (isLiveRooms) {
188+
filteredRooms.value = await convertMeilisearchResults(
189+
meilisearchResult.hits,
190+
isLiveRooms: true,
191+
);
192+
} else {
193+
filteredUpcomingRooms.value = await convertMeilisearchResults(
194+
meilisearchResult.hits,
195+
isLiveRooms: false,
196+
originalUpcomingRooms: upcomingRooms ?? [],
197+
);
198+
}
199+
return;
200+
} catch (meilisearchError) {
201+
log(
202+
'Meilisearch failed, falling back to local search: $meilisearchError',
203203
);
204204
}
205+
}
206+
// Local search
207+
final lowerQuery = query.toLowerCase();
208+
if (isLiveRooms) {
209+
filteredRooms.value = rooms.where((room) {
210+
return room.name.toLowerCase().contains(lowerQuery) ||
211+
room.description.toLowerCase().contains(lowerQuery) ||
212+
room.tags.any((tag) => tag.toLowerCase().contains(lowerQuery));
213+
}).toList();
205214
} else {
206-
if (isLiveRooms) {
207-
final searchResults = rooms.where((room) {
208-
return room.name.toLowerCase().contains(query.toLowerCase());
209-
}).toList();
210-
filteredRooms.value = searchResults;
211-
} else {
212-
final filtered = (upcomingRooms ?? []).where((room) {
213-
return room.name.toLowerCase().contains(query.toLowerCase());
214-
}).toList();
215-
filteredUpcomingRooms.value = filtered;
216-
}
215+
filteredUpcomingRooms.value = (upcomingRooms ?? []).where((room) {
216+
return room.name.toLowerCase().contains(lowerQuery) ||
217+
room.description.toLowerCase().contains(lowerQuery) ||
218+
room.tags.any((tag) => tag.toLowerCase().contains(lowerQuery));
219+
}).toList();
217220
}
218221
} catch (e) {
219-
final roomType = isLiveRooms ? 'rooms' : 'upcoming rooms';
220-
log('Error searching $roomType: $e');
222+
log('Error searching ${isLiveRooms ? 'rooms' : 'upcoming rooms'}: $e');
221223
if (isLiveRooms) {
222224
filteredRooms.value = [];
223225
} else {
224226
filteredUpcomingRooms.value = [];
225227
}
226-
final context = Get.context;
227-
if (context != null) {
228-
final localizations = AppLocalizations.of(context)!;
229-
customSnackbar(
230-
localizations.searchError,
231-
isLiveRooms
232-
? localizations.searchRoomsError
233-
: localizations.searchUpcomingRoomsError,
234-
LogType.error,
235-
);
236-
}
237228
} finally {
238229
if (isLiveRooms) {
239230
isSearching.value = false;

0 commit comments

Comments
 (0)