Fix importing with no existing system
This commit is contained in:
		| @@ -85,7 +85,7 @@ namespace PluralKit.Bot.Commands | ||||
|  | ||||
|                     // If passed system is null, it'll create a new one | ||||
|                     // (and that's okay!) | ||||
|                     var result = await DataFiles.ImportSystem(data, Context.SenderSystem); | ||||
|                     var result = await DataFiles.ImportSystem(data, Context.SenderSystem, Context.User.Id); | ||||
|                      | ||||
|                     if (Context.SenderSystem == null) | ||||
|                     { | ||||
|   | ||||
| @@ -64,8 +64,11 @@ namespace PluralKit.Bot | ||||
|             Timestamp = Formats.TimestampExportFormat.Format(sw.Timestamp) | ||||
|         }; | ||||
|  | ||||
|         public async Task<ImportResult> ImportSystem(DataFileSystem data, PKSystem system) | ||||
|         public async Task<ImportResult> ImportSystem(DataFileSystem data, PKSystem system, ulong accountId) | ||||
|         { | ||||
|             // TODO: make atomic, somehow - we'd need to obtain one IDbConnection and reuse it | ||||
|             // which probably means refactoring SystemStore.Save and friends etc | ||||
|              | ||||
|             var result = new ImportResult {AddedNames = new List<string>(), ModifiedNames = new List<string>()}; | ||||
|  | ||||
|             // If we don't already have a system to save to, create one | ||||
| @@ -78,6 +81,9 @@ namespace PluralKit.Bot | ||||
|             if (data.AvatarUrl != null) system.AvatarUrl = data.AvatarUrl; | ||||
|             if (data.TimeZone != null) system.UiTz = data.TimeZone ?? "UTC"; | ||||
|             await _systems.Save(system); | ||||
|              | ||||
|             // Make sure to link the sender account, too | ||||
|             await _systems.Link(system, accountId); | ||||
|  | ||||
|             // Apply members | ||||
|             // TODO: parallelize? | ||||
|   | ||||
| @@ -25,8 +25,10 @@ namespace PluralKit { | ||||
|         } | ||||
|  | ||||
|         public async Task Link(PKSystem system, ulong accountId) { | ||||
|             // We have "on conflict do nothing" since linking an account when it's already linked to the same system is idempotent | ||||
|             // This is used in import/export, although the pk;link command checks for this case beforehand | ||||
|             using (var conn = _conn.Obtain()) | ||||
|                 await conn.ExecuteAsync("insert into accounts (uid, system) values (@Id, @SystemId)", new { Id = accountId, SystemId = system.Id }); | ||||
|                 await conn.ExecuteAsync("insert into accounts (uid, system) values (@Id, @SystemId) on conflict do nothing", new { Id = accountId, SystemId = system.Id }); | ||||
|         } | ||||
|          | ||||
|         public async Task Unlink(PKSystem system, ulong accountId) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user