lokinet/ui-win32/UIMain.cs
Rick V bbba2c0eea
improve windows select loop
add generic svr4 poll(2) event loop
2019-03-26 19:56:34 -05:00

176 lines
6.3 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
namespace network.loki.lokinet.win32.ui
{
public partial class main_frame : Form
{
public static Process lokiNetDaemon = new Process();
public static bool isConnected;
public static string logText;
private string config_path;
private LogDumper ld;
void UpdateUI(string text)
{
this.Invoke(new MethodInvoker(delegate () { lokinetd_fd1.AppendText(text); }));
}
public main_frame()
{
InitializeComponent();
if (Program.platform == PlatformID.Win32NT)
config_path = Environment.ExpandEnvironmentVariables("%APPDATA%\\.lokinet");
else
config_path = Environment.ExpandEnvironmentVariables("%HOME%/.lokinet");
StatusLabel.Text = "Disconnected";
var build = ((AssemblyInformationalVersionAttribute)Assembly
.GetAssembly(typeof(main_frame))
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false)[0])
.InformationalVersion;
UIVersionLabel.Text = String.Format("LokiNET version {0}", build);
lokinetd_fd1.Text = string.Empty;
logText = string.Empty;
lokiNetDaemon.OutputDataReceived += new DataReceivedEventHandler((s, ev) =>
{
if (!string.IsNullOrEmpty(ev.Data))
{
UpdateUI(ev.Data + Environment.NewLine);
}
});
}
private void btnConfigProfile_Click(object sender, EventArgs e)
{
//MessageBox.Show("not implemented yet", "error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
UserSettingsForm f = new UserSettingsForm();
f.ShowDialog();
f.Dispose();
}
private void btnConnect_Click(object sender, EventArgs e)
{
string lokinetExeString;
if (Program.platform == PlatformID.Win32NT)
lokinetExeString = String.Format("{0}\\lokinet.exe", Directory.GetCurrentDirectory());
else
lokinetExeString = String.Format("{0}/lokinet", Directory.GetCurrentDirectory());
lokiNetDaemon.StartInfo.UseShellExecute = false;
lokiNetDaemon.StartInfo.RedirectStandardOutput = true;
//lokiNetDaemon.EnableRaisingEvents = true;
lokiNetDaemon.StartInfo.CreateNoWindow = true;
lokiNetDaemon.StartInfo.FileName = lokinetExeString;
lokiNetDaemon.Start();
lokiNetDaemon.BeginOutputReadLine();
btnConnect.Enabled = false;
TrayConnect.Enabled = false;
StatusLabel.Text = "Connected";
isConnected = true;
NotificationTrayIcon.Text = "LokiNET - connected";
btnDrop.Enabled = true;
TrayDisconnect.Enabled = true;
NotificationTrayIcon.ShowBalloonTip(5, "LokiNET", "Connected to network.", ToolTipIcon.Info);
}
private void btnDrop_Click(object sender, EventArgs e)
{
lokiNetDaemon.CancelOutputRead();
lokiNetDaemon.Kill();
btnConnect.Enabled = true;
TrayConnect.Enabled = true;
btnDrop.Enabled = false;
TrayDisconnect.Enabled = false;
StatusLabel.Text = "Disconnected";
NotificationTrayIcon.Text = "LokiNET - disconnected";
isConnected = false;
logText = lokinetd_fd1.Text;
lokinetd_fd1.Text = string.Empty;
NotificationTrayIcon.ShowBalloonTip(5, "LokiNET", "Disconnected from network.", ToolTipIcon.Info);
}
private void lokinetd_fd1_TextChanged(object sender, EventArgs e)
{
lokinetd_fd1.ScrollToCaret();
}
private void btnHide_Click(object sender, EventArgs e)
{
Hide();
if (isConnected)
NotificationTrayIcon.ShowBalloonTip(5, "LokiNET", "Currently connected.", ToolTipIcon.Info);
else
NotificationTrayIcon.ShowBalloonTip(5, "LokiNET", "Currently disconnected.", ToolTipIcon.Info);
}
private void NotificationTrayIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (!Visible)
{
Show();
}
}
private void btnAbout_Click(object sender, EventArgs e)
{
AboutBox a = new AboutBox();
a.ShowDialog(this);
a.Dispose();
}
private void saveLogToFileToolStripMenuItem_Click(object sender, EventArgs e)
{
if (isConnected)
MessageBox.Show("Cannot dump log when client is running.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else
{
if (logText == string.Empty)
{
MessageBox.Show("Log is empty", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
if (ld == null)
ld = new LogDumper(logText);
else
ld.setText(logText);
ld.CreateLog(config_path);
MessageBox.Show(string.Format("Wrote log to {0}, previous log rotated", ld.getLogPath()), "LokiNET", MessageBoxButtons.OK, MessageBoxIcon.Information);
logText = string.Empty;
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutBox a = new AboutBox();
a.ShowDialog();
a.Dispose();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void TrayDisconnect_Click(object sender, EventArgs e)
{
btnDrop_Click(sender, e);
}
private void TrayConnect_Click(object sender, EventArgs e)
{
btnConnect_Click(sender, e);
}
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
Show();
}
}
}