feat: beta background sync (#21243)

* feat: ios background sync

# Conflicts:
#	mobile/ios/Runner/Info.plist

* feat: Android sync

* add local sync worker and rename stuff

* group upload notifications

* uncomment onresume beta handling

* rename methods

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
This commit is contained in:
shenlong 2025-08-28 19:41:54 +05:30 committed by GitHub
parent e78144ea31
commit 0df88fc22b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 1933 additions and 81 deletions

View file

@ -78,8 +78,8 @@ class UploadService {
_taskProgressController.close();
}
void enqueueTasks(List<UploadTask> tasks) {
_uploadRepository.enqueueBackgroundAll(tasks);
Future<void> enqueueTasks(List<UploadTask> tasks) {
return _uploadRepository.enqueueBackgroundAll(tasks);
}
Future<List<Task>> getActiveTasks(String group) {
@ -113,7 +113,7 @@ class UploadService {
}
if (tasks.isNotEmpty) {
enqueueTasks(tasks);
await enqueueTasks(tasks);
}
}
@ -149,13 +149,37 @@ class UploadService {
if (tasks.isNotEmpty && !shouldAbortQueuingTasks) {
count += tasks.length;
enqueueTasks(tasks);
await enqueueTasks(tasks);
onEnqueueTasks(EnqueueStatus(enqueueCount: count, totalCount: candidates.length));
}
}
}
// Enqueue All does not work from the background on Android yet. This method is a temporary workaround
// that enqueues tasks one by one.
Future<void> startBackupSerial(String userId) async {
await _storageRepository.clearCache();
shouldAbortQueuingTasks = false;
final candidates = await _backupRepository.getCandidates(userId);
if (candidates.isEmpty) {
return;
}
for (final asset in candidates) {
if (shouldAbortQueuingTasks) {
break;
}
final task = await _getUploadTask(asset);
if (task != null) {
await _uploadRepository.enqueueBackground(task);
}
}
}
/// Cancel all ongoing uploads and reset the upload queue
///
/// Return the number of left over tasks in the queue