diff --git a/Storage/Storage/Internal/Object/Controller/AVObjectController.cs b/Storage/Storage/Internal/Object/Controller/AVObjectController.cs index 6dc00e7..da2acad 100644 --- a/Storage/Storage/Internal/Object/Controller/AVObjectController.cs +++ b/Storage/Storage/Internal/Object/Controller/AVObjectController.cs @@ -72,6 +72,27 @@ namespace LeanCloud.Storage.Internal { return list; } + public async Task> SaveAllAsync(IList avObjects, CancellationToken cancellationToken) { + List commandList = new List(); + foreach (AVObject avObj in avObjects) { + AVCommand command = new AVCommand { + Path = avObj.ObjectId == null ? $"classes/{Uri.EscapeDataString(avObj.ClassName)}" : $"classes/{Uri.EscapeDataString(avObj.ClassName)}/{Uri.EscapeDataString(avObj.ObjectId)}", + Method = avObj.ObjectId == null ? HttpMethod.Post : HttpMethod.Put, + Content = AVObject.ToJSONObjectForSaving(avObj.StartSave()) + }; + commandList.Add(command); + } + IList list = new List(); + var result = await AVPlugins.Instance.CommandRunner.ExecuteBatchRequests(commandList, cancellationToken); + foreach (var data in result) { + if (data.TryGetValue("success", out object val)) { + IObjectState obj = AVObjectCoder.Instance.Decode(val as IDictionary, AVDecoder.Instance); + list.Add(obj); + } + } + return list; + } + public async Task DeleteAsync(IObjectState state, AVQuery query, CancellationToken cancellationToken) { var command = new AVCommand { Path = $"classes/{state.ClassName}/{state.ObjectId}",