mirror of
https://github.com/Ylianst/MeshCentralRouter
synced 2025-12-06 00:13:33 +00:00
Initial work on file manager.
This commit is contained in:
295
FileViewer.Designer.cs
generated
Normal file
295
FileViewer.Designer.cs
generated
Normal file
@@ -0,0 +1,295 @@
|
|||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace MeshCentralRouter
|
||||||
|
{
|
||||||
|
|
||||||
|
partial class FileViewer
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileViewer));
|
||||||
|
this.updateTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
|
this.consoleTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
|
this.mainToolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
|
this.statsButton = new System.Windows.Forms.Button();
|
||||||
|
this.connectButton = new System.Windows.Forms.Button();
|
||||||
|
this.topPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||||
|
this.mainToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
|
this.consoleMessage = new System.Windows.Forms.Label();
|
||||||
|
this.mainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.rightPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.rightListView = new System.Windows.Forms.ListView();
|
||||||
|
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.fileIconImageList = new System.Windows.Forms.ImageList(this.components);
|
||||||
|
this.rightTopPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.remoteLabel = new System.Windows.Forms.Label();
|
||||||
|
this.leftPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.leftListView = new System.Windows.Forms.ListView();
|
||||||
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.leftTopPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.localLabel = new System.Windows.Forms.Label();
|
||||||
|
this.localUpButton = new System.Windows.Forms.Button();
|
||||||
|
this.remoteUpButton = new System.Windows.Forms.Button();
|
||||||
|
this.topPanel.SuspendLayout();
|
||||||
|
this.statusStrip1.SuspendLayout();
|
||||||
|
this.mainTableLayoutPanel.SuspendLayout();
|
||||||
|
this.rightPanel.SuspendLayout();
|
||||||
|
this.rightTopPanel.SuspendLayout();
|
||||||
|
this.leftPanel.SuspendLayout();
|
||||||
|
this.leftTopPanel.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// updateTimer
|
||||||
|
//
|
||||||
|
this.updateTimer.Enabled = true;
|
||||||
|
this.updateTimer.Interval = 1000;
|
||||||
|
//
|
||||||
|
// consoleTimer
|
||||||
|
//
|
||||||
|
this.consoleTimer.Interval = 5000;
|
||||||
|
this.consoleTimer.Tick += new System.EventHandler(this.consoleTimer_Tick);
|
||||||
|
//
|
||||||
|
// statsButton
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.statsButton, "statsButton");
|
||||||
|
this.statsButton.Name = "statsButton";
|
||||||
|
this.statsButton.TabStop = false;
|
||||||
|
this.mainToolTip.SetToolTip(this.statsButton, resources.GetString("statsButton.ToolTip"));
|
||||||
|
this.statsButton.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// connectButton
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.connectButton, "connectButton");
|
||||||
|
this.connectButton.Name = "connectButton";
|
||||||
|
this.connectButton.TabStop = false;
|
||||||
|
this.mainToolTip.SetToolTip(this.connectButton, resources.GetString("connectButton.ToolTip"));
|
||||||
|
this.connectButton.UseVisualStyleBackColor = true;
|
||||||
|
this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
|
||||||
|
//
|
||||||
|
// topPanel
|
||||||
|
//
|
||||||
|
this.topPanel.BackColor = System.Drawing.SystemColors.Control;
|
||||||
|
this.topPanel.Controls.Add(this.statsButton);
|
||||||
|
this.topPanel.Controls.Add(this.connectButton);
|
||||||
|
resources.ApplyResources(this.topPanel, "topPanel");
|
||||||
|
this.topPanel.Name = "topPanel";
|
||||||
|
//
|
||||||
|
// statusStrip1
|
||||||
|
//
|
||||||
|
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.mainToolStripStatusLabel});
|
||||||
|
resources.ApplyResources(this.statusStrip1, "statusStrip1");
|
||||||
|
this.statusStrip1.Name = "statusStrip1";
|
||||||
|
//
|
||||||
|
// mainToolStripStatusLabel
|
||||||
|
//
|
||||||
|
this.mainToolStripStatusLabel.Name = "mainToolStripStatusLabel";
|
||||||
|
resources.ApplyResources(this.mainToolStripStatusLabel, "mainToolStripStatusLabel");
|
||||||
|
this.mainToolStripStatusLabel.Spring = true;
|
||||||
|
//
|
||||||
|
// consoleMessage
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.consoleMessage, "consoleMessage");
|
||||||
|
this.consoleMessage.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.consoleMessage.Name = "consoleMessage";
|
||||||
|
//
|
||||||
|
// mainTableLayoutPanel
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.mainTableLayoutPanel, "mainTableLayoutPanel");
|
||||||
|
this.mainTableLayoutPanel.Controls.Add(this.panel1, 0, 0);
|
||||||
|
this.mainTableLayoutPanel.Controls.Add(this.rightPanel, 1, 0);
|
||||||
|
this.mainTableLayoutPanel.Controls.Add(this.leftPanel, 0, 0);
|
||||||
|
this.mainTableLayoutPanel.Name = "mainTableLayoutPanel";
|
||||||
|
//
|
||||||
|
// panel1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.panel1, "panel1");
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
//
|
||||||
|
// rightPanel
|
||||||
|
//
|
||||||
|
this.rightPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||||
|
this.rightPanel.Controls.Add(this.rightListView);
|
||||||
|
this.rightPanel.Controls.Add(this.rightTopPanel);
|
||||||
|
resources.ApplyResources(this.rightPanel, "rightPanel");
|
||||||
|
this.rightPanel.Name = "rightPanel";
|
||||||
|
//
|
||||||
|
// rightListView
|
||||||
|
//
|
||||||
|
this.rightListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.columnHeader3,
|
||||||
|
this.columnHeader4});
|
||||||
|
resources.ApplyResources(this.rightListView, "rightListView");
|
||||||
|
this.rightListView.FullRowSelect = true;
|
||||||
|
this.rightListView.Name = "rightListView";
|
||||||
|
this.rightListView.SmallImageList = this.fileIconImageList;
|
||||||
|
this.rightListView.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.rightListView.View = System.Windows.Forms.View.Details;
|
||||||
|
//
|
||||||
|
// columnHeader3
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader3, "columnHeader3");
|
||||||
|
//
|
||||||
|
// columnHeader4
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader4, "columnHeader4");
|
||||||
|
//
|
||||||
|
// fileIconImageList
|
||||||
|
//
|
||||||
|
this.fileIconImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("fileIconImageList.ImageStream")));
|
||||||
|
this.fileIconImageList.TransparentColor = System.Drawing.Color.Transparent;
|
||||||
|
this.fileIconImageList.Images.SetKeyName(0, "drive16.png");
|
||||||
|
this.fileIconImageList.Images.SetKeyName(1, "folder16.png");
|
||||||
|
this.fileIconImageList.Images.SetKeyName(2, "file16.png");
|
||||||
|
//
|
||||||
|
// rightTopPanel
|
||||||
|
//
|
||||||
|
this.rightTopPanel.Controls.Add(this.remoteUpButton);
|
||||||
|
this.rightTopPanel.Controls.Add(this.remoteLabel);
|
||||||
|
resources.ApplyResources(this.rightTopPanel, "rightTopPanel");
|
||||||
|
this.rightTopPanel.Name = "rightTopPanel";
|
||||||
|
//
|
||||||
|
// remoteLabel
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.remoteLabel, "remoteLabel");
|
||||||
|
this.remoteLabel.Name = "remoteLabel";
|
||||||
|
//
|
||||||
|
// leftPanel
|
||||||
|
//
|
||||||
|
this.leftPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||||
|
this.leftPanel.Controls.Add(this.consoleMessage);
|
||||||
|
this.leftPanel.Controls.Add(this.leftListView);
|
||||||
|
this.leftPanel.Controls.Add(this.leftTopPanel);
|
||||||
|
resources.ApplyResources(this.leftPanel, "leftPanel");
|
||||||
|
this.leftPanel.Name = "leftPanel";
|
||||||
|
//
|
||||||
|
// leftListView
|
||||||
|
//
|
||||||
|
this.leftListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.columnHeader1,
|
||||||
|
this.columnHeader2});
|
||||||
|
resources.ApplyResources(this.leftListView, "leftListView");
|
||||||
|
this.leftListView.FullRowSelect = true;
|
||||||
|
this.leftListView.Name = "leftListView";
|
||||||
|
this.leftListView.SmallImageList = this.fileIconImageList;
|
||||||
|
this.leftListView.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.leftListView.View = System.Windows.Forms.View.Details;
|
||||||
|
this.leftListView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.leftListView_MouseDoubleClick);
|
||||||
|
//
|
||||||
|
// columnHeader1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader1, "columnHeader1");
|
||||||
|
//
|
||||||
|
// columnHeader2
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader2, "columnHeader2");
|
||||||
|
//
|
||||||
|
// leftTopPanel
|
||||||
|
//
|
||||||
|
this.leftTopPanel.Controls.Add(this.localUpButton);
|
||||||
|
this.leftTopPanel.Controls.Add(this.localLabel);
|
||||||
|
resources.ApplyResources(this.leftTopPanel, "leftTopPanel");
|
||||||
|
this.leftTopPanel.Name = "leftTopPanel";
|
||||||
|
//
|
||||||
|
// localLabel
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.localLabel, "localLabel");
|
||||||
|
this.localLabel.Name = "localLabel";
|
||||||
|
//
|
||||||
|
// localUpButton
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.localUpButton, "localUpButton");
|
||||||
|
this.localUpButton.Name = "localUpButton";
|
||||||
|
this.localUpButton.UseVisualStyleBackColor = true;
|
||||||
|
this.localUpButton.Click += new System.EventHandler(this.localUpButton_Click);
|
||||||
|
//
|
||||||
|
// remoteUpButton
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.remoteUpButton, "remoteUpButton");
|
||||||
|
this.remoteUpButton.Name = "remoteUpButton";
|
||||||
|
this.remoteUpButton.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// FileViewer
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this, "$this");
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.BackColor = System.Drawing.SystemColors.Control;
|
||||||
|
this.Controls.Add(this.mainTableLayoutPanel);
|
||||||
|
this.Controls.Add(this.topPanel);
|
||||||
|
this.Controls.Add(this.statusStrip1);
|
||||||
|
this.Name = "FileViewer";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
|
||||||
|
this.Load += new System.EventHandler(this.MainForm_Load);
|
||||||
|
this.topPanel.ResumeLayout(false);
|
||||||
|
this.statusStrip1.ResumeLayout(false);
|
||||||
|
this.statusStrip1.PerformLayout();
|
||||||
|
this.mainTableLayoutPanel.ResumeLayout(false);
|
||||||
|
this.rightPanel.ResumeLayout(false);
|
||||||
|
this.rightTopPanel.ResumeLayout(false);
|
||||||
|
this.leftPanel.ResumeLayout(false);
|
||||||
|
this.leftPanel.PerformLayout();
|
||||||
|
this.leftTopPanel.ResumeLayout(false);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
private Timer updateTimer;
|
||||||
|
private Timer consoleTimer;
|
||||||
|
private ToolTip mainToolTip;
|
||||||
|
private Panel topPanel;
|
||||||
|
private Button statsButton;
|
||||||
|
private Button connectButton;
|
||||||
|
private StatusStrip statusStrip1;
|
||||||
|
private ToolStripStatusLabel mainToolStripStatusLabel;
|
||||||
|
private Label consoleMessage;
|
||||||
|
private TableLayoutPanel mainTableLayoutPanel;
|
||||||
|
private Panel panel1;
|
||||||
|
private Panel rightPanel;
|
||||||
|
private ListView rightListView;
|
||||||
|
private Panel leftPanel;
|
||||||
|
private ListView leftListView;
|
||||||
|
private Panel rightTopPanel;
|
||||||
|
private Label remoteLabel;
|
||||||
|
private Panel leftTopPanel;
|
||||||
|
private Label localLabel;
|
||||||
|
private ColumnHeader columnHeader3;
|
||||||
|
private ColumnHeader columnHeader4;
|
||||||
|
private ImageList fileIconImageList;
|
||||||
|
private ColumnHeader columnHeader1;
|
||||||
|
private ColumnHeader columnHeader2;
|
||||||
|
private Button remoteUpButton;
|
||||||
|
private Button localUpButton;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
463
FileViewer.cs
Normal file
463
FileViewer.cs
Normal file
@@ -0,0 +1,463 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2009-2020 Intel Corporation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Web.Script.Serialization;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
|
namespace MeshCentralRouter
|
||||||
|
{
|
||||||
|
public partial class FileViewer : Form
|
||||||
|
{
|
||||||
|
private MeshCentralServer server = null;
|
||||||
|
private NodeClass node = null;
|
||||||
|
private int state = 0;
|
||||||
|
private RandomNumberGenerator rand = RandomNumberGenerator.Create();
|
||||||
|
private string randomIdHex = null;
|
||||||
|
public webSocketClient wc = null;
|
||||||
|
public Dictionary<string, int> userSessions = null;
|
||||||
|
public bool sessionIsRecorded = false;
|
||||||
|
public DirectoryInfo localFolder = null;
|
||||||
|
public string remoteFolder = null;
|
||||||
|
public ArrayList remoteFolderList = null;
|
||||||
|
|
||||||
|
// Stats
|
||||||
|
public long bytesIn = 0;
|
||||||
|
public long bytesInCompressed = 0;
|
||||||
|
public long bytesOut = 0;
|
||||||
|
public long bytesOutCompressed = 0;
|
||||||
|
|
||||||
|
public FileViewer(MeshCentralServer server, NodeClass node)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
if (node != null) { this.Text += " - " + node.name; }
|
||||||
|
this.node = node;
|
||||||
|
this.server = server;
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool updateLocalFileView()
|
||||||
|
{
|
||||||
|
leftListView.Items.Clear();
|
||||||
|
if (localFolder == null)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DriveInfo[] drives = DriveInfo.GetDrives();
|
||||||
|
foreach (DriveInfo drive in drives)
|
||||||
|
{
|
||||||
|
ListViewItem x = new ListViewItem(drive.Name, 0);
|
||||||
|
x.Tag = drive;
|
||||||
|
leftListView.Items.Add(x);
|
||||||
|
}
|
||||||
|
localUpButton.Enabled = false;
|
||||||
|
localLabel.Text = "Local";
|
||||||
|
}
|
||||||
|
catch (Exception) { return false; }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DirectoryInfo[] directories = localFolder.GetDirectories();
|
||||||
|
foreach (DirectoryInfo directory in directories)
|
||||||
|
{
|
||||||
|
ListViewItem x = new ListViewItem(directory.Name, 1);
|
||||||
|
x.Tag = directory;
|
||||||
|
leftListView.Items.Add(x);
|
||||||
|
}
|
||||||
|
FileInfo[] files = localFolder.GetFiles();
|
||||||
|
foreach (FileInfo file in files)
|
||||||
|
{
|
||||||
|
if (file.Attributes.HasFlag(System.IO.FileAttributes.Hidden)) continue;
|
||||||
|
string[] si = new string[2];
|
||||||
|
si[0] = file.Name;
|
||||||
|
si[1] = "" + file.Length;
|
||||||
|
ListViewItem x = new ListViewItem(si, 2);
|
||||||
|
x.Tag = file;
|
||||||
|
leftListView.Items.Add(x);
|
||||||
|
}
|
||||||
|
localUpButton.Enabled = true;
|
||||||
|
localLabel.Text = "Local - " + localFolder.FullName;
|
||||||
|
}
|
||||||
|
catch (Exception) { return false; }
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private delegate void updateRemoteFileViewHandler();
|
||||||
|
public void updateRemoteFileView()
|
||||||
|
{
|
||||||
|
if (this.InvokeRequired) { this.Invoke(new updateRemoteFileViewHandler(updateRemoteFileView)); return; }
|
||||||
|
rightListView.Items.Clear();
|
||||||
|
|
||||||
|
if ((remoteFolder == null) || (remoteFolder == "")) {
|
||||||
|
remoteLabel.Text = "Remote";
|
||||||
|
} else {
|
||||||
|
if (node.agentid < 5)
|
||||||
|
{
|
||||||
|
remoteLabel.Text = "Remote - " + remoteFolder.Replace("/", "\\");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
remoteLabel.Text = "Remote - " + remoteFolder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteUpButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
||||||
|
|
||||||
|
if (remoteFolderList != null)
|
||||||
|
{
|
||||||
|
// Display all folders
|
||||||
|
for (int i = 0; i < remoteFolderList.Count; i++)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> fileItem = (Dictionary<string, object>)remoteFolderList[i];
|
||||||
|
int fileIcon = 0;
|
||||||
|
string fileName = null;
|
||||||
|
string fileDate = null;
|
||||||
|
int fileSize = -1;
|
||||||
|
if (fileItem.ContainsKey("t")) { fileIcon = (int)fileItem["t"]; }
|
||||||
|
if (fileItem.ContainsKey("n")) { fileName = (string)fileItem["n"]; }
|
||||||
|
if (fileItem.ContainsKey("d")) { fileDate = (string)fileItem["d"]; }
|
||||||
|
if (fileItem.ContainsKey("s")) { fileSize = (int)fileItem["s"]; }
|
||||||
|
if (fileIcon == 1) {
|
||||||
|
// Drive
|
||||||
|
ListViewItem x = new ListViewItem(fileName, 0);
|
||||||
|
rightListView.Items.Add(x);
|
||||||
|
} else if (fileIcon == 2) {
|
||||||
|
// Folder
|
||||||
|
ListViewItem x = new ListViewItem(fileName, 1);
|
||||||
|
rightListView.Items.Add(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display all files
|
||||||
|
for (int i = 0; i < remoteFolderList.Count; i++)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> fileItem = (Dictionary<string, object>)remoteFolderList[i];
|
||||||
|
int fileIcon = 0;
|
||||||
|
string fileName = null;
|
||||||
|
string fileDate = null;
|
||||||
|
int fileSize = -1;
|
||||||
|
if (fileItem.ContainsKey("t")) { fileIcon = (int)fileItem["t"]; }
|
||||||
|
if (fileItem.ContainsKey("n")) { fileName = (string)fileItem["n"]; }
|
||||||
|
if (fileItem.ContainsKey("d")) { fileDate = (string)fileItem["d"]; }
|
||||||
|
if (fileItem.ContainsKey("s")) { fileSize = (int)fileItem["s"]; }
|
||||||
|
if (fileIcon == 3)
|
||||||
|
{
|
||||||
|
// File
|
||||||
|
string[] si = new string[2];
|
||||||
|
si[0] = fileName;
|
||||||
|
si[1] = "" + fileSize;
|
||||||
|
ListViewItem x = new ListViewItem(si, 2);
|
||||||
|
rightListView.Items.Add(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Server_onStateChanged(int state)
|
||||||
|
{
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
updateLocalFileView();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MenuItemExit_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MenuItemConnect_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if ((wc != null) || (node == null)) return;
|
||||||
|
byte[] randomid = new byte[10];
|
||||||
|
rand.GetBytes(randomid);
|
||||||
|
randomIdHex = BitConverter.ToString(randomid).Replace("-", string.Empty);
|
||||||
|
|
||||||
|
state = 1;
|
||||||
|
string ux = server.wsurl.ToString().Replace("/control.ashx", "/");
|
||||||
|
int i = ux.IndexOf("?");
|
||||||
|
if (i >= 0) { ux = ux.Substring(0, i); }
|
||||||
|
Uri u = new Uri(ux + "meshrelay.ashx?browser=1&p=5&nodeid=" + node.nodeid + "&id=" + randomIdHex + "&auth=" + server.authCookie);
|
||||||
|
wc = new webSocketClient();
|
||||||
|
wc.onStateChanged += Wc_onStateChanged;
|
||||||
|
wc.onBinaryData += Wc_onBinaryData;
|
||||||
|
wc.onStringData += Wc_onStringData;
|
||||||
|
wc.Start(u, server.wshash);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Wc_onStateChanged(webSocketClient sender, webSocketClient.ConnectionStates wsstate)
|
||||||
|
{
|
||||||
|
switch (wsstate)
|
||||||
|
{
|
||||||
|
case webSocketClient.ConnectionStates.Disconnected:
|
||||||
|
{
|
||||||
|
// Disconnect
|
||||||
|
state = 0;
|
||||||
|
wc.Dispose();
|
||||||
|
wc = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case webSocketClient.ConnectionStates.Connecting:
|
||||||
|
{
|
||||||
|
state = 1;
|
||||||
|
displayMessage(null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case webSocketClient.ConnectionStates.Connected:
|
||||||
|
{
|
||||||
|
// Reset stats
|
||||||
|
bytesIn = 0;
|
||||||
|
bytesInCompressed = 0;
|
||||||
|
bytesOut = 0;
|
||||||
|
bytesOutCompressed = 0;
|
||||||
|
|
||||||
|
state = 2;
|
||||||
|
string u = "*/meshrelay.ashx?p=5&nodeid=" + node.nodeid + "&id=" + randomIdHex + "&rauth=" + server.rauthCookie;
|
||||||
|
server.sendCommand("{ \"action\": \"msg\", \"type\": \"tunnel\", \"nodeid\": \"" + node.nodeid + "\", \"value\": \"" + u.ToString() + "\", \"usage\": 5 }");
|
||||||
|
displayMessage(null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void requestRemoteFolder(string path)
|
||||||
|
{
|
||||||
|
// Send initial LS command
|
||||||
|
string cmd = "{\"action\":\"ls\",\"reqid\":1,\"path\":\"" + path.Replace("\\","/") + "\"}";
|
||||||
|
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
||||||
|
wc.SendBinary(bincmd, 0, bincmd.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Wc_onStringData(webSocketClient sender, string data, int orglen)
|
||||||
|
{
|
||||||
|
bytesIn += data.Length;
|
||||||
|
bytesInCompressed += orglen;
|
||||||
|
|
||||||
|
if ((state == 2) && ((data == "c") || (data == "cr")))
|
||||||
|
{
|
||||||
|
if (data == "cr") { sessionIsRecorded = true; }
|
||||||
|
state = 3;
|
||||||
|
UpdateStatus();
|
||||||
|
displayMessage(null);
|
||||||
|
|
||||||
|
// Send protocol
|
||||||
|
string cmd = "5";
|
||||||
|
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
||||||
|
wc.SendBinary(bincmd, 0, bincmd.Length);
|
||||||
|
|
||||||
|
requestRemoteFolder("");
|
||||||
|
//requestRemoteFolder("C:\\");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (state != 3) return;
|
||||||
|
|
||||||
|
// Parse the received JSON
|
||||||
|
Dictionary<string, object> jsonAction = new Dictionary<string, object>();
|
||||||
|
jsonAction = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(data);
|
||||||
|
if ((jsonAction == null) || (jsonAction.ContainsKey("type") == false) || (jsonAction["type"].GetType() != typeof(string))) return;
|
||||||
|
|
||||||
|
string action = jsonAction["type"].ToString();
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case "metadata":
|
||||||
|
{
|
||||||
|
if ((jsonAction.ContainsKey("users") == false) || (jsonAction["users"] == null)) return;
|
||||||
|
Dictionary<string, object> usersex = (Dictionary<string, object>)jsonAction["users"];
|
||||||
|
userSessions = new Dictionary<string, int>();
|
||||||
|
foreach (string user in usersex.Keys) { userSessions.Add(user, (int)usersex[user]); }
|
||||||
|
UpdateStatus();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "console":
|
||||||
|
{
|
||||||
|
string msg = null;
|
||||||
|
int msgid = -1;
|
||||||
|
if ((jsonAction.ContainsKey("msg")) && (jsonAction["msg"] != null)) { msg = jsonAction["msg"].ToString(); }
|
||||||
|
if (jsonAction.ContainsKey("msgid")) { msgid = (int)jsonAction["msgid"]; }
|
||||||
|
if (msgid == 1) { msg = "Waiting for user to grant access..."; }
|
||||||
|
if (msgid == 2) { msg = "Denied"; }
|
||||||
|
if (msgid == 3) { msg = "Failed to start remote terminal session"; } // , {0} ({1})
|
||||||
|
if (msgid == 4) { msg = "Timeout"; }
|
||||||
|
if (msgid == 5) { msg = "Received invalid network data"; }
|
||||||
|
displayMessage(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Wc_onBinaryData(webSocketClient sender, byte[] data, int offset, int length, int orglen)
|
||||||
|
{
|
||||||
|
bytesIn += length;
|
||||||
|
bytesInCompressed += orglen;
|
||||||
|
|
||||||
|
if (state != 3) return;
|
||||||
|
|
||||||
|
if (data[offset] == 123) {
|
||||||
|
// Parse the received JSON
|
||||||
|
Dictionary<string, object> jsonAction = new Dictionary<string, object>();
|
||||||
|
jsonAction = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(UTF8Encoding.UTF8.GetString(data, offset, length));
|
||||||
|
if (jsonAction == null) return;
|
||||||
|
int reqid = 0;
|
||||||
|
if (jsonAction.ContainsKey("reqid")) { reqid = (int)jsonAction["reqid"]; }
|
||||||
|
|
||||||
|
// Result of a LS command
|
||||||
|
if (reqid == 1)
|
||||||
|
{
|
||||||
|
if (jsonAction.ContainsKey("path")) { remoteFolder = (string)jsonAction["path"]; }
|
||||||
|
if (jsonAction.ContainsKey("dir")) { remoteFolderList = (ArrayList)jsonAction["dir"]; }
|
||||||
|
updateRemoteFileView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MenuItemDisconnect_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (wc != null)
|
||||||
|
{
|
||||||
|
// Disconnect
|
||||||
|
state = 0;
|
||||||
|
wc.Dispose();
|
||||||
|
wc = null;
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Connect
|
||||||
|
MenuItemConnect_Click(null, null);
|
||||||
|
}
|
||||||
|
displayMessage(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public delegate void UpdateStatusHandler();
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
if (this.InvokeRequired) { this.Invoke(new UpdateStatusHandler(UpdateStatus)); return; }
|
||||||
|
|
||||||
|
//if (kvmControl == null) return;
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case 0: // Disconnected
|
||||||
|
mainToolStripStatusLabel.Text = "Disconnected";
|
||||||
|
connectButton.Text = "Connect";
|
||||||
|
break;
|
||||||
|
case 1: // Connecting
|
||||||
|
mainToolStripStatusLabel.Text = "Connecting...";
|
||||||
|
connectButton.Text = "Disconnect";
|
||||||
|
break;
|
||||||
|
case 2: // Setup
|
||||||
|
mainToolStripStatusLabel.Text = "Setup...";
|
||||||
|
connectButton.Text = "Disconnect";
|
||||||
|
break;
|
||||||
|
case 3: // Connected
|
||||||
|
string label = "Connected";
|
||||||
|
if (sessionIsRecorded) { label += ", Recorded Session"; }
|
||||||
|
if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(", {0} users", userSessions.Count); }
|
||||||
|
label += ".";
|
||||||
|
mainToolStripStatusLabel.Text = label;
|
||||||
|
connectButton.Text = "Disconnect";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rightListView.Enabled = (state == 3);
|
||||||
|
if (state != 3) { rightListView.Items.Clear(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Main_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public delegate void displayMessageHandler(string msg);
|
||||||
|
public void displayMessage(string msg)
|
||||||
|
{
|
||||||
|
if (this.InvokeRequired) { this.Invoke(new displayMessageHandler(displayMessage), msg); return; }
|
||||||
|
if (msg == null)
|
||||||
|
{
|
||||||
|
consoleMessage.Visible = false;
|
||||||
|
consoleTimer.Enabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
consoleMessage.Text = msg;
|
||||||
|
consoleMessage.Visible = true;
|
||||||
|
consoleTimer.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void consoleTimer_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
consoleMessage.Visible = false;
|
||||||
|
consoleTimer.Enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void connectButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (wc != null)
|
||||||
|
{
|
||||||
|
// Disconnect
|
||||||
|
state = 0;
|
||||||
|
wc.Dispose();
|
||||||
|
wc = null;
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Connect
|
||||||
|
MenuItemConnect_Click(null, null);
|
||||||
|
}
|
||||||
|
displayMessage(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void leftListView_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
ListViewItem item = leftListView.GetItemAt(e.X, e.Y);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
if (item.Tag.GetType() == typeof(DriveInfo)) {
|
||||||
|
DirectoryInfo old = localFolder;
|
||||||
|
localFolder = ((DriveInfo)item.Tag).RootDirectory;
|
||||||
|
if (updateLocalFileView() == false) { localFolder = old; updateLocalFileView(); }
|
||||||
|
}
|
||||||
|
else if (item.Tag.GetType() == typeof(DirectoryInfo))
|
||||||
|
{
|
||||||
|
DirectoryInfo old = localFolder;
|
||||||
|
localFolder = (DirectoryInfo)item.Tag;
|
||||||
|
if (updateLocalFileView() == false) { localFolder = old; updateLocalFileView(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void localUpButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
localFolder = localFolder.Parent;
|
||||||
|
updateLocalFileView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1245
FileViewer.resx
Normal file
1245
FileViewer.resx
Normal file
File diff suppressed because it is too large
Load Diff
163
KVMViewer.resx
163
KVMViewer.resx
@@ -167,10 +167,136 @@
|
|||||||
<metadata name="updateTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="updateTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>264, 17</value>
|
<value>264, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<data name=">>clipOutboundButton.Name" xml:space="preserve">
|
||||||
|
<value>clipOutboundButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipOutboundButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipOutboundButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipOutboundButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipInboundButton.Name" xml:space="preserve">
|
||||||
|
<value>clipInboundButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipInboundButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipInboundButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clipInboundButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>statsButton.Name" xml:space="preserve">
|
||||||
|
<value>statsButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>statsButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>statsButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>statsButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>displaySelectComboBox.Name" xml:space="preserve">
|
||||||
|
<value>displaySelectComboBox</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>displaySelectComboBox.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>displaySelectComboBox.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>displaySelectComboBox.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>settingsButton.Name" xml:space="preserve">
|
||||||
|
<value>settingsButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>settingsButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>settingsButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>settingsButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>zoomButton.Name" xml:space="preserve">
|
||||||
|
<value>zoomButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>zoomButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>zoomButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>zoomButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cadButton.Name" xml:space="preserve">
|
||||||
|
<value>cadButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cadButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cadButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cadButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>connectButton.Name" xml:space="preserve">
|
||||||
|
<value>connectButton</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>connectButton.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>connectButton.Parent" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>connectButton.ZOrder" xml:space="preserve">
|
||||||
|
<value>7</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="topPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Top</value>
|
||||||
|
</data>
|
||||||
|
<data name="topPanel.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="topPanel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>1044, 32</value>
|
||||||
|
</data>
|
||||||
|
<data name="topPanel.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>11</value>
|
||||||
|
</data>
|
||||||
|
<data name="topPanel.Visible" type="System.Boolean, mscorlib">
|
||||||
|
<value>False</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>topPanel.Name" xml:space="preserve">
|
||||||
|
<value>topPanel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>topPanel.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>topPanel.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>topPanel.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="mainToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>509, 17</value>
|
||||||
|
</metadata>
|
||||||
<data name="clipOutboundButton.Enabled" type="System.Boolean, mscorlib">
|
<data name="clipOutboundButton.Enabled" type="System.Boolean, mscorlib">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="clipOutboundButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name="clipOutboundButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -183,9 +309,6 @@
|
|||||||
<data name="clipOutboundButton.TabIndex" type="System.Int32, mscorlib">
|
<data name="clipOutboundButton.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>9</value>
|
<value>9</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="mainToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>509, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<data name="clipOutboundButton.ToolTip" xml:space="preserve">
|
<data name="clipOutboundButton.ToolTip" xml:space="preserve">
|
||||||
<value>Push local clipboard to remote device</value>
|
<value>Push local clipboard to remote device</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -411,33 +534,6 @@
|
|||||||
<data name=">>connectButton.ZOrder" xml:space="preserve">
|
<data name=">>connectButton.ZOrder" xml:space="preserve">
|
||||||
<value>7</value>
|
<value>7</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="topPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Top</value>
|
|
||||||
</data>
|
|
||||||
<data name="topPanel.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 0</value>
|
|
||||||
</data>
|
|
||||||
<data name="topPanel.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>1044, 32</value>
|
|
||||||
</data>
|
|
||||||
<data name="topPanel.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>11</value>
|
|
||||||
</data>
|
|
||||||
<data name="topPanel.Visible" type="System.Boolean, mscorlib">
|
|
||||||
<value>False</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>topPanel.Name" xml:space="preserve">
|
|
||||||
<value>topPanel</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>topPanel.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>topPanel.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>topPanel.ZOrder" xml:space="preserve">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name="consoleMessage.AutoSize" type="System.Boolean, mscorlib">
|
<data name="consoleMessage.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -477,6 +573,9 @@
|
|||||||
<metadata name="consoleTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="consoleTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>385, 17</value>
|
<value>385, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="mainToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>509, 17</value>
|
||||||
|
</metadata>
|
||||||
<data name="resizeKvmControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="resizeKvmControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Fill</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -493,7 +592,7 @@
|
|||||||
<value>resizeKvmControl</value>
|
<value>resizeKvmControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>resizeKvmControl.Type" xml:space="preserve">
|
<data name=">>resizeKvmControl.Type" xml:space="preserve">
|
||||||
<value>MeshCentralRouter.KVMResizeControl, MeshCentralRouter, Version=1.0.7564.28683, Culture=neutral, PublicKeyToken=null</value>
|
<value>MeshCentralRouter.KVMResizeControl, MeshCentralRouter, Version=1.0.7565.29854, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>resizeKvmControl.Parent" xml:space="preserve">
|
<data name=">>resizeKvmControl.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
|
|||||||
19
MainForm.Designer.cs
generated
19
MainForm.Designer.cs
generated
@@ -51,6 +51,7 @@
|
|||||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
|
this.tokenRememberCheckBox = new System.Windows.Forms.CheckBox();
|
||||||
this.emailTokenButton = new System.Windows.Forms.Button();
|
this.emailTokenButton = new System.Windows.Forms.Button();
|
||||||
this.smsTokenButton = new System.Windows.Forms.Button();
|
this.smsTokenButton = new System.Windows.Forms.Button();
|
||||||
this.tokenEmailSentLabel = new System.Windows.Forms.Label();
|
this.tokenEmailSentLabel = new System.Windows.Forms.Label();
|
||||||
@@ -125,7 +126,7 @@
|
|||||||
this.saveMappingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.saveMappingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.openMapFileDialog = new System.Windows.Forms.OpenFileDialog();
|
this.openMapFileDialog = new System.Windows.Forms.OpenFileDialog();
|
||||||
this.saveMapFileDialog = new System.Windows.Forms.SaveFileDialog();
|
this.saveMapFileDialog = new System.Windows.Forms.SaveFileDialog();
|
||||||
this.tokenRememberCheckBox = new System.Windows.Forms.CheckBox();
|
this.remoteFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.panel5.SuspendLayout();
|
this.panel5.SuspendLayout();
|
||||||
this.mainPanel.SuspendLayout();
|
this.mainPanel.SuspendLayout();
|
||||||
this.mainTabControl.SuspendLayout();
|
this.mainTabControl.SuspendLayout();
|
||||||
@@ -323,6 +324,12 @@
|
|||||||
resources.ApplyResources(this.panel2, "panel2");
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
//
|
//
|
||||||
|
// tokenRememberCheckBox
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.tokenRememberCheckBox, "tokenRememberCheckBox");
|
||||||
|
this.tokenRememberCheckBox.Name = "tokenRememberCheckBox";
|
||||||
|
this.tokenRememberCheckBox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
// emailTokenButton
|
// emailTokenButton
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.emailTokenButton, "emailTokenButton");
|
resources.ApplyResources(this.emailTokenButton, "emailTokenButton");
|
||||||
@@ -600,6 +607,7 @@
|
|||||||
this.addRelayMapToolStripMenuItem,
|
this.addRelayMapToolStripMenuItem,
|
||||||
this.toolStripMenuItem3,
|
this.toolStripMenuItem3,
|
||||||
this.remoteDesktopToolStripMenuItem,
|
this.remoteDesktopToolStripMenuItem,
|
||||||
|
this.remoteFilesToolStripMenuItem,
|
||||||
this.httpToolStripMenuItem,
|
this.httpToolStripMenuItem,
|
||||||
this.httpsToolStripMenuItem,
|
this.httpsToolStripMenuItem,
|
||||||
this.rdpToolStripMenuItem,
|
this.rdpToolStripMenuItem,
|
||||||
@@ -863,11 +871,11 @@
|
|||||||
this.saveMapFileDialog.DefaultExt = "mcrouter";
|
this.saveMapFileDialog.DefaultExt = "mcrouter";
|
||||||
resources.ApplyResources(this.saveMapFileDialog, "saveMapFileDialog");
|
resources.ApplyResources(this.saveMapFileDialog, "saveMapFileDialog");
|
||||||
//
|
//
|
||||||
// tokenRememberCheckBox
|
// remoteFilesToolStripMenuItem
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tokenRememberCheckBox, "tokenRememberCheckBox");
|
this.remoteFilesToolStripMenuItem.Name = "remoteFilesToolStripMenuItem";
|
||||||
this.tokenRememberCheckBox.Name = "tokenRememberCheckBox";
|
resources.ApplyResources(this.remoteFilesToolStripMenuItem, "remoteFilesToolStripMenuItem");
|
||||||
this.tokenRememberCheckBox.UseVisualStyleBackColor = true;
|
this.remoteFilesToolStripMenuItem.Click += new System.EventHandler(this.remoteFilesToolStripMenuItem_Click);
|
||||||
//
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
@@ -1014,6 +1022,7 @@
|
|||||||
private System.Windows.Forms.ToolStripMenuItem remoteDesktopToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem remoteDesktopToolStripMenuItem;
|
||||||
private System.Windows.Forms.CheckBox rememberCertCheckBox;
|
private System.Windows.Forms.CheckBox rememberCertCheckBox;
|
||||||
private System.Windows.Forms.CheckBox tokenRememberCheckBox;
|
private System.Windows.Forms.CheckBox tokenRememberCheckBox;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem remoteFilesToolStripMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
MainForm.cs
19
MainForm.cs
@@ -178,6 +178,7 @@ namespace MeshCentralRouter
|
|||||||
if (arg.Length > 8 && arg.Substring(0, 8).ToLower() == "-search:") { searchTextBox.Text = arg.Substring(8); }
|
if (arg.Length > 8 && arg.Substring(0, 8).ToLower() == "-search:") { searchTextBox.Text = arg.Substring(8); }
|
||||||
if (arg.Length > 11 && arg.Substring(0, 11).ToLower() == "mcrouter://") { authLoginUrl = new Uri(arg); }
|
if (arg.Length > 11 && arg.Substring(0, 11).ToLower() == "mcrouter://") { authLoginUrl = new Uri(arg); }
|
||||||
if ((arg.Length > 1) && (arg[0] != '-') && (arg.ToLower().EndsWith(".mcrouter"))) { try { argflags |= loadMappingFile(File.ReadAllText(arg), 1); } catch (Exception) { } }
|
if ((arg.Length > 1) && (arg[0] != '-') && (arg.ToLower().EndsWith(".mcrouter"))) { try { argflags |= loadMappingFile(File.ReadAllText(arg), 1); } catch (Exception) { } }
|
||||||
|
if (arg.ToLower() == "-localfiles") { FileViewer fileViewer = new FileViewer(meshcentral, null); fileViewer.Show(); }
|
||||||
}
|
}
|
||||||
autoLogin = (argflags == 7);
|
autoLogin = (argflags == 7);
|
||||||
|
|
||||||
@@ -1476,6 +1477,24 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void remoteFilesToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (devicesListView.SelectedItems.Count != 1) { return; }
|
||||||
|
ListViewItem selecteditem = devicesListView.SelectedItems[0];
|
||||||
|
NodeClass node = (NodeClass)selecteditem.Tag;
|
||||||
|
if ((node.conn & 1) == 0) { return; } // Agent not connected on this device
|
||||||
|
if (node.fileViewer == null)
|
||||||
|
{
|
||||||
|
node.fileViewer = new FileViewer(meshcentral, node);
|
||||||
|
node.fileViewer.Show();
|
||||||
|
node.fileViewer.MenuItemConnect_Click(null, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node.fileViewer.Focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
private delegate void displayMessageHandler(string msg, int buttons, string extra, int progress);
|
private delegate void displayMessageHandler(string msg, int buttons, string extra, int progress);
|
||||||
private void displayMessage(string msg, int buttons = 0, string extra = "", int progress = 0)
|
private void displayMessage(string msg, int buttons = 0, string extra = "", int progress = 0)
|
||||||
|
|||||||
@@ -1425,6 +1425,12 @@
|
|||||||
<data name="remoteDesktopToolStripMenuItem.Text" xml:space="preserve">
|
<data name="remoteDesktopToolStripMenuItem.Text" xml:space="preserve">
|
||||||
<value>Remote Desktop...</value>
|
<value>Remote Desktop...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="remoteFilesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>170, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="remoteFilesToolStripMenuItem.Text" xml:space="preserve">
|
||||||
|
<value>Remote Files...</value>
|
||||||
|
</data>
|
||||||
<data name="httpToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="httpToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>170, 22</value>
|
<value>170, 22</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1456,7 +1462,7 @@
|
|||||||
<value>SCP</value>
|
<value>SCP</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="devicesContextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="devicesContextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>171, 186</value>
|
<value>171, 230</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>devicesContextMenuStrip.Name" xml:space="preserve">
|
<data name=">>devicesContextMenuStrip.Name" xml:space="preserve">
|
||||||
<value>devicesContextMenuStrip</value>
|
<value>devicesContextMenuStrip</value>
|
||||||
@@ -1472,7 +1478,7 @@
|
|||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg
|
||||||
HQAAAk1TRnQBSQFMAgEBEAEAASABAAEgAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
HQAAAk1TRnQBSQFMAgEBEAEAASgBAAEoAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||||
AwABUAMAAQEBAAEYBgABPP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AJYAA/0D+AP3A/sD/yEAA/0D+gP5
|
AwABUAMAAQEBAAEYBgABPP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AJYAA/0D+AP3A/sD/yEAA/0D+gP5
|
||||||
A/wD/xgAAfoB+wH6A/4qAAP9A/8tAAP7A88D1QPbA88D1AO+A9QYAAP8A90D4APjA90D4APUA+MSAAP8
|
A/wD/xgAAfoB+wH6A/4qAAP9A/8tAAP7A88D1QPbA88D1AO+A9QYAAP8A90D4APjA90D4APUA+MSAAP8
|
||||||
AZEBjwF9AU4BaAEhAfQB9QH0JAAD/gPRA8YD+ioAAcYCxwHPAtAB2ALZA90DywPBA68DmgP3FQAD2APd
|
AZEBjwF9AU4BaAEhAfQB9QH0JAAD/gPRA8YD+ioAAcYCxwHPAtAB2ALZA90DywPBA68DmgP3FQAD2APd
|
||||||
@@ -1639,7 +1645,7 @@
|
|||||||
<value>2, 88</value>
|
<value>2, 88</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noSearchResultsLabel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="noSearchResultsLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>442, 52</value>
|
<value>438, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noSearchResultsLabel.TabIndex" type="System.Int32, mscorlib">
|
<data name="noSearchResultsLabel.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>5</value>
|
<value>5</value>
|
||||||
@@ -1678,7 +1684,7 @@
|
|||||||
<value>2, 88</value>
|
<value>2, 88</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noDevicesLabel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="noDevicesLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>442, 52</value>
|
<value>438, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noDevicesLabel.TabIndex" type="System.Int32, mscorlib">
|
<data name="noDevicesLabel.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>4</value>
|
<value>4</value>
|
||||||
@@ -1768,7 +1774,7 @@
|
|||||||
<value>2, 79</value>
|
<value>2, 79</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noMapLabel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="noMapLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>442, 52</value>
|
<value>438, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="noMapLabel.TabIndex" type="System.Int32, mscorlib">
|
<data name="noMapLabel.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>4</value>
|
<value>4</value>
|
||||||
@@ -5910,6 +5916,12 @@ Click "Add" to get started.</value>
|
|||||||
<data name=">>saveMapFileDialog.Type" xml:space="preserve">
|
<data name=">>saveMapFileDialog.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>remoteFilesToolStripMenuItem.Name" xml:space="preserve">
|
||||||
|
<value>remoteFilesToolStripMenuItem</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>remoteFilesToolStripMenuItem.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>MainForm</value>
|
<value>MainForm</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -100,6 +100,12 @@
|
|||||||
<Compile Include="AppLaunchForm.Designer.cs">
|
<Compile Include="AppLaunchForm.Designer.cs">
|
||||||
<DependentUpon>AppLaunchForm.cs</DependentUpon>
|
<DependentUpon>AppLaunchForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="FileViewer.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="FileViewer.Designer.cs">
|
||||||
|
<DependentUpon>FileViewer.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="InstallForm.cs">
|
<Compile Include="InstallForm.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -392,6 +398,9 @@
|
|||||||
<EmbeddedResource Include="DeviceUserControl.zh-chs.resx">
|
<EmbeddedResource Include="DeviceUserControl.zh-chs.resx">
|
||||||
<DependentUpon>DeviceUserControl.cs</DependentUpon>
|
<DependentUpon>DeviceUserControl.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="FileViewer.resx">
|
||||||
|
<DependentUpon>FileViewer.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="InstallForm.cs.resx">
|
<EmbeddedResource Include="InstallForm.cs.resx">
|
||||||
<DependentUpon>InstallForm.cs</DependentUpon>
|
<DependentUpon>InstallForm.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace MeshCentralRouter
|
|||||||
public ListViewItem listitem;
|
public ListViewItem listitem;
|
||||||
public DeviceUserControl control;
|
public DeviceUserControl control;
|
||||||
public KVMViewer desktopViewer;
|
public KVMViewer desktopViewer;
|
||||||
|
public FileViewer fileViewer;
|
||||||
public Dictionary<string, ulong> links;
|
public Dictionary<string, ulong> links;
|
||||||
|
|
||||||
public override string ToString() { return name; }
|
public override string ToString() { return name; }
|
||||||
|
|||||||
BIN
Resources/drive16.png
Normal file
BIN
Resources/drive16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 239 B |
BIN
Resources/file16.png
Normal file
BIN
Resources/file16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 213 B |
BIN
Resources/folder16.png
Normal file
BIN
Resources/folder16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 304 B |
Reference in New Issue
Block a user