diff --git a/lib/db/files_db.dart b/lib/db/files_db.dart index 0d18c0f66..03004d6fa 100644 --- a/lib/db/files_db.dart +++ b/lib/db/files_db.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:logging/logging.dart'; +import 'package:photos/models/backup_status.dart'; import 'package:photos/models/file_type.dart'; import 'package:photos/models/location.dart'; import 'package:photos/models/file.dart'; @@ -213,19 +214,21 @@ class FilesDB { return ids; } - Future> getUploadedLocalIDs() async { + Future getBackedUpIDs() async { final db = await instance.database; final results = await db.query( table, - columns: [columnLocalID], + columns: [columnLocalID, columnUploadedFileID], where: '$columnLocalID IS NOT NULL AND ($columnUploadedFileID IS NOT NULL AND $columnUploadedFileID IS NOT -1)', ); - final ids = Set(); + final localIDs = Set(); + final uploadedIDs = Set(); for (final result in results) { - ids.add(result[columnLocalID]); + localIDs.add(result[columnLocalID]); + uploadedIDs.add(result[columnUploadedFileID]); } - return ids; + return BackedUpFileIDs(localIDs.toList(), uploadedIDs.toList()); } Future> getAllFiles(int startTime, int endTime, diff --git a/lib/models/backed_up_files.dart b/lib/models/backed_up_files.dart deleted file mode 100644 index 1b6cd698e..000000000 --- a/lib/models/backed_up_files.dart +++ /dev/null @@ -1,6 +0,0 @@ -class BackedUpFiles { - final Set localIDs; - final int space; - - BackedUpFiles(this.localIDs, this.space); -} diff --git a/lib/models/backup_status.dart b/lib/models/backup_status.dart new file mode 100644 index 000000000..af2ec9331 --- /dev/null +++ b/lib/models/backup_status.dart @@ -0,0 +1,13 @@ +class BackupStatus { + final List localIDs; + final int size; + + BackupStatus(this.localIDs, this.size); +} + +class BackedUpFileIDs { + final List localIDs; + final List uploadedIDs; + + BackedUpFileIDs(this.localIDs, this.uploadedIDs); +} diff --git a/lib/services/local_sync_service.dart b/lib/services/local_sync_service.dart index 0af9ed1a8..499acf4e8 100644 --- a/lib/services/local_sync_service.dart +++ b/lib/services/local_sync_service.dart @@ -7,7 +7,6 @@ import 'package:photos/core/event_bus.dart'; import 'package:photos/db/files_db.dart'; import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/events/sync_status_update_event.dart'; -import 'package:photos/models/backed_up_files.dart'; import 'package:photos/models/file.dart'; import 'package:photos/utils/file_sync_util.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -174,16 +173,6 @@ class LocalSyncService { return _prefs.getBool(kHasCompletedFirstImportKey) ?? false; } - Future getBackupStatus() async { - final localIDs = await FilesDB.instance.getUploadedLocalIDs(); - int space = 0; - for (final id in localIDs) { - final asset = await AssetEntity.fromId(id); - space += (await asset.originFile).lengthSync(); - } - return BackedUpFiles(localIDs, space); - } - Future _loadAndStorePhotos( int fromTime, int toTime, diff --git a/lib/services/sync_service.dart b/lib/services/sync_service.dart index 2374e7478..ea3470c6f 100644 --- a/lib/services/sync_service.dart +++ b/lib/services/sync_service.dart @@ -10,10 +10,12 @@ import 'package:photos/core/constants.dart'; import 'package:photos/core/errors.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/core/network.dart'; +import 'package:photos/db/files_db.dart'; import 'package:photos/events/permission_granted_event.dart'; import 'package:photos/events/subscription_purchased_event.dart'; import 'package:photos/events/sync_status_update_event.dart'; import 'package:photos/events/trigger_logout_event.dart'; +import 'package:photos/models/backup_status.dart'; import 'package:photos/services/local_sync_service.dart'; import 'package:photos/services/notification_service.dart'; import 'package:photos/services/remote_sync_service.dart'; @@ -176,6 +178,32 @@ class SyncService { ); } + Future getBackupStatus() async { + final ids = await FilesDB.instance.getBackedUpIDs(); + final size = await _getFileSize(ids.uploadedIDs); + return BackupStatus(ids.localIDs, size); + } + + Future _getFileSize(List fileIDs) async { + try { + final response = await _dio.post( + Configuration.instance.getHttpEndpoint() + "/files/size", + options: Options( + headers: { + "X-Auth-Token": Configuration.instance.getToken(), + }, + ), + data: { + "fileIDs": fileIDs, + }, + ); + return response.data["size"]; + } catch (e) { + _logger.severe(e); + throw e; + } + } + Future _doSync() async { await _localSyncService.sync(); if (_localSyncService.hasCompletedFirstImport()) {