2025-01-16 21:20:44 -06:00
|
|
|
import 'package:background_downloader/background_downloader.dart';
|
2025-07-25 10:09:32 -05:00
|
|
|
import 'package:flutter/material.dart';
|
2025-01-16 21:20:44 -06:00
|
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
2025-07-18 23:58:53 -05:00
|
|
|
import 'package:immich_mobile/constants/constants.dart';
|
2025-01-16 21:20:44 -06:00
|
|
|
|
|
|
|
|
final uploadRepositoryProvider = Provider((ref) => UploadRepository());
|
|
|
|
|
|
2025-06-23 11:27:44 -05:00
|
|
|
class UploadRepository {
|
2025-01-16 21:20:44 -06:00
|
|
|
void Function(TaskStatusUpdate)? onUploadStatus;
|
|
|
|
|
void Function(TaskProgressUpdate)? onTaskProgress;
|
|
|
|
|
|
|
|
|
|
UploadRepository() {
|
|
|
|
|
FileDownloader().registerCallbacks(
|
2025-07-18 23:58:53 -05:00
|
|
|
group: kBackupGroup,
|
|
|
|
|
taskStatusCallback: (update) => onUploadStatus?.call(update),
|
|
|
|
|
taskProgressCallback: (update) => onTaskProgress?.call(update),
|
|
|
|
|
);
|
|
|
|
|
FileDownloader().registerCallbacks(
|
|
|
|
|
group: kBackupLivePhotoGroup,
|
2025-01-16 21:20:44 -06:00
|
|
|
taskStatusCallback: (update) => onUploadStatus?.call(update),
|
|
|
|
|
taskProgressCallback: (update) => onTaskProgress?.call(update),
|
|
|
|
|
);
|
2025-07-23 09:20:52 -05:00
|
|
|
FileDownloader().registerCallbacks(
|
|
|
|
|
group: kManualUploadGroup,
|
2025-07-26 11:42:24 -05:00
|
|
|
taskStatusCallback: (update) => onUploadStatus?.call(update),
|
|
|
|
|
taskProgressCallback: (update) => onTaskProgress?.call(update),
|
2025-07-23 09:20:52 -05:00
|
|
|
);
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|
|
|
|
|
|
2025-08-28 19:41:54 +05:30
|
|
|
Future<void> enqueueBackground(UploadTask task) {
|
|
|
|
|
return FileDownloader().enqueue(task);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> enqueueBackgroundAll(List<UploadTask> tasks) {
|
|
|
|
|
return FileDownloader().enqueueAll(tasks);
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|
|
|
|
|
|
2025-07-25 10:09:32 -05:00
|
|
|
Future<void> deleteDatabaseRecords(String group) {
|
2025-07-18 23:58:53 -05:00
|
|
|
return FileDownloader().database.deleteAllRecords(group: group);
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|
|
|
|
|
|
2025-07-18 23:58:53 -05:00
|
|
|
Future<bool> cancelAll(String group) {
|
|
|
|
|
return FileDownloader().cancelAll(group: group);
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|
|
|
|
|
|
2025-07-18 23:58:53 -05:00
|
|
|
Future<int> reset(String group) {
|
|
|
|
|
return FileDownloader().reset(group: group);
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|
2025-07-25 10:09:32 -05:00
|
|
|
|
|
|
|
|
/// Get a list of tasks that are ENQUEUED or RUNNING
|
|
|
|
|
Future<List<Task>> getActiveTasks(String group) {
|
|
|
|
|
return FileDownloader().allTasks(group: group);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> start() {
|
|
|
|
|
return FileDownloader().start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getUploadInfo() async {
|
|
|
|
|
final [enqueuedTasks, runningTasks, canceledTasks, waitingTasks, pausedTasks] = await Future.wait([
|
2025-07-29 00:34:03 +05:30
|
|
|
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),
|
2025-07-25 10:09:32 -05:00
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
debugPrint("""
|
|
|
|
|
Upload Info:
|
|
|
|
|
Enqueued: ${enqueuedTasks.length}
|
|
|
|
|
Running: ${runningTasks.length}
|
|
|
|
|
Canceled: ${canceledTasks.length}
|
|
|
|
|
Waiting: ${waitingTasks.length}
|
|
|
|
|
Paused: ${pausedTasks.length}
|
|
|
|
|
""");
|
|
|
|
|
}
|
2025-01-16 21:20:44 -06:00
|
|
|
}
|