TF-3219 display limits of email recovery in a yellow banner and filter out invalid suggestions
This commit is contained in:
committed by
Dat H. Pham
parent
2fcb5f03d0
commit
68e9fc2f16
@@ -28,7 +28,7 @@ enum EmailRecoveryField {
|
||||
String getHintText(BuildContext context) {
|
||||
switch (this) {
|
||||
case EmailRecoveryField.deletionDate:
|
||||
return AppLocalizations.of(context).last1Year;
|
||||
return AppLocalizations.of(context).last7Days;
|
||||
case EmailRecoveryField.receptionDate:
|
||||
return AppLocalizations.of(context).allTime;
|
||||
case EmailRecoveryField.subject:
|
||||
@@ -40,16 +40,20 @@ enum EmailRecoveryField {
|
||||
}
|
||||
}
|
||||
|
||||
List<EmailRecoveryTimeType> getSupportedTimeTypes() {
|
||||
List<EmailRecoveryTimeType> getSupportedTimeTypes(DateTime restorationHorizon) {
|
||||
switch (this) {
|
||||
case EmailRecoveryField.deletionDate:
|
||||
return [
|
||||
EmailRecoveryTimeType.last1Year,
|
||||
final supportedTypes = [
|
||||
EmailRecoveryTimeType.last7Days,
|
||||
EmailRecoveryTimeType.last15Days,
|
||||
EmailRecoveryTimeType.last30Days,
|
||||
EmailRecoveryTimeType.last6Months,
|
||||
EmailRecoveryTimeType.customRange,
|
||||
];
|
||||
EmailRecoveryTimeType.last1Year,
|
||||
].where((type) => restorationHorizon
|
||||
.subtract(const Duration(seconds: 2)) // to allow "15 days" if restorationHorizon is exactly 15
|
||||
.isBefore(type.toOldestUTCDate()!.value)).toList();
|
||||
|
||||
return [...supportedTypes, EmailRecoveryTimeType.customRange];
|
||||
case EmailRecoveryField.receptionDate:
|
||||
return [
|
||||
EmailRecoveryTimeType.allTime,
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/core/utc_date.dart';
|
||||
enum EmailRecoveryTimeType {
|
||||
allTime,
|
||||
last7Days,
|
||||
last15Days,
|
||||
last30Days,
|
||||
last6Months,
|
||||
last1Year,
|
||||
@@ -18,6 +19,8 @@ enum EmailRecoveryTimeType {
|
||||
return AppLocalizations.of(context).allTime;
|
||||
case EmailRecoveryTimeType.last7Days:
|
||||
return AppLocalizations.of(context).last7Days;
|
||||
case EmailRecoveryTimeType.last15Days:
|
||||
return AppLocalizations.of(context).last15Days;
|
||||
case EmailRecoveryTimeType.last30Days:
|
||||
return AppLocalizations.of(context).last30Days;
|
||||
case EmailRecoveryTimeType.last6Months:
|
||||
@@ -47,6 +50,10 @@ enum EmailRecoveryTimeType {
|
||||
final today = DateTime.now();
|
||||
final last7Days = today.subtract(const Duration(days: 7));
|
||||
return last7Days.toUTCDate();
|
||||
case EmailRecoveryTimeType.last15Days:
|
||||
final today = DateTime.now();
|
||||
final last15Days = today.subtract(const Duration(days: 15));
|
||||
return last15Days.toUTCDate();
|
||||
case EmailRecoveryTimeType.last30Days:
|
||||
final today = DateTime.now();
|
||||
final last30Days = today.subtract(const Duration(days: 30));
|
||||
@@ -68,6 +75,7 @@ enum EmailRecoveryTimeType {
|
||||
UTCDate? toLatestUTCDate() {
|
||||
switch(this) {
|
||||
case EmailRecoveryTimeType.last7Days:
|
||||
case EmailRecoveryTimeType.last15Days:
|
||||
case EmailRecoveryTimeType.last30Days:
|
||||
case EmailRecoveryTimeType.last6Months:
|
||||
case EmailRecoveryTimeType.last1Year:
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
|
||||
import 'package:duration/duration.dart';
|
||||
import 'package:email_recovery/email_recovery/capability_deleted_messages_vault.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:model/extensions/session_extension.dart';
|
||||
|
||||
extension SessionExtension on Session {
|
||||
|
||||
String getRestorationHorizonAsString() {
|
||||
String restorationHorizon = 'restorationHorizon';
|
||||
String defaultHorizon = "15 days";
|
||||
|
||||
return (getCapabilityProperties(accountId, capabilityDeletedMessagesVault)
|
||||
?.props[0] as Map<String, dynamic>?)
|
||||
?[restorationHorizon]
|
||||
?? defaultHorizon;
|
||||
}
|
||||
|
||||
Duration getRestorationHorizonAsDuration() {
|
||||
try {
|
||||
String horizonWithCorrectFormat = getRestorationHorizonAsString()
|
||||
.replaceAll(" days", "d")
|
||||
.replaceAll(" day", "d")
|
||||
.replaceAll(" hours", "h")
|
||||
.replaceAll(" hour", "h")
|
||||
.replaceAll(" minutes", "m")
|
||||
.replaceAll(" minute", "m")
|
||||
.replaceAll(" seconds", "s")
|
||||
.replaceAll(" second", "s")
|
||||
.replaceAll(" milliseconds", "ms")
|
||||
.replaceAll(" millisecond", "ms");
|
||||
|
||||
return parseDuration(horizonWithCorrectFormat, separator: ' ');
|
||||
} catch (e) {
|
||||
return const Duration(days: 15);
|
||||
}
|
||||
}
|
||||
|
||||
DateTime getRestorationHorizonAsDateTime() {
|
||||
return DateTime.now().subtract(getRestorationHorizonAsDuration());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user