TF-4385 Fix spam banner show it once per day
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
import 'package:core/domain/exceptions/app_base_exception.dart';
|
||||
|
||||
class NotFoundLastTimeDismissedSpamReportException extends AppBaseException {
|
||||
NotFoundLastTimeDismissedSpamReportException([super.message]);
|
||||
class SpamDismissCooldownActiveException extends AppBaseException {
|
||||
SpamDismissCooldownActiveException([super.message]);
|
||||
|
||||
@override
|
||||
String get exceptionName => 'NotFoundLastTimeDismissedSpamReportException';
|
||||
String get exceptionName => 'SpamDismissCooldownActiveException';
|
||||
}
|
||||
|
||||
class NotFoundSpamMailboxCachedException extends AppBaseException {
|
||||
@@ -20,3 +20,10 @@ class NotFoundSpamMailboxException extends AppBaseException {
|
||||
@override
|
||||
String get exceptionName => 'NotFoundSpamMailboxException';
|
||||
}
|
||||
|
||||
class NoUnreadSpamEmailsException extends AppBaseException {
|
||||
NoUnreadSpamEmailsException([super.message]);
|
||||
|
||||
@override
|
||||
String get exceptionName => 'NoUnreadSpamEmailsException';
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_repor
|
||||
abstract class SpamReportRepository {
|
||||
Future<void> storeLastTimeDismissedSpamReported(DateTime lastTimeDismissedSpamReported);
|
||||
|
||||
Future<DateTime> getLastTimeDismissedSpamReported();
|
||||
Future<int> getLastTimeDismissedSpamReportedMilliseconds();
|
||||
|
||||
Future<void> deleteLastTimeDismissedSpamReported();
|
||||
|
||||
|
||||
@@ -18,5 +18,3 @@ class GetSpamMailboxCachedFailure extends FeatureFailure {
|
||||
|
||||
GetSpamMailboxCachedFailure(exception) : super(exception: exception);
|
||||
}
|
||||
|
||||
class InvalidSpamReportCondition extends FeatureFailure {}
|
||||
+24
-10
@@ -1,15 +1,15 @@
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/exceptions/spam_report_exception.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_report_repository.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_spam_mailbox_cached_state.dart';
|
||||
|
||||
class GetSpamMailboxCachedInteractor {
|
||||
static const int spamReportBannerDisplayIntervalInHour = 12;
|
||||
static const int spamReportBannerDisplayIntervalInHours = 24;
|
||||
|
||||
final SpamReportRepository _spamReportRepository;
|
||||
|
||||
@@ -19,15 +19,19 @@ class GetSpamMailboxCachedInteractor {
|
||||
try {
|
||||
yield Right<Failure, Success>(GetSpamMailboxCachedLoading());
|
||||
if (await _validateIntervalToShowBanner()) {
|
||||
final spamMailbox = await _spamReportRepository.getSpamMailboxCached(accountId, userName);
|
||||
final spamMailbox = await _spamReportRepository.getSpamMailboxCached(accountId, userName);
|
||||
final countUnreadSpamMailbox = spamMailbox.unreadEmails?.value.value.toInt() ?? 0;
|
||||
if (countUnreadSpamMailbox > 0) {
|
||||
yield Right<Failure, Success>(GetSpamMailboxCachedSuccess(spamMailbox));
|
||||
} else {
|
||||
yield Left<Failure, Success>(InvalidSpamReportCondition());
|
||||
yield Left<Failure, Success>(
|
||||
GetSpamMailboxCachedFailure(NoUnreadSpamEmailsException()),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
yield Left<Failure, Success>(InvalidSpamReportCondition());
|
||||
yield Left<Failure, Success>(
|
||||
GetSpamMailboxCachedFailure(SpamDismissCooldownActiveException()),
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(GetSpamMailboxCachedFailure(e));
|
||||
@@ -35,9 +39,19 @@ class GetSpamMailboxCachedInteractor {
|
||||
}
|
||||
|
||||
Future<bool> _validateIntervalToShowBanner() async {
|
||||
final lastTimeDismissedSpamReported = await _spamReportRepository.getLastTimeDismissedSpamReported();
|
||||
final currentTime = DateTime.now().difference(lastTimeDismissedSpamReported);
|
||||
log('GetSpamMailboxCachedInteractor::_compareSpamReportTime:lastTimeDismissedSpamReported: $lastTimeDismissedSpamReported | currentTime: $currentTime');
|
||||
return currentTime.inHours > spamReportBannerDisplayIntervalInHour;
|
||||
final lastTimeDismissedMs = await _spamReportRepository
|
||||
.getLastTimeDismissedSpamReportedMilliseconds();
|
||||
|
||||
if (lastTimeDismissedMs <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final lastTime = DateTime.fromMillisecondsSinceEpoch(lastTimeDismissedMs);
|
||||
final now = DateTime.now();
|
||||
final elapsed = now.difference(lastTime);
|
||||
final isIntervalElapsed =
|
||||
elapsed.inHours > spamReportBannerDisplayIntervalInHours;
|
||||
|
||||
return isIntervalElapsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user