import 'package:background_downloader/background_downloader.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/constants.dart'; final uploadRepositoryProvider = Provider((ref) => UploadRepository()); class UploadRepository { void Function(TaskStatusUpdate)? onUploadStatus; void Function(TaskProgressUpdate)? onTaskProgress; UploadRepository() { 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), ); FileDownloader().registerCallbacks( group: kManualUploadGroup, taskStatusCallback: (update) => onUploadStatus?.call(update), taskProgressCallback: (update) => onTaskProgress?.call(update), ); } void enqueueBackgroundAll(List tasks) { FileDownloader().enqueueAll(tasks); } Future deleteDatabaseRecords(String group) { return FileDownloader().database.deleteAllRecords(group: group); } Future cancelAll(String group) { return FileDownloader().cancelAll(group: group); } Future reset(String group) { return FileDownloader().reset(group: group); } /// Get a list of tasks that are ENQUEUED or RUNNING Future> getActiveTasks(String group) { return FileDownloader().allTasks(group: group); } Future start() { return FileDownloader().start(); } Future getUploadInfo() async { final [enqueuedTasks, runningTasks, canceledTasks, waitingTasks, pausedTasks] = await Future.wait([ FileDownloader().database.allRecordsWithStatus( TaskStatus.enqueued, group: kBackupGroup, ), FileDownloader().database.allRecordsWithStatus( TaskStatus.running, group: kBackupGroup, ), FileDownloader().database.allRecordsWithStatus( TaskStatus.canceled, group: kBackupGroup, ), FileDownloader().database.allRecordsWithStatus( TaskStatus.waitingToRetry, group: kBackupGroup, ), FileDownloader().database.allRecordsWithStatus( TaskStatus.paused, group: kBackupGroup, ), ]); debugPrint(""" Upload Info: Enqueued: ${enqueuedTasks.length} Running: ${runningTasks.length} Canceled: ${canceledTasks.length} Waiting: ${waitingTasks.length} Paused: ${pausedTasks.length} """); } }