mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-07-11 03:03:10 +00:00
177 lines
5.4 KiB
C#
177 lines
5.4 KiB
C#
// InstancesForm.cs
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// SPDX-FileCopyrightText: 2025 Catswords OSS and WelsonJS Contributors
|
|
// https://github.com/gnh1201/welsonjs
|
|
//
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using WelsonJS.Esent;
|
|
|
|
namespace WelsonJS.Launcher
|
|
{
|
|
public partial class InstancesForm : Form
|
|
{
|
|
private string _entryFileName;
|
|
private string _scriptName;
|
|
private readonly string _dateTimeFormat;
|
|
private readonly EsentDatabase _db;
|
|
|
|
public InstancesForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
// set the datetime format
|
|
_dateTimeFormat = Program.GetAppConfig("DateTimeFormat");
|
|
|
|
// set the entry file name to run the instance
|
|
_entryFileName = "bootstrap.bat";
|
|
|
|
// connect the database to manage an instances
|
|
Schema schema = new Schema("Instances", new List<Column>
|
|
{
|
|
new Column("InstanceId", typeof(string), 255),
|
|
new Column("FirstDeployTime", typeof(DateTime), 1)
|
|
});
|
|
schema.SetPrimaryKey("InstanceId");
|
|
_db = new EsentDatabase(schema, Program.GetAppDataPath());
|
|
}
|
|
|
|
public EsentDatabase GetDatabaseInstance()
|
|
{
|
|
return _db;
|
|
}
|
|
|
|
private void InstancesForm_Load(object sender, EventArgs e)
|
|
{
|
|
lvInstances.Items.Clear();
|
|
LoadInstances();
|
|
}
|
|
|
|
private void LoadInstances()
|
|
{
|
|
var instances = _db.FindAll();
|
|
foreach (var instance in instances)
|
|
{
|
|
try
|
|
{
|
|
string instanceId = instance["InstanceId"].ToString();
|
|
string firstDeployTime = instance.ContainsKey("FirstDeployTime")
|
|
? ((DateTime)instance["FirstDeployTime"]).ToString(_dateTimeFormat)
|
|
: "Unknown";
|
|
|
|
lvInstances.Items.Add(new ListViewItem(new[]
|
|
{
|
|
instanceId,
|
|
firstDeployTime
|
|
})
|
|
{
|
|
Tag = ResolveWorkingDirectory(instanceId)
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
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 workingDirectory = (string)lvInstances.SelectedItems[0].Tag;
|
|
|
|
Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
// Run the appliction
|
|
Program.RunCommandPrompt(workingDirectory, _entryFileName, _scriptName, cbUseSpecificScript.Checked, cbInteractiveServiceApp.Checked);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("No selected an instance");
|
|
}
|
|
}
|
|
|
|
private void btnDelete_Click(object sender, EventArgs e)
|
|
{
|
|
var selectedItems = lvInstances.SelectedItems;
|
|
|
|
if (selectedItems.Count > 0)
|
|
{
|
|
string workingDirectory = (string)selectedItems[0].Tag;
|
|
string instanceId = selectedItems[0].SubItems[0].Text;
|
|
|
|
try
|
|
{
|
|
Directory.Delete(workingDirectory, true);
|
|
_db.DeleteById(instanceId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Trace.TraceError(ex.Message);
|
|
}
|
|
|
|
lvInstances.Items.Clear();
|
|
LoadInstances();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("No selected an instance");
|
|
}
|
|
}
|
|
|
|
private void btnOpenWithExplorer_Click(object sender, EventArgs e)
|
|
{
|
|
if (lvInstances.SelectedItems.Count > 0)
|
|
{
|
|
string workingDirectory = (string)lvInstances.SelectedItems[0].Tag;
|
|
|
|
if (Directory.Exists(workingDirectory))
|
|
{
|
|
System.Diagnostics.Process.Start("explorer", workingDirectory);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("No selected an instance");
|
|
}
|
|
}
|
|
|
|
private void cbUseSpecificScript_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
txtUseSpecificScript.Enabled = cbUseSpecificScript.Checked;
|
|
}
|
|
}
|
|
}
|