TF-654 Add DownloadController to manage list task download
This commit is contained in:
@@ -63,6 +63,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_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/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';
|
||||||
@@ -87,6 +88,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void bindingsController() {
|
||||||
|
Get.put(DownloadController());
|
||||||
Get.put(SearchController(
|
Get.put(SearchController(
|
||||||
Get.find<QuickSearchEmailInteractor>(),
|
Get.find<QuickSearchEmailInteractor>(),
|
||||||
Get.find<SaveRecentSearchInteractor>(),
|
Get.find<SaveRecentSearchInteractor>(),
|
||||||
|
|||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:model/download/download_task_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||||
|
|
||||||
|
typedef UpdateDownloadTaskStateCallback = DownloadTaskState Function(DownloadTaskState currentState);
|
||||||
|
|
||||||
|
class DownloadController extends GetxController {
|
||||||
|
|
||||||
|
final listDownloadTaskState = RxList<DownloadTaskState>();
|
||||||
|
|
||||||
|
bool get notEmptyListDownloadTask => listDownloadTaskState.isNotEmpty;
|
||||||
|
|
||||||
|
void addDownloadTask(DownloadTaskState task) {
|
||||||
|
log('DownloadController::addDownloadTask(): ${task.taskId}');
|
||||||
|
listDownloadTaskState.add(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDownloadTaskByTaskId(
|
||||||
|
DownloadTaskId downloadTaskId,
|
||||||
|
UpdateDownloadTaskStateCallback updateDownloadTaskCallback,
|
||||||
|
) {
|
||||||
|
final matchIndex = listDownloadTaskState
|
||||||
|
.indexWhere((task) => task.taskId == downloadTaskId);
|
||||||
|
if (matchIndex >= 0) {
|
||||||
|
listDownloadTaskState[matchIndex] = updateDownloadTaskCallback(listDownloadTaskState[matchIndex]);
|
||||||
|
listDownloadTaskState.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteDownloadTask(DownloadTaskId taskId) {
|
||||||
|
log('DownloadController::deleteDownloadTask(): $taskId');
|
||||||
|
final matchIndex = listDownloadTaskState
|
||||||
|
.indexWhere((task) => task.taskId == taskId);
|
||||||
|
if (matchIndex >= 0) {
|
||||||
|
listDownloadTaskState.removeAt(matchIndex);
|
||||||
|
listDownloadTaskState.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:model/download/download_task_id.dart';
|
||||||
|
import 'package:model/email/attachment.dart';
|
||||||
|
|
||||||
|
class DownloadTaskState with EquatableMixin {
|
||||||
|
final DownloadTaskId taskId;
|
||||||
|
final Attachment attachment;
|
||||||
|
final double progress;
|
||||||
|
final int downloaded;
|
||||||
|
final int total;
|
||||||
|
|
||||||
|
DownloadTaskState({
|
||||||
|
required this.taskId,
|
||||||
|
required this.attachment,
|
||||||
|
this.progress = 0,
|
||||||
|
this.downloaded = 0,
|
||||||
|
this.total = 0
|
||||||
|
});
|
||||||
|
|
||||||
|
DownloadTaskState copyWith({
|
||||||
|
DownloadTaskId? taskId,
|
||||||
|
Attachment? attachment,
|
||||||
|
double? progress,
|
||||||
|
int? downloaded,
|
||||||
|
int? total
|
||||||
|
}) {
|
||||||
|
return DownloadTaskState(
|
||||||
|
taskId: taskId ?? this.taskId,
|
||||||
|
attachment: attachment ?? this.attachment,
|
||||||
|
progress: progress ?? this.progress,
|
||||||
|
downloaded: downloaded ?? this.downloaded,
|
||||||
|
total: total ?? this.total
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
double get percentDownloading => progress / 100;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [taskId, attachment, progress, downloaded, total];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user