Use TupleKey(ObjectKey-AccountId-UserName) to store data to hive

(cherry picked from commit e0ace535d5f3af71eb13598d92524caf2c6d9bbf)
This commit is contained in:
dab246
2023-04-27 11:03:39 +07:00
committed by Dat Vu
parent 7d0a5729b2
commit 876cc368b0
107 changed files with 562 additions and 340 deletions
@@ -171,7 +171,7 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<jmap.State?> getEmailState(AccountId accountId) {
return _stateDataSource.getState(accountId, StateType.email);
Future<jmap.State?> getEmailState(Session session, AccountId accountId) {
return _stateDataSource.getState(accountId, session.username, StateType.email);
}
}
@@ -85,5 +85,5 @@ abstract class EmailRepository {
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId);
Future<jmap.State?> getEmailState(AccountId accountId);
Future<jmap.State?> getEmailState(Session session, AccountId accountId);
}
@@ -18,8 +18,8 @@ class DeleteEmailPermanentlyInteractor {
yield Right<Failure, Success>(StartDeleteEmailPermanently());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(accountId),
_emailRepository.getEmailState(accountId),
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;
@@ -18,8 +18,8 @@ class DeleteMultipleEmailsPermanentlyInteractor {
yield Right<Failure, Success>(LoadingDeleteMultipleEmailsPermanentlyAll());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(accountId),
_emailRepository.getEmailState(accountId),
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;
@@ -4,10 +4,10 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.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:model/account/account_request.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/account/password.dart';
import 'package:model/account/user_name.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
import 'package:model/oidc/token_oidc.dart';
@@ -1,7 +1,15 @@
import 'package:core/core.dart';
import 'package:model/model.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:model/account/account_request.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/account/password.dart';
import 'package:model/account/personal_account.dart';
import 'package:model/email/attachment.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachments_state.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
@@ -95,13 +103,13 @@ class DownloadAttachmentsInteractor {
await Future.wait([
_authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC),
_accountRepository.deleteCurrentAccount(accountCurrent.id),
_accountRepository.setCurrentAccount(Account(
_accountRepository.setCurrentAccount(PersonalAccount(
newTokenOIDC.tokenIdHash,
AuthenticationType.oidc,
isSelected: true,
accountId: accountId,
apiUrl: accountCurrent.apiUrl
))
apiUrl: accountCurrent.apiUrl,
userName: accountCurrent.userName))
]);
_authorizationInterceptors.setTokenAndAuthorityOidc(
@@ -4,6 +4,7 @@ import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/export_attachment_state.dart';
@@ -2,6 +2,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_stored_state_email_state.dart';
@@ -10,9 +11,9 @@ class GetStoredEmailStateInteractor {
GetStoredEmailStateInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId) async* {
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId) async* {
try {
final state = await _emailRepository.getEmailState(accountId);
final state = await _emailRepository.getEmailState(session, accountId);
if (state != null) {
yield Right<Failure, Success>(GetStoredEmailStateSuccess(state));
} else {
@@ -17,8 +17,8 @@ class MarkAsEmailReadInteractor {
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, Email email, ReadActions readAction) async* {
try {
final listState = await Future.wait([
_mailboxRepository.getMailboxState(accountId),
_emailRepository.getEmailState(accountId),
_mailboxRepository.getMailboxState( session,accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;
@@ -14,7 +14,7 @@ class MarkAsStarEmailInteractor {
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, Email email, MarkStarAction markStarAction) async* {
try {
final currentEmailState = await emailRepository.getEmailState(accountId);
final currentEmailState = await emailRepository.getEmailState(session, accountId);
final result = await emailRepository.markAsStar(session, accountId, [email], markStarAction);
if (result.isNotEmpty) {
final updatedEmail = email.updatedEmail(newKeywords: result.first.keywords);
@@ -18,8 +18,8 @@ class MoveToMailboxInteractor {
yield Right(LoadingMoveToMailbox());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(accountId),
_emailRepository.getEmailState(accountId),
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;