10 changed files with 244 additions and 114 deletions
|
After Width: | Height: | Size: 44 KiB |
@ -0,0 +1,32 @@
|
||||
<Window x:Class="WinUI.ToolbarItem" |
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
||||
xmlns:local="clr-namespace:WinUI" |
||||
xmlns:tb="http://www.hardcodet.net/taskbar" |
||||
mc:Ignorable="d" |
||||
Height="300" Width="300" Visibility="Hidden"> |
||||
<Grid> |
||||
<tb:TaskbarIcon x:Name="MyNotifyIcon" |
||||
IconSource="ZeroTierIcon.ico" |
||||
ToolTipText="ZeroTier One" |
||||
TrayContextMenuOpen="ToolbarItem_TrayContextMenuOpen" |
||||
PreviewTrayContextMenuOpen="ToolbarItem_PreviewTrayContextMenuOpen"> |
||||
<tb:TaskbarIcon.ContextMenu> |
||||
<ContextMenu> |
||||
<MenuItem Header="Node ID: abeb9f9bc5"/> |
||||
<Separator/> |
||||
<MenuItem Header="Join Network..."/> |
||||
<MenuItem Header="Show Networks..."/> |
||||
<Separator/> |
||||
<MenuItem Header="About..."/> |
||||
<MenuItem Header="Preferences..."/> |
||||
<Separator/> |
||||
<MenuItem Header="Quit"/> |
||||
</ContextMenu> |
||||
</tb:TaskbarIcon.ContextMenu> |
||||
|
||||
</tb:TaskbarIcon> |
||||
</Grid> |
||||
</Window> |
||||
@ -0,0 +1,127 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Text; |
||||
using System.Threading.Tasks; |
||||
using System.Windows; |
||||
using System.Windows.Controls; |
||||
using System.Windows.Data; |
||||
using System.Windows.Documents; |
||||
using System.Windows.Input; |
||||
using System.Windows.Media; |
||||
using System.Windows.Media.Imaging; |
||||
using System.Windows.Shapes; |
||||
using System.Text.RegularExpressions; |
||||
using System.Timers; |
||||
using System.Windows.Threading; |
||||
using System.IO; |
||||
using System.Diagnostics; |
||||
|
||||
namespace WinUI |
||||
{ |
||||
/// <summary> |
||||
/// Interaction logic for ToolbarItem.xaml |
||||
/// </summary> |
||||
public partial class ToolbarItem : Window |
||||
{ |
||||
APIHandler handler; |
||||
|
||||
public ToolbarItem() |
||||
{ |
||||
InitializeComponent(); |
||||
|
||||
if (InitAPIHandler()) |
||||
{ |
||||
|
||||
} |
||||
else |
||||
{ |
||||
MessageBox.Show("ZeroTier API Initialization Failed"); |
||||
} |
||||
} |
||||
|
||||
private String readAuthToken(String path) |
||||
{ |
||||
String authToken = ""; |
||||
|
||||
if (File.Exists(path)) |
||||
{ |
||||
try |
||||
{ |
||||
byte[] tmp = File.ReadAllBytes(path); |
||||
authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim(); |
||||
} |
||||
catch |
||||
{ |
||||
MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One"); |
||||
} |
||||
} |
||||
|
||||
return authToken; |
||||
} |
||||
|
||||
private Int32 readPort(String path) |
||||
{ |
||||
Int32 port = 9993; |
||||
|
||||
try |
||||
{ |
||||
byte[] tmp = File.ReadAllBytes(path); |
||||
port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim()); |
||||
if ((port <= 0) || (port > 65535)) |
||||
port = 9993; |
||||
} |
||||
catch |
||||
{ |
||||
} |
||||
|
||||
return port; |
||||
} |
||||
|
||||
private bool InitAPIHandler() |
||||
{ |
||||
String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One"; |
||||
String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One"; |
||||
|
||||
String authToken = ""; |
||||
Int32 port = 9993; |
||||
|
||||
if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port")) |
||||
{ |
||||
// launch external process to copy file into place |
||||
String curPath = System.Reflection.Assembly.GetEntryAssembly().Location; |
||||
int index = curPath.LastIndexOf("\\"); |
||||
curPath = curPath.Substring(0, index); |
||||
ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir); |
||||
startInfo.Verb = "runas"; |
||||
|
||||
|
||||
var process = Process.Start(startInfo); |
||||
process.WaitForExit(); |
||||
} |
||||
|
||||
authToken = readAuthToken(localZtDir + "\\authtoken.secret"); |
||||
|
||||
if ((authToken == null) || (authToken.Length <= 0)) |
||||
{ |
||||
MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One"); |
||||
this.Close(); |
||||
return false; |
||||
} |
||||
|
||||
port = readPort(localZtDir + "\\zerotier-one.port"); |
||||
handler = new APIHandler(port, authToken); |
||||
return true; |
||||
} |
||||
|
||||
private void ToolbarItem_TrayContextMenuOpen(object sender, System.Windows.RoutedEventArgs e) |
||||
{ |
||||
Console.WriteLine("TrayContextMenuOpen"); |
||||
} |
||||
|
||||
private void ToolbarItem_PreviewTrayContextMenuOpen(object sender, System.Windows.RoutedEventArgs e) |
||||
{ |
||||
Console.WriteLine("PreviewTrayContextMenuOpen"); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue