blob: 8cd931e87b06aa20f0ac9817c7ab7e1aeacff484 (
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
using System.Text.Json;
using ArcaneLibs.Extensions;
using BugMine.Web.Classes;
using LibMatrix.EventTypes.Spec.State;
using LibMatrix.Responses;
using LibMatrix.Services;
namespace BugMine.DevTools.CLI;
public class Worker(ILogger<Worker> logger, HomeserverProviderService hsProvider) : BackgroundService {
private readonly ILogger<Worker> _logger = logger;
private BugMineClient? Client { get; set; }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
if (!File.Exists("auth.json")) {
Console.Write("Homeserver: ");
var homeserver = Console.ReadLine()!;
Console.Write("Username: ");
var username = Console.ReadLine()!;
Console.Write("Password: ");
var password = Console.ReadLine()!;
var login = await hsProvider.Login(homeserver, username, password);
await File.WriteAllTextAsync("auth.json", login.ToJson(), stoppingToken);
}
var auth = await JsonSerializer.DeserializeAsync<LoginResponse>(File.OpenRead("auth.json"));
Client = new BugMineClient(await hsProvider.GetAuthenticatedWithToken(auth.Homeserver, auth.AccessToken, useGeneric: true));
while (!stoppingToken.IsCancellationRequested) {
Console.WriteLine("""
1) List all projects
2) Create 500 projects
3) Destroy all projects
4) Get room count
""");
var input = Console.ReadKey();
Console.WriteLine();
switch (input.Key) {
case ConsoleKey.D1: {
if (Client is null) {
_logger.LogError("No client available.");
break;
}
var projects = Client.GetProjects();
await foreach (var project in projects) {
Console.WriteLine(project.ToJson(indent: false));
}
break;
}
case ConsoleKey.D2: {
if (Client is null) {
_logger.LogError("No client available.");
break;
}
await MassCreateProjects();
break;
}
case ConsoleKey.D3: {
if (Client is null) {
_logger.LogError("No client available.");
break;
}
await DestroyAllProjects();
break;
}
case ConsoleKey.D4: {
if (Client is null) {
_logger.LogError("No client available.");
break;
}
var rooms = await Client.Homeserver.GetJoinedRooms();
Console.WriteLine(rooms.Count());
break;
}
}
}
}
private async Task DestroyAllProjects() {
var ss = new SemaphoreSlim(4, 4);
await foreach (var proj in Client.Homeserver.GetJoinedRoomsByType(null!)) {
if (proj.RoomId == "!UktPWOzit8gmms5FQ6:conduit.matrixunittests.rory.gay") continue;
Task.Run(async () => {
// await ss.WaitAsync();
await proj.SendStateEventAsync(RoomNameEventContent.EventId, new RoomNameEventContent() {
Name = "Disbanded BugMine project."
});
await proj.SendStateEventAsync(RoomJoinRulesEventContent.EventId, new RoomJoinRulesEventContent() {
JoinRule = RoomJoinRulesEventContent.JoinRules.Private
});
await proj.SendStateEventAsync(RoomCanonicalAliasEventContent.EventId, new RoomCanonicalAliasEventContent() {
Alias = null
});
await proj.LeaveAsync("Disbanded room.");
// ss.Release();
});
}
}
private async Task MassCreateProjects() {
// var rooms = await Client.Homeserver.GetJoinedRooms();
// List<string> roomNames = (await Task.WhenAll(rooms.Select(x => x.GetNameAsync()))).Where(x => x != null).ToList();
for (int i = 0; i < 500; i++) {
Task.Run(async () => {
// var randomName = roomNames[Random.Shared.Next(roomNames.Count)];
var proj = await Client.CreateProject(new() {
Name = /*randomName + */Guid.NewGuid().ToString()[..8]
});
// await proj.CreateIssue(new() {
// Name = "meow"
// });
});
}
}
}
|