add full sync button

This commit is contained in:
shenlong-tanwen 2025-05-22 12:59:59 +05:30
parent 7e5f88e678
commit a41a156ce4
4 changed files with 15 additions and 7 deletions

View File

@ -137,6 +137,6 @@ open class NativeSyncApiImplBase(context: Context) {
return albums.map { album ->
val count = albumsCount[album.id] ?: 0
album.copy(assetCount = count.toLong())
}
}.sortedBy { it.id }
}
}

View File

@ -37,12 +37,12 @@ class DeviceSyncService {
bool get _ignoreIcloudAssets =>
_storeService.get(StoreKey.ignoreIcloudAssets, false) == true;
Future<void> sync() async {
Future<void> sync({bool full = false}) async {
final Stopwatch stopwatch = Stopwatch()..start();
try {
if (await _nativeSyncApi.shouldFullSync()) {
_log.fine("Cannot use partial sync. Performing full sync");
DLog.log("Cannot use partial sync. Performing full sync");
if (full || await _nativeSyncApi.shouldFullSync()) {
_log.fine("Full sync request from ${full ? "user" : "native"}");
DLog.log("Full sync request from ${full ? "user" : "native"}");
return await fullSync();
}

View File

@ -23,13 +23,14 @@ class BackgroundSyncManager {
}
// No need to cancel the task, as it can also be run when the user logs out
Future<void> syncLocal() {
Future<void> syncLocal({bool full = false}) {
if (_deviceAlbumSyncTask != null) {
return _deviceAlbumSyncTask!.future;
}
_deviceAlbumSyncTask = runInIsolateGentle(
computation: (ref) => ref.read(deviceSyncServiceProvider).sync(),
computation: (ref) =>
ref.read(deviceSyncServiceProvider).sync(full: full),
);
return _deviceAlbumSyncTask!.whenComplete(() {

View File

@ -21,6 +21,11 @@ final _features = [
icon: Icons.photo_album_rounded,
onTap: (_, ref) => ref.read(backgroundSyncProvider).syncLocal(),
),
_Feature(
name: 'Sync Local Full',
icon: Icons.photo_library_rounded,
onTap: (_, ref) => ref.read(backgroundSyncProvider).syncLocal(full: true),
),
_Feature(
name: 'Sync Remote',
icon: Icons.refresh_rounded,
@ -69,6 +74,7 @@ class FeatInDevPage extends StatelessWidget {
body: Column(
children: [
Flexible(
flex: 1,
child: ListView.builder(
itemBuilder: (_, index) {
final feat = _features[index];
@ -76,6 +82,7 @@ class FeatInDevPage extends StatelessWidget {
builder: (ctx, ref, _) => ListTile(
title: Text(feat.name),
trailing: Icon(feat.icon),
visualDensity: VisualDensity.compact,
onTap: () => unawaited(feat.onTap(ctx, ref)),
),
);