Skip to content
This repository was archived by the owner on Sep 11, 2023. It is now read-only.

Commit e472693

Browse files
committed
make configs window close asynchronous
1 parent 13dcb03 commit e472693

File tree

1 file changed

+80
-77
lines changed

1 file changed

+80
-77
lines changed

UI/Windows/ConfigWindow.xaml.cs

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,9 @@ private void NewButton_Click(object sender, RoutedEventArgs e)
264264
SMDirectories = new List<string>()
265265
};
266266
Program.Configs.Add(cfg);
267-
ConfigListBox.Items.Add(new ListBoxItem
268-
{
269-
Content = Translate("NewConfig")
267+
ConfigListBox.Items.Add(new ListBoxItem
268+
{
269+
Content = Translate("NewConfig")
270270
});
271271
}
272272

@@ -621,7 +621,7 @@ private async void RCONTestConnectionButton_Click(object sender, RoutedEventArgs
621621
errorMsg = ex.Message;
622622
}
623623

624-
End:
624+
End:
625625

626626
if ((bool)dialog?.IsCanceled)
627627
{
@@ -650,93 +650,96 @@ private void C_RConCmds_TextChanged(object sender, RoutedEventArgs e)
650650

651651
private async void MetroWindow_Closing(object sender, CancelEventArgs e)
652652
{
653-
if (NeedsSMDefInvalidation)
653+
await Dispatcher.InvokeAsync(async () =>
654654
{
655-
foreach (var config in Program.Configs)
655+
if (NeedsSMDefInvalidation)
656656
{
657-
config.InvalidateSMDef();
657+
foreach (var config in Program.Configs)
658+
{
659+
config.InvalidateSMDef();
660+
}
658661
}
659-
}
660662

661-
var configsList = new List<string>();
662-
foreach (ListBoxItem item in ConfigListBox.Items)
663-
{
664-
configsList.Add(item.Content.ToString());
665-
}
663+
var configsList = new List<string>();
664+
foreach (ListBoxItem item in ConfigListBox.Items)
665+
{
666+
configsList.Add(item.Content.ToString());
667+
}
666668

667-
// Check for empty named configs
668-
if (configsList.Any(x => string.IsNullOrEmpty(x)))
669-
{
670-
e.Cancel = true;
671-
await this.ShowMessageAsync(Translate("ErrorSavingConfigs"),
672-
Translate("EmptyConfigNames"), MessageDialogStyle.Affirmative,
673-
Program.MainWindow.MetroDialogOptions);
674-
return;
675-
}
669+
// Check for empty named configs
670+
if (configsList.Any(x => string.IsNullOrEmpty(x)))
671+
{
672+
e.Cancel = true;
673+
await this.ShowMessageAsync(Translate("ErrorSavingConfigs"),
674+
Translate("EmptyConfigNames"), MessageDialogStyle.Affirmative,
675+
Program.MainWindow.MetroDialogOptions);
676+
return;
677+
}
676678

677-
// Check for duplicate names in the config list
678-
if (configsList.Count != configsList.Distinct().Count())
679-
{
680-
e.Cancel = true;
681-
await this.ShowMessageAsync(Translate("ErrorSavingConfigs"),
682-
Translate("DuplicateConfigNames"), MessageDialogStyle.Affirmative,
683-
Program.MainWindow.MetroDialogOptions);
684-
return;
685-
}
679+
// Check for duplicate names in the config list
680+
if (configsList.Count != configsList.Distinct().Count())
681+
{
682+
e.Cancel = true;
683+
await this.ShowMessageAsync(Translate("ErrorSavingConfigs"),
684+
Translate("DuplicateConfigNames"), MessageDialogStyle.Affirmative,
685+
Program.MainWindow.MetroDialogOptions);
686+
return;
687+
}
686688

687-
Program.MainWindow.FillConfigMenu();
688-
await Program.MainWindow.ChangeConfig(Program.SelectedConfig);
689-
var outString = new StringBuilder();
690-
var settings = new XmlWriterSettings
691-
{
692-
Indent = true,
693-
IndentChars = "\t",
694-
NewLineOnAttributes = false,
695-
OmitXmlDeclaration = true
696-
};
697-
using (var writer = XmlWriter.Create(outString, settings))
698-
{
699-
writer.WriteStartElement("Configurations");
700-
foreach (var c in Program.Configs)
689+
Program.MainWindow.FillConfigMenu();
690+
await Program.MainWindow.ChangeConfig(Program.SelectedConfig);
691+
var outString = new StringBuilder();
692+
var settings = new XmlWriterSettings
693+
{
694+
Indent = true,
695+
IndentChars = "\t",
696+
NewLineOnAttributes = false,
697+
OmitXmlDeclaration = true
698+
};
699+
using (var writer = XmlWriter.Create(outString, settings))
701700
{
702-
writer.WriteStartElement("Config");
703-
writer.WriteAttributeString("Name", c.Name);
704-
var SMDirOut = new StringBuilder();
705-
foreach (var dir in c.SMDirectories)
701+
writer.WriteStartElement("Configurations");
702+
foreach (var c in Program.Configs)
706703
{
707-
SMDirOut.Append(dir.Trim() + ";");
704+
writer.WriteStartElement("Config");
705+
writer.WriteAttributeString("Name", c.Name);
706+
var SMDirOut = new StringBuilder();
707+
foreach (var dir in c.SMDirectories)
708+
{
709+
SMDirOut.Append(dir.Trim() + ";");
710+
}
711+
712+
writer.WriteAttributeString("SMDirectory", SMDirOut.ToString());
713+
writer.WriteAttributeString("Standard", c.Standard ? "1" : "0");
714+
writer.WriteAttributeString("CopyDirectory", c.CopyDirectory);
715+
writer.WriteAttributeString("AutoCopy", c.AutoCopy ? "1" : "0");
716+
writer.WriteAttributeString("AutoUpload", c.AutoUpload ? "1" : "0");
717+
writer.WriteAttributeString("AutoRCON", c.AutoRCON ? "1" : "0");
718+
writer.WriteAttributeString("ServerFile", c.ServerFile);
719+
writer.WriteAttributeString("ServerArgs", c.ServerArgs);
720+
writer.WriteAttributeString("PostCmd", c.PostCmd);
721+
writer.WriteAttributeString("PreCmd", c.PreCmd);
722+
writer.WriteAttributeString("OptimizationLevel", c.OptimizeLevel.ToString());
723+
writer.WriteAttributeString("VerboseLevel", c.VerboseLevel.ToString());
724+
writer.WriteAttributeString("DeleteAfterCopy", c.DeleteAfterCopy ? "1" : "0");
725+
writer.WriteAttributeString("FTPHost", c.FTPHost);
726+
writer.WriteAttributeString("FTPUser", c.FTPUser);
727+
writer.WriteAttributeString("FTPPassword", ManagedAES.Encrypt(c.FTPPassword));
728+
writer.WriteAttributeString("FTPDir", c.FTPDir);
729+
writer.WriteAttributeString("RConIP", c.RConIP);
730+
writer.WriteAttributeString("RConPort", c.RConPort.ToString());
731+
writer.WriteAttributeString("RConPassword", ManagedAES.Encrypt(c.RConPassword));
732+
writer.WriteAttributeString("RConCommands", c.RConCommands);
733+
writer.WriteEndElement();
708734
}
709735

710-
writer.WriteAttributeString("SMDirectory", SMDirOut.ToString());
711-
writer.WriteAttributeString("Standard", c.Standard ? "1" : "0");
712-
writer.WriteAttributeString("CopyDirectory", c.CopyDirectory);
713-
writer.WriteAttributeString("AutoCopy", c.AutoCopy ? "1" : "0");
714-
writer.WriteAttributeString("AutoUpload", c.AutoUpload ? "1" : "0");
715-
writer.WriteAttributeString("AutoRCON", c.AutoRCON ? "1" : "0");
716-
writer.WriteAttributeString("ServerFile", c.ServerFile);
717-
writer.WriteAttributeString("ServerArgs", c.ServerArgs);
718-
writer.WriteAttributeString("PostCmd", c.PostCmd);
719-
writer.WriteAttributeString("PreCmd", c.PreCmd);
720-
writer.WriteAttributeString("OptimizationLevel", c.OptimizeLevel.ToString());
721-
writer.WriteAttributeString("VerboseLevel", c.VerboseLevel.ToString());
722-
writer.WriteAttributeString("DeleteAfterCopy", c.DeleteAfterCopy ? "1" : "0");
723-
writer.WriteAttributeString("FTPHost", c.FTPHost);
724-
writer.WriteAttributeString("FTPUser", c.FTPUser);
725-
writer.WriteAttributeString("FTPPassword", ManagedAES.Encrypt(c.FTPPassword));
726-
writer.WriteAttributeString("FTPDir", c.FTPDir);
727-
writer.WriteAttributeString("RConIP", c.RConIP);
728-
writer.WriteAttributeString("RConPort", c.RConPort.ToString());
729-
writer.WriteAttributeString("RConPassword", ManagedAES.Encrypt(c.RConPassword));
730-
writer.WriteAttributeString("RConCommands", c.RConCommands);
731736
writer.WriteEndElement();
737+
writer.Flush();
732738
}
733739

734-
writer.WriteEndElement();
735-
writer.Flush();
736-
}
737-
738-
File.WriteAllText(PathsHelper.ConfigFilePath, outString.ToString());
739-
LoggingControl.LogAction($"Configs saved.", 2);
740+
File.WriteAllText(PathsHelper.ConfigFilePath, outString.ToString());
741+
LoggingControl.LogAction($"Configs saved.", 2);
742+
});
740743
}
741744

742745
private void Language_Translate()

0 commit comments

Comments
 (0)