mirror of
https://github.com/Ylianst/MeshCentralRouter
synced 2025-12-19 01:33:36 +00:00
download Folders recursively
This commit is contained in:
309
FileViewer.cs
309
FileViewer.cs
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2009-2022 Intel Corporation
|
Copyright 2009-2021 Intel Corporation
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -171,8 +171,10 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
|
|
||||||
private delegate void updateRemoteFileViewHandler();
|
private delegate void updateRemoteFileViewHandler();
|
||||||
|
public bool bDontupdateRemoteFileView = false; // Flynn
|
||||||
public void updateRemoteFileView()
|
public void updateRemoteFileView()
|
||||||
{
|
{
|
||||||
|
if(bDontupdateRemoteFileView) return; // Flynn
|
||||||
if(this.InvokeRequired) { this.Invoke(new updateRemoteFileViewHandler(updateRemoteFileView)); return; }
|
if(this.InvokeRequired) { this.Invoke(new updateRemoteFileViewHandler(updateRemoteFileView)); return; }
|
||||||
|
|
||||||
// Save the list of selected items
|
// Save the list of selected items
|
||||||
@@ -181,10 +183,13 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
rightListView.Items.Clear();
|
rightListView.Items.Clear();
|
||||||
|
|
||||||
if ((remoteFolder == null) || (remoteFolder == "")) {
|
if((remoteFolder == null) || (remoteFolder == ""))
|
||||||
|
{
|
||||||
remoteLabel.Text = Translate.T(Properties.Resources.Remote);
|
remoteLabel.Text = Translate.T(Properties.Resources.Remote);
|
||||||
mainToolTip.SetToolTip(remoteLabel, Translate.T(Properties.Resources.Remote));
|
mainToolTip.SetToolTip(remoteLabel, Translate.T(Properties.Resources.Remote));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if(node.agentid < 5)
|
if(node.agentid < 5)
|
||||||
{
|
{
|
||||||
remoteLabel.Text = string.Format(Translate.T(Properties.Resources.RemotePlus), remoteFolder.Replace("/", "\\"));
|
remoteLabel.Text = string.Format(Translate.T(Properties.Resources.RemotePlus), remoteFolder.Replace("/", "\\"));
|
||||||
@@ -200,10 +205,13 @@ namespace MeshCentralRouter
|
|||||||
remoteRefreshButton.Enabled = true;
|
remoteRefreshButton.Enabled = true;
|
||||||
remoteRootButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
remoteRootButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
||||||
remoteUpButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
remoteUpButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
||||||
if (node.agentid < 5) {
|
if(node.agentid < 5)
|
||||||
|
{
|
||||||
remoteNewFolderButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
remoteNewFolderButton.Enabled = !((remoteFolder == null) || (remoteFolder == ""));
|
||||||
remoteDeleteButton.Enabled = remoteZipButton.Enabled = (!((remoteFolder == null) || (remoteFolder == ""))) && (rightListView.SelectedItems.Count > 0);
|
remoteDeleteButton.Enabled = remoteZipButton.Enabled = (!((remoteFolder == null) || (remoteFolder == ""))) && (rightListView.SelectedItems.Count > 0);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
remoteNewFolderButton.Enabled = true;
|
remoteNewFolderButton.Enabled = true;
|
||||||
remoteDeleteButton.Enabled = remoteZipButton.Enabled = (rightListView.SelectedItems.Count > 0);
|
remoteDeleteButton.Enabled = remoteZipButton.Enabled = (rightListView.SelectedItems.Count > 0);
|
||||||
}
|
}
|
||||||
@@ -223,13 +231,17 @@ namespace MeshCentralRouter
|
|||||||
if(fileItem.ContainsKey("t")) { fileIcon = (int)fileItem["t"]; }
|
if(fileItem.ContainsKey("t")) { fileIcon = (int)fileItem["t"]; }
|
||||||
if(fileItem.ContainsKey("n")) { fileName = (string)fileItem["n"]; }
|
if(fileItem.ContainsKey("n")) { fileName = (string)fileItem["n"]; }
|
||||||
if(fileItem.ContainsKey("d")) { fileDate = (string)fileItem["d"]; }
|
if(fileItem.ContainsKey("d")) { fileDate = (string)fileItem["d"]; }
|
||||||
if (fileItem.ContainsKey("s")) {
|
if(fileItem.ContainsKey("s"))
|
||||||
|
{
|
||||||
if(fileItem["s"].GetType() == typeof(System.Int32)) { fileSize = (int)fileItem["s"]; }
|
if(fileItem["s"].GetType() == typeof(System.Int32)) { fileSize = (int)fileItem["s"]; }
|
||||||
if(fileItem["s"].GetType() == typeof(System.Int64)) { fileSize = (long)fileItem["s"]; }
|
if(fileItem["s"].GetType() == typeof(System.Int64)) { fileSize = (long)fileItem["s"]; }
|
||||||
}
|
}
|
||||||
if (fileIcon == 1) {
|
if(fileIcon == 1)
|
||||||
|
{
|
||||||
sortlist.Add(new ListViewItem(fileName, 0)); // Drive
|
sortlist.Add(new ListViewItem(fileName, 0)); // Drive
|
||||||
} else if (fileIcon == 2) {
|
}
|
||||||
|
else if(fileIcon == 2)
|
||||||
|
{
|
||||||
sortlist.Add(new ListViewItem(fileName, 1)); // Folder
|
sortlist.Add(new ListViewItem(fileName, 1)); // Folder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -475,14 +487,14 @@ namespace MeshCentralRouter
|
|||||||
else if(sub == "cancel")
|
else if(sub == "cancel")
|
||||||
{
|
{
|
||||||
// Unable to download this file
|
// Unable to download this file
|
||||||
if (transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.ErrorDownloadingFileX), downloadFileArray[downloadFileArrayPtr].ToString())); }
|
if(transferStatusForm != null) { try { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.ErrorDownloadingFileX), downloadFileArray[downloadFileArrayPtr].ToString())); } catch { } }
|
||||||
|
|
||||||
// Send DOWNLOAD command
|
// Send DOWNLOAD command
|
||||||
string cmd = "{\"action\":\"download\",\"sub\":\"stop\",\"id\":" + (downloadFileArrayPtr + 1000) + "}";
|
string cmd = "{\"action\":\"download\",\"sub\":\"stop\",\"id\":" + (downloadFileArrayPtr + 1000) + "}";
|
||||||
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
||||||
wc.SendBinary(bincmd, 0, bincmd.Length);
|
wc.SendBinary(bincmd, 0, bincmd.Length);
|
||||||
if(downloadFileStream != null) { downloadFileStream.Close(); downloadFileStream = null; } // Close the file
|
if(downloadFileStream != null) { downloadFileStream.Close(); downloadFileStream = null; } // Close the file
|
||||||
try { File.Delete(Path.Combine(downloadLocalPath.FullName, downloadFileArray[downloadFileArrayPtr].ToString())); } catch (Exception) { }
|
try { File.Delete(Path.Combine(downloadLocalPath.FullName, Path.GetFileName((String)downloadFileArray[downloadFileArrayPtr]).ToString())); } catch(Exception) { }
|
||||||
|
|
||||||
// Go to next file
|
// Go to next file
|
||||||
if(downloadFileArray.Count > downloadFileArrayPtr + 1)
|
if(downloadFileArray.Count > downloadFileArrayPtr + 1)
|
||||||
@@ -508,7 +520,8 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (jsonAction.ContainsKey("type") && (jsonAction["type"].GetType() == typeof(string))) {
|
else if(jsonAction.ContainsKey("type") && (jsonAction["type"].GetType() == typeof(string)))
|
||||||
|
{
|
||||||
string action = jsonAction["type"].ToString();
|
string action = jsonAction["type"].ToString();
|
||||||
switch(action)
|
switch(action)
|
||||||
{
|
{
|
||||||
@@ -546,7 +559,8 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
if(state != 3) return;
|
if(state != 3) return;
|
||||||
|
|
||||||
if (data[offset] == 123) {
|
if(data[offset] == 123)
|
||||||
|
{
|
||||||
// Parse the received JSON
|
// Parse the received JSON
|
||||||
Dictionary<string, object> jsonAction = new Dictionary<string, object>();
|
Dictionary<string, object> jsonAction = new Dictionary<string, object>();
|
||||||
jsonAction = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(UTF8Encoding.UTF8.GetString(data, offset, length));
|
jsonAction = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(UTF8Encoding.UTF8.GetString(data, offset, length));
|
||||||
@@ -613,7 +627,8 @@ namespace MeshCentralRouter
|
|||||||
string remoteHashHex = null;
|
string remoteHashHex = null;
|
||||||
if(jsonAction.ContainsKey("hash")) { remoteHashHex = (string)jsonAction["hash"]; }
|
if(jsonAction.ContainsKey("hash")) { remoteHashHex = (string)jsonAction["hash"]; }
|
||||||
long remoteFileSize = 0;
|
long remoteFileSize = 0;
|
||||||
if (jsonAction.ContainsKey("tag")) {
|
if(jsonAction.ContainsKey("tag"))
|
||||||
|
{
|
||||||
if(jsonAction["tag"].GetType() == typeof(int)) { remoteFileSize = (int)jsonAction["tag"]; }
|
if(jsonAction["tag"].GetType() == typeof(int)) { remoteFileSize = (int)jsonAction["tag"]; }
|
||||||
if(jsonAction["tag"].GetType() == typeof(long)) { remoteFileSize = (long)jsonAction["tag"]; }
|
if(jsonAction["tag"].GetType() == typeof(long)) { remoteFileSize = (long)jsonAction["tag"]; }
|
||||||
}
|
}
|
||||||
@@ -717,7 +732,8 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (downloadActive) {
|
if(downloadActive)
|
||||||
|
{
|
||||||
if(downloadStop) { downloadCancel(); return; }
|
if(downloadStop) { downloadCancel(); return; }
|
||||||
downloadGotBinaryData(data, offset, length);
|
downloadGotBinaryData(data, offset, length);
|
||||||
}
|
}
|
||||||
@@ -919,7 +935,8 @@ namespace MeshCentralRouter
|
|||||||
ListViewItem item = leftListView.GetItemAt(e.X, e.Y);
|
ListViewItem item = leftListView.GetItemAt(e.X, e.Y);
|
||||||
if(item != null)
|
if(item != null)
|
||||||
{
|
{
|
||||||
if (item.Tag.GetType() == typeof(DriveInfo)) {
|
if(item.Tag.GetType() == typeof(DriveInfo))
|
||||||
|
{
|
||||||
DirectoryInfo old = localFolder;
|
DirectoryInfo old = localFolder;
|
||||||
localFolder = ((DriveInfo)item.Tag).RootDirectory;
|
localFolder = ((DriveInfo)item.Tag).RootDirectory;
|
||||||
if(updateLocalFileView() == false) { localFolder = old; updateLocalFileView(); }
|
if(updateLocalFileView() == false) { localFolder = old; updateLocalFileView(); }
|
||||||
@@ -948,10 +965,14 @@ namespace MeshCentralRouter
|
|||||||
if(item != null)
|
if(item != null)
|
||||||
{
|
{
|
||||||
string r = remoteFolder;
|
string r = remoteFolder;
|
||||||
if ((item.ImageIndex == 0) || (item.ImageIndex == 1)) {
|
if((item.ImageIndex == 0) || (item.ImageIndex == 1))
|
||||||
if ((r == null) || (r == "")) {
|
{
|
||||||
|
if((r == null) || (r == ""))
|
||||||
|
{
|
||||||
r = item.Text;
|
r = item.Text;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if(remoteFolder.EndsWith("/")) { r = remoteFolder + item.Text; } else { r = remoteFolder + "/" + item.Text; }
|
if(remoteFolder.EndsWith("/")) { r = remoteFolder + item.Text; } else { r = remoteFolder + "/" + item.Text; }
|
||||||
}
|
}
|
||||||
requestRemoteFolder(r);
|
requestRemoteFolder(r);
|
||||||
@@ -1039,13 +1060,21 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bRightCWChangedBusy = false;
|
||||||
private void rightListView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
private void rightListView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if(bRightCWChangedBusy) return;
|
||||||
|
bRightCWChangedBusy=true;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if(rightListView.Columns[0].Width != (rightListView.Width - rightListView.Columns[1].Width - 22))
|
if(rightListView.Columns[0].Width != (rightListView.Width - rightListView.Columns[1].Width - 22))
|
||||||
{
|
{
|
||||||
rightListView.Columns[0].Width = rightListView.Width - rightListView.Columns[1].Width - 22;
|
rightListView.Columns[0].Width = rightListView.Width - rightListView.Columns[1].Width - 22;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch { }
|
||||||
|
bRightCWChangedBusy = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void leftListView_Resize(object sender, EventArgs e)
|
private void leftListView_Resize(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -1055,13 +1084,21 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bLeftCWChangedBusy = false;
|
||||||
private void leftListView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
private void leftListView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if(bLeftCWChangedBusy) return;
|
||||||
|
bLeftCWChangedBusy=true;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if(leftListView.Columns[0].Width != (leftListView.Width - leftListView.Columns[1].Width - 22))
|
if(leftListView.Columns[0].Width != (leftListView.Width - leftListView.Columns[1].Width - 22))
|
||||||
{
|
{
|
||||||
leftListView.Columns[0].Width = leftListView.Width - leftListView.Columns[1].Width - 22;
|
leftListView.Columns[0].Width = leftListView.Width - leftListView.Columns[1].Width - 22;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch { }
|
||||||
|
bLeftCWChangedBusy = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void updateTimer_Tick(object sender, EventArgs e)
|
private void updateTimer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -1141,7 +1178,7 @@ namespace MeshCentralRouter
|
|||||||
bool downloadAllowed = true;
|
bool downloadAllowed = true;
|
||||||
if(localFolder == null) { downloadAllowed = false; }
|
if(localFolder == null) { downloadAllowed = false; }
|
||||||
if(rightListView.SelectedItems.Count == 0) { downloadAllowed = false; }
|
if(rightListView.SelectedItems.Count == 0) { downloadAllowed = false; }
|
||||||
foreach (ListViewItem l in rightListView.SelectedItems) { if (l.ImageIndex != 2) { downloadAllowed = false; } }
|
foreach(ListViewItem l in rightListView.SelectedItems) { if(l.ImageIndex != 1 && l.ImageIndex != 2) { downloadAllowed = false; } } // Flynn
|
||||||
if((node.agentid < 5) && ((remoteFolder == null) || (remoteFolder == ""))) { downloadAllowed = false; }
|
if((node.agentid < 5) && ((remoteFolder == null) || (remoteFolder == ""))) { downloadAllowed = false; }
|
||||||
downloadButton.Enabled = downloadAllowed;
|
downloadButton.Enabled = downloadAllowed;
|
||||||
}
|
}
|
||||||
@@ -1160,8 +1197,10 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
// If any files are going to be overwritten
|
// If any files are going to be overwritten
|
||||||
int overWriteCount = 0;
|
int overWriteCount = 0;
|
||||||
foreach (ListViewItem l in leftListView.SelectedItems) {
|
foreach(ListViewItem l in leftListView.SelectedItems)
|
||||||
if (l.ImageIndex == 2) {
|
{
|
||||||
|
if(l.ImageIndex == 2)
|
||||||
|
{
|
||||||
string filename = l.Text;
|
string filename = l.Text;
|
||||||
|
|
||||||
foreach(ListViewItem l2 in rightListView.Items)
|
foreach(ListViewItem l2 in rightListView.Items)
|
||||||
@@ -1203,7 +1242,8 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
string filename2 = l2.Text;
|
string filename2 = l2.Text;
|
||||||
if(node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
|
if(node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
|
||||||
if (filename.Equals(filename2)) {
|
if(filename.Equals(filename2))
|
||||||
|
{
|
||||||
overwrite = true;
|
overwrite = true;
|
||||||
if(skipExistingFiles == false)
|
if(skipExistingFiles == false)
|
||||||
{
|
{
|
||||||
@@ -1251,7 +1291,8 @@ namespace MeshCentralRouter
|
|||||||
localFilePath = (string)uploadFileArray[uploadFileArrayPtr];
|
localFilePath = (string)uploadFileArray[uploadFileArrayPtr];
|
||||||
localFileName = Path.GetFileName(localFilePath);
|
localFileName = Path.GetFileName(localFilePath);
|
||||||
}
|
}
|
||||||
try { uploadFileStream = File.OpenRead(localFilePath); } catch (Exception)
|
try { uploadFileStream = File.OpenRead(localFilePath); }
|
||||||
|
catch(Exception)
|
||||||
{
|
{
|
||||||
// Display the error
|
// Display the error
|
||||||
if(transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToOpenFileX), localFileName)); }
|
if(transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToOpenFileX), localFileName)); }
|
||||||
@@ -1339,12 +1380,15 @@ namespace MeshCentralRouter
|
|||||||
if(dataPriming && (len == 0)) return;
|
if(dataPriming && (len == 0)) return;
|
||||||
uploadFilePtr += len;
|
uploadFilePtr += len;
|
||||||
|
|
||||||
if (len == 0) {
|
if(len == 0)
|
||||||
|
{
|
||||||
// Send UPLOADDONE command
|
// Send UPLOADDONE command
|
||||||
string cmd = "{\"action\":\"uploaddone\",\"reqid\":" + (uploadFileArrayPtr + 1000) + "}";
|
string cmd = "{\"action\":\"uploaddone\",\"reqid\":" + (uploadFileArrayPtr + 1000) + "}";
|
||||||
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
||||||
wc.SendBinary(bincmd, 0, bincmd.Length);
|
wc.SendBinary(bincmd, 0, bincmd.Length);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Send part of the file
|
// Send part of the file
|
||||||
// If starts with 0 or {, add a zero char at the start of the send, this will indicate that it's not a JSON command.
|
// If starts with 0 or {, add a zero char at the start of the send, this will indicate that it's not a JSON command.
|
||||||
if((buffer[1] == 123) || (buffer[1] == 0)) { wc.SendBinary(buffer, 0, len + 1); } else { wc.SendBinary(buffer, 1, len); }
|
if((buffer[1] == 123) || (buffer[1] == 0)) { wc.SendBinary(buffer, 0, len + 1); } else { wc.SendBinary(buffer, 1, len); }
|
||||||
@@ -1362,14 +1406,21 @@ namespace MeshCentralRouter
|
|||||||
// Everything was succesful, close the form
|
// Everything was succesful, close the form
|
||||||
transferStatusForm.Close();
|
transferStatusForm.Close();
|
||||||
transferStatusForm = null;
|
transferStatusForm = null;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Error are displayed, keep the form open
|
// Error are displayed, keep the form open
|
||||||
transferStatusForm.transferCompleted();
|
transferStatusForm.transferCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
remoteFolder = strDownloadRel; // Zurücksetzen
|
||||||
|
remoteRefresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downloadButton_Click(object sender, EventArgs e)
|
private void downloadButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
downloadButton_ClickFlynn(sender, e);
|
||||||
|
return;
|
||||||
// If a transfer is currently active, ignore this.
|
// If a transfer is currently active, ignore this.
|
||||||
if(uploadActive || downloadActive || (transferStatusForm != null)) return;
|
if(uploadActive || downloadActive || (transferStatusForm != null)) return;
|
||||||
|
|
||||||
@@ -1449,13 +1500,185 @@ namespace MeshCentralRouter
|
|||||||
downloadNextFile();
|
downloadNextFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void downloadButton_ClickFlynn(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// If a transfer is currently active, ignore this.
|
||||||
|
if(uploadActive || downloadActive || (transferStatusForm != null)) return;
|
||||||
|
|
||||||
|
strDownloadRel = remoteFolder;
|
||||||
|
|
||||||
|
// Perform the download
|
||||||
|
downloadFileArrayPtr = 0;
|
||||||
|
downloadFileArray = new ArrayList();
|
||||||
|
downloadFileSizeArray = new ArrayList();
|
||||||
|
|
||||||
|
bDontupdateRemoteFileView = true;
|
||||||
|
|
||||||
|
foreach(ListViewItem l in rightListView.SelectedItems)
|
||||||
|
{
|
||||||
|
if(l.ImageIndex == 1) // Folder
|
||||||
|
{
|
||||||
|
RekursivelyCollectDownloadFiles(strDownloadRel+"/"+l.Text);
|
||||||
|
}
|
||||||
|
else if(l.ImageIndex == 2) // File
|
||||||
|
{
|
||||||
|
if(skipExistingFiles == false)
|
||||||
|
{
|
||||||
|
downloadFileArray.Add(strDownloadRel+"/"+l.Text);
|
||||||
|
downloadFileSizeArray.Add(int.Parse(l.SubItems[1].Text));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool overwrite = false;
|
||||||
|
string filename = l.Text;
|
||||||
|
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)) { overwrite = true; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(overwrite == false)
|
||||||
|
{
|
||||||
|
downloadFileArray.Add(strDownloadRel+"/"+l.Text);
|
||||||
|
downloadFileSizeArray.Add(int.Parse(l.SubItems[1].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bDontupdateRemoteFileView = false;
|
||||||
|
|
||||||
|
#region SKIP existing?
|
||||||
|
downloadLocalPath = localFolder;
|
||||||
|
// If any files are going to be overwritten
|
||||||
|
int overWriteCount = 0;
|
||||||
|
for(int i = 0; i < downloadFileArray.Count; i++)
|
||||||
|
{
|
||||||
|
string localFilePath;
|
||||||
|
String strDownloadFileString = (string)downloadFileArray[downloadFileArrayPtr];
|
||||||
|
if(strDownloadRel.Length > 0)
|
||||||
|
{
|
||||||
|
strDownloadFileString = strDownloadFileString.Substring(strDownloadRel.Length);
|
||||||
|
if(strDownloadFileString.StartsWith("/")) strDownloadFileString = strDownloadFileString.Substring(1);
|
||||||
|
}
|
||||||
|
localFilePath = Path.Combine(downloadLocalPath.FullName, strDownloadFileString.Replace("/", "\\"));
|
||||||
|
|
||||||
|
if(File.Exists(localFilePath) && new System.IO.FileInfo(localFilePath).Length.Equals(downloadFileSizeArray[i])) { overWriteCount++; }
|
||||||
|
}
|
||||||
|
|
||||||
|
skipExistingFiles = true;
|
||||||
|
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;
|
||||||
|
skipExistingFiles = f.skipExistingFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(skipExistingFiles)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < downloadFileArray.Count; i++)
|
||||||
|
{
|
||||||
|
string localFilePath;
|
||||||
|
String strDownloadFileString = (string)downloadFileArray[downloadFileArrayPtr];
|
||||||
|
if(strDownloadRel.Length > 0)
|
||||||
|
{
|
||||||
|
strDownloadFileString = strDownloadFileString.Substring(strDownloadRel.Length);
|
||||||
|
if(strDownloadFileString.StartsWith("/")) strDownloadFileString = strDownloadFileString.Substring(1);
|
||||||
|
}
|
||||||
|
localFilePath = Path.Combine(downloadLocalPath.FullName, strDownloadFileString.Replace("/", "\\"));
|
||||||
|
|
||||||
|
if(File.Exists(localFilePath) && new System.IO.FileInfo(localFilePath).Length.Equals(downloadFileSizeArray[i]))
|
||||||
|
{
|
||||||
|
downloadFileArray.RemoveAt(i);
|
||||||
|
downloadFileSizeArray.RemoveAt(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(downloadFileArray.Count == 0) return;
|
||||||
|
downloadLocalPath = localFolder;
|
||||||
|
downloadRemotePath = remoteFolder;
|
||||||
|
downloadActive = true;
|
||||||
|
downloadStop = false;
|
||||||
|
|
||||||
|
// Show transfer status dialog
|
||||||
|
transferStatusForm = new FileTransferStatusForm(this);
|
||||||
|
transferStatusForm.Show(this);
|
||||||
|
|
||||||
|
downloadNextFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RekursivelyCollectDownloadFiles(String strFolder)
|
||||||
|
{
|
||||||
|
requestRemoteFolder(strFolder);
|
||||||
|
DateTime to = DateTime.Now.AddSeconds(5);
|
||||||
|
while(DateTime.Now < to && remoteFolder != strFolder)
|
||||||
|
Application.DoEvents();
|
||||||
|
List<Fle> FileList = new List<Fle>();
|
||||||
|
for(int i = 0; i < remoteFolderList.Count; i++)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> fileItem = (Dictionary<string, object>)remoteFolderList[i];
|
||||||
|
Fle file = new Fle();
|
||||||
|
file.Size = -1;
|
||||||
|
file.Path = strFolder.Replace("//", "/");
|
||||||
|
if(fileItem.ContainsKey("t")) { file.Icon = (int)fileItem["t"]; }
|
||||||
|
if(fileItem.ContainsKey("n")) { file.Name = (string)fileItem["n"]; }
|
||||||
|
if(fileItem.ContainsKey("d")) { file.Date = (string)fileItem["d"]; }
|
||||||
|
if(fileItem.ContainsKey("s"))
|
||||||
|
{
|
||||||
|
if(fileItem["s"].GetType() == typeof(System.Int32)) { file.Size = (int)fileItem["s"]; }
|
||||||
|
if(fileItem["s"].GetType() == typeof(System.Int64)) { file.Size = (long)fileItem["s"]; }
|
||||||
|
}
|
||||||
|
FileList.Add(file); // Folder
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < FileList.Count; i++)
|
||||||
|
{
|
||||||
|
Fle file = FileList[i];
|
||||||
|
if(file.Icon == 2) // Folder
|
||||||
|
{
|
||||||
|
RekursivelyCollectDownloadFiles(file.Path+"/"+file.Name);
|
||||||
|
}
|
||||||
|
else if(file.Icon == 3) // File
|
||||||
|
{
|
||||||
|
if(true) // Abfrage Skip
|
||||||
|
{
|
||||||
|
downloadFileArray.Add(file.Path+"/"+file.Name);
|
||||||
|
downloadFileSizeArray.Add(file.Size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String strDownloadRel = "";
|
||||||
private void downloadNextFile()
|
private void downloadNextFile()
|
||||||
{
|
{
|
||||||
if((downloadFileArray == null) || (downloadFileArray.Count == 0)) return;
|
if((downloadFileArray == null) || (downloadFileArray.Count == 0)) return;
|
||||||
|
|
||||||
string localFilePath;
|
string localFilePath;
|
||||||
localFilePath = Path.Combine(downloadLocalPath.FullName, (string)downloadFileArray[downloadFileArrayPtr]);
|
String strDownloadFileString = (string)downloadFileArray[downloadFileArrayPtr];
|
||||||
try { downloadFileStream = File.OpenWrite(localFilePath); } catch (Exception) {
|
if(strDownloadRel.Length > 0)
|
||||||
|
{
|
||||||
|
strDownloadFileString = strDownloadFileString.Substring(strDownloadRel.Length);
|
||||||
|
if(strDownloadFileString.StartsWith("/")) strDownloadFileString = strDownloadFileString.Substring(1);
|
||||||
|
}
|
||||||
|
localFilePath = Path.Combine(downloadLocalPath.FullName, strDownloadFileString.Replace("/", "\\"));
|
||||||
|
if(!Directory.Exists(Path.GetDirectoryName(localFilePath))) Directory.CreateDirectory(Path.GetDirectoryName(localFilePath));
|
||||||
|
try { downloadFileStream = File.OpenWrite(localFilePath); }
|
||||||
|
catch(Exception)
|
||||||
|
{
|
||||||
// Download error, show it in the dialog
|
// Download error, show it in the dialog
|
||||||
FileInfo f = new FileInfo(localFilePath);
|
FileInfo f = new FileInfo(localFilePath);
|
||||||
if(transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToWriteFileX), f.Name)); }
|
if(transferStatusForm != null) { transferStatusForm.addErrorMessage(String.Format(Translate.T(Properties.Resources.UnableToWriteFileX), f.Name)); }
|
||||||
@@ -1481,13 +1704,16 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
downloadFileSize = (int)downloadFileSizeArray[downloadFileArrayPtr];
|
|
||||||
|
if(downloadFileSizeArray[downloadFileArrayPtr].GetType() == typeof(System.Int32)) { downloadFileSize = (int)downloadFileSizeArray[downloadFileArrayPtr]; }
|
||||||
|
if(downloadFileSizeArray[downloadFileArrayPtr].GetType() == typeof(System.Int64)) { downloadFileSize = (long)downloadFileSizeArray[downloadFileArrayPtr]; }
|
||||||
|
|
||||||
downloadFilePtr = 0;
|
downloadFilePtr = 0;
|
||||||
downloadFileStartTime = DateTime.Now;
|
downloadFileStartTime = DateTime.Now;
|
||||||
|
|
||||||
string r;
|
string r;
|
||||||
if (downloadRemotePath.EndsWith("/")) { r = downloadRemotePath + downloadFileArray[downloadFileArrayPtr]; } else { r = downloadRemotePath + "/" + downloadFileArray[downloadFileArrayPtr]; }
|
if(downloadRemotePath.EndsWith("/")) { r = downloadRemotePath + Path.GetFileName((String)downloadFileArray[downloadFileArrayPtr]); } else { r = downloadRemotePath + "/" + Path.GetFileName((String)downloadFileArray[downloadFileArrayPtr]); }
|
||||||
|
r=(String)downloadFileArray[downloadFileArrayPtr];
|
||||||
// Send DOWNLOAD command
|
// Send DOWNLOAD command
|
||||||
string cmd = "{\"action\":\"download\",\"sub\":\"start\",\"id\":" + (downloadFileArrayPtr + 1000) + ",\"path\":\"" + r + "\"}";
|
string cmd = "{\"action\":\"download\",\"sub\":\"start\",\"id\":" + (downloadFileArrayPtr + 1000) + ",\"path\":\"" + r + "\"}";
|
||||||
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
byte[] bincmd = UTF8Encoding.UTF8.GetBytes(cmd);
|
||||||
@@ -1585,11 +1811,13 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
foreach(string file in filesArray)
|
foreach(string file in filesArray)
|
||||||
{
|
{
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
string fullpath = Path.Combine(localFolder.FullName, file);
|
string fullpath = Path.Combine(localFolder.FullName, file);
|
||||||
FileAttributes attr = File.GetAttributes(fullpath);
|
FileAttributes attr = File.GetAttributes(fullpath);
|
||||||
if((attr & FileAttributes.Directory) == FileAttributes.Directory) { Directory.Delete(fullpath, f.recursive); } else { File.Delete(fullpath); }
|
if((attr & FileAttributes.Directory) == FileAttributes.Directory) { Directory.Delete(fullpath, f.recursive); } else { File.Delete(fullpath); }
|
||||||
} catch (Exception) { }
|
}
|
||||||
|
catch(Exception) { }
|
||||||
}
|
}
|
||||||
updateLocalFileView();
|
updateLocalFileView();
|
||||||
}
|
}
|
||||||
@@ -1650,7 +1878,8 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
string filename2 = l2.Text;
|
string filename2 = l2.Text;
|
||||||
if(node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
|
if(node.agentid < 5) { filename = filename.ToLower(); filename2 = filename2.ToLower(); }
|
||||||
if (filename.Equals(filename2)) {
|
if(filename.Equals(filename2))
|
||||||
|
{
|
||||||
overwrite = true;
|
overwrite = true;
|
||||||
if(skipExistingFiles == false)
|
if(skipExistingFiles == false)
|
||||||
{
|
{
|
||||||
@@ -1662,7 +1891,8 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((skipExistingFiles == false) || (overwrite == false)) {
|
if((skipExistingFiles == false) || (overwrite == false))
|
||||||
|
{
|
||||||
uploadFileArray.Add(file);
|
uploadFileArray.Add(file);
|
||||||
if(overwriteNotLarger) { uploadFileDuplicateArray.Add(file, remoteLength); }
|
if(overwriteNotLarger) { uploadFileDuplicateArray.Add(file, remoteLength); }
|
||||||
}
|
}
|
||||||
@@ -1852,4 +2082,13 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class Fle
|
||||||
|
{
|
||||||
|
public String Path = "";
|
||||||
|
public String Name = "";
|
||||||
|
public String Date = "";
|
||||||
|
public long Size = 0;
|
||||||
|
public int Icon = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user