Skip to content
Merged
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
37 changes: 37 additions & 0 deletions lib/controllers/rooms_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import 'package:resonate/models/appwrite_room.dart';
import 'package:resonate/services/appwrite_service.dart';
import 'package:resonate/services/room_service.dart';
import 'package:resonate/themes/theme_controller.dart';
import 'package:resonate/utils/enums/log_type.dart';
import 'package:resonate/utils/enums/room_state.dart';
import 'package:resonate/views/widgets/snackbar.dart';

import '../utils/constants.dart';
import 'auth_state_controller.dart';
Expand All @@ -23,6 +25,9 @@ class RoomsController extends GetxController {
final Databases databases = AppwriteService.getDatabases();
RxList<AppwriteRoom> rooms = <AppwriteRoom>[].obs;
final ThemeController themeController = Get.find<ThemeController>();
RxBool isSearching = false.obs;
RxBool searchBarIsEmpty = true.obs;
RxList<AppwriteRoom> filteredRooms = <AppwriteRoom>[].obs;

@override
void onInit() async {
Expand Down Expand Up @@ -142,4 +147,36 @@ class RoomsController extends GetxController {
Get.back();
}
}

Future<void> searchLiveRooms(String query) async {
if (query.isEmpty) {
filteredRooms.value = rooms;
searchBarIsEmpty.value = true;
return;
}
isSearching.value = true;
searchBarIsEmpty.value = false;
try {
final lowerQuery = query.toLowerCase();
filteredRooms.value = rooms.where((room) {
return room.name.toLowerCase().contains(lowerQuery) ||
room.description.toLowerCase().contains(lowerQuery);
}).toList();
} catch (e) {
log('Error searching rooms: $e');
filteredRooms.value = rooms;
customSnackbar(
AppLocalizations.of(Get.context!)!.error,
AppLocalizations.of(Get.context!)!.searchFailed,
LogType.error,
);
} finally {
isSearching.value = false;
}
}

void clearLiveSearch() {
filteredRooms.value = rooms;
searchBarIsEmpty.value = true;
}
}
37 changes: 35 additions & 2 deletions lib/controllers/upcomming_rooms_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ import 'package:resonate/controllers/tabview_controller.dart';
import 'package:resonate/services/appwrite_service.dart';
import 'package:resonate/utils/constants.dart';
import 'package:resonate/l10n/app_localizations.dart';
import 'package:resonate/utils/enums/log_type.dart';
import 'package:resonate/views/screens/room_chat_screen.dart';
import 'package:resonate/views/widgets/snackbar.dart';

class UpcomingRoomsController extends GetxController {
final Databases databases = AppwriteService.getDatabases();
Expand All @@ -36,6 +38,9 @@ class UpcomingRoomsController extends GetxController {
late String localTimeZoneName;
late bool isOffsetNegetive;
Rx<bool> isLoading = false.obs;
RxBool searchBarIsEmpty = true.obs;
RxList<AppwriteUpcommingRoom> filteredUpcomingRooms =
<AppwriteUpcommingRoom>[].obs;
late DateTime currentTimeInstance;
final Map<String, String> monthMap = {
"1": "Jan",
Expand Down Expand Up @@ -205,7 +210,6 @@ class UpcomingRoomsController extends GetxController {

// Delete UpcomingRoom as it is now a room
await deleteUpcomingRoom(upcomingRoomId);

await getUpcomingRooms();
}

Expand Down Expand Up @@ -304,7 +308,6 @@ class UpcomingRoomsController extends GetxController {
collectionId: upcomingRoomsCollectionId,
documentId: upcomingRoomId,
);
await getUpcomingRooms();
deleteAllDeletedUpcomingRoomsSubscribers(upcomingRoomId);
}

Expand Down Expand Up @@ -346,4 +349,34 @@ class UpcomingRoomsController extends GetxController {
isDismissible: false,
);
}

Future<void> searchUpcomingRooms(String query) async {
if (query.isEmpty) {
filteredUpcomingRooms.value = upcomingRooms;
searchBarIsEmpty.value = true;
return;
}

searchBarIsEmpty.value = false;

try {
final lowerQuery = query.toLowerCase();
filteredUpcomingRooms.value = upcomingRooms.where((room) {
return room.name.toLowerCase().contains(lowerQuery) ||
room.description.toLowerCase().contains(lowerQuery);
}).toList();
} catch (e) {
filteredUpcomingRooms.value = upcomingRooms;
customSnackbar(
AppLocalizations.of(Get.context!)!.error,
AppLocalizations.of(Get.context!)!.searchFailed,
LogType.error,
);
}
}

void clearUpcomingSearch() {
filteredUpcomingRooms.value = upcomingRooms;
searchBarIsEmpty.value = true;
}
}
36 changes: 36 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,10 @@
"@errorLoadPackageInfo": {
"description": "Error message when the application fails to load its package information (e.g., version)."
},
"searchFailed": "Failed to search rooms. Please try again.",
"@searchFailed": {
"description": "Error message when searching for rooms fails."
},
"updateAvailable": "Update Available",
"@updateAvailable": {
"description": "Title indicating that a new version of the app is available."
Expand Down Expand Up @@ -924,6 +928,38 @@
"@noSearchResults": {
"description": "Message displayed when a search returns no results."
},
"searchRooms": "Search rooms...",
"@searchRooms": {
"description": "Placeholder text for room search input field."
},
"searchingRooms": "Searching rooms...",
"@searchingRooms": {
"description": "Loading message shown while searching for rooms."
},
"clearSearch": "Clear search",
"@clearSearch": {
"description": "Text for button to clear search results."
},
"searchError": "Search Error",
"@searchError": {
"description": "Title for search error messages."
},
"searchRoomsError": "Failed to search rooms. Please try again.",
"@searchRoomsError": {
"description": "Error message when room search fails."
},
"searchUpcomingRoomsError": "Failed to search upcoming rooms. Please try again.",
"@searchUpcomingRoomsError": {
"description": "Error message when upcoming room search fails."
},
"search": "Search",
"@search": {
"description": "Tooltip text for search button."
},
"clear": "Clear",
"@clear": {
"description": "Tooltip text for clear button."
},
"shareRoomMessage": "🚀 Check out this amazing room: {roomName}!\n\n📖 Description: {description}\n👥 Join {participants} participants now!",
"@shareRoomMessage": {
"description": "The default message template used when sharing a room.",
Expand Down
36 changes: 36 additions & 0 deletions lib/l10n/app_hi.arb
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,10 @@
"@errorLoadPackageInfo": {
"description": "Error message when the application fails to load its package information (e.g., version)."
},
"searchFailed": "रूम खोजने में विफल। कृपया पुनः प्रयास करें।",
"@searchFailed": {
"description": "Error message when searching for rooms fails."
},
"updateAvailable": "अपडेट उपलब्ध है",
"@updateAvailable": {
"description": "Title indicating that a new version of the app is available."
Expand Down Expand Up @@ -924,6 +928,38 @@
"@noSearchResults": {
"description": "Message displayed when a search returns no results."
},
"searchRooms": "रूम खोजें...",
"@searchRooms": {
"description": "Placeholder text for room search input field."
},
"searchingRooms": "रूम खोजे जा रहे हैं...",
"@searchingRooms": {
"description": "Loading message shown while searching for rooms."
},
"clearSearch": "खोज साफ़ करें",
"@clearSearch": {
"description": "Text for button to clear search results."
},
"searchError": "खोज त्रुटि",
"@searchError": {
"description": "Title for search error messages."
},
"searchRoomsError": "कमरों की खोज असफल हुई। कृपया दोबारा कोशिश करें।",
"@searchRoomsError": {
"description": "Error message when room search fails."
},
"searchUpcomingRoomsError": "आगामी कमरों की खोज असफल हुई। कृपया दोबारा कोशिश करें।",
"@searchUpcomingRoomsError": {
"description": "Error message when upcoming room search fails."
},
"search": "खोजें",
"@search": {
"description": "Tooltip text for search button."
},
"clear": "साफ़ करें",
"@clear": {
"description": "Tooltip text for clear button."
},
"shareRoomMessage": "🚀 इस शानदार रूम को देखें: {roomName}!\n\n📖 विवरण: {description}\n👥 अभी {participants} लोग जुड़ चुके हैं!",
"@shareRoomMessage": {
"description": "The default message template used when sharing a room.",
Expand Down
58 changes: 56 additions & 2 deletions lib/l10n/app_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1136,6 +1136,12 @@ abstract class AppLocalizations {
/// **'Could not load package info'**
String get errorLoadPackageInfo;

/// Error message when searching for rooms fails.
///
/// In en, this message translates to:
/// **'Failed to search rooms. Please try again.'**
String get searchFailed;

/// Title indicating that a new version of the app is available.
///
/// In en, this message translates to:
Expand Down Expand Up @@ -1454,6 +1460,54 @@ abstract class AppLocalizations {
/// **'No Search Results'**
String get noSearchResults;

/// Placeholder text for room search input field.
///
/// In en, this message translates to:
/// **'Search rooms...'**
String get searchRooms;

/// Loading message shown while searching for rooms.
///
/// In en, this message translates to:
/// **'Searching rooms...'**
String get searchingRooms;

/// Text for button to clear search results.
///
/// In en, this message translates to:
/// **'Clear search'**
String get clearSearch;

/// Title for search error messages.
///
/// In en, this message translates to:
/// **'Search Error'**
String get searchError;

/// Error message when room search fails.
///
/// In en, this message translates to:
/// **'Failed to search rooms. Please try again.'**
String get searchRoomsError;

/// Error message when upcoming room search fails.
///
/// In en, this message translates to:
/// **'Failed to search upcoming rooms. Please try again.'**
String get searchUpcomingRoomsError;

/// Tooltip text for search button.
///
/// In en, this message translates to:
/// **'Search'**
String get search;

/// Tooltip text for clear button.
///
/// In en, this message translates to:
/// **'Clear'**
String get clear;

/// The default message template used when sharing a room.
///
/// In en, this message translates to:
Expand Down Expand Up @@ -2397,8 +2451,6 @@ class _AppLocalizationsDelegate
AppLocalizations lookupAppLocalizations(Locale locale) {
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
case 'mr':
return AppLocalizationsMr();
case 'en':
return AppLocalizationsEn();
case 'gu':
Expand All @@ -2407,6 +2459,8 @@ AppLocalizations lookupAppLocalizations(Locale locale) {
return AppLocalizationsHi();
case 'kn':
return AppLocalizationsKn();
case 'mr':
return AppLocalizationsMr();
}

throw FlutterError(
Expand Down
28 changes: 28 additions & 0 deletions lib/l10n/app_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get errorLoadPackageInfo => 'Could not load package info';

@override
String get searchFailed => 'Failed to search rooms. Please try again.';

@override
String get updateAvailable => 'Update Available';

Expand Down Expand Up @@ -716,6 +719,31 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get noSearchResults => 'No Search Results';

@override
String get searchRooms => 'Search rooms...';

@override
String get searchingRooms => 'Searching rooms...';

@override
String get clearSearch => 'Clear search';

@override
String get searchError => 'Search Error';

@override
String get searchRoomsError => 'Failed to search rooms. Please try again.';

@override
String get searchUpcomingRoomsError =>
'Failed to search upcoming rooms. Please try again.';

@override
String get search => 'Search';

@override
String get clear => 'Clear';

@override
String shareRoomMessage(
String roomName,
Expand Down
28 changes: 28 additions & 0 deletions lib/l10n/app_localizations_gu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,9 @@ class AppLocalizationsGu extends AppLocalizations {
@override
String get errorLoadPackageInfo => 'પૅકેજ માહિતી લોડ કરી શકાઈ નથી';

@override
String get searchFailed => 'Failed to search rooms. Please try again.';

@override
String get updateAvailable => 'અપડેટ ઉપલબ્ધ છે';

Expand Down Expand Up @@ -716,6 +719,31 @@ class AppLocalizationsGu extends AppLocalizations {
@override
String get noSearchResults => 'કોઈ શોધ પરિણામો નથી';

@override
String get searchRooms => 'Search rooms...';

@override
String get searchingRooms => 'Searching rooms...';

@override
String get clearSearch => 'Clear search';

@override
String get searchError => 'Search Error';

@override
String get searchRoomsError => 'Failed to search rooms. Please try again.';

@override
String get searchUpcomingRoomsError =>
'Failed to search upcoming rooms. Please try again.';

@override
String get search => 'Search';

@override
String get clear => 'Clear';

@override
String shareRoomMessage(
String roomName,
Expand Down
Loading