diff --git a/lib/services/trash_sync_service.dart b/lib/services/trash_sync_service.dart index 15b99b2db..aef48cd1a 100644 --- a/lib/services/trash_sync_service.dart +++ b/lib/services/trash_sync_service.dart @@ -18,6 +18,7 @@ class TrashSyncService { final _diffFetcher = TrashDiffFetcher(); final _trashDB = TrashDB.instance; static const kLastTrashSyncTime = "last_trash_sync_time"; + static const kTrashBatchSize = 999; SharedPreferences _prefs; TrashSyncService._privateConstructor(); @@ -88,23 +89,41 @@ class TrashSyncService { } Future trashFilesOnServer(List trashRequestItems) async { - final params = {}; final includedFileIDs = {}; - params["items"] = []; + final uniqueItems = []; for (final item in trashRequestItems) { if (!includedFileIDs.contains(item.fileID)) { - params["items"].add(item.toJson()); + uniqueItems.add(item); includedFileIDs.add(item.fileID); } } - return await _dio.post( + int currentBatchSize = 0; + final requestData = {}; + requestData["items"] = []; + for (final item in uniqueItems) { + currentBatchSize++; + requestData["items"].add(item.toJson()); + if (currentBatchSize >= kTrashBatchSize) { + await _trashFiles(requestData); + requestData["items"] = []; + currentBatchSize = 0; + } + } + if (currentBatchSize > 0) { + return await _trashFiles(requestData); + } + } + + Future> _trashFiles( + Map requestData) async { + return _dio.post( Configuration.instance.getHttpEndpoint() + "/files/trash", options: Options( headers: { "X-Auth-Token": Configuration.instance.getToken(), }, ), - data: params, + data: requestData, ); }