diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index e5d677e57..dcaa14006 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -123,9 +123,20 @@ class ChatView extends StatelessWidget { // ), // ]; // } else - // Pangea# - if (!controller.room.isArchived) { - // #Pangea + // if (!controller.room.isArchived) { + // return [ + // if (AppConfig.experimentalVoip && + // Matrix.of(context).voipPlugin != null && + // controller.room.isDirectChat) + // IconButton( + // onPressed: controller.onPhoneButtonTap, + // icon: const Icon(Icons.call_outlined), + // tooltip: L10n.of(context).placeCall, + // ), + // EncryptionButton(controller.room), + // ChatSettingsPopupMenu(controller.room, true), + // ]; + if (!(controller.room.isArchived || controller.room.hasArchivedActivity)) { return [ if (controller.room.activityPlan == null || !controller.room.showActivityChatUI) @@ -148,18 +159,6 @@ class ChatView extends StatelessWidget { }, ), ]; - // return [ - // if (AppConfig.experimentalVoip && - // Matrix.of(context).voipPlugin != null && - // controller.room.isDirectChat) - // IconButton( - // onPressed: controller.onPhoneButtonTap, - // icon: const Icon(Icons.call_outlined), - // tooltip: L10n.of(context).placeCall, - // ), - // EncryptionButton(controller.room), - // ChatSettingsPopupMenu(controller.room, true), - // ]; // Pangea# } return []; diff --git a/lib/pangea/activity_sessions/activity_participant_indicator.dart b/lib/pangea/activity_sessions/activity_participant_indicator.dart index aaf54bb59..12fb4f77a 100644 --- a/lib/pangea/activity_sessions/activity_participant_indicator.dart +++ b/lib/pangea/activity_sessions/activity_participant_indicator.dart @@ -64,7 +64,7 @@ class ActivityParticipantIndicator extends StatelessWidget { borderRadius: borderRadius ?? BorderRadius.circular(8.0), color: (hovered || selected) && selectable ? theme.colorScheme.surfaceContainerHighest - : Colors.transparent, + : theme.colorScheme.surface.withAlpha(130), ), constraints: const BoxConstraints(maxWidth: 200.0), child: Column( diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart index 2d5e27cc0..ffd026654 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart @@ -78,8 +78,10 @@ class _ActivityStatsButtonState extends State { // if someone has finished the activity, enable the tooltip final activityRoles = widget.controller.room.activityRoles?.roles.values.toList() ?? []; - if (activityRoles.any((r) => r.isFinished)) { - return true; + final finishedRoles = activityRoles.where((r) => r.isFinished).toList(); + + if (finishedRoles.isNotEmpty) { + return !finishedRoles.any((r) => r.userId == _client.userID); } // otherwise, if no one has finished, only show if the user has sent >= 3 messages diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart index ca7ebb0e2..9bd8d8431 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart @@ -196,7 +196,7 @@ class ActivityStatsMenuState extends State { ), ], ), - if (!room.hasArchivedActivity) + if (!userComplete) ...[ Text( L10n.of(context).activityDropdownDesc, textAlign: TextAlign.center, @@ -205,7 +205,6 @@ class ActivityStatsMenuState extends State { fontWeight: FontWeight.w600, ), ), - if (!userComplete) ...[ if (shouldShowEndForAll) ElevatedButton( style: ElevatedButton.styleFrom( diff --git a/lib/pangea/analytics_misc/get_analytics_controller.dart b/lib/pangea/analytics_misc/get_analytics_controller.dart index 3b1c7b085..78cda3b37 100644 --- a/lib/pangea/analytics_misc/get_analytics_controller.dart +++ b/lib/pangea/analytics_misc/get_analytics_controller.dart @@ -596,7 +596,19 @@ class GetAnalyticsController extends BaseController { final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); if (analyticsRoom == null) return []; final ids = analyticsRoom.activityRoomIds; - return ids.map((id) => _client.getRoomById(id)).whereType().toList(); + return ids + .map((id) => _client.getRoomById(id)) + .whereType() + .where( + (room) => + room.membership != Membership.leave && + room.membership != Membership.ban, + ) + .toList(); + } + + int get archivedActivitiesCount { + return archivedActivities.length; } } diff --git a/lib/pangea/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics_summary/learning_progress_indicators.dart index 3b2b7f14c..e75c03d35 100644 --- a/lib/pangea/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics_summary/learning_progress_indicators.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; @@ -13,7 +12,6 @@ import 'package:fluffychat/pangea/analytics_summary/learning_progress_bar.dart'; import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicator_button.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicator.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -155,12 +153,8 @@ class LearningProgressIndicatorsState ), const SizedBox(width: 6.0), AnimatedFloatingNumber( - number: Matrix.of(context) - .client - .analyticsRoomLocal() - ?.activityRoomIds - .length ?? - 0, + number: MatrixState.pangeaController + .getAnalytics.archivedActivitiesCount, ), ], ), diff --git a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart index d877b0d6d..42b91792e 100644 --- a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart @@ -76,6 +76,10 @@ Future showInviteDialog(Room room, BuildContext context) async { ); if (joinResult.error != null) return; + if (room.membership != Membership.join) { + await room.client.waitForRoomInSync(room.id, join: true); + } + context.go( room.isSpace ? "/rooms/spaces/${room.id}/details" : "/rooms/${room.id}", ); diff --git a/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart b/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart index 618022be4..c00d209c8 100644 --- a/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart +++ b/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart @@ -271,6 +271,7 @@ void chatContextMenuAction( context.go("/rooms"); } } else { + final parentSpaceId = room.courseParent?.id; final confirmed = await showOkCancelAlertDialog( context: context, title: l10n.areYouSure, @@ -286,8 +287,8 @@ void chatContextMenuAction( ); if (!resp.isError) { outerContext.go( - room.courseParent != null - ? "/rooms/spaces/${room.courseParent!.id}/details" + parentSpaceId != null + ? "/rooms/spaces/$parentSpaceId/details" : "/rooms", ); } diff --git a/lib/pangea/common/controllers/pangea_controller.dart b/lib/pangea/common/controllers/pangea_controller.dart index 4448302c6..5cd4e6dc0 100644 --- a/lib/pangea/common/controllers/pangea_controller.dart +++ b/lib/pangea/common/controllers/pangea_controller.dart @@ -229,7 +229,23 @@ class PangeaController { } Future _onLanguageUpdate(LanguageUpdate update) async { - clearCache(exclude: ["analytics_storage"]); + final exclude = [ + 'analytics_storage', + 'course_location_media_storage', + 'course_location_storage', + 'course_media_storage', + ]; + + // only clear course data if the base language has changed + if (update.prevBaseLang == update.baseLang) { + exclude.addAll([ + 'course_storage', + 'course_topic_storage', + 'course_activity_storage', + ]); + } + + clearCache(exclude: exclude); _updateBotOptions(); } diff --git a/lib/pangea/message_token_text/tokens_util.dart b/lib/pangea/message_token_text/tokens_util.dart index b49c1f464..550c48e49 100644 --- a/lib/pangea/message_token_text/tokens_util.dart +++ b/lib/pangea/message_token_text/tokens_util.dart @@ -74,7 +74,9 @@ class TokensUtil { static List getNewTokens( PangeaMessageEvent event, ) { - if (!event.eventId.isValidMatrixId) { + if (!event.eventId.isValidMatrixId || + (MatrixState.pangeaController.subscriptionController.isSubscribed == + false)) { return []; }