TF-1014: [Dev] Show quota at the bottom of mailbox
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.7139 5.14284C8.11024 5.14284 5.99958 7.2535 5.99958 9.85713C5.99958 10.0769 6.01457 10.2928 6.04346 10.5038C6.09606 10.8879 5.88429 11.2595 5.527 11.41C4.2923 11.9301 3.42815 13.1508 3.42815 14.5714C3.42815 16.465 4.96318 18 6.85672 18H16.2853C18.6522 18 20.571 16.0812 20.571 13.7143C20.571 11.3473 18.6522 9.42856 16.2853 9.42856C16.2437 9.42856 16.2023 9.42915 16.161 9.43032C15.7545 9.44185 15.3958 9.1661 15.3024 8.77024C14.812 6.69024 12.9426 5.14284 10.7139 5.14284ZM4.2853 9.85713C4.2853 6.30673 7.16347 3.42856 10.7139 3.42856C13.5213 3.42856 15.9068 5.22744 16.7835 7.73467C19.8641 7.98791 22.2853 10.5683 22.2853 13.7143C22.2853 17.028 19.599 19.7143 16.2853 19.7143H6.85672C4.0164 19.7143 1.71387 17.4117 1.71387 14.5714C1.71387 12.6646 2.75142 11.0018 4.29034 10.1139C4.28699 10.0287 4.2853 9.94308 4.2853 9.85713Z" fill="#007AFF"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1006 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.5002 4.24052C14.9903 3.15792 17.008 3.15792 18.4981 4.24052C18.9345 4.5576 19.2765 4.99695 19.5985 5.483C19.9195 5.96731 20.2859 6.60195 20.7386 7.3862L28.0852 20.1109C28.5381 20.8952 28.9045 21.5298 29.1635 22.0499C29.4233 22.5719 29.6328 23.0877 29.6892 23.6242C29.8818 25.4559 28.8729 27.2033 27.1903 27.9524C26.6975 28.1719 26.146 28.2483 25.5641 28.2842C24.9842 28.32 24.2513 28.32 23.3458 28.32H8.65253C7.74695 28.32 7.01413 28.32 6.43423 28.2842C5.85227 28.2483 5.3008 28.1719 4.80799 27.9524C3.12539 27.2033 2.11654 25.4559 2.30906 23.6242C2.36545 23.0877 2.57496 22.5719 2.83484 22.0499C3.09381 21.5298 3.46021 20.8952 3.913 20.111L11.2597 7.38619C11.7124 6.60194 12.0788 5.96731 12.3998 5.483C12.7218 4.99695 13.0638 4.5576 13.5002 4.24052ZM17.1546 6.08971C16.4656 5.58915 15.5327 5.58915 14.8437 6.08971C14.7456 6.161 14.5857 6.32207 14.3051 6.74558C14.0279 7.16399 13.6965 7.73695 13.2199 8.56228L5.91168 21.2206C5.43518 22.0459 5.10468 22.6194 4.88095 23.0687C4.6545 23.5235 4.59493 23.7425 4.58226 23.8631C4.49324 24.71 4.9597 25.518 5.73767 25.8643C5.84848 25.9137 6.0679 25.9716 6.57498 26.0029C7.07597 26.0338 7.73786 26.0343 8.69088 26.0343H23.3074C24.2604 26.0343 24.9223 26.0338 25.4233 26.0029C25.9304 25.9716 26.1498 25.9137 26.2606 25.8643C27.0386 25.518 27.5051 24.71 27.416 23.8631C27.4034 23.7425 27.3438 23.5235 27.1173 23.0687C26.8936 22.6194 26.5631 22.0459 26.0866 21.2206L18.7783 8.56229C18.3018 7.73695 17.9704 7.16399 17.6932 6.74558C17.4125 6.32207 17.2527 6.161 17.1546 6.08971Z" fill="#007AFF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9992 10.6057C15.368 10.6057 14.8563 11.1174 14.8563 11.7486L14.8563 17.4629C14.8563 18.0941 15.368 18.6057 15.9992 18.6057C16.6303 18.6057 17.142 18.0941 17.142 17.4629V11.7486C17.142 11.1174 16.6303 10.6057 15.9992 10.6057ZM15.9992 20.6629C15.2418 20.6629 14.6277 21.2769 14.6277 22.0343C14.6277 22.7917 15.2418 23.4058 15.9992 23.4058C16.7566 23.4058 17.3706 22.7917 17.3706 22.0343C17.3706 21.2769 16.7566 20.6629 15.9992 20.6629Z" fill="#007AFF"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -163,6 +163,9 @@ extension AppColor on Color {
|
|||||||
static const colorBackgroundContactTagItem = Color(0xFFDCE0E5);
|
static const colorBackgroundContactTagItem = Color(0xFFDCE0E5);
|
||||||
static const colorDeleteContactIcon = Color(0xFFAEB7C2);
|
static const colorDeleteContactIcon = Color(0xFFAEB7C2);
|
||||||
static const colorItemRecipientSelected = Color(0xFFDFEEFF);
|
static const colorItemRecipientSelected = Color(0xFFDFEEFF);
|
||||||
|
static const colorBackgroundQuotasWarning = Color(0xFFFFC107);
|
||||||
|
static const colorTitleQuotasWarning = Color(0xFFF05C44);
|
||||||
|
static const colorProgressQuotasWarning = Color(0xFFFFA000);
|
||||||
|
|
||||||
static const mapGradientColor = [
|
static const mapGradientColor = [
|
||||||
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
||||||
|
|||||||
@@ -172,6 +172,8 @@ class ImagePaths {
|
|||||||
String get icCancelSelection => _getImagePath('ic_cancel_selection.svg');
|
String get icCancelSelection => _getImagePath('ic_cancel_selection.svg');
|
||||||
String get icSelectedRecipient => _getImagePath('ic_selected_recipient.svg');
|
String get icSelectedRecipient => _getImagePath('ic_selected_recipient.svg');
|
||||||
String get icDeleteRecipient => _getImagePath('ic_delete_recipient.svg');
|
String get icDeleteRecipient => _getImagePath('ic_delete_recipient.svg');
|
||||||
|
String get icQuotas => _getImagePath('ic_quotas.svg');
|
||||||
|
String get icQuotasWarning => _getImagePath('ic_quotas_warning.svg');
|
||||||
|
|
||||||
String _getImagePath(String imageName) {
|
String _getImagePath(String imageName) {
|
||||||
return AssetsPaths.images + imageName;
|
return AssetsPaths.images + imageName;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/bottom_bar_mai
|
|||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.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/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_warning_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class EmailView extends GetWidget<SingleEmailController> {
|
class EmailView extends GetWidget<SingleEmailController> {
|
||||||
@@ -88,6 +89,7 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
Widget _buildEmailView(BuildContext context, PresentationEmail email) {
|
Widget _buildEmailView(BuildContext context, PresentationEmail email) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
_buildAppBar(context, email),
|
_buildAppBar(context, email),
|
||||||
|
const QuotasWarningBannerWidget(),
|
||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
const Divider(color: AppColor.colorDividerHorizontal, height: 1),
|
const Divider(color: AppColor.colorDividerHorizontal, height: 1),
|
||||||
Expanded(
|
Expanded(
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/bottom_bar_s
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
@@ -84,7 +85,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
} else {
|
} else {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -228,6 +229,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
Obx(() => controller.folderMailboxTree.value.root.childrenItems?.isNotEmpty ?? false
|
Obx(() => controller.folderMailboxTree.value.root.childrenItems?.isNotEmpty ?? false
|
||||||
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderMailboxTree.value.root)
|
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderMailboxTree.value.root)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
|
const QuotasFooterWidget(),
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_fold
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
@@ -72,6 +73,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
})),
|
})),
|
||||||
]),
|
]),
|
||||||
)),
|
)),
|
||||||
|
const QuotasFooterWidget(),
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/search/domain/usecases/refresh_changes_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/search/domain/usecases/refresh_changes_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/search/presentation/search_email_bindings.dart';
|
import 'package:tmail_ui_user/features/search/presentation/search_email_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
||||||
@@ -100,6 +101,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
ThreadBindings().dependencies();
|
ThreadBindings().dependencies();
|
||||||
EmailBindings().dependencies();
|
EmailBindings().dependencies();
|
||||||
SearchEmailBindings().dependencies();
|
SearchEmailBindings().dependencies();
|
||||||
|
QuotasBindings().dependencies();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/se
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.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/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_warning_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/search/presentation/search_email_view.dart';
|
import 'package:tmail_ui_user/features/search/presentation/search_email_view.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
|
||||||
@@ -111,6 +112,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
||||||
Expanded(child: Column(children: [
|
Expanded(child: Column(children: [
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
|
const QuotasWarningBannerWidget(),
|
||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
_buildListButtonQuickSearchFilter(context),
|
_buildListButtonQuickSearchFilter(context),
|
||||||
_buildMarkAsMailboxReadLoading(context),
|
_buildMarkAsMailboxReadLoading(context),
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_warning_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
@@ -85,6 +86,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
Expanded(child: Container(
|
Expanded(child: Container(
|
||||||
color: AppColor.colorBgDesktop,
|
color: AppColor.colorBgDesktop,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
|
const QuotasWarningBannerWidget(),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
||||||
return VacationNotificationMessageWidget(
|
return VacationNotificationMessageWidget(
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
|
||||||
|
|
||||||
|
abstract class QuotasDataSource {
|
||||||
|
Future<QuotasResponse> getQuotas(AccountId accountId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/datasource/quotas_data_source.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
|
||||||
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
|
class QuotasDataSourceImpl extends QuotasDataSource{
|
||||||
|
final QuotasAPI _quotasAPI;
|
||||||
|
final ExceptionThrower _exceptionThrower;
|
||||||
|
|
||||||
|
QuotasDataSourceImpl(this._quotasAPI, this._exceptionThrower);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<QuotasResponse> getQuotas(AccountId accountId) {
|
||||||
|
return Future.sync(() async {
|
||||||
|
return await _quotasAPI.getQuotas(accountId);
|
||||||
|
}).catchError((error) {
|
||||||
|
_exceptionThrower.throwException(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import 'package:jmap_dart_client/http/http_client.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/get/get_quota_method.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/get/get_quota_response.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/exceptions/quotas_exception.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
|
||||||
|
|
||||||
|
class QuotasAPI {
|
||||||
|
final HttpClient _httpClient;
|
||||||
|
|
||||||
|
QuotasAPI(this._httpClient);
|
||||||
|
|
||||||
|
Future<QuotasResponse> getQuotas(AccountId accountId) async {
|
||||||
|
final requestBuilder =
|
||||||
|
JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||||
|
final getQuotaMethod = GetQuotaMethod(accountId);
|
||||||
|
final getQuotaInvocation = requestBuilder.invocation(getQuotaMethod);
|
||||||
|
final response = await (requestBuilder
|
||||||
|
..usings(getQuotaMethod.requiredCapabilities))
|
||||||
|
.build()
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
final getQuotaResponse = response.parse<GetQuotaResponse>(
|
||||||
|
getQuotaInvocation.methodCallId, GetQuotaResponse.deserialize);
|
||||||
|
|
||||||
|
if(getQuotaResponse != null) {
|
||||||
|
return QuotasResponse(
|
||||||
|
accountId: getQuotaResponse.accountId,
|
||||||
|
notFound: getQuotaResponse.notFound,
|
||||||
|
quotas: getQuotaResponse.list,
|
||||||
|
state: getQuotaResponse.state,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw NotFoundQuotasException();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/datasource/quotas_data_source.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/repository/quotas_repository.dart';
|
||||||
|
|
||||||
|
class QuotasRepositoryImpl extends QuotasRepository {
|
||||||
|
final QuotasDataSource _dataSource;
|
||||||
|
|
||||||
|
QuotasRepositoryImpl(this._dataSource);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<QuotasResponse> getQuotas(AccountId accountId) {
|
||||||
|
return _dataSource.getQuotas(accountId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
class NotFoundQuotasException implements Exception {
|
||||||
|
NotFoundQuotasException();
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/quota.dart';
|
||||||
|
|
||||||
|
class QuotasResponse with EquatableMixin {
|
||||||
|
final AccountId accountId;
|
||||||
|
final State state;
|
||||||
|
final List<Quota> quotas;
|
||||||
|
final List<Id>? notFound;
|
||||||
|
|
||||||
|
QuotasResponse({
|
||||||
|
required this.accountId,
|
||||||
|
required this.state,
|
||||||
|
required this.quotas,
|
||||||
|
this.notFound,
|
||||||
|
});
|
||||||
|
|
||||||
|
bool hasData() {
|
||||||
|
return quotas.isNotEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
quotas,
|
||||||
|
state,
|
||||||
|
notFound,
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
|
||||||
|
|
||||||
|
abstract class QuotasRepository {
|
||||||
|
Future<QuotasResponse> getQuotas(AccountId accountId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/quota.dart';
|
||||||
|
|
||||||
|
class GetQuotasSuccess extends UIState {
|
||||||
|
final List<Quota> quotas;
|
||||||
|
final State? state;
|
||||||
|
|
||||||
|
GetQuotasSuccess(this.quotas, this.state);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
quotas,
|
||||||
|
state,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetQuotasFailure extends FeatureFailure {
|
||||||
|
final dynamic exception;
|
||||||
|
|
||||||
|
GetQuotasFailure(this.exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [exception];
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import 'dart:core';
|
||||||
|
|
||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/repository/quotas_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart';
|
||||||
|
|
||||||
|
class GetQuotasInteractor {
|
||||||
|
final QuotasRepository quotasRepository;
|
||||||
|
|
||||||
|
GetQuotasInteractor(this.quotasRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(AccountId accountId) async* {
|
||||||
|
try {
|
||||||
|
yield Right<Failure, Success>(LoadingState());
|
||||||
|
final response = await quotasRepository.getQuotas(accountId);
|
||||||
|
yield Right(GetQuotasSuccess(response.quotas, response.state));
|
||||||
|
} catch (exception) {
|
||||||
|
yield Left(GetQuotasFailure(exception));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/datasource/quotas_data_source.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/datasource_impl/quotas_data_source_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/repository/quotas_repository_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/repository/quotas_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
|
|
||||||
|
class QuotasBindings extends BaseBindings {
|
||||||
|
@override
|
||||||
|
void bindingsController() {
|
||||||
|
Get.put(QuotasController(Get.find<GetQuotasInteractor>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSource() {
|
||||||
|
Get.lazyPut<QuotasDataSource>(() => Get.find<QuotasDataSourceImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSourceImpl() {
|
||||||
|
Get.lazyPut(() => QuotasDataSourceImpl(Get.find<QuotasAPI>(), Get.find<RemoteExceptionThrower>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsInteractor() {
|
||||||
|
Get.lazyPut(() => GetQuotasInteractor(Get.find<QuotasRepository>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepository() {
|
||||||
|
Get.lazyPut<QuotasRepository>(() => Get.find<QuotasRepositoryImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepositoryImpl() {
|
||||||
|
Get.lazyPut(() => QuotasRepositoryImpl(Get.find<QuotasDataSource>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/data_types.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
||||||
|
|
||||||
|
class QuotasController extends BaseController {
|
||||||
|
final MailboxDashBoardController mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
|
final GetQuotasInteractor _getQuotasInteractor;
|
||||||
|
final usedCapacity = Rx<num>(0);
|
||||||
|
final softLimitCapacity = Rx<num>(0);
|
||||||
|
final warningLimitCapacity = Rx<num>(0);
|
||||||
|
final enableShowQuotas = false.obs;
|
||||||
|
late Worker accountIdWorker;
|
||||||
|
|
||||||
|
double get progressUsedCapacity => softLimitCapacity.value != 0
|
||||||
|
? (usedCapacity.value / softLimitCapacity.value)
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
bool get enableShowWarningQuotas =>
|
||||||
|
enableShowQuotas.value && usedCapacity.value >= warningLimitCapacity.value;
|
||||||
|
|
||||||
|
final ImagePaths imagePaths = Get.find<ImagePaths>();
|
||||||
|
final ResponsiveUtils responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
|
||||||
|
QuotasController(this._getQuotasInteractor);
|
||||||
|
|
||||||
|
void _initWorker() {
|
||||||
|
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
||||||
|
if (accountId is AccountId) {
|
||||||
|
enableShowQuotas.value = mailboxDashBoardController.sessionCurrent != null &&
|
||||||
|
mailboxDashBoardController.sessionCurrent!.capabilities.containsValue(CapabilityIdentifier.jmapQuota);
|
||||||
|
consumeState(_getQuotasInteractor.execute(mailboxDashBoardController.accountId.value!));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onDone() {
|
||||||
|
viewState.value.fold(
|
||||||
|
(failure) {
|
||||||
|
if (failure is GetQuotasFailure) {
|
||||||
|
logError('QuotasController::onDone():[GetQuotasFailure]: ${failure.exception}');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(success) {
|
||||||
|
if (success is GetQuotasSuccess) {
|
||||||
|
_handleGetQuotasSuccess(success);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleGetQuotasSuccess(GetQuotasSuccess success) {
|
||||||
|
try {
|
||||||
|
final quotas = success.quotas.firstWhere((e) => e.resourceType == ResourceType.octets);
|
||||||
|
usedCapacity.value = quotas.used.value;
|
||||||
|
warningLimitCapacity.value = quotas.warnLimit?.value ?? 0;
|
||||||
|
softLimitCapacity.value = quotas.softLimit?.value ?? 0;
|
||||||
|
} catch (e) {
|
||||||
|
logError('QuotasController::_handleGetQuotasSuccess():[NotFoundException]: $e');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
_initWorker();
|
||||||
|
super.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onClose() {
|
||||||
|
accountIdWorker.call();
|
||||||
|
super.onClose();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
class QuotasFooterWidget extends GetWidget<QuotasController> {
|
||||||
|
const QuotasFooterWidget({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Obx(
|
||||||
|
() => controller.enableShowQuotas.value
|
||||||
|
? Container(
|
||||||
|
color: AppColor.colorBgDesktop,
|
||||||
|
padding: const EdgeInsets.all(24),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: IntrinsicWidth(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(controller.imagePaths.icQuotas),
|
||||||
|
const SizedBox(width: 12),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).storageQuotas,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColor.loginTextFieldHintColor),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
LinearProgressIndicator(
|
||||||
|
color: controller.enableShowWarningQuotas ? AppColor.colorProgressQuotasWarning: AppColor.primaryColor,
|
||||||
|
minHeight: 3,
|
||||||
|
backgroundColor: AppColor.colorDivider,
|
||||||
|
value: controller.progressUsedCapacity,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).textQuotasUsed(
|
||||||
|
controller.usedCapacity.value,
|
||||||
|
controller.softLimitCapacity.value,
|
||||||
|
),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColor.loginTextFieldHintColor),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const SizedBox.shrink(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
class QuotasWarningBannerWidget extends GetWidget<QuotasController> {
|
||||||
|
const QuotasWarningBannerWidget({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Obx(
|
||||||
|
() => controller.enableShowWarningQuotas
|
||||||
|
? Container(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
margin: const EdgeInsets.only(left: 12, right: 12, top: 8),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppColor.colorBackgroundQuotasWarning.withOpacity(0.12),
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(controller.imagePaths.icQuotasWarning),
|
||||||
|
const SizedBox(width: 16),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context)
|
||||||
|
.textQuotasWarningTitle(controller.progressUsedCapacity *100),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
color: AppColor.colorTitleQuotasWarning,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context)
|
||||||
|
.textQuotasWarningContent,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColor.loginTextFieldHintColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const SizedBox.shrink(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.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/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_warning_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
||||||
@@ -56,6 +57,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
... [
|
... [
|
||||||
_buildAppBarNormal(context),
|
_buildAppBarNormal(context),
|
||||||
_buildSearchBarView(context),
|
_buildSearchBarView(context),
|
||||||
|
const QuotasWarningBannerWidget(),
|
||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
],
|
],
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
"@@last_modified": "2022-11-08T16:55:51.988372",
|
"@@last_modified": "2022-11-08T16:55:51.988372",
|
||||||
|
=======
|
||||||
|
"@@last_modified": "2022-11-09T17:10:23.172672",
|
||||||
|
>>>>>>> 24967b2c (TF-1014: [Dev] Show quota at the bottom of mailbox)
|
||||||
"initializing_data": "Initializing data...",
|
"initializing_data": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -2418,12 +2422,18 @@
|
|||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
|
<<<<<<< HEAD
|
||||||
"forwardingSettingExplanation": "Allows a new recipient to see the email sent if they were not originally included in the email chain.",
|
"forwardingSettingExplanation": "Allows a new recipient to see the email sent if they were not originally included in the email chain.",
|
||||||
"@forwardingSettingExplanation": {
|
"@forwardingSettingExplanation": {
|
||||||
|
=======
|
||||||
|
"storageQuotas": "Storage",
|
||||||
|
"@storageQuotas": {
|
||||||
|
>>>>>>> 24967b2c (TF-1014: [Dev] Show quota at the bottom of mailbox)
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
|
<<<<<<< HEAD
|
||||||
"addRecipientButton": "Add recipient",
|
"addRecipientButton": "Add recipient",
|
||||||
"@addRecipientButton": {
|
"@addRecipientButton": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -2450,6 +2460,28 @@
|
|||||||
],
|
],
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"count": {}
|
"count": {}
|
||||||
|
=======
|
||||||
|
"textQuotasUsed": "{used} GB of {softLimit} GB Used",
|
||||||
|
"@textQuotasUsed": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [
|
||||||
|
"used",
|
||||||
|
"softLimit"
|
||||||
|
],
|
||||||
|
"placeholders": {
|
||||||
|
"used": {},
|
||||||
|
"softLimit": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"textQuotasWarningTitle": "You are running out of storage ({progress}%).",
|
||||||
|
"@textQuotasWarningTitle": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [
|
||||||
|
"progress"
|
||||||
|
],
|
||||||
|
"placeholders": {
|
||||||
|
"progress": {}
|
||||||
|
>>>>>>> 24967b2c (TF-1014: [Dev] Show quota at the bottom of mailbox)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/manage_account/data/network/forwarding_ap
|
|||||||
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
|
||||||
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart';
|
import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
@@ -86,6 +87,7 @@ class NetworkBindings extends Bindings {
|
|||||||
Get.put(IdentityAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(IdentityAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
Get.put(MdnAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(MdnAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
Get.put(ForwardingAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(ForwardingAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
|
Get.put(QuotasAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _bindingConnection() {
|
void _bindingConnection() {
|
||||||
|
|||||||
@@ -2519,4 +2519,34 @@ class AppLocalizations {
|
|||||||
args: [count]
|
args: [count]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get storageQuotas {
|
||||||
|
return Intl.message(
|
||||||
|
'Storage',
|
||||||
|
name: 'storageQuotas',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String textQuotasUsed(num used, num softLimit) {
|
||||||
|
return Intl.message(
|
||||||
|
'$used GB of $softLimit GB Used',
|
||||||
|
name: 'textQuotasUsed',
|
||||||
|
args: [used, softLimit],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String textQuotasWarningTitle(num progress) {
|
||||||
|
return Intl.message(
|
||||||
|
'You are running out of storage ($progress%).',
|
||||||
|
name: 'textQuotasWarningTitle',
|
||||||
|
args: [progress],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String get textQuotasWarningContent {
|
||||||
|
return Intl.message(
|
||||||
|
"Soon you won't be able to email in Tmail. Please clean your storage or upgrade your storage to get full features in Tmail.",
|
||||||
|
name: 'textQuotasWarningTitle',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+5
-5
@@ -757,7 +757,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: master
|
ref: master
|
||||||
resolved-ref: "45ea109f70be0d868b005aadf11a39e2ac816c38"
|
resolved-ref: ea636193b15a49e9d59dab143e957f529e1bd836
|
||||||
url: "https://github.com/linagora/jmap-dart-client.git"
|
url: "https://github.com/linagora/jmap-dart-client.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
@@ -1184,7 +1184,7 @@ packages:
|
|||||||
name: shelf_web_socket
|
name: shelf_web_socket
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
simple_observable:
|
simple_observable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1252,7 +1252,7 @@ packages:
|
|||||||
name: stream_transform
|
name: stream_transform
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.1.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1273,7 +1273,7 @@ packages:
|
|||||||
name: syncfusion_flutter_core
|
name: syncfusion_flutter_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "20.3.52"
|
version: "20.3.56"
|
||||||
syncfusion_flutter_datepicker:
|
syncfusion_flutter_datepicker:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1364,7 +1364,7 @@ packages:
|
|||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.20"
|
version: "6.0.21"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
Reference in New Issue
Block a user