diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index c995f637a..6fa32a1fd 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -4746,5 +4746,7 @@ "placeholders": { "feature": {} } - } + }, + "notInClass": "Not in a class!", + "noClassCode": "No class code!" } \ No newline at end of file diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 7256cba43..2dc05f4a4 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; abstract class AppConfig { // #Pangea @@ -53,6 +53,7 @@ abstract class AppConfig { static const Color warning = Color.fromARGB(255, 210, 124, 12); static const Color gold = Color.fromARGB(255, 253, 191, 1); static const Color goldLight = Color.fromARGB(255, 254, 223, 73); + static const Color error = Colors.red; static const int overlayAnimationDuration = 250; // static String _privacyUrl = // 'https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md'; diff --git a/lib/config/routes.dart b/lib/config/routes.dart index ae7d8f249..28012f458 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -30,12 +30,12 @@ import 'package:fluffychat/pages/settings_password/settings_password.dart'; import 'package:fluffychat/pages/settings_security/settings_security.dart'; import 'package:fluffychat/pages/settings_style/settings_style.dart'; import 'package:fluffychat/pangea/guard/p_vguard.dart'; -import 'package:fluffychat/pangea/pages/find_partner/find_partner.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; -import 'package:fluffychat/pangea/pages/sign_up/login_or_signup_view.dart'; -import 'package:fluffychat/pangea/pages/sign_up/signup.dart'; -import 'package:fluffychat/pangea/pages/sign_up/user_settings.dart'; -import 'package:fluffychat/pangea/widgets/class/join_with_link.dart'; +import 'package:fluffychat/pangea/login/pages/login_or_signup_view.dart'; +import 'package:fluffychat/pangea/login/pages/signup.dart'; +import 'package:fluffychat/pangea/login/pages/user_settings.dart'; +import 'package:fluffychat/pangea/spaces/utils/join_with_link.dart'; +import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; +import 'package:fluffychat/pangea/user/pages/find_partner.dart'; import 'package:fluffychat/widgets/layouts/empty_page.dart'; import 'package:fluffychat/widgets/layouts/two_column_layout.dart'; import 'package:fluffychat/widgets/log_view.dart'; diff --git a/lib/main.dart b/lib/main.dart index 2b79345de..3e11711be 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,10 +8,10 @@ import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/error_widget.dart'; diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart index bff9d694a..bfa2e3238 100644 --- a/lib/pages/archive/archive.dart +++ b/lib/pages/archive/archive.dart @@ -5,7 +5,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/archive/archive_view.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 44ca3fb4e..6143b3feb 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -27,24 +27,24 @@ import 'package:fluffychat/pages/chat/chat_view.dart'; import 'package:fluffychat/pages/chat/event_info_dialog.dart'; import 'package:fluffychat/pages/chat/recording_dialog.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/choreo_record.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/utils/overlay.dart'; -import 'package:fluffychat/pangea/utils/report_message.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/p_language_dialog.dart'; +import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/events/utils/report_message.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; +import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; @@ -682,7 +682,7 @@ class ChatController extends State GoogleAnalytics.sendMessage( room.id, - room.classCode, + room.classCode(context), ); if (msgEventId == null) { diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index 911e90cf8..c0b6157ce 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -9,9 +9,9 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/choreographer/widgets/send_button.dart'; import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/pangea_reaction_picker.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/pangea_reaction_picker.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import '../../config/themes.dart'; import 'chat.dart'; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 48c7dbfa3..6ed4ffe87 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -16,13 +16,13 @@ import 'package:fluffychat/pages/chat/chat_emoji_picker.dart'; import 'package:fluffychat/pages/chat/chat_event_list.dart'; import 'package:fluffychat/pages/chat/pinned_events.dart'; import 'package:fluffychat/pages/chat/reply_display.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/widgets/gain_points.dart'; +import 'package:fluffychat/pangea/chat/widgets/chat_floating_action_button.dart'; +import 'package:fluffychat/pangea/chat/widgets/chat_view_background.dart'; +import 'package:fluffychat/pangea/chat/widgets/input_bar_wrapper.dart'; import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/widgets/animations/gain_points.dart'; -import 'package:fluffychat/pangea/widgets/chat/chat_floating_action_button.dart'; -import 'package:fluffychat/pangea/widgets/chat/chat_view_background.dart'; -import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/connection_status_header.dart'; diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index 9a1550e58..42002dd5f 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -12,7 +12,7 @@ import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart'; import 'package:path_provider/path_provider.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/url_launcher.dart'; diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index 8accd871c..866b680c6 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -10,7 +10,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import '../../../utils/url_launcher.dart'; diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 22e7eae49..f2215ce1b 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -7,12 +7,12 @@ import 'package:swipe_to_action/swipe_to_action.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/room_creation_state_event.dart'; -import 'package:fluffychat/pangea/enum/use_type.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/utils/any_state_holder.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_buttons.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/choreographer/enums/use_type.dart'; +import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/avatar.dart'; diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 14f00552b..91fd9ea1f 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -8,11 +8,11 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/video_player.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_token_text.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_toolbar_selection_area.dart'; -import 'package:fluffychat/pangea/widgets/igc/pangea_rich_text.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_rich_text.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_token_text.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_toolbar_selection_area.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import '../../../config/app_config.dart'; import '../../../utils/platform_infos.dart'; diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index 692acb25d..6c264bb72 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -10,7 +10,7 @@ import 'package:slugify/slugify.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/command_hints.dart'; -import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; import 'package:fluffychat/utils/markdown_context_builder.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; diff --git a/lib/pages/chat/recording_dialog.dart b/lib/pages/chat/recording_dialog.dart index 45a58f550..077d903c0 100644 --- a/lib/pages/chat/recording_dialog.dart +++ b/lib/pages/chat/recording_dialog.dart @@ -11,7 +11,7 @@ import 'package:record/record.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/update_version_dialog.dart'; +import 'package:fluffychat/pangea/toolbar/utils/update_version_dialog.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'events/audio_player.dart'; diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index e52b46363..4f4dd5f25 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -8,8 +8,8 @@ import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/settings/settings.dart'; -import 'package:fluffychat/pangea/pages/chat_details/pangea_chat_details.dart'; -import 'package:fluffychat/pangea/utils/set_class_name.dart'; +import 'package:fluffychat/pangea/chat_settings/pages/pangea_chat_details.dart'; +import 'package:fluffychat/pangea/spaces/utils/set_class_name.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -266,12 +266,6 @@ class ChatDetailsController extends State { if (mounted) setState(() {}); } - @override - void initState() { - super.initState(); - MatrixState.pangeaController.classController.addMissingRoomRules(roomId); - } - @override void dispose() { super.dispose(); diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 27102cec5..59d9b0869 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -18,13 +18,13 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/send_file_dialog.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; -import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; -import 'package:fluffychat/pangea/controllers/app_version_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart'; +import 'package:fluffychat/pangea/chat_list/utils/app_version_util.dart'; +import 'package:fluffychat/pangea/chat_list/utils/chat_list_handle_space_tap.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/subscription/widgets/subscription_snackbar.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -41,6 +41,7 @@ import '../../widgets/matrix.dart'; import 'package:fluffychat/utils/tor_stub.dart' if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; + enum SelectMode { normal, share, @@ -573,7 +574,7 @@ class ChatListController extends State Matrix.of(context).backgroundPush?.setupPush(); UpdateNotifier.showUpdateSnackBar(context); - AppVersionController.showAppVersionDialog(context); + AppVersionUtil.showAppVersionDialog(context); } // Workaround for system UI overlay style not applied on app start diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index b7f934fa7..c142d4d0c 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -11,7 +11,7 @@ import 'package:fluffychat/pages/chat_list/dummy_chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart'; import 'package:fluffychat/pages/chat_list/space_view.dart'; import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/pangea_chat_list_header.dart'; +import 'package:fluffychat/pangea/chat_list/widgets/pangea_chat_list_header.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; diff --git a/lib/pages/chat_list/chat_list_header.dart b/lib/pages/chat_list/chat_list_header.dart index 663d8c698..b51e8b212 100644 --- a/lib/pages/chat_list/chat_list_header.dart +++ b/lib/pages/chat_list/chat_list_header.dart @@ -5,7 +5,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/client_chooser_button.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/learning_progress_indicators.dart'; class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { final ChatListController controller; diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index caad0b7a2..d4eedbefa 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -5,7 +5,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/get_chat_list_item_subtitle.dart'; +import 'package:fluffychat/pangea/chat_list/utils/get_chat_list_item_subtitle.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; diff --git a/lib/pages/chat_list/chat_list_view.dart b/lib/pages/chat_list/chat_list_view.dart index baf01e702..9eeba9a32 100644 --- a/lib/pages/chat_list/chat_list_view.dart +++ b/lib/pages/chat_list/chat_list_view.dart @@ -8,7 +8,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/navi_rail_item.dart'; -import 'package:fluffychat/pangea/widgets/chat/chat_list_view_body_wrapper.dart'; +import 'package:fluffychat/pangea/chat_list/widgets/chat_list_view_body_wrapper.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart index 74727c9d6..3723890e7 100644 --- a/lib/pages/chat_list/client_chooser_button.dart +++ b/lib/pages/chat_list/client_chooser_button.dart @@ -5,9 +5,9 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/logout.dart'; -import 'package:fluffychat/pangea/utils/space_code.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/spaces/utils/space_code.dart'; +import 'package:fluffychat/pangea/user/utils/logout.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 787ae2284..b5c579645 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -13,9 +13,9 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart'; -import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/widgets/chat/add_room_dialog.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/spaces/widgets/add_room_dialog.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/stream_extension.dart'; diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart index 6cdeeb59b..8e76c0ed8 100644 --- a/lib/pages/invitation_selection/invitation_selection.dart +++ b/lib/pages/invitation_selection/invitation_selection.dart @@ -7,7 +7,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../utils/localized_exception_extension.dart'; diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index d8e50f815..5510a9c98 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -6,10 +6,10 @@ import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_view.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index 458ac89c8..d0b2fd4a6 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -7,13 +7,13 @@ import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/new_group/new_group_view.dart'; -import 'package:fluffychat/pangea/constants/class_default_values.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/utils/space_code.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/utils/space_code.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -145,7 +145,7 @@ class NewGroupController extends State { room = client.getRoomById(spaceId); } if (room == null) return; - GoogleAnalytics.createClass(room.name, room.classCode); + GoogleAnalytics.createClass(room.name, room.classCode(context)); try { await room.invite(BotName.byEnvironment); } catch (err) { @@ -172,8 +172,7 @@ class NewGroupController extends State { }, 'users_default': 0, 'users': { - Matrix.of(context).client.userID: - ClassDefaultValues.powerLevelOfAdmin, + Matrix.of(context).client.userID: SpaceConstants.powerLevelOfAdmin, }, }, ), diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 8474ce9a5..2e308549d 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -6,7 +6,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/utils/logout.dart'; +import 'package:fluffychat/pangea/user/utils/logout.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index 08bb34a6c..5079a3043 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -8,7 +8,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; diff --git a/lib/pages/user_bottom_sheet/user_bottom_sheet.dart b/lib/pages/user_bottom_sheet/user_bottom_sheet.dart index 0ce5d7759..d0d7b6012 100644 --- a/lib/pages/user_bottom_sheet/user_bottom_sheet.dart +++ b/lib/pages/user_bottom_sheet/user_bottom_sheet.dart @@ -6,7 +6,7 @@ import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; import '../../widgets/matrix.dart'; diff --git a/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart b/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart index 0831ef2ae..68a840571 100644 --- a/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart +++ b/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart @@ -5,7 +5,7 @@ import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; diff --git a/lib/pangea/constants/analytics_constants.dart b/lib/pangea/analytics/constants/analytics_constants.dart similarity index 100% rename from lib/pangea/constants/analytics_constants.dart rename to lib/pangea/analytics/constants/analytics_constants.dart diff --git a/lib/pangea/constants/morph_categories_and_labels.dart b/lib/pangea/analytics/constants/morph_categories_and_labels.dart similarity index 100% rename from lib/pangea/constants/morph_categories_and_labels.dart rename to lib/pangea/analytics/constants/morph_categories_and_labels.dart diff --git a/lib/pangea/controllers/get_analytics_controller.dart b/lib/pangea/analytics/controllers/get_analytics_controller.dart similarity index 91% rename from lib/pangea/controllers/get_analytics_controller.dart rename to lib/pangea/analytics/controllers/get_analytics_controller.dart index 35c986e9e..60df91eab 100644 --- a/lib/pangea/controllers/get_analytics_controller.dart +++ b/lib/pangea/analytics/controllers/get_analytics_controller.dart @@ -6,18 +6,17 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/constants/class_default_values.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_event.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/extensions/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_event.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; /// A minimized version of AnalyticsController that get the logged in user's analytics class GetAnalyticsController { @@ -244,7 +243,9 @@ class GetAnalyticsController { // this function gets called soon after login, so first // make sure that the user's l2 is loaded, if the user has set their l2 if (_client.userID != null && _l2Code == null) { - await _pangeaController.matrixState.client.waitForAccountData(); + if (_pangeaController.matrixState.client.prevBatch == null) { + await _pangeaController.matrixState.client.onSync.stream.first; + } if (_l2Code == null) return null; } final Room? analyticsRoom = _client.analyticsRoomLocal(_l2Code!); @@ -313,10 +314,6 @@ class AnalyticsCacheEntry { _createdAt = DateTime.now(); } - bool get isExpired => - DateTime.now().difference(_createdAt).inMinutes > - ClassDefaultValues.minutesDelayToMakeNewChartAnalytics; - bool needsUpdate(DateTime? lastEventUpdated) { // cache entry is invalid if it's older than the last event update // if lastEventUpdated is null, that would indicate that no events diff --git a/lib/pangea/controllers/message_analytics_controller.dart b/lib/pangea/analytics/controllers/message_analytics_controller.dart similarity index 95% rename from lib/pangea/controllers/message_analytics_controller.dart rename to lib/pangea/analytics/controllers/message_analytics_controller.dart index 96d798852..3bf62d713 100644 --- a/lib/pangea/controllers/message_analytics_controller.dart +++ b/lib/pangea/analytics/controllers/message_analytics_controller.dart @@ -2,11 +2,11 @@ import 'dart:math'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/controllers/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/analytics/controllers/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; /// Picks which tokens to do activities on and what types of activities to do /// Caches result so that we don't have to recompute it diff --git a/lib/pangea/controllers/put_analytics_controller.dart b/lib/pangea/analytics/controllers/put_analytics_controller.dart similarity index 95% rename from lib/pangea/controllers/put_analytics_controller.dart rename to lib/pangea/analytics/controllers/put_analytics_controller.dart index 17ff50d8c..09da11906 100644 --- a/lib/pangea/controllers/put_analytics_controller.dart +++ b/lib/pangea/analytics/controllers/put_analytics_controller.dart @@ -4,16 +4,16 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/extensions/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; enum AnalyticsUpdateType { server, local } diff --git a/lib/pangea/enum/analytics/analytics_summary_enum.dart b/lib/pangea/analytics/enums/analytics_summary_enum.dart similarity index 100% rename from lib/pangea/enum/analytics/analytics_summary_enum.dart rename to lib/pangea/analytics/enums/analytics_summary_enum.dart diff --git a/lib/pangea/enum/construct_type_enum.dart b/lib/pangea/analytics/enums/construct_type_enum.dart similarity index 83% rename from lib/pangea/enum/construct_type_enum.dart rename to lib/pangea/analytics/enums/construct_type_enum.dart index 53334a431..b7896ae8f 100644 --- a/lib/pangea/enum/construct_type_enum.dart +++ b/lib/pangea/analytics/enums/construct_type_enum.dart @@ -3,10 +3,10 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/constants/analytics_constants.dart'; -import 'package:fluffychat/pangea/enum/analytics/morph_categories_enum.dart'; -import 'package:fluffychat/pangea/enum/analytics/parts_of_speech_enum.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics/enums/morph_categories_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/parts_of_speech_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; enum ConstructTypeEnum { /// for vocabulary words diff --git a/lib/pangea/enum/construct_use_type_enum.dart b/lib/pangea/analytics/enums/construct_use_type_enum.dart similarity index 98% rename from lib/pangea/enum/construct_use_type_enum.dart rename to lib/pangea/analytics/enums/construct_use_type_enum.dart index d97d8fb46..61d03f190 100644 --- a/lib/pangea/enum/construct_use_type_enum.dart +++ b/lib/pangea/analytics/enums/construct_use_type_enum.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/analytics/analytics_summary_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/analytics_summary_enum.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; enum ConstructUseTypeEnum { /// produced in chat by user, igc was run, and we've judged it to be a correct use diff --git a/lib/pangea/enum/lemma_category_enum.dart b/lib/pangea/analytics/enums/lemma_category_enum.dart similarity index 95% rename from lib/pangea/enum/lemma_category_enum.dart rename to lib/pangea/analytics/enums/lemma_category_enum.dart index 1cc5e0182..7dd0f7dc3 100644 --- a/lib/pangea/enum/lemma_category_enum.dart +++ b/lib/pangea/analytics/enums/lemma_category_enum.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; enum LemmaCategoryEnum { flowers, diff --git a/lib/pangea/enum/analytics/morph_categories_enum.dart b/lib/pangea/analytics/enums/morph_categories_enum.dart similarity index 98% rename from lib/pangea/enum/analytics/morph_categories_enum.dart rename to lib/pangea/analytics/enums/morph_categories_enum.dart index eb84d9eb0..2207753a4 100644 --- a/lib/pangea/enum/analytics/morph_categories_enum.dart +++ b/lib/pangea/analytics/enums/morph_categories_enum.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; enum MorphologicalCategories { Pos, diff --git a/lib/pangea/enum/analytics/parts_of_speech_enum.dart b/lib/pangea/analytics/enums/parts_of_speech_enum.dart similarity index 97% rename from lib/pangea/enum/analytics/parts_of_speech_enum.dart rename to lib/pangea/analytics/enums/parts_of_speech_enum.dart index 7f2a0a50e..a4b9c58ec 100644 --- a/lib/pangea/enum/analytics/parts_of_speech_enum.dart +++ b/lib/pangea/analytics/enums/parts_of_speech_enum.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; enum GrammarCopyPOS { sconj, diff --git a/lib/pangea/enum/progress_indicators_enum.dart b/lib/pangea/analytics/enums/progress_indicators_enum.dart similarity index 94% rename from lib/pangea/enum/progress_indicators_enum.dart rename to lib/pangea/analytics/enums/progress_indicators_enum.dart index 3af4e8f14..d3fd2ad52 100644 --- a/lib/pangea/enum/progress_indicators_enum.dart +++ b/lib/pangea/analytics/enums/progress_indicators_enum.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:material_symbols_icons/symbols.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; enum ProgressIndicatorEnum { level, diff --git a/lib/pangea/extensions/client_extension/client_analytics_extension.dart b/lib/pangea/analytics/extensions/client_analytics_extension.dart similarity index 83% rename from lib/pangea/extensions/client_extension/client_analytics_extension.dart rename to lib/pangea/analytics/extensions/client_analytics_extension.dart index f6d651378..5fee40fbf 100644 --- a/lib/pangea/extensions/client_extension/client_analytics_extension.dart +++ b/lib/pangea/analytics/extensions/client_analytics_extension.dart @@ -1,10 +1,22 @@ -part of "client_extension.dart"; +import 'dart:developer'; +import 'dart:math'; + +import 'package:flutter/foundation.dart'; + +import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; extension AnalyticsClientExtension on Client { /// Get the logged in user's analytics room matching /// a given langCode. If not present, create it. - Future _getMyAnalyticsRoom(String langCode) async { - final Room? analyticsRoom = _analyticsRoomLocal(langCode); + Future getMyAnalyticsRoom(String langCode) async { + final Room? analyticsRoom = analyticsRoomLocal(langCode); if (analyticsRoom != null) return analyticsRoom; return _makeAnalyticsRoom(langCode); } @@ -12,7 +24,7 @@ extension AnalyticsClientExtension on Client { /// Get local analytics room for a given langCode and /// optional userId (if not specified, uses current user). /// If user is invited to the room, joins the room. - Room? _analyticsRoomLocal(String langCode, [String? userIdParam]) { + Room? analyticsRoomLocal(String langCode, [String? userIdParam]) { final Room? analyticsRoom = rooms.firstWhereOrNull((e) { return e.isAnalyticsRoom && e.isAnalyticsRoomOfUser(userIdParam ?? userID!) && @@ -61,7 +73,7 @@ extension AnalyticsClientExtension on Client { await waitForRoomInSync(roomID, join: true); } - _addAnalyticsRoomsToSpaces(); + addAnalyticsRoomsToSpaces(); return getRoomById(roomID)!; } @@ -74,11 +86,11 @@ extension AnalyticsClientExtension on Client { /// Update the visibility of all analytics rooms to private (do they don't show in search /// results) and set the join rules to public (so they come through in space hierarchy response) - Future _updateAnalyticsRoomVisibility() async { + Future updateAnalyticsRoomVisibility() async { if (userID == null || userID == BotName.byEnvironment) return; final Random random = Random(); - for (final analyticsRoom in allMyAnalyticsRooms) { + for (final analyticsRoom in _allMyAnalyticsRooms) { if (userID == null) return; final visibility = await getRoomVisibilityOnDirectory(analyticsRoom.id); @@ -109,14 +121,14 @@ extension AnalyticsClientExtension on Client { /// Space admins join analytics rooms in spaces via the space hierarchy, /// so other members of the space need to add their analytics rooms to the space. - Future _addAnalyticsRoomsToSpaces() async { + Future addAnalyticsRoomsToSpaces() async { if (userID == null || userID == BotName.byEnvironment) return; final spaces = rooms.where((room) => room.isSpace).toList(); final Random random = Random(); for (final space in spaces) { if (userID == null) return; - final List roomsNotAdded = allMyAnalyticsRooms.where((room) { + final List roomsNotAdded = _allMyAnalyticsRooms.where((room) { return !space.spaceChildren.any((child) => child.roomId == room.id); }).toList(); @@ -150,7 +162,7 @@ extension AnalyticsClientExtension on Client { /// Check if sync update includes newly joined room. Used by the /// GetAnalyticsController to add analytics rooms to newly joined spaces. - bool _isJoinSpaceSyncUpdate(SyncUpdate update) { + bool isJoinSpaceSyncUpdate(SyncUpdate update) { if (update.rooms?.join == null) return false; return update.rooms!.join!.values .where( diff --git a/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart b/lib/pangea/analytics/extensions/room_analytics_extension.dart similarity index 99% rename from lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart rename to lib/pangea/analytics/extensions/room_analytics_extension.dart index b3b9e1807..d087e2720 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart +++ b/lib/pangea/analytics/extensions/room_analytics_extension.dart @@ -1,4 +1,4 @@ -part of "pangea_room_extension.dart"; +part of "../../extensions/pangea_room_extension.dart"; extension AnalyticsRoomExtension on Room { Future> _getFullSpaceHierarchy() async { diff --git a/lib/pangea/models/analytics/analytics_summary_model.dart b/lib/pangea/analytics/models/analytics_summary_model.dart similarity index 96% rename from lib/pangea/models/analytics/analytics_summary_model.dart rename to lib/pangea/analytics/models/analytics_summary_model.dart index 421f45c16..85a728113 100644 --- a/lib/pangea/models/analytics/analytics_summary_model.dart +++ b/lib/pangea/analytics/models/analytics_summary_model.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/analytics/analytics_summary_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/enums/analytics_summary_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; class AnalyticsSummaryModel { String username; diff --git a/lib/pangea/models/analytics/construct_list_model.dart b/lib/pangea/analytics/models/construct_list_model.dart similarity index 95% rename from lib/pangea/models/analytics/construct_list_model.dart rename to lib/pangea/analytics/models/construct_list_model.dart index 18287c640..3f6ffe125 100644 --- a/lib/pangea/models/analytics/construct_list_model.dart +++ b/lib/pangea/analytics/models/construct_list_model.dart @@ -4,13 +4,13 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:fluffychat/pangea/constants/analytics_constants.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; /// A wrapper around a list of [OneConstructUse]s, used to simplify /// the process of filtering / sorting / displaying the events. diff --git a/lib/pangea/models/analytics/construct_use_model.dart b/lib/pangea/analytics/models/construct_use_model.dart similarity index 83% rename from lib/pangea/models/analytics/construct_use_model.dart rename to lib/pangea/analytics/models/construct_use_model.dart index b7d9a96b9..e8685364d 100644 --- a/lib/pangea/models/analytics/construct_use_model.dart +++ b/lib/pangea/analytics/models/construct_use_model.dart @@ -1,8 +1,8 @@ -import 'package:fluffychat/pangea/constants/analytics_constants.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; /// One lemma and a list of construct uses for that lemma class ConstructUses { diff --git a/lib/pangea/models/analytics/constructs_event.dart b/lib/pangea/analytics/models/constructs_event.dart similarity index 82% rename from lib/pangea/models/analytics/constructs_event.dart rename to lib/pangea/analytics/models/constructs_event.dart index 0cc8584f4..64b3826f0 100644 --- a/lib/pangea/models/analytics/constructs_event.dart +++ b/lib/pangea/analytics/models/constructs_event.dart @@ -1,7 +1,7 @@ import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import '../../constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import '../../events/constants/pangea_event_types.dart'; class ConstructAnalyticsEvent { late Event _event; diff --git a/lib/pangea/models/analytics/constructs_model.dart b/lib/pangea/analytics/models/constructs_model.dart similarity index 94% rename from lib/pangea/models/analytics/constructs_model.dart rename to lib/pangea/analytics/models/constructs_model.dart index c9a39625f..d2763cdb0 100644 --- a/lib/pangea/models/analytics/constructs_model.dart +++ b/lib/pangea/analytics/models/constructs_model.dart @@ -4,11 +4,11 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/morph_categories_and_labels.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../../enum/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/constants/morph_categories_and_labels.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import '../enums/construct_type_enum.dart'; class ConstructAnalyticsModel { List uses; diff --git a/lib/pangea/models/lemma.dart b/lib/pangea/analytics/models/lemma.dart similarity index 100% rename from lib/pangea/models/lemma.dart rename to lib/pangea/analytics/models/lemma.dart diff --git a/lib/pangea/repo/lemma_info/lemma_info_repo.dart b/lib/pangea/analytics/repo/lemma_info_repo.dart similarity index 87% rename from lib/pangea/repo/lemma_info/lemma_info_repo.dart rename to lib/pangea/analytics/repo/lemma_info_repo.dart index d4cb65c28..1fb31901a 100644 --- a/lib/pangea/repo/lemma_info/lemma_info_repo.dart +++ b/lib/pangea/analytics/repo/lemma_info_repo.dart @@ -5,14 +5,14 @@ import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/models/content_feedback.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_request.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_response.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/content_feedback.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../config/environment.dart'; -import '../../network/requests.dart'; +import '../../common/config/environment.dart'; +import '../../common/network/requests.dart'; class LemmaInfoRepo { // In-memory cache with timestamps diff --git a/lib/pangea/repo/lemma_info/lemma_info_request.dart b/lib/pangea/analytics/repo/lemma_info_request.dart similarity index 87% rename from lib/pangea/repo/lemma_info/lemma_info_request.dart rename to lib/pangea/analytics/repo/lemma_info_request.dart index ab43af6eb..231732038 100644 --- a/lib/pangea/repo/lemma_info/lemma_info_request.dart +++ b/lib/pangea/analytics/repo/lemma_info_request.dart @@ -1,5 +1,5 @@ -import 'package:fluffychat/pangea/models/content_feedback.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_response.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; +import 'package:fluffychat/pangea/events/models/content_feedback.dart'; class LemmaInfoRequest { final String lemma; diff --git a/lib/pangea/repo/lemma_info/lemma_info_response.dart b/lib/pangea/analytics/repo/lemma_info_response.dart similarity index 93% rename from lib/pangea/repo/lemma_info/lemma_info_response.dart rename to lib/pangea/analytics/repo/lemma_info_response.dart index 69144696c..8fe34d7bc 100644 --- a/lib/pangea/repo/lemma_info/lemma_info_response.dart +++ b/lib/pangea/analytics/repo/lemma_info_response.dart @@ -1,4 +1,4 @@ -import 'package:fluffychat/pangea/models/content_feedback.dart'; +import 'package:fluffychat/pangea/events/models/content_feedback.dart'; class LemmaInfoResponse implements JsonSerializable { final List emoji; diff --git a/lib/pangea/utils/grammar/get_grammar_copy.dart b/lib/pangea/analytics/utils/get_grammar_copy.dart similarity index 99% rename from lib/pangea/utils/grammar/get_grammar_copy.dart rename to lib/pangea/analytics/utils/get_grammar_copy.dart index 33cb2d716..ecd4cc4c3 100644 --- a/lib/pangea/utils/grammar/get_grammar_copy.dart +++ b/lib/pangea/analytics/utils/get_grammar_copy.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; /// Used on morph constructs String? getGrammarCopy({ diff --git a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_bar.dart b/lib/pangea/analytics/widgets/analytics_summary/learning_progress_bar.dart similarity index 79% rename from lib/pangea/widgets/chat_list/analytics_summary/learning_progress_bar.dart rename to lib/pangea/analytics/widgets/analytics_summary/learning_progress_bar.dart index 74cbf315d..3eab58fa7 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_bar.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/learning_progress_bar.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar_details.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar_details.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LearningProgressBar extends StatelessWidget { diff --git a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics/widgets/analytics_summary/learning_progress_indicators.dart similarity index 88% rename from lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart rename to lib/pangea/analytics/widgets/analytics_summary/learning_progress_indicators.dart index 696a9df14..8570c89aa 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/learning_progress_indicators.dart @@ -5,17 +5,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/client_chooser_button.dart'; -import 'package:fluffychat/pangea/controllers/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/learning_progress_bar.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/learning_settings_button.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/level_badge.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/level_bar_popup.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/progress_indicator.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart'; +import 'package:fluffychat/pangea/analytics/controllers/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/learning_progress_bar.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/learning_settings_button.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/level_badge.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/level_bar_popup.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/progress_indicator.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// A summary of "My Analytics" shown at the top of the chat list diff --git a/lib/pangea/widgets/chat_list/analytics_summary/learning_settings_button.dart b/lib/pangea/analytics/widgets/analytics_summary/learning_settings_button.dart similarity index 95% rename from lib/pangea/widgets/chat_list/analytics_summary/learning_settings_button.dart rename to lib/pangea/analytics/widgets/analytics_summary/learning_settings_button.dart index 3eba99953..8c2870bad 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/learning_settings_button.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/learning_settings_button.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; /// A badge that represents one learning progress indicator (i.e., construct uses) class LearningSettingsButton extends StatelessWidget { diff --git a/lib/pangea/widgets/chat_list/analytics_summary/level_badge.dart b/lib/pangea/analytics/widgets/analytics_summary/level_badge.dart similarity index 92% rename from lib/pangea/widgets/chat_list/analytics_summary/level_badge.dart rename to lib/pangea/analytics/widgets/analytics_summary/level_badge.dart index 9643d75b4..8b8629e45 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/level_badge.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/level_badge.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/level_bar_popup.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/level_bar_popup.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; class LevelBadge extends StatelessWidget { final int level; diff --git a/lib/pangea/widgets/chat_list/analytics_summary/level_bar_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/level_bar_popup.dart similarity index 94% rename from lib/pangea/widgets/chat_list/analytics_summary/level_bar_popup.dart rename to lib/pangea/analytics/widgets/analytics_summary/level_bar_popup.dart index 88949e000..b4f03f293 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/level_bar_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/level_bar_popup.dart @@ -3,12 +3,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/learning_progress_bar.dart'; +import 'package:fluffychat/pangea/analytics/controllers/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/learning_progress_bar.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LevelBarPopup extends StatelessWidget { diff --git a/lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart similarity index 93% rename from lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart rename to lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart index b73d6313f..75f285c56 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_popup.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart'; import 'package:fluffychat/widgets/matrix.dart'; class MorphAnalyticsPopup extends StatefulWidget { diff --git a/lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart b/lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart similarity index 85% rename from lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart rename to lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart index 66cb57527..db180b060 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/morph_analytics_popup/morph_analytics_xp_tile.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; class ConstructUsesXPTile extends StatelessWidget { final ConstructUses constructUses; diff --git a/lib/pangea/widgets/chat_list/analytics_summary/progress_indicator.dart b/lib/pangea/analytics/widgets/analytics_summary/progress_indicator.dart similarity index 93% rename from lib/pangea/widgets/chat_list/analytics_summary/progress_indicator.dart rename to lib/pangea/analytics/widgets/analytics_summary/progress_indicator.dart index 5502f5a56..5bf71db1f 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/progress_indicator.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/progress_indicator.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; /// A badge that represents one learning progress indicator (i.e., construct uses) class ProgressIndicatorBadge extends StatelessWidget { diff --git a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart similarity index 85% rename from lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart rename to lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart index 66cb57527..db180b060 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/analytics_xp_tile.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; class ConstructUsesXPTile extends StatelessWidget { final ConstructUses constructUses; diff --git a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart similarity index 93% rename from lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart rename to lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart index f310bd9d0..2cfd91808 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart @@ -4,14 +4,14 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/analytics_constants.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/lemma_category_enum.dart'; -import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart'; +import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/lemma_category_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Displays vocab analytics, sorted into categories diff --git a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart similarity index 94% rename from lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart rename to lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart index 28893d24b..e966ea857 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart @@ -7,22 +7,22 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/constants/morph_categories_and_labels.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/enum/lemma_category_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/lemma.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_repo.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_request.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_response.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/word_audio_button.dart'; +import 'package:fluffychat/pangea/analytics/constants/morph_categories_and_labels.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/lemma_category_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/models/lemma.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_repo.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_audio_button.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/widgets/animations/gain_points.dart b/lib/pangea/analytics/widgets/gain_points.dart similarity index 92% rename from lib/pangea/widgets/animations/gain_points.dart rename to lib/pangea/analytics/widgets/gain_points.dart index d0c9a6b7d..0e2b09eac 100644 --- a/lib/pangea/widgets/animations/gain_points.dart +++ b/lib/pangea/analytics/widgets/gain_points.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; +import 'package:fluffychat/pangea/analytics/controllers/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; import 'package:fluffychat/widgets/matrix.dart'; class PointsGainedAnimation extends StatefulWidget { diff --git a/lib/pangea/widgets/animations/progress_bar/animated_level_dart.dart b/lib/pangea/analytics/widgets/progress_bar/animated_level_dart.dart similarity index 100% rename from lib/pangea/widgets/animations/progress_bar/animated_level_dart.dart rename to lib/pangea/analytics/widgets/progress_bar/animated_level_dart.dart diff --git a/lib/pangea/widgets/animations/progress_bar/level_bar.dart b/lib/pangea/analytics/widgets/progress_bar/level_bar.dart similarity index 85% rename from lib/pangea/widgets/animations/progress_bar/level_bar.dart rename to lib/pangea/analytics/widgets/progress_bar/level_bar.dart index e94d5ce6b..588223bf2 100644 --- a/lib/pangea/widgets/animations/progress_bar/level_bar.dart +++ b/lib/pangea/analytics/widgets/progress_bar/level_bar.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/animated_level_dart.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar_details.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/animated_level_dart.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar_details.dart'; class LevelBar extends StatefulWidget { final LevelBarDetails details; diff --git a/lib/pangea/widgets/animations/progress_bar/progress_bar.dart b/lib/pangea/analytics/widgets/progress_bar/progress_bar.dart similarity index 85% rename from lib/pangea/widgets/animations/progress_bar/progress_bar.dart rename to lib/pangea/analytics/widgets/progress_bar/progress_bar.dart index 9a78cb080..a8bda6fd3 100644 --- a/lib/pangea/widgets/animations/progress_bar/progress_bar.dart +++ b/lib/pangea/analytics/widgets/progress_bar/progress_bar.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/level_bar.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar_background.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar_details.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/level_bar.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar_background.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar_details.dart'; // Provide an order list of level indicators, each with it's color // and stream. Also provide an overall width and pointsPerLevel. diff --git a/lib/pangea/widgets/animations/progress_bar/progress_bar_background.dart b/lib/pangea/analytics/widgets/progress_bar/progress_bar_background.dart similarity index 86% rename from lib/pangea/widgets/animations/progress_bar/progress_bar_background.dart rename to lib/pangea/analytics/widgets/progress_bar/progress_bar_background.dart index 48498a179..f8effcca5 100644 --- a/lib/pangea/widgets/animations/progress_bar/progress_bar_background.dart +++ b/lib/pangea/analytics/widgets/progress_bar/progress_bar_background.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/widgets/animations/progress_bar/progress_bar_details.dart'; +import 'package:fluffychat/pangea/analytics/widgets/progress_bar/progress_bar_details.dart'; class ProgressBarBackground extends StatelessWidget { final ProgressBarDetails details; diff --git a/lib/pangea/widgets/animations/progress_bar/progress_bar_details.dart b/lib/pangea/analytics/widgets/progress_bar/progress_bar_details.dart similarity index 100% rename from lib/pangea/widgets/animations/progress_bar/progress_bar_details.dart rename to lib/pangea/analytics/widgets/progress_bar/progress_bar_details.dart diff --git a/lib/pangea/choreographer/widgets/text_loading_shimmer.dart b/lib/pangea/analytics/widgets/text_loading_shimmer.dart similarity index 100% rename from lib/pangea/choreographer/widgets/text_loading_shimmer.dart rename to lib/pangea/analytics/widgets/text_loading_shimmer.dart diff --git a/lib/pangea/utils/bot_name.dart b/lib/pangea/bot/utils/bot_name.dart similarity index 75% rename from lib/pangea/utils/bot_name.dart rename to lib/pangea/bot/utils/bot_name.dart index dc7c0da8f..490c12cd4 100644 --- a/lib/pangea/utils/bot_name.dart +++ b/lib/pangea/bot/utils/bot_name.dart @@ -1,4 +1,4 @@ -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; class BotName { static String get byEnvironment => diff --git a/lib/pangea/utils/bot_style.dart b/lib/pangea/bot/utils/bot_style.dart similarity index 93% rename from lib/pangea/utils/bot_style.dart rename to lib/pangea/bot/utils/bot_style.dart index 460a67d34..8007660cf 100644 --- a/lib/pangea/utils/bot_style.dart +++ b/lib/pangea/bot/utils/bot_style.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class BotStyle { static TextStyle text( diff --git a/lib/pangea/widgets/common/bot_face_svg.dart b/lib/pangea/bot/widgets/bot_face_svg.dart similarity index 100% rename from lib/pangea/widgets/common/bot_face_svg.dart rename to lib/pangea/bot/widgets/bot_face_svg.dart diff --git a/lib/pangea/widgets/chat/chat_floating_action_button.dart b/lib/pangea/chat/widgets/chat_floating_action_button.dart similarity index 97% rename from lib/pangea/widgets/chat/chat_floating_action_button.dart rename to lib/pangea/chat/widgets/chat_floating_action_button.dart index e6f272e86..3131995b3 100644 --- a/lib/pangea/widgets/chat/chat_floating_action_button.dart +++ b/lib/pangea/chat/widgets/chat_floating_action_button.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/choreographer/widgets/has_error_button.dart'; import 'package:fluffychat/pangea/choreographer/widgets/language_permissions_warning_buttons.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; class ChatFloatingActionButton extends StatefulWidget { final ChatController controller; diff --git a/lib/pangea/widgets/chat/chat_view_background.dart b/lib/pangea/chat/widgets/chat_view_background.dart similarity index 100% rename from lib/pangea/widgets/chat/chat_view_background.dart rename to lib/pangea/chat/widgets/chat_view_background.dart diff --git a/lib/pangea/widgets/chat/input_bar_wrapper.dart b/lib/pangea/chat/widgets/input_bar_wrapper.dart similarity index 94% rename from lib/pangea/widgets/chat/input_bar_wrapper.dart rename to lib/pangea/chat/widgets/input_bar_wrapper.dart index f9e78f100..bcf9a26be 100644 --- a/lib/pangea/widgets/chat/input_bar_wrapper.dart +++ b/lib/pangea/chat/widgets/input_bar_wrapper.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_input_row.dart'; -import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; class ChatInputRowWrapper extends StatefulWidget { final ChatController controller; diff --git a/lib/pangea/controllers/app_version_controller.dart b/lib/pangea/chat_list/utils/app_version_util.dart similarity index 95% rename from lib/pangea/controllers/app_version_controller.dart rename to lib/pangea/chat_list/utils/app_version_util.dart index 9d4e32bdb..baff4f4d8 100644 --- a/lib/pangea/controllers/app_version_controller.dart +++ b/lib/pangea/chat_list/utils/app_version_util.dart @@ -12,15 +12,15 @@ import 'package:universal_html/html.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/network/requests.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; -class AppVersionController { +class AppVersionUtil { static Future _getAppVersion( String accessToken, ) async { diff --git a/lib/pangea/utils/chat_list_handle_space_tap.dart b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart similarity index 95% rename from lib/pangea/utils/chat_list_handle_space_tap.dart rename to lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart index f0c56376e..0d1c7b397 100644 --- a/lib/pangea/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart @@ -7,12 +7,12 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'error_handler.dart'; +import '../../common/utils/error_handler.dart'; // ignore: curly_braces_in_flow_control_structures void chatListHandleSpaceTap( diff --git a/lib/pangea/utils/get_chat_list_item_subtitle.dart b/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart similarity index 92% rename from lib/pangea/utils/get_chat_list_item_subtitle.dart rename to lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart index eb9007389..c4142deba 100644 --- a/lib/pangea/utils/get_chat_list_item_subtitle.dart +++ b/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_token_text.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_token_text.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../utils/matrix_sdk_extensions/matrix_locals.dart'; +import '../../../utils/matrix_sdk_extensions/matrix_locals.dart'; class ChatListItemSubtitle extends StatelessWidget { final Event? event; diff --git a/lib/pangea/widgets/chat/chat_list_view_body_wrapper.dart b/lib/pangea/chat_list/widgets/chat_list_view_body_wrapper.dart similarity index 100% rename from lib/pangea/widgets/chat/chat_list_view_body_wrapper.dart rename to lib/pangea/chat_list/widgets/chat_list_view_body_wrapper.dart diff --git a/lib/pangea/widgets/chat_list/pangea_chat_list_header.dart b/lib/pangea/chat_list/widgets/pangea_chat_list_header.dart similarity index 97% rename from lib/pangea/widgets/chat_list/pangea_chat_list_header.dart rename to lib/pangea/chat_list/widgets/pangea_chat_list_header.dart index 9f8881586..c32174948 100644 --- a/lib/pangea/widgets/chat_list/pangea_chat_list_header.dart +++ b/lib/pangea/chat_list/widgets/pangea_chat_list_header.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; -import 'package:fluffychat/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart'; +import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/learning_progress_indicators.dart'; class PangeaChatListHeader extends StatelessWidget implements PreferredSizeWidget { diff --git a/lib/pangea/constants/bot_mode.dart b/lib/pangea/chat_settings/constants/bot_mode.dart similarity index 100% rename from lib/pangea/constants/bot_mode.dart rename to lib/pangea/chat_settings/constants/bot_mode.dart diff --git a/lib/pangea/constants/pangea_room_types.dart b/lib/pangea/chat_settings/constants/pangea_room_types.dart similarity index 100% rename from lib/pangea/constants/pangea_room_types.dart rename to lib/pangea/chat_settings/constants/pangea_room_types.dart diff --git a/lib/pangea/models/bot_options_model.dart b/lib/pangea/chat_settings/models/bot_options_model.dart similarity index 95% rename from lib/pangea/models/bot_options_model.dart rename to lib/pangea/chat_settings/models/bot_options_model.dart index e5595df1d..340dfc985 100644 --- a/lib/pangea/models/bot_options_model.dart +++ b/lib/pangea/chat_settings/models/bot_options_model.dart @@ -4,10 +4,10 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; class BotOptionsModel { int? languageLevel; diff --git a/lib/pangea/pages/chat_details/pangea_chat_details.dart b/lib/pangea/chat_settings/pages/pangea_chat_details.dart similarity index 97% rename from lib/pangea/pages/chat_details/pangea_chat_details.dart rename to lib/pangea/chat_settings/pages/pangea_chat_details.dart index f6ccfb3ff..8559eae19 100644 --- a/lib/pangea/pages/chat_details/pangea_chat_details.dart +++ b/lib/pangea/chat_settings/pages/pangea_chat_details.dart @@ -8,15 +8,15 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pages/chat_details/participant_list_item.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/pages/class_settings/class_name_header.dart'; -import 'package:fluffychat/pangea/pages/class_settings/p_class_widgets/class_details_toggle_add_students_tile.dart'; -import 'package:fluffychat/pangea/pages/class_settings/p_class_widgets/download_analytics_button.dart'; -import 'package:fluffychat/pangea/pages/class_settings/p_class_widgets/room_capacity_button.dart'; -import 'package:fluffychat/pangea/utils/download_chat.dart'; -import 'package:fluffychat/pangea/utils/download_file.dart'; -import 'package:fluffychat/pangea/widgets/chat/visibility_toggle.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_settings.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_chat.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_file.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/class_details_toggle_add_students_tile.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/class_name_header.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/download_analytics_button.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/room_capacity_button.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/visibility_toggle.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/url_launcher.dart'; diff --git a/lib/pangea/utils/download_chat.dart b/lib/pangea/chat_settings/utils/download_chat.dart similarity index 97% rename from lib/pangea/utils/download_chat.dart rename to lib/pangea/chat_settings/utils/download_chat.dart index a867700d1..3c750c7bd 100644 --- a/lib/pangea/utils/download_chat.dart +++ b/lib/pangea/chat_settings/utils/download_chat.dart @@ -11,10 +11,10 @@ import 'package:intl/intl.dart'; import 'package:matrix/matrix.dart'; import 'package:matrix/src/models/timeline_chunk.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/utils/download_file.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../models/choreo_record.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_file.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import '../../choreographer/models/choreo_record.dart'; Future downloadChat( Room room, diff --git a/lib/pangea/utils/download_file.dart b/lib/pangea/chat_settings/utils/download_file.dart similarity index 91% rename from lib/pangea/utils/download_file.dart rename to lib/pangea/chat_settings/utils/download_file.dart index 7431be6e0..86c6e4424 100644 --- a/lib/pangea/utils/download_file.dart +++ b/lib/pangea/chat_settings/utils/download_file.dart @@ -7,8 +7,8 @@ import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:universal_html/html.dart' as webfile; -import 'package:fluffychat/pangea/utils/download_chat.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_chat.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; enum DownloadType { txt, csv, xlsx } diff --git a/lib/pangea/utils/language_level_copy.dart b/lib/pangea/chat_settings/utils/language_level_copy.dart similarity index 100% rename from lib/pangea/utils/language_level_copy.dart rename to lib/pangea/chat_settings/utils/language_level_copy.dart diff --git a/lib/pangea/pages/class_settings/p_class_widgets/class_details_toggle_add_students_tile.dart b/lib/pangea/chat_settings/widgets/class_details_toggle_add_students_tile.dart similarity index 88% rename from lib/pangea/pages/class_settings/p_class_widgets/class_details_toggle_add_students_tile.dart rename to lib/pangea/chat_settings/widgets/class_details_toggle_add_students_tile.dart index f39142b1e..46f6f54a9 100644 --- a/lib/pangea/pages/class_settings/p_class_widgets/class_details_toggle_add_students_tile.dart +++ b/lib/pangea/chat_settings/widgets/class_details_toggle_add_students_tile.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/pages/class_settings/p_class_widgets/class_invitation_buttons.dart'; -import '../../../../pages/chat_details/chat_details.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/class_invitation_buttons.dart'; +import '../../../pages/chat_details/chat_details.dart'; class SpaceDetailsToggleAddStudentsTile extends StatelessWidget { const SpaceDetailsToggleAddStudentsTile({ diff --git a/lib/pangea/pages/class_settings/p_class_widgets/class_invitation_buttons.dart b/lib/pangea/chat_settings/widgets/class_invitation_buttons.dart similarity index 91% rename from lib/pangea/pages/class_settings/p_class_widgets/class_invitation_buttons.dart rename to lib/pangea/chat_settings/widgets/class_invitation_buttons.dart index a7f4bca9c..638722a63 100644 --- a/lib/pangea/pages/class_settings/p_class_widgets/class_invitation_buttons.dart +++ b/lib/pangea/chat_settings/widgets/class_invitation_buttons.dart @@ -6,11 +6,11 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/url_query_parameter_keys.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../../../utils/fluffy_share.dart'; +import '../../../utils/fluffy_share.dart'; class ClassInvitationButtons extends StatelessWidget { final String roomId; @@ -41,7 +41,7 @@ class ClassInvitationButtons extends StatelessWidget { final String initialUrl = kIsWeb ? html.window.origin! : Environment.frontendURL; FluffyShare.share( - "$initialUrl/#/join_with_link?${UrlQueryParameterKeys.classCode}=${room.classCode}", + "$initialUrl/#/join_with_link?${SpaceConstants.classCode}=${room.classCode}", context, ); }, @@ -49,7 +49,7 @@ class ClassInvitationButtons extends StatelessWidget { final copyCodeListTile = ListTile( title: Text( - "${L10n.of(context).copyClassCode}: ${room.classCode}", + "${L10n.of(context).copyClassCode}: ${room.classCode(context)}", style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -66,7 +66,7 @@ class ClassInvitationButtons extends StatelessWidget { onTap: () async { //PTODO-Lala: Standarize toast //PTODO - explore using Fluffyshare for this - await Clipboard.setData(ClipboardData(text: room.classCode)); + await Clipboard.setData(ClipboardData(text: room.classCode(context))); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(L10n.of(context).copiedToClipboard)), ); diff --git a/lib/pangea/pages/class_settings/class_name_header.dart b/lib/pangea/chat_settings/widgets/class_name_header.dart similarity index 97% rename from lib/pangea/pages/class_settings/class_name_header.dart rename to lib/pangea/chat_settings/widgets/class_name_header.dart index 63ad77ed3..aebc36555 100644 --- a/lib/pangea/pages/class_settings/class_name_header.dart +++ b/lib/pangea/chat_settings/widgets/class_name_header.dart @@ -6,7 +6,7 @@ import 'package:flutter/src/widgets/visibility.dart' as visible; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; class ClassNameHeader extends StatelessWidget { final Room room; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_conversation_zone.dart similarity index 100% rename from lib/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_conversation_zone.dart diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart similarity index 95% rename from lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart index ebf7cae7b..f7906baf4 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; class ConversationBotModeDynamicZone extends StatelessWidget { final String? mode; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_select.dart similarity index 95% rename from lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_select.dart index 3ca5f1be1..48290379b 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_select.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; class ConversationBotModeSelect extends StatelessWidget { final String? initialMode; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart similarity index 100% rename from lib/pangea/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart similarity index 93% rename from lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart index db0a8e602..1dcf44916 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart @@ -7,15 +7,15 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_settings_form.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConversationBotSettings extends StatefulWidget { diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_settings_form.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart similarity index 90% rename from lib/pangea/widgets/conversation_bot/conversation_bot_settings_form.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart index 9f90338be..6603eab77 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_settings_form.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; -import 'package:fluffychat/pangea/widgets/space/language_level_dropdown.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_select.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConversationBotSettingsForm extends StatelessWidget { diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart similarity index 97% rename from lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart index c24d5841c..1f04cf5dc 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; class ConversationBotGameMasterInstructionsInput extends StatelessWidget { final BotOptionsModel initialBotOptions; diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart similarity index 77% rename from lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart rename to lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart index aa004962e..08fc81375 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; -import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_text_adventure_game_master_instruction_input.dart'; // TODO check how this looks class ConversationBotTextAdventureZone extends StatelessWidget { diff --git a/lib/pangea/pages/class_settings/p_class_widgets/download_analytics_button.dart b/lib/pangea/chat_settings/widgets/download_analytics_button.dart similarity index 93% rename from lib/pangea/pages/class_settings/p_class_widgets/download_analytics_button.dart rename to lib/pangea/chat_settings/widgets/download_analytics_button.dart index 200a5249d..fb4d5863c 100644 --- a/lib/pangea/pages/class_settings/p_class_widgets/download_analytics_button.dart +++ b/lib/pangea/chat_settings/widgets/download_analytics_button.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/widgets/download_analytics_dialog.dart'; +import 'package:fluffychat/pangea/spaces/widgets/download_analytics_dialog.dart'; class DownloadAnalyticsButton extends StatelessWidget { final Room space; diff --git a/lib/pangea/widgets/space/language_level_dropdown.dart b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart similarity index 87% rename from lib/pangea/widgets/space/language_level_dropdown.dart rename to lib/pangea/chat_settings/widgets/language_level_dropdown.dart index 3723a23f5..74e8bea4c 100644 --- a/lib/pangea/widgets/space/language_level_dropdown.dart +++ b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/utils/language_level_copy.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/language_level_copy.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; class LanguageLevelDropdown extends StatelessWidget { final int? initialLevel; diff --git a/lib/pangea/pages/class_settings/p_class_widgets/room_capacity_button.dart b/lib/pangea/chat_settings/widgets/room_capacity_button.dart similarity index 99% rename from lib/pangea/pages/class_settings/p_class_widgets/room_capacity_button.dart rename to lib/pangea/chat_settings/widgets/room_capacity_button.dart index 71ddcae94..dee32b912 100644 --- a/lib/pangea/pages/class_settings/p_class_widgets/room_capacity_button.dart +++ b/lib/pangea/chat_settings/widgets/room_capacity_button.dart @@ -5,7 +5,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; class RoomCapacityButton extends StatefulWidget { diff --git a/lib/pangea/widgets/chat/visibility_toggle.dart b/lib/pangea/chat_settings/widgets/visibility_toggle.dart similarity index 100% rename from lib/pangea/widgets/chat/visibility_toggle.dart rename to lib/pangea/chat_settings/widgets/visibility_toggle.dart diff --git a/lib/pangea/constants/choreo_constants.dart b/lib/pangea/choreographer/constants/choreo_constants.dart similarity index 100% rename from lib/pangea/constants/choreo_constants.dart rename to lib/pangea/choreographer/constants/choreo_constants.dart diff --git a/lib/pangea/constants/match_rule_ids.dart b/lib/pangea/choreographer/constants/match_rule_ids.dart similarity index 100% rename from lib/pangea/constants/match_rule_ids.dart rename to lib/pangea/choreographer/constants/match_rule_ids.dart diff --git a/lib/pangea/choreographer/controllers/alternative_translator.dart b/lib/pangea/choreographer/controllers/alternative_translator.dart index 37aa67ab9..1e69f1e1e 100644 --- a/lib/pangea/choreographer/controllers/alternative_translator.dart +++ b/lib/pangea/choreographer/controllers/alternative_translator.dart @@ -5,9 +5,9 @@ import 'package:http/http.dart' as http; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; -import 'package:fluffychat/pangea/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../../repo/similarity_repo.dart'; +import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../repo/similarity_repo.dart'; class AlternativeTranslator { final Choreographer choreographer; diff --git a/lib/pangea/choreographer/controllers/choreographer.dart b/lib/pangea/choreographer/controllers/choreographer.dart index 7b2797395..5a36bd6cb 100644 --- a/lib/pangea/choreographer/controllers/choreographer.dart +++ b/lib/pangea/choreographer/controllers/choreographer.dart @@ -9,26 +9,26 @@ import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/choreographer/controllers/alternative_translator.dart'; import 'package:fluffychat/pangea/choreographer/controllers/igc_controller.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/enum/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/enum/edit_type.dart'; -import 'package:fluffychat/pangea/models/it_step.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/any_state_holder.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; +import 'package:fluffychat/pangea/choreographer/models/it_step.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; import '../../../widgets/matrix.dart'; -import '../../models/choreo_record.dart'; -import '../../models/language_model.dart'; -import '../../models/pangea_match_model.dart'; -import '../../widgets/igc/pangea_text_controller.dart'; +import '../../learning_settings/models/language_model.dart'; +import '../models/choreo_record.dart'; +import '../models/pangea_match_model.dart'; +import '../widgets/igc/pangea_text_controller.dart'; import 'error_service.dart'; import 'it_controller.dart'; diff --git a/lib/pangea/controllers/contextual_definition_controller.dart b/lib/pangea/choreographer/controllers/contextual_definition_controller.dart similarity index 91% rename from lib/pangea/controllers/contextual_definition_controller.dart rename to lib/pangea/choreographer/controllers/contextual_definition_controller.dart index ac3bfce66..a0622e957 100644 --- a/lib/pangea/controllers/contextual_definition_controller.dart +++ b/lib/pangea/choreographer/controllers/contextual_definition_controller.dart @@ -5,12 +5,12 @@ import 'package:flutter/foundation.dart'; import 'package:collection/collection.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../constants/model_keys.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; -import 'pangea_controller.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/controllers/pangea_controller.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; class ContextualDefinitionController { late PangeaController _pangeaController; diff --git a/lib/pangea/choreographer/controllers/error_service.dart b/lib/pangea/choreographer/controllers/error_service.dart index e2da70b97..94d1c83f3 100644 --- a/lib/pangea/choreographer/controllers/error_service.dart +++ b/lib/pangea/choreographer/controllers/error_service.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import '../../utils/error_handler.dart'; +import '../../common/utils/error_handler.dart'; enum ChoreoErrorType { unknown, diff --git a/lib/pangea/choreographer/controllers/igc_controller.dart b/lib/pangea/choreographer/controllers/igc_controller.dart index 8f4eabd13..3f33763cf 100644 --- a/lib/pangea/choreographer/controllers/igc_controller.dart +++ b/lib/pangea/choreographer/controllers/igc_controller.dart @@ -9,14 +9,14 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; import 'package:fluffychat/pangea/choreographer/controllers/span_data_controller.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/igc_text_data_model.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/repo/igc_repo.dart'; -import 'package:fluffychat/pangea/widgets/igc/span_card.dart'; -import '../../models/span_card_model.dart'; -import '../../utils/error_handler.dart'; -import '../../utils/overlay.dart'; +import 'package:fluffychat/pangea/choreographer/models/igc_text_data_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/repo/igc_repo.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/span_card.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import '../../common/utils/error_handler.dart'; +import '../../common/utils/overlay.dart'; +import '../models/span_card_model.dart'; class _IGCTextDataCacheItem { Future data; diff --git a/lib/pangea/choreographer/controllers/it_controller.dart b/lib/pangea/choreographer/controllers/it_controller.dart index ba59df787..4e33284f1 100644 --- a/lib/pangea/choreographer/controllers/it_controller.dart +++ b/lib/pangea/choreographer/controllers/it_controller.dart @@ -7,17 +7,17 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; -import 'package:fluffychat/pangea/constants/choreo_constants.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/enum/edit_type.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../../models/custom_input_translation_model.dart'; -import '../../models/it_response_model.dart'; -import '../../models/it_step.dart'; -import '../../repo/interactive_translation_repo.dart'; +import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import '../models/custom_input_translation_model.dart'; +import '../models/it_response_model.dart'; +import '../models/it_step.dart'; +import '../repo/interactive_translation_repo.dart'; import 'choreographer.dart'; class ITController { diff --git a/lib/pangea/controllers/it_feedback_controller.dart b/lib/pangea/choreographer/controllers/it_feedback_controller.dart similarity index 91% rename from lib/pangea/controllers/it_feedback_controller.dart rename to lib/pangea/choreographer/controllers/it_feedback_controller.dart index df229129b..ae39b7ffc 100644 --- a/lib/pangea/controllers/it_feedback_controller.dart +++ b/lib/pangea/choreographer/controllers/it_feedback_controller.dart @@ -5,12 +5,12 @@ import 'package:flutter/foundation.dart'; import 'package:collection/collection.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../constants/model_keys.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; -import 'pangea_controller.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/controllers/pangea_controller.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; class ITFeedbackController { late PangeaController _pangeaController; diff --git a/lib/pangea/choreographer/controllers/span_data_controller.dart b/lib/pangea/choreographer/controllers/span_data_controller.dart index 96c4177c5..8455f2730 100644 --- a/lib/pangea/choreographer/controllers/span_data_controller.dart +++ b/lib/pangea/choreographer/controllers/span_data_controller.dart @@ -4,9 +4,9 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/models/span_data.dart'; -import 'package:fluffychat/pangea/repo/span_data_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; +import 'package:fluffychat/pangea/choreographer/repo/span_data_repo.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class _SpanDetailsCacheItem { Future data; diff --git a/lib/pangea/controllers/word_net_controller.dart b/lib/pangea/choreographer/controllers/word_net_controller.dart similarity index 87% rename from lib/pangea/controllers/word_net_controller.dart rename to lib/pangea/choreographer/controllers/word_net_controller.dart index 418146c5a..e4989c966 100644 --- a/lib/pangea/controllers/word_net_controller.dart +++ b/lib/pangea/choreographer/controllers/word_net_controller.dart @@ -1,11 +1,11 @@ import 'package:collection/collection.dart'; import 'package:http/http.dart' as http; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/repo/word_repo.dart'; +import 'package:fluffychat/pangea/choreographer/repo/word_repo.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import '../../common/controllers/base_controller.dart'; +import '../../common/controllers/pangea_controller.dart'; import '../models/word_data_model.dart'; -import 'base_controller.dart'; -import 'pangea_controller.dart'; class WordController extends BaseController { late PangeaController _pangeaController; diff --git a/lib/pangea/enum/assistance_state_enum.dart b/lib/pangea/choreographer/enums/assistance_state_enum.dart similarity index 93% rename from lib/pangea/enum/assistance_state_enum.dart rename to lib/pangea/choreographer/enums/assistance_state_enum.dart index c6965d9e7..b15db2dd1 100644 --- a/lib/pangea/enum/assistance_state_enum.dart +++ b/lib/pangea/choreographer/enums/assistance_state_enum.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/colors.dart'; enum AssistanceState { noSub, @@ -27,7 +26,7 @@ extension AssistanceStateExtension on AssistanceState { case AssistanceState.fetching: return Theme.of(context).colorScheme.primary; case AssistanceState.fetched: - return PangeaColors.igcError; + return AppConfig.error; case AssistanceState.complete: return AppConfig.success; } diff --git a/lib/pangea/enum/edit_type.dart b/lib/pangea/choreographer/enums/edit_type.dart similarity index 100% rename from lib/pangea/enum/edit_type.dart rename to lib/pangea/choreographer/enums/edit_type.dart diff --git a/lib/pangea/enum/span_choice_type.dart b/lib/pangea/choreographer/enums/span_choice_type.dart similarity index 100% rename from lib/pangea/enum/span_choice_type.dart rename to lib/pangea/choreographer/enums/span_choice_type.dart diff --git a/lib/pangea/enum/span_data_type.dart b/lib/pangea/choreographer/enums/span_data_type.dart similarity index 100% rename from lib/pangea/enum/span_data_type.dart rename to lib/pangea/choreographer/enums/span_data_type.dart diff --git a/lib/pangea/enum/use_type.dart b/lib/pangea/choreographer/enums/use_type.dart similarity index 98% rename from lib/pangea/enum/use_type.dart rename to lib/pangea/choreographer/enums/use_type.dart index b394fdb51..52b3348cf 100644 --- a/lib/pangea/enum/use_type.dart +++ b/lib/pangea/choreographer/enums/use_type.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import '../utils/bot_style.dart'; +import '../../bot/utils/bot_style.dart'; enum UseType { wa, ta, ga, un } diff --git a/lib/pangea/matrix_event_wrappers/pangea_choreo_event.dart b/lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart similarity index 87% rename from lib/pangea/matrix_event_wrappers/pangea_choreo_event.dart rename to lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart index 67f591dc8..49b80e8b4 100644 --- a/lib/pangea/matrix_event_wrappers/pangea_choreo_event.dart +++ b/lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart @@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import '../../events/constants/pangea_event_types.dart'; import '../models/choreo_record.dart'; class ChoreoEvent { diff --git a/lib/pangea/models/choreo_record.dart b/lib/pangea/choreographer/models/choreo_record.dart similarity index 98% rename from lib/pangea/models/choreo_record.dart rename to lib/pangea/choreographer/models/choreo_record.dart index 7fa247d24..3d13d4450 100644 --- a/lib/pangea/models/choreo_record.dart +++ b/lib/pangea/choreographer/models/choreo_record.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; import 'it_step.dart'; /// this class lives within a [PangeaIGCEvent] diff --git a/lib/pangea/models/custom_input_translation_model.dart b/lib/pangea/choreographer/models/custom_input_translation_model.dart similarity index 90% rename from lib/pangea/models/custom_input_translation_model.dart rename to lib/pangea/choreographer/models/custom_input_translation_model.dart index ff0c339dc..c74eb53b4 100644 --- a/lib/pangea/models/custom_input_translation_model.dart +++ b/lib/pangea/choreographer/models/custom_input_translation_model.dart @@ -1,5 +1,5 @@ -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/models/it_response_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/it_response_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; class CustomInputRequestModel { String text; diff --git a/lib/pangea/models/igc_text_data_model.dart b/lib/pangea/choreographer/models/igc_text_data_model.dart similarity index 91% rename from lib/pangea/models/igc_text_data_model.dart rename to lib/pangea/choreographer/models/igc_text_data_model.dart index 7341fabc7..1f1f95372 100644 --- a/lib/pangea/models/igc_text_data_model.dart +++ b/lib/pangea/choreographer/models/igc_text_data_model.dart @@ -6,19 +6,19 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/language_detection_controller.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/span_card_model.dart'; -import 'package:fluffychat/pangea/models/span_data.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../constants/model_keys.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/span_card_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; +import 'package:fluffychat/pangea/choreographer/repo/language_detection_request.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import '../../common/constants/model_keys.dart'; // import 'package:language_tool/language_tool.dart'; class IGCTextData { - LanguageDetectionResponse detections; + LanguageDetectionRequest detections; String originalInput; String? fullTextCorrection; List tokens; @@ -44,15 +44,14 @@ class IGCTextData { factory IGCTextData.fromJson(Map json) { // changing this to allow for use of the LanguageDetectionResponse methods // TODO - change API after we're sure all clients are updated. not urgent. - final LanguageDetectionResponse detections = - json[_detectionsKey] is Iterable - ? LanguageDetectionResponse.fromJson({ - "detections": json[_detectionsKey], - "full_text": json["original_input"], - }) - : LanguageDetectionResponse.fromJson( - json[_detectionsKey] as Map, - ); + final LanguageDetectionRequest detections = json[_detectionsKey] is Iterable + ? LanguageDetectionRequest.fromJson({ + "detections": json[_detectionsKey], + "full_text": json["original_input"], + }) + : LanguageDetectionRequest.fromJson( + json[_detectionsKey] as Map, + ); return IGCTextData( tokens: (json[_tokensKey] as Iterable) @@ -98,7 +97,7 @@ class IGCTextData { }; /// if we haven't run IGC or IT or there are no matches, we use the highest validated detection - /// from [LanguageDetectionResponse.highestValidatedDetection] + /// from [LanguageDetectionRequest.highestValidatedDetection] /// if we have run igc/it and there are no matches, we can relax the threshold /// and use the highest confidence detection String get detectedLanguage { diff --git a/lib/pangea/models/it_response_model.dart b/lib/pangea/choreographer/models/it_response_model.dart similarity index 94% rename from lib/pangea/models/it_response_model.dart rename to lib/pangea/choreographer/models/it_response_model.dart index e4b647ef1..08c65a18f 100644 --- a/lib/pangea/models/it_response_model.dart +++ b/lib/pangea/choreographer/models/it_response_model.dart @@ -3,10 +3,9 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/choreo_constants.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/extensions/my_list_extension.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; class ITResponseModel { String fullTextTranslation; @@ -41,12 +40,13 @@ class ITResponseModel { .toList() .take(ChoreoConstants.numberOfITChoices) .toList() - .shuffleReturn() .cast() //can't do this on the backend because step translation can't filter them out .where((element) => element.inDictionary) .toList(); + interimCont.shuffle(); + return ITResponseModel( fullTextTranslation: json["full_text_translation"] ?? json["translation"], continuances: interimCont, diff --git a/lib/pangea/models/it_step.dart b/lib/pangea/choreographer/models/it_step.dart similarity index 100% rename from lib/pangea/models/it_step.dart rename to lib/pangea/choreographer/models/it_step.dart diff --git a/lib/pangea/models/language_detection_model.dart b/lib/pangea/choreographer/models/language_detection_model.dart similarity index 87% rename from lib/pangea/models/language_detection_model.dart rename to lib/pangea/choreographer/models/language_detection_model.dart index 7ed44868c..bb7b32b92 100644 --- a/lib/pangea/models/language_detection_model.dart +++ b/lib/pangea/choreographer/models/language_detection_model.dart @@ -1,4 +1,4 @@ -import 'package:fluffychat/pangea/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; class LanguageDetection { String langCode; diff --git a/lib/pangea/models/pangea_match_model.dart b/lib/pangea/choreographer/models/pangea_match_model.dart similarity index 96% rename from lib/pangea/models/pangea_match_model.dart rename to lib/pangea/choreographer/models/pangea_match_model.dart index 9c86c6dc2..a16f96f5d 100644 --- a/lib/pangea/models/pangea_match_model.dart +++ b/lib/pangea/choreographer/models/pangea_match_model.dart @@ -3,8 +3,8 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/enum/span_data_type.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import '../constants/match_rule_ids.dart'; import 'igc_text_data_model.dart'; import 'span_data.dart'; diff --git a/lib/pangea/models/span_card_model.dart b/lib/pangea/choreographer/models/span_card_model.dart similarity index 88% rename from lib/pangea/models/span_card_model.dart rename to lib/pangea/choreographer/models/span_card_model.dart index f74a14332..5d341f509 100644 --- a/lib/pangea/models/span_card_model.dart +++ b/lib/pangea/choreographer/models/span_card_model.dart @@ -1,6 +1,6 @@ import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class SpanCardModel { // IGCTextData igcTextData; diff --git a/lib/pangea/models/span_data.dart b/lib/pangea/choreographer/models/span_data.dart similarity index 95% rename from lib/pangea/models/span_data.dart rename to lib/pangea/choreographer/models/span_data.dart index a5d6168c7..279787fa6 100644 --- a/lib/pangea/models/span_data.dart +++ b/lib/pangea/choreographer/models/span_data.dart @@ -8,10 +8,10 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import '../enum/span_choice_type.dart'; -import '../enum/span_data_type.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import '../enums/span_choice_type.dart'; +import '../enums/span_data_type.dart'; class SpanData { SpanData({ diff --git a/lib/pangea/models/word_data_model.dart b/lib/pangea/choreographer/models/word_data_model.dart similarity index 97% rename from lib/pangea/models/word_data_model.dart rename to lib/pangea/choreographer/models/word_data_model.dart index 03b854475..add2f23cc 100644 --- a/lib/pangea/models/word_data_model.dart +++ b/lib/pangea/choreographer/models/word_data_model.dart @@ -2,8 +2,8 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/widgets/igc/word_data_card.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/word_data_card.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; class WordData { final String word; diff --git a/lib/pangea/repo/full_text_translation_repo.dart b/lib/pangea/choreographer/repo/full_text_translation_repo.dart similarity index 95% rename from lib/pangea/repo/full_text_translation_repo.dart rename to lib/pangea/choreographer/repo/full_text_translation_repo.dart index ded554839..a5eceb4a1 100644 --- a/lib/pangea/repo/full_text_translation_repo.dart +++ b/lib/pangea/choreographer/repo/full_text_translation_repo.dart @@ -5,10 +5,10 @@ import 'dart:convert'; import 'package:http/http.dart'; -import '../config/environment.dart'; -import '../constants/model_keys.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; +import '../../common/config/environment.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; class FullTextTranslationRepo { static final Map _cache = {}; diff --git a/lib/pangea/repo/igc_repo.dart b/lib/pangea/choreographer/repo/igc_repo.dart similarity index 86% rename from lib/pangea/repo/igc_repo.dart rename to lib/pangea/choreographer/repo/igc_repo.dart index aeaa57bfb..0293d279f 100644 --- a/lib/pangea/repo/igc_repo.dart +++ b/lib/pangea/choreographer/repo/igc_repo.dart @@ -2,18 +2,18 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/language_detection_controller.dart'; -import 'package:fluffychat/pangea/models/language_detection_model.dart'; -import 'package:fluffychat/pangea/models/lemma.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/repo/span_data_repo.dart'; -import '../constants/model_keys.dart'; +import 'package:fluffychat/pangea/analytics/models/lemma.dart'; +import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/repo/language_detection_request.dart'; +import 'package:fluffychat/pangea/choreographer/repo/span_data_repo.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; import '../models/igc_text_data_model.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; class IgcRepo { static Future getIGC( @@ -41,7 +41,7 @@ class IgcRepo { await Future.delayed(const Duration(seconds: 2)); final IGCTextData igcTextData = IGCTextData( - detections: LanguageDetectionResponse( + detections: LanguageDetectionRequest( detections: [LanguageDetection(langCode: "en", confidence: 0.99)], fullText: "This be a sample text", ), diff --git a/lib/pangea/repo/interactive_translation_repo.dart b/lib/pangea/choreographer/repo/interactive_translation_repo.dart similarity index 85% rename from lib/pangea/repo/interactive_translation_repo.dart rename to lib/pangea/choreographer/repo/interactive_translation_repo.dart index c80aeb338..64de559b5 100644 --- a/lib/pangea/repo/interactive_translation_repo.dart +++ b/lib/pangea/choreographer/repo/interactive_translation_repo.dart @@ -2,13 +2,13 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; import '../models/custom_input_translation_model.dart'; import '../models/it_response_model.dart'; -import '../models/system_choice_translation_model.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; +import 'system_choice_translation_model.dart'; class ITRepo { static Future customInputTranslate( diff --git a/lib/pangea/choreographer/repo/language_detection_request.dart b/lib/pangea/choreographer/repo/language_detection_request.dart new file mode 100644 index 000000000..ac1b057c1 --- /dev/null +++ b/lib/pangea/choreographer/repo/language_detection_request.dart @@ -0,0 +1,48 @@ +import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; + +class LanguageDetectionRequest { + List detections; + String fullText; + + LanguageDetectionRequest({ + required this.detections, + required this.fullText, + }); + + factory LanguageDetectionRequest.fromJson(Map json) { + return LanguageDetectionRequest( + detections: List.from( + (json['detections'] as Iterable).map( + (e) => LanguageDetection.fromJson(e), + ), + ), + fullText: json['full_text'], + ); + } + + Map toJson() { + return { + 'detections': detections.map((e) => e.toJson()).toList(), + 'full_text': fullText, + }; + } + + /// Return the highest confidence detection. + /// If there are no detections, the unknown language detection is returned. + LanguageDetection get highestConfidenceDetection { + detections.sort((a, b) => b.confidence.compareTo(a.confidence)); + return detections.firstOrNull ?? unknownLanguageDetection; + } + + static const double languageDetectionConfidenceThreshold = 0.95; + + /// Returns the highest validated detection based on the confidence threshold. + /// If the highest confidence detection is below the threshold, the unknown language + /// detection is returned. + LanguageDetection highestValidatedDetection({double? threshold}) => + highestConfidenceDetection.confidence >= + (threshold ?? languageDetectionConfidenceThreshold) + ? highestConfidenceDetection + : unknownLanguageDetection; +} diff --git a/lib/pangea/repo/similarity_repo.dart b/lib/pangea/choreographer/repo/similarity_repo.dart similarity index 94% rename from lib/pangea/repo/similarity_repo.dart rename to lib/pangea/choreographer/repo/similarity_repo.dart index 9b3786af8..9cc034846 100644 --- a/lib/pangea/repo/similarity_repo.dart +++ b/lib/pangea/choreographer/repo/similarity_repo.dart @@ -2,9 +2,9 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; class SimilarityRepo { static Future get({ diff --git a/lib/pangea/repo/span_data_repo.dart b/lib/pangea/choreographer/repo/span_data_repo.dart similarity index 90% rename from lib/pangea/repo/span_data_repo.dart rename to lib/pangea/choreographer/repo/span_data_repo.dart index 64c60465c..954a04e29 100644 --- a/lib/pangea/repo/span_data_repo.dart +++ b/lib/pangea/choreographer/repo/span_data_repo.dart @@ -3,13 +3,13 @@ import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/enum/span_choice_type.dart'; -import 'package:fluffychat/pangea/enum/span_data_type.dart'; -import 'package:fluffychat/pangea/models/span_data.dart'; -import '../constants/model_keys.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; +import 'package:fluffychat/pangea/choreographer/enums/span_choice_type.dart'; +import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; +import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; class SpanDataRepo { static Future getSpanDetails( diff --git a/lib/pangea/models/system_choice_translation_model.dart b/lib/pangea/choreographer/repo/system_choice_translation_model.dart similarity index 96% rename from lib/pangea/models/system_choice_translation_model.dart rename to lib/pangea/choreographer/repo/system_choice_translation_model.dart index 6914044d3..fffffd42f 100644 --- a/lib/pangea/models/system_choice_translation_model.dart +++ b/lib/pangea/choreographer/repo/system_choice_translation_model.dart @@ -1,4 +1,4 @@ -import '../constants/model_keys.dart'; +import '../../common/constants/model_keys.dart'; class SystemChoiceRequestModel { String translationId; diff --git a/lib/pangea/repo/word_repo.dart b/lib/pangea/choreographer/repo/word_repo.dart similarity index 81% rename from lib/pangea/repo/word_repo.dart rename to lib/pangea/choreographer/repo/word_repo.dart index 399c620dd..ebe426d52 100644 --- a/lib/pangea/repo/word_repo.dart +++ b/lib/pangea/choreographer/repo/word_repo.dart @@ -2,11 +2,11 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import '../constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import '../../common/constants/model_keys.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; import '../models/word_data_model.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; class WordRepo { static Future getWordNetData({ diff --git a/lib/pangea/choreographer/route_type.dart b/lib/pangea/choreographer/route_type.dart deleted file mode 100644 index 0abc175e0..000000000 --- a/lib/pangea/choreographer/route_type.dart +++ /dev/null @@ -1,5 +0,0 @@ -class ITState { - static const String loading = 'loading'; - static const String choices = 'choices'; - static const String error = 'error'; -} diff --git a/lib/pangea/utils/match_copy.dart b/lib/pangea/choreographer/utils/match_copy.dart similarity index 97% rename from lib/pangea/utils/match_copy.dart rename to lib/pangea/choreographer/utils/match_copy.dart index 534774092..f1f7f08cf 100644 --- a/lib/pangea/utils/match_copy.dart +++ b/lib/pangea/choreographer/utils/match_copy.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/span_data_type.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../constants/match_rule_ids.dart'; import '../models/pangea_match_model.dart'; diff --git a/lib/pangea/choreographer/widgets/choice_array.dart b/lib/pangea/choreographer/widgets/choice_array.dart index 8f94ab773..492e8ed28 100644 --- a/lib/pangea/choreographer/widgets/choice_array.dart +++ b/lib/pangea/choreographer/widgets/choice_array.dart @@ -7,8 +7,8 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import '../../utils/bot_style.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import '../../bot/utils/bot_style.dart'; import 'it_shimmer.dart'; typedef ChoiceCallback = void Function(String value, int index); diff --git a/lib/pangea/choreographer/widgets/counters.dart b/lib/pangea/choreographer/widgets/counters.dart deleted file mode 100644 index d35c7419e..000000000 --- a/lib/pangea/choreographer/widgets/counters.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/pangea/constants/choreo_constants.dart'; -import '../../../config/app_config.dart'; - -class Counter extends StatelessWidget { - final int count; - final String label; - final Color color; - const Counter({ - super.key, - required this.count, - required this.label, - required this.color, - }); - - @override - Widget build(BuildContext context) { - return Tooltip( - message: label, - // textStyle: BotStyle.text(context, setColor: false), - child: Container( - padding: const EdgeInsets.all(4.0), - decoration: BoxDecoration( - color: color, - borderRadius: BorderRadius.circular(50.0), - ), - child: Column( - children: [ - Text( - count.toString(), - style: const TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ); - } -} - -class CounterDisplay extends StatelessWidget { - final int correct; - final int incorrect; - final int yellow; - final int custom; - const CounterDisplay({ - super.key, - required this.correct, - required this.incorrect, - required this.yellow, - required this.custom, - }); - - @override - Widget build(BuildContext context) { - return Row( - children: [ - Counter( - count: custom, - label: L10n.of(context).customInputFeedbackChoice, - // color: Theme.of(context).brightness == Brightness.dark - // ? AppConfig.primaryColorLight - // : AppConfig.primaryColor, - color: AppConfig.primaryColor, - ), - Counter( - count: correct, - label: L10n.of(context).greenFeedback, - color: ChoreoConstants.green, - ), - Counter( - color: ChoreoConstants.yellow, - label: L10n.of(context).yellowFeedback, - count: yellow, - ), - Counter( - count: incorrect, - label: L10n.of(context).redFeedback, - color: ChoreoConstants.red, - ), - ], - ); - } -} diff --git a/lib/pangea/widgets/igc/card_error_widget.dart b/lib/pangea/choreographer/widgets/igc/card_error_widget.dart similarity index 82% rename from lib/pangea/widgets/igc/card_error_widget.dart rename to lib/pangea/choreographer/widgets/igc/card_error_widget.dart index 58b1e1774..54556a7ca 100644 --- a/lib/pangea/widgets/igc/card_error_widget.dart +++ b/lib/pangea/choreographer/widgets/igc/card_error_widget.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_header.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class CardErrorWidget extends StatelessWidget { final Object error; diff --git a/lib/pangea/widgets/igc/card_header.dart b/lib/pangea/choreographer/widgets/igc/card_header.dart similarity index 93% rename from lib/pangea/widgets/igc/card_header.dart rename to lib/pangea/choreographer/widgets/igc/card_header.dart index 152f2910d..791c05c0d 100644 --- a/lib/pangea/widgets/igc/card_header.dart +++ b/lib/pangea/choreographer/widgets/igc/card_header.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../common/bot_face_svg.dart'; +import '../../../bot/widgets/bot_face_svg.dart'; class CardHeader extends StatelessWidget { const CardHeader({ diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/choreographer/widgets/igc/pangea_rich_text.dart similarity index 93% rename from lib/pangea/widgets/igc/pangea_rich_text.dart rename to lib/pangea/choreographer/widgets/igc/pangea_rich_text.dart index f08f2bf65..03ff38c76 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/choreographer/widgets/igc/pangea_rich_text.dart @@ -8,13 +8,13 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_toolbar_selection_area.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_toolbar_selection_area.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../models/pangea_match_model.dart'; diff --git a/lib/pangea/widgets/igc/pangea_text_controller.dart b/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart similarity index 90% rename from lib/pangea/widgets/igc/pangea_text_controller.dart rename to lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart index 70eff4bb5..437568e15 100644 --- a/lib/pangea/widgets/igc/pangea_text_controller.dart +++ b/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart @@ -3,21 +3,19 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/models/igc_text_data_model.dart'; -import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart'; -import 'package:fluffychat/pangea/widgets/igc/span_card.dart'; -import '../../choreographer/controllers/choreographer.dart'; -import '../../enum/edit_type.dart'; +import 'package:fluffychat/pangea/choreographer/models/igc_text_data_model.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/span_card.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import '../../../common/utils/overlay.dart'; +import '../../controllers/choreographer.dart'; +import '../../enums/edit_type.dart'; import '../../models/span_card_model.dart'; -import '../../models/widget_measurement.dart'; -import '../../utils/overlay.dart'; class PangeaTextController extends TextEditingController { Choreographer choreographer; EditType editType = EditType.keyboard; - WidgetMeasurements? measurements; PangeaTextController({ String? text, required this.choreographer, @@ -36,10 +34,6 @@ class PangeaTextController extends TextEditingController { this.text = text; } - void onBarSizeChange(Size? size, Offset? position, String? uid) { - measurements = WidgetMeasurements(position: position, size: size, uid: uid); - } - void onInputTap(BuildContext context, {required FocusNode fNode}) { fNode.requestFocus(); forceKeepOpen = true; diff --git a/lib/pangea/widgets/igc/paywall_card.dart b/lib/pangea/choreographer/widgets/igc/paywall_card.dart similarity index 93% rename from lib/pangea/widgets/igc/paywall_card.dart rename to lib/pangea/choreographer/widgets/igc/paywall_card.dart index b7e1a2517..4ccee5074 100644 --- a/lib/pangea/widgets/igc/paywall_card.dart +++ b/lib/pangea/choreographer/widgets/igc/paywall_card.dart @@ -4,9 +4,9 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_header.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; import 'package:fluffychat/widgets/matrix.dart'; class PaywallCard extends StatelessWidget { diff --git a/lib/pangea/widgets/igc/span_card.dart b/lib/pangea/choreographer/widgets/igc/span_card.dart similarity index 94% rename from lib/pangea/widgets/igc/span_card.dart rename to lib/pangea/choreographer/widgets/igc/span_card.dart index 10c5a4382..9d3b70c50 100644 --- a/lib/pangea/widgets/igc/span_card.dart +++ b/lib/pangea/choreographer/widgets/igc/span_card.dart @@ -6,22 +6,22 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/enum/span_data_type.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/span_data.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/match_copy.dart'; -import 'package:fluffychat/pangea/widgets/animations/gain_points.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; -import '../../../widgets/matrix.dart'; -import '../../choreographer/widgets/choice_array.dart'; -import '../../controllers/pangea_controller.dart'; -import '../../enum/span_choice_type.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/widgets/gain_points.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; +import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; +import 'package:fluffychat/pangea/choreographer/utils/match_copy.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import '../../../../widgets/matrix.dart'; +import '../../../bot/widgets/bot_face_svg.dart'; +import '../../../common/controllers/pangea_controller.dart'; +import '../../enums/span_choice_type.dart'; import '../../models/span_card_model.dart'; -import '../common/bot_face_svg.dart'; +import '../choice_array.dart'; import 'card_header.dart'; import 'why_button.dart'; diff --git a/lib/pangea/widgets/igc/why_button.dart b/lib/pangea/choreographer/widgets/igc/why_button.dart similarity index 97% rename from lib/pangea/widgets/igc/why_button.dart rename to lib/pangea/choreographer/widgets/igc/why_button.dart index d0ef24cf0..0e2e08de7 100644 --- a/lib/pangea/widgets/igc/why_button.dart +++ b/lib/pangea/choreographer/widgets/igc/why_button.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import '../../../config/app_config.dart'; +import '../../../../config/app_config.dart'; class WhyButton extends StatelessWidget { const WhyButton({ diff --git a/lib/pangea/widgets/igc/word_data_card.dart b/lib/pangea/choreographer/widgets/igc/word_data_card.dart similarity index 94% rename from lib/pangea/widgets/igc/word_data_card.dart rename to lib/pangea/choreographer/widgets/igc/word_data_card.dart index fc2d55646..eec832d87 100644 --- a/lib/pangea/widgets/igc/word_data_card.dart +++ b/lib/pangea/choreographer/widgets/igc/word_data_card.dart @@ -8,17 +8,17 @@ import 'package:http/http.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/contextual_definition_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/choreographer/controllers/contextual_definition_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import '../../../learning_settings/widgets/flag.dart'; import '../../models/word_data_model.dart'; -import '../flag.dart'; import 'card_error_widget.dart'; class WordDataCard extends StatefulWidget { diff --git a/lib/pangea/choreographer/widgets/it_bar.dart b/lib/pangea/choreographer/widgets/it_bar.dart index d5345f61b..fe862e442 100644 --- a/lib/pangea/choreographer/widgets/it_bar.dart +++ b/lib/pangea/choreographer/widgets/it_bar.dart @@ -4,24 +4,24 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/widgets/gain_points.dart'; +import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/controllers/it_controller.dart'; import 'package:fluffychat/pangea/choreographer/widgets/it_bar_buttons.dart'; import 'package:fluffychat/pangea/choreographer/widgets/it_feedback_card.dart'; import 'package:fluffychat/pangea/choreographer/widgets/translation_finished_flow.dart'; -import 'package:fluffychat/pangea/constants/choreo_constants.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/animations/gain_points.dart'; -import '../../controllers/it_feedback_controller.dart'; -import '../../models/it_response_model.dart'; -import '../../utils/overlay.dart'; -import '../../widgets/igc/word_data_card.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import '../../common/utils/overlay.dart'; +import '../controllers/it_feedback_controller.dart'; +import '../models/it_response_model.dart'; import 'choice_array.dart'; +import 'igc/word_data_card.dart'; class ITBar extends StatefulWidget { final Choreographer choreographer; diff --git a/lib/pangea/choreographer/widgets/it_bar_buttons.dart b/lib/pangea/choreographer/widgets/it_bar_buttons.dart index ae0fdefaf..aed86a4e1 100644 --- a/lib/pangea/choreographer/widgets/it_bar_buttons.dart +++ b/lib/pangea/choreographer/widgets/it_bar_buttons.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../widgets/common/bot_face_svg.dart'; +import '../../bot/widgets/bot_face_svg.dart'; import '../controllers/choreographer.dart'; import '../controllers/it_controller.dart'; diff --git a/lib/pangea/choreographer/widgets/it_feedback_card.dart b/lib/pangea/choreographer/widgets/it_feedback_card.dart index b4a91b09e..b4e63692e 100644 --- a/lib/pangea/choreographer/widgets/it_feedback_card.dart +++ b/lib/pangea/choreographer/widgets/it_feedback_card.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/repo/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; import '../../../config/app_config.dart'; import '../../../widgets/matrix.dart'; -import '../../controllers/it_feedback_controller.dart'; -import '../../controllers/pangea_controller.dart'; -import '../../utils/bot_style.dart'; -import '../../widgets/igc/card_error_widget.dart'; +import '../../bot/utils/bot_style.dart'; +import '../../common/controllers/pangea_controller.dart'; +import '../controllers/it_feedback_controller.dart'; +import 'igc/card_error_widget.dart'; class ITFeedbackCard extends StatefulWidget { final ITFeedbackRequestModel req; diff --git a/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart b/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart index e80859065..cdbad2fb8 100644 --- a/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart +++ b/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart @@ -5,14 +5,11 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../../../widgets/matrix.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; class ErrorCopy { final String title; @@ -81,42 +78,6 @@ class LanguagePermissionsButtons extends StatelessWidget { ); return null; } - final Room? room = Matrix.of(context).client.getRoomById(roomID!); - - final bool itDisabledByClass = choreographer - .pangeaController.permissionsController - .isToolDisabledByClass(ToolSetting.interactiveTranslator, room); - final bool igcDisabledByClass = choreographer - .pangeaController.permissionsController - .isToolDisabledByClass(ToolSetting.interactiveGrammar, room); - - if (itDisabledByClass && igcDisabledByClass) { - return ErrorCopy( - L10n.of(context).errorDisableLanguageAssistanceClassDesc, - ); - } - - if (itDisabledByClass) { - if (igcDisabled) { - return ErrorCopy( - "{L10n.of(context).errorDisableITClassDesc} ${L10n.of(context).errorDisableIGC}", - " ${L10n.of(context).errorDisableIGCUserDesc}", - ); - } else { - return ErrorCopy(L10n.of(context).errorDisableITClassDesc); - } - } - - if (igcDisabledByClass) { - if (itDisabled) { - return ErrorCopy( - "${L10n.of(context).errorDisableIGCClassDesc} ${L10n.of(context).errorDisableIT}", - " ${L10n.of(context).errorDisableITUserDesc}", - ); - } else { - return ErrorCopy(L10n.of(context).errorDisableIGCClassDesc); - } - } if (igcDisabled && itDisabled) { return ErrorCopy( diff --git a/lib/pangea/choreographer/widgets/send_button.dart b/lib/pangea/choreographer/widgets/send_button.dart index 5abeab51e..7c3088255 100644 --- a/lib/pangea/choreographer/widgets/send_button.dart +++ b/lib/pangea/choreographer/widgets/send_button.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; import '../../../pages/chat/chat.dart'; class ChoreographerSendButton extends StatefulWidget { diff --git a/lib/pangea/choreographer/widgets/start_igc_button.dart b/lib/pangea/choreographer/widgets/start_igc_button.dart index 9daeeacd9..b29753276 100644 --- a/lib/pangea/choreographer/widgets/start_igc_button.dart +++ b/lib/pangea/choreographer/widgets/start_igc_button.dart @@ -3,10 +3,10 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/enum/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/overlay.dart'; -import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import '../../../pages/chat/chat.dart'; class StartIGCButton extends StatefulWidget { diff --git a/lib/pangea/choreographer/widgets/translation_finished_flow.dart b/lib/pangea/choreographer/widgets/translation_finished_flow.dart index 0c4c256be..e5561337c 100644 --- a/lib/pangea/choreographer/widgets/translation_finished_flow.dart +++ b/lib/pangea/choreographer/widgets/translation_finished_flow.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import '../../utils/bot_style.dart'; -import '../../utils/error_handler.dart'; +import '../../bot/utils/bot_style.dart'; +import '../../common/utils/error_handler.dart'; import '../controllers/it_controller.dart'; import 'choice_array.dart'; diff --git a/lib/pangea/config/environment.dart b/lib/pangea/common/config/environment.dart similarity index 100% rename from lib/pangea/config/environment.dart rename to lib/pangea/common/config/environment.dart diff --git a/lib/pangea/constants/local.key.dart b/lib/pangea/common/constants/local.key.dart similarity index 100% rename from lib/pangea/constants/local.key.dart rename to lib/pangea/common/constants/local.key.dart diff --git a/lib/pangea/constants/model_keys.dart b/lib/pangea/common/constants/model_keys.dart similarity index 100% rename from lib/pangea/constants/model_keys.dart rename to lib/pangea/common/constants/model_keys.dart diff --git a/lib/pangea/controllers/base_controller.dart b/lib/pangea/common/controllers/base_controller.dart similarity index 100% rename from lib/pangea/controllers/base_controller.dart rename to lib/pangea/common/controllers/base_controller.dart diff --git a/lib/pangea/controllers/pangea_controller.dart b/lib/pangea/common/controllers/pangea_controller.dart similarity index 88% rename from lib/pangea/controllers/pangea_controller.dart rename to lib/pangea/common/controllers/pangea_controller.dart index 01fbef528..6a49117f5 100644 --- a/lib/pangea/controllers/pangea_controller.dart +++ b/lib/pangea/common/controllers/pangea_controller.dart @@ -7,34 +7,33 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; -import 'package:fluffychat/pangea/constants/class_default_values.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/controllers/class_controller.dart'; -import 'package:fluffychat/pangea/controllers/contextual_definition_controller.dart'; -import 'package:fluffychat/pangea/controllers/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/controllers/language_controller.dart'; -import 'package:fluffychat/pangea/controllers/language_detection_controller.dart'; -import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -import 'package:fluffychat/pangea/controllers/message_data_controller.dart'; -import 'package:fluffychat/pangea/controllers/permissions_controller.dart'; -import 'package:fluffychat/pangea/controllers/practice_activity_record_controller.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/controllers/speech_to_text_controller.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/controllers/user_controller.dart'; -import 'package:fluffychat/pangea/controllers/word_net_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/analytics/controllers/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/choreographer/controllers/contextual_definition_controller.dart'; +import 'package:fluffychat/pangea/choreographer/controllers/word_net_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/controllers/message_data_controller.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/guard/p_vguard.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/controllers/language_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/controllers/space_controller.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/practice_activity_record_controller.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/speech_to_text_controller.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/user/controllers/permissions_controller.dart'; +import 'package:fluffychat/pangea/user/controllers/user_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../config/app_config.dart'; +import '../../../config/app_config.dart'; +import '../../choreographer/controllers/it_feedback_controller.dart'; import '../utils/firebase_analytics.dart'; import '../utils/p_store.dart'; -import 'it_feedback_controller.dart'; class PangeaController { ///pangeaControllers @@ -53,7 +52,6 @@ class PangeaController { late SubscriptionController subscriptionController; late TextToSpeechController textToSpeech; late SpeechToTextController speechToText; - late LanguageDetectionController languageDetection; late PracticeActivityRecordController activityRecordController; ///store Services @@ -84,7 +82,6 @@ class PangeaController { putAnalytics.initialize(); getAnalytics.initialize(); subscriptionController.initialize(); - classController.fixClassPowerLevels(); startChatWithBotIfNotPresent(); inviteBotToExistingSpaces(); @@ -108,7 +105,6 @@ class PangeaController { itFeedback = ITFeedbackController(this); textToSpeech = TextToSpeechController(this); speechToText = SpeechToTextController(this); - languageDetection = LanguageDetectionController(this); activityRecordController = PracticeActivityRecordController(); PAuthGaurd.pController = this; } @@ -349,7 +345,7 @@ class PangeaController { final List spaces = matrixState.client.rooms.where((room) => room.isSpace).toList(); for (final Room space in spaces) { - if (space.ownPowerLevel < ClassDefaultValues.powerLevelOfAdmin || + if (space.ownPowerLevel < SpaceConstants.powerLevelOfAdmin || !space.canInvite) { continue; } diff --git a/lib/pangea/network/requests.dart b/lib/pangea/common/network/requests.dart similarity index 100% rename from lib/pangea/network/requests.dart rename to lib/pangea/common/network/requests.dart diff --git a/lib/pangea/network/urls.dart b/lib/pangea/common/network/urls.dart similarity index 97% rename from lib/pangea/network/urls.dart rename to lib/pangea/common/network/urls.dart index 76ac4d4d5..61382524d 100644 --- a/lib/pangea/network/urls.dart +++ b/lib/pangea/common/network/urls.dart @@ -1,6 +1,6 @@ //TODO move baseAPI addition to request function -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; /// autodocs /// https://api.staging.pangea.chat/choreo/docs diff --git a/lib/pangea/utils/any_state_holder.dart b/lib/pangea/common/utils/any_state_holder.dart similarity index 97% rename from lib/pangea/utils/any_state_holder.dart rename to lib/pangea/common/utils/any_state_holder.dart index 1bbc056d6..f9e3f4d97 100644 --- a/lib/pangea/utils/any_state_holder.dart +++ b/lib/pangea/common/utils/any_state_holder.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class PangeaAnyState { final Map _layerLinkAndKeys = {}; diff --git a/lib/pangea/utils/error_handler.dart b/lib/pangea/common/utils/error_handler.dart similarity index 98% rename from lib/pangea/utils/error_handler.dart rename to lib/pangea/common/utils/error_handler.dart index 90651d18d..f1975af1b 100644 --- a/lib/pangea/utils/error_handler.dart +++ b/lib/pangea/common/utils/error_handler.dart @@ -7,7 +7,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/utils/platform_infos.dart'; class PangeaWarningError implements Exception { diff --git a/lib/pangea/utils/firebase_analytics.dart b/lib/pangea/common/utils/firebase_analytics.dart similarity index 96% rename from lib/pangea/utils/firebase_analytics.dart rename to lib/pangea/common/utils/firebase_analytics.dart index a6dd4ef98..c6c9397b1 100644 --- a/lib/pangea/utils/firebase_analytics.dart +++ b/lib/pangea/common/utils/firebase_analytics.dart @@ -3,8 +3,8 @@ import 'package:flutter/widgets.dart'; import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_core/firebase_core.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import '../../config/firebase_options.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import '../../../config/firebase_options.dart'; // PageRoute import diff --git a/lib/pangea/utils/overlay.dart b/lib/pangea/common/utils/overlay.dart similarity index 98% rename from lib/pangea/utils/overlay.dart rename to lib/pangea/common/utils/overlay.dart index 1352bd37f..ef538a745 100644 --- a/lib/pangea/utils/overlay.dart +++ b/lib/pangea/common/utils/overlay.dart @@ -5,10 +5,10 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/any_state_holder.dart'; -import 'package:fluffychat/pangea/widgets/common_widgets/overlay_container.dart'; -import '../../config/themes.dart'; -import '../../widgets/matrix.dart'; +import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; +import 'package:fluffychat/pangea/common/widgets/overlay_container.dart'; +import '../../../config/themes.dart'; +import '../../../widgets/matrix.dart'; import 'error_handler.dart'; enum OverlayPositionEnum { diff --git a/lib/pangea/utils/p_store.dart b/lib/pangea/common/utils/p_store.dart similarity index 97% rename from lib/pangea/utils/p_store.dart rename to lib/pangea/common/utils/p_store.dart index 1048fcb3d..a45284bb9 100644 --- a/lib/pangea/utils/p_store.dart +++ b/lib/pangea/common/utils/p_store.dart @@ -1,7 +1,7 @@ import 'package:get_storage/get_storage.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; /// Utility to save and read data both in the matrix profile (this is the default /// behavior) and in the local storage (local needs to be specificied). An diff --git a/lib/pangea/utils/play_click_sound.dart b/lib/pangea/common/utils/play_click_sound.dart similarity index 100% rename from lib/pangea/utils/play_click_sound.dart rename to lib/pangea/common/utils/play_click_sound.dart diff --git a/lib/pangea/widgets/common_widgets/overlay_container.dart b/lib/pangea/common/widgets/overlay_container.dart similarity index 100% rename from lib/pangea/widgets/common_widgets/overlay_container.dart rename to lib/pangea/common/widgets/overlay_container.dart diff --git a/lib/pangea/widgets/common/pangea_logo_svg.dart b/lib/pangea/common/widgets/pangea_logo_svg.dart similarity index 100% rename from lib/pangea/widgets/common/pangea_logo_svg.dart rename to lib/pangea/common/widgets/pangea_logo_svg.dart diff --git a/lib/pangea/widgets/pressable_button.dart b/lib/pangea/common/widgets/pressable_button.dart similarity index 98% rename from lib/pangea/widgets/pressable_button.dart rename to lib/pangea/common/widgets/pressable_button.dart index 0f16e4c27..41928dd7e 100644 --- a/lib/pangea/widgets/pressable_button.dart +++ b/lib/pangea/common/widgets/pressable_button.dart @@ -4,7 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:fluffychat/pangea/utils/play_click_sound.dart'; +import 'package:fluffychat/pangea/common/utils/play_click_sound.dart'; class PressableButton extends StatefulWidget { final BorderRadius borderRadius; diff --git a/lib/pangea/config/colors.dart b/lib/pangea/config/colors.dart deleted file mode 100644 index 43a3f2e23..000000000 --- a/lib/pangea/config/colors.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -class ChoreoColor { - static Color containerBG(BuildContext context) => - Theme.of(context).scaffoldBackgroundColor; - static Color textColor(BuildContext context) => - isLightMode(context) ? Colors.black : Colors.white; - static Color disabled(context) => const Color.fromARGB(255, 211, 211, 211); - static Color removeButtonColor(context) => - Theme.of(context).colorScheme.primary; - static bool isLightMode(BuildContext context) => - Theme.of(context).brightness == Brightness.light ? true : false; -} diff --git a/lib/pangea/constants/class_code_constants.dart b/lib/pangea/constants/class_code_constants.dart deleted file mode 100644 index 6dd35c2d4..000000000 --- a/lib/pangea/constants/class_code_constants.dart +++ /dev/null @@ -1 +0,0 @@ -const String noClassCode = 'No class code!'; diff --git a/lib/pangea/constants/class_default_values.dart b/lib/pangea/constants/class_default_values.dart deleted file mode 100644 index 97522ca4b..000000000 --- a/lib/pangea/constants/class_default_values.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../enum/time_span.dart'; - -class ClassDefaultValues { - static const pangeaClassRoomIdDefault = "PANGEA_CLASS_ROOM_ID_DEFAULT"; - static const powerLevelOfAdmin = 100; - static const languageToolPermissions = 1; - static const minutesDelayToUpdateMyAnalytics = -1; - static const minutesDelayToMakeNewChartAnalytics = 1; - static const maxClassName = 40; - static const defaultDominantLanguage = "en"; - static const defaultTargetLanguage = "es"; - static const defaultTimeSpan = TimeSpan.month; -} diff --git a/lib/pangea/constants/colors.dart b/lib/pangea/constants/colors.dart deleted file mode 100644 index 16fc7f907..000000000 --- a/lib/pangea/constants/colors.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:flutter/material.dart'; - -class PangeaColors { - static const igcError = Colors.red; -} diff --git a/lib/pangea/constants/url_query_parameter_keys.dart b/lib/pangea/constants/url_query_parameter_keys.dart deleted file mode 100644 index 3f5c468db..000000000 --- a/lib/pangea/constants/url_query_parameter_keys.dart +++ /dev/null @@ -1,3 +0,0 @@ -class UrlQueryParameterKeys { - static const String classCode = 'classcode'; -} diff --git a/lib/pangea/controllers/language_detection_controller.dart b/lib/pangea/controllers/language_detection_controller.dart deleted file mode 100644 index 9df3898cd..000000000 --- a/lib/pangea/controllers/language_detection_controller.dart +++ /dev/null @@ -1,162 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; - -import 'package:http/http.dart' as http; - -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_detection_model.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import '../network/requests.dart'; - -class LanguageDetectionRequest { - /// The full text from which to detect the language. - String fullText; - - /// The base language of the user that sent the meessage, if known. Including this is much preferred - /// and should return better results; however, it is not absolutely necessary. - /// This property is nullable to allow for situations where the languages are not set - /// at the time of the request. - String? senderL1; - - /// The target language of the user that sent the message. This is expected to be set for the request - /// but is nullable to handle edge cases where it might not be. - String? senderL2; - - LanguageDetectionRequest({ - required this.fullText, - required this.senderL1, - required this.senderL2, - }); - - Map toJson() => { - 'full_text': fullText, - 'sender_l1': senderL1, - 'sender_l2': senderL2, - }; - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - return other is LanguageDetectionRequest && - other.fullText == fullText && - other.senderL1 == senderL1 && - other.senderL2 == senderL2; - } - - @override - int get hashCode => fullText.hashCode ^ senderL1.hashCode ^ senderL2.hashCode; -} - -class LanguageDetectionResponse { - List detections; - String fullText; - - LanguageDetectionResponse({ - required this.detections, - required this.fullText, - }); - - factory LanguageDetectionResponse.fromJson(Map json) { - return LanguageDetectionResponse( - detections: List.from( - (json['detections'] as Iterable).map( - (e) => LanguageDetection.fromJson(e), - ), - ), - fullText: json['full_text'], - ); - } - - Map toJson() { - return { - 'detections': detections.map((e) => e.toJson()).toList(), - 'full_text': fullText, - }; - } - - /// Return the highest confidence detection. - /// If there are no detections, the unknown language detection is returned. - LanguageDetection get highestConfidenceDetection { - detections.sort((a, b) => b.confidence.compareTo(a.confidence)); - return detections.firstOrNull ?? unknownLanguageDetection; - } - - static const double languageDetectionConfidenceThreshold = 0.95; - - /// Returns the highest validated detection based on the confidence threshold. - /// If the highest confidence detection is below the threshold, the unknown language - /// detection is returned. - LanguageDetection highestValidatedDetection({double? threshold}) => - highestConfidenceDetection.confidence >= - (threshold ?? languageDetectionConfidenceThreshold) - ? highestConfidenceDetection - : unknownLanguageDetection; -} - -class _LanguageDetectionCacheItem { - Future data; - - _LanguageDetectionCacheItem({ - required this.data, - }); -} - -class LanguageDetectionController { - static final Map - _cache = {}; - late final PangeaController _pangeaController; - Timer? _cacheClearTimer; - - LanguageDetectionController(PangeaController pangeaController) { - _pangeaController = pangeaController; - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 15); // Adjust the duration as needed - _cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); - } - - void _clearCache() { - _cache.clear(); - } - - void dispose() { - _cacheClearTimer?.cancel(); - } - - Future get( - LanguageDetectionRequest params, - ) async { - if (_cache.containsKey(params)) { - return _cache[params]!.data; - } else { - final Future response = _fetchResponse( - _pangeaController.userController.accessToken, - params, - ); - _cache[params] = _LanguageDetectionCacheItem(data: response); - return response; - } - } - - static Future _fetchResponse( - String accessToken, - LanguageDetectionRequest params, - ) async { - final Requests request = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final http.Response res = await request.post( - url: PApiUrls.languageDetection, - body: params.toJson(), - ); - - final Map json = jsonDecode(res.body); - return LanguageDetectionResponse.fromJson(json); - } -} diff --git a/lib/pangea/controllers/permissions_controller.dart b/lib/pangea/controllers/permissions_controller.dart deleted file mode 100644 index 67d7288c8..000000000 --- a/lib/pangea/controllers/permissions_controller.dart +++ /dev/null @@ -1,145 +0,0 @@ -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/constants/age_limits.dart'; -import 'package:fluffychat/pangea/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/utils/p_extension.dart'; - -class PermissionsController extends BaseController { - late PangeaController _pangeaController; - - PermissionsController(PangeaController pangeaController) : super() { - _pangeaController = pangeaController; - } - - Room? _getRoomById(String? roomId) => roomId == null - ? null - : _pangeaController.matrixState.client.getRoomById(roomId); - - Room? firstRoomWithState({required String? roomID, required String type}) { - final Room? room = _getRoomById(roomID); - - return room?.pangeaRoomRules != null - ? room - : room?.firstParentWithState(type); - } - - /// Returns false if user is null - bool isUser18() { - final DateTime? dob = - _pangeaController.userController.profile.userSettings.dateOfBirth; - return dob?.isAtLeastYearsOld(AgeLimits.toAccessFeatures) ?? false; - } - - /// A user can private chat if they are 18+ - bool canUserPrivateChat({String? roomID}) { - return isUser18(); - // Rules can't be edited; default to true - // final Room? classContext = - // firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules); - // return classContext?.pangeaRoomRules == null - // ? isUser18() - // : classContext!.pangeaRoomRules!.oneToOneChatClass || - // classContext.isRoomAdmin; - } - - bool canUserGroupChat({String? roomID}) { - return isUser18(); - // Rules can't be edited; default to true - // final Room? classContext = - // firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules); - - // return classContext?.pangeaRoomRules == null - // ? isUser18() - // : classContext!.pangeaRoomRules!.isCreateRooms || - // classContext.isRoomAdmin; - } - - bool showChatInputAddButton(String roomId) { - // Rules can't be edited; default to true - // final PangeaRoomRules? perms = _getRoomRules(roomId); - // if (perms == null) return isUser18(); - // return perms.isShareFiles || - // perms.isShareLocation || - // perms.isSharePhoto || - // perms.isShareVideo; - return isUser18(); - } - - /// works for both roomID of chat and class - bool canShareVideo(String? roomID) => isUser18(); - // Rules can't be edited; default to true - // _getRoomRules(roomID)?.isShareVideo ?? isUser18(); - - /// works for both roomID of chat and class - bool canSharePhoto(String? roomID) => true; - // Rules can't be edited; default to true - // _getRoomRules(roomID)?.isSharePhoto ?? isUser18(); - - /// works for both roomID of chat and class - bool canShareFile(String? roomID) => true; - // Rules can't be edited; default to true - // _getRoomRules(roomID)?.isShareFiles ?? isUser18(); - - /// works for both roomID of chat and class - bool canShareLocation(String? roomID) => isUser18(); - // Rules can't be edited; default to true - // _getRoomRules(roomID)?.isShareLocation ?? isUser18(); - - int? classLanguageToolPermission(Room room, ToolSetting setting) => 1; - // Rules can't be edited; default to student choice - // room.firstRules?.getToolSettings(setting); - - // what happens if a room isn't in a class? - bool isToolDisabledByClass(ToolSetting setting, Room? room) { - return false; - // Rules can't be edited; default to false - // if (room?.isSpaceAdmin ?? false) return false; - // final int? classPermission = - // room != null ? classLanguageToolPermission(room, setting) : 1; - // return classPermission == 0; - } - - bool userToolSetting(ToolSetting setting) { - switch (setting) { - case ToolSetting.interactiveTranslator: - return _pangeaController - .userController.profile.toolSettings.interactiveTranslator; - case ToolSetting.interactiveGrammar: - return _pangeaController - .userController.profile.toolSettings.interactiveGrammar; - case ToolSetting.immersionMode: - return _pangeaController - .userController.profile.toolSettings.immersionMode; - case ToolSetting.definitions: - return _pangeaController - .userController.profile.toolSettings.definitions; - case ToolSetting.autoIGC: - return _pangeaController.userController.profile.toolSettings.autoIGC; - default: - return false; - } - } - - bool isToolEnabled(ToolSetting setting, Room? room) { - // Rules can't be edited; default to true - return userToolSetting(setting); - // if (room?.isSpaceAdmin ?? false) { - // return userToolSetting(setting); - // } - // final int? classPermission = - // room != null ? classLanguageToolPermission(room, setting) : 1; - // if (classPermission == 0) return false; - // if (classPermission == 2) return true; - // return userToolSetting(setting); - } - - bool isWritingAssistanceEnabled(Room? room) { - // Rules can't be edited; default to true - return true; - // return isToolEnabled(ToolSetting.interactiveTranslator, room) && - // isToolEnabled(ToolSetting.interactiveGrammar, room); - } -} diff --git a/lib/pangea/controllers/space_rules_edit_controller.dart b/lib/pangea/controllers/space_rules_edit_controller.dart deleted file mode 100644 index 89635fc63..000000000 --- a/lib/pangea/controllers/space_rules_edit_controller.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import '../extensions/pangea_room_extension/pangea_room_extension.dart'; -import '../models/space_model.dart'; - -class RoomRulesEditController { - final Room? room; - - late PangeaRoomRules rules; - - RoomRulesEditController([this.room]) { - rules = room?.pangeaRoomRules ?? PangeaRoomRules(); - } - - StateEvent get toStateEvent => StateEvent( - content: rules.toJson(), - type: PangeaEventTypes.rules, - ); -} diff --git a/lib/pangea/enum/bar_chart_view_enum.dart b/lib/pangea/enum/bar_chart_view_enum.dart deleted file mode 100644 index d2fefe1fe..000000000 --- a/lib/pangea/enum/bar_chart_view_enum.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -enum BarChartViewSelection { - messages, - // vocab, - grammar, -} - -extension BarChartViewSelectionExtension on BarChartViewSelection { - String string(BuildContext context) { - switch (this) { - case BarChartViewSelection.messages: - return L10n.of(context).messages; - // case BarChartViewSelection.vocab: - // return L10n.of(context).vocab; - case BarChartViewSelection.grammar: - return L10n.of(context).grammarAnalytics; - } - } - - IconData get icon { - switch (this) { - case BarChartViewSelection.messages: - return Icons.chat_bubble; - // case BarChartViewSelection.vocab: - // return Icons.abc; - case BarChartViewSelection.grammar: - return Icons.spellcheck_outlined; - } - } -} diff --git a/lib/pangea/enum/direction.dart b/lib/pangea/enum/direction.dart deleted file mode 100644 index 9b1f9736a..000000000 --- a/lib/pangea/enum/direction.dart +++ /dev/null @@ -1 +0,0 @@ -enum EditDirection { append, remove } diff --git a/lib/pangea/enum/morphs_enum.dart b/lib/pangea/enum/morphs_enum.dart deleted file mode 100644 index 9badda44d..000000000 --- a/lib/pangea/enum/morphs_enum.dart +++ /dev/null @@ -1,3 +0,0 @@ -// this should be an enum eventually though we're using a class for now - -class Morphs {} diff --git a/lib/pangea/enum/time_span.dart b/lib/pangea/enum/time_span.dart deleted file mode 100644 index 89cc0f8ed..000000000 --- a/lib/pangea/enum/time_span.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -enum TimeSpan { day, week, month, sixmonths, year, forever } - -extension TimeSpanFunctions on TimeSpan { - String string(BuildContext context) { - switch (this) { - case TimeSpan.day: - return L10n.of(context).oneday; - case TimeSpan.week: - return L10n.of(context).oneweek; - case TimeSpan.month: - return L10n.of(context).onemonth; - case TimeSpan.sixmonths: - return L10n.of(context).sixmonth; - case TimeSpan.year: - return L10n.of(context).oneyear; - default: - return "Invalid time span"; - } - } - - int get numberOfIntervals { - switch (this) { - case TimeSpan.day: - return 24; - case TimeSpan.week: - return 7; - case TimeSpan.month: - return DateTime.now().month == 2 ? 26 : 28; - case TimeSpan.sixmonths: - return 6; - case TimeSpan.year: - return 12; - case TimeSpan.forever: - return 0; - } - } - - DateTime get cutOffDate { - switch (this) { - case TimeSpan.day: - return DateTime.now().subtract(Duration(hours: numberOfIntervals)); - case TimeSpan.week: - return DateTime.now().subtract(Duration(days: numberOfIntervals)); - case TimeSpan.month: - //PTODO - get onee month agoo - return DateTime.now().subtract(Duration(days: numberOfIntervals)); - case TimeSpan.sixmonths: - //PTODO - get six months ago - return DateTime.now().subtract(Duration(days: numberOfIntervals * 30)); - case TimeSpan.year: - return DateTime.now().subtract(const Duration(days: 365)); - case TimeSpan.forever: - return DateTime(2020); - } - } -} diff --git a/lib/pangea/enum/vocab_proficiency_enum.dart b/lib/pangea/enum/vocab_proficiency_enum.dart deleted file mode 100644 index aec24eba2..000000000 --- a/lib/pangea/enum/vocab_proficiency_enum.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -enum VocabProficiencyEnum { low, medium, high, unk } - -extension Copy on VocabProficiencyEnum { - String toolTipString(BuildContext context) { - switch (this) { - case VocabProficiencyEnum.low: - return L10n.of(context).low; - case VocabProficiencyEnum.medium: - return L10n.of(context).medium; - case VocabProficiencyEnum.high: - return L10n.of(context).high; - case VocabProficiencyEnum.unk: - return L10n.of(context).unknownProficiency; - } - } - - IconData get iconData { - switch (this) { - case VocabProficiencyEnum.low: - return Icons.sentiment_dissatisfied_outlined; - case VocabProficiencyEnum.medium: - return Icons.sentiment_neutral_outlined; - case VocabProficiencyEnum.high: - return Icons.sentiment_satisfied_outlined; - case VocabProficiencyEnum.unk: - return Icons.question_mark_outlined; - } - } -} - -class VocabProficiencyUtil { - static VocabProficiencyEnum proficiency(num numeric) { - if (numeric > 1) { - return VocabProficiencyEnum.high; - } - if (numeric < -1) { - return VocabProficiencyEnum.low; - } - return VocabProficiencyEnum.medium; - } -} diff --git a/lib/pangea/constants/pangea_event_types.dart b/lib/pangea/events/constants/pangea_event_types.dart similarity index 100% rename from lib/pangea/constants/pangea_event_types.dart rename to lib/pangea/events/constants/pangea_event_types.dart diff --git a/lib/pangea/controllers/message_data_controller.dart b/lib/pangea/events/controllers/message_data_controller.dart similarity index 86% rename from lib/pangea/controllers/message_data_controller.dart rename to lib/pangea/events/controllers/message_data_controller.dart index eea553f6d..d8a34e32b 100644 --- a/lib/pangea/controllers/message_data_controller.dart +++ b/lib/pangea/events/controllers/message_data_controller.dart @@ -7,19 +7,19 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/token_api_models.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/network/requests.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import '../../choreographer/repo/full_text_translation_repo.dart'; +import '../../common/utils/error_handler.dart'; import '../constants/pangea_event_types.dart'; -import '../repo/full_text_translation_repo.dart'; -import '../utils/error_handler.dart'; // TODO - make this static and take it out of the _pangeaController // will need to pass accessToken to the requests diff --git a/lib/pangea/matrix_event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart similarity index 94% rename from lib/pangea/matrix_event_wrappers/pangea_message_event.dart rename to lib/pangea/events/event_wrappers/pangea_message_event.dart index 9fa83064e..5851ef2a5 100644 --- a/lib/pangea/matrix_event_wrappers/pangea_message_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart @@ -7,25 +7,25 @@ import 'package:collection/collection.dart'; import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_representation_event.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/models/choreo_record.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; -import '../../widgets/matrix.dart'; -import '../constants/language_constants.dart'; +import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/enums/audio_encoding_enum.dart'; +import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; +import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; +import '../../../widgets/matrix.dart'; +import '../../choreographer/enums/use_type.dart'; +import '../../common/utils/error_handler.dart'; +import '../../learning_settings/constants/language_constants.dart'; import '../constants/pangea_event_types.dart'; -import '../enum/use_type.dart'; -import '../utils/error_handler.dart'; class PangeaMessageEvent { late Event _event; diff --git a/lib/pangea/matrix_event_wrappers/pangea_representation_event.dart b/lib/pangea/events/event_wrappers/pangea_representation_event.dart similarity index 92% rename from lib/pangea/matrix_event_wrappers/pangea_representation_event.dart rename to lib/pangea/events/event_wrappers/pangea_representation_event.dart index 008559112..5fb41b9dd 100644 --- a/lib/pangea/matrix_event_wrappers/pangea_representation_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_representation_event.dart @@ -9,17 +9,17 @@ import 'package:matrix/matrix.dart'; import 'package:matrix/src/utils/markdown.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_choreo_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/token_api_models.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import '../../widgets/matrix.dart'; -import '../constants/language_constants.dart'; +import 'package:fluffychat/pangea/choreographer/event_wrappers/pangea_choreo_event.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; +import '../../../widgets/matrix.dart'; +import '../../choreographer/models/choreo_record.dart'; +import '../../common/utils/error_handler.dart'; +import '../../learning_settings/constants/language_constants.dart'; import '../constants/pangea_event_types.dart'; -import '../models/choreo_record.dart'; import '../models/representation_content_model.dart'; -import '../utils/error_handler.dart'; class RepresentationEvent { Event? _event; diff --git a/lib/pangea/matrix_event_wrappers/pangea_tokens_event.dart b/lib/pangea/events/event_wrappers/pangea_tokens_event.dart similarity index 78% rename from lib/pangea/matrix_event_wrappers/pangea_tokens_event.dart rename to lib/pangea/events/event_wrappers/pangea_tokens_event.dart index 86582534b..126d9cff8 100644 --- a/lib/pangea/matrix_event_wrappers/pangea_tokens_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_tokens_event.dart @@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import '../constants/pangea_event_types.dart'; class TokensEvent { diff --git a/lib/pangea/extensions/pangea_event_extension.dart b/lib/pangea/events/extensions/pangea_event_extension.dart similarity index 76% rename from lib/pangea/extensions/pangea_event_extension.dart rename to lib/pangea/events/extensions/pangea_event_extension.dart index e313fe462..f5884ddf6 100644 --- a/lib/pangea/extensions/pangea_event_extension.dart +++ b/lib/pangea/events/extensions/pangea_event_extension.dart @@ -4,16 +4,16 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/models/choreo_record.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; +import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_record_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; extension PangeaEvent on Event { V getPangeaContent() { diff --git a/lib/pangea/models/content_feedback.dart b/lib/pangea/events/models/content_feedback.dart similarity index 100% rename from lib/pangea/models/content_feedback.dart rename to lib/pangea/events/models/content_feedback.dart diff --git a/lib/pangea/models/pangea_token_model.dart b/lib/pangea/events/models/pangea_token_model.dart similarity index 95% rename from lib/pangea/models/pangea_token_model.dart rename to lib/pangea/events/models/pangea_token_model.dart index 8c976b6aa..9f833ebb8 100644 --- a/lib/pangea/models/pangea_token_model.dart +++ b/lib/pangea/events/models/pangea_token_model.dart @@ -6,22 +6,22 @@ import 'package:flutter/foundation.dart'; import 'package:collection/collection.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_repo.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_request.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/extensions/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_repo.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../constants/model_keys.dart'; -import 'lemma.dart'; +import '../../analytics/models/lemma.dart'; +import '../../common/constants/model_keys.dart'; class PangeaToken { PangeaTokenText text; diff --git a/lib/pangea/models/pangea_token_text_model.dart b/lib/pangea/events/models/pangea_token_text_model.dart similarity index 100% rename from lib/pangea/models/pangea_token_text_model.dart rename to lib/pangea/events/models/pangea_token_text_model.dart diff --git a/lib/pangea/models/representation_content_model.dart b/lib/pangea/events/models/representation_content_model.dart similarity index 94% rename from lib/pangea/models/representation_content_model.dart rename to lib/pangea/events/models/representation_content_model.dart index 4356fe12e..588b8b126 100644 --- a/lib/pangea/models/representation_content_model.dart +++ b/lib/pangea/events/models/representation_content_model.dart @@ -1,12 +1,12 @@ import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/choreo_record.dart'; -import 'package:fluffychat/pangea/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// this class is contained within a [RepresentationEvent] diff --git a/lib/pangea/models/tokens_event_content_model.dart b/lib/pangea/events/models/tokens_event_content_model.dart similarity index 93% rename from lib/pangea/models/tokens_event_content_model.dart rename to lib/pangea/events/models/tokens_event_content_model.dart index c4cdbda9c..e5efaf259 100644 --- a/lib/pangea/models/tokens_event_content_model.dart +++ b/lib/pangea/events/models/tokens_event_content_model.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; /// this class lives within a [PangeaTokensEvent] /// it always has a [RepresentationEvent] parent diff --git a/lib/pangea/models/token_api_models.dart b/lib/pangea/events/repo/token_api_models.dart similarity index 95% rename from lib/pangea/models/token_api_models.dart rename to lib/pangea/events/repo/token_api_models.dart index 789a37130..1eb0e8f47 100644 --- a/lib/pangea/models/token_api_models.dart +++ b/lib/pangea/events/repo/token_api_models.dart @@ -1,5 +1,5 @@ -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'pangea_token_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import '../models/pangea_token_model.dart'; class TokensRequestModel { /// the text to be tokenized diff --git a/lib/pangea/utils/message_text_util.dart b/lib/pangea/events/utils/message_text_util.dart similarity index 86% rename from lib/pangea/utils/message_text_util.dart rename to lib/pangea/events/utils/message_text_util.dart index ef750f1b1..fd64df563 100644 --- a/lib/pangea/utils/message_text_util.dart +++ b/lib/pangea/events/utils/message_text_util.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_token_text.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_token_text.dart'; class MessageTextUtil { static List? getTokenPositions( diff --git a/lib/pangea/utils/report_message.dart b/lib/pangea/events/utils/report_message.dart similarity index 91% rename from lib/pangea/utils/report_message.dart rename to lib/pangea/events/utils/report_message.dart index 094a4103e..0492744f8 100644 --- a/lib/pangea/utils/report_message.dart +++ b/lib/pangea/events/utils/report_message.dart @@ -3,11 +3,21 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; +Future getReportsDM(User teacher, Room space) async { + final String roomId = await teacher.startDirectChat( + enableEncryption: false, + ); + space.setSpaceChild( + roomId, + suggested: false, + ); + return space.client.getRoomById(roomId)!; +} + Future reportMessage( BuildContext context, String roomId, @@ -45,10 +55,10 @@ Future reportMessage( final List reportDMs = []; for (final SpaceTeacher teacher in selectedTeachers) { - final Room reportDM = await Matrix.of(context).client.getReportsDM( - teacher.teacher, - teacher.space, - ); + final Room reportDM = await getReportsDM( + teacher.teacher, + teacher.space, + ); reportDMs.add(reportDM); } diff --git a/lib/pangea/extensions/client_extension/client_extension.dart b/lib/pangea/extensions/client_extension/client_extension.dart deleted file mode 100644 index 2e513175b..000000000 --- a/lib/pangea/extensions/client_extension/client_extension.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'dart:developer'; -import 'dart:math'; - -import 'package:flutter/foundation.dart'; - -import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; - -part "client_analytics_extension.dart"; -part "general_info_extension.dart"; - -extension PangeaClient on Client { -// analytics - - /// Get the logged in user's analytics room matching - /// a given langCode. If not present, create it. - Future getMyAnalyticsRoom(String langCode) async => - await _getMyAnalyticsRoom(langCode); - - /// Get local analytics room for a given langCode and - /// optional userId (if not specified, uses current user). - /// If user is invited to the room, joins the room. - Room? analyticsRoomLocal(String langCode, [String? userIdParam]) => - _analyticsRoomLocal(langCode, userIdParam); - - List get allMyAnalyticsRooms => _allMyAnalyticsRooms; - - /// Update the visibility of all analytics rooms to private (do they don't show in search - /// results) and set the join rules to public (so they come through in space hierarchy response) - Future updateAnalyticsRoomVisibility() async => - _updateAnalyticsRoomVisibility(); - - /// Space admins join analytics rooms in spaces via the space hierarchy, - /// so other members of the space need to add their analytics rooms to the space. - Future addAnalyticsRoomsToSpaces() async => - _addAnalyticsRoomsToSpaces(); - - bool isJoinSpaceSyncUpdate(SyncUpdate update) => - _isJoinSpaceSyncUpdate(update); - -// general_info - - Future> get myTeachers async => await _myTeachers; - - Future getReportsDM(User teacher, Room space) async => - await _getReportsDM(teacher, space); - - Future get hasBotDM async => await _hasBotDM; - - Future> getEditHistory( - String roomId, - String eventId, - ) async => - await _getEditHistory(roomId, eventId); - - String? powerLevelName(int powerLevel, L10n l10n) => - _powerLevelName(powerLevel, l10n); - - Future waitForAccountData() async => await _waitForAccountData(); -} diff --git a/lib/pangea/extensions/client_extension/general_info_extension.dart b/lib/pangea/extensions/client_extension/general_info_extension.dart deleted file mode 100644 index 12431558d..000000000 --- a/lib/pangea/extensions/client_extension/general_info_extension.dart +++ /dev/null @@ -1,79 +0,0 @@ -part of "client_extension.dart"; - -extension GeneralInfoClientExtension on Client { - Future> get _myTeachers async { - final List teachers = []; - final spaces = rooms.where((room) => room.isSpace); - for (final classRoom in spaces) { - for (final teacher in await classRoom.teachers) { - // If person requesting list of teachers is a teacher in another classroom, don't add them to the list - if (!teachers.any((e) => e.id == teacher.id) && userID != teacher.id) { - teachers.add(teacher); - } - } - } - return teachers; - } - - Future _getReportsDM(User teacher, Room space) async { - final String roomId = await teacher.startDirectChat( - enableEncryption: false, - ); - space.setSpaceChild( - roomId, - suggested: false, - ); - return getRoomById(roomId)!; - } - - Future get _hasBotDM async { - final List chats = rooms - .where((room) => !room.isSpace && room.membership == Membership.join) - .toList(); - - for (final Room chat in chats) { - if (await chat.isBotDM) return true; - } - return false; - } - - Future> _getEditHistory( - String roomId, - String eventId, - ) async { - final Room? room = getRoomById(roomId); - final Event? editEvent = await room?.getEventById(eventId); - final String? edittedEventId = - editEvent?.content.tryGetMap('m.relates_to')?['event_id']; - if (edittedEventId == null) return []; - - final Event? originalEvent = await room!.getEventById(edittedEventId); - if (originalEvent == null) return []; - - final Timeline timeline = room.timeline ?? await room.getTimeline(); - final List editEvents = originalEvent - .aggregatedEvents( - timeline, - RelationshipTypes.edit, - ) - .sorted( - (a, b) => b.originServerTs.compareTo(a.originServerTs), - ) - .toList(); - editEvents.add(originalEvent); - return editEvents.slice(1).map((e) => e.eventId).toList(); - } - - String? _powerLevelName(int powerLevel, L10n l10n) => { - 0: l10n.user, - 50: l10n.moderator, - 100: l10n.admin, - }[powerLevel]; - - /// Account data comes through in the first sync, so wait for that - Future _waitForAccountData() async { - if (prevBatch == null) { - await onSync.stream.first; - } - } -} diff --git a/lib/pangea/extensions/my_list_extension.dart b/lib/pangea/extensions/my_list_extension.dart deleted file mode 100644 index 2527c1eb8..000000000 --- a/lib/pangea/extensions/my_list_extension.dart +++ /dev/null @@ -1,8 +0,0 @@ -extension ReturnShuffle on List { - List shuffleReturn() { - // final List copyList = toList(); - shuffle(); - return this; - // return copyList; - } -} diff --git a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart similarity index 70% rename from lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart rename to lib/pangea/extensions/pangea_room_extension.dart index 5265a4d1c..c7329b8a1 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -16,27 +16,24 @@ import 'package:matrix/matrix.dart'; import 'package:matrix/src/utils/markdown.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/constants/bot_mode.dart'; -import 'package:fluffychat/pangea/constants/class_code_constants.dart'; -import 'package:fluffychat/pangea/constants/class_default_values.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_event.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/bot_options_model.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_event.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../../config/app_config.dart'; -import '../../constants/pangea_event_types.dart'; -import '../../models/choreo_record.dart'; -import '../../models/representation_content_model.dart'; +import '../choreographer/models/choreo_record.dart'; +import '../events/constants/pangea_event_types.dart'; +import '../events/models/representation_content_model.dart'; -part "room_analytics_extension.dart"; +part "../analytics/extensions/room_analytics_extension.dart"; part "room_children_and_parents_extension.dart"; part "room_events_extension.dart"; part "room_information_extension.dart"; @@ -77,21 +74,13 @@ extension PangeaRoom on Room { List get joinedChildren => _joinedChildren; - List get joinedChildrenRoomIds => _joinedChildrenRoomIds; - Future> getChildRooms() async => await _getChildRooms(); - Future joinSpaceChild(String roomID) async => - await _joinSpaceChild(roomID); - Room? firstParentWithState(String stateType) => _firstParentWithState(stateType); List get pangeaSpaceParents => _pangeaSpaceParents; - String nameIncludingParents(BuildContext context) => - _nameIncludingParents(context); - Future pangeaSetSpaceChild( String roomId, { bool? suggested, @@ -108,29 +97,14 @@ extension PangeaRoom on Room { Map get spaceChildSuggestionStatus => _spaceChildSuggestionStatus; - /// Checks if this space has a parent space - bool get isSubspace => _isSubspace; - // class_and_exchange_settings - DateTime? get rulesUpdatedAt => _rulesUpdatedAt; - - String get classCode => _classCode; + String classCode(BuildContext context) => _classCode(context); void checkClass() => _checkClass(); - List get students => _students; - Future> get teachers async => await _teachers; - /// Synchronous version of teachers getter. Does not request - /// participants, so this list may not be complete. - List get teachersLocal => _teachersLocal; - - /// If the user is an admin of this space, and the space's - /// m.space.child power level hasn't yet been set, so it to 0 - Future setClassPowerLevels() async => await _setClassPowerLevels(); - Event? get pangeaRoomRulesStateEvent => _pangeaRoomRulesStateEvent; // events @@ -198,9 +172,6 @@ extension PangeaRoom on Room { messageTag: messageTag, ); - Future updateStateEvent(Event stateEvent) => - _updateStateEvent(stateEvent); - // room_information Future get numNonAdmins async => await _numNonAdmins; @@ -209,14 +180,8 @@ extension PangeaRoom on Room { String? get creatorId => _creatorId; - String get domainString => _domainString; - - bool isChild(String roomId) => _isChild(roomId); - bool isFirstOrSecondChild(String roomId) => _isFirstOrSecondChild(roomId); - bool get isDirectChatWithoutMe => _isDirectChatWithoutMe; - // bool isMadeForLang(String langCode) => _isMadeForLang(langCode); Future get botIsInRoom async => await _botIsInRoom; @@ -238,8 +203,6 @@ extension PangeaRoom on Room { PangeaRoomRules? get pangeaRoomRules => _pangeaRoomRules; - PangeaRoomRules? get firstRules => _firstRules; - IconData? get roomTypeIcon => _roomTypeIcon; Text nameAndRoomTypeIcon([TextStyle? textStyle]) => @@ -247,11 +210,6 @@ extension PangeaRoom on Room { BotOptionsModel? get botOptions => _botOptions; - Future setSuggested(bool suggested) async => - await _setSuggested(suggested); - - Future isSuggested() async => await _isSuggested(); - // user_permissions Future isOnlyAdmin() async => await _isOnlyAdmin(); @@ -262,19 +220,7 @@ extension PangeaRoom on Room { bool isUserRoomAdmin(String userId) => _isUserRoomAdmin(userId); - bool isUserSpaceAdmin(String userId) => _isUserSpaceAdmin(userId); - - bool get isRoomOwner => _isRoomOwner; - bool get isRoomAdmin => _isRoomAdmin; - bool get showClassEditOptions => _showClassEditOptions; - - bool get canDelete => _canDelete; - - bool get canIAddSpaceParents => _canIAddSpaceParents; - bool pangeaCanSendEvent(String eventType) => _pangeaCanSendEvent(eventType); - - int? get eventsDefaultPowerLevel => _eventsDefaultPowerLevel; } diff --git a/lib/pangea/extensions/pangea_room_extension/room_settings_extension.dart b/lib/pangea/extensions/pangea_room_extension/room_settings_extension.dart deleted file mode 100644 index 3c95ab122..000000000 --- a/lib/pangea/extensions/pangea_room_extension/room_settings_extension.dart +++ /dev/null @@ -1,143 +0,0 @@ -part of "pangea_room_extension.dart"; - -extension RoomSettingsRoomExtension on Room { - Future _updateRoomCapacity(int newCapacity) => - client.setRoomStateWithKey( - id, - PangeaEventTypes.capacity, - '', - {'capacity': newCapacity}, - ); - - int? get _capacity { - final t = getState(PangeaEventTypes.capacity)?.content['capacity']; - return t is int ? t : null; - } - - PangeaRoomRules? get _pangeaRoomRules { - try { - final Map? content = pangeaRoomRulesStateEvent?.content; - if (content != null) { - final PangeaRoomRules roomRules = PangeaRoomRules.fromJson(content); - return roomRules; - } - return null; - } catch (err, s) { - Sentry.addBreadcrumb( - Breadcrumb( - message: "Error in pangeaRoomRules", - data: {"room": toJson()}, - ), - ); - ErrorHandler.logError( - e: err, - s: s, - data: { - "roomID": id, - }, - ); - return null; - } - } - - PangeaRoomRules? get _firstRules => - pangeaRoomRules ?? - firstParentWithState(PangeaEventTypes.rules)?.pangeaRoomRules; - - IconData? get _roomTypeIcon { - if (membership == Membership.invite) return Icons.add; - if (isSpace) return Icons.school; - if (isAnalyticsRoom) return Icons.analytics; - if (isDirectChat) return Icons.forum; - return Icons.group; - } - - Text _nameAndRoomTypeIcon([TextStyle? textStyle]) => Text.rich( - style: textStyle, - TextSpan( - children: [ - WidgetSpan( - child: Icon(roomTypeIcon), - ), - TextSpan( - text: ' $name', - ), - ], - ), - ); - - BotOptionsModel? get _botOptions { - if (isSpace) return null; - final stateEvent = getState(PangeaEventTypes.botOptions); - if (stateEvent == null) return null; - return BotOptionsModel.fromJson(stateEvent.content); - } - - Future _isSuggested() async { - final List spaceParents = client.rooms - .where( - (room) => - room.isSpace && - room.spaceChildren.any( - (sc) => sc.roomId == id, - ), - ) - .toList(); - - for (final parent in spaceParents) { - final suggested = await _isSuggestedInSpace(parent); - if (!suggested) return false; - } - return true; - } - - Future _setSuggested(bool suggested) async { - final List spaceParents = client.rooms - .where( - (room) => - room.isSpace && - room.spaceChildren.any( - (sc) => sc.roomId == id, - ), - ) - .toList(); - for (final parent in spaceParents) { - await _setSuggestedInSpace(suggested, parent); - } - } - - Future _isSuggestedInSpace(Room space) async { - try { - final Map resp = - await client.getRoomStateWithKey(space.id, EventTypes.SpaceChild, id); - return resp.containsKey('suggested') ? resp['suggested'] as bool : true; - } catch (err) { - ErrorHandler.logError( - e: "Failed to fetch suggestion status of room $id in space ${space.id}", - s: StackTrace.current, - data: { - "spaceID": space.id, - "roomID": id, - }, - ); - return true; - } - } - - Future _setSuggestedInSpace(bool suggest, Room space) async { - try { - await space.pangeaSetSpaceChild(id, suggested: suggest); - } catch (err) { - ErrorHandler.logError( - e: "Failed to set suggestion status of room $id in space ${space.id}", - s: StackTrace.current, - data: { - "spaceID": space.id, - "roomID": id, - "suggest": suggest, - }, - ); - return; - } - } -} diff --git a/lib/pangea/extensions/pangea_room_extension/room_space_settings_extension.dart b/lib/pangea/extensions/pangea_room_extension/room_space_settings_extension.dart deleted file mode 100644 index d2c9b7946..000000000 --- a/lib/pangea/extensions/pangea_room_extension/room_space_settings_extension.dart +++ /dev/null @@ -1,157 +0,0 @@ -part of "pangea_room_extension.dart"; - -extension SpaceRoomExtension on Room { - DateTime? get _rulesUpdatedAt { - if (!isSpace) return null; - return pangeaRoomRulesStateEvent?.originServerTs ?? creationTime; - } - - String get _classCode { - if (!isSpace) { - for (final Room potentialClassRoom in pangeaSpaceParents) { - if (potentialClassRoom.isSpace) { - return potentialClassRoom.classCode; - } - } - return "Not in a class!"; - } - final roomJoinRules = getState(EventTypes.RoomJoinRules, ""); - if (roomJoinRules != null) { - final accessCode = roomJoinRules.content.tryGet(ModelKey.accessCode); - if (accessCode is String) { - return accessCode; - } - } - return noClassCode; - } - - void _checkClass() { - if (!isSpace) { - debugger(when: kDebugMode); - Sentry.addBreadcrumb( - Breadcrumb(message: "calling room.students with non-class room"), - ); - } - } - - List get _students { - checkClass(); - return isSpace - ? getParticipants() - .where( - (e) => - e.powerLevel < ClassDefaultValues.powerLevelOfAdmin && - e.id != BotName.byEnvironment, - ) - .toList() - : getParticipants(); - } - - Future> get _teachers async { - checkClass(); - final List participants = await requestParticipants(); - return isSpace - ? participants - .where( - (e) => - e.powerLevel == ClassDefaultValues.powerLevelOfAdmin && - e.id != BotName.byEnvironment, - ) - .toList() - : participants; - } - - /// Synchronous version of _teachers. Does not request participants, so this list may not be complete. - List get _teachersLocal { - if (!isSpace) return []; - return getParticipants() - .where( - (e) => - e.powerLevel == ClassDefaultValues.powerLevelOfAdmin && - e.id != BotName.byEnvironment, - ) - .toList(); - } - - /// If the user is an admin of this space, and the space's - /// m.space.child power level hasn't yet been set, so it to 0 - Future _setClassPowerLevels() async { - try { - if (!isRoomAdmin) return; - final dynamic currentPower = getState(EventTypes.RoomPowerLevels); - if (currentPower is! Event?) return; - - final currentPowerContent = - currentPower?.content["events"] as Map?; - final spaceChildPower = currentPowerContent?[EventTypes.SpaceChild]; - - if (spaceChildPower == null && currentPowerContent != null) { - currentPowerContent[EventTypes.SpaceChild] = 0; - currentPower!.content["events"] = currentPowerContent; - - await client.setRoomStateWithKey( - id, - EventTypes.RoomPowerLevels, - currentPower.stateKey ?? "", - currentPower.content, - ); - } - } catch (err, s) { - debugger(when: kDebugMode); - ErrorHandler.logError(e: err, s: s, data: toJson()); - } - } - - Event? get _pangeaRoomRulesStateEvent { - final dynamic roomRules = getState(PangeaEventTypes.rules); - if (roomRules is Event) { - return roomRules; - } - return null; - } - - // DateTime? get _languageSettingsUpdatedAt { - // if (!isSpace) return null; - // return languageSettingsStateEvent?.originServerTs ?? creationTime; - // } - - /// the pangeaClass event is listed an importantStateEvent so, if event exists, - /// it's already local. If it's an old class and doesn't, then the class_controller - /// should automatically migrate during this same session, when the space is first loaded - // LanguageSettingsModel? get _languageSettings { - // try { - // if (!isSpace) { - // return null; - // } - // final Map? content = languageSettingsStateEvent?.content; - // if (content != null) { - // final LanguageSettingsModel languageSettings = - // LanguageSettingsModel.fromJson(content); - // return languageSettings; - // } - // return null; - // } catch (err, s) { - // Sentry.addBreadcrumb( - // Breadcrumb( - // message: "Error in languageSettings", - // data: {"room": toJson()}, - // ), - // ); - // ErrorHandler.logError(e: err, s: s); - // return null; - // } - // } - - // Event? get _languageSettingsStateEvent { - // final dynamic languageSettings = - // getState(PangeaEventTypes.languageSettings); - // if (languageSettings is Event) { - // return languageSettings; - // } - // return null; - // } - - // LanguageSettingsModel? get _firstLanguageSettings => - // languageSettings ?? - // firstParentWithState(PangeaEventTypes.languageSettings)?.languageSettings; -} diff --git a/lib/pangea/extensions/pangea_room_extension/room_children_and_parents_extension.dart b/lib/pangea/extensions/room_children_and_parents_extension.dart similarity index 70% rename from lib/pangea/extensions/pangea_room_extension/room_children_and_parents_extension.dart rename to lib/pangea/extensions/room_children_and_parents_extension.dart index 277de4043..8ec89078a 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_children_and_parents_extension.dart +++ b/lib/pangea/extensions/room_children_and_parents_extension.dart @@ -1,8 +1,6 @@ part of "pangea_room_extension.dart"; extension ChildrenAndParentsRoomExtension on Room { - bool get _isSubspace => _pangeaSpaceParents.isNotEmpty; - //note this only will return rooms that the user has joined or been invited to List get _joinedChildren { if (!isSpace) return []; @@ -19,9 +17,6 @@ extension ChildrenAndParentsRoomExtension on Room { .toList(); } - List get _joinedChildrenRoomIds => - joinedChildren.map((child) => child.id).toList(); - Future> _getChildRooms() async { final List children = []; for (final child in spaceChildren) { @@ -34,31 +29,6 @@ extension ChildrenAndParentsRoomExtension on Room { return children; } - Future _joinSpaceChild(String roomID) async { - final Room? child = client.getRoomById(roomID); - if (child == null) { - await client.joinRoom( - roomID, - serverName: spaceChildren - .firstWhereOrNull((child) => child.roomId == roomID) - ?.via, - ); - if (client.getRoomById(roomID) == null) { - await client.waitForRoomInSync(roomID, join: true); - } - return; - } - - if (![Membership.invite, Membership.join].contains(child.membership)) { - final waitForRoom = client.waitForRoomInSync( - roomID, - join: true, - ); - await child.join(); - await waitForRoom; - } - } - //resolve somehow if multiple rooms have the state? //check logic Room? _firstParentWithState(String stateType) { @@ -90,24 +60,6 @@ extension ChildrenAndParentsRoomExtension on Room { ) .toList(); - String _nameIncludingParents(BuildContext context) { - String nameSoFar = getLocalizedDisplayname(MatrixLocals(L10n.of(context))); - Room currentRoom = this; - if (!currentRoom._isSubspace) { - return nameSoFar; - } - currentRoom = currentRoom.pangeaSpaceParents.first; - var nameToAdd = - currentRoom.getLocalizedDisplayname(MatrixLocals(L10n.of(context))); - nameToAdd = - nameToAdd.length <= 10 ? nameToAdd : "${nameToAdd.substring(0, 10)}..."; - nameSoFar = '$nameToAdd > $nameSoFar'; - if (!currentRoom._isSubspace) { - return nameSoFar; - } - return "... > $nameSoFar"; - } - /// Wrapper around call to setSpaceChild with added functionality /// to prevent adding one room to multiple spaces, and resets the /// subspace's JoinRules and Visibility to defaults. diff --git a/lib/pangea/extensions/pangea_room_extension/room_events_extension.dart b/lib/pangea/extensions/room_events_extension.dart similarity index 96% rename from lib/pangea/extensions/pangea_room_extension/room_events_extension.dart rename to lib/pangea/extensions/room_events_extension.dart index 8ac606025..aa2cf886a 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_events_extension.dart +++ b/lib/pangea/extensions/room_events_extension.dart @@ -19,7 +19,7 @@ extension EventsRoomExtension on Room { .where( (e) => e.id != client.userID && - e.powerLevel < ClassDefaultValues.powerLevelOfAdmin && + e.powerLevel < SpaceConstants.powerLevelOfAdmin && e.id != BotName.byEnvironment, ) .toList(); @@ -292,19 +292,6 @@ extension EventsRoomExtension on Room { ); } - /// update state event and return eventId - Future _updateStateEvent(Event stateEvent) { - if (stateEvent.stateKey == null) { - throw Exception("stateEvent.stateKey is null"); - } - return client.setRoomStateWithKey( - id, - stateEvent.type, - stateEvent.stateKey!, - stateEvent.content, - ); - } - /// Get a list of events in the room that are of type [PangeaEventTypes.construct] /// and have the sender as [userID]. If [count] is provided, the function will /// return at most [count] events. diff --git a/lib/pangea/extensions/pangea_room_extension/room_information_extension.dart b/lib/pangea/extensions/room_information_extension.dart similarity index 53% rename from lib/pangea/extensions/pangea_room_extension/room_information_extension.dart rename to lib/pangea/extensions/room_information_extension.dart index 86f6f6786..e00f1f7fc 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_information_extension.dart +++ b/lib/pangea/extensions/room_information_extension.dart @@ -5,7 +5,7 @@ extension RoomInformationRoomExtension on Room { return (await requestParticipants()) .where( (e) => - e.powerLevel < ClassDefaultValues.powerLevelOfAdmin && + e.powerLevel < SpaceConstants.powerLevelOfAdmin && e.id != BotName.byEnvironment, ) .toList() @@ -20,12 +20,6 @@ extension RoomInformationRoomExtension on Room { String? get _creatorId => getState(EventTypes.RoomCreate)?.senderId; - String get _domainString => - AppConfig.defaultHomeserver.replaceAll("matrix.", ""); - - bool _isChild(String roomId) => - isSpace && spaceChildren.any((room) => room.roomId == roomId); - bool _isFirstOrSecondChild(String roomId) { return isSpace && (spaceChildren.any((room) => room.roomId == roomId) || @@ -40,15 +34,6 @@ extension RoomInformationRoomExtension on Room { )); } - bool get _isDirectChatWithoutMe => - isDirectChat && !getParticipants().any((e) => e.id == client.userID); - - // bool _isMadeForLang(String langCode) { - // final creationContent = getState(EventTypes.RoomCreate)?.content; - // return creationContent?.tryGet(ModelKey.langCode) == langCode || - // creationContent?.tryGet(ModelKey.oldLangCode) == langCode; - // } - Future get _botIsInRoom async { final List participants = await requestParticipants(); return participants.any( @@ -58,25 +43,6 @@ extension RoomInformationRoomExtension on Room { Future get _isBotDM async => botOptions?.mode == BotMode.directChat; - // bool get _isLocked { - // if (isDirectChat) return false; - // if (!isSpace) { - // if (eventsDefaultPowerLevel == null) return false; - // return (eventsDefaultPowerLevel ?? 0) >= - // ClassDefaultValues.powerLevelOfAdmin; - // } - // for (final child in spaceChildren) { - // if (child.roomId == null) continue; - // final Room? room = client.getRoomById(child.roomId!); - // if (room == null || room.isAnalyticsRoom || room.isArchived) continue; - // if (!room._isLocked) { - // return false; - // } - // } - // return (eventsDefaultPowerLevel ?? 0) >= - // ClassDefaultValues.powerLevelOfAdmin; - // } - bool _isAnalyticsRoomOfUser(String userId) => isAnalyticsRoom && isMadeByUser(userId); diff --git a/lib/pangea/extensions/room_settings_extension.dart b/lib/pangea/extensions/room_settings_extension.dart new file mode 100644 index 000000000..3b0cb34a9 --- /dev/null +++ b/lib/pangea/extensions/room_settings_extension.dart @@ -0,0 +1,71 @@ +part of "pangea_room_extension.dart"; + +extension RoomSettingsRoomExtension on Room { + Future _updateRoomCapacity(int newCapacity) => + client.setRoomStateWithKey( + id, + PangeaEventTypes.capacity, + '', + {'capacity': newCapacity}, + ); + + int? get _capacity { + final t = getState(PangeaEventTypes.capacity)?.content['capacity']; + return t is int ? t : null; + } + + PangeaRoomRules? get _pangeaRoomRules { + try { + final Map? content = pangeaRoomRulesStateEvent?.content; + if (content != null) { + final PangeaRoomRules roomRules = PangeaRoomRules.fromJson(content); + return roomRules; + } + return null; + } catch (err, s) { + Sentry.addBreadcrumb( + Breadcrumb( + message: "Error in pangeaRoomRules", + data: {"room": toJson()}, + ), + ); + ErrorHandler.logError( + e: err, + s: s, + data: { + "roomID": id, + }, + ); + return null; + } + } + + IconData? get _roomTypeIcon { + if (membership == Membership.invite) return Icons.add; + if (isSpace) return Icons.school; + if (isAnalyticsRoom) return Icons.analytics; + if (isDirectChat) return Icons.forum; + return Icons.group; + } + + Text _nameAndRoomTypeIcon([TextStyle? textStyle]) => Text.rich( + style: textStyle, + TextSpan( + children: [ + WidgetSpan( + child: Icon(roomTypeIcon), + ), + TextSpan( + text: ' $name', + ), + ], + ), + ); + + BotOptionsModel? get _botOptions { + if (isSpace) return null; + final stateEvent = getState(PangeaEventTypes.botOptions); + if (stateEvent == null) return null; + return BotOptionsModel.fromJson(stateEvent.content); + } +} diff --git a/lib/pangea/extensions/room_space_settings_extension.dart b/lib/pangea/extensions/room_space_settings_extension.dart new file mode 100644 index 000000000..45ed25ba8 --- /dev/null +++ b/lib/pangea/extensions/room_space_settings_extension.dart @@ -0,0 +1,53 @@ +part of "pangea_room_extension.dart"; + +extension SpaceRoomExtension on Room { + String _classCode(BuildContext context) { + if (!isSpace) { + for (final Room potentialClassRoom in pangeaSpaceParents) { + if (potentialClassRoom.isSpace) { + return potentialClassRoom.classCode(context); + } + } + return L10n.of(context).notInClass; + } + final roomJoinRules = getState(EventTypes.RoomJoinRules, ""); + if (roomJoinRules != null) { + final accessCode = roomJoinRules.content.tryGet(ModelKey.accessCode); + if (accessCode is String) { + return accessCode; + } + } + return L10n.of(context).noClassCode; + } + + void _checkClass() { + if (!isSpace) { + debugger(when: kDebugMode); + Sentry.addBreadcrumb( + Breadcrumb(message: "calling room.students with non-class room"), + ); + } + } + + Future> get _teachers async { + checkClass(); + final List participants = await requestParticipants(); + return isSpace + ? participants + .where( + (e) => + e.powerLevel == SpaceConstants.powerLevelOfAdmin && + e.id != BotName.byEnvironment, + ) + .toList() + : participants; + } + + Event? get _pangeaRoomRulesStateEvent { + final dynamic roomRules = getState(PangeaEventTypes.rules); + if (roomRules is Event) { + return roomRules; + } + return null; + } +} diff --git a/lib/pangea/extensions/pangea_room_extension/room_user_permissions_extension.dart b/lib/pangea/extensions/room_user_permissions_extension.dart similarity index 64% rename from lib/pangea/extensions/pangea_room_extension/room_user_permissions_extension.dart rename to lib/pangea/extensions/room_user_permissions_extension.dart index d066bf84f..5f1e9582d 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_user_permissions_extension.dart +++ b/lib/pangea/extensions/room_user_permissions_extension.dart @@ -11,7 +11,7 @@ extension UserPermissionsRoomExtension on Room { return ((participants .where( (e) => - e.powerLevel == ClassDefaultValues.powerLevelOfAdmin && + e.powerLevel == SpaceConstants.powerLevelOfAdmin && e.id != BotName.byEnvironment, ) .toList() @@ -20,7 +20,7 @@ extension UserPermissionsRoomExtension on Room { (participants .where( (e) => - e.powerLevel < ClassDefaultValues.powerLevelOfAdmin && + e.powerLevel < SpaceConstants.powerLevelOfAdmin && e.id != BotName.byEnvironment, ) .toList()) @@ -53,33 +53,10 @@ extension UserPermissionsRoomExtension on Room { bool _isUserRoomAdmin(String userId) => getParticipants().any( (e) => - e.id == userId && - e.powerLevel == ClassDefaultValues.powerLevelOfAdmin, + e.id == userId && e.powerLevel == SpaceConstants.powerLevelOfAdmin, ); - bool _isUserSpaceAdmin(String userId) { - if (isSpace) return isUserRoomAdmin(userId); - - for (final parent in pangeaSpaceParents) { - if (parent.isUserRoomAdmin(userId)) { - return true; - } - } - return false; - } - - bool get _isRoomOwner => - getState(EventTypes.RoomCreate)?.senderId == client.userID; - - bool get _isRoomAdmin => - ownPowerLevel == ClassDefaultValues.powerLevelOfAdmin; - - bool get _showClassEditOptions => isSpace && isRoomAdmin; - - bool get _canDelete => isSpaceAdmin; - - bool get _canIAddSpaceParents => - _isRoomAdmin || pangeaCanSendEvent(EventTypes.SpaceParent); + bool get _isRoomAdmin => ownPowerLevel == SpaceConstants.powerLevelOfAdmin; // Overriding the default canSendEvent to check power levels bool _pangeaCanSendEvent(String eventType) { @@ -91,8 +68,4 @@ extension UserPermissionsRoomExtension on Room { 100; return ownPowerLevel >= pl; } - - int? get _eventsDefaultPowerLevel => getState(EventTypes.RoomPowerLevels) - ?.content - .tryGet('events_default'); } diff --git a/lib/pangea/extensions/sync_update_extension.dart b/lib/pangea/extensions/sync_update_extension.dart deleted file mode 100644 index 6adb55c69..000000000 --- a/lib/pangea/extensions/sync_update_extension.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:matrix/matrix.dart'; - -extension MembershipUpdate on SyncUpdate { - bool isMembershipUpdate(String userId) { - return isMembershipUpdateByType(Membership.join, userId) || - isMembershipUpdateByType(Membership.leave, userId) || - isMembershipUpdateByType(Membership.invite, userId); - } - - bool isMembershipUpdateByType(Membership type, String userId) { - final List? updates = getRoomUpdates(type); - if (updates?.isEmpty ?? true) { - return false; - } - - for (final SyncRoomUpdate update in updates!) { - final List? events = getRoomUpdateEvents(type, update); - if (hasMembershipUpdate( - events, - type.name, - userId, - )) { - return true; - } - } - return false; - } - - List? getRoomUpdates(Membership type) { - switch (type) { - case Membership.join: - return rooms?.join?.values.toList(); - case Membership.leave: - return rooms?.leave?.values.toList(); - case Membership.invite: - return rooms?.invite?.values.toList(); - default: - return null; - } - } - - bool isSpaceChildUpdate(String activeSpaceId) { - if (rooms?.join?.isEmpty ?? true) { - return false; - } - for (final update in rooms!.join!.entries) { - final String spaceId = update.key; - final List? timelineEvents = update.value.timeline?.events; - final bool isUpdate = timelineEvents != null && - spaceId == activeSpaceId && - timelineEvents.any((event) => event.type == EventTypes.SpaceChild); - if (isUpdate) return true; - } - return false; - } -} - -List? getRoomUpdateEvents(Membership type, SyncRoomUpdate update) { - switch (type) { - case Membership.join: - return (update as JoinedRoomUpdate).timeline?.events; - case Membership.leave: - return (update as LeftRoomUpdate).timeline?.events; - case Membership.invite: - return (update as InvitedRoomUpdate).inviteState; - default: - return null; - } -} - -bool hasMembershipUpdate( - List? events, - String membershipType, - String userId, -) { - if (events == null) { - return false; - } - return events.any( - (event) => - event.type == EventTypes.RoomMember && - event.stateKey == userId && - event.content['membership'] == membershipType, - ); -} diff --git a/lib/pangea/guard/p_vguard.dart b/lib/pangea/guard/p_vguard.dart index e41dbed7d..17fe6b16d 100644 --- a/lib/pangea/guard/p_vguard.dart +++ b/lib/pangea/guard/p_vguard.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../controllers/pangea_controller.dart'; +import '../common/controllers/pangea_controller.dart'; class PAuthGaurd { static bool isPublicLeaving = false; diff --git a/lib/pangea/instructions/instructions_enum.dart b/lib/pangea/instructions/instructions_enum.dart index 5ba657593..012f87a3f 100644 --- a/lib/pangea/instructions/instructions_enum.dart +++ b/lib/pangea/instructions/instructions_enum.dart @@ -4,7 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/instructions/instructions_show_popup.dart b/lib/pangea/instructions/instructions_show_popup.dart index 0db555443..3b6efa807 100644 --- a/lib/pangea/instructions/instructions_show_popup.dart +++ b/lib/pangea/instructions/instructions_show_popup.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_toggle.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/utils/overlay.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_header.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Instruction Card gives users tips on diff --git a/lib/pangea/instructions/instructions_toggle.dart b/lib/pangea/instructions/instructions_toggle.dart index 7ae7543ca..e9419a759 100644 --- a/lib/pangea/instructions/instructions_toggle.dart +++ b/lib/pangea/instructions/instructions_toggle.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/constants/language_constants.dart b/lib/pangea/learning_settings/constants/language_constants.dart similarity index 85% rename from lib/pangea/constants/language_constants.dart rename to lib/pangea/learning_settings/constants/language_constants.dart index a0aec4e7d..ad8d18d00 100644 --- a/lib/pangea/constants/language_constants.dart +++ b/lib/pangea/learning_settings/constants/language_constants.dart @@ -1,4 +1,4 @@ -import 'package:fluffychat/pangea/models/language_detection_model.dart'; +import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; class LanguageKeys { static const unknownLanguage = "unk"; diff --git a/lib/pangea/controllers/language_controller.dart b/lib/pangea/learning_settings/controllers/language_controller.dart similarity index 90% rename from lib/pangea/controllers/language_controller.dart rename to lib/pangea/learning_settings/controllers/language_controller.dart index 5625650b3..20cf107dd 100644 --- a/lib/pangea/controllers/language_controller.dart +++ b/lib/pangea/learning_settings/controllers/language_controller.dart @@ -4,11 +4,11 @@ import 'package:flutter/material.dart'; import 'package:universal_io/io.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import '../widgets/user_settings/p_language_dialog.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; +import '../widgets/p_language_dialog.dart'; class LanguageController { late PangeaController _pangeaController; diff --git a/lib/pangea/enum/l2_support_enum.dart b/lib/pangea/learning_settings/enums/l2_support_enum.dart similarity index 100% rename from lib/pangea/enum/l2_support_enum.dart rename to lib/pangea/learning_settings/enums/l2_support_enum.dart diff --git a/lib/pangea/models/language_model.dart b/lib/pangea/learning_settings/models/language_model.dart similarity index 99% rename from lib/pangea/models/language_model.dart rename to lib/pangea/learning_settings/models/language_model.dart index db8600374..0185548bf 100644 --- a/lib/pangea/models/language_model.dart +++ b/lib/pangea/learning_settings/models/language_model.dart @@ -5,9 +5,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/enum/l2_support_enum.dart'; -import '../utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart'; +import '../../common/utils/error_handler.dart'; class LanguageModel { final String langCode; diff --git a/lib/pangea/pages/settings_learning/settings_learning.dart b/lib/pangea/learning_settings/pages/settings_learning.dart similarity index 88% rename from lib/pangea/pages/settings_learning/settings_learning.dart rename to lib/pangea/learning_settings/pages/settings_learning.dart index 4f4aeac48..a5c5cf910 100644 --- a/lib/pangea/pages/settings_learning/settings_learning.dart +++ b/lib/pangea/learning_settings/pages/settings_learning.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:country_picker/country_picker.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/models/user_model.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning_view.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/p_language_dialog.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning_view.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/user/models/user_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; class SettingsLearning extends StatefulWidget { diff --git a/lib/pangea/pages/settings_learning/settings_learning_view.dart b/lib/pangea/learning_settings/pages/settings_learning_view.dart similarity index 93% rename from lib/pangea/pages/settings_learning/settings_learning_view.dart rename to lib/pangea/learning_settings/pages/settings_learning_view.dart index c30d06709..ee6c6e26e 100644 --- a/lib/pangea/pages/settings_learning/settings_learning_view.dart +++ b/lib/pangea/learning_settings/pages/settings_learning_view.dart @@ -6,12 +6,12 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/country_picker_tile.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/language_tile.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/p_settings_switch_list_tile.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/country_picker_tile.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/language_tile.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/repo/language_repo.dart b/lib/pangea/learning_settings/repo/language_repo.dart similarity index 70% rename from lib/pangea/repo/language_repo.dart rename to lib/pangea/learning_settings/repo/language_repo.dart index 22103edc5..f8a6ff920 100644 --- a/lib/pangea/repo/language_repo.dart +++ b/lib/pangea/learning_settings/repo/language_repo.dart @@ -5,11 +5,11 @@ import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../network/requests.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import '../../common/network/requests.dart'; class LanguageRepo { static Future> fetchLanguages() async { diff --git a/lib/pangea/utils/country_display.dart b/lib/pangea/learning_settings/utils/country_display.dart similarity index 100% rename from lib/pangea/utils/country_display.dart rename to lib/pangea/learning_settings/utils/country_display.dart diff --git a/lib/pangea/controllers/language_list_controller.dart b/lib/pangea/learning_settings/utils/language_list_util.dart similarity index 89% rename from lib/pangea/controllers/language_list_controller.dart rename to lib/pangea/learning_settings/utils/language_list_util.dart index f2daf6ffe..319b64eaa 100644 --- a/lib/pangea/controllers/language_list_controller.dart +++ b/lib/pangea/learning_settings/utils/language_list_util.dart @@ -3,11 +3,11 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/repo/language_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../utils/shared_prefs.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/repo/language_repo.dart'; +import 'shared_prefs.dart'; class PangeaLanguage { PangeaLanguage() { diff --git a/lib/pangea/utils/shared_prefs.dart b/lib/pangea/learning_settings/utils/shared_prefs.dart similarity index 100% rename from lib/pangea/utils/shared_prefs.dart rename to lib/pangea/learning_settings/utils/shared_prefs.dart diff --git a/lib/pangea/widgets/user_settings/country_picker_tile.dart b/lib/pangea/learning_settings/widgets/country_picker_tile.dart similarity index 81% rename from lib/pangea/widgets/user_settings/country_picker_tile.dart rename to lib/pangea/learning_settings/widgets/country_picker_tile.dart index f0773e47d..b4b24048c 100644 --- a/lib/pangea/widgets/user_settings/country_picker_tile.dart +++ b/lib/pangea/learning_settings/widgets/country_picker_tile.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; import 'package:country_picker/country_picker.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/country_display.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/country_display.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../models/user_model.dart'; +import '../../user/models/user_model.dart'; class CountryPickerTile extends StatelessWidget { final SettingsLearningController learningController; diff --git a/lib/pangea/widgets/flag.dart b/lib/pangea/learning_settings/widgets/flag.dart similarity index 100% rename from lib/pangea/widgets/flag.dart rename to lib/pangea/learning_settings/widgets/flag.dart diff --git a/lib/pangea/widgets/user_settings/language_tile.dart b/lib/pangea/learning_settings/widgets/language_tile.dart similarity index 91% rename from lib/pangea/widgets/user_settings/language_tile.dart rename to lib/pangea/learning_settings/widgets/language_tile.dart index 3d6a8b5fa..69536d73b 100644 --- a/lib/pangea/widgets/user_settings/language_tile.dart +++ b/lib/pangea/learning_settings/widgets/language_tile.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../flag.dart'; +import 'flag.dart'; //PTODO - move this to settings_learning_view.dart and make callback a setState diff --git a/lib/pangea/widgets/user_settings/p_language_dialog.dart b/lib/pangea/learning_settings/widgets/p_language_dialog.dart similarity index 93% rename from lib/pangea/widgets/user_settings/p_language_dialog.dart rename to lib/pangea/learning_settings/widgets/p_language_dialog.dart index 83c0faf7c..47e3d947c 100644 --- a/lib/pangea/widgets/user_settings/p_language_dialog.dart +++ b/lib/pangea/learning_settings/widgets/p_language_dialog.dart @@ -5,11 +5,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import '../../../config/themes.dart'; import '../../../widgets/matrix.dart'; diff --git a/lib/pangea/widgets/user_settings/p_language_dropdown.dart b/lib/pangea/learning_settings/widgets/p_language_dropdown.dart similarity index 96% rename from lib/pangea/widgets/user_settings/p_language_dropdown.dart rename to lib/pangea/learning_settings/widgets/p_language_dropdown.dart index 15e01b9c0..8c2b908cc 100644 --- a/lib/pangea/widgets/user_settings/p_language_dropdown.dart +++ b/lib/pangea/learning_settings/widgets/p_language_dropdown.dart @@ -5,9 +5,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/enum/l2_support_enum.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import '../../widgets/flag.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'flag.dart'; class PLanguageDropdown extends StatefulWidget { final List languages; diff --git a/lib/pangea/widgets/user_settings/p_question_container.dart b/lib/pangea/learning_settings/widgets/p_question_container.dart similarity index 100% rename from lib/pangea/widgets/user_settings/p_question_container.dart rename to lib/pangea/learning_settings/widgets/p_question_container.dart diff --git a/lib/pangea/widgets/user_settings/p_settings_switch_list_tile.dart b/lib/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart similarity index 96% rename from lib/pangea/widgets/user_settings/p_settings_switch_list_tile.dart rename to lib/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart index 7bad9b650..2916e7ab2 100644 --- a/lib/pangea/widgets/user_settings/p_settings_switch_list_tile.dart +++ b/lib/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class ProfileSettingsSwitchListTile extends StatefulWidget { final bool defaultValue; diff --git a/lib/pangea/pages/sign_up/login_or_signup_view.dart b/lib/pangea/login/pages/login_or_signup_view.dart similarity index 81% rename from lib/pangea/pages/sign_up/login_or_signup_view.dart rename to lib/pangea/login/pages/login_or_signup_view.dart index 62e90043d..62274d3c1 100644 --- a/lib/pangea/pages/sign_up/login_or_signup_view.dart +++ b/lib/pangea/login/pages/login_or_signup_view.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; class LoginOrSignupView extends StatelessWidget { const LoginOrSignupView({super.key}); diff --git a/lib/pangea/pages/sign_up/pangea_login_scaffold.dart b/lib/pangea/login/pages/pangea_login_scaffold.dart similarity index 100% rename from lib/pangea/pages/sign_up/pangea_login_scaffold.dart rename to lib/pangea/login/pages/pangea_login_scaffold.dart diff --git a/lib/pangea/pages/sign_up/pangea_login_view.dart b/lib/pangea/login/pages/pangea_login_view.dart similarity index 90% rename from lib/pangea/pages/sign_up/pangea_login_view.dart rename to lib/pangea/login/pages/pangea_login_view.dart index 602a73d89..4b7bf32d1 100644 --- a/lib/pangea/pages/sign_up/pangea_login_view.dart +++ b/lib/pangea/login/pages/pangea_login_view.dart @@ -3,10 +3,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/pages/login/login.dart'; -import 'package:fluffychat/pangea/pages/connect/p_sso_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_scaffold.dart'; -import 'package:fluffychat/pangea/widgets/common/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; +import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; class PangeaLoginView extends StatelessWidget { final LoginController controller; diff --git a/lib/pangea/pages/sign_up/signup.dart b/lib/pangea/login/pages/signup.dart similarity index 95% rename from lib/pangea/pages/sign_up/signup.dart rename to lib/pangea/login/pages/signup.dart index 9574d469e..0036f492f 100644 --- a/lib/pangea/pages/sign_up/signup.dart +++ b/lib/pangea/login/pages/signup.dart @@ -3,10 +3,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix_api_lite/model/matrix_exception.dart'; -import 'package:fluffychat/pangea/pages/sign_up/signup_view.dart'; -import 'package:fluffychat/pangea/pages/sign_up/signup_with_email_view.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/login/pages/signup_view.dart'; +import 'package:fluffychat/pangea/login/pages/signup_with_email_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/pages/sign_up/signup_view.dart b/lib/pangea/login/pages/signup_view.dart similarity index 78% rename from lib/pangea/pages/sign_up/signup_view.dart rename to lib/pangea/login/pages/signup_view.dart index ff6fbeba5..c6263a5ae 100644 --- a/lib/pangea/pages/sign_up/signup_view.dart +++ b/lib/pangea/login/pages/signup_view.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; -import 'package:fluffychat/pangea/pages/connect/p_sso_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_scaffold.dart'; -import 'package:fluffychat/pangea/widgets/common/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; +import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'signup.dart'; class SignupPageView extends StatelessWidget { diff --git a/lib/pangea/pages/sign_up/signup_with_email_view.dart b/lib/pangea/login/pages/signup_with_email_view.dart similarity index 88% rename from lib/pangea/pages/sign_up/signup_with_email_view.dart rename to lib/pangea/login/pages/signup_with_email_view.dart index 5bf5d9bcf..6016dfb19 100644 --- a/lib/pangea/pages/sign_up/signup_with_email_view.dart +++ b/lib/pangea/login/pages/signup_with_email_view.dart @@ -4,10 +4,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_scaffold.dart'; -import 'package:fluffychat/pangea/widgets/common/pangea_logo_svg.dart'; -import 'package:fluffychat/pangea/widgets/signup/tos_checkbox.dart'; +import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; +import 'package:fluffychat/pangea/login/widgets/tos_checkbox.dart'; import 'signup.dart'; class SignupWithEmailView extends StatelessWidget { diff --git a/lib/pangea/pages/sign_up/user_settings.dart b/lib/pangea/login/pages/user_settings.dart similarity index 93% rename from lib/pangea/pages/sign_up/user_settings.dart rename to lib/pangea/login/pages/user_settings.dart index 749613d01..c7b70cf7c 100644 --- a/lib/pangea/pages/sign_up/user_settings.dart +++ b/lib/pangea/login/pages/user_settings.dart @@ -7,12 +7,12 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/pages/sign_up/user_settings_view.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; +import 'package:fluffychat/pangea/login/pages/user_settings_view.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/pages/sign_up/user_settings_view.dart b/lib/pangea/login/pages/user_settings_view.dart similarity index 93% rename from lib/pangea/pages/sign_up/user_settings_view.dart rename to lib/pangea/login/pages/user_settings_view.dart index d23577afd..ba3441066 100644 --- a/lib/pangea/pages/sign_up/user_settings_view.dart +++ b/lib/pangea/login/pages/user_settings_view.dart @@ -4,11 +4,11 @@ import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/pages/sign_up/pangea_login_scaffold.dart'; -import 'package:fluffychat/pangea/pages/sign_up/user_settings.dart'; -import 'package:fluffychat/pangea/widgets/signup/tos_checkbox.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/pangea/login/pages/user_settings.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; +import 'package:fluffychat/pangea/login/widgets/tos_checkbox.dart'; class UserSettingsView extends StatelessWidget { final UserSettingsState controller; diff --git a/lib/pangea/utils/sso_login_action.dart b/lib/pangea/login/utils/sso_login_action.dart similarity index 93% rename from lib/pangea/utils/sso_login_action.dart rename to lib/pangea/login/utils/sso_login_action.dart index bfba5b996..f992e5c79 100644 --- a/lib/pangea/utils/sso_login_action.dart +++ b/lib/pangea/login/utils/sso_login_action.dart @@ -8,8 +8,8 @@ import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/pages/sign_up/full_width_button.dart b/lib/pangea/login/widgets/full_width_button.dart similarity index 98% rename from lib/pangea/pages/sign_up/full_width_button.dart rename to lib/pangea/login/widgets/full_width_button.dart index 7682c21a1..831218279 100644 --- a/lib/pangea/pages/sign_up/full_width_button.dart +++ b/lib/pangea/login/widgets/full_width_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; class FullWidthButton extends StatefulWidget { final String title; diff --git a/lib/pangea/pages/connect/p_sso_button.dart b/lib/pangea/login/widgets/p_sso_button.dart similarity index 93% rename from lib/pangea/pages/connect/p_sso_button.dart rename to lib/pangea/login/widgets/p_sso_button.dart index c23e547da..8a80cef05 100644 --- a/lib/pangea/pages/connect/p_sso_button.dart +++ b/lib/pangea/login/widgets/p_sso_button.dart @@ -5,9 +5,9 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:matrix/matrix_api_lite/model/matrix_exception.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart'; -import 'package:fluffychat/pangea/pages/sign_up/full_width_button.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/sso_login_action.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/login/utils/sso_login_action.dart'; +import 'package:fluffychat/pangea/login/widgets/full_width_button.dart'; import 'package:fluffychat/widgets/matrix.dart'; enum SSOProvider { google, apple } diff --git a/lib/pangea/widgets/signup/tos_checkbox.dart b/lib/pangea/login/widgets/tos_checkbox.dart similarity index 100% rename from lib/pangea/widgets/signup/tos_checkbox.dart rename to lib/pangea/login/widgets/tos_checkbox.dart diff --git a/lib/pangea/matrix_event_wrappers/construct_analytics_event.dart b/lib/pangea/matrix_event_wrappers/construct_analytics_event.dart deleted file mode 100644 index 0dd820676..000000000 --- a/lib/pangea/matrix_event_wrappers/construct_analytics_event.dart +++ /dev/null @@ -1,60 +0,0 @@ -// import 'package:fluffychat/pangea/models/constructs_analytics_model.dart'; -// import 'package:flutter/material.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../constants/pangea_event_types.dart'; - -// class ConstructEvent { -// late Event _event; -// ConstructUses? _contentCache; - -// ConstructEvent({required Event event}) { -// if (event.type != PangeaEventTypes.vocab) { -// throw Exception( -// "${event.type} should not be used to make a StudentAnalyticsEvent", -// ); -// } -// _event = event; -// } - -// Event get event => _event; - -// ConstructUses get content { -// _contentCache ??= ConstructUses.fromJson(event.content); -// if (_contentCache!.lemma.isEmpty) { -// _contentCache!.lemma = event.stateKey!; -// } -// return _contentCache!; -// } - -// void addAll(List uses) { -// for (final use in uses) { -// if (content.uses.any((element) => element.id == use.id)) { -// continue; -// } -// debugPrint("${use.toJson()}"); -// content.uses.add(use); -// } -// event.content = content.toJson(); -// } - -// Future removeEdittedUses( -// List removeIds, -// Client client, -// ) async { -// _contentCache ??= ConstructUses.fromJson(event.content); -// if (_contentCache == null || _event.stateKey == null) return; -// final previousLength = _contentCache!.uses.length; -// _contentCache!.uses.removeWhere( -// (element) => removeIds.contains(element.msgId), -// ); -// if (previousLength > _contentCache!.uses.length) { -// await client.setRoomStateWithKey( -// _event.room.id, -// _event.type, -// _event.stateKey!, -// _contentCache!.toJson(), -// ); -// } -// } -// } diff --git a/lib/pangea/models/analytics/chart_analytics_model.dart b/lib/pangea/models/analytics/chart_analytics_model.dart deleted file mode 100644 index 4a9f278be..000000000 --- a/lib/pangea/models/analytics/chart_analytics_model.dart +++ /dev/null @@ -1,149 +0,0 @@ -// import 'dart:developer'; - -// import 'package:fluffychat/pangea/enum/time_span.dart'; -// import 'package:fluffychat/pangea/models/analytics/summary_analytics_model.dart'; -// import 'package:flutter/foundation.dart'; - -// import '../../enum/use_type.dart'; - -// class TimeSeriesTotals { -// int ta; -// int ga; -// int wa; -// int un; - -// int get all => ta + ga + wa + un; - -// TimeSeriesTotals({ -// required this.ta, -// required this.ga, -// required this.wa, -// required this.un, -// }); - -// Map toJson() => { -// UseType.ta.string: ta, -// UseType.ga.string: ga, -// UseType.wa.string: wa, -// UseType.un.string: un, -// }; - -// factory TimeSeriesTotals.fromJson(json) => TimeSeriesTotals( -// ta: json[UseType.ta.string], -// ga: json[UseType.ga.string], -// wa: json[UseType.wa.string], -// un: json[UseType.un.string], -// ); - -// static get empty => TimeSeriesTotals(ta: 0, ga: 0, wa: 0, un: 0); - -// int get taPercent => all != 0 ? (ta / all * 100).round() : 0; -// int get gaPercent => all != 0 ? (ga / all * 100).round() : 0; -// int get waPercent => all != 0 ? (wa / all * 100).round() : 0; -// int get unPercent => all != 0 ? (un / all * 100).round() : 0; - -// void increment(RecentMessageRecord msg) { -// switch (msg.useType) { -// case UseType.ta: -// ta += 1; -// break; -// case UseType.wa: -// wa += 1; -// break; -// case UseType.ga: -// ga += 1; -// break; -// case UseType.un: -// un += 1; -// break; -// default: -// debugger(when: kDebugMode); -// debugPrint("message with bad type ${msg.toJson()}"); -// } -// } -// } - -// class TimeSeriesInterval { -// DateTime start; -// DateTime end; -// TimeSeriesTotals totals; - -// TimeSeriesInterval({ -// required this.start, -// required this.end, -// required this.totals, -// }); - -// Map toJson() => { -// "strt": start.toIso8601String(), -// "end": end.toIso8601String(), -// "totals": totals.toJson(), -// }; - -// factory TimeSeriesInterval.fromJson(json) => TimeSeriesInterval( -// start: DateTime.parse(json["strt"]), -// end: DateTime.parse(json["end"]), -// totals: TimeSeriesTotals.fromJson(json["totals"]), -// ); -// } - -// class ChartAnalyticsModel { -// final TimeSpan timeSpan; -// final TimeSeriesTotals totals = TimeSeriesTotals.empty; -// final List msgs; -// final String? chatId; - -// late DateTime fetchedAt; -// late List timeSeries; -// DateTime? lastMessage; - -// ChartAnalyticsModel({ -// required this.timeSpan, -// required this.msgs, -// this.chatId, -// }) { -// fetchedAt = DateTime.now(); -// calculate(); -// } - -// bool get isEmpty => (totals.ga + totals.ta + totals.wa == 0); - -// void calculate() { -// final Map intervals = timeSpan.emptyIntervals; -// final DateTime cutOff = timeSpan.cutOffDate; - -// final filtered = msgs.where( -// (msg) => -// (chatId == null || msg.chatId == chatId) && msg.time.isAfter(cutOff), -// ); - -// //remove msgs with duplicate ids -// final Map unique = {}; -// for (final msg in filtered) { -// if (unique[msg.eventId] == null) { -// unique[msg.eventId] = msg; -// } -// } - -// for (final msg in unique.values) { -// final String key = timeSpan.getMapKey(msg.time); -// if (intervals[key] == null) { -// debugger(when: kDebugMode); -// } else { -// intervals[key]!.totals.increment(msg); -// totals.increment(msg); -// lastMessage = msg.time; -// } -// } -// timeSeries = intervals.values.toList().reversed.toList(); -// } - -// DateTime? get lastMessageTime { -// if (msgs.isEmpty) { -// return null; -// } -// return msgs.map((msg) => msg.time).reduce( -// (compare, recent) => compare.isAfter(recent) ? compare : recent, -// ); -// } -// } diff --git a/lib/pangea/models/chat_topic_model.dart b/lib/pangea/models/chat_topic_model.dart deleted file mode 100644 index c83e3f7c6..000000000 --- a/lib/pangea/models/chat_topic_model.dart +++ /dev/null @@ -1,124 +0,0 @@ -import 'lemma.dart'; - -class ChatTopic { - String name; - String description; - String langCode; - String languageLevel; - List discussionPrompts; - List vocab; - - ChatTopic({ - this.name = "", - this.description = "", - required this.langCode, - this.languageLevel = "Pre-A1", - this.discussionPrompts = const [], - this.vocab = const [], - }); - - factory ChatTopic.fromJson(Map json) { - return ChatTopic( - name: json['name'], - description: json['description'], - langCode: json['lang_code'], - languageLevel: json['language_level'], - discussionPrompts: (json['discussion_prompts'] as Iterable) - .map((e) => DiscussionPrompt.fromJson(e)) - .toList(), - vocab: (json['vocab'] as Iterable) - .map((e) => Lemma.fromJson(e)) - .toList(), - ); - } - - Map toJson() { - return { - 'name': name, - 'description': description, - 'lang_code': langCode, - 'language_level': languageLevel, - 'discussion_prompts': discussionPrompts, - 'vocab': vocab, - }; - } - - static ChatTopic get empty => ChatTopic( - name: '', - description: '', - langCode: '', - languageLevel: '', - discussionPrompts: [], - vocab: [], - ); - - /// set equals operator - @override - bool operator ==(Object other) => - identical(this, other) || - other is ChatTopic && - runtimeType == other.runtimeType && - name == other.name && - description == other.description && - langCode == other.langCode && - languageLevel == other.languageLevel && - discussionPrompts == other.discussionPrompts && - vocab == other.vocab; - - /// set hashcode - @override - int get hashCode => - name.hashCode ^ - description.hashCode ^ - langCode.hashCode ^ - languageLevel.hashCode ^ - discussionPrompts.hashCode ^ - vocab.hashCode; - - /// mock data - static ChatTopic get mockTopic => ChatTopic( - name: 'Mock Topic', - description: 'Mock Description', - langCode: 'en', - languageLevel: 'A1', - discussionPrompts: [ - DiscussionPrompt(text: 'Mock Prompt 1'), - DiscussionPrompt(text: 'Mock Prompt 2'), - ], - vocab: [ - Lemma(text: 'Mock Lemma 1', saveVocab: true, form: 'Mock Form 1'), - Lemma(text: 'Mock Lemma 2', saveVocab: true, form: 'Mock Form 2'), - ], - ); -} - -/// just one parameter, text -class DiscussionPrompt { - final String text; - - DiscussionPrompt({required this.text}); - - factory DiscussionPrompt.fromJson(Map json) { - return DiscussionPrompt( - text: json['text'], - ); - } - - Map toJson() { - return { - 'text': text, - }; - } - - /// set equals operator - @override - bool operator ==(Object other) => - identical(this, other) || - other is DiscussionPrompt && - runtimeType == other.runtimeType && - text == other.text; - - /// set hashcode - @override - int get hashCode => text.hashCode; -} diff --git a/lib/pangea/models/choreo_init_response.model.dart b/lib/pangea/models/choreo_init_response.model.dart deleted file mode 100644 index 45274bca5..000000000 --- a/lib/pangea/models/choreo_init_response.model.dart +++ /dev/null @@ -1,85 +0,0 @@ -class ChoreoResponseModel { - GrammarData? grammarData; - String? detectedLang; - String? route; - String? feedbackMessage; - int? payloadId; - ChoreoResponseModel({ - this.grammarData, - this.detectedLang, - this.route, - this.feedbackMessage, - }); - - ChoreoResponseModel.fromJson(Map json) { - grammarData = json['grammar_data'] != null - ? GrammarData.fromJson(json['grammar_data']) - : null; - detectedLang = json['detected_lang']; - route = json['route']; - feedbackMessage = json['feedback_message']; - payloadId = json['payload_id']; - } - - Map toJson() { - final Map data = {}; - if (grammarData != null) { - data['grammar_data'] = grammarData!.toJson(); - } - data['detected_lang'] = detectedLang; - data['route'] = route; - data['feedback_message'] = feedbackMessage; - return data; - } -} - -class GrammarData { - String? text; - List? tokens; - double? slor; - - GrammarData({this.text, this.tokens, this.slor}); - - GrammarData.fromJson(Map json) { - text = json['text']; - if (json['tokens'] != null) { - tokens = []; - json['tokens'].forEach((v) { - tokens!.add(Tokens.fromJson(v)); - }); - } - slor = json['slor']; - } - - Map toJson() { - final Map data = {}; - data['text'] = text; - if (tokens != null) { - data['tokens'] = tokens!.map((v) => v.toJson()).toList(); - } - data['slor'] = slor; - return data; - } -} - -class Tokens { - String? token; - int? category; - String? feedbackMessage; - - Tokens({this.token, this.category, this.feedbackMessage}); - - Tokens.fromJson(Map json) { - token = json['token']; - category = json['category']; - feedbackMessage = json['feedback_message']; - } - - Map toJson() { - final Map data = {}; - data['token'] = token; - data['category'] = category; - data['feedback_message'] = feedbackMessage; - return data; - } -} diff --git a/lib/pangea/models/class_email_invite_model.dart b/lib/pangea/models/class_email_invite_model.dart deleted file mode 100644 index 31d6b2472..000000000 --- a/lib/pangea/models/class_email_invite_model.dart +++ /dev/null @@ -1,47 +0,0 @@ -class PClassEmailInviteModel { - List? data; - String? pangeaClassRoomId; - String? teacherName; - - PClassEmailInviteModel({this.data, this.pangeaClassRoomId, this.teacherName}); - - PClassEmailInviteModel.fromJson(Map json) { - if (json['data'] != null) { - data = []; - json['data'].forEach((v) { - data!.add(ClassEmailInviteData.fromJson(v)); - }); - } - pangeaClassRoomId = json['pangea_class_room_id']; - teacherName = json['teacher_name']; - } - - Map toJson() { - final Map data = {}; - if (this.data != null) { - data['data'] = this.data!.map((v) => v.toJson()).toList(); - } - data['pangea_class_room_id'] = pangeaClassRoomId; - data['teacher_name'] = teacherName; - return data; - } -} - -class ClassEmailInviteData { - String? name; - String? email; - - ClassEmailInviteData({this.name, this.email}); - - ClassEmailInviteData.fromJson(Map json) { - name = json['name']; - email = json['email']; - } - - Map toJson() { - final Map data = {}; - data['name'] = name; - data['email'] = email; - return data; - } -} diff --git a/lib/pangea/models/headwords.dart b/lib/pangea/models/headwords.dart deleted file mode 100644 index b9cd02cd8..000000000 --- a/lib/pangea/models/headwords.dart +++ /dev/null @@ -1,195 +0,0 @@ -// import 'dart:convert'; -// import 'dart:developer'; - -// import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -// import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -// import 'package:flutter/foundation.dart'; -// import 'package:flutter/services.dart'; - -// import '../enum/vocab_proficiency_enum.dart'; - -// class VocabHeadwords { -// List lists; - -// VocabHeadwords({ -// required this.lists, -// }); - -// /// in json parameter, keys are the names of the VocabList -// /// values are the words in the VocabList -// factory VocabHeadwords.fromJson(Map json) { -// final List lists = []; -// for (final entry in json.entries) { -// lists.add( -// VocabList( -// name: entry.key, -// lemmas: (entry.value as Iterable).cast().toList(), -// ), -// ); -// } -// return VocabHeadwords(lists: lists); -// } - -// static Future getHeadwords(String langCode) async { -// final String data = -// await rootBundle.loadString('${langCode}_headwords.json'); -// final decoded = jsonDecode(data); -// final VocabHeadwords headwords = VocabHeadwords.fromJson(decoded); -// return headwords; -// } -// } - -// class VocabList { -// String name; - -// /// key is lemma -// Map words = {}; - -// VocabList({ -// required this.name, -// required List lemmas, -// }) { -// for (final lemma in lemmas) { -// words[lemma] = VocabTotals.newTotals; -// } -// } - -// void addVocabUse(String lemma, List use) { -// words[lemma.toUpperCase()]?.addVocabUseBasedOnUseType(use); -// } - -// ListTotals calculuateTotals() { -// final ListTotals listTotals = ListTotals.empty; -// for (final word in words.entries) { -// debugger(when: kDebugMode && word.key == "baloncesto".toLowerCase()); -// listTotals.addByType(word.value.proficiencyLevel); -// } -// return listTotals; -// } -// } - -// class ListTotals { -// int low; -// int medium; -// int high; -// int unknown; - -// ListTotals({ -// required this.low, -// required this.medium, -// required this.high, -// required this.unknown, -// }); - -// static get empty => ListTotals(low: 0, medium: 0, high: 0, unknown: 0); - -// void addByType(VocabProficiencyEnum prof) { -// switch (prof) { -// case VocabProficiencyEnum.low: -// low++; -// break; -// case VocabProficiencyEnum.medium: -// medium++; -// break; -// case VocabProficiencyEnum.high: -// high++; -// break; -// case VocabProficiencyEnum.unk: -// unknown++; -// break; -// } -// } -// } - -// class VocabTotals { -// num ga; - -// num wa; - -// num corIt; - -// num incIt; - -// num ignIt; - -// VocabTotals({ -// required this.ga, -// required this.wa, -// required this.corIt, -// required this.incIt, -// required this.ignIt, -// }); - -// num get calculateEstimatedVocabProficiency { -// const num gaWeight = -1; -// const num waWeight = 1; -// const num corItWeight = 0.5; -// const num incItWeight = -0.5; -// const num ignItWeight = 0.1; - -// final num gaScore = ga * gaWeight; -// final num waScore = wa * waWeight; -// final num corItScore = corIt * corItWeight; -// final num incItScore = incIt * incItWeight; -// final num ignItScore = ignIt * ignItWeight; - -// final num totalScore = -// gaScore + waScore + corItScore + incItScore + ignItScore; - -// return totalScore; -// } - -// VocabProficiencyEnum get proficiencyLevel => -// VocabProficiencyUtil.proficiency(calculateEstimatedVocabProficiency); - -// static VocabTotals get newTotals { -// return VocabTotals( -// ga: 0, -// wa: 0, -// corIt: 0, -// incIt: 0, -// ignIt: 0, -// ); -// } - -// void addVocabUseBasedOnUseType(List uses) { -// for (final use in uses) { -// switch (use.useType) { -// case ConstructUseTypeEnum.ga: -// ga++; -// break; -// case ConstructUseTypeEnum.wa: -// wa++; -// break; -// case ConstructUseTypeEnum.corIt: -// corIt++; -// break; -// case ConstructUseTypeEnum.incIt: -// incIt++; -// break; -// case ConstructUseTypeEnum.ignIt: -// ignIt++; -// break; -// //TODO - these shouldn't be counted as such -// case ConstructUseTypeEnum.ignIGC: -// ignIt++; -// break; -// case ConstructUseTypeEnum.corIGC: -// corIt++; -// break; -// case ConstructUseTypeEnum.incIGC: -// incIt++; -// break; -// //TODO if we bring back Headwords then we need to add these -// case ConstructUseTypeEnum.corPA: -// break; -// case ConstructUseTypeEnum.incPA: -// break; -// case ConstructUseTypeEnum.unk: -// break; -// case ConstructUseTypeEnum.ignPA: -// break; -// } -// } -// } -// } diff --git a/lib/pangea/models/pangea_text_tap.dart b/lib/pangea/models/pangea_text_tap.dart deleted file mode 100644 index 013082ce6..000000000 --- a/lib/pangea/models/pangea_text_tap.dart +++ /dev/null @@ -1,20 +0,0 @@ -class PTextTapModel { - late int cursorOffset; - late String word; - late bool isHighLighted; - late int textAtOffSet; - PTextTapModel({ - required this.cursorOffset, - required this.isHighLighted, - required this.textAtOffSet, - required this.word, - }); - toJson() { - return { - 'cursorOffset': cursorOffset, - 'word': word, - 'isHighlighted': isHighLighted, - 'textAtOffSet': textAtOffSet, - }; - } -} diff --git a/lib/pangea/models/removed_translation.dart b/lib/pangea/models/removed_translation.dart deleted file mode 100644 index 6887476fe..000000000 --- a/lib/pangea/models/removed_translation.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'it_response_model.dart'; - -class RemovedTranslation { - List lastSelectedContinuance = []; - Continuance? removedContinuance; -} diff --git a/lib/pangea/models/widget_measurement.dart b/lib/pangea/models/widget_measurement.dart deleted file mode 100644 index 2161af0b2..000000000 --- a/lib/pangea/models/widget_measurement.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -class WidgetMeasurements { - static final Map _fromKey = {}; - static dispose() => _fromKey.clear(); - static WidgetMeasurements defaultFromKey(String key) { - if (_fromKey[key] == null) { - _fromKey[key] = WidgetMeasurements( - position: const Offset(0, 0), - size: const Size(0, 0), - uid: key, - ); - } - - return _fromKey[key]!; - } - - Offset? position; - Size? size; - String? uid; - WidgetMeasurements({ - required this.position, - required this.size, - required this.uid, - }); - - toJson() => {'position': position, 'size': size, 'uid': uid}; -} diff --git a/lib/pangea/network/p_api_exception.dart b/lib/pangea/network/p_api_exception.dart deleted file mode 100644 index 66c54dd51..000000000 --- a/lib/pangea/network/p_api_exception.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:flutter/foundation.dart'; - -import '../utils/p_toast.dart'; - -class ApiException { - static exception({required int statusCode, required String body}) { - switch (statusCode) { - case 400: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg(msg: "Unknown error accrued", success: false); - return; - case 401: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Unauthorized access", - success: false, - ); - - return; - case 403: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Don't have permissions!", - success: false, - ); - return; - case 500: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Internal Server Error", - success: false, - ); - return; - case 502: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Bad Gateway", - success: false, - ); - - return; - case 503: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Service Unavailable", - success: false, - ); - - return; - case 504: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Exception: Gateway timeout error!", - success: false, - ); - - return; - default: - if (kDebugMode) { - debugPrint(body); - debugPrint(statusCode.toString()); - } - PToastController.toastMsg( - msg: "Unknown exception accrued!", - success: false, - ); - return; - } - } -} diff --git a/lib/pangea/pages/analytics/analytics_language_button.dart b/lib/pangea/pages/analytics/analytics_language_button.dart deleted file mode 100644 index 306d178e4..000000000 --- a/lib/pangea/pages/analytics/analytics_language_button.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/pangea/models/language_model.dart'; - -class AnalyticsLanguageButton extends StatelessWidget { - final List languages; - final LanguageModel value; - final void Function(LanguageModel) onChange; - const AnalyticsLanguageButton({ - super.key, - required this.value, - required this.onChange, - required this.languages, - }); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - tooltip: L10n.of(context).changeAnalyticsLanguage, - initialValue: value, - onSelected: (LanguageModel? lang) { - if (lang == null) { - debugPrint("when is lang null?"); - return; - } - onChange(lang); - }, - itemBuilder: (BuildContext context) => - languages.map((LanguageModel lang) { - return PopupMenuItem( - value: lang, - child: Text(lang.getDisplayName(context) ?? lang.langCode), - ); - }).toList(), - child: TextButton.icon( - label: Text( - value.getDisplayName(context) ?? value.langCode, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - ), - ), - icon: Icon( - Icons.language_outlined, - color: Theme.of(context).colorScheme.onSurface, - ), - onPressed: null, - ), - ); - } -} diff --git a/lib/pangea/pages/analytics/analytics_view_button.dart b/lib/pangea/pages/analytics/analytics_view_button.dart deleted file mode 100644 index 7414ebd14..000000000 --- a/lib/pangea/pages/analytics/analytics_view_button.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/pangea/enum/bar_chart_view_enum.dart'; - -class AnalyticsViewButton extends StatelessWidget { - final BarChartViewSelection value; - final void Function(BarChartViewSelection) onChange; - const AnalyticsViewButton({ - super.key, - required this.value, - required this.onChange, - }); - - @override - Widget build(BuildContext context) { - return Flexible( - child: PopupMenuButton( - tooltip: L10n.of(context).changeAnalyticsView, - initialValue: value, - onSelected: (BarChartViewSelection? view) { - if (view == null) { - debugPrint("when is view null?"); - return; - } - onChange(view); - }, - itemBuilder: (BuildContext context) => BarChartViewSelection.values - .map>( - (BarChartViewSelection view) { - return PopupMenuItem( - value: view, - child: Text( - view.string(context), - ), - ); - }).toList(), - child: TextButton.icon( - label: Text( - value.string(context), - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - ), - ), - icon: Icon( - value.icon, - color: Theme.of(context).colorScheme.onSurface, - ), - onPressed: null, - ), - ), - ); - } -} diff --git a/lib/pangea/pages/analytics/bar_chart_card.dart b/lib/pangea/pages/analytics/bar_chart_card.dart deleted file mode 100644 index 8644aa378..000000000 --- a/lib/pangea/pages/analytics/bar_chart_card.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fl_chart/fl_chart.dart'; - -class BarChartCard extends StatelessWidget { - const BarChartCard({ - super.key, - required this.barChart, - required this.legend, - required this.loadingData, - }); - - final BarChart? barChart; - final Widget legend; - final bool loadingData; - - @override - Widget build(BuildContext context) { - return Card( - elevation: 0, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - color: Theme.of(context).scaffoldBackgroundColor, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 14), - Expanded( - child: loadingData || barChart == null - ? const Center( - child: CircularProgressIndicator(), - ) - : barChart!, - ), - const SizedBox(height: 10), - legend, - const SizedBox(height: 6), - ], - ), - ), - ); - } -} diff --git a/lib/pangea/pages/analytics/bar_chart_placeholder_data.dart b/lib/pangea/pages/analytics/bar_chart_placeholder_data.dart deleted file mode 100644 index 113d34af1..000000000 --- a/lib/pangea/pages/analytics/bar_chart_placeholder_data.dart +++ /dev/null @@ -1,293 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fl_chart/fl_chart.dart'; - -import '../../enum/use_type.dart'; - -class BarChartPlaceHolderData { - static BarChartRodData randomBarChartRodData( - BuildContext context, - int index, - ) { - // final total = Random().nextInt(100); - // final it = total != 0 ? Random().nextInt(max(total - index, 1)) : 0; - // final igc = total != 0 ? Random().nextInt(max(total - it - index, 1)) : 0; - // // final direct = Random().nextInt(total - it - igc); - // final y1 = it.toDouble(); - // final y2 = y1 + igc.toDouble(); - // final y3 = total.toDouble(); - // final y4 = y3; - const total = 0; - const double y1 = 0; - const double y2 = 0; - const double y3 = 0; - const double y4 = 0; - - return BarChartRodData( - toY: total.toDouble(), - rodStackItems: [ - BarChartRodStackItem(0, y1, UseType.ta.color(context)), - BarChartRodStackItem(y1, y2, UseType.ga.color(context)), - BarChartRodStackItem(y2, y3, UseType.wa.color(context)), - BarChartRodStackItem(y3, y4, UseType.un.color(context)), - ], - borderRadius: BorderRadius.zero, - ); - } - - static List getRandomData(BuildContext context) { - const double barSpace = 16; - - const indices = [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - ]; - - final List barChartGroupData = []; - - indices.asMap().forEach((key, value) { - barChartGroupData.add( - BarChartGroupData( - x: key, - barsSpace: barSpace, - barRods: [ - randomBarChartRodData(context, value), - ], - ), - ); - }); - - return barChartGroupData; - } - - static List getData( - Color dark, - Color normal, - Color light, - ) { - const double barSpace = 16; - - return [ - BarChartGroupData( - x: 0, - barsSpace: barSpace, - barRods: [ - BarChartRodData( - toY: 17, - rodStackItems: [ - BarChartRodStackItem(0, 2, dark), - BarChartRodStackItem(2, 12, normal), - BarChartRodStackItem(12, 17, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 24, - rodStackItems: [ - BarChartRodStackItem(0, 13, dark), - BarChartRodStackItem(13, 14, normal), - BarChartRodStackItem(14, 24, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 23, - rodStackItems: [ - BarChartRodStackItem(0, 6, dark), - BarChartRodStackItem(6, 18, normal), - BarChartRodStackItem(18, 23, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 29, - rodStackItems: [ - BarChartRodStackItem(0, 9, dark), - BarChartRodStackItem(9, 15, normal), - BarChartRodStackItem(15, 29, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 32, - rodStackItems: [ - BarChartRodStackItem(0, 2, dark), - BarChartRodStackItem(2, 17, normal), - BarChartRodStackItem(17, 32, light), - ], - borderRadius: BorderRadius.zero, - ), - ], - ), - BarChartGroupData( - x: 1, - barsSpace: barSpace, - barRods: [ - BarChartRodData( - toY: 31, - rodStackItems: [ - BarChartRodStackItem(0, 11, dark), - BarChartRodStackItem(11, 18, normal), - BarChartRodStackItem(18, 31, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 35, - rodStackItems: [ - BarChartRodStackItem(0, 14, dark), - BarChartRodStackItem(14, 27, normal), - BarChartRodStackItem(27, 35, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 31, - rodStackItems: [ - BarChartRodStackItem(0, 8, dark), - BarChartRodStackItem(8, 24, normal), - BarChartRodStackItem(24, 31, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 15, - rodStackItems: [ - BarChartRodStackItem(0, 6, dark), - BarChartRodStackItem(6, 12, normal), - BarChartRodStackItem(12, 15, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 17, - rodStackItems: [ - BarChartRodStackItem(0, 9, dark), - BarChartRodStackItem(9, 15, normal), - BarChartRodStackItem(15, 17, light), - ], - borderRadius: BorderRadius.zero, - ), - ], - ), - BarChartGroupData( - x: 2, - barsSpace: barSpace, - barRods: [ - BarChartRodData( - toY: 34, - rodStackItems: [ - BarChartRodStackItem(0, 6, dark), - BarChartRodStackItem(6, 23, normal), - BarChartRodStackItem(23, 34, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 32, - rodStackItems: [ - BarChartRodStackItem(0, 7, dark), - BarChartRodStackItem(7, 24, normal), - BarChartRodStackItem(24, 32, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 14, - rodStackItems: [ - BarChartRodStackItem(0, 1, dark), - BarChartRodStackItem(1, 12, normal), - BarChartRodStackItem(12, 14, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 20, - rodStackItems: [ - BarChartRodStackItem(0, 4, dark), - BarChartRodStackItem(4, 15, normal), - BarChartRodStackItem(15, 20, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 24, - rodStackItems: [ - BarChartRodStackItem(0, 4, dark), - BarChartRodStackItem(4, 15, normal), - BarChartRodStackItem(15, 24, light), - ], - borderRadius: BorderRadius.zero, - ), - ], - ), - BarChartGroupData( - x: 3, - barsSpace: barSpace, - barRods: [ - BarChartRodData( - toY: 14, - rodStackItems: [ - BarChartRodStackItem(0, 1, dark), - BarChartRodStackItem(1, 12, normal), - BarChartRodStackItem(12, 14, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 27, - rodStackItems: [ - BarChartRodStackItem(0, 7, dark), - BarChartRodStackItem(7, 25, normal), - BarChartRodStackItem(25, 27, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 29, - rodStackItems: [ - BarChartRodStackItem(0, 6, dark), - BarChartRodStackItem(6, 23, normal), - BarChartRodStackItem(23, 29, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 16, - rodStackItems: [ - BarChartRodStackItem(0, 9, dark), - BarChartRodStackItem(9, 15, normal), - BarChartRodStackItem(15, 16, light), - ], - borderRadius: BorderRadius.zero, - ), - BarChartRodData( - toY: 15, - rodStackItems: [ - BarChartRodStackItem(0, 7, dark), - BarChartRodStackItem(7, 12, normal), - BarChartRodStackItem(12, 15, light), - ], - borderRadius: BorderRadius.zero, - ), - ], - ), - ]; - } -} diff --git a/lib/pangea/pages/analytics/base_analytics.dart b/lib/pangea/pages/analytics/base_analytics.dart deleted file mode 100644 index 408505987..000000000 --- a/lib/pangea/pages/analytics/base_analytics.dart +++ /dev/null @@ -1,234 +0,0 @@ -// import 'dart:async'; - -// import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -// import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -// import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -// import 'package:fluffychat/pangea/models/analytics/analytics_event.dart'; -// import 'package:fluffychat/pangea/models/language_model.dart'; -// import 'package:fluffychat/pangea/pages/analytics/base_analytics_view.dart'; -// import 'package:fluffychat/pangea/pages/analytics/student_analytics/student_analytics.dart'; -// import 'package:flutter/material.dart'; -// import 'package:future_loading_dialog/future_loading_dialog.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../../../widgets/matrix.dart'; -// import '../../controllers/pangea_controller.dart'; -// import '../../enum/bar_chart_view_enum.dart'; -// import '../../enum/time_span.dart'; -// import '../../models/analytics/chart_analytics_model.dart'; - -// class BaseAnalyticsPage extends StatefulWidget { -// final String pageTitle; -// final List tabs; -// final BarChartViewSelection selectedView; - -// final AnalyticsSelected defaultSelected; -// final AnalyticsSelected? alwaysSelected; -// final StudentAnalyticsController? myAnalyticsController; -// final List targetLanguages; - -// BaseAnalyticsPage({ -// super.key, -// required this.pageTitle, -// required this.tabs, -// required this.alwaysSelected, -// required this.defaultSelected, -// required this.selectedView, -// this.myAnalyticsController, -// targetLanguages, -// }) : targetLanguages = (targetLanguages?.isNotEmpty ?? false) -// ? targetLanguages -// : MatrixState.pangeaController.pLanguageStore.targetOptions; - -// @override -// State createState() => BaseAnalyticsController(); -// } - -// class BaseAnalyticsController extends State { -// final PangeaController pangeaController = MatrixState.pangeaController; -// AnalyticsSelected? selected; -// String? currentLemma; -// ChartAnalyticsModel? chartData; -// StreamController refreshStream = StreamController.broadcast(); -// BarChartViewSelection currentView = BarChartViewSelection.messages; - -// bool isSelected(String chatOrStudentId) => chatOrStudentId == selected?.id; - -// Room? get activeSpace { -// if (widget.defaultSelected.type == AnalyticsEntryType.space) { -// return Matrix.of(context).client.getRoomById(widget.defaultSelected.id); -// } -// return null; -// } - -// @override -// void initState() { -// super.initState(); -// currentView = widget.selectedView; -// if (widget.defaultSelected.type == AnalyticsEntryType.student) { -// runFirstRefresh(); -// } -// setChartData(); -// } - -// @override -// void didUpdateWidget(covariant BaseAnalyticsPage oldWidget) { -// // when a user is a parent space's analytics and clicks on a subspace -// super.didUpdateWidget(oldWidget); -// if (oldWidget.defaultSelected.id != widget.defaultSelected.id) { -// setChartData(); -// refreshStream.add(false); -// } -// } - -// Future runFirstRefresh() async { -// final analyticsRooms = -// pangeaController.matrixState.client.allMyAnalyticsRooms; - -// final List analyticsEvent = []; -// for (final analyticsRoom in analyticsRooms) { -// final lastSummaryEvent = await analyticsRoom.getLastAnalyticsEvent( -// PangeaEventTypes.summaryAnalytics, -// Matrix.of(context).client.userID!, -// ); -// final lastConstructEvent = await analyticsRoom.getLastAnalyticsEvent( -// PangeaEventTypes.construct, -// Matrix.of(context).client.userID!, -// ); -// if (lastSummaryEvent != null) { -// analyticsEvent.add(lastSummaryEvent); -// } -// if (lastConstructEvent != null) { -// analyticsEvent.add(lastConstructEvent); -// } -// } - -// if (analyticsEvent.isNotEmpty) return; -// onRefresh(); -// } - -// Future onRefresh() async { -// // postframe callback to avoid calling this function during build -// WidgetsBinding.instance.addPostFrameCallback((_) async { -// await showFutureLoadingDialog( -// context: context, -// future: () async { -// debugPrint("updating analytics"); -// await pangeaController.myAnalytics.updateAnalytics(); -// await setChartData(forceUpdate: true); -// refreshStream.add(true); -// }, -// ); -// }); -// } - -// Future fetchChartData( -// AnalyticsSelected? params, { -// forceUpdate = false, -// }) async { -// final ChartAnalyticsModel data = -// await pangeaController.analytics.getAnalytics( -// defaultSelected: widget.defaultSelected, -// selected: params, -// forceUpdate: forceUpdate, -// ); - -// return data; -// } - -// Future setChartData({forceUpdate = false}) async { -// final ChartAnalyticsModel newData = await fetchChartData( -// selected, -// forceUpdate: forceUpdate, -// ); -// setState(() => chartData = newData); -// } - -// TimeSpan get currentTimeSpan => -// pangeaController.analytics.currentAnalyticsTimeSpan; - -// Future toggleSelection(AnalyticsSelected selectedParam) async { -// setState(() { -// debugPrint("selectedParam.id is ${selectedParam.id}"); -// currentLemma = null; -// selected = isSelected(selectedParam.id) ? null : selectedParam; -// }); -// await setChartData(); -// refreshStream.add(false); -// Future.delayed(Duration.zero, () => setState(() {})); -// } - -// Future toggleTimeSpan(BuildContext context, TimeSpan timeSpan) async { -// await pangeaController.analytics.setCurrentAnalyticsTimeSpan(timeSpan); -// await setChartData(); -// refreshStream.add(false); -// } - -// Future toggleSpaceLang(LanguageModel lang) async { -// await pangeaController.analytics.setCurrentAnalyticsLang(lang); -// await setChartData(); -// refreshStream.add(false); -// } - -// Future toggleView(BarChartViewSelection view) async { -// currentView = view; -// await setChartData(); -// refreshStream.add(false); -// } - -// void setCurrentLemma(String? lemma) { -// currentLemma = lemma; -// setState(() {}); -// refreshStream.add(false); -// } - -// @override -// Widget build(BuildContext context) { -// return BaseAnalyticsView(controller: this); -// } -// } - -// class TabData { -// AnalyticsEntryType type; -// IconData icon; -// List items; -// bool allowNavigateOnSelect; - -// TabData({ -// required this.type, -// required this.items, -// required this.icon, -// this.allowNavigateOnSelect = true, -// }); -// } - -// class TabItem { -// Uri? avatar; -// String displayName; -// String id; - -// TabItem({required this.avatar, required this.displayName, required this.id}); -// } - -enum AnalyticsEntryType { student, room, space, privateChats } - -extension AnalyticsEntryTypeExtension on AnalyticsEntryType { - String get route { - switch (this) { - case AnalyticsEntryType.student: - return 'mylearning'; - case AnalyticsEntryType.space: - return 'analytics'; - default: - throw Exception('No route for $this'); - } - } -} - -class AnalyticsSelected { - String id; - AnalyticsEntryType type; - String displayName; - - AnalyticsSelected(this.id, this.type, this.displayName); -} diff --git a/lib/pangea/pages/analytics/base_analytics_view.dart b/lib/pangea/pages/analytics/base_analytics_view.dart deleted file mode 100644 index 2ca4e4617..000000000 --- a/lib/pangea/pages/analytics/base_analytics_view.dart +++ /dev/null @@ -1,243 +0,0 @@ -// import 'dart:math'; - -// import 'package:fluffychat/pangea/enum/bar_chart_view_enum.dart'; -// import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -// import 'package:fluffychat/pangea/enum/time_span.dart'; -// import 'package:fluffychat/pangea/pages/analytics/analytics_language_button.dart'; -// import 'package:fluffychat/pangea/pages/analytics/analytics_list_tile.dart'; -// import 'package:fluffychat/pangea/pages/analytics/analytics_view_button.dart'; -// import 'package:fluffychat/pangea/pages/analytics/base_analytics.dart'; -// import 'package:fluffychat/pangea/pages/analytics/construct_list.dart'; -// import 'package:fluffychat/pangea/pages/analytics/messages_bar_chart.dart'; -// import 'package:fluffychat/pangea/pages/analytics/time_span_menu_button.dart'; -// import 'package:fluffychat/widgets/layouts/max_width_body.dart'; -// import 'package:flutter/gestures.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; -// import 'package:go_router/go_router.dart'; - -// class BaseAnalyticsView extends StatelessWidget { -// const BaseAnalyticsView({ -// super.key, -// required this.controller, -// }); - -// final BaseAnalyticsController controller; - -// Widget chartView(BuildContext context) { -// switch (controller.currentView) { -// case BarChartViewSelection.messages: -// return MessagesBarChart( -// chartAnalytics: controller.chartData, -// ); -// case BarChartViewSelection.grammar: -// return ConstructList( -// constructType: ConstructTypeEnum.grammar, -// defaultSelected: controller.widget.defaultSelected, -// selected: controller.selected, -// controller: controller, -// pangeaController: controller.pangeaController, -// refreshStream: controller.refreshStream, -// ); -// } -// } - -// @override -// Widget build(BuildContext context) { -// return Scaffold( -// appBar: AppBar( -// centerTitle: true, -// title: RichText( -// text: TextSpan( -// style: TextStyle( -// color: Theme.of(context).textTheme.bodyLarge!.color, -// fontSize: 18, -// fontWeight: FontWeight.w700, -// ), -// children: [ -// TextSpan( -// text: controller.widget.pageTitle, -// style: const TextStyle(decoration: TextDecoration.underline), -// recognizer: TapGestureRecognizer() -// ..onTap = () { -// final String route = -// "/rooms/${controller.widget.defaultSelected.type.route}"; -// context.go(route); -// }, -// ), -// if (controller.activeSpace != null) -// const TextSpan( -// text: " > ", -// ), -// if (controller.activeSpace != null) -// TextSpan( -// text: controller.activeSpace!.getLocalizedDisplayname(), -// ), -// const TextSpan( -// text: " > ", -// ), -// TextSpan( -// text: controller.currentView.string(context), -// ), -// ], -// ), -// overflow: TextOverflow.ellipsis, -// textAlign: TextAlign.center, -// ), -// ), -// body: MaxWidthBody( -// withScrolling: false, -// child: Column( -// children: [ -// Row( -// mainAxisAlignment: MainAxisAlignment.spaceBetween, -// children: [ -// TimeSpanMenuButton( -// value: controller.currentTimeSpan, -// onChange: (TimeSpan value) => -// controller.toggleTimeSpan(context, value), -// ), -// AnalyticsViewButton( -// value: controller.currentView, -// onChange: controller.toggleView, -// ), -// AnalyticsLanguageButton( -// value: controller -// .pangeaController.analytics.currentAnalyticsLang, -// onChange: (lang) => controller.toggleSpaceLang(lang), -// languages: controller.widget.targetLanguages, -// ), -// ], -// ), -// const SizedBox( -// height: 10, -// ), -// Expanded( -// flex: 1, -// child: chartView(context), -// ), -// Expanded( -// flex: 1, -// child: DefaultTabController( -// length: 2, -// child: Column( -// children: [ -// TabBar( -// tabs: [ -// ...controller.widget.tabs.map( -// (tab) => Tab( -// icon: Icon( -// tab.icon, -// color: Theme.of(context) -// .colorScheme -// .onSurfaceVariant, -// ), -// ), -// ), -// ], -// ), -// Expanded( -// child: SingleChildScrollView( -// child: SizedBox( -// height: max( -// controller.widget.tabs[0].items.length + 1, -// controller.widget.tabs[1].items.length, -// ) * -// 72, -// child: TabBarView( -// physics: const NeverScrollableScrollPhysics(), -// children: [ -// Column( -// crossAxisAlignment: CrossAxisAlignment.stretch, -// children: [ -// ...controller.widget.tabs[0].items.map( -// (item) => AnalyticsListTile( -// refreshStream: controller.refreshStream, -// avatar: item.avatar, -// defaultSelected: -// controller.widget.defaultSelected, -// selected: AnalyticsSelected( -// item.id, -// controller.widget.tabs[0].type, -// item.displayName, -// ), -// isSelected: -// controller.isSelected(item.id), -// onTap: (_) => controller.toggleSelection( -// AnalyticsSelected( -// item.id, -// controller.widget.tabs[0].type, -// item.displayName, -// ), -// ), -// allowNavigateOnSelect: controller -// .widget.tabs[0].allowNavigateOnSelect, -// pangeaController: -// controller.pangeaController, -// controller: controller, -// ), -// ), -// if (controller.widget.defaultSelected.type == -// AnalyticsEntryType.space) -// AnalyticsListTile( -// refreshStream: controller.refreshStream, -// defaultSelected: -// controller.widget.defaultSelected, -// avatar: null, -// selected: AnalyticsSelected( -// controller.widget.defaultSelected.id, -// AnalyticsEntryType.privateChats, -// L10n.of(context).allPrivateChats, -// ), -// allowNavigateOnSelect: false, -// isSelected: controller.isSelected( -// controller.widget.defaultSelected.id, -// ), -// onTap: controller.toggleSelection, -// pangeaController: -// controller.pangeaController, -// controller: controller, -// ), -// ], -// ), -// Column( -// crossAxisAlignment: CrossAxisAlignment.stretch, -// children: controller.widget.tabs[1].items -// .map( -// (item) => AnalyticsListTile( -// refreshStream: controller.refreshStream, -// avatar: item.avatar, -// defaultSelected: -// controller.widget.defaultSelected, -// selected: AnalyticsSelected( -// item.id, -// controller.widget.tabs[1].type, -// item.displayName, -// ), -// isSelected: -// controller.isSelected(item.id), -// onTap: controller.toggleSelection, -// allowNavigateOnSelect: controller.widget -// .tabs[1].allowNavigateOnSelect, -// pangeaController: -// controller.pangeaController, -// controller: controller, -// ), -// ) -// .toList(), -// ), -// ], -// ), -// ), -// ), -// ), -// ], -// ), -// ), -// ), -// ], -// ), -// ), -// ); -// } -// } diff --git a/lib/pangea/pages/analytics/chart_view_picker_button.dart b/lib/pangea/pages/analytics/chart_view_picker_button.dart deleted file mode 100644 index 603d75aa8..000000000 --- a/lib/pangea/pages/analytics/chart_view_picker_button.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import '../../enum/bar_chart_view_enum.dart'; - -class ChartViewPickerButton extends StatelessWidget { - final BarChartViewSelection selected; - final void Function(BarChartViewSelection) onChange; - const ChartViewPickerButton({ - super.key, - required this.selected, - required this.onChange, - }); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - icon: Icon(selected.icon), - tooltip: L10n.of(context).changeView, - initialValue: selected, - onSelected: (BarChartViewSelection? barChartView) { - if (barChartView == null) { - debugPrint("when is barChartView null?"); - return; - } - onChange(barChartView); - }, - itemBuilder: (BuildContext context) => BarChartViewSelection.values - .map>( - (BarChartViewSelection barChartView) { - return PopupMenuItem( - value: barChartView, - child: Text(barChartView.string(context)), - ); - }).toList(), - ); - } -} diff --git a/lib/pangea/pages/analytics/construct_cloud.dart b/lib/pangea/pages/analytics/construct_cloud.dart deleted file mode 100644 index ef797adb4..000000000 --- a/lib/pangea/pages/analytics/construct_cloud.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/pages/analytics/base_analytics.dart'; -import '../../word_cloud/word_cloud_data.dart'; -import '../../word_cloud/word_cloud_shape.dart'; -import '../../word_cloud/word_cloud_tap.dart'; -import '../../word_cloud/word_cloud_tap_view.dart'; -import '../../word_cloud/word_cloud_view.dart'; - -class ConstructCloud extends StatefulWidget { - final AnalyticsSelected? selected; - final AnalyticsSelected defaultSelected; - - const ConstructCloud({ - super.key, - required this.selected, - required this.defaultSelected, - }); - - @override - State createState() => ConstructCloudState(); -} - -class ConstructCloudState extends State { - int count = 0; - String wordstring = ''; - List> wordData = [ - {"word": "loading", 'value': 1}, - {"word": "loading", 'value': 1}, - {"word": "loading", 'value': 1}, - {"word": "loading", 'value': 1}, - ]; - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - final WordCloudData wcdata = WordCloudData(data: wordData); - final WordCloudTap wordtaps = WordCloudTap(); - - for (int i = 0; i < wordData.length; i++) { - void tap() { - setState(() { - count += 1; - wordstring = wordData[i]['word']; - }); - } - - wordtaps.addWordtap(wordData[i]['word'], tap); - } - - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Clicked Word : $wordstring', - style: const TextStyle(fontSize: 20), - ), - Text('Clicked Count : $count', style: const TextStyle(fontSize: 20)), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - WordCloudTapView( - data: wcdata, - wordtap: wordtaps, - mapcolor: const Color.fromARGB(255, 174, 183, 235), - mapwidth: 500, - mapheight: 500, - fontWeight: FontWeight.bold, - shape: WordCloudCircle(radius: 250), - colorlist: const [ - Colors.black, - Colors.redAccent, - Colors.indigoAccent, - ], - ), - const SizedBox( - height: 15, - width: 30, - ), - WordCloudView( - data: wcdata, - mapcolor: const Color.fromARGB(255, 174, 183, 235), - mapwidth: 500, - mapheight: 500, - fontWeight: FontWeight.bold, - colorlist: const [ - Colors.black, - Colors.redAccent, - Colors.indigoAccent, - ], - ), - ], - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/pages/analytics/messages_bar_chart.dart b/lib/pangea/pages/analytics/messages_bar_chart.dart deleted file mode 100644 index 5a9002243..000000000 --- a/lib/pangea/pages/analytics/messages_bar_chart.dart +++ /dev/null @@ -1,402 +0,0 @@ -// import 'dart:developer'; - -// import 'package:fl_chart/fl_chart.dart'; -// import 'package:fluffychat/config/themes.dart'; -// import 'package:fluffychat/pangea/pages/analytics/bar_chart_placeholder_data.dart'; -// import 'package:fluffychat/pangea/utils/error_handler.dart'; -// import 'package:flutter/foundation.dart'; -// import 'package:flutter/material.dart'; -// import 'package:intl/intl.dart'; - -// import '../../enum/time_span.dart'; -// import '../../enum/use_type.dart'; -// import '../../models/analytics/chart_analytics_model.dart'; -// import 'bar_chart_card.dart'; -// import 'messages_legend_widget.dart'; - -// class MessagesBarChart extends StatefulWidget { -// final ChartAnalyticsModel? chartAnalytics; - -// const MessagesBarChart({ -// super.key, -// required this.chartAnalytics, -// }); - -// @override -// State createState() => MessagesBarChartState(); -// } - -// class MessagesBarChartState extends State { -// final double barSpace = 16; -// final List> intervalGroupings = []; - -// @override -// initState() { -// super.initState(); -// } - -// @override -// Widget build(BuildContext context) { -// final flLine = FlLine( -// color: Theme.of(context).dividerColor, -// strokeWidth: 1, -// ); - -// final flTitlesData = FlTitlesData( -// show: true, -// bottomTitles: AxisTitles( -// sideTitles: SideTitles( -// showTitles: true, -// reservedSize: 28, -// getTitlesWidget: bottomTitles, -// ), -// ), -// leftTitles: AxisTitles( -// sideTitles: SideTitles( -// showTitles: true, -// reservedSize: 40, -// getTitlesWidget: leftTitles, -// ), -// ), -// topTitles: const AxisTitles( -// sideTitles: SideTitles(showTitles: false), -// ), -// rightTitles: const AxisTitles( -// sideTitles: SideTitles(showTitles: false), -// ), -// ); -// final barChartData = BarChartData( -// alignment: BarChartAlignment.spaceEvenly, -// barTouchData: BarTouchData( -// enabled: false, -// ), -// // barTouchData: barTouchData, -// titlesData: flTitlesData, -// gridData: FlGridData( -// show: true, -// // checkToShowHorizontalLine: (value) => value % 10 == 0, -// checkToShowHorizontalLine: (value) => true, -// getDrawingHorizontalLine: (value) => flLine, -// checkToShowVerticalLine: (value) => false, -// getDrawingVerticalLine: (value) => flLine, -// ), -// borderData: FlBorderData( -// show: false, -// ), -// groupsSpace: barSpace, -// barGroups: barChartGroupData, -// backgroundColor: Theme.of(context).scaffoldBackgroundColor, -// ); -// final barChart = BarChart( -// barChartData, -// swapAnimationDuration: const Duration(milliseconds: 250), -// ); - -// return BarChartCard( -// barChart: barChart, -// loadingData: widget.chartAnalytics == null, -// legend: const MessagesLegendsListWidget(), -// ); -// } - -// bool showLabelBasedOnTimeSpan( -// TimeSpan timeSpan, -// TimeSeriesInterval current, -// TimeSeriesInterval? last, -// int labelIndex, -// ) { -// switch (timeSpan) { -// case TimeSpan.day: -// return current.end.hour % 3 == 0; -// case TimeSpan.month: -// if (current.end.month != last?.end.month) { -// return true; -// } -// double width = MediaQuery.of(context).size.width; -// if (FluffyThemes.isColumnMode(context)) { -// width = width - FluffyThemes.navRailWidth - FluffyThemes.columnWidth; -// } -// const int numDays = 28; -// const int minSpacePerDay = 20; -// final int availableSpaces = width ~/ minSpacePerDay; -// final int showAtInterval = (numDays / availableSpaces).floor() + 1; - -// final int lastDayOfCurrentMonth = -// DateTime(current.end.year, current.end.month + 1, 0).day; -// final bool isNextToMonth = labelIndex == 1 || -// current.end.day == 2 || -// current.end.day == lastDayOfCurrentMonth; -// final bool shouldShowNextToMonth = showAtInterval <= 1; -// return (current.end.day % showAtInterval == 0) && -// (!isNextToMonth || shouldShowNextToMonth); -// case TimeSpan.week: -// case TimeSpan.sixmonths: -// case TimeSpan.year: -// default: -// return true; -// } -// } - -// String getLabelBasedOnTimeSpan( -// TimeSpan timeSpan, -// TimeSeriesInterval current, -// TimeSeriesInterval? last, -// int labelIndex, -// ) { -// final bool showLabel = showLabelBasedOnTimeSpan( -// timeSpan, -// current, -// last, -// labelIndex, -// ); - -// if (widget.chartAnalytics == null || !showLabel) { -// return ""; -// } -// if (isInSameGroup(last, current, timeSpan)) { -// return "-"; -// } - -// switch (widget.chartAnalytics?.timeSpan ?? TimeSpan.month) { -// case TimeSpan.day: -// return DateFormat(DateFormat.HOUR).format(current.end); -// case TimeSpan.week: -// return DateFormat(DateFormat.ABBR_WEEKDAY).format(current.end); -// case TimeSpan.month: -// return current.end.month != last?.end.month -// ? DateFormat(DateFormat.ABBR_MONTH).format(current.end) -// : DateFormat(DateFormat.DAY).format(current.end); -// case TimeSpan.sixmonths: -// case TimeSpan.year: -// return DateFormat(DateFormat.ABBR_STANDALONE_MONTH).format(current.end); -// default: -// return ''; -// } -// } - -// Widget bottomTitles(double value, TitleMeta meta) { -// if (widget.chartAnalytics == null) { -// return Container(); -// } -// String text; -// final index = value.toInt(); -// final TimeSpan timeSpan = widget.chartAnalytics?.timeSpan ?? TimeSpan.month; -// final TimeSeriesInterval? last = -// index != 0 ? intervalGroupings[index - 1].last : null; -// final TimeSeriesInterval current = intervalGroupings[index].last; - -// text = getLabelBasedOnTimeSpan(timeSpan, current, last, index); - -// return SideTitleWidget( -// axisSide: meta.axisSide, -// child: Text( -// text, -// style: titleTextStyle(context), -// ), -// ); -// } - -// TextStyle titleTextStyle(context) => TextStyle( -// color: Theme.of(context).textTheme.bodyLarge!.color, -// fontSize: 10, -// ); - -// Widget leftTitles(double value, TitleMeta meta) { -// Widget textWidget; -// if (value != meta.max) { -// textWidget = Text(meta.formattedValue, style: titleTextStyle(context)); -// } else { -// textWidget = const Icon(Icons.chat_bubble, size: 14); -// } -// return SideTitleWidget( -// axisSide: meta.axisSide, -// child: textWidget, -// ); -// } - -// bool isInSameGroup( -// TimeSeriesInterval? t1, -// TimeSeriesInterval t2, -// TimeSpan timeSpan, -// ) { -// final DateTime? date1 = t1?.end; -// final DateTime date2 = t2.end; -// if (timeSpan == TimeSpan.sixmonths || timeSpan == TimeSpan.year) { -// return date1?.month == date2.month; -// } else if (timeSpan == TimeSpan.week) { -// return date1?.day == date2.day; -// } else { -// return false; -// } -// } - -// void makeIntervalGroupings() { -// intervalGroupings.clear(); -// try { -// for (final timeSeriesInterval -// in widget.chartAnalytics?.timeSeries ?? []) { -// //Note: if we decide we'd like to do some sort of grouping in the future, -// // this is where that could happen. Currently, we're just putting one -// // BarChartRod in each BarChartGroup -// final TimeSeriesInterval? last = -// intervalGroupings.isNotEmpty ? intervalGroupings.last.last : null; - -// if (widget.chartAnalytics != null && -// isInSameGroup( -// last, -// timeSeriesInterval, -// widget.chartAnalytics!.timeSpan, -// )) { -// intervalGroupings.last.add(timeSeriesInterval); -// } else { -// intervalGroupings.add([timeSeriesInterval]); -// } -// } -// } catch (err, stack) { -// debugger(when: kDebugMode); -// ErrorHandler.logError(e: err, s: stack); -// } -// } - -// List get barChartGroupData { -// if (widget.chartAnalytics == null) { -// return BarChartPlaceHolderData.getRandomData(context); -// } - -// makeIntervalGroupings(); - -// final List chartData = []; - -// intervalGroupings.asMap().forEach((index, intervalGroup) { -// chartData.add( -// BarChartGroupData( -// x: index, -// barsSpace: barSpace, -// // barRods: intervalGroup.map(constructBarChartRodData).toList(), -// barRods: constructBarChartRodData(intervalGroup), -// ), -// ); -// }); -// return chartData; -// } - -// // BarChartRodData constructBarChartRodData(TimeSeriesInterval timeSeriesInterval) { -// // final double y1 = timeSeriesInterval.spanIT.toDouble(); -// // final double y2 = -// // (timeSeriesInterval.spanIT + timeSeriesInterval.spanIGC).toDouble(); -// // final double y3 = timeSeriesInterval.spanTotal.toDouble(); -// // return BarChartRodData( -// // toY: y3, -// // width: 10.toDouble(), -// // rodStackItems: [ -// // BarChartRodStackItem(0, y1, UseType.ta.color(context)), -// // BarChartRodStackItem(y1, y2, UseType.ga.color(context)), -// // BarChartRodStackItem(y2, y3, UseType.wa.color(context)), -// // ], -// // borderRadius: BorderRadius.zero, -// // ); -// // } - -// List constructBarChartRodData( -// List timeSeriesIntervalGroup, -// ) { -// int y1 = 0; -// int y2 = 0; -// int y3 = 0; -// int y4 = 0; -// for (final e in timeSeriesIntervalGroup) { -// y1 += e.totals.ta; -// y2 += y1 + e.totals.ga; -// y3 += y2 + e.totals.wa; -// y4 += y3 + e.totals.un; -// } -// return [ -// BarChartRodData( -// toY: y4.toDouble(), -// width: 10.toDouble(), -// rodStackItems: [ -// BarChartRodStackItem(0, y1.toDouble(), UseType.ta.color(context)), -// BarChartRodStackItem( -// y1.toDouble(), -// y2.toDouble(), -// UseType.ga.color(context), -// ), -// BarChartRodStackItem( -// y2.toDouble(), -// y3.toDouble(), -// UseType.wa.color(context), -// ), -// BarChartRodStackItem( -// y3.toDouble(), -// y4.toDouble(), -// UseType.un.color(context), -// ), -// ], -// borderRadius: BorderRadius.zero, -// ), -// ]; -// } - -// // BarTouchData get barTouchData => BarTouchData( -// // touchTooltipData: BarTouchTooltipData( -// // fitInsideVertically: true, -// // tooltipBgColor: Colors.blueGrey, -// // getTooltipItem: (group, groupIndex, rod, rodIndex) { -// // return BarTooltipItem( -// // "groupindex $groupIndex rodIndex $rodIndex", -// // const TextStyle( -// // color: Colors.white, -// // fontWeight: FontWeight.bold, -// // fontSize: 18, -// // ), -// // children: [ -// // toolTipText(rod), -// // ], -// // ); -// // }, -// // ), -// // // touchCallback: (FlTouchEvent event, barTouchResponse) { -// // // setState(() { -// // // if (!event.isInterestedForInteractions || -// // // barTouchResponse == null || -// // // barTouchResponse.spot == null) { -// // // touchedIndex = -1; -// // // return; -// // // } -// // // touchedIndex = barTouchResponse.spot!.touchedBarGroupIndex; -// // // }); -// // // }, -// // ); - -// // TextSpan toolTipText(BarChartRodData rodData) { -// // double rodPercentage(int index) { -// // return (rodData.rodStackItems[index].toY - -// // rodData.rodStackItems[index].fromY) / -// // rodData.toY * -// // 100; -// // } - -// // return TextSpan( -// // children: [ -// // const WidgetSpan( -// // child: Icon(Icons.chat_bubble, size: 14), -// // ), -// // TextSpan( -// // text: " ${rodData.toY}", -// // ), -// // TextSpan( -// // text: "/nIT ${rodPercentage(0)}%", -// // style: TextStyle(color: UseType.ta.color(context)), -// // ), -// // TextSpan( -// // text: " IGC ${rodPercentage(1)}%", -// // style: TextStyle(color: UseType.ga.color(context)), -// // ), -// // TextSpan( -// // text: " Direct ${rodPercentage(2)}%", -// // style: TextStyle(color: UseType.wa.color(context)), -// // ), -// // ], -// // ); -// // } -// } diff --git a/lib/pangea/pages/analytics/messages_legend_widget.dart b/lib/pangea/pages/analytics/messages_legend_widget.dart deleted file mode 100644 index ce1337519..000000000 --- a/lib/pangea/pages/analytics/messages_legend_widget.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/enum/use_type.dart'; - -class MessagesLegendsListWidget extends StatelessWidget { - const MessagesLegendsListWidget({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 16, - children: UseType.values - .map( - // (e) => e.iconView(context, e.color(context), 20), - (e) => Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 10, - height: 10, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: e.color(context), - ), - ), - const SizedBox(width: 4), - e.iconView(context, e.color(context), 20), - ], - ), - ) - .toList(), - ); - } -} diff --git a/lib/pangea/pages/analytics/space_analytics/space_analytics.dart b/lib/pangea/pages/analytics/space_analytics/space_analytics.dart deleted file mode 100644 index 3f752bd4a..000000000 --- a/lib/pangea/pages/analytics/space_analytics/space_analytics.dart +++ /dev/null @@ -1,114 +0,0 @@ -// import 'dart:async'; -// import 'dart:developer'; - -// import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; -// import 'package:fluffychat/pangea/enum/bar_chart_view_enum.dart'; -// import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -// import 'package:fluffychat/pangea/models/language_model.dart'; -// import 'package:fluffychat/pangea/utils/error_handler.dart'; -// import 'package:fluffychat/pangea/widgets/common/list_placeholder.dart'; -// import 'package:fluffychat/pangea/widgets/common/p_circular_loader.dart'; -// import 'package:flutter/foundation.dart'; -// import 'package:flutter/material.dart'; -// import 'package:go_router/go_router.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../../../../widgets/matrix.dart'; -// import '../../../utils/sync_status_util_v2.dart'; - -// class SpaceAnalyticsPage extends StatefulWidget { -// final BarChartViewSelection selectedView; -// const SpaceAnalyticsPage({super.key, required this.selectedView}); - -// @override -// State createState() => SpaceAnalyticsV2Controller(); -// } - -// class SpaceAnalyticsV2Controller extends State { -// bool _initialized = false; -// // StreamSubscription? stateSub; -// // Timer? refreshTimer; - -// List chats = []; -// List students = []; -// String? get spaceId => GoRouterState.of(context).pathParameters['spaceid']; -// Room? _spaceRoom; -// List targetLanguages = []; - -// @override -// void initState() { -// super.initState(); -// Future.delayed(Duration.zero, () async { -// if (spaceRoom == null || (!(spaceRoom?.isSpace ?? false))) { -// context.go('/rooms'); -// } -// getChatAndStudents(); -// }); -// } - -// Room? get spaceRoom { -// if (_spaceRoom == null || _spaceRoom!.id != spaceId) { -// debugPrint("updating _spaceRoom"); -// _spaceRoom = spaceId != null -// ? Matrix.of(context).client.getRoomById(spaceId!) -// : null; -// if (_spaceRoom == null) { -// context.go('/rooms/analytics'); -// return null; -// } -// getChatAndStudents().then((_) => setTargetLanguages()); -// } -// return _spaceRoom; -// } - -// Future getChatAndStudents() async { -// try { -// await spaceRoom?.requestParticipants(); - -// if (spaceRoom != null) { -// final response = await Matrix.of(context).client.getSpaceHierarchy( -// spaceRoom!.id, -// ); - -// students = spaceRoom!.students; -// chats = response.rooms -// .where( -// (room) => -// room.roomId != spaceRoom!.id && -// room.roomType != PangeaRoomTypes.analytics, -// ) -// .toList(); -// chats.sort((a, b) => a.roomType == 'm.space' ? -1 : 1); -// } - -// setState(() { -// _initialized = true; -// }); -// } catch (err, s) { -// debugger(when: kDebugMode); -// ErrorHandler.logError(e: err, s: s); -// } -// } - -// Future setTargetLanguages() async { -// // get a list of language models, sorted by the -// // number of students who are learning that language -// targetLanguages = await spaceRoom?.targetLanguages() ?? []; -// setState(() {}); -// } - -// @override -// Widget build(BuildContext context) { -// if (!_initialized) return const PCircular(); -// return PLoadingStatusV2( -// // if we everr want it rebuild the whole thing each time (and run initState again) -// // but this is computationally expensive! -// // key: UniqueKey(), -// shimmerChild: const ListPlaceholder(), -// // onFinish: () { -// // getChatAndStudentAnalytics(context); -// // }, -// child: SpaceAnalyticsView(this), -// ); -// } -// } diff --git a/lib/pangea/pages/analytics/space_analytics/space_analytics_view.dart b/lib/pangea/pages/analytics/space_analytics/space_analytics_view.dart deleted file mode 100644 index 68fc658fb..000000000 --- a/lib/pangea/pages/analytics/space_analytics/space_analytics_view.dart +++ /dev/null @@ -1,66 +0,0 @@ -// import 'package:fluffychat/widgets/matrix.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; - -// import '../base_analytics.dart'; -// import 'space_analytics.dart'; - -// class SpaceAnalyticsView extends StatelessWidget { -// final SpaceAnalyticsV2Controller controller; -// const SpaceAnalyticsView(this.controller, {super.key}); - -// @override -// Widget build(BuildContext context) { -// final String pageTitle = L10n.of(context).spaceAnalytics; -// final TabData tab1 = TabData( -// type: AnalyticsEntryType.room, -// icon: Icons.chat_bubble_outline, -// items: controller.chats -// .map( -// (room) => TabItem( -// avatar: room.avatarUrl, -// displayName: room.name ?? -// Matrix.of(context) -// .client -// .getRoomById(room.roomId) -// ?.getLocalizedDisplayname() ?? -// "", -// id: room.roomId, -// ), -// ) -// .toList(), -// ); -// final TabData tab2 = TabData( -// type: AnalyticsEntryType.student, -// icon: Icons.people_outline, -// items: controller.students -// .map( -// (s) => TabItem( -// avatar: s.avatarUrl, -// displayName: s.calcDisplayname(), -// id: s.id, -// ), -// ) -// .toList(), -// ); - -// return controller.spaceId != null -// ? BaseAnalyticsPage( -// selectedView: controller.widget.selectedView, -// pageTitle: pageTitle, -// tabs: [tab1, tab2], -// alwaysSelected: AnalyticsSelected( -// controller.spaceId!, -// AnalyticsEntryType.space, -// controller.spaceRoom?.name ?? "", -// ), -// defaultSelected: AnalyticsSelected( -// controller.spaceId!, -// AnalyticsEntryType.space, -// controller.spaceRoom?.name ?? "", -// ), -// targetLanguages: controller.targetLanguages, -// ) -// : const SizedBox(); -// } -// } diff --git a/lib/pangea/pages/analytics/space_list/space_list.dart b/lib/pangea/pages/analytics/space_list/space_list.dart deleted file mode 100644 index f9dbe4d31..000000000 --- a/lib/pangea/pages/analytics/space_list/space_list.dart +++ /dev/null @@ -1,100 +0,0 @@ -// import 'dart:async'; - -// import 'package:fluffychat/pangea/enum/time_span.dart'; -// import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -// import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -// import 'package:fluffychat/pangea/models/language_model.dart'; -// import 'package:fluffychat/pangea/pages/analytics/space_list/space_list_view.dart'; -// import 'package:flutter/material.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../../../../widgets/matrix.dart'; -// import '../../../controllers/pangea_controller.dart'; -// import '../../../utils/sync_status_util_v2.dart'; -// import '../../../widgets/common/list_placeholder.dart'; - -// class AnalyticsSpaceList extends StatefulWidget { -// const AnalyticsSpaceList({super.key}); - -// @override -// State createState() => AnalyticsSpaceListController(); -// } - -// class AnalyticsSpaceListController extends State { -// PangeaController pangeaController = MatrixState.pangeaController; -// List spaces = []; -// StreamSubscription? stateSub; -// List targetLanguages = []; - -// @override -// void initState() { -// super.initState(); -// setSpaceList().then((_) => setTargetLanguages()); - -// // reload dropdowns when their values change in analytics page -// stateSub = pangeaController.analytics.stateStream.listen( -// (_) => setState(() {}), -// ); -// } - -// @override -// void dispose() { -// stateSub?.cancel(); -// super.dispose(); -// } - -// StreamController refreshStream = StreamController.broadcast(); - -// Future setSpaceList() async { -// final spaceList = Matrix.of(context).client.spacesImTeaching; -// spaces = spaceList -// .where( -// (space) => !spaceList.any( -// (parentSpace) => parentSpace.spaceChildren -// .any((child) => child.roomId == space.id), -// ), -// ) -// .toList(); -// setState(() {}); -// } - -// Future setTargetLanguages() async { -// if (spaces.isEmpty) return; -// final Map langCounts = {}; -// for (final Room space in spaces) { -// final List targetLangs = await space.targetLanguages(); -// for (final LanguageModel lang in targetLangs) { -// langCounts[lang] ??= 0; -// langCounts[lang] = langCounts[lang]! + 1; -// } -// } -// targetLanguages = langCounts.entries.map((entry) => entry.key).toList() -// ..sort( -// (a, b) => langCounts[b]!.compareTo(langCounts[a]!), -// ); -// setState(() {}); -// } - -// void toggleTimeSpan(BuildContext context, TimeSpan timeSpan) { -// pangeaController.analytics.setCurrentAnalyticsTimeSpan(timeSpan); -// refreshStream.add(false); -// setState(() {}); -// } - -// Future toggleSpaceLang(LanguageModel lang) async { -// await pangeaController.analytics.setCurrentAnalyticsLang(lang); -// refreshStream.add(false); -// setState(() {}); -// } - -// @override -// Widget build(BuildContext context) { -// return PLoadingStatusV2( -// shimmerChild: const ListPlaceholder(), -// child: AnalyticsSpaceListView(this), -// onFinish: () { -// // getAllClassAnalytics(context); -// }, -// ); -// } -// } diff --git a/lib/pangea/pages/analytics/space_list/space_list_view.dart b/lib/pangea/pages/analytics/space_list/space_list_view.dart deleted file mode 100644 index ab9b1111e..000000000 --- a/lib/pangea/pages/analytics/space_list/space_list_view.dart +++ /dev/null @@ -1,89 +0,0 @@ -// import 'package:fluffychat/pangea/enum/time_span.dart'; -// import 'package:fluffychat/pangea/pages/analytics/analytics_language_button.dart'; -// import 'package:fluffychat/pangea/pages/analytics/analytics_list_tile.dart'; -// import 'package:fluffychat/pangea/pages/analytics/time_span_menu_button.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; -// import 'package:go_router/go_router.dart'; - -// import '../base_analytics.dart'; -// import 'space_list.dart'; - -// class AnalyticsSpaceListView extends StatelessWidget { -// final AnalyticsSpaceListController controller; -// const AnalyticsSpaceListView(this.controller, {super.key}); - -// @override -// Widget build(BuildContext context) { -// return Scaffold( -// appBar: AppBar( -// centerTitle: true, -// title: Text( -// L10n.of(context).spaceAnalytics, -// style: TextStyle( -// color: Theme.of(context).textTheme.bodyLarge!.color, -// fontSize: 18, -// fontWeight: FontWeight.w700, -// ), -// overflow: TextOverflow.clip, -// textAlign: TextAlign.center, -// ), -// leading: IconButton( -// icon: const Icon(Icons.close_outlined), -// onPressed: () => context.pop(), -// ), -// ), -// body: Column( -// children: [ -// Row( -// mainAxisAlignment: MainAxisAlignment.spaceEvenly, -// children: [ -// TimeSpanMenuButton( -// value: controller -// .pangeaController.analytics.currentAnalyticsTimeSpan, -// onChange: (TimeSpan value) => controller.toggleTimeSpan( -// context, -// value, -// ), -// ), -// AnalyticsLanguageButton( -// value: -// controller.pangeaController.analytics.currentAnalyticsLang, -// onChange: (lang) => controller.toggleSpaceLang(lang), -// languages: -// controller.pangeaController.pLanguageStore.targetOptions, -// ), -// ], -// ), -// Flexible( -// child: ListView.builder( -// itemCount: controller.spaces.length, -// itemBuilder: (context, i) => AnalyticsListTile( -// defaultSelected: AnalyticsSelected( -// controller.spaces[i].id, -// AnalyticsEntryType.space, -// controller.spaces[i].name, -// ), -// avatar: controller.spaces[i].avatar, -// selected: AnalyticsSelected( -// controller.spaces[i].id, -// AnalyticsEntryType.space, -// controller.spaces[i].name, -// ), -// onTap: (selected) { -// context.go( -// '/rooms/analytics/${selected.id}', -// ); -// }, -// allowNavigateOnSelect: true, -// isSelected: false, -// pangeaController: controller.pangeaController, -// refreshStream: controller.refreshStream, -// ), -// ), -// ), -// ], -// ), -// ); -// } -// } diff --git a/lib/pangea/pages/analytics/student_analytics/student_analytics.dart b/lib/pangea/pages/analytics/student_analytics/student_analytics.dart deleted file mode 100644 index 3a5309e5e..000000000 --- a/lib/pangea/pages/analytics/student_analytics/student_analytics.dart +++ /dev/null @@ -1,90 +0,0 @@ -// import 'dart:developer'; - -// import 'package:fluffychat/pangea/constants/language_constants.dart'; -// import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; -// import 'package:fluffychat/pangea/enum/bar_chart_view_enum.dart'; -// import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -// import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -// import 'package:fluffychat/pangea/models/language_model.dart'; -// import 'package:fluffychat/pangea/widgets/common/list_placeholder.dart'; -// import 'package:flutter/foundation.dart'; -// import 'package:flutter/material.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../../../../widgets/matrix.dart'; -// import '../../../controllers/pangea_controller.dart'; -// import '../../../utils/sync_status_util_v2.dart'; -// import '../base_analytics.dart'; -// import 'student_analytics_view.dart'; - -// class StudentAnalyticsPage extends StatefulWidget { -// final BarChartViewSelection selectedView; -// const StudentAnalyticsPage({super.key, required this.selectedView}); - -// @override -// State createState() => StudentAnalyticsController(); -// } - -// class StudentAnalyticsController extends State { -// final PangeaController _pangeaController = MatrixState.pangeaController; -// AnalyticsSelected? selected; - -// @override -// void initState() { -// super.initState(); -// } - -// @override -// void dispose() { -// super.dispose(); -// } - -// List _chats = []; -// List get chats { -// if (_chats.isEmpty) { -// _pangeaController.matrixState.client.chatsImAStudentIn.then((result) { -// setState(() => _chats = result); -// }); -// } -// return _chats; -// } - -// List get spaces => -// _pangeaController.matrixState.client.spacesImAStudentIn; - -// String? get userId { -// final id = _pangeaController.matrixState.client.userID; -// debugger(when: kDebugMode && id == null); -// return id; -// } - -// List get targetLanguages { -// final LanguageModel? l2 = -// _pangeaController.languageController.activeL2Model(); -// final List analyticsRoomLangs = -// _pangeaController.matrixState.client.allMyAnalyticsRooms -// .map((analyticsRoom) => analyticsRoom.madeForLang) -// .where((langCode) => langCode != null) -// .map((langCode) => PangeaLanguage.byLangCode(langCode!)) -// .where( -// (langModel) => langModel.langCode != LanguageKeys.unknownLanguage, -// ) -// .toList(); -// if (l2 != null) { -// analyticsRoomLangs.add(l2); -// } -// return analyticsRoomLangs.toSet().toList(); -// } - -// @override -// Widget build(BuildContext context) { -// return PLoadingStatusV2( -// // if we everr want it rebuild the whole thing each time (and run initState again) -// // but this is computationally expensive! -// // key: UniqueKey(), -// shimmerChild: const ListPlaceholder(), -// // onFinish: initialize, -// child: StudentAnalyticsView(this), -// ); -// } -// } diff --git a/lib/pangea/pages/analytics/student_analytics/student_analytics_view.dart b/lib/pangea/pages/analytics/student_analytics/student_analytics_view.dart deleted file mode 100644 index 92e644b0d..000000000 --- a/lib/pangea/pages/analytics/student_analytics/student_analytics_view.dart +++ /dev/null @@ -1,66 +0,0 @@ -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; - -// import '../../../../utils/matrix_sdk_extensions/matrix_locals.dart'; -// import '../base_analytics.dart'; -// import 'student_analytics.dart'; - -// class StudentAnalyticsView extends StatelessWidget { -// final StudentAnalyticsController controller; -// const StudentAnalyticsView(this.controller, {super.key}); - -// @override -// Widget build(BuildContext context) { -// final String pageTitle = L10n.of(context).myLearning; -// final TabData chatTabData = TabData( -// type: AnalyticsEntryType.room, -// icon: Icons.chat_bubble_outline, -// items: (controller.chats) -// .map( -// (c) => TabItem( -// avatar: c.avatar, -// displayName: -// c.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), -// id: c.id, -// ), -// ) -// .toList(), -// allowNavigateOnSelect: false, -// ); -// final TabData classTabData = TabData( -// type: AnalyticsEntryType.space, -// icon: Icons.workspaces, -// items: (controller.spaces ?? []) -// .map( -// (c) => TabItem( -// avatar: c.avatar, -// displayName: -// c.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), -// id: c.id, -// ), -// ) -// .toList(), -// allowNavigateOnSelect: false, -// ); - -// return controller.userId != null -// ? BaseAnalyticsPage( -// selectedView: controller.widget.selectedView, -// pageTitle: pageTitle, -// tabs: [chatTabData, classTabData], -// alwaysSelected: AnalyticsSelected( -// controller.userId!, -// AnalyticsEntryType.student, -// L10n.of(context).allChatsAndClasses, -// ), -// myAnalyticsController: controller, -// defaultSelected: AnalyticsSelected( -// controller.userId!, -// AnalyticsEntryType.student, -// L10n.of(context).allChatsAndClasses, -// ), -// targetLanguages: controller.targetLanguages, -// ) -// : const SizedBox(); -// } -// } diff --git a/lib/pangea/pages/analytics/time_span_menu_button.dart b/lib/pangea/pages/analytics/time_span_menu_button.dart deleted file mode 100644 index 6d4ffc0c3..000000000 --- a/lib/pangea/pages/analytics/time_span_menu_button.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import '../../enum/time_span.dart'; - -class TimeSpanMenuButton extends StatelessWidget { - final TimeSpan value; - final void Function(TimeSpan) onChange; - const TimeSpanMenuButton({ - super.key, - required this.value, - required this.onChange, - }); - - @override - Widget build(BuildContext context) { - return Flexible( - child: PopupMenuButton( - tooltip: L10n.of(context).changeDateRange, - initialValue: value, - onSelected: (TimeSpan? timeSpan) { - if (timeSpan == null) { - debugPrint("when is timeSpan null?"); - return; - } - onChange(timeSpan); - }, - itemBuilder: (BuildContext context) => - TimeSpan.values.map>((TimeSpan timeSpan) { - return PopupMenuItem( - value: timeSpan, - child: Text(timeSpan.string(context)), - ); - }).toList(), - child: TextButton.icon( - label: Text( - value.string(context), - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - ), - ), - icon: Icon( - Icons.calendar_month_outlined, - color: Theme.of(context).colorScheme.onSurface, - ), - onPressed: null, - ), - ), - ); - } -} diff --git a/lib/pangea/pages/analytics/vocab_bar_chart.dart b/lib/pangea/pages/analytics/vocab_bar_chart.dart deleted file mode 100644 index fed972c76..000000000 --- a/lib/pangea/pages/analytics/vocab_bar_chart.dart +++ /dev/null @@ -1,174 +0,0 @@ -// import 'package:flutter/material.dart'; - -// import 'package:fl_chart/fl_chart.dart'; - -// import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -// import 'package:fluffychat/pangea/models/headwords.dart'; -// import 'package:fluffychat/pangea/pages/analytics/base_analytics_page.dart'; -// import 'package:fluffychat/widgets/matrix.dart'; -// import 'bar_chart_card.dart'; -// import 'messages_legend_widget.dart'; - -// class VocabBarChart extends StatefulWidget { -// final AnalyticsSelected? selected; -// final AnalyticsSelected defaultSelected; - -// const VocabBarChart({ -// super.key, -// required this.selected, -// required this.defaultSelected, -// }); - -// @override -// State createState() => VocabBarChartState(); -// } - -// class VocabBarChartState extends State { -// final double barSpace = 16; - -// final PangeaController _pangeaController = MatrixState.pangeaController; - -// @override -// initState() { -// super.initState(); -// } - -// @override -// Widget build(BuildContext context) { -// return FutureBuilder( -// future: _pangeaController.analytics.vocabHeadsByAnalyticsSelected( -// selected: widget.selected, -// defaultSelected: widget.defaultSelected, -// ), -// builder: ((context, snapshot) => BarChartCard( -// barChartTitle: (widget.selected != null -// ? widget.selected! -// : widget.defaultSelected) -// .displayName, -// barChart: snapshot.hasData -// ? buildBarChart(context, snapshot.data!) -// : null, -// loadingData: snapshot.connectionState != ConnectionState.done, -// legend: const MessagesLegendsListWidget(), -// )), -// ); -// } - -// TextStyle titleTextStyle(BuildContext context) => TextStyle( -// color: Theme.of(context).textTheme.bodyLarge!.color, -// fontSize: 10, -// ); - -// BarChart buildBarChart(BuildContext context, VocabHeadwords vocabHeadwords) { -// final flLine = FlLine( -// color: Theme.of(context).dividerColor, -// strokeWidth: 1, -// ); - -// return BarChart( -// BarChartData( -// alignment: BarChartAlignment.spaceEvenly, -// barTouchData: BarTouchData( -// enabled: false, -// ), -// // barTouchData: barTouchData, -// titlesData: FlTitlesData( -// show: true, -// bottomTitles: AxisTitles( -// sideTitles: SideTitles( -// showTitles: true, -// reservedSize: 28, -// getTitlesWidget: (double value, TitleMeta meta) => -// SideTitleWidget( -// axisSide: meta.axisSide, -// child: Text( -// vocabHeadwords.lists[value.toInt()].name, -// style: titleTextStyle(context), -// ), -// ), -// ), -// ), -// leftTitles: AxisTitles( -// sideTitles: SideTitles( -// showTitles: true, -// reservedSize: 40, -// getTitlesWidget: (double value, TitleMeta meta) { -// Widget textWidget; -// if (value != meta.max) { -// textWidget = -// Text(meta.formattedValue, style: titleTextStyle(context)); -// } else { -// textWidget = const Icon(Icons.abc_outlined, size: 14); -// } -// return SideTitleWidget( -// axisSide: meta.axisSide, -// child: textWidget, -// ); -// }, -// ), -// ), -// topTitles: AxisTitles( -// sideTitles: SideTitles(showTitles: false), -// ), -// rightTitles: AxisTitles( -// sideTitles: SideTitles(showTitles: false), -// ), -// ), -// gridData: FlGridData( -// show: true, -// // checkToShowHorizontalLine: (value) => value % 10 == 0, -// checkToShowHorizontalLine: (value) => true, -// getDrawingHorizontalLine: (value) => flLine, -// checkToShowVerticalLine: (value) => false, -// getDrawingVerticalLine: (value) => flLine, -// ), -// borderData: FlBorderData( -// show: false, -// ), -// groupsSpace: barSpace, -// barGroups: barChartGroupData(vocabHeadwords), -// backgroundColor: Colors.transparent, -// ), -// swapAnimationDuration: const Duration(milliseconds: 250), -// ); -// } - -// List barChartGroupData(VocabHeadwords vocabHeadwords) { -// // sort vocab into lists -// // calculate levels based on vocab data - -// final List chartData = []; - -// vocabHeadwords.lists.asMap().forEach((index, intervalGroup) { -// chartData.add( -// BarChartGroupData( -// x: index, -// barsSpace: barSpace, -// // barRods: intervalGroup.map(constructBarChartRodData).toList(), -// barRods: constructBarChartRodData(intervalGroup), -// ), -// ); -// }); -// return chartData; -// } - -// List constructBarChartRodData(VocabList vocabList) { -// final ListTotals listTotals = vocabList.calculuateTotals(); -// final y1 = listTotals.low; -// final y2 = y1 + listTotals.medium; -// final y3 = y2 + listTotals.high; - -// return [ -// BarChartRodData( -// toY: y3.toDouble(), -// width: 10.toDouble(), -// rodStackItems: [ -// BarChartRodStackItem(0, y1.toDouble(), Colors.red), -// BarChartRodStackItem(y1.toDouble(), y2.toDouble(), Colors.grey), -// BarChartRodStackItem(y2.toDouble(), y3.toDouble(), Colors.green), -// ], -// borderRadius: BorderRadius.zero, -// ), -// ]; -// } -// } diff --git a/lib/pangea/pages/analytics/vocab_legend_widget.dart b/lib/pangea/pages/analytics/vocab_legend_widget.dart deleted file mode 100644 index da6413c3e..000000000 --- a/lib/pangea/pages/analytics/vocab_legend_widget.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/enum/use_type.dart'; - -class VocabLegendsListWidget extends StatelessWidget { - const VocabLegendsListWidget({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 16, - children: UseType.values - .where((e) => e != UseType.un) - .map( - (e) => Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 10, - height: 10, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: e.color(context), - ), - ), - const SizedBox(width: 4), - e.iconView(context, e.color(context), 20), - ], - ), - ) - .toList(), - ); - } -} diff --git a/lib/pangea/pages/class_settings/p_class_widgets/class_description_button.dart b/lib/pangea/pages/class_settings/p_class_widgets/class_description_button.dart deleted file mode 100644 index 52425786b..000000000 --- a/lib/pangea/pages/class_settings/p_class_widgets/class_description_button.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pages/chat_details/chat_details.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; - -class ClassDescriptionButton extends StatelessWidget { - final Room room; - final ChatDetailsController controller; - const ClassDescriptionButton({ - super.key, - required this.room, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - final iconColor = Theme.of(context).textTheme.bodyLarge!.color; - final ScrollController scrollController = ScrollController(); - return Column( - children: [ - ListTile( - onTap: room.isRoomAdmin ? controller.setTopicAction : null, - leading: CircleAvatar( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, - foregroundColor: iconColor, - child: const Icon(Icons.topic_outlined), - ), - subtitle: ConstrainedBox( - constraints: const BoxConstraints( - maxHeight: 190, - ), - child: Scrollbar( - controller: scrollController, - interactive: true, - child: SingleChildScrollView( - controller: scrollController, - primary: false, - child: Text( - room.topic.isEmpty - ? (room.isRoomAdmin - ? (room.isSpace - ? L10n.of(context).classDescriptionDesc - : L10n.of(context).setChatDescription) - : L10n.of(context).topicNotSet) - : room.topic, - ), - ), - ), - ), - title: Text( - room.isSpace - ? L10n.of(context).classDescription - : L10n.of(context).chatDescription, - style: TextStyle( - color: Theme.of(context).colorScheme.secondary, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ); - } -} - -void setClassTopic(Room room, BuildContext context) { - final TextEditingController textFieldController = - TextEditingController(text: room.topic); - showDialog( - context: context, - useRootNavigator: false, - builder: (BuildContext context) => AlertDialog( - title: Text( - room.isSpace - ? L10n.of(context).classDescription - : L10n.of(context).chatDescription, - ), - content: TextField( - controller: textFieldController, - keyboardType: TextInputType.multiline, - minLines: 1, - maxLines: 10, - maxLength: 2000, - ), - actions: [ - TextButton( - child: Text(L10n.of(context).cancel), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - TextButton( - child: Text(L10n.of(context).ok), - onPressed: () async { - if (textFieldController.text == "") return; - final success = await showFutureLoadingDialog( - context: context, - future: () => room.setDescription(textFieldController.text), - ); - if (success.error == null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: - Text(L10n.of(context).groupDescriptionHasBeenChanged), - ), - ); - Navigator.of(context).pop(); - } - }, - ), - ], - ), - ); -} diff --git a/lib/pangea/pages/class_settings/p_class_widgets/class_name_button.dart b/lib/pangea/pages/class_settings/p_class_widgets/class_name_button.dart deleted file mode 100644 index ac83ffe21..000000000 --- a/lib/pangea/pages/class_settings/p_class_widgets/class_name_button.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pages/chat_details/chat_details.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; - -class ClassNameButton extends StatelessWidget { - final Room room; - final ChatDetailsController controller; - const ClassNameButton({ - super.key, - required this.room, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - final iconColor = Theme.of(context).textTheme.bodyLarge!.color; - return Column( - children: [ - ListTile( - onTap: controller.setDisplaynameAction, - title: Text( - room.isSpace - ? L10n.of(context).changeTheNameOfTheClass - : L10n.of(context).changeTheNameOfTheChat, - style: TextStyle( - color: Theme.of(context).colorScheme.secondary, - fontWeight: FontWeight.bold, - ), - ), - leading: CircleAvatar( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, - foregroundColor: iconColor, - child: const Icon(Icons.people_outline_outlined), - ), - subtitle: Text( - room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)), - ), - ), - ), - ], - ); - } -} diff --git a/lib/pangea/pages/class_settings/p_class_widgets/class_textfields_group.dart b/lib/pangea/pages/class_settings/p_class_widgets/class_textfields_group.dart deleted file mode 100644 index ae4076df0..000000000 --- a/lib/pangea/pages/class_settings/p_class_widgets/class_textfields_group.dart +++ /dev/null @@ -1,38 +0,0 @@ -// import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -// import 'package:flutter/cupertino.dart'; - -// import '../../../../pages/new_space/new_space.dart'; -// import '../../../widgets/common_widgets/p_input_field.dart'; - -// import 'package:flutter_gen/gen_l10n/l10n.dart'; - -// class ClassTextFieldGroup extends StatelessWidget { -// PangeaController controller; -// ClassTextFieldGroup({Key? key, required this.controller}) : super(key: key); - -// @override -// Widget build(BuildContext context) { -// return Column( -// children: [ -// PInputTextField( -// controller: controller.classController.cityController, -// hintText: L10n.of(context).enterCityName, -// labelText: L10n.of(context).optionalCity, -// onSubmit: (String value) {}, -// ), -// PInputTextField( -// controller: controller.classController.cityController, -// hintText: L10n.of(context).enterCountryName, -// labelText: L10n.of(context).optionalCountry, -// onSubmit: (String value) {}, -// ), -// PInputTextField( -// controller: controller.classController.cityController, -// hintText: L10n.of(context).enterSchoolName, -// labelText: L10n.of(context).optionalSchool, -// onSubmit: (String value) {}, -// ), -// ], -// ); -// } -// } diff --git a/lib/pangea/pages/class_settings/p_class_widgets/room_rules_editor.dart b/lib/pangea/pages/class_settings/p_class_widgets/room_rules_editor.dart deleted file mode 100644 index f0ac94b16..000000000 --- a/lib/pangea/pages/class_settings/p_class_widgets/room_rules_editor.dart +++ /dev/null @@ -1,278 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import '../../../../config/app_config.dart'; -import '../../../../widgets/matrix.dart'; -import '../../../constants/pangea_event_types.dart'; -import '../../../extensions/pangea_room_extension/pangea_room_extension.dart'; - -class RoomRulesEditor extends StatefulWidget { - final String? roomId; - final bool startOpen; - final bool showAdd; - final PangeaRoomRules? initialRules; - - const RoomRulesEditor({ - super.key, - this.roomId, - this.startOpen = true, - this.showAdd = false, - this.initialRules, - }); - - @override - RoomRulesState createState() => RoomRulesState(); -} - -class RoomRulesState extends State { - Room? room; - late PangeaRoomRules rules; - late bool isOpen; - - RoomRulesState({ - Key? key, - }); - - @override - void initState() { - isOpen = widget.startOpen; - - room = widget.roomId != null - ? Matrix.of(context).client.getRoomById(widget.roomId!) - : null; - - rules = room?.pangeaRoomRules ?? widget.initialRules ?? PangeaRoomRules(); - - super.initState(); - } - - Future setRoomRules(String roomId) { - return Matrix.of(context).client.setRoomStateWithKey( - roomId, - PangeaEventTypes.rules, - '', - (rules).toJson(), - ); - } - - Future updatePermission(void Function() makeLocalRuleChange) async { - makeLocalRuleChange(); - if (room != null) { - await showFutureLoadingDialog( - context: context, - future: () => setRoomRules(room!.id), - ); - } - setState(() {}); - } - - // //function to handleShowAdd - // void handleShowAdd() { - // setState(() => isOpen = !isOpen); - // debugger(when: rules != null && kDebugMode); - - // rules = PangeaRoomRules(); - // } - - void showNoPermission() { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(L10n.of(context).noPermission), - ), - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - // if (widget.showAdd) - // ListTile( - // title: Text( - // L10n.of(context).studentPermissions, - // style: TextStyle( - // color: Theme.of(context).colorScheme.secondary, - // fontWeight: FontWeight.bold, - // ), - // ), - // subtitle: Text(L10n.of(context).addRoomRulesDesc), - // leading: CircleAvatar( - // backgroundColor: Theme.of(context).primaryColor, - // foregroundColor: Colors.white, - // radius: Avatar.defaultSize / 2, - // child: Icon(rules == null ? Icons.add : Icons.remove), - // ), - // trailing: Icon( - // isOpen - // ? Icons.keyboard_arrow_down_outlined - // : Icons.keyboard_arrow_right_outlined, - // ), - // onTap: handleShowAdd, - // ), - - ListTile( - enableFeedback: !widget.startOpen, - title: Text( - L10n.of(context).studentPermissions, - style: TextStyle( - color: Theme.of(context).colorScheme.secondary, - fontWeight: FontWeight.bold, - ), - ), - subtitle: Text(L10n.of(context).studentPermissionsDesc), - leading: CircleAvatar( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, - foregroundColor: Theme.of(context).textTheme.bodyLarge!.color, - child: const Icon( - Icons.settings_outlined, - ), - ), - trailing: !widget.startOpen - ? Icon( - isOpen - ? Icons.keyboard_arrow_down_outlined - : Icons.keyboard_arrow_right_outlined, - ) - : null, - onTap: () => - !widget.startOpen ? setState(() => isOpen = !isOpen) : null, - ), - if (isOpen) - AnimatedContainer( - duration: const Duration(milliseconds: 300), - height: isOpen ? null : 0, - child: Padding( - padding: const EdgeInsets.fromLTRB(16.0, 0, 16.0, 8.0), - child: Opacity( - opacity: (room?.isRoomAdmin ?? true) ? 1 : 0.5, - child: Column( - children: [ - for (final setting in ToolSetting.values) - Column( - children: [ - ListTile( - title: Text( - "${setting.toolName( - context, - )}: ${rules.languageToolPermissionsText( - context, - setting, - )}", - ), - subtitle: Text(setting.toolDescription(context)), - ), - Slider( - value: rules.getToolSettings(setting).toDouble(), - onChanged: (value) { - if (room?.isRoomAdmin ?? true) { - updatePermission(() { - rules.setLanguageToolSetting( - setting, - value.toInt(), - ); - }); - } else { - showNoPermission(); - } - }, - divisions: 2, - max: 2, - min: 0, - label: rules.languageToolPermissionsText( - context, - setting, - ), - ), - ], - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).oneToOneChatsWithinClass), - subtitle: - Text(L10n.of(context).oneToOneChatsWithinClassDesc), - value: rules.oneToOneChatClass, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.oneToOneChatClass = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).createGroupChats), - subtitle: Text(L10n.of(context).createGroupChatsDesc), - value: rules.isCreateRooms, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isCreateRooms = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).shareVideo), - subtitle: Text(L10n.of(context).shareVideoDesc), - value: rules.isShareVideo, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isShareVideo = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).sharePhotos), - subtitle: Text(L10n.of(context).sharePhotosDesc), - value: rules.isSharePhoto, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isSharePhoto = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).shareFiles), - subtitle: Text(L10n.of(context).shareFilesDesc), - value: rules.isShareFiles, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isShareFiles = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).sendVoiceNotes), - subtitle: Text(L10n.of(context).sendVoiceNotesDesc), - value: rules.isVoiceNotes, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isVoiceNotes = value, - ) - : showNoPermission(), - ), - SwitchListTile.adaptive( - activeColor: AppConfig.activeToggleColor, - title: Text(L10n.of(context).shareLocation), - subtitle: Text(L10n.of(context).shareLocationDesc), - value: rules.isShareLocation, - onChanged: (value) => (room?.isRoomAdmin ?? true) - ? updatePermission( - () => rules.isShareLocation = value, - ) - : showNoPermission(), - ), - ], - ), - ), - ), - ), - ], - ); - } -} diff --git a/lib/pangea/repo/contextualized_translation_repo.dart b/lib/pangea/repo/contextualized_translation_repo.dart deleted file mode 100644 index dcf19e32f..000000000 --- a/lib/pangea/repo/contextualized_translation_repo.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'dart:convert'; - -import 'package:http/http.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../config/environment.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; - -class ContextualizationTranslationRepo { - static Future translate({ - required String accessToken, - required ContextualTranslationRequestModel request, - }) async { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.contextualizedTranslation, - body: request.toJson(), - ); - - final ContextTranslationResponseModel response = - ContextTranslationResponseModel.fromJson( - jsonDecode( - utf8.decode(res.bodyBytes).toString(), - ), - ); - - if (response.translations.isEmpty) { - ErrorHandler.logError( - e: Exception( - "empty translations in contextual translation response return", - ), - data: { - "accessToken": accessToken, - "request": request.toJson(), - }, - ); - } - - return response; - } -} - -class ContextualTranslationRequestModel { - String fullText; - String srcLangCode; - String tgtLangCode; - String userL1; - String userL2; - PangeaTokenText span; - - ContextualTranslationRequestModel({ - required this.fullText, - required this.srcLangCode, - required this.tgtLangCode, - required this.span, - required this.userL1, - required this.userL2, - }); - - static const String _spanKey = "span"; - - Map toJson() => { - ModelKey.fullText: fullText, - ModelKey.srcLang: srcLangCode, - ModelKey.tgtLang: tgtLangCode, - _spanKey: span.toJson(), - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - }; -} - -class ContextTranslationResponseModel { - List translations; - - ContextTranslationResponseModel({required this.translations}); - - static const _translationsKey = "translation"; - - factory ContextTranslationResponseModel.fromJson( - Map json, - ) { - final List trans = json[_translationsKey] is List - ? (json[_translationsKey] as List).map((e) => e.toString()).toList() - : json[_translationsKey] != null - ? [ - json[_translationsKey], - ] - : []; - - if (trans.isEmpty) { - Sentry.addBreadcrumb( - Breadcrumb( - message: "ContextTranslationResponseModel with empty translations", - data: {"response": json}, - ), - ); - } - - return ContextTranslationResponseModel( - translations: trans, - ); - } -} diff --git a/lib/pangea/repo/topic_data_repo.dart b/lib/pangea/repo/topic_data_repo.dart deleted file mode 100644 index 9a5def03f..000000000 --- a/lib/pangea/repo/topic_data_repo.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/services.dart'; - -import 'package:http/http.dart'; - -import '../config/environment.dart'; -import '../models/chat_topic_model.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; - -/// accepts ChatTopic and calls an API for a list of Lemma -class TopicDataRepo { - static Future generate( - String? accessToken, { - required TopicDataRequest request, - }) async { - final Requests req = Requests( - accessToken: accessToken, - choreoApiKey: Environment.choreoApiKey, - ); - final Response res = await req.post( - url: PApiUrls.topicInfo, - body: request.toJson(), - ); - - return TopicDataResponse.fromJson(jsonDecode(res.body)).topicInfo; - } - - /// gets list of ChatTopic from assets/chat_data.json - static Future> getTopics(String langCode) async { - final String data = await rootBundle.loadString("assets/chat_data.json"); - final jsonResult = json.decode(data); - final List topics = []; - for (final topic in jsonResult['chats']) { - topics.add(ChatTopic.fromJson(topic)); - } - return topics; - } -} - -class TopicDataResponse { - final ChatTopic topicInfo; - - TopicDataResponse({required this.topicInfo}); - - factory TopicDataResponse.fromJson(Map json) { - return TopicDataResponse( - topicInfo: ChatTopic.fromJson(json['topic_info']), - ); - } -} - -class TopicDataRequest { - final ChatTopic topicInfo; - final int numWords; - final int numPrompts; - - TopicDataRequest({ - required this.topicInfo, - required this.numWords, - required this.numPrompts, - }); - - Map toJson() { - return { - 'topic_info': topicInfo.toJson(), - 'num_words': numWords, - 'num_prompts': numPrompts, - }; - } -} diff --git a/lib/pangea/spaces/constants/space_constants.dart b/lib/pangea/spaces/constants/space_constants.dart new file mode 100644 index 000000000..adcdda1ee --- /dev/null +++ b/lib/pangea/spaces/constants/space_constants.dart @@ -0,0 +1,7 @@ +class SpaceConstants { + static const powerLevelOfAdmin = 100; + static const languageToolPermissions = 1; + static const defaultDominantLanguage = "en"; + static const defaultTargetLanguage = "es"; + static const String classCode = 'classcode'; +} diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/spaces/controllers/space_controller.dart similarity index 53% rename from lib/pangea/controllers/class_controller.dart rename to lib/pangea/spaces/controllers/space_controller.dart index f324d2eb2..4cc930f1a 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/spaces/controllers/space_controller.dart @@ -1,24 +1,20 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:developer'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'base_controller.dart'; +import '../../common/controllers/base_controller.dart'; class ClassController extends BaseController { late PangeaController _pangeaController; @@ -27,30 +23,10 @@ class ClassController extends BaseController { _pangeaController = pangeaController; } - setActiveSpaceIdInChatListController(String? classId) { + void setActiveSpaceIdInChatListController(String? classId) { setState({"activeSpaceId": classId}); } - /// For all the spaces that the user is teaching, set the power levels - /// to enable all other users to add child rooms to the space. - void fixClassPowerLevels() { - Future.wait( - _pangeaController.matrixState.client.rooms - .where((room) => room.isSpace && room.isRoomAdmin) - .map( - (space) => space.setClassPowerLevels().catchError((err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: { - "spaceID": space.id, - }, - ); - }), - ), - ); - } - Future joinCachedSpaceCode(BuildContext context) async { final String? classCode = _pangeaController.pStoreService.read( PLocalKey.cachedClassCodeToJoin, @@ -76,7 +52,7 @@ class ClassController extends BaseController { String? notFoundError, }) async { final client = Matrix.of(context).client; - final space = await showFutureLoadingDialog( + final spaceID = await showFutureLoadingDialog( context: context, future: () async { final knockResponse = await client.httpClient.post( @@ -122,41 +98,52 @@ class ClassController extends BaseController { isAccountData: false, ); - await client.joinRoomById(chosenClassId); _pangeaController.pStoreService.delete(PLocalKey.justInputtedCode); - - Room? room = client.getRoomById(chosenClassId); - if (room == null) { - await _pangeaController.matrixState.client.waitForRoomInSync( - chosenClassId, - join: true, - ); - room = client.getRoomById(chosenClassId); - if (room == null) return null; - } - return room; + return chosenClassId; }, ); - if (space.isError || space.result == null) return; - final room = space.result!; - await room.join(); - final isFull = await room.leaveIfFull(); - if (isFull) { - await showFutureLoadingDialog( - context: context, - future: () async => throw L10n.of(context).roomFull, + + if (spaceID.isError || spaceID.result == null) return; + + try { + await client.joinRoomById(spaceID.result!); + + Room? room = client.getRoomById(spaceID.result!); + if (room == null) { + await _pangeaController.matrixState.client.waitForRoomInSync( + spaceID.result!, + join: true, + ); + room = client.getRoomById(spaceID.result!); + if (room == null) return; + } + + final isFull = await room.leaveIfFull(); + if (isFull) { + await showFutureLoadingDialog( + context: context, + future: () async => throw L10n.of(context).roomFull, + ); + return; + } + + GoogleAnalytics.joinClass(classCode); + + if (room.client.getRoomById(room.id)?.membership != Membership.join) { + await room.client.waitForRoomInSync(room.id, join: true); + } + + context.go("/rooms/${room.id}/details"); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + "classCode": classCode, + }, ); - return; } - GoogleAnalytics.joinClass(classCode); - - if (room.client.getRoomById(room.id)?.membership != Membership.join) { - await room.client.waitForRoomInSync(room.id, join: true); - } - - context.go("/rooms/${room.id}/details"); - return; // P-EPIC // prereq - server needs ability to invite to private room. how? // does server api have ability with admin token? @@ -164,30 +151,4 @@ class ClassController extends BaseController { // BE - check class code and if class code is correct, invite student to room // FE - look for invite from room and automatically accept } - - Future addMissingRoomRules(String? roomId) async { - if (roomId == null) return; - final Room? room = _pangeaController.matrixState.client.getRoomById(roomId); - if (room == null) return; - - if (room.isSpace && room.isRoomAdmin && room.pangeaRoomRules == null) { - try { - await _pangeaController.matrixState.client.setRoomStateWithKey( - roomId, - PangeaEventTypes.rules, - '', - PangeaRoomRules().toJson(), - ); - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "roomID": roomId, - }, - ); - } - } - } } diff --git a/lib/pangea/models/space_model.dart b/lib/pangea/spaces/models/space_model.dart similarity index 86% rename from lib/pangea/models/space_model.dart rename to lib/pangea/spaces/models/space_model.dart index 5d1e05a1f..dbd5d1992 100644 --- a/lib/pangea/models/space_model.dart +++ b/lib/pangea/spaces/models/space_model.dart @@ -6,11 +6,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../constants/class_default_values.dart'; -import '../constants/language_constants.dart'; -import '../constants/pangea_event_types.dart'; -import 'language_model.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import '../../events/constants/pangea_event_types.dart'; +import '../../learning_settings/constants/language_constants.dart'; +import '../../learning_settings/models/language_model.dart'; class LanguageSettingsModel { String? city; @@ -21,8 +21,8 @@ class LanguageSettingsModel { String targetLanguage; LanguageSettingsModel({ - this.dominantLanguage = ClassDefaultValues.defaultDominantLanguage, - this.targetLanguage = ClassDefaultValues.defaultTargetLanguage, + this.dominantLanguage = SpaceConstants.defaultDominantLanguage, + this.targetLanguage = SpaceConstants.defaultTargetLanguage, this.languageLevel, this.city, this.country, @@ -106,12 +106,12 @@ class PangeaRoomRules { this.isCreateStories = false, this.isVoiceNotes = true, this.isInviteOnlyStudents = true, - this.interactiveTranslator = ClassDefaultValues.languageToolPermissions, - this.interactiveGrammar = ClassDefaultValues.languageToolPermissions, - this.immersionMode = ClassDefaultValues.languageToolPermissions, - this.definitions = ClassDefaultValues.languageToolPermissions, - this.translations = ClassDefaultValues.languageToolPermissions, - this.autoIGC = ClassDefaultValues.languageToolPermissions, + this.interactiveTranslator = SpaceConstants.languageToolPermissions, + this.interactiveGrammar = SpaceConstants.languageToolPermissions, + this.immersionMode = SpaceConstants.languageToolPermissions, + this.definitions = SpaceConstants.languageToolPermissions, + this.translations = SpaceConstants.languageToolPermissions, + this.autoIGC = SpaceConstants.languageToolPermissions, }); setLanguageToolSetting(ToolSetting setting, int value) { @@ -159,16 +159,16 @@ class PangeaRoomRules { isVoiceNotes: json['is_voice_notes'], isInviteOnlyStudents: json['is_invite_only_students'] ?? true, interactiveTranslator: json['interactive_translator'] ?? - ClassDefaultValues.languageToolPermissions, + SpaceConstants.languageToolPermissions, interactiveGrammar: json['interactive_grammar'] ?? - ClassDefaultValues.languageToolPermissions, - immersionMode: json['immersion_mode'] ?? - ClassDefaultValues.languageToolPermissions, + SpaceConstants.languageToolPermissions, + immersionMode: + json['immersion_mode'] ?? SpaceConstants.languageToolPermissions, definitions: - json['definitions'] ?? ClassDefaultValues.languageToolPermissions, + json['definitions'] ?? SpaceConstants.languageToolPermissions, translations: - json['translations'] ?? ClassDefaultValues.languageToolPermissions, - autoIGC: json['auto_igc'] ?? ClassDefaultValues.languageToolPermissions, + json['translations'] ?? SpaceConstants.languageToolPermissions, + autoIGC: json['auto_igc'] ?? SpaceConstants.languageToolPermissions, ); Map toJson() { diff --git a/lib/pangea/widgets/class/join_with_link.dart b/lib/pangea/spaces/utils/join_with_link.dart similarity index 84% rename from lib/pangea/widgets/class/join_with_link.dart rename to lib/pangea/spaces/utils/join_with_link.dart index 6c44cb517..e412651ed 100644 --- a/lib/pangea/widgets/class/join_with_link.dart +++ b/lib/pangea/spaces/utils/join_with_link.dart @@ -3,9 +3,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/constants/url_query_parameter_keys.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; import 'package:fluffychat/widgets/matrix.dart'; //if on home with classcode in url and not logged in, then save it soemhow and after llogin, join class automatically @@ -29,7 +29,7 @@ class _JoinClassWithLinkState extends State { Future.delayed(Duration.zero, () async { classCode = GoRouterState.of(context) .uri - .queryParameters[UrlQueryParameterKeys.classCode]; + .queryParameters[SpaceConstants.classCode]; if (classCode == null) { Sentry.addBreadcrumb( diff --git a/lib/pangea/utils/set_class_name.dart b/lib/pangea/spaces/utils/set_class_name.dart similarity index 96% rename from lib/pangea/utils/set_class_name.dart rename to lib/pangea/spaces/utils/set_class_name.dart index c51b9c24d..40b8d573d 100644 --- a/lib/pangea/utils/set_class_name.dart +++ b/lib/pangea/spaces/utils/set_class_name.dart @@ -4,7 +4,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../utils/matrix_sdk_extensions/matrix_locals.dart'; +import '../../../utils/matrix_sdk_extensions/matrix_locals.dart'; void setClassDisplayname(BuildContext context, String? roomId) async { if (roomId == null) return; diff --git a/lib/pangea/utils/space_code.dart b/lib/pangea/spaces/utils/space_code.dart similarity index 96% rename from lib/pangea/utils/space_code.dart rename to lib/pangea/spaces/utils/space_code.dart index 8d57b386e..8b22cfb1d 100644 --- a/lib/pangea/utils/space_code.dart +++ b/lib/pangea/spaces/utils/space_code.dart @@ -6,7 +6,7 @@ import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; class SpaceCodeUtil { static const codeLength = 7; diff --git a/lib/pangea/widgets/chat/add_room_dialog.dart b/lib/pangea/spaces/widgets/add_room_dialog.dart similarity index 100% rename from lib/pangea/widgets/chat/add_room_dialog.dart rename to lib/pangea/spaces/widgets/add_room_dialog.dart diff --git a/lib/pangea/widgets/download_analytics_dialog.dart b/lib/pangea/spaces/widgets/download_analytics_dialog.dart similarity index 95% rename from lib/pangea/widgets/download_analytics_dialog.dart rename to lib/pangea/spaces/widgets/download_analytics_dialog.dart index fa39c0956..40e6249c2 100644 --- a/lib/pangea/widgets/download_analytics_dialog.dart +++ b/lib/pangea/spaces/widgets/download_analytics_dialog.dart @@ -8,16 +8,16 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/enum/analytics/analytics_summary_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/analytics/analytics_summary_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; -import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/download_file.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/analytics/enums/analytics_summary_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/analytics_summary_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; +import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_file.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; class DownloadAnalyticsDialog extends StatefulWidget { diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/subscription/controllers/subscription_controller.dart similarity index 92% rename from lib/pangea/controllers/subscription_controller.dart rename to lib/pangea/subscription/controllers/subscription_controller.dart index 3f214fd0a..4a1d6b3d7 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/subscription/controllers/subscription_controller.dart @@ -12,20 +12,20 @@ import 'package:purchases_flutter/purchases_flutter.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/user_controller.dart'; -import 'package:fluffychat/pangea/models/base_subscription_info.dart'; -import 'package:fluffychat/pangea/models/mobile_subscriptions.dart'; -import 'package:fluffychat/pangea/models/web_subscriptions.dart'; -import 'package:fluffychat/pangea/network/requests.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; -import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/subscription/models/base_subscription_info.dart'; +import 'package:fluffychat/pangea/subscription/models/mobile_subscriptions.dart'; +import 'package:fluffychat/pangea/subscription/models/web_subscriptions.dart'; +import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; +import 'package:fluffychat/pangea/subscription/widgets/subscription_paywall.dart'; +import 'package:fluffychat/pangea/user/controllers/user_controller.dart'; import 'package:fluffychat/utils/platform_infos.dart'; enum SubscriptionStatus { diff --git a/lib/pangea/models/base_subscription_info.dart b/lib/pangea/subscription/models/base_subscription_info.dart similarity index 92% rename from lib/pangea/models/base_subscription_info.dart rename to lib/pangea/subscription/models/base_subscription_info.dart index df7a33a0a..745e36fbc 100644 --- a/lib/pangea/models/base_subscription_info.dart +++ b/lib/pangea/subscription/models/base_subscription_info.dart @@ -1,11 +1,11 @@ import 'package:collection/collection.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/repo/subscription_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_repo.dart'; +import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Contains information about the users's current subscription diff --git a/lib/pangea/models/mobile_subscriptions.dart b/lib/pangea/subscription/models/mobile_subscriptions.dart similarity index 91% rename from lib/pangea/models/mobile_subscriptions.dart rename to lib/pangea/subscription/models/mobile_subscriptions.dart index 6074d74cd..a0fdd8a05 100644 --- a/lib/pangea/models/mobile_subscriptions.dart +++ b/lib/pangea/subscription/models/mobile_subscriptions.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:purchases_flutter/purchases_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/models/base_subscription_info.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/models/base_subscription_info.dart'; class MobileSubscriptionInfo extends CurrentSubscriptionInfo { MobileSubscriptionInfo({ diff --git a/lib/pangea/models/web_subscriptions.dart b/lib/pangea/subscription/models/web_subscriptions.dart similarity index 82% rename from lib/pangea/models/web_subscriptions.dart rename to lib/pangea/subscription/models/web_subscriptions.dart index 9b1787509..281cf7fce 100644 --- a/lib/pangea/models/web_subscriptions.dart +++ b/lib/pangea/subscription/models/web_subscriptions.dart @@ -1,7 +1,7 @@ import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/models/base_subscription_info.dart'; -import 'package:fluffychat/pangea/repo/subscription_repo.dart'; +import 'package:fluffychat/pangea/subscription/models/base_subscription_info.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_repo.dart'; class WebSubscriptionInfo extends CurrentSubscriptionInfo { WebSubscriptionInfo({ diff --git a/lib/pangea/pages/settings_subscription/change_subscription.dart b/lib/pangea/subscription/pages/change_subscription.dart similarity index 89% rename from lib/pangea/pages/settings_subscription/change_subscription.dart rename to lib/pangea/subscription/pages/change_subscription.dart index 201f4bb5f..e0078c5de 100644 --- a/lib/pangea/pages/settings_subscription/change_subscription.dart +++ b/lib/pangea/subscription/pages/change_subscription.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; -import 'package:fluffychat/pangea/widgets/subscription/subscription_buttons.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; +import 'package:fluffychat/pangea/subscription/widgets/subscription_buttons.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ChangeSubscription extends StatelessWidget { diff --git a/lib/pangea/pages/settings_subscription/settings_subscription.dart b/lib/pangea/subscription/pages/settings_subscription.dart similarity index 93% rename from lib/pangea/pages/settings_subscription/settings_subscription.dart rename to lib/pangea/subscription/pages/settings_subscription.dart index d3ca46518..c16732784 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription.dart +++ b/lib/pangea/subscription/pages/settings_subscription.dart @@ -8,11 +8,11 @@ import 'package:go_router/go_router.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription_view.dart'; -import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; -import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/pages/settings_subscription_view.dart'; +import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; +import 'package:fluffychat/pangea/subscription/widgets/subscription_snackbar.dart'; import 'package:fluffychat/widgets/matrix.dart'; class SubscriptionManagement extends StatefulWidget { diff --git a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart b/lib/pangea/subscription/pages/settings_subscription_view.dart similarity index 95% rename from lib/pangea/pages/settings_subscription/settings_subscription_view.dart rename to lib/pangea/subscription/pages/settings_subscription_view.dart index 2c7eaa94c..0f8392e48 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart +++ b/lib/pangea/subscription/pages/settings_subscription_view.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:intl/intl.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/change_subscription.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; +import 'package:fluffychat/pangea/subscription/pages/change_subscription.dart'; +import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; class SettingsSubscriptionView extends StatelessWidget { diff --git a/lib/pangea/repo/subscription_repo.dart b/lib/pangea/subscription/repo/subscription_repo.dart similarity index 93% rename from lib/pangea/repo/subscription_repo.dart rename to lib/pangea/subscription/repo/subscription_repo.dart index 362276aa1..ab81f920c 100644 --- a/lib/pangea/repo/subscription_repo.dart +++ b/lib/pangea/subscription/repo/subscription_repo.dart @@ -6,13 +6,13 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:http/http.dart' as http; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/network/requests.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../network/urls.dart'; +import '../../common/network/urls.dart'; class SubscriptionRepo { static Future getAppIds() async { diff --git a/lib/pangea/utils/subscription_app_id.dart b/lib/pangea/subscription/utils/subscription_app_id.dart similarity index 100% rename from lib/pangea/utils/subscription_app_id.dart rename to lib/pangea/subscription/utils/subscription_app_id.dart diff --git a/lib/pangea/widgets/subscription/subscription_buttons.dart b/lib/pangea/subscription/widgets/subscription_buttons.dart similarity index 88% rename from lib/pangea/widgets/subscription/subscription_buttons.dart rename to lib/pangea/subscription/widgets/subscription_buttons.dart index 66b021f62..ea31e5da8 100644 --- a/lib/pangea/widgets/subscription/subscription_buttons.dart +++ b/lib/pangea/subscription/widgets/subscription_buttons.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; import 'package:fluffychat/widgets/matrix.dart'; class SubscriptionButtons extends StatelessWidget { diff --git a/lib/pangea/widgets/subscription/subscription_options.dart b/lib/pangea/subscription/widgets/subscription_options.dart similarity index 96% rename from lib/pangea/widgets/subscription/subscription_options.dart rename to lib/pangea/subscription/widgets/subscription_options.dart index a6b790027..040b6d931 100644 --- a/lib/pangea/widgets/subscription/subscription_options.dart +++ b/lib/pangea/subscription/widgets/subscription_options.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; class SubscriptionOptions extends StatelessWidget { final PangeaController pangeaController; diff --git a/lib/pangea/widgets/subscription/subscription_paywall.dart b/lib/pangea/subscription/widgets/subscription_paywall.dart similarity index 91% rename from lib/pangea/widgets/subscription/subscription_paywall.dart rename to lib/pangea/subscription/widgets/subscription_paywall.dart index 870067202..76b7af867 100644 --- a/lib/pangea/widgets/subscription/subscription_paywall.dart +++ b/lib/pangea/subscription/widgets/subscription_paywall.dart @@ -4,8 +4,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/widgets/subscription/subscription_options.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/subscription/widgets/subscription_options.dart'; class SubscriptionPaywall extends StatelessWidget { final PangeaController pangeaController; diff --git a/lib/pangea/widgets/subscription/subscription_snackbar.dart b/lib/pangea/subscription/widgets/subscription_snackbar.dart similarity index 100% rename from lib/pangea/widgets/subscription/subscription_snackbar.dart rename to lib/pangea/subscription/widgets/subscription_snackbar.dart diff --git a/lib/pangea/controllers/practice_activity_record_controller.dart b/lib/pangea/toolbar/controllers/practice_activity_record_controller.dart similarity index 92% rename from lib/pangea/controllers/practice_activity_record_controller.dart rename to lib/pangea/toolbar/controllers/practice_activity_record_controller.dart index 6c240183c..0b0fb2248 100644 --- a/lib/pangea/controllers/practice_activity_record_controller.dart +++ b/lib/pangea/toolbar/controllers/practice_activity_record_controller.dart @@ -6,11 +6,11 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_record_model.dart'; /// Represents an item in the completion cache. class _RecordCacheItem { diff --git a/lib/pangea/controllers/speech_to_text_controller.dart b/lib/pangea/toolbar/controllers/speech_to_text_controller.dart similarity index 86% rename from lib/pangea/controllers/speech_to_text_controller.dart rename to lib/pangea/toolbar/controllers/speech_to_text_controller.dart index 13a63742a..0de0a7b3d 100644 --- a/lib/pangea/controllers/speech_to_text_controller.dart +++ b/lib/pangea/toolbar/controllers/speech_to_text_controller.dart @@ -5,15 +5,15 @@ import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import '../config/environment.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import '../../common/config/environment.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; // Assuming SpeechToTextRequestModel, SpeechToTextModel and related models are already defined as in your provided code. diff --git a/lib/pangea/controllers/text_to_speech_controller.dart b/lib/pangea/toolbar/controllers/text_to_speech_controller.dart similarity index 93% rename from lib/pangea/controllers/text_to_speech_controller.dart rename to lib/pangea/toolbar/controllers/text_to_speech_controller.dart index 27442d9d0..dfc9cee17 100644 --- a/lib/pangea/controllers/text_to_speech_controller.dart +++ b/lib/pangea/toolbar/controllers/text_to_speech_controller.dart @@ -4,12 +4,12 @@ import 'dart:typed_data'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import '../network/requests.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import '../../common/network/requests.dart'; class PangeaAudioEventData { final String text; diff --git a/lib/pangea/widgets/chat/tts_controller.dart b/lib/pangea/toolbar/controllers/tts_controller.dart similarity index 96% rename from lib/pangea/widgets/chat/tts_controller.dart rename to lib/pangea/toolbar/controllers/tts_controller.dart index 1bb393662..1d47e6e65 100644 --- a/lib/pangea/widgets/chat/tts_controller.dart +++ b/lib/pangea/toolbar/controllers/tts_controller.dart @@ -8,11 +8,11 @@ import 'package:flutter_tts/flutter_tts.dart' as flutter_tts; import 'package:matrix/matrix_api_lite/utils/logs.dart'; import 'package:text_to_speech/text_to_speech.dart'; -import 'package:fluffychat/pangea/controllers/user_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/missing_voice_button.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/missing_voice_button.dart'; +import 'package:fluffychat/pangea/user/controllers/user_controller.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/enum/activity_display_instructions_enum.dart b/lib/pangea/toolbar/enums/activity_display_instructions_enum.dart similarity index 100% rename from lib/pangea/enum/activity_display_instructions_enum.dart rename to lib/pangea/toolbar/enums/activity_display_instructions_enum.dart diff --git a/lib/pangea/enum/activity_type_enum.dart b/lib/pangea/toolbar/enums/activity_type_enum.dart similarity index 95% rename from lib/pangea/enum/activity_type_enum.dart rename to lib/pangea/toolbar/enums/activity_type_enum.dart index 8b7c46def..ed76bfd82 100644 --- a/lib/pangea/enum/activity_type_enum.dart +++ b/lib/pangea/toolbar/enums/activity_type_enum.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; enum ActivityTypeEnum { wordMeaning, diff --git a/lib/pangea/enum/audio_encoding_enum.dart b/lib/pangea/toolbar/enums/audio_encoding_enum.dart similarity index 100% rename from lib/pangea/enum/audio_encoding_enum.dart rename to lib/pangea/toolbar/enums/audio_encoding_enum.dart diff --git a/lib/pangea/enum/message_mode_enum.dart b/lib/pangea/toolbar/enums/message_mode_enum.dart similarity index 100% rename from lib/pangea/enum/message_mode_enum.dart rename to lib/pangea/toolbar/enums/message_mode_enum.dart diff --git a/lib/pangea/matrix_event_wrappers/practice_activity_event.dart b/lib/pangea/toolbar/event_wrappers/practice_activity_event.dart similarity index 87% rename from lib/pangea/matrix_event_wrappers/practice_activity_event.dart rename to lib/pangea/toolbar/event_wrappers/practice_activity_event.dart index 71c06fb20..5c4f29c3f 100644 --- a/lib/pangea/matrix_event_wrappers/practice_activity_event.dart +++ b/lib/pangea/toolbar/event_wrappers/practice_activity_event.dart @@ -4,10 +4,10 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_record_event.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import '../constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_record_event.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import '../../events/constants/pangea_event_types.dart'; class PracticeActivityEvent { Event event; diff --git a/lib/pangea/matrix_event_wrappers/practice_activity_record_event.dart b/lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart similarity index 69% rename from lib/pangea/matrix_event_wrappers/practice_activity_record_event.dart rename to lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart index 58dbf4f4b..629a1687e 100644 --- a/lib/pangea/matrix_event_wrappers/practice_activity_record_event.dart +++ b/lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart @@ -1,8 +1,8 @@ import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import '../constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_record_model.dart'; +import '../../events/constants/pangea_event_types.dart'; class PracticeActivityRecordEvent { Event event; diff --git a/lib/pangea/models/practice_activities.dart/message_activity_request.dart b/lib/pangea/toolbar/models/message_activity_request.dart similarity index 94% rename from lib/pangea/models/practice_activities.dart/message_activity_request.dart rename to lib/pangea/toolbar/models/message_activity_request.dart index 22599504d..c7882c7fe 100644 --- a/lib/pangea/models/practice_activities.dart/message_activity_request.dart +++ b/lib/pangea/toolbar/models/message_activity_request.dart @@ -1,9 +1,9 @@ import 'package:collection/collection.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; // includes feedback text and the bad activity model class ActivityQualityFeedback { diff --git a/lib/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart b/lib/pangea/toolbar/models/multiple_choice_activity_model.dart similarity index 96% rename from lib/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart rename to lib/pangea/toolbar/models/multiple_choice_activity_model.dart index f27607c7c..f5e0755dc 100644 --- a/lib/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart +++ b/lib/pangea/toolbar/models/multiple_choice_activity_model.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; class ActivityContent { final String question; diff --git a/lib/pangea/models/practice_activities.dart/practice_activity_model.dart b/lib/pangea/toolbar/models/practice_activity_model.dart similarity index 95% rename from lib/pangea/models/practice_activities.dart/practice_activity_model.dart rename to lib/pangea/toolbar/models/practice_activity_model.dart index d7166e8bc..0d8334c97 100644 --- a/lib/pangea/models/practice_activities.dart/practice_activity_model.dart +++ b/lib/pangea/toolbar/models/practice_activity_model.dart @@ -7,13 +7,13 @@ import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/enum/activity_display_instructions_enum.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/analytics/morph_categories_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/morph_categories_enum.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_display_instructions_enum.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/multiple_choice_activity_model.dart'; class ConstructIdentifier { final String lemma; diff --git a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart b/lib/pangea/toolbar/models/practice_activity_record_model.dart similarity index 95% rename from lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart rename to lib/pangea/toolbar/models/practice_activity_record_model.dart index 1ac7f58be..91f270d09 100644 --- a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart +++ b/lib/pangea/toolbar/models/practice_activity_record_model.dart @@ -7,11 +7,11 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; class PracticeActivityRecordModel { final String? question; diff --git a/lib/pangea/models/speech_to_text_models.dart b/lib/pangea/toolbar/models/speech_to_text_models.dart similarity index 97% rename from lib/pangea/models/speech_to_text_models.dart rename to lib/pangea/toolbar/models/speech_to_text_models.dart index 606ab29fa..fb424c532 100644 --- a/lib/pangea/models/speech_to_text_models.dart +++ b/lib/pangea/toolbar/models/speech_to_text_models.dart @@ -6,8 +6,8 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/audio_encoding_enum.dart'; const int thresholdForGreen = 80; diff --git a/lib/pangea/repo/practice/emoji_activity_generator.dart b/lib/pangea/toolbar/repo/emoji_activity_generator.dart similarity index 72% rename from lib/pangea/repo/practice/emoji_activity_generator.dart rename to lib/pangea/toolbar/repo/emoji_activity_generator.dart index 945fa1d57..ce18dc5e6 100644 --- a/lib/pangea/repo/practice/emoji_activity_generator.dart +++ b/lib/pangea/toolbar/repo/emoji_activity_generator.dart @@ -3,11 +3,11 @@ import 'dart:math'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; class EmojiActivityGenerator { Future get( diff --git a/lib/pangea/repo/image_repo.dart b/lib/pangea/toolbar/repo/image_repo.dart similarity index 92% rename from lib/pangea/repo/image_repo.dart rename to lib/pangea/toolbar/repo/image_repo.dart index 75939b887..d44fc9104 100644 --- a/lib/pangea/repo/image_repo.dart +++ b/lib/pangea/toolbar/repo/image_repo.dart @@ -5,10 +5,10 @@ import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../config/environment.dart'; -import '../network/requests.dart'; +import '../../common/config/environment.dart'; +import '../../common/network/requests.dart'; class GenerateImageeResponse { final String imageUrl; diff --git a/lib/pangea/repo/practice/lemma_activity_generator.dart b/lib/pangea/toolbar/repo/lemma_activity_generator.dart similarity index 73% rename from lib/pangea/repo/practice/lemma_activity_generator.dart rename to lib/pangea/toolbar/repo/lemma_activity_generator.dart index 9688bffe5..945e41355 100644 --- a/lib/pangea/repo/practice/lemma_activity_generator.dart +++ b/lib/pangea/toolbar/repo/lemma_activity_generator.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; class LemmaActivityGenerator { Future get( diff --git a/lib/pangea/repo/practice/morph_activity_generator.dart b/lib/pangea/toolbar/repo/morph_activity_generator.dart similarity index 81% rename from lib/pangea/repo/practice/morph_activity_generator.dart rename to lib/pangea/toolbar/repo/morph_activity_generator.dart index 7b0563fed..9ba274e6e 100644 --- a/lib/pangea/repo/practice/morph_activity_generator.dart +++ b/lib/pangea/toolbar/repo/morph_activity_generator.dart @@ -2,14 +2,14 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/analytics/morph_categories_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/enums/morph_categories_enum.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; typedef MorphActivitySequence = Map; diff --git a/lib/pangea/repo/practice/practice_repo.dart b/lib/pangea/toolbar/repo/practice_repo.dart similarity index 82% rename from lib/pangea/repo/practice/practice_repo.dart rename to lib/pangea/toolbar/repo/practice_repo.dart index a85466a09..c6cf74edd 100644 --- a/lib/pangea/repo/practice/practice_repo.dart +++ b/lib/pangea/toolbar/repo/practice_repo.dart @@ -8,21 +8,21 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/network/requests.dart'; -import 'package:fluffychat/pangea/network/urls.dart'; -import 'package:fluffychat/pangea/repo/practice/emoji_activity_generator.dart'; -import 'package:fluffychat/pangea/repo/practice/lemma_activity_generator.dart'; -import 'package:fluffychat/pangea/repo/practice/morph_activity_generator.dart'; -import 'package:fluffychat/pangea/repo/practice/word_meaning_activity_generator.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/repo/emoji_activity_generator.dart'; +import 'package:fluffychat/pangea/toolbar/repo/lemma_activity_generator.dart'; +import 'package:fluffychat/pangea/toolbar/repo/morph_activity_generator.dart'; +import 'package:fluffychat/pangea/toolbar/repo/word_meaning_activity_generator.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Represents an item in the completion cache. diff --git a/lib/pangea/repo/practice/word_meaning_activity_generator.dart b/lib/pangea/toolbar/repo/word_meaning_activity_generator.dart similarity index 72% rename from lib/pangea/repo/practice/word_meaning_activity_generator.dart rename to lib/pangea/toolbar/repo/word_meaning_activity_generator.dart index 0d555d158..26935f261 100644 --- a/lib/pangea/repo/practice/word_meaning_activity_generator.dart +++ b/lib/pangea/toolbar/repo/word_meaning_activity_generator.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_repo.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_request.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_repo.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; class WordMeaningActivityGenerator { Future get( diff --git a/lib/pangea/utils/update_version_dialog.dart b/lib/pangea/toolbar/utils/update_version_dialog.dart similarity index 90% rename from lib/pangea/utils/update_version_dialog.dart rename to lib/pangea/toolbar/utils/update_version_dialog.dart index 79dd1f4a1..1c59f09e2 100644 --- a/lib/pangea/utils/update_version_dialog.dart +++ b/lib/pangea/toolbar/utils/update_version_dialog.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; Future showUpdateVersionDialog({ required Future Function() future, diff --git a/lib/pangea/widgets/common/icon_number_widget.dart b/lib/pangea/toolbar/widgets/icon_number_widget.dart similarity index 100% rename from lib/pangea/widgets/common/icon_number_widget.dart rename to lib/pangea/toolbar/widgets/icon_number_widget.dart diff --git a/lib/pangea/widgets/chat/message_audio_card.dart b/lib/pangea/toolbar/widgets/message_audio_card.dart similarity index 89% rename from lib/pangea/widgets/chat/message_audio_card.dart rename to lib/pangea/toolbar/widgets/message_audio_card.dart index 4ebbc9ffc..0a4ea7ecd 100644 --- a/lib/pangea/widgets/chat/message_audio_card.dart +++ b/lib/pangea/toolbar/widgets/message_audio_card.dart @@ -8,15 +8,15 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/events/audio_player.dart'; -import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; class MessageAudioCard extends StatefulWidget { final PangeaMessageEvent messageEvent; diff --git a/lib/pangea/widgets/chat/message_buttons.dart b/lib/pangea/toolbar/widgets/message_buttons.dart similarity index 95% rename from lib/pangea/widgets/chat/message_buttons.dart rename to lib/pangea/toolbar/widgets/message_buttons.dart index 810b8d4cc..8e101c672 100644 --- a/lib/pangea/widgets/chat/message_buttons.dart +++ b/lib/pangea/toolbar/widgets/message_buttons.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; class MessageButtons extends StatelessWidget { final ChatController controller; diff --git a/lib/pangea/widgets/chat/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart similarity index 96% rename from lib/pangea/widgets/chat/message_selection_overlay.dart rename to lib/pangea/toolbar/widgets/message_selection_overlay.dart index aa0edaae6..985b7088e 100644 --- a/lib/pangea/widgets/chat/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -12,18 +12,18 @@ import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/message_reactions.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_toolbar.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_toolbar_buttons.dart'; -import 'package:fluffychat/pangea/widgets/chat/overlay_footer.dart'; -import 'package:fluffychat/pangea/widgets/chat/overlay_header.dart'; -import 'package:fluffychat/pangea/widgets/chat/overlay_message.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_toolbar.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_toolbar_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/overlay_footer.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/overlay_header.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/overlay_message.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/widgets/chat/message_speech_to_text_card.dart b/lib/pangea/toolbar/widgets/message_speech_to_text_card.dart similarity index 93% rename from lib/pangea/widgets/chat/message_speech_to_text_card.dart rename to lib/pangea/toolbar/widgets/message_speech_to_text_card.dart index 75d5028ed..4017f89d8 100644 --- a/lib/pangea/widgets/chat/message_speech_to_text_card.dart +++ b/lib/pangea/toolbar/widgets/message_speech_to_text_card.dart @@ -8,16 +8,16 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/common/icon_number_widget.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/icon_number_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../utils/bot_style.dart'; +import '../../bot/utils/bot_style.dart'; class MessageSpeechToTextCard extends StatefulWidget { final PangeaMessageEvent messageEvent; diff --git a/lib/pangea/widgets/chat/message_token_text.dart b/lib/pangea/toolbar/widgets/message_token_text.dart similarity index 94% rename from lib/pangea/widgets/chat/message_token_text.dart rename to lib/pangea/toolbar/widgets/message_token_text.dart index 1cf011152..4c04bcebf 100644 --- a/lib/pangea/widgets/chat/message_token_text.dart +++ b/lib/pangea/toolbar/widgets/message_token_text.dart @@ -4,11 +4,11 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/utils/message_text_util.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/utils/message_text_util.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Question - does this need to be stateful or does this work? diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/toolbar/widgets/message_toolbar.dart similarity index 81% rename from lib/pangea/widgets/chat/message_toolbar.dart rename to lib/pangea/toolbar/widgets/message_toolbar.dart index c0b940fbf..6b3450d3e 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/toolbar/widgets/message_toolbar.dart @@ -5,17 +5,17 @@ import 'package:matrix/matrix_api_lite/model/message_types.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_speech_to_text_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_translation_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_unsubscribed_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/word_zoom_widget.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_speech_to_text_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_translation_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_unsubscribed_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; import 'package:fluffychat/widgets/matrix.dart'; const double minCardHeight = 70; diff --git a/lib/pangea/widgets/chat/message_toolbar_buttons.dart b/lib/pangea/toolbar/widgets/message_toolbar_buttons.dart similarity index 96% rename from lib/pangea/widgets/chat/message_toolbar_buttons.dart rename to lib/pangea/toolbar/widgets/message_toolbar_buttons.dart index 15095eb1e..edba10ff4 100644 --- a/lib/pangea/widgets/chat/message_toolbar_buttons.dart +++ b/lib/pangea/toolbar/widgets/message_toolbar_buttons.dart @@ -9,9 +9,9 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; class ToolbarButtons extends StatelessWidget { final Event event; diff --git a/lib/pangea/widgets/chat/message_toolbar_selection_area.dart b/lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart similarity index 95% rename from lib/pangea/widgets/chat/message_toolbar_selection_area.dart rename to lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart index e5d2dc7fb..eae99d9ae 100644 --- a/lib/pangea/widgets/chat/message_toolbar_selection_area.dart +++ b/lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; class ToolbarSelectionArea extends StatelessWidget { final Event event; diff --git a/lib/pangea/widgets/chat/message_translation_card.dart b/lib/pangea/toolbar/widgets/message_translation_card.dart similarity index 91% rename from lib/pangea/widgets/chat/message_translation_card.dart rename to lib/pangea/toolbar/widgets/message_translation_card.dart index a1ba11571..26e2548bf 100644 --- a/lib/pangea/widgets/chat/message_translation_card.dart +++ b/lib/pangea/toolbar/widgets/message_translation_card.dart @@ -1,15 +1,15 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; import 'package:fluffychat/widgets/matrix.dart'; class MessageTranslationCard extends StatefulWidget { diff --git a/lib/pangea/widgets/chat/message_unsubscribed_card.dart b/lib/pangea/toolbar/widgets/message_unsubscribed_card.dart similarity index 93% rename from lib/pangea/widgets/chat/message_unsubscribed_card.dart rename to lib/pangea/toolbar/widgets/message_unsubscribed_card.dart index 143e33f2e..9788333fc 100644 --- a/lib/pangea/widgets/chat/message_unsubscribed_card.dart +++ b/lib/pangea/toolbar/widgets/message_unsubscribed_card.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/widgets/matrix.dart'; class MessageUnsubscribedCard extends StatelessWidget { diff --git a/lib/pangea/widgets/chat/missing_voice_button.dart b/lib/pangea/toolbar/widgets/missing_voice_button.dart similarity index 100% rename from lib/pangea/widgets/chat/missing_voice_button.dart rename to lib/pangea/toolbar/widgets/missing_voice_button.dart diff --git a/lib/pangea/widgets/chat/overlay_footer.dart b/lib/pangea/toolbar/widgets/overlay_footer.dart similarity index 94% rename from lib/pangea/widgets/chat/overlay_footer.dart rename to lib/pangea/toolbar/widgets/overlay_footer.dart index 7862c7fc2..4ebadbc7e 100644 --- a/lib/pangea/widgets/chat/overlay_footer.dart +++ b/lib/pangea/toolbar/widgets/overlay_footer.dart @@ -4,7 +4,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_input_row.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; class OverlayFooter extends StatelessWidget { final ChatController controller; diff --git a/lib/pangea/widgets/chat/overlay_header.dart b/lib/pangea/toolbar/widgets/overlay_header.dart similarity index 100% rename from lib/pangea/widgets/chat/overlay_header.dart rename to lib/pangea/toolbar/widgets/overlay_header.dart diff --git a/lib/pangea/widgets/chat/overlay_message.dart b/lib/pangea/toolbar/widgets/overlay_message.dart similarity index 98% rename from lib/pangea/widgets/chat/overlay_message.dart rename to lib/pangea/toolbar/widgets/overlay_message.dart index aea2a00a0..2c5e10792 100644 --- a/lib/pangea/widgets/chat/overlay_message.dart +++ b/lib/pangea/toolbar/widgets/overlay_message.dart @@ -6,8 +6,8 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/message_content.dart'; import 'package:fluffychat/pages/chat/events/reply_content.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pangea/widgets/chat/pangea_reaction_picker.dart b/lib/pangea/toolbar/widgets/pangea_reaction_picker.dart similarity index 94% rename from lib/pangea/widgets/chat/pangea_reaction_picker.dart rename to lib/pangea/toolbar/widgets/pangea_reaction_picker.dart index 336e5b122..7dff3c79b 100644 --- a/lib/pangea/widgets/chat/pangea_reaction_picker.dart +++ b/lib/pangea/toolbar/widgets/pangea_reaction_picker.dart @@ -5,8 +5,8 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_emojis.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; class PangeaReactionsPicker extends StatelessWidget { final ChatController controller; diff --git a/lib/pangea/widgets/practice_activity/emoji_practice_button.dart b/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart similarity index 77% rename from lib/pangea/widgets/practice_activity/emoji_practice_button.dart rename to lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart index 9d0d2fed5..f0f473b7a 100644 --- a/lib/pangea/widgets/practice_activity/emoji_practice_button.dart +++ b/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/word_zoom_activity_button.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart'; class EmojiPracticeButton extends StatelessWidget { final PangeaToken token; diff --git a/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart b/lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart similarity index 90% rename from lib/pangea/widgets/practice_activity/multiple_choice_activity.dart rename to lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart index 77ba8b91a..d4f68159c 100644 --- a/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart +++ b/lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart @@ -6,18 +6,18 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; import 'package:fluffychat/pangea/choreographer/widgets/choice_array.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/word_audio_button.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_record_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_audio_button.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// The multiple choice activity view diff --git a/lib/pangea/widgets/practice_activity/practice_activity_card.dart b/lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart similarity index 88% rename from lib/pangea/widgets/practice_activity/practice_activity_card.dart rename to lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart index 06de7dce2..4a3b9a138 100644 --- a/lib/pangea/widgets/practice_activity/practice_activity_card.dart +++ b/lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart @@ -6,25 +6,25 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/message_activity_request.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/repo/practice/practice_repo.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/animations/gain_points.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/multiple_choice_activity.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/word_zoom_widget.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/controllers/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics/widgets/gain_points.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; +import 'package:fluffychat/pangea/toolbar/models/message_activity_request.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_model.dart'; +import 'package:fluffychat/pangea/toolbar/models/practice_activity_record_model.dart'; +import 'package:fluffychat/pangea/toolbar/repo/practice_repo.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// The wrapper for practice activity content. diff --git a/lib/pangea/widgets/practice_activity/word_audio_button.dart b/lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart similarity index 93% rename from lib/pangea/widgets/practice_activity/word_audio_button.dart rename to lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart index b3f54d161..6a8354d3a 100644 --- a/lib/pangea/widgets/practice_activity/word_audio_button.dart +++ b/lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; class WordAudioButton extends StatefulWidget { final String text; diff --git a/lib/pangea/widgets/practice_activity/word_text_with_audio_button.dart b/lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart similarity index 95% rename from lib/pangea/widgets/practice_activity/word_text_with_audio_button.dart rename to lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart index 7eab84be1..df892c6a8 100644 --- a/lib/pangea/widgets/practice_activity/word_text_with_audio_button.dart +++ b/lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; class WordTextWithAudioButton extends StatefulWidget { final String text; diff --git a/lib/pangea/widgets/practice_activity/word_zoom_activity_button.dart b/lib/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart similarity index 100% rename from lib/pangea/widgets/practice_activity/word_zoom_activity_button.dart rename to lib/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart diff --git a/lib/pangea/widgets/chat/toolbar_content_loading_indicator.dart b/lib/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart similarity index 100% rename from lib/pangea/widgets/chat/toolbar_content_loading_indicator.dart rename to lib/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart diff --git a/lib/pangea/widgets/word_zoom/lemma_meaning_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart similarity index 92% rename from lib/pangea/widgets/word_zoom/lemma_meaning_widget.dart rename to lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart index 47fdcedad..4385bcad5 100644 --- a/lib/pangea/widgets/word_zoom/lemma_meaning_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart @@ -6,11 +6,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/text_loading_shimmer.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_repo.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_request.dart'; -import 'package:fluffychat/pangea/repo/lemma_info/lemma_info_response.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_repo.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; +import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; +import 'package:fluffychat/pangea/analytics/widgets/text_loading_shimmer.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LemmaMeaningWidget extends StatefulWidget { diff --git a/lib/pangea/toolbar/widgets/word_zoom/lemma_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/lemma_widget.dart new file mode 100644 index 000000000..3e9f6227b --- /dev/null +++ b/lib/pangea/toolbar/widgets/word_zoom/lemma_widget.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; + +class LemmaWidget extends StatelessWidget { + final PangeaToken token; + + const LemmaWidget({ + super.key, + required this.token, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Text("${token.lemma.text} ${token.xpEmoji}"), + ); + } +} diff --git a/lib/pangea/widgets/word_zoom/morphs/morphological_center_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_center_widget.dart similarity index 93% rename from lib/pangea/widgets/word_zoom/morphs/morphological_center_widget.dart rename to lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_center_widget.dart index e58c9fdb0..1d3394d74 100644 --- a/lib/pangea/widgets/word_zoom/morphs/morphological_center_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_center_widget.dart @@ -5,16 +5,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/morph_categories_and_labels.dart'; -import 'package:fluffychat/pangea/enum/analytics/morph_categories_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/analytics/constants/morph_categories_and_labels.dart'; +import 'package:fluffychat/pangea/analytics/enums/morph_categories_enum.dart'; +import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; class MorphologicalCenterWidget extends StatefulWidget { diff --git a/lib/pangea/widgets/word_zoom/morphs/morphological_list_item.dart b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart similarity index 81% rename from lib/pangea/widgets/word_zoom/morphs/morphological_list_item.dart rename to lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart index ec6c1de5a..e9d98f7e5 100644 --- a/lib/pangea/widgets/word_zoom/morphs/morphological_list_item.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/enum/analytics/morph_categories_enum.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/word_zoom_activity_button.dart'; +import 'package:fluffychat/pangea/analytics/enums/morph_categories_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart'; class MorphologicalListItem extends StatelessWidget { final Function(String) onPressed; diff --git a/lib/pangea/widgets/word_zoom/morphs/morphological_list_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart similarity index 89% rename from lib/pangea/widgets/word_zoom/morphs/morphological_list_widget.dart rename to lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart index d7ee01ead..490abe459 100644 --- a/lib/pangea/widgets/word_zoom/morphs/morphological_list_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/constants/morph_categories_and_labels.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/morphs/morphological_list_item.dart'; +import 'package:fluffychat/pangea/analytics/constants/morph_categories_and_labels.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart'; class ActivityMorph { final String morphFeature; diff --git a/lib/pangea/widgets/word_zoom/word_zoom_center_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_center_widget.dart similarity index 79% rename from lib/pangea/widgets/word_zoom/word_zoom_center_widget.dart rename to lib/pangea/toolbar/widgets/word_zoom/word_zoom_center_widget.dart index 7093e2bda..c953e3489 100644 --- a/lib/pangea/widgets/word_zoom/word_zoom_center_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_center_widget.dart @@ -3,14 +3,14 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/lemma_meaning_widget.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/morphs/morphological_center_widget.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/word_zoom_widget.dart'; +import 'package:fluffychat/pangea/analytics/controllers/message_analytics_controller.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/morphs/morphological_center_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; class WordZoomCenterWidget extends StatelessWidget { final WordZoomSelection? selectionType; diff --git a/lib/pangea/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart similarity index 91% rename from lib/pangea/widgets/word_zoom/word_zoom_widget.dart rename to lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart index 9e95d5037..1d08841e6 100644 --- a/lib/pangea/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -3,16 +3,16 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/emoji_practice_button.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/word_text_with_audio_button.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/lemma_widget.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/morphs/morphological_list_widget.dart'; -import 'package:fluffychat/pangea/widgets/word_zoom/word_zoom_center_widget.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart'; +import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_center_widget.dart'; enum WordZoomSelection { meaning, diff --git a/lib/pangea/constants/age_limits.dart b/lib/pangea/user/constants/age_limits.dart similarity index 100% rename from lib/pangea/constants/age_limits.dart rename to lib/pangea/user/constants/age_limits.dart diff --git a/lib/pangea/user/controllers/permissions_controller.dart b/lib/pangea/user/controllers/permissions_controller.dart new file mode 100644 index 000000000..169c75a18 --- /dev/null +++ b/lib/pangea/user/controllers/permissions_controller.dart @@ -0,0 +1,78 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; + +class PermissionsController extends BaseController { + late PangeaController _pangeaController; + + PermissionsController(PangeaController pangeaController) : super() { + _pangeaController = pangeaController; + } + + /// Returns false if user is null + bool isUser18() { + final DateTime? dob = + _pangeaController.userController.profile.userSettings.dateOfBirth; + if (dob == null) return false; + final today = DateTime.now(); + final age = today.year - dob.year; + + // Check if the birthday has occurred yet this year + final hasHadBirthdayThisYear = (today.month > dob.month) || + (today.month == dob.month && today.day >= dob.day); + + // Return true if they are 18 or older + return age > 18 || (age == 18 && hasHadBirthdayThisYear); + } + + bool canShareVideo(String? roomID) => isUser18(); + + bool canSharePhoto(String? roomID) => true; + + bool canShareFile(String? roomID) => true; + + bool canShareLocation(String? roomID) => isUser18(); + + bool userToolSetting(ToolSetting setting) { + switch (setting) { + case ToolSetting.interactiveTranslator: + return _pangeaController + .userController.profile.toolSettings.interactiveTranslator; + case ToolSetting.interactiveGrammar: + return _pangeaController + .userController.profile.toolSettings.interactiveGrammar; + case ToolSetting.immersionMode: + return _pangeaController + .userController.profile.toolSettings.immersionMode; + case ToolSetting.definitions: + return _pangeaController + .userController.profile.toolSettings.definitions; + case ToolSetting.autoIGC: + return _pangeaController.userController.profile.toolSettings.autoIGC; + default: + return false; + } + } + + bool isToolEnabled(ToolSetting setting, Room? room) { + // Rules can't be edited; default to true + return userToolSetting(setting); + // if (room?.isSpaceAdmin ?? false) { + // return userToolSetting(setting); + // } + // final int? classPermission = + // room != null ? classLanguageToolPermission(room, setting) : 1; + // if (classPermission == 0) return false; + // if (classPermission == 2) return true; + // return userToolSetting(setting); + } + + bool isWritingAssistanceEnabled(Room? room) { + // Rules can't be edited; default to true + return true; + // return isToolEnabled(ToolSetting.interactiveTranslator, room) && + // isToolEnabled(ToolSetting.interactiveGrammar, room); + } +} diff --git a/lib/pangea/controllers/user_controller.dart b/lib/pangea/user/controllers/user_controller.dart similarity index 95% rename from lib/pangea/controllers/user_controller.dart rename to lib/pangea/user/controllers/user_controller.dart index 98d7a431f..be8e95567 100644 --- a/lib/pangea/controllers/user_controller.dart +++ b/lib/pangea/user/controllers/user_controller.dart @@ -4,11 +4,10 @@ import 'package:collection/collection.dart'; import 'package:jwt_decode/jwt_decode.dart'; import 'package:matrix/matrix.dart' as matrix; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; import '../models/user_model.dart'; /// Controller that manages saving and reading of user/profile information @@ -128,7 +127,9 @@ class UserController extends BaseController { Future _initialize() async { // wait for account data to load // as long as it's not null, then this we've already migrated the profile - await _pangeaController.matrixState.client.waitForAccountData(); + if (_pangeaController.matrixState.client.prevBatch == null) { + await _pangeaController.matrixState.client.onSync.stream.first; + } } /// Reinitializes the user's profile diff --git a/lib/pangea/models/user_model.dart b/lib/pangea/user/models/user_model.dart similarity index 97% rename from lib/pangea/models/user_model.dart rename to lib/pangea/user/models/user_model.dart index 19ce5f738..2857665d8 100644 --- a/lib/pangea/models/user_model.dart +++ b/lib/pangea/user/models/user_model.dart @@ -1,11 +1,11 @@ import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/instructions/instruction_settings.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'language_model.dart'; +import '../../learning_settings/models/language_model.dart'; /// The user's settings learning settings. class UserSettings { diff --git a/lib/pangea/models/user_profile_search_model.dart b/lib/pangea/user/models/user_profile_search_model.dart similarity index 100% rename from lib/pangea/models/user_profile_search_model.dart rename to lib/pangea/user/models/user_profile_search_model.dart diff --git a/lib/pangea/pages/find_partner/find_partner.dart b/lib/pangea/user/pages/find_partner.dart similarity index 93% rename from lib/pangea/pages/find_partner/find_partner.dart rename to lib/pangea/user/pages/find_partner.dart index af21508d3..5b3b1d52c 100644 --- a/lib/pangea/pages/find_partner/find_partner.dart +++ b/lib/pangea/user/pages/find_partner.dart @@ -5,13 +5,13 @@ import 'package:flutter/material.dart'; import 'package:country_picker/country_picker.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; -import 'package:fluffychat/pangea/models/user_model.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/user/models/user_model.dart'; import '../../../widgets/matrix.dart'; -import '../../controllers/pangea_controller.dart'; -import '../../models/user_profile_search_model.dart'; -import '../../repo/user_repo.dart'; +import '../../common/controllers/pangea_controller.dart'; +import '../models/user_profile_search_model.dart'; +import '../repo/user_repo.dart'; import 'find_partner_view.dart'; class FindPartner extends StatefulWidget { diff --git a/lib/pangea/pages/find_partner/find_partner_view.dart b/lib/pangea/user/pages/find_partner_view.dart similarity index 96% rename from lib/pangea/pages/find_partner/find_partner_view.dart rename to lib/pangea/user/pages/find_partner_view.dart index d42f5607a..10963060f 100644 --- a/lib/pangea/pages/find_partner/find_partner_view.dart +++ b/lib/pangea/user/pages/find_partner_view.dart @@ -7,11 +7,11 @@ import 'package:matrix/matrix.dart' as matrix; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/models/user_model.dart'; -import 'package:fluffychat/pangea/utils/country_display.dart'; -import 'package:fluffychat/pangea/widgets/common/list_placeholder.dart'; -import 'package:fluffychat/pangea/widgets/common/pangea_logo_svg.dart'; -import 'package:fluffychat/pangea/widgets/user_settings/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/learning_settings/utils/country_display.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/user/models/user_model.dart'; +import 'package:fluffychat/pangea/user/widgets/list_placeholder.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../../widgets/profile_bottom_sheet.dart'; diff --git a/lib/pangea/repo/user_repo.dart b/lib/pangea/user/repo/user_repo.dart similarity index 85% rename from lib/pangea/repo/user_repo.dart rename to lib/pangea/user/repo/user_repo.dart index d0f100c7f..9f6320f32 100644 --- a/lib/pangea/repo/user_repo.dart +++ b/lib/pangea/user/repo/user_repo.dart @@ -2,11 +2,11 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; import '../models/user_profile_search_model.dart'; -import '../network/requests.dart'; -import '../network/urls.dart'; class PUserRepo { static Future searchUserProfiles({ diff --git a/lib/pangea/utils/logout.dart b/lib/pangea/user/utils/logout.dart similarity index 100% rename from lib/pangea/utils/logout.dart rename to lib/pangea/user/utils/logout.dart diff --git a/lib/pangea/utils/password_forgotten.dart b/lib/pangea/user/utils/password_forgotten.dart similarity index 99% rename from lib/pangea/utils/password_forgotten.dart rename to lib/pangea/user/utils/password_forgotten.dart index 2f7d95d73..618b890ed 100644 --- a/lib/pangea/utils/password_forgotten.dart +++ b/lib/pangea/user/utils/password_forgotten.dart @@ -6,7 +6,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import '../../widgets/matrix.dart'; +import '../../../widgets/matrix.dart'; extension PangeaPasswordForgotten on LoginController { void pangeaPasswordForgotten() async { diff --git a/lib/pangea/widgets/common/list_placeholder.dart b/lib/pangea/user/widgets/list_placeholder.dart similarity index 100% rename from lib/pangea/widgets/common/list_placeholder.dart rename to lib/pangea/user/widgets/list_placeholder.dart diff --git a/lib/pangea/utils/class_chat_power_levels.dart b/lib/pangea/utils/class_chat_power_levels.dart deleted file mode 100644 index 16d08c6ff..000000000 --- a/lib/pangea/utils/class_chat_power_levels.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import '../../widgets/matrix.dart'; -import '../constants/class_default_values.dart'; -import '../extensions/pangea_room_extension/pangea_room_extension.dart'; - -class ClassChatPowerLevels { - static Future> powerLevelOverrideForClassChat( - BuildContext context, - Room? parent, - ) async { - final Client client = Matrix.of(context).client; - final Map powerLevelOverride = {}; - powerLevelOverride['events'] = { - EventTypes.SpaceChild: 0, - }; - powerLevelOverride['users'] = {}; - - final List spaceAdmin = []; - - if (parent != null) { - final List classTeachers = await parent.teachers; - spaceAdmin.addAll(classTeachers); - } - - for (final admin in spaceAdmin) { - powerLevelOverride['users'][admin.id] = - ClassDefaultValues.powerLevelOfAdmin; - } - - powerLevelOverride['users'][client.userID] = - ClassDefaultValues.powerLevelOfAdmin; - - return powerLevelOverride; - } -} diff --git a/lib/pangea/utils/custom_exception.dart b/lib/pangea/utils/custom_exception.dart deleted file mode 100644 index 8b1378917..000000000 --- a/lib/pangea/utils/custom_exception.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/pangea/utils/find_conversation_partner_dialog.dart b/lib/pangea/utils/find_conversation_partner_dialog.dart deleted file mode 100644 index fe993906e..000000000 --- a/lib/pangea/utils/find_conversation_partner_dialog.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:go_router/go_router.dart'; - -import '../controllers/pangea_controller.dart'; - -void findConversationPartnerDialog( - BuildContext context, - PangeaController pangeaController, -) { - debugPrint(pangeaController.userController.isPublic.toString()); - if (pangeaController.userController.isPublic) { - context.go('/rooms/partner'); - } else { - showDialog( - context: context, - useRootNavigator: false, - builder: (context) => AlertDialog( - title: Text(L10n.of(context).setToPublicSettingsTitle), - content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 250), - child: Text(L10n.of(context).setToPublicSettingsDesc), - ), - actions: [ - TextButton( - onPressed: Navigator.of(context).pop, - child: Text(L10n.of(context).cancel), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/utils/lock_room.dart b/lib/pangea/utils/lock_room.dart deleted file mode 100644 index 91e5702e9..000000000 --- a/lib/pangea/utils/lock_room.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; - -Future lockRoom(Room room, Client client) async { - room.isSpace ? await lockSpace(room, client) : await lockChat(room, client); -} - -Future unlockRoom(Room room, Client client) async { - room.isSpace - ? await unlockSpace(room, client) - : await unlockChat(room, client); -} - -Future lockChat(Room room, Client client) async { - if (!room.canChangePowerLevel) { - return; - } - final Map powerLevelsContent = Map.from( - room.getState(EventTypes.RoomPowerLevels)!.content, - ); - - powerLevelsContent['events_default'] = 100; - if (!powerLevelsContent.containsKey('events')) { - powerLevelsContent['events'] = Map.from({}); - } - powerLevelsContent['events'][EventTypes.SpaceChild] = 100; - - await room.client.setRoomStateWithKey( - room.id, - EventTypes.RoomPowerLevels, - '', - powerLevelsContent, - ); -} - -Future unlockChat(Room room, Client client) async { - if (!room.canChangePowerLevel) { - return; - } - final Map powerLevelsContent = Map.from( - room.getState(EventTypes.RoomPowerLevels)!.content, - ); - - powerLevelsContent['events_default'] = 0; - powerLevelsContent['events'][EventTypes.SpaceChild] = 0; - - await room.client.setRoomStateWithKey( - room.id, - EventTypes.RoomPowerLevels, - '', - powerLevelsContent, - ); -} - -Future lockSpace(Room space, Client client) async { - for (final spaceChild in space.spaceChildren) { - if (spaceChild.roomId == null) continue; - Room? child = client.getRoomById(spaceChild.roomId!); - if (child == null) { - try { - await client.joinRoom(spaceChild.roomId!); - await client.waitForRoomInSync(spaceChild.roomId!, join: true); - child = client.getRoomById(spaceChild.roomId!); - } catch (err) { - await client.leaveRoom(spaceChild.roomId!); - continue; - } - } - if (child == null || child.isArchived || child.isAnalyticsRoom) continue; - child.isSpace - ? await lockSpace(child, client) - : await lockChat(child, client); - } - await lockChat(space, client); -} - -Future unlockSpace(Room space, Client client) async { - for (final spaceChild in space.spaceChildren) { - if (spaceChild.roomId == null) continue; - final Room? child = client.getRoomById(spaceChild.roomId!); - if (child == null || child.isArchived || child.isAnalyticsRoom) continue; - child.isSpace - ? await unlockSpace(child, client) - : await unlockChat(child, client); - } - await unlockChat(space, client); -} diff --git a/lib/pangea/utils/martix.utils.dart b/lib/pangea/utils/martix.utils.dart deleted file mode 100644 index 99e535a1b..000000000 --- a/lib/pangea/utils/martix.utils.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:matrix/matrix.dart'; - -class MatrixUtils { - static String generateUniqueTransactionId(Client client) { - return client.generateUniqueTransactionId(); - } -} diff --git a/lib/pangea/utils/p_extension.dart b/lib/pangea/utils/p_extension.dart deleted file mode 100644 index a80a302a5..000000000 --- a/lib/pangea/utils/p_extension.dart +++ /dev/null @@ -1,12 +0,0 @@ -extension IsAtLeastYearsOld on DateTime { - bool isAtLeastYearsOld(int years) { - final now = DateTime.now(); - final boundaryDate = DateTime(now.year - years, now.month, now.day); - - // Discard the time from [this]. - final thisDate = DateTime(year, month, day); - - // Did [thisDate] occur on or before [boundaryDate]? - return thisDate.compareTo(boundaryDate) <= 0; - } -} diff --git a/lib/pangea/utils/p_toast.dart b/lib/pangea/utils/p_toast.dart deleted file mode 100644 index 7ccbd2c14..000000000 --- a/lib/pangea/utils/p_toast.dart +++ /dev/null @@ -1,31 +0,0 @@ -// import 'package:flutter/material.dart'; - -class PToastController { - //TODO: Figure out best toast to show - //Ideal is reuse FluffyChat UI for consistency - ///show toast message - static toastMsg({bool success = false, String msg = ""}) { - // success - // ? Fluttertoast.showToast( - // msg: msg, - // fontSize: 16.0, - // backgroundColor: Color(0xFF228C22), - // webBgColor: "#228C22", - // textColor: Colors.white, - // timeInSecForIosWeb: 2) - // : Fluttertoast.showToast( - // msg: msg, - // fontSize: 16.0, - // timeInSecForIosWeb: 2, - // webBgColor: "#ff0000", - // backgroundColor: Colors.red, - // textColor: Colors.white, - // ); - } - - // @override - // void dispose() { - // // TODO: implement dispose - // super.dispose(); - //} -} diff --git a/lib/pangea/utils/platform_name.dart b/lib/pangea/utils/platform_name.dart deleted file mode 100644 index f5b6c1dd4..000000000 --- a/lib/pangea/utils/platform_name.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'dart:io' show Platform; - -import 'package:flutter/foundation.dart' show kIsWeb, kDebugMode; - -class MyPlatformName { - static String get platformName { - if (kIsWeb) { - return 'web'; - } - if (Platform.isAndroid) { - return 'android'; - } - - if (Platform.isIOS) { - return 'ios'; - } - - if (Platform.isFuchsia) { - return 'fuchsia'; - } - - if (Platform.isLinux) { - return 'linux'; - } - if (Platform.isMacOS) { - return 'macos'; - } - if (Platform.isWindows) { - return 'windows'; - } - return 'unknownplatform'; - } - - static String get getPlatformWithModeName { - String mode = 'Release'; - if (kDebugMode) { - mode = 'Debug'; - } - return MyPlatformName.platformName + mode; - } -} diff --git a/lib/pangea/utils/sync_status_util.dart b/lib/pangea/utils/sync_status_util.dart deleted file mode 100644 index 6c8703dc5..000000000 --- a/lib/pangea/utils/sync_status_util.dart +++ /dev/null @@ -1,126 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/utils/localized_exception_extension.dart'; -import '../../widgets/matrix.dart'; - -class PLoadingStatus extends StatefulWidget { - final void Function()? onFinish; - - final Widget child; - final Widget? shimmerChild; - const PLoadingStatus({ - super.key, - required this.child, - this.onFinish, - this.shimmerChild, - }); - - @override - PLoadingStatusState createState() => PLoadingStatusState(); -} - -class PLoadingStatusState extends State { - late final StreamSubscription _onSyncSub; - bool isFinished = false; - @override - void initState() { - _onSyncSub = Matrix.of(context).client.onSyncStatus.stream.listen( - (status) => setState(() { - if (status.status == SyncStatus.finished) { - //PTODO - test this - if (!isFinished) { - isFinished = true; - widget.onFinish?.call(); - } - } - }), - ); - super.initState(); - } - - @override - void dispose() { - _onSyncSub.cancel(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final Client client = Matrix.of(context).client; - final SyncStatusUpdate status = client.onSyncStatus.value ?? - const SyncStatusUpdate(SyncStatus.waitingForResponse); - final bool hide = client.onSync.value != null && - status.status != SyncStatus.error && - client.prevBatch != null; - - final shimmerComponent = widget.shimmerChild == null - ? PangeaDefaultShimmer(hide: hide, status: status) - : widget.shimmerChild!; - - return hide ? widget.child : shimmerComponent; - } -} - -class PangeaDefaultShimmer extends StatelessWidget { - const PangeaDefaultShimmer({ - super.key, - required this.hide, - required this.status, - }); - - final bool hide; - final SyncStatusUpdate status; - - @override - Widget build(BuildContext context) { - return AnimatedContainer( - duration: const Duration(milliseconds: 200), - curve: Curves.bounceInOut, - height: hide ? 0 : 36, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration(color: Theme.of(context).colorScheme.surface), - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - width: 24, - height: 24, - child: CircularProgressIndicator.adaptive( - strokeWidth: 2, - value: hide ? 1.0 : status.progress, - ), - ), - const SizedBox(width: 12), - Text( - status.toLocalizedString(context), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(color: Theme.of(context).colorScheme.onSurface), - ), - ], - ), - ); - } -} - -extension on SyncStatusUpdate { - String toLocalizedString(BuildContext context) { - switch (status) { - case SyncStatus.waitingForResponse: - return L10n.of(context).loadingPleaseWait; - case SyncStatus.error: - return ((error?.exception ?? Object()) as Object) - .toLocalizedString(context); - case SyncStatus.processing: - case SyncStatus.cleaningUp: - case SyncStatus.finished: - return L10n.of(context).synchronizingPleaseWait; - } - } -} diff --git a/lib/pangea/utils/sync_status_util_v2.dart b/lib/pangea/utils/sync_status_util_v2.dart deleted file mode 100644 index cf889f777..000000000 --- a/lib/pangea/utils/sync_status_util_v2.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/utils/localized_exception_extension.dart'; -import '../../widgets/matrix.dart'; -import 'error_handler.dart'; - -class PLoadingStatusV2 extends StatefulWidget { - final void Function()? onFinish; - - final Widget child; - final Widget? shimmerChild; - const PLoadingStatusV2({ - super.key, - required this.child, - this.onFinish, - this.shimmerChild, - }); - - @override - PLoadingStatusStateV2 createState() => PLoadingStatusStateV2(); -} - -class PLoadingStatusStateV2 extends State { - bool isFinished = false; - @override - void initState() { - _waitForSync(); - super.initState(); - } - - _waitForSync() async { - try { - final Client client = Matrix.of(context).client; - if (client.rooms.isEmpty) await client.roomsLoading; - - // await client.accountDataLoading; - // client.prevBatch == null ? await client.onSync.stream.first : null; - - if (!isFinished) { - isFinished = true; - widget.onFinish?.call(); - } - } catch (err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: {}, - ); - isFinished = true; - } - } - - @override - Widget build(BuildContext context) { - final Client client = Matrix.of(context).client; - final SyncStatusUpdate status = client.onSyncStatus.value ?? - const SyncStatusUpdate(SyncStatus.waitingForResponse); - final bool hide = client.onSync.value != null && - status.status != SyncStatus.error && - client.prevBatch != null; - - final shimmerComponent = widget.shimmerChild == null - ? PangeaDefaultShimmer(hide: hide, status: status) - : widget.shimmerChild!; - - return isFinished ? widget.child : shimmerComponent; - } -} - -class PangeaDefaultShimmer extends StatelessWidget { - const PangeaDefaultShimmer({ - super.key, - required this.hide, - required this.status, - }); - - final bool hide; - final SyncStatusUpdate status; - - @override - Widget build(BuildContext context) { - return AnimatedContainer( - duration: const Duration(milliseconds: 200), - curve: Curves.bounceInOut, - height: hide ? 0 : 36, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration(color: Theme.of(context).colorScheme.surface), - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - width: 24, - height: 24, - child: CircularProgressIndicator.adaptive( - strokeWidth: 2, - value: hide ? 1.0 : status.progress, - ), - ), - const SizedBox(width: 12), - Text( - status.toLocalizedString(context), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(color: Theme.of(context).colorScheme.onSurface), - ), - ], - ), - ); - } -} - -extension on SyncStatusUpdate { - String toLocalizedString(BuildContext context) { - switch (status) { - case SyncStatus.waitingForResponse: - return L10n.of(context).loadingPleaseWait; - case SyncStatus.error: - return ((error?.exception ?? Object()) as Object) - .toLocalizedString(context); - case SyncStatus.processing: - case SyncStatus.cleaningUp: - case SyncStatus.finished: - return L10n.of(context).synchronizingPleaseWait; - } - } -} diff --git a/lib/pangea/widgets/chat/locked_chat_message.dart b/lib/pangea/widgets/chat/locked_chat_message.dart deleted file mode 100644 index 2af14e0a1..000000000 --- a/lib/pangea/widgets/chat/locked_chat_message.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/config/app_config.dart'; - -class LockedChatMessage extends StatelessWidget { - const LockedChatMessage({super.key}); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 4.0, - ), - child: Center( - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.onInverseSurface, - borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), - ), - child: Text( - L10n.of(context).lockedChatWarning, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14 * AppConfig.fontSizeFactor, - color: Theme.of(context).colorScheme.onSecondaryContainer, - ), - ), - ), - ), - ); - } -} diff --git a/lib/pangea/widgets/chat/message_context_menu.dart b/lib/pangea/widgets/chat/message_context_menu.dart deleted file mode 100644 index ef8f670db..000000000 --- a/lib/pangea/widgets/chat/message_context_menu.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -class MessageContextMenu { - static List customToolbarOptions( - BuildContext context, - void Function()? onDefine, - void Function()? onListen, - ) { - return [ - ContextMenuButtonItem( - label: L10n.of(context).define, - onPressed: onDefine, - ), - ContextMenuButtonItem( - label: L10n.of(context).listen, - onPressed: onListen, - ), - ]; - } - - static List toolbarOptions( - EditableTextState? textSelection, - SelectableRegionState? contentSelection, - BuildContext context, - void Function()? onDefine, - void Function()? onListen, - ) { - final List menuItems = - textSelection?.contextMenuButtonItems ?? - contentSelection?.contextMenuButtonItems ?? - []; - menuItems.sort((a, b) { - if (a.type == ContextMenuButtonType.copy) return -1; - if (b.type == ContextMenuButtonType.copy) return 1; - return 0; - }); - return MessageContextMenu.customToolbarOptions( - context, - onDefine, - onListen, - ) + - menuItems; - } - - static Widget contextMenuOverride({ - required BuildContext context, - EditableTextState? textSelection, - SelectableRegionState? contentSelection, - void Function()? onDefine, - void Function()? onListen, - }) { - if (textSelection == null && contentSelection == null) { - return const SizedBox(); - } - - final List menuItems = - MessageContextMenu.toolbarOptions( - textSelection, - contentSelection, - context, - onDefine, - onListen, - ); - - return AdaptiveTextSelectionToolbar.buttonItems( - anchors: textSelection?.contextMenuAnchors ?? - contentSelection!.contextMenuAnchors, - buttonItems: menuItems, - ); - } -} diff --git a/lib/pangea/widgets/chat/speech_to_text_text.dart b/lib/pangea/widgets/chat/speech_to_text_text.dart deleted file mode 100644 index a6e14b7b4..000000000 --- a/lib/pangea/widgets/chat/speech_to_text_text.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; - -class SpeechToTextText extends StatelessWidget { - final Transcript transcript; - - const SpeechToTextText({super.key, required this.transcript}); - - @override - Widget build(BuildContext context) { - return RichText( - text: _buildTranscriptText(context, transcript), - ); - } - - TextSpan _buildTranscriptText(BuildContext context, Transcript transcript) { - final List spans = []; - final String fullText = transcript.text; - int lastEnd = 0; - - for (final token in transcript.sttTokens) { - // debugPrint('Token confidence: ${token.confidence}'); - // debugPrint('color: ${token.color(context)}'); - if (token.offset > lastEnd) { - // Add any plain text before the token - spans.add( - TextSpan( - text: fullText.substring(lastEnd, token.offset), - ), - ); - // debugPrint('Pre: ${fullText.substring(lastEnd, token.offset)}'); - } - - spans.add( - TextSpan( - text: fullText.substring(token.offset, token.offset + token.length), - style: BotStyle.text( - context, - existingStyle: TextStyle(color: token.color(context)), - setColor: false, - ), - ), - ); - - // debugPrint( - // 'Main: ${fullText.substring(token.offset, token.offset + token.length)}', - // ); - - lastEnd = token.offset + token.length; - } - - if (lastEnd < fullText.length) { - // Add any remaining text after the last token - spans.add( - TextSpan( - text: fullText.substring(lastEnd), - ), - ); - // debugPrint('Post: ${fullText.substring(lastEnd)}'); - } - - return TextSpan(children: spans); - } -} diff --git a/lib/pangea/widgets/chat_list/chat_list_body_text.dart b/lib/pangea/widgets/chat_list/chat_list_body_text.dart deleted file mode 100644 index aec056de6..000000000 --- a/lib/pangea/widgets/chat_list/chat_list_body_text.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import '../../../pages/chat_list/chat_list.dart'; -import '../../../widgets/matrix.dart'; -import '../../extensions/pangea_room_extension/pangea_room_extension.dart'; - -class ChatListBodyStartText extends StatelessWidget { - const ChatListBodyStartText({ - super.key, - required this.controller, - }); - - final ChatListController controller; - - chatListBodyStartText(BuildContext context) { - // note: only shows if user is in no chats in that space - - final PangeaController pangeaController = MatrixState.pangeaController; - - if (controller.activeSpaceId != null) { - if (Matrix.of(context) - .client - .getRoomById(controller.activeSpaceId!) - ?.isSpaceAdmin ?? - false) { - return L10n.of(context).welcomeToYourNewClass; - } - - return L10n.of(context).welcomeToClass; - } - - if (pangeaController.permissionsController.isUser18()) { - return L10n.of(context).welcomeToPangea18Plus; - } - - return L10n.of(context).welcomeToPangeaMinor; - } - - @override - Widget build(BuildContext context) { - return Text( - chatListBodyStartText(context), - textAlign: TextAlign.start, - style: const TextStyle( - color: Colors.grey, - fontSize: 16, - ), - ); - } -} diff --git a/lib/pangea/widgets/chat_list/find_a_partner_tile.dart b/lib/pangea/widgets/chat_list/find_a_partner_tile.dart deleted file mode 100644 index 6fc119288..000000000 --- a/lib/pangea/widgets/chat_list/find_a_partner_tile.dart +++ /dev/null @@ -1,56 +0,0 @@ -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; -// import 'package:vrouter/vrouter.dart'; - -// import '../../../pages/chat_list/chat_list.dart'; - -// class FindALanguagePartnerTile extends StatelessWidget { -// const FindALanguagePartnerTile({ -// Key? key, -// required this.controller, -// }) : super(key: key); - -// final ChatListController controller; - -// @override -// Widget build(BuildContext context) { -// return ListTile( -// leading: Icon( -// Icons.add_circle_outline, -// color: Theme.of(context).colorScheme.onBackground, -// ), -// title: Text(L10n.of(context).findALanguagePartner), -// onTap: () { -// if (controller -// .pangeaController.permissionsController.isPublic) { -// Scaffold.of(context).closeDrawer(); -// VRouter.of(context).to('/partner'); -// } else { -// showDialog( -// context: context, -// useRootNavigator: false, -// builder: (context) => AlertDialog( -// title: Text(L10n.of(context).setToPublicSettingsTitle), -// content: ConstrainedBox( -// constraints: const BoxConstraints(maxWidth: 250), -// child: Text(L10n.of(context).setToPublicSettingsDesc), -// ), -// actions: [ -// TextButton( -// onPressed: Navigator.of(context).pop, -// child: Text(L10n.of(context).cancel), -// ), -// TextButton( -// onPressed: () { -// VRouter.of(context).to('/settings/account'); -// }, -// child: Text(L10n.of(context).accountSettings), -// ), -// ], -// ), -// ); -// } -// }, -// ); -// } -// } diff --git a/lib/pangea/widgets/common/p_circular_loader.dart b/lib/pangea/widgets/common/p_circular_loader.dart deleted file mode 100644 index a5b6d0e1c..000000000 --- a/lib/pangea/widgets/common/p_circular_loader.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -class PCircular extends StatelessWidget { - final double? size; - const PCircular({super.key, this.size}); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - height: size ?? 25, - width: size ?? 25, - child: const CircularProgressIndicator(), - ), - ], - ); - } -} diff --git a/lib/pangea/widgets/common/star_rating.dart b/lib/pangea/widgets/common/star_rating.dart deleted file mode 100644 index b415ec030..000000000 --- a/lib/pangea/widgets/common/star_rating.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -typedef RatingChangeCallback = void Function(double rating); - -class StarRating extends StatelessWidget { - final int starCount; - final double rating; - final RatingChangeCallback? onRatingChanged; - final Color color; - - const StarRating({ - super.key, - this.starCount = 5, - this.rating = 0, - this.onRatingChanged, - required this.color, - }); - - Widget buildStar(BuildContext context, int index) { - Icon icon; - if (index >= rating) { - icon = const Icon( - Icons.star_border, - size: 20, - color: Color(0xffFFC403), - ); - } else if (index > rating - 1 && index < rating) { - icon = Icon( - Icons.star_half, - color: color, - //?? Theme.of(context).primaryColor, - size: 20, - ); - } else { - icon = Icon( - Icons.star, - color: color, - //?? Theme.of(context).primaryColor, - size: 20, - ); - } - return InkResponse( - onTap: - onRatingChanged == null ? null : () => onRatingChanged!(index + 1.0), - child: icon, - ); - } - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: List.generate(starCount, (index) => buildStar(context, index)), - ); - } -} diff --git a/lib/pangea/widgets/common/switch_list_tile.dart b/lib/pangea/widgets/common/switch_list_tile.dart deleted file mode 100644 index 594a61e9d..000000000 --- a/lib/pangea/widgets/common/switch_list_tile.dart +++ /dev/null @@ -1,28 +0,0 @@ -// import 'package:flutter/material.dart'; - -// import '../../../config/app_config.dart'; - -// class PSwitchListTile extends StatelessWidget { -// final String title; -// final String subtitle; -// final bool value; -// final Function(bool value) onChanged; -// const PSwitchListTile( -// {Key? key, -// required this.title, -// required this.subtitle, -// required this.value, -// required this.onChanged}) -// : super(key: key); - -// @override -// Widget build(BuildContext context) { -// return SwitchListTile.adaptive( -// activeColor: AppConfig.activeToggleColor, -// title: Text(title), -// subtitle: Text(subtitle), -// value: value, -// onChanged: onChanged, -// ); -// } -// } diff --git a/lib/pangea/widgets/login/home_picker_logo.dart b/lib/pangea/widgets/login/home_picker_logo.dart deleted file mode 100644 index a1427a449..000000000 --- a/lib/pangea/widgets/login/home_picker_logo.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../../config/app_config.dart'; -import '../common/pangea_logo_svg.dart'; - -class PangeaLogoAndNameWidget extends StatelessWidget { - const PangeaLogoAndNameWidget({super.key}); - - @override - Widget build(BuildContext context) { - return Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - alignment: Alignment.center, - height: 120, - child: const PangeaLogoSvg(width: 120, forceColor: Colors.white), - ), - //PTODO - widget to display app name with consistent style - Text( - AppConfig.applicationName, - style: const TextStyle( - fontSize: 26, - color: Colors.white, - fontWeight: FontWeight.w800, - ), - ), - // const Text( - // "Life is Learning", - // style: TextStyle( - // fontSize: 18, - // color: Colors.white, - // ), - // ), - ], - ), - ); - } -} diff --git a/lib/pangea/widgets/message_display_card.dart b/lib/pangea/widgets/message_display_card.dart deleted file mode 100644 index fd605903b..000000000 --- a/lib/pangea/widgets/message_display_card.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/utils/bot_style.dart'; - -class MessageDisplayCard extends StatelessWidget { - final String displayText; - - const MessageDisplayCard({ - super.key, - required this.displayText, - }); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Text( - displayText, - style: BotStyle.text(context), - textAlign: TextAlign.center, - ), - ); - } -} diff --git a/lib/pangea/widgets/new_group/topics_list.dart b/lib/pangea/widgets/new_group/topics_list.dart deleted file mode 100644 index e720b95af..000000000 --- a/lib/pangea/widgets/new_group/topics_list.dart +++ /dev/null @@ -1,172 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; - -import '../../models/chat_topic_model.dart'; - -/// the widget loads the list of ChatTopic from assets/chat_data.json -/// displays the topics in a list with image, name and total number of vocab -/// when a topic is selected, the ChatTopic is passed to the parent widget -/// while a topic is selected, it displays expanded details about the topic, -/// including description, bot prompt, and vocab -class SelectTopicList extends StatefulWidget { - final Function(ChatTopic) onTopicSelected; - - const SelectTopicList({super.key, required this.onTopicSelected}); - - @override - SelectTopicListState createState() => SelectTopicListState(); -} - -class SelectTopicListState extends State { - late Future> _futureTopics; - - ChatTopic? selected; - - @override - void initState() { - super.initState(); - _futureTopics = _loadTopics(); - } - - Future> _loadTopics() async { - final String data = await DefaultAssetBundle.of(context) - .loadString("assets/chat_data.json"); - final jsonResult = json.decode(data); - final List topics = []; - for (final topic in jsonResult['chats']) { - topics.add(ChatTopic.fromJson(topic)); - } - return topics; - } - - @override - Widget build(BuildContext context) { - return FutureBuilder>( - future: _futureTopics, - builder: (context, snapshot) { - if (snapshot.hasData) { - return SelectTopicListWidget( - topics: snapshot.data!, - onTopicSelected: ((topic) { - widget.onTopicSelected(topic); - selected = topic; - setState(() {}); - }), - selectedTopicState: this, - ); - } else if (snapshot.hasError) { - return Text("${snapshot.error}"); - } - return const CircularProgressIndicator(); - }, - ); - } -} - -class SelectTopicListWidget extends StatelessWidget { - final List topics; - final Function(ChatTopic) onTopicSelected; - final SelectTopicListState selectedTopicState; - - const SelectTopicListWidget({ - super.key, - required this.topics, - required this.onTopicSelected, - required this.selectedTopicState, - }); - - @override - Widget build(BuildContext context) { - final list = ListView.builder( - itemCount: topics.length, - shrinkWrap: true, - itemBuilder: (context, index) { - return SelectTopicListItem( - topic: topics[index], - isSelected: topics[index] == selectedTopicState.selected, - onTopicSelected: onTopicSelected, - ); - }, - ); - - /// wrap list in scroll area - return SingleChildScrollView( - child: list, - ); - } -} - -/// while a topic is selected, it displays expanded details about the topic, -/// including description, bot prompt, and vocab -/// use ThemeData to get colors, text styles, etc. -class SelectTopicListItem extends StatelessWidget { - final ChatTopic topic; - final Function(ChatTopic) onTopicSelected; - final bool isSelected; - - const SelectTopicListItem({ - super.key, - required this.topic, - required this.isSelected, - required this.onTopicSelected, - }); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - onTopicSelected(topic); - }, - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: isSelected ? Colors.grey[100] : Colors.white, - border: Border.all( - color: isSelected ? Colors.grey[300]! : Colors.white, - ), - ), - child: Row( - children: [ - // Image.asset( - // Icons.airplane_ticket_outlined, - // width: 50, - // height: 50, - // ), - const SizedBox(width: 8), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - topic.name, - style: const TextStyle( - fontWeight: FontWeight.bold, - ), - ), - if (isSelected) ...[ - const SizedBox(height: 8), - Text( - topic.description, - style: const TextStyle( - color: Colors.grey, - ), - ), - const SizedBox(height: 8), - Text( - topic.vocab.join(", "), - style: const TextStyle( - color: Colors.grey, - ), - ), - ], - ], - ), - ), - const Icon(Icons.chevron_right), - ], - ), - ), - ); - } -} diff --git a/lib/pangea/widgets/new_group/vocab_list.dart b/lib/pangea/widgets/new_group/vocab_list.dart deleted file mode 100644 index 4943baa1d..000000000 --- a/lib/pangea/widgets/new_group/vocab_list.dart +++ /dev/null @@ -1,527 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../models/chat_topic_model.dart'; -import '../../models/lemma.dart'; -import '../../repo/topic_data_repo.dart'; -import '../common/bot_face_svg.dart'; - -/// stateless widget that displays a list of vocabulary words -/// parameters -/// 1) list of words -/// 2) one callback function that handles all changes to the list (passes full list back to parent) -/// view -/// 1) a list of words (chips) in a wrapped row within a scrollable area with an x button to remove the word -/// 2) in the bottom center is a text field to type a new word and add it to the list on submit -/// 3) at the top right is a button to clear the list with trash icon and confirm dialog -/// 4) at the top left is a button to call an API to get a list of words with the BotFace widget -/// the user can -/// 1) type a new word and add it to the list -/// 2) remove a word from the list -/// 3) clear all words from the list -/// 4) widget button called -/// uses app theme colors, text styles, and icons - -class ChatVocabularyList extends StatelessWidget { - const ChatVocabularyList({ - super.key, - required this.topic, - required this.onChanged, - }); - - final ChatTopic topic; - final ValueChanged> onChanged; - - @override - Widget build(BuildContext context) { - final deleteButton = Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - IconButton( - icon: const Icon(Icons.delete), - onPressed: () { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(L10n.of(context).clearAll), - actions: [ - TextButton( - child: Text(L10n.of(context).cancel), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - TextButton( - child: Text(L10n.of(context).confirm), - onPressed: () { - onChanged([]); - Navigator.of(context).pop(); - }, - ), - ], - ); - }, - ); - }, - ), - ], - ); - final words = Wrap( - spacing: 8, - children: [ - for (final word in topic.vocab) - Chip( - labelStyle: Theme.of(context).textTheme.bodyMedium, - label: Text(word.text), - onDeleted: () { - onChanged(topic.vocab..remove(word)); - }, - ), - ], - ); - final vocabColumn = Column( - children: [ - // clear all words button - deleteButton, - // list of words - words, - // add word from text field to words - WordAddTextField( - words: topic.vocab, - onSubmitted: (value) { - //PTODO - error message if - if (value.isEmpty) return; - onChanged(topic.vocab..add(Lemma.create(value))); - }, - ), - GenerateVocabButton( - topic: topic, - onWordsGenerated: (newWords) { - onChanged(topic.vocab..addAll(newWords)); - }, - onPressed: () {}, - ), - ], - ); - - /// return vocabColumn wrapped in a scrollable area with border - return Container( - decoration: BoxDecoration( - border: Border.all( - color: Theme.of(context).colorScheme.secondary, - width: 2, - ), - borderRadius: BorderRadius.circular(8), - ), - child: SingleChildScrollView( - child: vocabColumn, - ), - ); - } -} - -class VocabWord { - final String word; - - VocabWord({ - required this.word, - }); - - factory VocabWord.fromJson(Map json) { - return VocabWord( - word: json['word'], - ); - } - - Map toJson() { - return { - 'word': word, - }; - } - - /// set equals operator - @override - bool operator ==(Object other) => - identical(this, other) || - other is VocabWord && - runtimeType == other.runtimeType && - word == other.word; - - /// set hashcode - @override - int get hashCode => word.hashCode; -} - -/// text field widget for adding a word -/// parameters -/// 1) callback passes the word back to the parent widget -/// 2) word list to check if the word is already in the list -/// new word cn be added by pressing enter or the add button -/// uses app theme colors, text styles, and icons -/// function for checking word, reused in the button and textfield onSubmitted -/// 1) if the word is already in the list, it is not added and an error message is displayed -/// 2) if whitespace is detected anywhere in the word, display an error message - -class WordAddTextField extends StatefulWidget { - const WordAddTextField({ - super.key, - required this.onSubmitted, - required this.words, - }); - - final ValueChanged onSubmitted; - final List words; - - @override - WordAddTextFieldState createState() => WordAddTextFieldState(); -} - -class WordAddTextFieldState extends State { - final _controller = TextEditingController(); - String? _errorText; - - @override - void initState() { - super.initState(); - _controller.addListener(() { - setState(() { - _errorText = null; - }); - }); - } - - @override - Widget build(BuildContext context) { - return TextField( - controller: _controller, - decoration: InputDecoration( - labelText: 'Add a word', - errorText: _errorText, - suffixIcon: IconButton( - icon: const Icon(Icons.add), - onPressed: () { - _addWord(); - }, - ), - ), - onSubmitted: (value) { - _addWord(); - }, - ); - } - - void _addWord() { - final word = _controller.text.trim(); - if (word.isEmpty) { - setState(() { - _errorText = 'Please enter a word'; - }); - return; - } - if (widget.words.map((e) => e.text).contains(word)) { - setState(() { - _errorText = 'Word already in list'; - }); - return; - } - widget.onSubmitted(word); - _controller.clear(); - } -} - -/// widget button to call an API to get a list of words -/// button has a BotFace icon and text saying "Generate Vocabulary", use L10n for copy -/// parameters -/// 1) callback function to pass the list of words back to the parent widget -/// 2) callback function to notify the parent widget that the button was pressed -/// 3) topic information to pass to the API -/// display loading indicator while waiting for response -/// display error message if there is an error -/// uses app theme colors, text styles, and icons -class GenerateVocabButton extends StatefulWidget { - const GenerateVocabButton({ - super.key, - required this.onWordsGenerated, - required this.onPressed, - required this.topic, - }); - - final ChatTopic topic; - final ValueChanged> onWordsGenerated; - final VoidCallback onPressed; - - @override - GenerateVocabButtonState createState() => GenerateVocabButtonState(); -} - -class GenerateVocabButtonState extends State { - bool _loading = false; - String? _errorText; - final PangeaController _pangeaController = MatrixState.pangeaController; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - // button to call API - ElevatedButton.icon( - icon: const BotFace( - width: 50.0, - expression: BotExpression.idle, - ), - label: Text(L10n.of(context).generateVocabulary), - onPressed: () async { - // if widget.topic.name is null, give error message - if (widget.topic.name.isEmpty) { - setState(() { - _errorText = - 'Please enter a topic name before generating vocabulary'; - }); - return; - } - setState(() { - _loading = true; - _errorText = null; - }); - try { - final words = await _getWords(); - widget.onWordsGenerated(words); - } catch (e) { - setState(() { - _errorText = e.toString(); - }); - } finally { - setState(() { - _loading = false; - }); - } - widget.onPressed(); - }, - ), - - // loading indicator - if (_loading) const CircularProgressIndicator(), - // error message - if (_errorText != null) Text(_errorText!), - ], - ); - } - - Future> _getWords() async { - final ChatTopic topic = await TopicDataRepo.generate( - _pangeaController.userController.accessToken, - request: TopicDataRequest( - topicInfo: widget.topic, - numWords: 10, - numPrompts: 0, - ), - ); - return topic.vocab; - } -} - -/// text field for entering a chat description, max 250 characters -/// parameters -/// 1) ChatTopic object -/// 2) initial value for the text field -/// 3) onChanged callback function to pass the updated ChatTopic back to the parent widget -class DescriptionField extends StatelessWidget { - const DescriptionField({ - super.key, - required this.topic, - required this.initialValue, - required this.onChanged, - }); - - final ChatTopic topic; - final String initialValue; - final ValueChanged onChanged; - - @override - Widget build(BuildContext context) { - return TextFormField( - initialValue: initialValue, - decoration: InputDecoration( - labelText: L10n.of(context).groupDescription, - hintText: L10n.of(context).addGroupDescription, - ), - maxLength: 250, - maxLines: 5, - onChanged: (value) { - onChanged(value); - }, - ); - } -} - -/// text field for entering a chat name, max 50 characters -/// parameters -/// 1) ChatTopic object -/// 2) initial value for the text field -/// 3) onChanged callback function to pass the updated ChatTopic back to the parent widget -class NameField extends StatelessWidget { - const NameField({ - super.key, - required this.topic, - required this.onChanged, - }); - - final ChatTopic topic; - final ValueChanged onChanged; - - @override - Widget build(BuildContext context) { - return TextFormField( - initialValue: topic.name, - decoration: InputDecoration( - labelText: L10n.of(context).optionalGroupName, - hintText: L10n.of(context).enterAGroupName, - ), - maxLength: 50, - onChanged: (value) { - onChanged(value); - }, - ); - } -} - -///widget for displaying, adding, deleting and generating discussion prompts -/// parameters -/// 1) chatTopic object -/// 2) callback function to pass the updated ChatTopic back to the parent widget -class PromptsField extends StatefulWidget { - const PromptsField({ - super.key, - required this.topic, - required this.onChanged, - }); - - final ChatTopic topic; - final ValueChanged onChanged; - - @override - PromptsFieldState createState() => PromptsFieldState(); -} - -class PromptsFieldState extends State { - final TextEditingController _controller = TextEditingController(); - String? _errorText; - - final PangeaController _pangeaController = MatrixState.pangeaController; - - @override - void initState() { - super.initState(); - _controller.addListener(() { - setState(() { - _errorText = null; - }); - }); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - // text field for entering a prompt - TextField( - controller: _controller, - decoration: InputDecoration( - labelText: 'Add a prompt', - errorText: _errorText, - suffixIcon: IconButton( - icon: const Icon(Icons.add), - onPressed: () { - _addPrompt(); - }, - ), - ), - onSubmitted: (value) { - _addPrompt(); - }, - ), - - // list of prompts - ListView.builder( - shrinkWrap: true, - itemCount: widget.topic.discussionPrompts.length, - itemBuilder: (context, index) { - return ListTile( - title: Text(widget.topic.discussionPrompts[index].text), - trailing: IconButton( - icon: const Icon(Icons.delete), - onPressed: () { - _deletePrompt(index); - }, - ), - ); - }, - ), - - // button to call API - ElevatedButton.icon( - icon: const BotFace( - width: 50.0, - expression: BotExpression.idle, - ), - label: Text(L10n.of(context).generatePrompts), - onPressed: () async { - setState(() { - _errorText = null; - }); - try { - final prompts = await _getPrompts(); - widget.topic.discussionPrompts = prompts; - widget.onChanged(widget.topic); - } catch (e) { - setState(() { - _errorText = e.toString(); - }); - } - }, - ), - ], - ); - } - - void _addPrompt() { - final text = _controller.text.trim(); - if (text.isEmpty) { - setState(() { - _errorText = 'Please enter a prompt'; - }); - return; - } - final prompt = DiscussionPrompt(text: text); - if (widget.topic.discussionPrompts.contains(prompt)) { - setState(() { - _errorText = 'Prompt already in list'; - }); - return; - } - widget.topic.discussionPrompts.add(prompt); - widget.onChanged(widget.topic); - _controller.clear(); - } - - void _deletePrompt(int index) { - widget.topic.discussionPrompts.removeAt(index); - widget.onChanged(widget.topic); - } - - Future> _getPrompts() async { - final ChatTopic res = await TopicDataRepo.generate( - _pangeaController.userController.accessToken, - request: TopicDataRequest( - topicInfo: widget.topic, - numPrompts: 10, - numWords: 0, - ), - ); - return res.discussionPrompts; - } -} diff --git a/lib/pangea/widgets/practice_activity/no_more_practice_card.dart b/lib/pangea/widgets/practice_activity/no_more_practice_card.dart deleted file mode 100644 index 24f6152b3..000000000 --- a/lib/pangea/widgets/practice_activity/no_more_practice_card.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; - -class StarAnimationWidget extends StatefulWidget { - const StarAnimationWidget({super.key}); - - @override - StarAnimationWidgetState createState() => StarAnimationWidgetState(); -} - -class StarAnimationWidgetState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _opacityAnimation; - late Animation _sizeAnimation; - - @override - void initState() { - super.initState(); - - // Initialize the AnimationController - _controller = AnimationController( - duration: const Duration(seconds: 1), // Duration of the animation - vsync: this, - )..repeat(reverse: true); // Repeat the animation in reverse - - // Define the opacity animation - _opacityAnimation = - Tween(begin: 0.8, end: 1.0).animate(_controller); - - // Define the size animation - _sizeAnimation = Tween(begin: 56.0, end: 60.0).animate(_controller); - } - - @override - void dispose() { - // Dispose of the controller to free resources - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - // Set constant height and width for the star container - height: 60.0, - width: 60.0, - child: Center( - child: AnimatedBuilder( - animation: _controller, - builder: (context, child) { - return Opacity( - opacity: _opacityAnimation.value, - child: Icon( - Icons.star, - color: Colors.amber, - size: _sizeAnimation.value, - ), - ); - }, - ), - ), - ); - } -} - -class GamifiedTextWidget extends StatelessWidget { - const GamifiedTextWidget({super.key}); - - @override - Widget build(BuildContext context) { - return const SizedBox( - width: AppConfig.toolbarMinWidth, - child: Padding( - padding: EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Column( - children: [ - StarAnimationWidget(), - InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.unlockedLanguageTools, - ), - ], - ), - ), - ); - } -} diff --git a/lib/pangea/widgets/practice_activity/word_focus_listening_activity.dart b/lib/pangea/widgets/practice_activity/word_focus_listening_activity.dart deleted file mode 100644 index fcf643f96..000000000 --- a/lib/pangea/widgets/practice_activity/word_focus_listening_activity.dart +++ /dev/null @@ -1,179 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/multiple_choice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; -import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; -import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class WordFocusListeningActivity extends StatefulWidget { - final PracticeActivityModel activity; - final PracticeActivityCardState practiceCardController; - - const WordFocusListeningActivity({ - super.key, - required this.activity, - required this.practiceCardController, - }); - - @override - WordFocusListeningActivityState createState() => - WordFocusListeningActivityState(); - - ActivityContent get activityContent => activity.content; -} - -class WordFocusListeningActivityState - extends State { - int? selectedChoiceIndex; - - TtsController tts = TtsController(); - - final double buttonSize = 40; - - PracticeActivityRecordModel? get currentRecordModel => - widget.practiceCardController.currentCompletionRecord; - - initializeTTS() async { - tts.setupTTS().then((value) => setState(() {})); - } - - @override - void initState() { - super.initState(); - initializeTTS(); - } - - void checkAnswer(int index) { - final String value = widget.activityContent.choices[index]; - - if (currentRecordModel?.hasTextResponse(value) ?? false) { - return; - } - - final bool isCorrect = widget.activity.content.isCorrect(value, index); - - currentRecordModel?.addResponse( - text: value, - score: isCorrect ? 1 : 0, - ); - - if (currentRecordModel == null || - currentRecordModel!.latestResponse == null) { - debugger(when: kDebugMode); - return; - } - - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - // note - this maybe should be the activity event id - eventId: - widget.practiceCardController.widget.pangeaMessageEvent.eventId, - roomId: widget.practiceCardController.widget.pangeaMessageEvent.room.id, - constructs: currentRecordModel!.latestResponse!.toUses( - widget.practiceCardController.currentActivity!, - widget.practiceCardController.metadata, - ), - origin: AnalyticsUpdateOrigin.practiceActivity, - ), - ); - setState(() { - selectedChoiceIndex = index; - }); - } - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return Column( - children: [ - // Text question at the top - Text( - widget.activityContent.question, - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - textAlign: TextAlign.center, - ), - const SizedBox(height: 20), - - // Blank slot for the answer - DragTarget( - builder: (context, candidateData, rejectedData) { - return CircleAvatar( - radius: buttonSize, - backgroundColor: Colors.transparent, - child: Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - border: Border.all( - color: AppConfig.primaryColor.withAlpha(100), - width: 2, - style: BorderStyle.solid, - ), - ), - ), - ); - }, - onAcceptWithDetails: (details) => checkAnswer(details.data), - ), - const SizedBox(height: 10), - // Audio options as draggable buttons - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: List.generate( - widget.activityContent.choices.length, - (index) => Draggable( - data: index, - feedback: _buildAudioButton(context, theme, index), - childWhenDragging: _buildAudioButton(context, theme, index, true), - child: _buildAudioButton(context, theme, index), - ), - ), - ), - ], - ); - } - - // Helper method to build the audio buttons - Widget _buildAudioButton( - BuildContext context, - ThemeData theme, - int index, [ - bool dragging = false, - ]) { - final isAnswerCorrect = widget.activityContent.isCorrect( - widget.activityContent.choices[index], - index, - ); - Color buttonColor; - if (selectedChoiceIndex == index) { - buttonColor = isAnswerCorrect - ? theme.colorScheme.secondary.withAlpha(180) // Correct: Green - : theme.colorScheme.error.withAlpha(180); // Incorrect: Red - } else { - buttonColor = - AppConfig.primaryColor.withAlpha(100); // Default: Primary color - } - - return GestureDetector( - onTap: () => tts.tryToSpeak( - widget.activityContent.choices[index], - context, - widget.practiceCardController.widget.pangeaMessageEvent.eventId, - ), - child: CircleAvatar( - radius: buttonSize, - backgroundColor: dragging ? Colors.grey.withAlpha(128) : buttonColor, - child: const Icon(Icons.play_arrow), - ), - ); - } -} diff --git a/lib/pangea/widgets/space/language_settings.dart b/lib/pangea/widgets/space/language_settings.dart deleted file mode 100644 index fece2cab2..000000000 --- a/lib/pangea/widgets/space/language_settings.dart +++ /dev/null @@ -1,184 +0,0 @@ -// import 'dart:developer'; - -// import 'package:fluffychat/pangea/models/space_model.dart'; -// import 'package:fluffychat/pangea/widgets/space/language_level_dropdown.dart'; -// import 'package:flutter/foundation.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; -// import 'package:future_loading_dialog/future_loading_dialog.dart'; -// import 'package:matrix/matrix.dart'; - -// import '../../../widgets/matrix.dart'; -// import '../../constants/language_keys.dart'; -// import '../../constants/pangea_event_types.dart'; -// import '../../controllers/language_list_controller.dart'; -// import '../../controllers/pangea_controller.dart'; -// import '../../extensions/pangea_room_extension/pangea_room_extension.dart'; -// import '../../models/language_model.dart'; -// import '../../utils/error_handler.dart'; -// import '../user_settings/p_language_dropdown.dart'; -// import '../user_settings/p_question_container.dart'; - -// class LanguageSettings extends StatefulWidget { -// final String? roomId; -// final bool startOpen; -// final LanguageSettingsModel? initialSettings; - -// const LanguageSettings({ -// super.key, -// this.roomId, -// this.startOpen = false, -// this.initialSettings, -// }); - -// @override -// LanguageSettingsState createState() => LanguageSettingsState(); -// } - -// class LanguageSettingsState extends State { -// Room? room; -// late LanguageSettingsModel languageSettings; -// late bool isOpen; -// final PangeaController pangeaController = MatrixState.pangeaController; - -// final cityController = TextEditingController(); -// final countryController = TextEditingController(); -// final schoolController = TextEditingController(); - -// LanguageSettingsState({Key? key}); - -// @override -// void initState() { -// room = widget.roomId != null -// ? Matrix.of(context).client.getRoomById(widget.roomId!) -// : null; - -// languageSettings = room?.languageSettings ?? -// widget.initialSettings ?? -// LanguageSettingsModel(); - -// isOpen = widget.startOpen; - -// super.initState(); -// } - -// bool get sameLanguages => -// languageSettings.targetLanguage == languageSettings.dominantLanguage; - -// LanguageModel getLanguage({required bool isBase, required String? langCode}) { -// final LanguageModel backup = isBase -// ? pangeaController.pLanguageStore.baseOptions.first -// : pangeaController.pLanguageStore.targetOptions.first; -// if (langCode == null) return backup; -// final LanguageModel byCode = PangeaLanguage.byLangCode(langCode); -// return byCode.langCode != LanguageKeys.unknownLanguage ? byCode : backup; -// } - -// Future updatePermission(void Function() makeLocalRuleChange) async { -// makeLocalRuleChange(); -// if (room != null) { -// await showFutureLoadingDialog( -// context: context, -// future: () => setLanguageSettings(room!.id), -// ); -// } -// setState(() {}); -// } - -// void setTextControllerValues() { -// languageSettings.city = cityController.text; -// languageSettings.country = countryController.text; -// languageSettings.schoolName = schoolController.text; -// } - -// Future setLanguageSettings(String roomId) async { -// try { -// setTextControllerValues(); - -// await Matrix.of(context).client.setRoomStateWithKey( -// roomId, -// PangeaEventTypes.languageSettings, -// '', -// languageSettings.toJson(), -// ); -// } catch (err, stack) { -// debugger(when: kDebugMode); -// ErrorHandler.logError(e: err, s: stack); -// } -// } - -// @override -// Widget build(BuildContext context) => Column( -// children: [ -// ListTile( -// title: Text( -// L10n.of(context).languageSettings, -// style: TextStyle( -// color: Theme.of(context).colorScheme.secondary, -// fontWeight: FontWeight.bold, -// ), -// ), -// subtitle: Text(L10n.of(context).languageSettingsDesc), -// leading: CircleAvatar( -// backgroundColor: Theme.of(context).scaffoldBackgroundColor, -// foregroundColor: Theme.of(context).textTheme.bodyLarge!.color, -// child: const Icon(Icons.language), -// ), -// trailing: Icon( -// isOpen -// ? Icons.keyboard_arrow_down_outlined -// : Icons.keyboard_arrow_right_outlined, -// ), -// onTap: () => setState(() => isOpen = !isOpen), -// ), -// if (isOpen) -// AnimatedContainer( -// duration: const Duration(milliseconds: 300), -// height: isOpen ? null : 0, -// child: Padding( -// padding: const EdgeInsets.fromLTRB(16.0, 0, 16.0, 8.0), -// child: Column( -// children: [ -// PQuestionContainer( -// title: L10n.of(context).selectSpaceDominantLanguage, -// ), -// PLanguageDropdown( -// onChange: (p0) => updatePermission(() { -// languageSettings.dominantLanguage = p0.langCode; -// }), -// initialLanguage: getLanguage( -// isBase: true, -// langCode: languageSettings.dominantLanguage, -// ), -// languages: pangeaController.pLanguageStore.baseOptions, -// showMultilingual: true, -// ), -// PQuestionContainer( -// title: L10n.of(context).selectSpaceTargetLanguage, -// ), -// PLanguageDropdown( -// onChange: (p0) => updatePermission(() { -// languageSettings.targetLanguage = p0.langCode; -// }), -// initialLanguage: getLanguage( -// isBase: false, -// langCode: languageSettings.targetLanguage, -// ), -// languages: pangeaController.pLanguageStore.targetOptions, -// ), -// PQuestionContainer( -// title: L10n.of(context).whatIsYourSpaceLanguageLevel, -// ), -// LanguageLevelDropdown( -// initialLevel: languageSettings.languageLevel, -// onChanged: (int? newValue) => updatePermission(() { -// languageSettings.languageLevel = newValue!; -// }), -// ), -// ], -// ), -// ), -// ), -// ], -// ); -// } diff --git a/lib/pangea/widgets/user_settings/languages_i_speak_tile.dart b/lib/pangea/widgets/user_settings/languages_i_speak_tile.dart deleted file mode 100644 index 739037a92..000000000 --- a/lib/pangea/widgets/user_settings/languages_i_speak_tile.dart +++ /dev/null @@ -1,107 +0,0 @@ -// import 'package:fluffychat/pangea/models/language_model.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_gen/gen_l10n/l10n.dart'; -// import 'package:future_loading_dialog/future_loading_dialog.dart'; - -// import '../../../widgets/matrix.dart'; -// import '../../controllers/pangea_controller.dart'; - -// class LanguagesISpeakTile extends StatelessWidget { -// final PangeaController pangeaController = MatrixState.pangeaController; - -// LanguagesISpeakTile({ -// Key? key, -// }) : super(key: key); - -// @override -// Widget build(BuildContext context) { -// return ListTile( -// trailing: const Icon(Icons.edit_outlined), -// title: Text(L10n.of(context).languagesISpeak), -// //PTODO - make a nice display of flags -// // subtitle: Text( -// // pangeaController.userController.userModel?.profile?.speaks -// // ?.toString() ?? -// // "", -// // ), -// onTap: () => showDialog( -// context: context, -// builder: (BuildContext context) { -// return const MultiSelectDialog(); -// }, -// ), -// ); -// } -// } - -// class MultiSelectDialog extends StatefulWidget { -// const MultiSelectDialog({Key? key}) : super(key: key); - -// @override -// State createState() => _MultiSelectDialogState(); -// } - -// class _MultiSelectDialogState extends State { -// final List _selectedValues = []; -// PangeaController pangeaController = MatrixState.pangeaController; - -// @override -// void initState() { -// super.initState(); -// // _selectedValues.addAll( -// // pangeaController.userController.userModel?.profile?.speaks ?? []); -// } - -// void _onItemCheckedChange(LanguageModel itemValue, bool? checked) { -// if (checked == null) return; -// setState(() { -// if (checked) { -// _selectedValues.add(itemValue.langCode); -// } else { -// _selectedValues.remove(itemValue.langCode); -// } -// }); -// } - -// @override -// Widget build(BuildContext context) { -// return AlertDialog( -// title: Text(L10n.of(context).languagesISpeak), -// contentPadding: const EdgeInsets.only(top: 12.0), -// content: SingleChildScrollView( -// child: ListTileTheme( -// contentPadding: const EdgeInsets.fromLTRB(14.0, 0.0, 24.0, 0.0), -// child: ListBody( -// children: -// pangeaController.pLanguageStore.baseOptions.map((language) { -// return CheckboxListTile( -// value: _selectedValues.contains(language.langCode), -// //PTODO - show flag with name -// title: Text(language.displayName), -// controlAffinity: ListTileControlAffinity.leading, -// onChanged: (checked) => _onItemCheckedChange(language, checked), -// ); -// }).toList(), -// ), -// ), -// ), -// actions: [ -// TextButton( -// onPressed: () => Navigator.pop(context), -// child: Text(L10n.of(context).cancel), -// ), -// TextButton( -// onPressed: () => showFutureLoadingDialog( -// context: context, -// future: (() async { -// await pangeaController.userController -// .updateUserProfile(speaks: _selectedValues); -// Navigator.pop(context); -// }), -// ), -// child: Text(L10n.of(context).ok), -// ) -// ], -// ); -// } -// } diff --git a/lib/pangea/widgets/word_zoom/lemma_widget.dart b/lib/pangea/widgets/word_zoom/lemma_widget.dart deleted file mode 100644 index 165fddc38..000000000 --- a/lib/pangea/widgets/word_zoom/lemma_widget.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; - -class LemmaWidget extends StatelessWidget { - final PangeaToken token; - - const LemmaWidget({ - super.key, - required this.token, - }); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: Text("${token.lemma.text} ${token.xpEmoji}"), - ); - } -} - -// class LemmaWidget extends StatelessWidget { -// final PangeaToken token; -// final VoidCallback onPressed; -// final bool isSelected; - -// const LemmaWidget({ -// super.key, -// required this.token, -// required this.onPressed, -// this.isSelected = false, -// }); - -// @override -// Widget build(BuildContext context) { -// return WordZoomActivityButton( -// icon: Text(token.xpEmoji), -// isSelected: isSelected, -// onPressed: onPressed, -// ); -// } -// } diff --git a/lib/pangea/word_cloud/word_cloud.dart b/lib/pangea/word_cloud/word_cloud.dart deleted file mode 100644 index d33245a6c..000000000 --- a/lib/pangea/word_cloud/word_cloud.dart +++ /dev/null @@ -1,8 +0,0 @@ -library word_cloud; - -export 'word_cloud_data.dart'; -export 'word_cloud_setting.dart'; -export 'word_cloud_shape.dart'; -export 'word_cloud_tap_view.dart'; -export 'word_cloud_tap.dart'; -export 'word_cloud_view.dart'; diff --git a/lib/pangea/word_cloud/word_cloud_data.dart b/lib/pangea/word_cloud/word_cloud_data.dart deleted file mode 100644 index abc1c0d1a..000000000 --- a/lib/pangea/word_cloud/word_cloud_data.dart +++ /dev/null @@ -1,29 +0,0 @@ -class WordCloudData { - List data = []; - - WordCloudData({ - required this.data, - }) { - data = (data..sort((a, b) => (a['value'] ?? 0).compareTo(b['value'] ?? 0))) - .reversed - .toList(); - } - - void addDataAsMapList(List newdata) { - data.addAll(newdata); - data = (data..sort((a, b) => a['value'].compareTo(b['value']))) - .reversed - .toList(); - } - - void addData(String word, double value) { - data.add({'word': word, 'value': value}); - data = (data..sort((a, b) => a['value'].compareTo(b['value']))) - .reversed - .toList(); - } - - List getData() { - return data; - } -} diff --git a/lib/pangea/word_cloud/word_cloud_setting.dart b/lib/pangea/word_cloud/word_cloud_setting.dart deleted file mode 100644 index 2e0768991..000000000 --- a/lib/pangea/word_cloud/word_cloud_setting.dart +++ /dev/null @@ -1,350 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/word_cloud/word_cloud_shape.dart'; - -class WordCloudSetting { - double mapX = 0; - double mapY = 0; - String? fontFamily; - FontStyle? fontStyle; - FontWeight? fontWeight; - List data = []; - List map = [[]]; - List textCenter = []; - List textPoints = []; - List textlist = []; - List isdrawed = []; - double centerX = 0; - double centerY = 0; - double minTextSize; - double maxTextSize; - WordCloudShape shape; - int attempt; - List? colorList = [Colors.black]; - - WordCloudSetting({ - Key? key, - required this.data, - required this.minTextSize, - required this.maxTextSize, - required this.attempt, - required this.shape, - }); - - void setMapSize(double x, double y) { - mapX = x; - mapY = y; - } - - void setColorList(List? colors) { - colorList = colors; - } - - void setFont(String? family, FontStyle? style, FontWeight? weight) { - fontFamily = family; - fontStyle = style; - fontWeight = weight; - } - - List setMap(dynamic shape) { - final List makemap = [[]]; - switch (shape.getType()) { - case 'normal': - for (var i = 0; i < mapX; i++) { - for (var j = 0; j < mapY; j++) { - makemap[i].add(0); - } - makemap.add([]); - } - break; - - case 'circle': - for (var i = 0; i < mapX; i++) { - for (var j = 0; j < mapY; j++) { - if (pow(i - (mapX / 2), 2) + pow(j - (mapY / 2), 2) > - pow(shape.getRadius(), 2)) { - makemap[i].add(1); - } else { - makemap[i].add(0); - } - } - makemap.add([]); - } - break; - - case 'ellipse': - for (var i = 0; i < mapX; i++) { - for (var j = 0; j < mapY; j++) { - if (pow(i - (mapX / 2), 2) / pow(shape.getMajorAxis(), 2) + - pow(j - (mapY / 2), 2) / pow(shape.getMinorAxis(), 2) > - 1) { - makemap[i].add(1); - } else { - makemap[i].add(0); - } - } - makemap.add([]); - } - break; - } - return makemap; - } - - void setInitial() { - //map = [[]]; - textCenter = []; - textPoints = []; - textlist = []; - isdrawed = []; - - centerX = mapX / 2; - centerY = mapY / 2; - - map = setMap(shape); - - // for (var i = 0; i < mapX; i++) { - // for (var j = 0; j < mapY; j++) { - // if (pow(i - (mapX / 2), 2) + pow(j - (mapY / 2), 2) > pow(250, 2)) { - // map[i].add(1); - // } else { - // map[i].add(0); - // } - // } - // map.add([]); - // } - - for (var i = 0; i < data.length; i++) { - final double getTextSize = - (minTextSize * (data[0]['value'] - data[i]['value']) + - maxTextSize * - (data[i]['value'] - data[data.length - 1]['value'])) / - (data[0]['value'] - data[data.length - 1]['value']); - - final textSpan = TextSpan( - text: data[i]['word'], - style: TextStyle( - color: colorList?[Random().nextInt(colorList!.length)], - fontSize: getTextSize, - fontWeight: fontWeight, - fontFamily: fontFamily, - fontStyle: fontStyle, - ), - ); - - final textPainter = TextPainter() - ..text = textSpan - ..textDirection = TextDirection.ltr - ..textAlign = TextAlign.center - ..layout(); - - textlist.add(textPainter); - - final double centerCorrectionX = centerX - textlist[i].width / 2; - final double centerCorrectionY = centerY - textlist[i].height / 2; - textCenter.add([centerCorrectionX, centerCorrectionY]); - textPoints.add([]); - isdrawed.add(false); - } - } - - void setTextStyle(List newstyle) { - //only support color, weight, family, fontstyle - textlist = []; - textCenter = []; - textPoints = []; - isdrawed = []; - - for (var i = 0; i < data.length; i++) { - final double getTextSize = - (minTextSize * (data[0]['value'] - data[i]['value']) + - maxTextSize * - (data[i]['value'] - data[data.length - 1]['value'])) / - (data[0]['value'] - data[data.length - 1]['value']); - - final textSpan = TextSpan( - text: data[i]['word'], - style: TextStyle( - color: newstyle[i].color, - fontSize: getTextSize, - fontWeight: newstyle[i].fontWeight, - fontFamily: newstyle[i].fontFamily, - fontStyle: newstyle[i].fontStyle, - ), - ); - - final textPainter = TextPainter() - ..text = textSpan - ..textDirection = TextDirection.ltr - ..textAlign = TextAlign.center - ..layout(); - - textlist.add(textPainter); - - final double centerCorrectionX = centerX - textlist[i].width / 2; - final double centerCorrectionY = centerY - textlist[i].height / 2; - textCenter.add([centerCorrectionX, centerCorrectionY]); - textPoints.add([]); - isdrawed.add(false); - } - } - - bool checkMap(double x, double y, double w, double h) { - if (mapX - x < w) { - return false; - } - if (mapY - y < h) { - return false; - } - for (int i = x.toInt(); i < x.toInt() + w; i++) { - for (int j = y.toInt(); j < y.toInt() + h; j++) { - if (map[i][j] == 1) { - return false; - } - } - } - return true; - } - - bool checkMapOptimized(int x, int y, double w, double h) { - if (mapX - x < w) { - return false; - } - if (mapY - y < h) { - return false; - } - for (int i = x.toInt(); i < x.toInt() + w; i++) { - if (map[i][y + h - 1] == 1) { - return false; - } - if (map[i][y + 1] == 1) { - return false; - } - } - return true; - } - - void drawIn(int index, double x, double y) { - textPoints[index] = [x, y]; - for (int i = x.toInt(); i < x.toInt() + textlist[index].width; i++) { - for (int j = y.toInt(); - j < y.toInt() + textlist[index].height.floor(); - j++) { - map[i][j] = 1; - } - } - } - - void drawTextOptimized() { - drawIn(0, textCenter[0][0], textCenter[0][1]); - isdrawed[0] = true; - bool checkattempt = false; - for (var i = 1; i < textlist.length; i++) { - final double w = textlist[i].width; - final double h = textlist[i].height; - int attempts = 0; - - bool isadded = false; - - while (!isadded) { - final int getX = Random().nextInt(mapX.toInt() - w.toInt()); - final int direction = Random().nextInt(2); - if (direction == 0) { - for (int y = textCenter[i][1].toInt(); y > 0; y--) { - if (checkMapOptimized(getX, y, w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - isdrawed[i] = true; - break; - } - } - } else if (direction == 1) { - for (int y = textCenter[i][1].toInt(); y < mapY; y++) { - if (checkMapOptimized(getX, y, w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - isdrawed[i] = true; - break; - } - } - } - attempts += 1; - if (attempts > attempt) { - isadded = true; - checkattempt = true; - } - } - if (checkattempt) { - return; - } - } - } - - void drawText() { - drawIn(0, textCenter[0][0], textCenter[0][1]); - for (var i = 1; i < textlist.length; i++) { - final double w = textlist[i].width; - final double h = textlist[i].height; - int attempts = 0; - - bool isadded = false; - - while (!isadded) { - final int getX = Random().nextInt(mapX.toInt() - w.toInt()); - final int direction = Random().nextInt(2); - if (direction == 0) { - for (int y = textCenter[i][1].toInt(); y > 0; y--) { - if (checkMap(getX.toDouble(), y.toDouble(), w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - break; - } - } - if (!isadded) { - for (int y = textCenter[i][1].toInt(); y < mapY; y++) { - if (checkMap(getX.toDouble(), y.toDouble(), w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - break; - } - } - } - } else if (direction == 1) { - for (int y = textCenter[i][1].toInt(); y < mapY; y++) { - if (checkMap(getX.toDouble(), y.toDouble(), w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - break; - } - } - if (!isadded) { - for (int y = textCenter[i][1].toInt(); y > 0; y--) { - if (checkMap(getX.toDouble(), y.toDouble(), w, h)) { - drawIn(i, getX.toDouble(), y.toDouble()); - isadded = true; - break; - } - } - } - } - attempts += 1; - if (attempts > attempt) { - isadded = true; - } - } - } - } - - List getWordPoint() { - return textPoints; - } - - List getTextPainter() { - return textlist; - } - - int getDataLength() { - return data.length; - } -} diff --git a/lib/pangea/word_cloud/word_cloud_shape.dart b/lib/pangea/word_cloud/word_cloud_shape.dart deleted file mode 100644 index afc03b328..000000000 --- a/lib/pangea/word_cloud/word_cloud_shape.dart +++ /dev/null @@ -1,42 +0,0 @@ -class WordCloudShape { - double boundaryStartX = 0; - double boundaryEndX = 0; - double boundaryStartY = 0; - double boundaryEndY = 0; - String type = 'normal'; - - String getType() { - return type; - } -} - -class WordCloudCircle extends WordCloudShape { - double radius; - - WordCloudCircle({required this.radius}) { - type = 'circle'; - } - - double getRadius() { - return radius; - } -} - -class WordCloudEllipse extends WordCloudShape { - double majoraxis; - double minoraxis; - WordCloudEllipse({ - required this.majoraxis, - required this.minoraxis, - }) { - type = 'ellipse'; - } - - double getMajorAxis() { - return majoraxis; - } - - double getMinorAxis() { - return minoraxis; - } -} diff --git a/lib/pangea/word_cloud/word_cloud_tap.dart b/lib/pangea/word_cloud/word_cloud_tap.dart deleted file mode 100644 index 0583fd214..000000000 --- a/lib/pangea/word_cloud/word_cloud_tap.dart +++ /dev/null @@ -1,11 +0,0 @@ -class WordCloudTap { - Map wordtap = {}; - - void addWordtap(String word, Function func) { - wordtap[word] = func; - } - - Map getWordTaps() { - return wordtap; - } -} diff --git a/lib/pangea/word_cloud/word_cloud_tap_view.dart b/lib/pangea/word_cloud/word_cloud_tap_view.dart deleted file mode 100644 index 8e1a45124..000000000 --- a/lib/pangea/word_cloud/word_cloud_tap_view.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/word_cloud/word_cloud_data.dart'; -import 'package:fluffychat/pangea/word_cloud/word_cloud_setting.dart'; -import 'package:fluffychat/pangea/word_cloud/word_cloud_shape.dart'; -import 'package:fluffychat/pangea/word_cloud/word_cloud_tap.dart'; - -class WordCloudTapView extends StatefulWidget { - final WordCloudData data; - final Color? mapcolor; - final Decoration? decoration; - final double mapwidth; - final String? fontFamily; - final FontStyle? fontStyle; - final FontWeight? fontWeight; - final double mapheight; - final List? colorlist; - final int attempt; - final double mintextsize; - final double maxtextsize; - final WordCloudShape? shape; - final WordCloudTap wordtap; - - const WordCloudTapView({ - super.key, - required this.data, - required this.mapwidth, - required this.mapheight, - required this.wordtap, - this.mintextsize = 10, - this.maxtextsize = 100, - this.attempt = 30, - this.shape, - this.fontFamily, - this.fontStyle, - this.fontWeight, - this.mapcolor, - this.decoration, - this.colorlist, - }); - @override - State createState() => _WordCloudTapViewState(); -} - -class _WordCloudTapViewState extends State { - late WordCloudShape wcshape; - late WordCloudSetting wordcloudsetting; - - @override - void initState() { - super.initState(); - if (widget.shape == null) { - wcshape = WordCloudShape(); - } else { - wcshape = widget.shape!; - } - - wordcloudsetting = WordCloudSetting( - data: widget.data.getData(), - minTextSize: widget.mintextsize, - maxTextSize: widget.maxtextsize, - attempt: widget.attempt, - shape: wcshape, - ); - - wordcloudsetting.setMapSize(widget.mapwidth, widget.mapheight); - wordcloudsetting.setFont( - widget.fontFamily, - widget.fontStyle, - widget.fontWeight, - ); - wordcloudsetting.setColorList(widget.colorlist); - wordcloudsetting.setInitial(); - wordcloudsetting.drawTextOptimized(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onVerticalDragDown: (details) { - for (var i = 0; i < widget.data.getData().length; i++) { - final List points = wordcloudsetting.textPoints; - final double w = wordcloudsetting.textlist[i].width; - final double h = wordcloudsetting.textlist[i].height; - if (points[i][0] < details.localPosition.dx && - details.localPosition.dx < (points[i][0] + w) && - points[i][1] < details.localPosition.dy && - details.localPosition.dy < (points[i][1] + h)) { - if (widget.wordtap - .getWordTaps() - .containsKey(widget.data.getData()[i]['word'])) { - widget.wordtap.getWordTaps()[widget.data.getData()[i]['word']]!(); - } - } - } - }, - child: Container( - width: widget.mapwidth, - height: widget.mapheight, - color: widget.mapcolor, - decoration: widget.decoration, - child: CustomPaint( - painter: WCTpaint(wordcloudpaint: wordcloudsetting), - ), - ), - ); - } -} - -class WCTpaint extends CustomPainter { - final WordCloudSetting wordcloudpaint; - WCTpaint({ - required this.wordcloudpaint, - }); - - @override - void paint(Canvas canvas, Size size) { - for (var i = 0; i < wordcloudpaint.getDataLength(); i++) { - if (wordcloudpaint.isdrawed[i]) { - wordcloudpaint.getTextPainter()[i].paint( - canvas, - Offset( - wordcloudpaint.getWordPoint()[i][0], - wordcloudpaint.getWordPoint()[i][1], - ), - ); - } - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; -} diff --git a/lib/pangea/word_cloud/word_cloud_view.dart b/lib/pangea/word_cloud/word_cloud_view.dart deleted file mode 100644 index 850b26f8e..000000000 --- a/lib/pangea/word_cloud/word_cloud_view.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/word_cloud/word_cloud_data.dart'; -import 'package:fluffychat/pangea/word_cloud/word_cloud_setting.dart'; -import 'package:fluffychat/pangea/word_cloud/word_cloud_shape.dart'; - -class WordCloudView extends StatefulWidget { - final WordCloudData data; - final Color? mapcolor; - final Decoration? decoration; - final double mapwidth; - final String? fontFamily; - final FontStyle? fontStyle; - final FontWeight? fontWeight; - final double mapheight; - final List? colorlist; - final int attempt; - final double mintextsize; - final double maxtextsize; - final WordCloudShape? shape; - - const WordCloudView({ - super.key, - required this.data, - required this.mapwidth, - required this.mapheight, - this.mintextsize = 10, - this.maxtextsize = 100, - this.attempt = 30, - this.shape, - this.fontFamily, - this.fontStyle, - this.fontWeight, - this.mapcolor, - this.decoration, - this.colorlist, - }); - @override - State createState() => _WordCloudViewState(); -} - -class _WordCloudViewState extends State { - late WordCloudShape wcshape; - late WordCloudSetting wordcloudsetting; - - @override - void initState() { - super.initState(); - if (widget.shape == null) { - wcshape = WordCloudShape(); - } else { - wcshape = widget.shape!; - } - - wordcloudsetting = WordCloudSetting( - data: widget.data.getData(), - minTextSize: widget.mintextsize, - maxTextSize: widget.maxtextsize, - attempt: widget.attempt, - shape: wcshape, - ); - - wordcloudsetting.setMapSize(widget.mapwidth, widget.mapheight); - wordcloudsetting.setFont( - widget.fontFamily, - widget.fontStyle, - widget.fontWeight, - ); - wordcloudsetting.setColorList(widget.colorlist); - wordcloudsetting.setInitial(); - - wordcloudsetting.drawTextOptimized(); - } - - @override - Widget build(BuildContext context) { - return Container( - width: widget.mapwidth, - height: widget.mapheight, - color: widget.mapcolor, - decoration: widget.decoration, - child: CustomPaint( - painter: WCpaint(wordcloudpaint: wordcloudsetting), - ), - ); - } -} - -class WCpaint extends CustomPainter { - final WordCloudSetting wordcloudpaint; - WCpaint({ - required this.wordcloudpaint, - }); - - @override - void paint(Canvas canvas, Size size) { - for (var i = 0; i < wordcloudpaint.getDataLength(); i++) { - if (wordcloudpaint.isdrawed[i]) { - wordcloudpaint.getTextPainter()[i].paint( - canvas, - Offset( - wordcloudpaint.getWordPoint()[i][0], - wordcloudpaint.getWordPoint()[i][1], - ), - ); - } - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; -} diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 658266cf0..e8297b68a 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -35,8 +35,8 @@ import 'package:matrix/matrix.dart'; import 'package:unifiedpush/unifiedpush.dart'; import 'package:unifiedpush_ui/unifiedpush_ui.dart'; -import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; import 'package:fluffychat/utils/push_helper.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import '../config/app_config.dart'; diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index 94d992c07..9be9c428f 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -12,8 +12,8 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/utils/custom_http_client.dart'; import 'package:fluffychat/utils/custom_image_resizer.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index f2f6461ea..60c64067b 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class ErrorReporter { final BuildContext context; diff --git a/lib/utils/feedback_dialog.dart b/lib/utils/feedback_dialog.dart index fc37f07a8..fcd3e163a 100644 --- a/lib/utils/feedback_dialog.dart +++ b/lib/utils/feedback_dialog.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/config/app_config.dart'; -import '../pangea/widgets/common/bot_face_svg.dart'; +import '../pangea/bot/widgets/bot_face_svg.dart'; Future showFeedbackDialog( BuildContext context, diff --git a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart index 61b127df4..fee1b3c62 100644 --- a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart +++ b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart @@ -1,6 +1,6 @@ import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import '../../config/app_config.dart'; extension VisibleInGuiExtension on List { diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index 44dc270ad..a20ba712b 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -9,7 +9,7 @@ import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/flutter_hive_collections_database.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'cipher.dart'; diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart index 97011f7f5..b8cb68ae7 100644 --- a/lib/utils/push_helper.dart +++ b/lib/utils/push_helper.dart @@ -11,7 +11,7 @@ import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/utils/client_download_content_extension.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 9f7f436e5..fad65b25a 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -10,7 +10,7 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index e57ccebc3..91d3b257a 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/presence_builder.dart'; diff --git a/lib/widgets/chat_settings_popup_menu.dart b/lib/widgets/chat_settings_popup_menu.dart index a016b130f..590db81b3 100644 --- a/lib/widgets/chat_settings_popup_menu.dart +++ b/lib/widgets/chat_settings_popup_menu.dart @@ -7,9 +7,9 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/pages/settings_learning/settings_learning.dart'; -import 'package:fluffychat/pangea/utils/download_chat.dart'; -import 'package:fluffychat/pangea/utils/download_file.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_chat.dart'; +import 'package:fluffychat/pangea/chat_settings/utils/download_file.dart'; +import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'matrix.dart'; diff --git a/lib/widgets/fluffy_chat_app.dart b/lib/widgets/fluffy_chat_app.dart index 247d7997a..de8fe3bdb 100644 --- a/lib/widgets/fluffy_chat_app.dart +++ b/lib/widgets/fluffy_chat_app.dart @@ -9,7 +9,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/routes.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/theme_builder.dart'; import '../config/app_config.dart'; diff --git a/lib/widgets/layouts/empty_page.dart b/lib/widgets/layouts/empty_page.dart index 45e7ebd86..0ac51a111 100644 --- a/lib/widgets/layouts/empty_page.dart +++ b/lib/widgets/layouts/empty_page.dart @@ -2,7 +2,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/widgets/common/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; class EmptyPage extends StatelessWidget { static const double _width = 400; diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index d1a62aea7..6b3a92af5 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -19,9 +19,9 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; -import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/utils/any_state_holder.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; diff --git a/lib/widgets/public_room_bottom_sheet.dart b/lib/widgets/public_room_bottom_sheet.dart index 4ca5ecc6b..2b90dd538 100644 --- a/lib/widgets/public_room_bottom_sheet.dart +++ b/lib/widgets/public_room_bottom_sheet.dart @@ -6,8 +6,8 @@ import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; diff --git a/lib/widgets/unread_rooms_badge.dart b/lib/widgets/unread_rooms_badge.dart index e3661f601..ca8f4b33e 100644 --- a/lib/widgets/unread_rooms_badge.dart +++ b/lib/widgets/unread_rooms_badge.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:badges/badges.dart' as b; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'matrix.dart'; class UnreadRoomsBadge extends StatelessWidget {