diff --git a/MatrixUtils.RoomUpgradeCLI/Commands/ExecuteCommand.cs b/MatrixUtils.RoomUpgradeCLI/Commands/ExecuteCommand.cs
index 41c8cca..ecc5fcd 100644
--- a/MatrixUtils.RoomUpgradeCLI/Commands/ExecuteCommand.cs
+++ b/MatrixUtils.RoomUpgradeCLI/Commands/ExecuteCommand.cs
@@ -1,5 +1,6 @@
using System.Text.Json;
using System.Text.Json.Nodes;
+using ArcaneLibs.Extensions;
using LibMatrix.Helpers;
using LibMatrix.Homeservers;
@@ -11,6 +12,7 @@ public class ExecuteCommand(ILogger<ExecuteCommand> logger, IHost host, RuntimeC
await PrintHelp();
return;
}
+
var filename = ctx.Args[1];
if (filename.StartsWith("--")) {
Console.WriteLine("Filename cannot start with --, please provide a valid filename.");
@@ -37,14 +39,21 @@ public class ExecuteCommand(ILogger<ExecuteCommand> logger, IHost host, RuntimeC
? rbj.Deserialize<RoomUpgradeBuilder>()
: rbj.Deserialize<RoomBuilder>();
Console.WriteLine($"Executing room builder file of type {rb.GetType().Name}...");
+ if (rb is RoomUpgradeBuilder { CanUpgrade: false } rub) {
+ Console.WriteLine("Warning: Import state has determined that you cannot upgrade this room.");
+ Console.WriteLine(rub.ToJson());
+ return;
+ }
+
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}");
diff --git a/MatrixUtils.RoomUpgradeCLI/Extensions/RoomBuilderExtensions.cs b/MatrixUtils.RoomUpgradeCLI/Extensions/RoomBuilderExtensions.cs
index 75852bc..f6e5199 100644
--- a/MatrixUtils.RoomUpgradeCLI/Extensions/RoomBuilderExtensions.cs
+++ b/MatrixUtils.RoomUpgradeCLI/Extensions/RoomBuilderExtensions.cs
@@ -121,6 +121,28 @@ public static class RoomBuilderExtensions {
break;
// upgrade options
+ case "--restrict-old-room":
+ if (rb is not RoomUpgradeBuilder upgradeBuilderRestrict) {
+ throw new InvalidOperationException("Restrict old room can only be used with room upgrades");
+ }
+
+ var oldRoom = hs.GetRoom(upgradeBuilderRestrict.OldRoomId);
+ var createEvt = await oldRoom.GetCreateEventAsync();
+ if (createEvt == null) {
+ throw new InvalidOperationException("Could not get create event for old room " + upgradeBuilderRestrict.OldRoomId);
+ }
+
+ if (!int.TryParse(createEvt.RoomVersion ?? "1", out int numericVersion)) {
+ Console.WriteLine("Warning: Could not parse old room version '" + createEvt.RoomVersion + "' as a number! Setting restricted join rule may not work.");
+ }
+ else if (numericVersion < 8) {
+ throw new InvalidOperationException(
+ "Cannot set restrict old room on rooms with version lower than 8!\nhttps://spec.matrix.org/v1.17/rooms/#feature-matrix"
+ );
+ }
+
+ upgradeBuilderRestrict.UpgradeOptions.RestrictOldRoom = GetBoolArg(args, ref i, true);
+ break;
case "--invite-members":
if (rb is not RoomUpgradeBuilder upgradeBuilder) {
throw new InvalidOperationException("Invite members can only be used with room upgrades");
diff --git a/MatrixUtils.RoomUpgradeCLI/Program.cs b/MatrixUtils.RoomUpgradeCLI/Program.cs
index e169830..3a4c822 100644
--- a/MatrixUtils.RoomUpgradeCLI/Program.cs
+++ b/MatrixUtils.RoomUpgradeCLI/Program.cs
@@ -4,7 +4,7 @@ using LibMatrix.Utilities.Bot;
using MatrixUtils.RoomUpgradeCLI;
using MatrixUtils.RoomUpgradeCLI.Commands;
-foreach (var group in args.Split(";")) {
+foreach (var group in args.AsEnumerable().Split(";")) {
var argGroup = group.ToArray();
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRoryLibMatrixServices();
|