TF-2682 Create always read receipt controller
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/state/update_always_read_receipt_setting_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
|
class AlwaysReadReceiptController extends BaseController {
|
||||||
|
AlwaysReadReceiptController(
|
||||||
|
this._getAlwaysReadReceiptSettingInteractor,
|
||||||
|
this._updateAlwaysReadReceiptSettingInteractor,
|
||||||
|
);
|
||||||
|
|
||||||
|
final GetAlwaysReadReceiptSettingInteractor _getAlwaysReadReceiptSettingInteractor;
|
||||||
|
final UpdateAlwaysReadReceiptSettingInteractor _updateAlwaysReadReceiptSettingInteractor;
|
||||||
|
|
||||||
|
final alwaysReadReceipt = true.obs;
|
||||||
|
bool get isLoading => viewState.value.fold(
|
||||||
|
(failure) => false,
|
||||||
|
(success) => success is GettingAlwaysReadReceiptSetting || success is UpdatingAlwaysReadReceiptSetting);
|
||||||
|
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
|
||||||
|
_getCurrentAlwaysReadReceiptSetting();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void handleSuccessViewState(Success success) {
|
||||||
|
super.handleSuccessViewState(success);
|
||||||
|
if (success is GetAlwaysReadReceiptSettingSuccess) {
|
||||||
|
_getAlwaysReadReceiptSettingSuccess(success);
|
||||||
|
} else if (success is UpdateAlwaysReadReceiptSettingSuccess) {
|
||||||
|
_updateAlwaysReadReceiptSettingSuccess(success);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void handleFailureViewState(Failure failure) {
|
||||||
|
super.handleFailureViewState(failure);
|
||||||
|
if (failure is GetAlwaysReadReceiptSettingFailure) {
|
||||||
|
_getAlwaysReadReceiptSettingFailure();
|
||||||
|
} else if (failure is UpdateAlwaysReadReceiptSettingFailure) {
|
||||||
|
_updateAlwaysReadReceiptSettingFailure();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _updateAlwaysReadReceiptValue(bool value) {
|
||||||
|
alwaysReadReceipt.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _updateAlwaysReadReceiptSettingFailure() {
|
||||||
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
|
appToast.showToastErrorMessage(
|
||||||
|
currentOverlayContext!,
|
||||||
|
AppLocalizations.of(currentContext!).an_error_occurred);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _updateAlwaysReadReceiptSettingSuccess(
|
||||||
|
UpdateAlwaysReadReceiptSettingSuccess success
|
||||||
|
) {
|
||||||
|
_updateAlwaysReadReceiptValue(success.isEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void toggleAlwaysReadReceipt() {
|
||||||
|
if (isLoading) return;
|
||||||
|
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||||
|
if (accountId != null) {
|
||||||
|
consumeState(_updateAlwaysReadReceiptSettingInteractor.execute(
|
||||||
|
accountId,
|
||||||
|
!alwaysReadReceipt.value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getAlwaysReadReceiptSettingFailure() {
|
||||||
|
alwaysReadReceipt.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getAlwaysReadReceiptSettingSuccess(
|
||||||
|
GetAlwaysReadReceiptSettingSuccess success
|
||||||
|
) {
|
||||||
|
_updateAlwaysReadReceiptValue(success.isEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getCurrentAlwaysReadReceiptSetting() {
|
||||||
|
final accountId = _manageAccountDashBoardController.accountId.value;
|
||||||
|
if (accountId != null) {
|
||||||
|
consumeState(_getAlwaysReadReceiptSettingInteractor.execute(accountId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/data/datasource/server_settings_data_source.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/data/datasource_impl/remote_server_settings_data_source_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/data/network/server_settings_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/data/repository/server_settings_repository_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
|
|
||||||
|
class AlwaysReadReceiptBindings extends BaseBindings {
|
||||||
|
@override
|
||||||
|
void bindingsController() {
|
||||||
|
Get.put(AlwaysReadReceiptController(
|
||||||
|
Get.find<GetAlwaysReadReceiptSettingInteractor>(),
|
||||||
|
Get.find<UpdateAlwaysReadReceiptSettingInteractor>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSource() {
|
||||||
|
Get.lazyPut<ServerSettingsDataSource>(() => Get.find<RemoteServerSettingsDataSourceImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSourceImpl() {
|
||||||
|
Get.lazyPut(() => RemoteServerSettingsDataSourceImpl(
|
||||||
|
Get.find<ServerSettingsAPI>(),
|
||||||
|
Get.find<RemoteExceptionThrower>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsInteractor() {
|
||||||
|
Get.lazyPut(() => GetAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||||
|
Get.lazyPut(() => UpdateAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepository() {
|
||||||
|
Get.lazyPut<ServerSettingsRepository>(() => Get.find<ServerSettingsRepositoryImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepositoryImpl() {
|
||||||
|
Get.lazyPut(() => ServerSettingsRepositoryImpl(Get.find<ServerSettingsDataSource>()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
|||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||||
|
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||||
@@ -21,6 +22,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacati
|
|||||||
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/get_all_vacation_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/bindings/always_read_receipt_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
||||||
@@ -198,6 +200,9 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
case AccountMenuItem.emailRules:
|
case AccountMenuItem.emailRules:
|
||||||
EmailRulesBindings().dependencies();
|
EmailRulesBindings().dependencies();
|
||||||
break;
|
break;
|
||||||
|
case AccountMenuItem.alwaysReadReceipt:
|
||||||
|
AlwaysReadReceiptBindings().dependencies();
|
||||||
|
break;
|
||||||
case AccountMenuItem.forward:
|
case AccountMenuItem.forward:
|
||||||
ForwardBindings().dependencies();
|
ForwardBindings().dependencies();
|
||||||
break;
|
break;
|
||||||
@@ -239,6 +244,14 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get isServerSettingsCapabilitySupported {
|
||||||
|
if (accountId.value != null && sessionCurrent != null) {
|
||||||
|
return [capabilityServerSettings].isSupported(sessionCurrent!, accountId.value!);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool get isRuleFilterCapabilitySupported {
|
bool get isRuleFilterCapabilitySupported {
|
||||||
if (accountId.value != null && sessionCurrent != null) {
|
if (accountId.value != null && sessionCurrent != null) {
|
||||||
return [capabilityRuleFilter].isSupported(sessionCurrent!, accountId.value!);
|
return [capabilityRuleFilter].isSupported(sessionCurrent!, accountId.value!);
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class ManageAccountMenuController extends GetxController {
|
|||||||
AccountMenuItem.profiles,
|
AccountMenuItem.profiles,
|
||||||
if (dashBoardController.isRuleFilterCapabilitySupported)
|
if (dashBoardController.isRuleFilterCapabilitySupported)
|
||||||
AccountMenuItem.emailRules,
|
AccountMenuItem.emailRules,
|
||||||
|
if (dashBoardController.isServerSettingsCapabilitySupported)
|
||||||
|
AccountMenuItem.alwaysReadReceipt,
|
||||||
if (dashBoardController.isForwardCapabilitySupported)
|
if (dashBoardController.isForwardCapabilitySupported)
|
||||||
AccountMenuItem.forward,
|
AccountMenuItem.forward,
|
||||||
if (dashBoardController.isVacationCapabilitySupported)
|
if (dashBoardController.isVacationCapabilitySupported)
|
||||||
|
|||||||
Reference in New Issue
Block a user