Skip to content

Commit 274915a

Browse files
committed
Added more detailed download progress and fix some typos and minor bugs
Signed-off-by: paulober <[email protected]>
1 parent fb3793c commit 274915a

File tree

4 files changed

+778
-178
lines changed

4 files changed

+778
-178
lines changed

src/commands/switchSDK.mts

Lines changed: 267 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import VersionBundlesLoader, {
3333
import { sep } from "path";
3434
import { join as posixJoin } from "path/posix";
3535
import { NINJA_AUTO_INSTALL_DISABLED } from "../webview/newProjectPanel.mjs";
36+
import Logger from "../logger.mjs";
37+
import type { Progress as GotProgress } from "got";
3638

3739
export interface AdvancedSwitchSDKOptions {
3840
toolchainVersion: { label: string; toolchain: SupportedToolchainVersion };
@@ -47,6 +49,7 @@ interface SwitchSDKOptions {
4749

4850
export default class SwitchSDKCommand extends Command {
4951
private _versionBundlesLoader: VersionBundlesLoader;
52+
private _logger: Logger = new Logger("SwitchSDKCommand");
5053

5154
public static readonly id = "switchSDK";
5255

@@ -383,107 +386,305 @@ export default class SwitchSDKCommand extends Command {
383386
//options.advancedOptions is defined
384387
options.advancedOptions!.toolchainVersion;
385388

386-
// show progress bar while installing
387-
const result = await window.withProgress(
389+
// show individual progress bars while installing
390+
let result = await window.withProgress(
388391
{
389-
title:
390-
`Installing SDK ${selectedSDK.label}, ` +
391-
`toolchain ${selectedToolchain.label} ` +
392-
"and tools...",
393392
location: ProgressLocation.Notification,
393+
title: "Installing SDK...",
394+
cancellable: false,
394395
},
395396
async progress => {
396397
// download and install selected SDK
397-
if (
398-
(await downloadAndInstallSDK(selectedSDK.sdk, SDK_REPOSITORY_URL)) &&
399-
(await downloadAndInstallTools(selectedSDK.sdk))
400-
) {
398+
// TODO: maybe parse python3 path
399+
const result = await downloadAndInstallSDK(
400+
selectedSDK.sdk,
401+
SDK_REPOSITORY_URL
402+
);
403+
404+
if (result) {
405+
this._logger.debug("Successfully installed SDK.");
406+
401407
progress.report({
402-
increment: 40,
408+
increment: 100,
409+
// TODO: maybe only finished or sth like that
410+
message: `Successfully installed SDK ${selectedSDK.label}.`,
403411
});
404412

405-
if (await downloadAndInstallToolchain(selectedToolchain.toolchain)) {
413+
return true;
414+
}
415+
416+
this._logger.error("Failed to install SDK.");
417+
418+
progress.report({
419+
increment: 100,
420+
});
421+
422+
void window.showErrorMessage(
423+
`Failed to install SDK ${selectedSDK.label}. ` +
424+
"Make sure all requirements are met."
425+
);
426+
427+
return false;
428+
}
429+
);
430+
431+
if (!result) {
432+
return;
433+
}
434+
435+
let progressState = 0;
436+
result = await window.withProgress(
437+
{
438+
location: ProgressLocation.Notification,
439+
title: "Installing toolchain...",
440+
cancellable: false,
441+
},
442+
async progress => {
443+
// download and install selected toolchain
444+
const result = await downloadAndInstallToolchain(
445+
selectedToolchain.toolchain,
446+
(prog: GotProgress) => {
447+
const percent = prog.percent * 100;
448+
progress.report({
449+
increment: percent - progressState,
450+
});
451+
progressState = percent;
452+
}
453+
);
454+
455+
if (result) {
456+
this._logger.debug("Successfully installed toolchain.");
457+
458+
progress.report({
459+
increment: 100,
460+
message:
461+
"Successfully installed " +
462+
`toolchain ${selectedToolchain.label}.`,
463+
});
464+
465+
return true;
466+
}
467+
468+
this._logger.error("Failed to install toolchain.");
469+
470+
progress.report({
471+
increment: 100,
472+
});
473+
474+
void window.showErrorMessage(
475+
`Failed to install toolchain ${selectedToolchain.label}.`
476+
);
477+
478+
return false;
479+
}
480+
);
481+
482+
if (!result) {
483+
return;
484+
}
485+
486+
progressState = 0;
487+
result = await window.withProgress(
488+
{
489+
location: ProgressLocation.Notification,
490+
title: "Installing tools...",
491+
cancellable: false,
492+
},
493+
async progress => {
494+
// download and install tools
495+
const result = await downloadAndInstallTools(
496+
selectedSDK.sdk,
497+
(prog: GotProgress) => {
498+
const percent = prog.percent * 100;
406499
progress.report({
407-
increment: 20,
500+
increment: percent - progressState,
408501
});
502+
progressState = percent;
503+
}
504+
);
505+
506+
if (result) {
507+
this._logger.debug("Successfully installed tools.");
508+
509+
progress.report({
510+
increment: 100,
511+
message: "Successfully installed tools.",
512+
});
513+
514+
return true;
515+
}
516+
517+
this._logger.error("Failed to install tools.");
518+
519+
progress.report({
520+
increment: 100,
521+
});
522+
523+
void window.showErrorMessage("Failed to install tools.");
524+
525+
return false;
526+
}
527+
);
528+
529+
if (!result) {
530+
return;
531+
}
409532

410-
if (
411-
options.advancedOptions?.ninjaVersion !== undefined &&
412-
(await downloadAndInstallNinja(
413-
options.advancedOptions.ninjaVersion
414-
))
415-
) {
533+
if (options.advancedOptions?.ninjaVersion !== undefined) {
534+
progressState = 0;
535+
result = await window.withProgress(
536+
{
537+
location: ProgressLocation.Notification,
538+
title: "Downloading and installing Ninja...",
539+
cancellable: false,
540+
},
541+
async progress => {
542+
const result = await downloadAndInstallNinja(
543+
options.advancedOptions!.ninjaVersion!,
544+
(prog: GotProgress) => {
545+
const percent = prog.percent * 100;
416546
progress.report({
417-
increment: 10,
547+
increment: percent - progressState,
418548
});
549+
progressState = percent;
419550
}
551+
);
552+
553+
if (result) {
554+
progress.report({
555+
increment: 100,
556+
message: "Successfully installed Ninja.",
557+
});
558+
559+
return true;
560+
}
561+
562+
progress.report({
563+
increment: 100,
564+
});
420565

421-
// install if cmakeVersion is not a path and not a command
422-
if (
423-
options.advancedOptions?.cmakeVersion !== undefined &&
566+
void window.showWarningMessage("Failed to install Ninja.");
567+
568+
return false;
569+
}
570+
);
571+
572+
if (!result) {
573+
return;
574+
}
575+
} else {
576+
// TODO: maybe show error
577+
/*
578+
this._logger.error("Advanced options are undefined.");
579+
580+
void window.showErrorMessage("Failed to get Ninja version.");
581+
582+
return;
583+
*/
584+
}
585+
586+
// TODO: check if not version bundle check here would be better
587+
/* compare with ninja checks
588+
options.advancedOptions?.cmakeVersion !== undefined &&
424589
!options.advancedOptions.cmakeVersion.includes("/") &&
425590
options.advancedOptions.cmakeVersion !== "cmake" &&
426591
(await downloadAndInstallCmake(
427592
options.advancedOptions.cmakeVersion
428-
))
429-
) {
593+
))*/
594+
if (
595+
options.advancedOptions?.cmakeVersion !== undefined &&
596+
!options.advancedOptions.cmakeVersion.includes("/") &&
597+
options.advancedOptions.cmakeVersion !== "cmake"
598+
) {
599+
progressState = 0;
600+
result = await window.withProgress(
601+
{
602+
location: ProgressLocation.Notification,
603+
title: "Downloading and installing CMake...",
604+
cancellable: false,
605+
},
606+
async progress => {
607+
const result = await downloadAndInstallCmake(
608+
options.advancedOptions!.cmakeVersion,
609+
(prog: GotProgress) => {
610+
const percent = prog.percent * 100;
430611
progress.report({
431-
increment: 10,
612+
increment: percent - progressState,
432613
});
614+
progressState = percent;
433615
}
616+
);
434617

435-
await updateVSCodeStaticConfigs(
436-
workspaceFolder.uri.fsPath,
437-
selectedSDK.sdk,
438-
selectedToolchain.toolchain.version,
439-
options.advancedOptions?.ninjaVersion,
440-
options.advancedOptions?.cmakeVersion
441-
);
618+
if (result) {
619+
this._logger.debug("Successfully installed CMake.");
442620

443621
progress.report({
444-
increment: 10,
622+
increment: 100,
445623
});
446624

447-
const cmakeUpdateResult = await cmakeUpdateSDK(
448-
workspaceFolder.uri,
449-
selectedSDK.sdk,
450-
selectedToolchain.toolchain.version,
451-
selectedPicotool ?? "2.0.0"
452-
);
453-
454-
if (!cmakeUpdateResult) {
455-
void window.showWarningMessage(
456-
"Failed to update CMakeLists.txt for new SDK version."
457-
);
458-
}
459-
460-
progress.report({
461-
// show sdk installed notification
462-
message: `Successfully installed SDK ${selectedSDK.label}.`,
463-
increment: 10,
464-
});
625+
void window.showInformationMessage("Successfully installed CMake.");
465626

466627
return true;
467-
} else {
468-
progress.report({
469-
message:
470-
"Failed to install " + `toolchain ${selectedToolchain.label}.`,
471-
increment: 60,
472-
});
473-
474-
return false;
475628
}
629+
630+
this._logger.error("Failed to install CMake.");
631+
632+
progress.report({
633+
increment: 100,
634+
});
635+
636+
void window.showWarningMessage("Failed to install CMake.");
637+
638+
return false;
476639
}
640+
);
641+
642+
if (!result) {
643+
return;
644+
}
645+
}
646+
647+
result = await window.withProgress(
648+
{
649+
location: ProgressLocation.Notification,
650+
title: "Updating project configuration...",
651+
cancellable: false,
652+
},
653+
async progress => {
654+
await updateVSCodeStaticConfigs(
655+
workspaceFolder.uri.fsPath,
656+
selectedSDK.sdk,
657+
selectedToolchain.toolchain.version,
658+
options.advancedOptions?.ninjaVersion,
659+
options.advancedOptions?.cmakeVersion
660+
);
477661

478662
progress.report({
479-
// show sdk install failed notification
480-
message:
481-
`Failed to install SDK ${selectedSDK.label}.` +
482-
"Make sure all requirements are met.",
483-
increment: 100,
663+
increment: 50,
664+
message: "Project configuration updated.",
484665
});
485666

486-
return false;
667+
const cmakeUpdateResult = await cmakeUpdateSDK(
668+
workspaceFolder.uri,
669+
selectedSDK.sdk,
670+
selectedToolchain.toolchain.version,
671+
selectedPicotool ?? "2.0.0"
672+
);
673+
674+
progress.report({
675+
increment: 50,
676+
message: "CMakeLists.txt updated.",
677+
});
678+
679+
if (!cmakeUpdateResult) {
680+
void window.showWarningMessage(
681+
"Failed to update CMakeLists.txt for new SDK version."
682+
);
683+
684+
return false;
685+
}
686+
687+
return true;
487688
}
488689
);
489690

0 commit comments

Comments
 (0)