From 23445fdcc113cb33f8246791c3f315163469b39b Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 3 Feb 2026 09:28:29 -0600 Subject: [PATCH] fix: upload progress bar flickering (#25829) * fix: upload progress bar flickering * pr feedback and more logs --- .../lib/providers/backup/drift_backup.provider.dart | 13 +++++++++---- mobile/lib/services/background_upload.service.dart | 4 ++++ mobile/pubspec.lock | 8 ++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/mobile/lib/providers/backup/drift_backup.provider.dart b/mobile/lib/providers/backup/drift_backup.provider.dart index 2f067fdf67..624c21f158 100644 --- a/mobile/lib/providers/backup/drift_backup.provider.dart +++ b/mobile/lib/providers/backup/drift_backup.provider.dart @@ -259,6 +259,11 @@ class DriftBackupNotifier extends StateNotifier { } Future startForegroundBackup(String userId) async { + // Cancel any existing backup before starting a new one + if (state.cancelToken != null) { + await stopForegroundBackup(); + } + state = state.copyWith(error: BackupError.none); final cancelToken = CancellationToken(); @@ -375,21 +380,21 @@ class DriftBackupNotifier extends StateNotifier { _logger.warning("Skip handleBackupResume (pre-call): notifier disposed"); return; } - _logger.info("Resuming backup tasks..."); + _logger.info("Start background backup sequence"); state = state.copyWith(error: BackupError.none); final tasks = await _backgroundUploadService.getActiveTasks(kBackupGroup); if (!mounted) { _logger.warning("Skip handleBackupResume (post-call): notifier disposed"); return; } - _logger.info("Found ${tasks.length} tasks"); + _logger.info("Found ${tasks.length} pending tasks"); if (tasks.isEmpty) { - _logger.info("Start backup with URLSession"); + _logger.info("No pending tasks, starting new upload"); return _backgroundUploadService.uploadBackupCandidates(userId); } - _logger.info("Tasks to resume: ${tasks.length}"); + _logger.info("Resuming upload ${tasks.length} assets"); return _backgroundUploadService.resume(); } } diff --git a/mobile/lib/services/background_upload.service.dart b/mobile/lib/services/background_upload.service.dart index 4eece142d2..d54a677c24 100644 --- a/mobile/lib/services/background_upload.service.dart +++ b/mobile/lib/services/background_upload.service.dart @@ -164,9 +164,12 @@ class BackgroundUploadService { final candidates = await _backupRepository.getCandidates(userId); if (candidates.isEmpty) { + _logger.info("No new backup candidates found, finishing background upload"); return; } + _logger.info("Found ${candidates.length} backup candidates for background tasks"); + const batchSize = 100; final batch = candidates.take(batchSize).toList(); List tasks = []; @@ -179,6 +182,7 @@ class BackgroundUploadService { } if (tasks.isNotEmpty && !shouldAbortQueuingTasks) { + _logger.info("Enqueuing ${tasks.length} background upload tasks"); await enqueueTasks(tasks); } } diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index d237c02023..c8aa680e07 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1249,10 +1249,10 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" mime: dependency: transitive description: @@ -1942,10 +1942,10 @@ packages: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" thumbhash: dependency: "direct main" description: