blob: 41c8ccaacf26233901c48663f272b35d7ea33b9d (
plain) (
blame)
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
63
|
using System.Text.Json;
using System.Text.Json.Nodes;
using LibMatrix.Helpers;
using LibMatrix.Homeservers;
namespace MatrixUtils.RoomUpgradeCLI.Commands;
public class ExecuteCommand(ILogger<ExecuteCommand> logger, IHost host, RuntimeContext ctx, AuthenticatedHomeserverGeneric hs) : IHostedService {
public async Task StartAsync(CancellationToken cancellationToken) {
if (ctx.Args.Length <= 1) {
await PrintHelp();
return;
}
var filename = ctx.Args[1];
if (filename.StartsWith("--")) {
Console.WriteLine("Filename cannot start with --, please provide a valid filename.");
await PrintHelp();
}
if (Directory.Exists(filename)) {
await ExecuteDirectory(filename);
}
else if (File.Exists(filename)) {
await ExecuteFile(filename);
}
else {
Console.WriteLine($"File or directory {filename} does not exist.");
await PrintHelp();
}
await host.StopAsync(cancellationToken);
}
public async Task ExecuteFile(string filename) {
var rbj = await JsonSerializer.DeserializeAsync<JsonObject>(File.OpenRead(filename));
var rb = rbj.ContainsKey(nameof(RoomUpgradeBuilder.OldRoomId))
? rbj.Deserialize<RoomUpgradeBuilder>()
: rbj.Deserialize<RoomBuilder>();
Console.WriteLine($"Executing room builder file of type {rb.GetType().Name}...");
await rb!.Create(hs);
}
public async Task ExecuteDirectory(string dirName) {
if (!Directory.Exists(dirName)) {
Console.WriteLine($"Directory {dirName} does not exist.");
return;
}
var files = Directory.GetFiles(dirName, "*.json");
foreach (var file in files) {
Console.WriteLine($"Executing file: {file}");
await ExecuteFile(file);
}
}
public async Task StopAsync(CancellationToken cancellationToken) { }
private async Task PrintHelp() {
Console.WriteLine("Usage: execute [filename]");
Console.WriteLine("Options:");
Console.WriteLine(" --help Show this help message");
await host.StopAsync();
}
}
|