示例#1
0
        private async Task <TreeViewModel> GetContainerBranch(string containerId)
        {
            var containerData = await _swiftService.GetContainer(containerId);

            TreeViewModel result = new TreeViewModel
            {
                text        = containerId,
                containerId = containerId
            };

            if (containerData.IsSuccess)
            {
                if (containerData.Objects != null && containerData.ObjectsCount > 0)
                {
                    result.nodes = GetObjectBranch(containerId, "", containerData.Objects.Select(x => x.Object).ToList()).ToList();

                    if (result.nodes != null && result.nodes.Any())
                    {
                        result.hasNodes = true;
                    }
                }
            }

            return(result);
        }
        public static async Task <SwiftBaseResponse> DeleteContainerContents(this ISwiftClient client, string containerId, int limit = 1000)
        {
            var limitHeaderKey  = "limit";
            var markerHeaderKey = "marker";

            var queryParams = new Dictionary <string, string>()
            {
                { limitHeaderKey, limit.ToString() }
            };

            var marker = string.Empty;

            while (true)
            {
                if (!string.IsNullOrEmpty(marker))
                {
                    if (queryParams.ContainsKey(markerHeaderKey))
                    {
                        queryParams[markerHeaderKey] = marker;
                    }
                    else
                    {
                        queryParams.Add(markerHeaderKey, marker);
                    }
                }

                // get objects
                var infoRsp = await client.GetContainer(containerId, null, queryParams).ConfigureAwait(false);

                // no more objects => break
                if (infoRsp.ObjectsCount == 0)
                {
                    return(infoRsp);
                }

                if (infoRsp.IsSuccess && infoRsp.Objects != null)
                {
                    var objectIds = infoRsp.Objects.Select(x => containerId + "/" + x.Object).ToList();

                    var count = infoRsp.Objects.Count;

                    // delete them
                    var deleteRsp = await client.DeleteObjects(objectIds).ConfigureAwait(false);

                    if (!deleteRsp.IsSuccess)
                    {
                        return(deleteRsp);
                    }

                    // last page => break
                    if (count < limit)
                    {
                        return(deleteRsp);
                    }

                    marker = infoRsp.Objects.Select(x => x.Object).LastOrDefault();
                }
                else
                {
                    return(infoRsp);
                }
            }
        }