diff --git a/FileTransferStatusForm.Designer.cs b/FileTransferStatusForm.Designer.cs
index aeb794b..b9a16b4 100644
--- a/FileTransferStatusForm.Designer.cs
+++ b/FileTransferStatusForm.Designer.cs
@@ -32,12 +32,15 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileTransferStatusForm));
this.cancelButton = new System.Windows.Forms.Button();
this.mainGroupBox = new System.Windows.Forms.GroupBox();
+ this.errorsTextBox = new System.Windows.Forms.TextBox();
+ this.mainLabel2 = new System.Windows.Forms.Label();
this.progressBar2 = new System.Windows.Forms.ProgressBar();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.mainLabel1 = new System.Windows.Forms.Label();
this.updateTimer = new System.Windows.Forms.Timer(this.components);
- this.mainLabel2 = new System.Windows.Forms.Label();
+ this.errorsGroupBox = new System.Windows.Forms.GroupBox();
this.mainGroupBox.SuspendLayout();
+ this.errorsGroupBox.SuspendLayout();
this.SuspendLayout();
//
// cancelButton
@@ -58,6 +61,18 @@
this.mainGroupBox.Name = "mainGroupBox";
this.mainGroupBox.TabStop = false;
//
+ // errorsTextBox
+ //
+ resources.ApplyResources(this.errorsTextBox, "errorsTextBox");
+ this.errorsTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.errorsTextBox.Name = "errorsTextBox";
+ this.errorsTextBox.ReadOnly = true;
+ //
+ // mainLabel2
+ //
+ resources.ApplyResources(this.mainLabel2, "mainLabel2");
+ this.mainLabel2.Name = "mainLabel2";
+ //
// progressBar2
//
resources.ApplyResources(this.progressBar2, "progressBar2");
@@ -78,16 +93,19 @@
this.updateTimer.Interval = 500;
this.updateTimer.Tick += new System.EventHandler(this.updateTimer_Tick);
//
- // mainLabel2
+ // errorsGroupBox
//
- resources.ApplyResources(this.mainLabel2, "mainLabel2");
- this.mainLabel2.Name = "mainLabel2";
+ this.errorsGroupBox.Controls.Add(this.errorsTextBox);
+ resources.ApplyResources(this.errorsGroupBox, "errorsGroupBox");
+ this.errorsGroupBox.Name = "errorsGroupBox";
+ this.errorsGroupBox.TabStop = false;
//
// FileTransferStatusForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancelButton;
+ this.Controls.Add(this.errorsGroupBox);
this.Controls.Add(this.mainGroupBox);
this.Controls.Add(this.cancelButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
@@ -97,6 +115,8 @@
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FileTransferStatusForm_FormClosing);
this.Load += new System.EventHandler(this.FileTransferStatusForm_Load);
this.mainGroupBox.ResumeLayout(false);
+ this.errorsGroupBox.ResumeLayout(false);
+ this.errorsGroupBox.PerformLayout();
this.ResumeLayout(false);
}
@@ -110,5 +130,7 @@
private System.Windows.Forms.Label mainLabel1;
private System.Windows.Forms.Timer updateTimer;
private System.Windows.Forms.Label mainLabel2;
+ private System.Windows.Forms.TextBox errorsTextBox;
+ private System.Windows.Forms.GroupBox errorsGroupBox;
}
}
\ No newline at end of file
diff --git a/FileTransferStatusForm.cs b/FileTransferStatusForm.cs
index cd6494e..d8fa0c3 100644
--- a/FileTransferStatusForm.cs
+++ b/FileTransferStatusForm.cs
@@ -15,6 +15,7 @@ limitations under the License.
*/
using System;
+using System.Drawing;
using System.Windows.Forms;
namespace MeshCentralRouter
@@ -22,6 +23,12 @@ namespace MeshCentralRouter
public partial class FileTransferStatusForm : Form
{
private FileViewer fileViewer;
+ private bool loaded = false;
+ public bool showingError = false;
+ private string errors = "";
+ private bool done = false;
+ private Point mainBoxLocation;
+ private Point errorBoxLocation;
public FileTransferStatusForm(FileViewer fileViewer)
{
@@ -30,6 +37,8 @@ namespace MeshCentralRouter
Translate.TranslateControl(this);
updateInfo();
updateTimer.Enabled = true;
+ mainBoxLocation = mainGroupBox.Location;
+ errorBoxLocation = errorsGroupBox.Location;
}
private void updateTimer_Tick(object sender, EventArgs e)
@@ -37,6 +46,31 @@ namespace MeshCentralRouter
updateInfo();
}
+ public delegate void updateErrorMessageshandler();
+
+ public void addErrorMessage(string msg)
+ {
+ lock (this)
+ {
+ errors += (msg + "\r\n");
+ showingError = true;
+ }
+ if (loaded == false) return;
+ if (this.InvokeRequired) { this.Invoke(new updateErrorMessageshandler(updateErrorMessages)); } else { updateErrorMessages(); }
+ }
+
+ public void updateErrorMessages()
+ {
+ showDialogParts(!done, showingError);
+ lock (this) { errorsTextBox.Text = errors; }
+ }
+
+ public void transferCompleted()
+ {
+ done = true;
+ showDialogParts(!done, showingError);
+ }
+
private void updateInfo()
{
if (fileViewer.uploadActive)
@@ -87,7 +121,11 @@ namespace MeshCentralRouter
if (x > (int)fileViewer.downloadFileArray.Count) { x = fileViewer.downloadFileArray.Count; }
progressBar2.Value = fileViewer.downloadFileArrayPtr;
}
- else { Close(); }
+ else
+ {
+ done = true;
+ if (showingError == false) { Close(); } else { cancelButton.Text = Translate.T(Properties.Resources.Close); }
+ }
}
private string secondsLeftToString(double x)
@@ -114,12 +152,60 @@ namespace MeshCentralRouter
private void cancelButton_Click(object sender, EventArgs e)
{
- Close();
+ if (done)
+ {
+ fileViewer.transferStatusForm = null;
+ Close();
+ }
+ else
+ {
+ // Cancel file transfer
+ if (fileViewer.uploadActive) { fileViewer.uploadCancel(); }
+ if (fileViewer.downloadActive) { fileViewer.downloadCancel(); }
+ }
}
private void FileTransferStatusForm_Load(object sender, EventArgs e)
{
CenterToParent();
+ lock (this) { errorsTextBox.Text = errors; }
+ loaded = true;
+ showDialogParts(!done, showingError);
}
+
+ private void showDialogParts(bool status, bool errors)
+ {
+ mainGroupBox.Visible = status;
+ errorsGroupBox.Visible = errors;
+ if (errors == false)
+ {
+ if (status == false)
+ {
+ // Show nothing
+ this.Height = 109;
+ }
+ else
+ {
+ // Show only status box
+ this.Height = mainGroupBox.Height + 99;
+ }
+ }
+ else
+ {
+ if (status == false)
+ {
+ // Show only error box
+ this.Height = errorsGroupBox.Height + 99;
+ errorsGroupBox.Location = mainBoxLocation;
+ }
+ else
+ {
+ // Show both status and error box
+ this.Height = mainGroupBox.Height + errorsGroupBox.Height + 109;
+ errorsGroupBox.Location = errorBoxLocation;
+ }
+ }
+ }
+
}
}
diff --git a/FileTransferStatusForm.resx b/FileTransferStatusForm.resx
index 5de3228..3aec102 100644
--- a/FileTransferStatusForm.resx
+++ b/FileTransferStatusForm.resx
@@ -123,7 +123,7 @@
- 277, 130
+ 277, 244
75, 23
@@ -145,11 +145,110 @@
$this
- 1
+ 2
+ Top, Left, Right
+
+
+ mainLabel2
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ mainGroupBox
+
+
+ 0
+
+
+ progressBar2
+
+
+ System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ mainGroupBox
+
+
+ 1
+
+
+ progressBar1
+
+
+ System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ mainGroupBox
+
+
+ 2
+
+
+ mainLabel1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ mainGroupBox
+
+
+ 3
+
+
+ 12, 12
+
+
+ 340, 109
+
+
+ 4
+
+
+ Transfer Progress
+
+
+ mainGroupBox
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
Top, Bottom, Left, Right
+
+ 17, 19
+
+
+ True
+
+
+ 306, 84
+
+
+ 6
+
+
+ errorsTextBox
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ errorsGroupBox
+
+
+ 0
+
Top, Left, Right
@@ -255,33 +354,33 @@
3
-
- 12, 12
-
-
- 340, 112
-
-
- 4
-
-
- Transfer Progress
-
-
- mainGroupBox
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
-
17, 17
+
+ 12, 127
+
+
+ 340, 109
+
+
+ 7
+
+
+ Transfer Errors
+
+
+ errorsGroupBox
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0
+
True
@@ -289,7 +388,7 @@
6, 13
- 364, 165
+ 364, 279
@@ -1985,6 +2084,9 @@
AADAPwAAwD8AAMA/AADAPwAA
+
+ NoControl
+
CenterParent
diff --git a/FileViewer.cs b/FileViewer.cs
index 9a223b5..2923ee9 100644
--- a/FileViewer.cs
+++ b/FileViewer.cs
@@ -60,6 +60,7 @@ namespace MeshCentralRouter
public long uploadFilePtr = 0;
public long uploadFileSize = 0;
public DateTime uploadFileStartTime = DateTime.MinValue;
+ public string uploadFileName = null;
// Download state
public bool downloadActive = false;
@@ -445,8 +446,35 @@ namespace MeshCentralRouter
}
else if (sub == "cancel")
{
- // Cancel the download
- downloadCancel();
+ // Unable to download this file
+ if (transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.ErrorDownloadingFileX), downloadFileArray[downloadFileArrayPtr].ToString())); }
+
+ // Send DOWNLOAD command
+ string cmd = "{\"action\":\"download\",\"sub\":\"stop\",\"id\":" + (downloadFileArrayPtr + 1000) + "}";
+ byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
+ wc.SendBinary(bincmd, 0, bincmd.Length);
+ if (downloadFileStream != null) { downloadFileStream.Close(); downloadFileStream = null; } // Close the file
+ try { File.Delete(Path.Combine(downloadLocalPath.FullName, downloadFileArray[downloadFileArrayPtr].ToString())); } catch (Exception) { }
+
+ // Go to next file
+ if (downloadFileArray.Count > downloadFileArrayPtr + 1)
+ {
+ // Download the next file
+ downloadFileArrayPtr++;
+ downloadNextFile();
+ }
+ else
+ {
+ // Done with all files
+ downloadActive = false;
+ downloadStop = false;
+ downloadFileArrayPtr = -1;
+ downloadFileArray = null;
+ downloadLocalPath = null;
+ downloadRemotePath = null;
+ closeTransferDialog();
+ localRefresh();
+ }
}
break;
}
@@ -511,13 +539,16 @@ namespace MeshCentralRouter
if (uploadStop) { uploadCancel(); return; }
uploadNextPart(false);
}
- else if (action == "uploaddone")
+ else if ((action == "uploaddone") || (action == "uploaderror"))
{
// Clean up current upload
uploadFilePtr = 0;
uploadFileSize = 0;
if (uploadFileStream != null) { uploadFileStream.Close(); uploadFileStream = null; }
+ // If this is an error, show it in the dialog
+ if ((action == "uploaderror") && (transferStatusForm != null)) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.ErrorUploadingFileX), uploadFileName)); }
+
// Check if another file needs to be uploaded
if (uploadFileArray.Count > uploadFileArrayPtr + 1)
{
@@ -536,14 +567,11 @@ namespace MeshCentralRouter
uploadRemotePath = null;
uploadFilePtr = 0;
uploadFileSize = 0;
+ uploadFileName = null;
closeTransferDialog();
remoteRefresh();
}
}
- else if (action == "uploaderror")
- {
- uploadCancel();
- }
else if (reqid == 1)
{
// Result of a LS command
@@ -765,13 +793,7 @@ namespace MeshCentralRouter
string r = remoteFolder;
if (r.EndsWith("/")) { r = r.Substring(0, r.Length - 1); }
int i = r.LastIndexOf("/");
- if (i >= 0)
- {
- r = r.Substring(0, i + 1);
- } else
- {
- r = "";
- }
+ if (i >= 0) { r = r.Substring(0, i + 1); } else { r = ""; }
requestRemoteFolder(r);
}
@@ -948,7 +970,7 @@ namespace MeshCentralRouter
private void uploadButton_Click(object sender, EventArgs e)
{
// If a transfer is currently active, ignore this.
- if (uploadActive || downloadActive) return;
+ if (uploadActive || downloadActive || (transferStatusForm != null)) return;
// If any files are going to be overwritten
int overWriteCount = 0;
@@ -989,11 +1011,12 @@ namespace MeshCentralRouter
uploadRemotePath = remoteFolder;
uploadActive = true;
uploadStop = false;
- uploadNextFile();
// Show transfer status dialog
transferStatusForm = new FileTransferStatusForm(this);
transferStatusForm.Show(this);
+
+ uploadNextFile();
}
private void uploadNextFile()
@@ -1011,10 +1034,40 @@ namespace MeshCentralRouter
localFilePath = (string)uploadFileArray[uploadFileArrayPtr];
localFileName = Path.GetFileName(localFilePath);
}
- uploadFileStream = File.OpenRead(localFilePath);
+ try { uploadFileStream = File.OpenRead(localFilePath); } catch (Exception ex)
+ {
+ // Display the error
+ if (transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToOpenFileX), localFileName)); }
+
+ // Skip to the next file
+ // Check if another file needs to be uploaded
+ if (uploadFileArray.Count > uploadFileArrayPtr + 1)
+ {
+ // Upload the next file
+ uploadFileArrayPtr++;
+ uploadNextFile();
+ }
+ else
+ {
+ // Done with all files
+ uploadActive = false;
+ uploadStop = false;
+ uploadFileArrayPtr = -1;
+ uploadFileArray = null;
+ uploadLocalPath = null;
+ uploadRemotePath = null;
+ uploadFilePtr = 0;
+ uploadFileSize = 0;
+ uploadFileName = null;
+ closeTransferDialog();
+ remoteRefresh();
+ }
+ return;
+ }
uploadFileSize = new FileInfo(localFilePath).Length;
uploadFilePtr = 0;
uploadFileStartTime = DateTime.Now;
+ uploadFileName = localFileName;
// Send UPLOAD command
string cmd = "{\"action\":\"upload\",\"reqid\":" + (uploadFileArrayPtr + 1000) + ",\"path\":\"" + uploadRemotePath + "\",\"name\":\"" + localFileName + "\",\"size\":" + uploadFileSize + "}";
@@ -1071,13 +1124,21 @@ namespace MeshCentralRouter
{
if (transferStatusForm == null) return;
if (this.InvokeRequired) { this.Invoke(new closeTransferDialogHandler(closeTransferDialog)); return; }
- transferStatusForm.Close(); transferStatusForm = null;
+ if (transferStatusForm.showingError == false)
+ {
+ // Everything was succesful, close the form
+ transferStatusForm.Close();
+ transferStatusForm = null;
+ } else {
+ // Error are displayed, keep the form open
+ transferStatusForm.transferCompleted();
+ }
}
private void downloadButton_Click(object sender, EventArgs e)
{
// If a transfer is currently active, ignore this.
- if (uploadActive || downloadActive) return;
+ if (uploadActive || downloadActive || (transferStatusForm != null)) return;
// If any files are going to be overwritten
int overWriteCount = 0;
@@ -1103,16 +1164,10 @@ namespace MeshCentralRouter
{
FileConfirmOverwriteForm f = new FileConfirmOverwriteForm();
if (overWriteCount == 1) { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteOneFile), overWriteCount); } else { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteXfiles), overWriteCount); }
- if (f.ShowDialog(this) == DialogResult.OK) { performFileDownload(); }
+ if (f.ShowDialog(this) != DialogResult.OK) return;
}
- else
- {
- performFileDownload();
- }
- }
- private void performFileDownload()
- {
+ // Perform the download
downloadFileArrayPtr = 0;
downloadFileArray = new ArrayList();
downloadFileSizeArray = new ArrayList();
@@ -1128,11 +1183,12 @@ namespace MeshCentralRouter
downloadRemotePath = remoteFolder;
downloadActive = true;
downloadStop = false;
- downloadNextFile();
// Show transfer status dialog
transferStatusForm = new FileTransferStatusForm(this);
transferStatusForm.Show(this);
+
+ downloadNextFile();
}
private void downloadNextFile()
@@ -1141,7 +1197,32 @@ namespace MeshCentralRouter
string localFilePath;
localFilePath = Path.Combine(downloadLocalPath.FullName, (string)downloadFileArray[downloadFileArrayPtr]);
- try { downloadFileStream = File.OpenWrite(localFilePath); } catch (Exception) { return; }
+ try { downloadFileStream = File.OpenWrite(localFilePath); } catch (Exception) {
+ // Download error, show it in the dialog
+ FileInfo f = new FileInfo(localFilePath);
+ if (transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToWriteFileX), f.Name)); }
+
+ // Unable to download the file, skip it.
+ if (downloadFileArray.Count > downloadFileArrayPtr + 1)
+ {
+ // Download the next file
+ downloadFileArrayPtr++;
+ downloadNextFile();
+ }
+ else
+ {
+ // Done with all files
+ downloadActive = false;
+ downloadStop = false;
+ downloadFileArrayPtr = -1;
+ downloadFileArray = null;
+ downloadLocalPath = null;
+ downloadRemotePath = null;
+ closeTransferDialog();
+ localRefresh();
+ }
+ return;
+ }
downloadFileSize = (int)downloadFileSizeArray[downloadFileArrayPtr];
downloadFilePtr = 0;
downloadFileStartTime = DateTime.Now;
@@ -1199,7 +1280,6 @@ namespace MeshCentralRouter
}
}
-
public void downloadCancel()
{
if (downloadActive == false) return;
@@ -1259,28 +1339,54 @@ namespace MeshCentralRouter
private void rightListView_DragEnter(object sender, DragEventArgs e)
{
- if (uploadActive || downloadActive) return;
+ if (uploadActive || downloadActive || (transferStatusForm != null)) return;
if ((node.agentid < 5) && ((remoteFolder == null) || (remoteFolder == ""))) { return; }
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
private void rightListView_DragDrop(object sender, DragEventArgs e)
{
- if (uploadActive || downloadActive) return;
+ if (uploadActive || downloadActive || (transferStatusForm != null)) return;
if ((node.agentid < 5) && ((remoteFolder == null) || (remoteFolder == ""))) { return; }
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+
+ // If any files are going to be overwritten
+ int overWriteCount = 0;
+ foreach (string file in files)
+ {
+ FileInfo f = new FileInfo(file);
+ string filename = f.Name;
+ foreach (ListViewItem l2 in rightListView.Items)
+ {
+ if (l2.ImageIndex == 2)
+ {
+ string filename2 = l2.Text;
+ if (node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
+ if (filename.Equals(filename2)) { overWriteCount++; }
+ }
+ }
+ }
+ if (overWriteCount > 0)
+ {
+ FileConfirmOverwriteForm f = new FileConfirmOverwriteForm();
+ if (overWriteCount == 1) { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteOneFile), overWriteCount); } else { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteXfiles), overWriteCount); }
+ if (f.ShowDialog(this) != DialogResult.OK) return;
+ }
+
+ // Perform the upload
uploadFileArrayPtr = 0;
uploadFileArray = new ArrayList();
- string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) { uploadFileArray.Add(file); }
uploadLocalPath = null;
uploadRemotePath = remoteFolder;
uploadActive = true;
uploadStop = false;
- uploadNextFile();
// Show transfer status dialog
transferStatusForm = new FileTransferStatusForm(this);
transferStatusForm.Show(this);
+
+ uploadNextFile();
}
private void leftListView_MouseMove(object sender, MouseEventArgs e)
@@ -1324,14 +1430,40 @@ namespace MeshCentralRouter
private void leftListView_DragEnter(object sender, DragEventArgs e)
{
- if (uploadActive || downloadActive || (localFolder == null)) return;
+ if (uploadActive || downloadActive || (localFolder == null) || (transferStatusForm != null)) return;
if ((e.Data.GetDataPresent("Type") == true) && ((string)e.Data.GetData("Type") == ("MeshCentralRouterRemoteFiles-" + rndString))) { e.Effect = DragDropEffects.Copy; }
}
private void leftListView_DragDrop(object sender, DragEventArgs e)
{
- if (uploadActive || downloadActive) return;
+ if (uploadActive || downloadActive || (transferStatusForm != null)) return;
if ((e.Data.GetDataPresent("Type") == false) || ((string)e.Data.GetData("Type") != ("MeshCentralRouterRemoteFiles-" + rndString))) return;
+
+ ArrayList files = (ArrayList)e.Data.GetData("RemoteFiles");
+
+ // If any files are going to be overwritten
+ int overWriteCount = 0;
+ foreach (string file in files)
+ {
+ string filename = file;
+ foreach (ListViewItem l2 in leftListView.Items)
+ {
+ if (l2.ImageIndex == 2)
+ {
+ string filename2 = l2.Text;
+ if (node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
+ if (filename.Equals(filename2)) { overWriteCount++; }
+ }
+ }
+ }
+ if (overWriteCount > 0)
+ {
+ FileConfirmOverwriteForm f = new FileConfirmOverwriteForm();
+ if (overWriteCount == 1) { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteOneFile), overWriteCount); } else { f.mainTextLabel = String.Format(Translate.T(Properties.Resources.OverwriteXfiles), overWriteCount); }
+ if (f.ShowDialog(this) != DialogResult.OK) return;
+ }
+
+ // Perform downloads
downloadFileArrayPtr = 0;
downloadFileArray = (ArrayList)e.Data.GetData("RemoteFiles");
downloadFileSizeArray = (ArrayList)e.Data.GetData("RemoteSizes");
@@ -1339,11 +1471,12 @@ namespace MeshCentralRouter
downloadRemotePath = (string)e.Data.GetData("RemoteFolder");
downloadActive = true;
downloadStop = false;
- downloadNextFile();
// Show transfer status dialog
transferStatusForm = new FileTransferStatusForm(this);
transferStatusForm.Show(this);
+
+ downloadNextFile();
}
private static string getRandomString(int length)
{
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index 6d4c8d1..8143e05 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -143,6 +143,15 @@ namespace MeshCentralRouter.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Close.
+ ///
+ internal static string Close {
+ get {
+ return ResourceManager.GetString("Close", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -281,6 +290,24 @@ namespace MeshCentralRouter.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Error downloading file: {0}.
+ ///
+ internal static string ErrorDownloadingFileX {
+ get {
+ return ResourceManager.GetString("ErrorDownloadingFileX", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Error uploading file: {0}.
+ ///
+ internal static string ErrorUploadingFileX {
+ get {
+ return ResourceManager.GetString("ErrorUploadingFileX", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Estimating....
///
@@ -879,6 +906,24 @@ namespace MeshCentralRouter.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Unable to open file: {0}.
+ ///
+ internal static string UnableToOpenFileX {
+ get {
+ return ResourceManager.GetString("UnableToOpenFileX", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unable to write file: {0}.
+ ///
+ internal static string UnableToWriteFileX {
+ get {
+ return ResourceManager.GetString("UnableToWriteFileX", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Updating....
///
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index afceb7c..ab2a104 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -427,4 +427,19 @@
{0} seconds left
+
+ Close
+
+
+ Error downloading file: {0}
+
+
+ Error uploading file: {0}
+
+
+ Unable to open file: {0}
+
+
+ Unable to write file: {0}
+
\ No newline at end of file