-
Notifications
You must be signed in to change notification settings - Fork 0
/
UseCommand.cs
62 lines (54 loc) · 2.54 KB
/
UseCommand.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System.IO;
using System.IO.Compression;
using System.Net.Http;
using System.Threading.Tasks;
namespace nvma
{
/// <summary>
/// Changes nodejs version to selected
/// </summary>
class UseCommand : CustomCommand
{
public async override Task Execute(string[] args)
{
System.Console.WriteLine("Changing your version to " + args[1]);
try
{
if (!Directory.Exists($"node-{args[1]}-win-x64"))
{
await DownloadAndSaveNodeVersion(args);
}
this.RemoveAllFromPath();
var path = Path.Combine(this.ExecutableLocationDirectory, $"node-{args[1]}-win-x64");
this.AddToPath(path);
System.Console.WriteLine($"Your version is successfully changed to {args[1]}. Dont forget to restart your terminal/cmd in order to use this version.");
}
catch (HttpRequestException httpError)
{
System.Console.WriteLine($"It looks like there was some problem with changing your version to {args[1]}.\n" +
$"Make sure that you are connected to the internet and are typing correct version. \n Error: {httpError}");
}
catch (System.Exception error)
{
System.Console.WriteLine($"It looks like there was some problem with changing your version to {args[1]}.\n Error: {error}");
}
}
private async Task DownloadAndSaveNodeVersion(string[] args)
{
var client = new HttpClient();
var response = await client.GetAsync($"https://nodejs.org/dist/{args[1].TrimEnd('/')}/node-{args[1]}-win-x64.zip");
var bytes = await response.Content.ReadAsByteArrayAsync();
var newDirectoryLocation = Path.Combine(this.ExecutableLocationDirectory, $"node-{args[1]}-win-x64");
Directory.CreateDirectory(newDirectoryLocation);
var nodejsZipLocation = Path.Combine(newDirectoryLocation, $"{args[1]}.zip");
await File.WriteAllBytesAsync(nodejsZipLocation, bytes);
ZipFile.ExtractToDirectory(Path.Combine(newDirectoryLocation, $"{args[1]}.zip"), this.ExecutableLocationDirectory, true);
}
public override string ToString()
{
return "Changes the version of your node instance. \n" +
"\tUsage: nvma.exe use v14.9.0 \n" +
"\tIf above if executed it will download nodejs version 14.9.0 and set it to your default";
}
}
}