Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
66d9350
fix: Updated the deprecated code and removed unused code
Mayank4352 Sep 16, 2025
6e7444f
feat(l10n): add complete metadata and hindi localization
uju09 Sep 16, 2025
74af187
dropped aboutsection
uju09 Sep 17, 2025
4111cef
chore: Regenerate localization files after merge
uju09 Sep 17, 2025
2e1165d
Merged
uju09 Sep 17, 2025
bf04839
fix(l10n): Correct ICU placeholder format
uju09 Sep 17, 2025
a90bf39
chore: Trigger CI re-run
uju09 Sep 18, 2025
3036dd3
Merge pull request #532 from uju09/fix/metadata_transaltion-key
M4dhav Sep 18, 2025
2615630
feat(l10n): add complete metadata and hindi localization
uju09 Sep 16, 2025
02823c9
dropped aboutsection
uju09 Sep 17, 2025
e97825d
chore: Regenerate localization files after merge
uju09 Sep 17, 2025
b647361
fix(l10n): Correct ICU placeholder format
uju09 Sep 17, 2025
d6ec72a
chore: Trigger CI re-run
uju09 Sep 18, 2025
2e5be24
Merge branch 'dev' of https://github.com/AOSSIE-Org/Resonate into dev
M4dhav Sep 19, 2025
b63264e
Merge pull request #531 from Mayank4352/dev
M4dhav Sep 19, 2025
754e857
fix: Remove duplicate keys in localization files
M4dhav Sep 19, 2025
154b71f
Merge branch 'dev' of https://github.com/AOSSIE-Org/Resonate into dev
M4dhav Sep 19, 2025
32e37d6
feat: updated the UX issue
Mayank4352 Sep 19, 2025
0d3252b
Merge pull request #540 from Mayank4352/dev
M4dhav Sep 19, 2025
72950c3
Merge branch 'dev' of https://github.com/AOSSIE-Org/Resonate into dev
M4dhav Sep 24, 2025
5d88106
feat: add Gujarati translation support
4555jan Sep 26, 2025
eea1ffc
fix: correct Gujarati translation for English label
4555jan Sep 26, 2025
78b190f
fix: correct username interpolation in Gujarati translations
4555jan Sep 26, 2025
153bc41
fix: correct Gujarati translation for minimum username length
4555jan Sep 26, 2025
26f4986
fix: add singular/plural handling for participants in Gujarati
4555jan Sep 26, 2025
e2738bf
Removed the stray period from the seconds label
4555jan Sep 26, 2025
63d299d
Revert accidental changes in main.dart to original
4555jan Sep 27, 2025
511b763
Merge pull request #550 from 4555jan/translation-gu
M4dhav Sep 28, 2025
bca7288
chore: update project structure
github-actions[bot] Sep 28, 2025
c932087
feat: Implement better host moderation controls and introduce User Re…
M4dhav Oct 3, 2025
9629b14
fix: implement review feedback for moderation
M4dhav Oct 4, 2025
f60cc59
Merge pull request #554 from M4dhav/host-perms
M4dhav Oct 4, 2025
64a2178
chore: update project structure
github-actions[bot] Oct 4, 2025
41d1f14
Merge branch 'AOSSIE-Org:dev' into dev
M4dhav Oct 4, 2025
0d821bb
Merge branch 'dev' of https://github.com/M4dhav/Resonate into dev
M4dhav Oct 4, 2025
404b6f0
feat: implement live chapters feature
M4dhav Oct 12, 2025
e196d88
chore: update project structure
github-actions[bot] Oct 12, 2025
66de19d
feat: add notifications on live chapter start
M4dhav Oct 12, 2025
08196a3
fix: add review feedback and fixes
M4dhav Oct 12, 2025
1e70a5c
Merge pull request #563 from M4dhav/dev
M4dhav Oct 12, 2025
eb79067
chore: bump version for release
M4dhav Oct 12, 2025
5096415
fix: fix nesting bug in profile controller related to friend function…
M4dhav Oct 12, 2025
c790e1d
fix: fix bugs related to https://github.com/AOSSIE-Org/Resonate/issue…
M4dhav Oct 12, 2025
ba67c1f
Merge pull request #565 from M4dhav/dev
M4dhav Oct 12, 2025
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
1 change: 1 addition & 0 deletions ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<array>
<string>hi</string>
<string>en</string>
<string>gu</string>
</array>
<key>CFBundleDisplayName</key>
<string>Resonate</string>
Expand Down
3 changes: 3 additions & 0 deletions l10n.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
supported-locales:
- en
- hi
Comment on lines +4 to +6
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing Gujarati locale in supported-locales configuration.

The PR introduces comprehensive Gujarati localization support (AppLocalizationsGu, app_gu.arb, Info.plist "gu" entry, untranslated.txt "gu" key), but the l10n.yaml configuration only lists "en" and "hi" in supported-locales. This inconsistency will prevent Flutter's localization system from properly generating and resolving Gujarati translations.

Apply this diff to add Gujarati locale support:

 supported-locales:
   - en
   - hi
+  - gu
🤖 Prompt for AI Agents
In l10n.yaml around lines 4 to 6, the supported-locales list only contains "en"
and "hi" but the PR added Gujarati resources; update the supported-locales block
to include "gu" (e.g. add a new list item "- gu"), save the file and re-run the
Flutter localization generation (flutter pub get / flutter gen-l10n) so Gujarati
is picked up.

untranslated-messages-file: untranslated.txt
1 change: 1 addition & 0 deletions lib/controllers/about_app_screen_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class AboutAppScreenController extends GetxController {
void onInit() {
super.onInit();
_loadPackageInfo();
checkForUpdate(launchUpdateIfAvailable: false, isManualCheck: false);
}

Future<void> _loadPackageInfo() async {
Expand Down
12 changes: 7 additions & 5 deletions lib/controllers/auth_state_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:resonate/controllers/about_app_screen_controller.dart';
import 'package:resonate/controllers/friend_calling_controller.dart';
import 'package:resonate/controllers/friends_controller.dart';
import 'package:resonate/controllers/about_app_screen_controller.dart';
import 'package:resonate/controllers/upcomming_rooms_controller.dart';
import 'package:resonate/controllers/tabview_controller.dart';
import 'package:resonate/models/follower_user_model.dart';
Expand Down Expand Up @@ -53,6 +51,7 @@ class AuthStateController extends GetxController {
late int ratingCount;
late User appwriteUser;
late List<FollowerUserModel> followerDocuments;
late int reportsCount;

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
Expand Down Expand Up @@ -109,7 +108,7 @@ class AuthStateController extends GetxController {
await setUserProfileData();

// ask for settings permissions
NotificationSettings settings = await messaging.requestPermission(
await messaging.requestPermission(
alert: true,
announcement: false,
badge: true,
Expand Down Expand Up @@ -219,6 +218,8 @@ class AuthStateController extends GetxController {
return FollowerUserModel.fromJson(e);
}).toList() ??
[];
reportsCount =
(userDataDoc.data['userReports'] as List<dynamic>?)?.length ?? 0;
}

update();
Expand All @@ -235,8 +236,9 @@ class AuthStateController extends GetxController {
Future<void> isUserLoggedIn() async {
try {
await setUserProfileData();
if (Get.isRegistered<AboutAppScreenController>()) {
Get.find<AboutAppScreenController>().checkForUpdate();
if (reportsCount > 5) {
Get.offNamed(AppRoutes.userBlockedScreen);
return;
}
if (isUserProfileComplete == false) {
Get.offNamed(AppRoutes.onBoarding);
Expand Down
1 change: 1 addition & 0 deletions lib/controllers/create_room_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class CreateRoomController extends GetxController {
state: RoomState.live,
myDocId: myDocId,
isUserAdmin: true,
reportedUsers: [],
);
Get.find<TabViewController>().openRoomSheet(room);

Expand Down
33 changes: 33 additions & 0 deletions lib/controllers/explore_story_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import 'package:get/get.dart';
import 'package:meilisearch/meilisearch.dart';
import 'package:resonate/controllers/auth_state_controller.dart';
import 'package:resonate/models/chapter.dart';
import 'package:resonate/models/live_chapter_attendees_model.dart';
import 'package:resonate/models/live_chapter_model.dart';
import 'package:resonate/models/resonate_user.dart';
import 'package:resonate/models/story.dart';
import 'package:resonate/services/appwrite_service.dart';
Expand Down Expand Up @@ -97,6 +99,9 @@ class ExploreStoryController extends GetxController {
story.chapters = storyChapters;
story.isLikedByCurrentUser.value = hasUserLiked;
story.likesCount.value = likes;

final liveChapter = await fetchLiveChapterForStory(story.storyId);
story.liveChapter = liveChapter;
isLoadingStoryPage.value = false;
}

Expand Down Expand Up @@ -671,6 +676,34 @@ class ExploreStoryController extends GetxController {
return currentStoryChapters;
}

Future<LiveChapterModel?> fetchLiveChapterForStory(String storyId) async {
List<Document> liveStoryDocuments = await databases
.listDocuments(
databaseId: storyDatabaseId,
collectionId: liveChaptersCollectionId,
queries: [Query.equal('storyId', storyId)],
)
.then((value) => value.documents);
if (liveStoryDocuments.isEmpty) {
return null;
}

final attendeesDocument = await databases.getDocument(
databaseId: userDatabaseID,
collectionId: liveChapterAttendeesCollectionId,
documentId: liveStoryDocuments.first.data['\$id'],
);

final attendeesModel = LiveChapterAttendeesModel.fromJson(
attendeesDocument.data,
);
final liveChapterModel = LiveChapterModel.fromJson(
liveStoryDocuments.first.data,
).copyWith(attendees: attendeesModel);

return liveChapterModel;
}
Comment on lines +691 to +705
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Use the document ID when loading attendees.

liveStoryDocuments.first.data['\$id'] is always null$id lives on the Document object, not inside data. As written, the follow-up getDocument call will request documentId: null and throw. Use liveStoryDocuments.first.$id (and consider guarding for missing attendees).

-    final attendeesDocument = await databases.getDocument(
+    final attendeesDocument = await databases.getDocument(
       databaseId: userDatabaseID,
       collectionId: liveChapterAttendeesCollectionId,
-      documentId: liveStoryDocuments.first.data['\$id'],
+      documentId: liveStoryDocuments.first.$id,
     );
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
final attendeesDocument = await databases.getDocument(
databaseId: userDatabaseID,
collectionId: liveChapterAttendeesCollectionId,
documentId: liveStoryDocuments.first.data['\$id'],
);
final attendeesModel = LiveChapterAttendeesModel.fromJson(
attendeesDocument.data,
);
final liveChapterModel = LiveChapterModel.fromJson(
liveStoryDocuments.first.data,
).copyWith(attendees: attendeesModel);
return liveChapterModel;
}
final attendeesDocument = await databases.getDocument(
databaseId: userDatabaseID,
collectionId: liveChapterAttendeesCollectionId,
documentId: liveStoryDocuments.first.$id,
);
final attendeesModel = LiveChapterAttendeesModel.fromJson(
attendeesDocument.data,
);
final liveChapterModel = LiveChapterModel.fromJson(
liveStoryDocuments.first.data,
).copyWith(attendees: attendeesModel);
return liveChapterModel;
}
🤖 Prompt for AI Agents
In lib/controllers/explore_story_controller.dart around lines 691 to 705, the
code uses liveStoryDocuments.first.data['$id'] which is null because $id is a
property of the Document, not inside data; update the getDocument call to use
liveStoryDocuments.first.$id for documentId and add a null-check/early return or
throw if that $id is missing, and also guard the attendees lookup by checking
whether the attendees document exists (handle not-found or null result) before
constructing LiveChapterAttendeesModel so you don't pass null into fromJson.


Future<bool> checkIfStoryLikedByUser(String storyId) async {
List<Document> userLikeDocuments = await databases
.listDocuments(
Expand Down
Loading
Loading