import 'package:background_downloader/background_downloader.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/constants.dart'; import 'package:immich_mobile/interfaces/upload.interface.dart'; final uploadRepositoryProvider = Provider((ref) => UploadRepository()); class UploadRepository implements IUploadRepository { @override void Function(TaskStatusUpdate)? onUploadStatus; @override void Function(TaskProgressUpdate)? onTaskProgress; final taskQueue = MemoryTaskQueue(); UploadRepository() { taskQueue.minInterval = const Duration(milliseconds: 25); taskQueue.maxConcurrent = 5; taskQueue.maxConcurrentByHost = 5; taskQueue.maxConcurrentByGroup = 5; FileDownloader().addTaskQueue(taskQueue); FileDownloader().registerCallbacks( group: kBackupGroup, taskStatusCallback: (update) => onUploadStatus?.call(update), taskProgressCallback: (update) => onTaskProgress?.call(update), ); FileDownloader().registerCallbacks( group: kBackupLivePhotoGroup, taskStatusCallback: (update) => onUploadStatus?.call(update), taskProgressCallback: (update) => onTaskProgress?.call(update), ); taskQueue.enqueueErrors.listen((error) { // Handle errors from the task queue // You can log them or take appropriate actions print('Task Queue Error: $error'); }); } @override void enqueueAll(List tasks) { taskQueue.addAll(tasks); } @override Future deleteAllTrackingRecords(String group) { return FileDownloader().database.deleteAllRecords(group: group); } @override Future cancel(String id) { return FileDownloader().cancelTaskWithId(id); } @override Future cancelAll(String group) { taskQueue.removeTasksWithGroup(group); return FileDownloader().cancelAll(group: group); } @override Future pauseAll(String group) { return FileDownloader().pauseAll(group: group); } @override Future deleteRecordsWithIds(List ids) { return FileDownloader().database.deleteRecordsWithIds(ids); } @override Future> getRecords([TaskStatus? status]) { if (status == null) { return FileDownloader().database.allRecords(group: kBackupGroup); } return FileDownloader().database.allRecordsWithStatus(status); } }