61 this.materialNames = [];
66 let params =
new URLSearchParams({
73 url +=
'?' + params.toString();
76 let haveMoreMaterials =
true;
77 while (haveMoreMaterials)
81 console.log(
'Fetch materials from url:', url)
83 const response = await fetch(url);
86 throw new Error(`HTTP error! status: ${response.status}`);
89 const jsonData = await response.json();
90 this.materials.push(jsonData)
92 for (
const material of jsonData.results) {
93 this.materialNames.push(material[
'title']);
98 let nextURL = jsonData.next
102 haveMoreMaterials =
true
106 console.log(
'Finished fetching materials')
107 haveMoreMaterials =
false;
112 this.logger.info(`Error: ${error.message}`);
113 haveMoreMaterials =
true;
117 return this.materials;
128 if (this.materials ===
null || this.materials.length === 0) {
132 const jsonData = this.materials[listNumber];
137 let jsonResults =
null;
138 let jsonResult =
null;
139 if (
'results' in jsonData) {
140 jsonResults = jsonData[
'results'];
141 if (jsonResults.length <= materialNumber) {
144 jsonResult = jsonResults[materialNumber];
152 let jsonPackages =
null;
153 if (
'packages' in jsonResult) {
154 jsonPackages = jsonResult[
'packages'];
160 if (jsonPackages.length <= packageId) {
163 const packageIdValue = jsonPackages[packageId];
165 if (!packageIdValue) {
169 const url = `${this.packageUrl}/${packageIdValue}/download`;
170 const response = await fetch(url);
171 const data = await response.arrayBuffer();
172 const title = jsonResult[
'title'];
174 console.log(`- Loader: Downloaded package: ${title} from ${url}`);
175 return [data, title];
227 const downloadList = [];
230 if (foundList.length > 0) {
231 for (
const found of foundList) {
232 const listNumber = found[
'listNumber'];
233 const materialNumber = found[
'materialNumber'];
234 const matName = found[
'title'];
235 this.logger.info(`> Download material: ${matName} List: ${listNumber}. Index: ${materialNumber}`);
236 const [data, title] = await this.
downloadPackage(listNumber, materialNumber, packageId);
237 downloadList.push([data, title]);