TF-4053 Add interactor/datasource/repository for move folder content action

This commit is contained in:
dab246
2025-10-29 13:19:25 +07:00
committed by Dat H. Pham
parent ccdbd798d9
commit 369316f50d
19 changed files with 695 additions and 188 deletions
@@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_change_respons
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/get_mailbox_by_role_response.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/jmap_mailbox_response.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/move_folder_content_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_right_request.dart';
@@ -166,4 +167,14 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
Future<UnsignedInt> clearMailbox(Session session, AccountId accountId, MailboxId mailboxId) {
throw UnimplementedError();
}
@override
Future<List<EmailId>> moveFolderContent({
required Session session,
required AccountId accountId,
required MoveFolderContentRequest request,
StreamController<dartz.Either<Failure, Success>>? onProgressController,
}) {
throw UnimplementedError();
}
}
@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart' as dartz;
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
@@ -20,6 +21,7 @@ import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_work
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/get_mailbox_by_role_response.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/jmap_mailbox_response.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/move_folder_content_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_right_request.dart';
@@ -161,4 +163,33 @@ class MailboxDataSourceImpl extends MailboxDataSource {
return await mailboxAPI.clearMailbox(session, accountId, mailboxId);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<void> moveFolderContent({
required Session session,
required AccountId accountId,
required MoveFolderContentRequest request,
StreamController<dartz.Either<Failure, Success>>? onProgressController,
}) {
return Future.sync(() async {
if (PlatformInfo.isWeb) {
return await mailboxAPI.moveFolderContent(
session: session,
accountId: accountId,
request: request,
onProgressController: onProgressController,
);
} else {
return await _mailboxIsolateWorker.moveFolderContent(
session: session,
accountId: accountId,
request: request,
onProgressController: onProgressController,
);
}
}).catchError((error, stackTrace) async {
await _exceptionThrower.throwException(error, stackTrace);
throw error;
});
}
}