IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

51 wiersze
1.5KB

  1. import makeArvadosRequest from 'make-arvados-request';
  2. class WBArvadosCollection {
  3. constructor(arvHost, arvToken, uuid) {
  4. this.arvHost = arvHost;
  5. this.arvToken = arvToken;
  6. this.uuid = uuid;
  7. this.meta = null;
  8. }
  9. fetchMeta() {
  10. let prom = makeArvadosRequest(this.arvHost, this.arvToken,
  11. '/arvados/v1/collections/' + this.uuid);
  12. prom = prom.then(xhr => {
  13. this.meta = xhr.response;
  14. });
  15. return prom;
  16. }
  17. parseManifest() {
  18. if (this.meta === null)
  19. throw Error('You must call fetchMeta() first and wait for the returned Promise.');
  20. let manifest = this.meta.manifest_text;
  21. let streams = manifest.split('\n');
  22. this.content = streams.map(s => {
  23. let tokens = s.split(' ');
  24. let streamName = tokens[0];
  25. let rx = /^[a-f0-9]{32}\+[0-9]+/;
  26. let n = tokens.map(t => rx.exec(t));
  27. n = n.indexOf(null);
  28. let locators = tokens.slice(1, n)
  29. let fileTokens = tokens.slice(n);
  30. let fileNames = fileTokens.map(t => t.split(':')[2]);
  31. let fileSizes = {};
  32. fileTokens.map(t => {
  33. let [ start, end, name ] = t.split(':');
  34. if (!(name in fileSizes))
  35. fileSizes[name] = 0;
  36. fileSizes[name] += Number(end) - Number(start);
  37. });
  38. fileSizes = fileNames.map(n => fileSizes[n]);
  39. return [ streamName, fileNames, fileSizes ];
  40. });
  41. return this.content;
  42. }
  43. }
  44. export WBArvadosCollection;