|
|
@@ -6,7 +6,6 @@ function wbDownloadFile(arvHost, arvToken, |
|
|
|
const file = manifestReader.getFile(path);
|
|
|
|
const name = path.split('/').reverse()[0];
|
|
|
|
const blockRefs = file[0];
|
|
|
|
let proxy;
|
|
|
|
|
|
|
|
let prom = makeArvadosRequest(arvHost, arvToken,
|
|
|
|
'/arvados/v1/keep_services');
|
|
|
@@ -14,26 +13,34 @@ function wbDownloadFile(arvHost, arvToken, |
|
|
|
const services = xhr.response['items'];
|
|
|
|
const proxies = services.filter(svc => (svc.service_type === 'proxy'));
|
|
|
|
const n = Math.floor(Math.random() * proxies.length);
|
|
|
|
proxy = proxies[n];
|
|
|
|
});
|
|
|
|
const proxy = proxies[n];
|
|
|
|
const blocks = [];
|
|
|
|
|
|
|
|
let prom_2 = new Promise(accept => accept());
|
|
|
|
|
|
|
|
for (let i = 0; i < blockRefs.length; i++) {
|
|
|
|
const [ locator, position, size ] = blockRefs[i];
|
|
|
|
|
|
|
|
const prom_1 = makeArvadosRequest(
|
|
|
|
proxy.service_host + ':' + proxy.service_port,
|
|
|
|
arvToken,
|
|
|
|
'/' + locator,
|
|
|
|
{ 'useSsl': proxy.service_ssl_flag,
|
|
|
|
'responseType': 'arraybuffer' }
|
|
|
|
);
|
|
|
|
|
|
|
|
const blocks = [];
|
|
|
|
for (let i = 0; i < blockRefs.length; i++) {
|
|
|
|
const [ locator, position, size ] = blockRefs[i];
|
|
|
|
prom_2 = prom_2.then(() => prom_1);
|
|
|
|
|
|
|
|
prom = prom.then(() => makeArvadosRequest(
|
|
|
|
proxy.service_host + ':' + proxy.service_port,
|
|
|
|
arvToken,
|
|
|
|
'/' + locator,
|
|
|
|
{ 'useSsl': proxy.service_ssl_flag,
|
|
|
|
'responseType': 'arraybuffer' }
|
|
|
|
));
|
|
|
|
prom_2 = prom_2.then(xhr => (blocks.push(xhr.response.slice(position,
|
|
|
|
position + size))));
|
|
|
|
}
|
|
|
|
|
|
|
|
prom_2 = prom_2.then(() => blocks);
|
|
|
|
|
|
|
|
return prom_2;
|
|
|
|
});
|
|
|
|
|
|
|
|
prom = prom.then(xhr => (blocks.push(xhr.response.slice(position,
|
|
|
|
position + size))));
|
|
|
|
}
|
|
|
|
|
|
|
|
prom = prom.then(() => blocks);
|
|
|
|
|
|
|
|
/* prom = prom.then(() => {
|
|
|
|
const blob = new Blob(blocks);
|
|
|
|