feat(ai-scribe): Load AI scribe config in dashboard

This commit is contained in:
dab246
2025-12-19 15:05:41 +07:00
committed by Dat H. Pham
parent 256234b3d8
commit 6e56a50713
18 changed files with 114 additions and 50 deletions
@@ -4,6 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/html_transformer/html_transform.dart';
import 'package:core/utils/config/app_config_loader.dart';
import 'package:core/utils/file_utils.dart';
import 'package:core/utils/platform_info.dart';
import 'package:core/utils/preview_eml_file_utils.dart';
import 'package:core/utils/print_utils.dart';
import 'package:get/get.dart';
@@ -114,6 +115,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_ai_scribe_config_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/bindings/setting_interactor_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_interactors_bindings.dart';
@@ -417,6 +419,11 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<ManageAccountRepository>(),
),
);
if (!PlatformInfo.isMobile) {
Get.lazyPut(
() => GetAIScribeConfigInteractor(Get.find<ManageAccountRepository>()),
);
}
}
@override
@@ -120,6 +120,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dow
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/ai_scribe/setup_cached_ai_scribe_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/cleanup_recent_search_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/delete_emails_in_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_action_type_for_email_selection.dart';
@@ -148,11 +149,14 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/sear
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_ai_scribe_config_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_ai_scribe_config_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_interactor.dart';
@@ -273,6 +277,7 @@ class MailboxDashBoardController extends ReloadableController
SaveLanguageInteractor? saveLanguageInteractor;
GetTextFormattingMenuStateInteractor? getTextFormattingMenuStateInteractor;
SaveTextFormattingMenuStateInteractor? saveTextFormattingMenuStateInteractor;
GetAIScribeConfigInteractor? getAIScribeConfigInteractor;
final scaffoldKey = GlobalKey<ScaffoldState>();
final selectedMailbox = Rxn<PresentationMailbox>();
@@ -304,6 +309,7 @@ class MailboxDashBoardController extends ReloadableController
final isPopupMenuOpened = RxBool(false);
final octetsQuota = Rxn<Quota>();
final isTextFormattingMenuOpened = RxBool(false);
final cachedAIScribeConfig = Rx<AIScribeConfig>(AIScribeConfig.initial());
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
@@ -399,6 +405,7 @@ class MailboxDashBoardController extends ReloadableController
}
_handleArguments();
_loadAppGrid();
loadAIScribeConfig();
super.onReady();
}
@@ -524,6 +531,8 @@ class MailboxDashBoardController extends ReloadableController
setUpDefaultEmailSortOrder(success.emailSortOrderType);
} else if (success is GetTextFormattingMenuStateSuccess) {
updateTextFormattingMenuState(success.isDisplayed);
} else if (success is GetAIScribeConfigSuccess) {
handleLoadAIScribeConfigSuccess(success.aiScribeConfig);
} else {
super.handleSuccessViewState(success);
}
@@ -571,6 +580,8 @@ class MailboxDashBoardController extends ReloadableController
backToHomeScreen();
} else if (failure is GetTextFormattingMenuStateFailure) {
updateTextFormattingMenuState(false);
} else if (failure is GetAIScribeConfigFailure) {
handleLoadAIScribeConfigFailure();
} else {
super.handleFailureViewState(failure);
}
@@ -2047,6 +2058,7 @@ class MailboxDashBoardController extends ReloadableController
notifyThreadDetailSettingUpdated();
getServerSetting();
spamReportController.getSpamReportStateAction();
loadAIScribeConfig();
}
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
@@ -2123,6 +2135,7 @@ class MailboxDashBoardController extends ReloadableController
notifyThreadDetailSettingUpdated();
getServerSetting();
spamReportController.getSpamReportStateAction();
loadAIScribeConfig();
}
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
@@ -2451,7 +2464,7 @@ class MailboxDashBoardController extends ReloadableController
void updateEmailList(List<PresentationEmail> newEmailList) {
emailsInCurrentMailbox.value = newEmailList;
}
void openMailboxAction(PresentationMailbox presentationMailbox) {
dispatchMailboxUIAction(OpenMailboxAction(presentationMailbox));
}
@@ -3217,7 +3230,7 @@ class MailboxDashBoardController extends ReloadableController
leadingSVGIcon: imagePaths.icRecoverDeletedMessages,
leadingSVGIconColor: Colors.white,
backgroundColor: AppColor.primaryColor,
textColor: Colors.white,
textColor: Colors.white,
);
}
}
@@ -3229,7 +3242,7 @@ class MailboxDashBoardController extends ReloadableController
if (currentAccountId != null && currentSession != null) {
final arguments = EmailRecoveryArguments(currentAccountId, currentSession);
final result = PlatformInfo.isWeb
final result = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(
routeName: AppRoutes.emailRecovery,
arguments: arguments,
@@ -0,0 +1,30 @@
import 'package:core/utils/platform_info.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_ai_scribe_config_interactor.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
extension SetupCachedAiScribeExtension on MailboxDashBoardController {
void loadAIScribeConfig() {
if (PlatformInfo.isMobile) {
cachedAIScribeConfig.value = AIScribeConfig(isEnabled: false);
return;
}
getAIScribeConfigInteractor = getBinding<GetAIScribeConfigInteractor>();
if (getAIScribeConfigInteractor != null) {
consumeState(getAIScribeConfigInteractor!.execute());
} else {
handleLoadAIScribeConfigFailure();
}
}
void handleLoadAIScribeConfigSuccess(AIScribeConfig aiScribeConfig) {
cachedAIScribeConfig.value = aiScribeConfig;
}
void handleLoadAIScribeConfigFailure() {
cachedAIScribeConfig.value = AIScribeConfig.initial();
}
}