From ae022a6348e39fa5dc9e027753ff59e9bcb4542d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Thu, 20 Sep 2018 14:58:08 -0400 Subject: [PATCH] Changing chat providers implicitly deletes all associated channels --- .../Controllers/ChatController.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Tgstation.Server.Host/Controllers/ChatController.cs b/src/Tgstation.Server.Host/Controllers/ChatController.cs index baca707185..6828a5fe5e 100644 --- a/src/Tgstation.Server.Host/Controllers/ChatController.cs +++ b/src/Tgstation.Server.Host/Controllers/ChatController.cs @@ -210,6 +210,8 @@ namespace Tgstation.Server.Host.Controllers return false; }; + var oldProvider = current.Provider; + if (CheckModified(x => x.ConnectionString, ChatBotRights.WriteConnectionString) || CheckModified(x => x.Enabled, ChatBotRights.WriteEnabled) || CheckModified(x => x.Name, ChatBotRights.WriteName) @@ -217,12 +219,18 @@ namespace Tgstation.Server.Host.Controllers || (model.Channels != null && !userRights.HasFlag(ChatBotRights.WriteChannels))) return Forbid(); - if (model.Channels != null) + var hasChannels = model.Channels != null; + if (hasChannels || (model.Provider.HasValue && model.Provider != oldProvider)) { DatabaseContext.ChatChannels.RemoveRange(current.Channels); - var dbChannels = model.Channels.Select(x => ConvertApiChatChannel(x)).ToList(); - DatabaseContext.ChatChannels.AddRange(dbChannels); - current.Channels = dbChannels; + if (hasChannels) + { + var dbChannels = model.Channels.Select(x => ConvertApiChatChannel(x)).ToList(); + DatabaseContext.ChatChannels.AddRange(dbChannels); + current.Channels = dbChannels; + } + else + current.Channels.Clear(); } await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);