diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/InstancesForm.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/InstancesForm.cs index 684da07..5b9c07d 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/InstancesForm.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/InstancesForm.cs @@ -5,6 +5,7 @@ // using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Threading.Tasks; using System.Windows.Forms; @@ -14,16 +15,18 @@ namespace WelsonJS.Launcher { public partial class InstancesForm : Form { - private const string _timestampFormat = "yyyy-MM-dd HH:mm:ss"; - private string _entryFileName; private string _scriptName; + private readonly string _dateTimeFormat; private readonly DataStore _dataStore; public InstancesForm() { InitializeComponent(); + // set the datetime format + _dateTimeFormat = Program.GetAppConfig("DateTimeFormat"); + // set the entry file name to run the instance _entryFileName = "bootstrap.bat"; @@ -45,74 +48,61 @@ namespace WelsonJS.Launcher private void InstancesForm_Load(object sender, EventArgs e) { lvInstances.Items.Clear(); - - LoadInstances(Program.GetAppDataPath()); - LoadInstances(Path.GetTempPath()); + LoadInstances(); } - private void LoadInstances(string instancesRoot) + private void LoadInstances() { - if (!Directory.Exists(instancesRoot)) - return; - - /* - foreach (string dir in Directory.GetDirectories(instancesRoot)) - { - string timestampFile = Path.Combine(dir, ".welsonjs_first_deploy_time"); - string entryScriptFile = Path.Combine(dir, "app.js"); - string firstDeployTime = null; - - if (File.Exists(timestampFile) - && DateTime.TryParse(File.ReadAllText(timestampFile).Trim(), out DateTime parsedTimestamp)) - { - firstDeployTime = parsedTimestamp.ToString(_timestampFormat); - } - else if (File.Exists(entryScriptFile)) - { - firstDeployTime = File.GetCreationTime(entryScriptFile).ToString(_timestampFormat); - } - - if (firstDeployTime != null) - { - lvInstances.Items.Add(new ListViewItem(new[] - { - Path.GetFileName(dir), - firstDeployTime - }) - { - Tag = dir - }); - } - } - */ - var instances = _dataStore.FindAll(); foreach (var instance in instances) { - string instanceId = instance["InstanceId"].ToString(); - string firstDeployTime = instance.ContainsKey("FirstDeployTime") - ? ((DateTime)instance["FirstDeployTime"]).ToString(_timestampFormat) - : "Unknown"; + try + { + string instanceId = instance["InstanceId"].ToString(); + string firstDeployTime = instance.ContainsKey("FirstDeployTime") + ? ((DateTime)instance["FirstDeployTime"]).ToString(_dateTimeFormat) + : "Unknown"; - lvInstances.Items.Add(new ListViewItem(new[] + lvInstances.Items.Add(new ListViewItem(new[] + { + instanceId, + firstDeployTime + }) + { + Tag = ResolveWorkingDirectory(instanceId) + }); + } + catch (Exception ex) { - instanceId, - firstDeployTime - }) - { - Tag = Path.Combine(instancesRoot, instanceId) - }); + Trace.TraceWarning(ex.Message); + } } } + private string ResolveWorkingDirectory(string instanceId) + { + string workingDirectory = Program.GetWorkingDirectory(instanceId, true); + + if (!Directory.Exists(workingDirectory)) + { + workingDirectory = Path.Combine(Path.GetTempPath(), instanceId); + } + + if (!Directory.Exists(workingDirectory)) + { + throw new DirectoryNotFoundException($"Working directory for instance '{instanceId}' does not exist: {workingDirectory}"); + } + + return workingDirectory; + } + private void btnStart_Click(object sender, EventArgs e) { if (lvInstances.SelectedItems.Count > 0) { _scriptName = txtUseSpecificScript.Text; - string instanceId = lvInstances.SelectedItems[0].Text; - string workingDirectory = Program.GetWorkingDirectory(instanceId, true); + string workingDirectory = (string)lvInstances.SelectedItems[0].Tag; Task.Run(() => { @@ -135,24 +125,25 @@ namespace WelsonJS.Launcher private void btnDelete_Click(object sender, EventArgs e) { - if (lvInstances.SelectedItems.Count > 0) + var selectedItems = lvInstances.SelectedItems; + + if (selectedItems.Count > 0) { - string instanceId = lvInstances.SelectedItems[0].Text; - string workingDirectory = Program.GetWorkingDirectory(instanceId, false); + string workingDirectory = (string)selectedItems[0].Tag; + string instanceId = selectedItems[0].SubItems[0].Text; - if (!Directory.Exists(workingDirectory)) - { - workingDirectory = Path.Combine(Path.GetTempPath(), instanceId); - } - - if (Directory.Exists(workingDirectory)) + try { Directory.Delete(workingDirectory, true); - - lvInstances.Items.Clear(); - LoadInstances(Program.GetAppDataPath()); - LoadInstances(Path.GetTempPath()); + _dataStore.DeleteById(instanceId); } + catch (Exception ex) + { + Trace.TraceError(ex.Message); + } + + lvInstances.Items.Clear(); + LoadInstances(); } else { @@ -164,8 +155,7 @@ namespace WelsonJS.Launcher { if (lvInstances.SelectedItems.Count > 0) { - string instanceId = lvInstances.SelectedItems[0].Text; - string workingDirectory = Program.GetWorkingDirectory(instanceId, true); + string workingDirectory = (string)lvInstances.SelectedItems[0].Tag; if (Directory.Exists(workingDirectory)) { diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs index 034326f..c3ebefd 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs @@ -132,6 +132,15 @@ namespace WelsonJS.Launcher.Properties { } } + /// + /// yyyy-MM-dd HH:mm:ss과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string DateTimeFormat { + get { + return ResourceManager.GetString("DateTimeFormat", resourceCulture); + } + } + /// /// http://localhost:9222/과(와) 유사한 지역화된 문자열을 찾습니다. /// diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx index 88786e0..7bf3635 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx @@ -196,4 +196,7 @@ https://api.criminalip.io/v1/ + + yyyy-MM-dd HH:mm:ss + \ No newline at end of file diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config index a9f7f58..3e9cad8 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config @@ -17,6 +17,7 @@ +