From bb6aa56b3efb1c735b0d52747f88c5dae4eee3b7 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 18 Jun 2025 13:38:49 -0500 Subject: [PATCH] wip --- .../backup/exp_backup_controller.page.dart | 21 +++++++++++++++++++ .../share_intent_upload.provider.dart | 4 ++-- .../providers/backup/exp_backup.provider.dart | 18 ++++++++++++++++ .../lib/repositories/upload.repository.dart | 11 +++++++++- mobile/lib/services/exp_backup.service.dart | 3 ++- mobile/lib/services/upload.service.dart | 4 ++++ 6 files changed, 57 insertions(+), 4 deletions(-) diff --git a/mobile/lib/pages/backup/exp_backup_controller.page.dart b/mobile/lib/pages/backup/exp_backup_controller.page.dart index ea03a37468..45fb26196a 100644 --- a/mobile/lib/pages/backup/exp_backup_controller.page.dart +++ b/mobile/lib/pages/backup/exp_backup_controller.page.dart @@ -55,6 +55,27 @@ class ExpBackupPage extends HookConsumerWidget { ), ).tr(), ), + OutlinedButton( + onPressed: () => + ref.read(expBackupProvider.notifier).getDataInfo(), + child: const Text( + "Get database info", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ).tr(), + ), + ElevatedButton( + onPressed: () => ref.read(expBackupProvider.notifier).resume(), + child: const Text( + "Resume", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ).tr(), + ), ], ), ); diff --git a/mobile/lib/providers/asset_viewer/share_intent_upload.provider.dart b/mobile/lib/providers/asset_viewer/share_intent_upload.provider.dart index 541a5cc4b2..ec2bd8470a 100644 --- a/mobile/lib/providers/asset_viewer/share_intent_upload.provider.dart +++ b/mobile/lib/providers/asset_viewer/share_intent_upload.provider.dart @@ -102,11 +102,11 @@ class ShareIntentUploadStateNotifier case TaskStatus.complete: if (update.responseStatusCode == 200) { if (kDebugMode) { - debugPrint("[COMPLETE] ${update.task.taskId} - DUPLICATE"); + // debugPrint("[COMPLETE] ${update.task.taskId} - DUPLICATE"); } } else { if (kDebugMode) { - debugPrint("[COMPLETE] ${update.task.taskId}"); + // debugPrint("[COMPLETE] ${update.task.taskId}"); } } break; diff --git a/mobile/lib/providers/backup/exp_backup.provider.dart b/mobile/lib/providers/backup/exp_backup.provider.dart index 01c105daa5..2435d54dff 100644 --- a/mobile/lib/providers/backup/exp_backup.provider.dart +++ b/mobile/lib/providers/backup/exp_backup.provider.dart @@ -5,6 +5,7 @@ import 'dart:convert'; import 'package:background_downloader/background_downloader.dart'; import 'package:collection/collection.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:immich_mobile/constants/constants.dart'; import 'package:immich_mobile/services/exp_backup.service.dart'; import 'package:immich_mobile/services/upload.service.dart'; @@ -222,6 +223,23 @@ class ExpBackupNotifier extends StateNotifier { return _backupService.cancel(); } + Future getDataInfo() async { + final a = await FileDownloader().database.allRecordsWithStatus( + TaskStatus.enqueued, + group: kBackupGroup, + ); + + final b = await FileDownloader().allTasks( + group: kBackupGroup, + ); + + print("ALl tasks: ${b.length}"); + } + + Future resume() async { + await FileDownloader().start(); + } + @override void dispose() { _statusSubscription?.cancel(); diff --git a/mobile/lib/repositories/upload.repository.dart b/mobile/lib/repositories/upload.repository.dart index 6a3bf11fff..f0831ec45e 100644 --- a/mobile/lib/repositories/upload.repository.dart +++ b/mobile/lib/repositories/upload.repository.dart @@ -15,8 +15,11 @@ class UploadRepository implements IUploadRepository { final taskQueue = MemoryTaskQueue(); UploadRepository() { - taskQueue.minInterval = const Duration(milliseconds: 5); + taskQueue.minInterval = const Duration(milliseconds: 25); taskQueue.maxConcurrent = 5; + taskQueue.maxConcurrentByHost = 5; + taskQueue.maxConcurrentByGroup = 5; + FileDownloader().addTaskQueue(taskQueue); FileDownloader().registerCallbacks( group: kBackupGroup, @@ -28,6 +31,12 @@ class UploadRepository implements IUploadRepository { 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 diff --git a/mobile/lib/services/exp_backup.service.dart b/mobile/lib/services/exp_backup.service.dart index 393de746e1..3f5672a176 100644 --- a/mobile/lib/services/exp_backup.service.dart +++ b/mobile/lib/services/exp_backup.service.dart @@ -66,7 +66,7 @@ class ExpBackupService { return; } - const batchSize = 5; + const batchSize = 100; for (int i = 0; i < candidates.length; i += batchSize) { if (shouldCancel) { break; @@ -200,6 +200,7 @@ class ExpBackupService { deviceAssetId: asset.id, fields: fields, group: kBackupLivePhotoGroup, + priority: 0, ); } diff --git a/mobile/lib/services/upload.service.dart b/mobile/lib/services/upload.service.dart index 5476036ba2..32812c6609 100644 --- a/mobile/lib/services/upload.service.dart +++ b/mobile/lib/services/upload.service.dart @@ -86,6 +86,7 @@ class UploadService { String? originalFileName, String? deviceAssetId, String? metadata, + int? priority, }) async { return _buildTask( deviceAssetId ?? hash(file.path).toString(), @@ -94,6 +95,7 @@ class UploadService { originalFileName: originalFileName, metadata: metadata, group: group, + priority: priority, ); } @@ -104,6 +106,7 @@ class UploadService { Map? fields, String? originalFileName, String? metadata, + int? priority, }) async { final serverEndpoint = Store.get(StoreKey.serverEndpoint); final url = Uri.parse('$serverEndpoint/assets').toString(); @@ -139,6 +142,7 @@ class UploadService { fileField: 'assetData', metaData: metadata ?? '', group: group, + priority: priority ?? 5, updates: Updates.statusAndProgress, ); }