async downloadAndExtract()

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);
    }
  }