fix(ui/browser): send del requests in batch
This commit is contained in:
parent
dcf871f1ff
commit
85be9fe67d
1 changed files with 32 additions and 10 deletions
|
@ -11,6 +11,7 @@ import {
|
||||||
MetadataResp,
|
MetadataResp,
|
||||||
UploadInfo,
|
UploadInfo,
|
||||||
Quota,
|
Quota,
|
||||||
|
Response,
|
||||||
} from "../client";
|
} from "../client";
|
||||||
import { FilesClient } from "../client/files";
|
import { FilesClient } from "../client/files";
|
||||||
import { UsersClient } from "../client/users";
|
import { UsersClient } from "../client/users";
|
||||||
|
@ -129,22 +130,43 @@ export class Updater {
|
||||||
items: List<MetadataResp>,
|
items: List<MetadataResp>,
|
||||||
selectedItems: Map<string, boolean>
|
selectedItems: Map<string, boolean>
|
||||||
): Promise<void> => {
|
): Promise<void> => {
|
||||||
const delRequests = items
|
const pathsToDel = items
|
||||||
.filter((item) => {
|
.filter((item) => {
|
||||||
return selectedItems.has(item.name);
|
return selectedItems.has(item.name);
|
||||||
})
|
})
|
||||||
.map(async (selectedItem: MetadataResp): Promise<string> => {
|
.map((selectedItem: MetadataResp): string => {
|
||||||
const itemPath = getItemPath(dirParts.join("/"), selectedItem.name);
|
return getItemPath(dirParts.join("/"), selectedItem.name);
|
||||||
const resp = await this.filesClient.delete(itemPath);
|
// const resp = await this.filesClient.delete(itemPath);
|
||||||
return resp.status === 200 ? "" : selectedItem.name;
|
// return resp.status === 200 ? "" : selectedItem.name;
|
||||||
});
|
});
|
||||||
|
|
||||||
const failedFiles = await Promise.all(delRequests);
|
const batchSize = 5;
|
||||||
failedFiles.forEach((failedFile) => {
|
let batch = List<string>();
|
||||||
if (failedFile !== "") {
|
let fails = List<string>();
|
||||||
alertMsg(`failed to delete ${failedFile}`);
|
|
||||||
|
for (let i = 0; i < pathsToDel.size; i++) {
|
||||||
|
batch = batch.push(pathsToDel.get(i));
|
||||||
|
|
||||||
|
if (batch.size >= batchSize || i == pathsToDel.size - 1) {
|
||||||
|
let promises = batch.map(async (itemPath): Promise<Response<any>> => {
|
||||||
|
return this.filesClient.delete(itemPath);
|
||||||
|
});
|
||||||
|
|
||||||
|
const resps = await Promise.all(promises.toSeq());
|
||||||
|
resps.forEach((resp: Response<any>, i: number) => {
|
||||||
|
if (resp.status !== 200) {
|
||||||
|
fails = fails.push(batch.get(i));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
batch = batch.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fails.size > 0) {
|
||||||
|
alertMsg(`failed to delete ${fails.join(",\n")}`);
|
||||||
|
}
|
||||||
|
|
||||||
return this.setItems(dirParts);
|
return this.setItems(dirParts);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue