in src/controller/addonController.ts [74:116]
async downloadAndExtract(urlGuid?: string, urlVersion?: string) {
try {
const input = urlGuid || (await AddonView.getInput());
const json: AddonInfoResponse = await this.getAddonInfo(input);
const versionInfo = await this.getVersionChoice(input, urlVersion);
const addonFileID = versionInfo.fileID;
const version = versionInfo.version;
const guid = json.guid;
const addonID = json.id;
const workspaceFolder =
await this.directoryController.getRootFolderPath();
const compressedFilePath = path.join(
workspaceFolder,
`${guid}_${version}.xpi`
);
this.addonCacheController.addAddonToCache(guid, {
reviewUrl: json.review_url,
version: version,
fileID: addonFileID,
id: addonID,
isDirty: false,
});
const writeStream = await this.downloadAddon(
addonFileID,
compressedFilePath
);
await new Promise((resolve) => writeStream.on("finish", resolve));
await this.extractAddon(
compressedFilePath,
path.join(workspaceFolder, guid, version)
);
this.sidebarController.refresh();
return { workspaceFolder, guid, version };
} catch (error) {
console.error(error);
}
}