Improved File Manager

This commit is contained in:
MaxXor 2015-09-07 14:29:53 +02:00
parent 3b53a5c799
commit 473ec94532
5 changed files with 98 additions and 68 deletions

View File

@ -120,7 +120,7 @@ namespace xClient.Core.Commands
}
catch (Exception ex)
{
new Packets.ClientPackets.DoDownloadFileResponse(command.ID, "", new byte[0], -1, -1, ex.Message)
new Packets.ClientPackets.DoDownloadFileResponse(command.ID, Path.GetFileName(command.RemotePath), new byte[0], -1, -1, ex.Message)
.Execute(client);
}
_limitThreads.Release();
@ -132,7 +132,6 @@ namespace xClient.Core.Commands
if (!_canceledDownloads.ContainsKey(command.ID))
{
_canceledDownloads.Add(command.ID, "canceled");
new Packets.ClientPackets.DoDownloadFileResponse(command.ID, "", new byte[0], -1, -1, "Canceled").Execute(client);
}
}

View File

@ -46,14 +46,7 @@ namespace xServer.Core.Commands
client.Value.ProcessingDirectory = true;
client.Value.FrmFm.ClearFileBrowser();
ListViewItem lviBack = new ListViewItem(new string[] { "..", "", "" })
{
Tag = PathType.Back,
ImageIndex = 0
};
client.Value.FrmFm.AddItemToFileBrowser(lviBack);
client.Value.FrmFm.AddItemToFileBrowser("..", "", PathType.Back, 0);
if (packet.Folders != null && packet.Folders.Length != 0 && client.Value.ProcessingDirectory)
{
@ -61,16 +54,10 @@ namespace xServer.Core.Commands
{
if (packet.Folders[i] != DELIMITER)
{
ListViewItem lvi = new ListViewItem(new string[] { packet.Folders[i], "", PathType.Directory.ToString() })
{
Tag = PathType.Directory,
ImageIndex = 1
};
if (client.Value == null || client.Value.FrmFm == null || !client.Value.ProcessingDirectory)
break;
client.Value.FrmFm.AddItemToFileBrowser(lvi);
client.Value.FrmFm.AddItemToFileBrowser(packet.Folders[i], "", PathType.Directory, 1);
}
}
}
@ -81,17 +68,12 @@ namespace xServer.Core.Commands
{
if (packet.Files[i] != DELIMITER)
{
ListViewItem lvi =
new ListViewItem(new string[] { packet.Files[i], FileHelper.GetDataSize(packet.FilesSize[i]), PathType.File.ToString() })
{
Tag = PathType.File,
ImageIndex = FileHelper.GetFileIcon(Path.GetExtension(packet.Files[i]))
};
if (client.Value == null || client.Value.FrmFm == null || !client.Value.ProcessingDirectory)
break;
client.Value.FrmFm.AddItemToFileBrowser(lvi);
client.Value.FrmFm.AddItemToFileBrowser(packet.Files[i],
FileHelper.GetDataSize(packet.FilesSize[i]), PathType.File,
FileHelper.GetFileIcon(Path.GetExtension(packet.Files[i])));
}
}
}

View File

@ -49,7 +49,7 @@ namespace xServer.Forms
this.stripLblStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.contextMenuStripTransfers = new System.Windows.Forms.ContextMenuStrip(this.components);
this.cancelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.imgListTransfers = new System.Windows.Forms.ImageList(this.components);
this.TabControlFileManager = new xServer.Controls.DotNetBarTabControl();
this.tabFileExplorer = new System.Windows.Forms.TabPage();
@ -66,8 +66,10 @@ namespace xServer.Forms
this.btnOpenDLFolder = new System.Windows.Forms.Button();
this.lstTransfers = new xServer.Controls.AeroListView();
this.hID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hTransferType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.contextMenuStripDirectory.SuspendLayout();
this.statusStrip.SuspendLayout();
this.contextMenuStripTransfers.SuspendLayout();
@ -91,7 +93,7 @@ namespace xServer.Forms
this.refreshToolStripMenuItem,
this.openDirectoryInShellToolStripMenuItem});
this.contextMenuStripDirectory.Name = "ctxtMenu";
this.contextMenuStripDirectory.Size = new System.Drawing.Size(240, 220);
this.contextMenuStripDirectory.Size = new System.Drawing.Size(240, 198);
//
// downloadToolStripMenuItem
//
@ -208,25 +210,26 @@ namespace xServer.Forms
//
this.contextMenuStripTransfers.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.cancelToolStripMenuItem,
this.removeToolStripMenuItem});
this.toolStripMenuItem1,
this.clearToolStripMenuItem});
this.contextMenuStripTransfers.Name = "ctxtMenu2";
this.contextMenuStripTransfers.Size = new System.Drawing.Size(118, 48);
this.contextMenuStripTransfers.Size = new System.Drawing.Size(150, 54);
//
// cancelToolStripMenuItem
//
this.cancelToolStripMenuItem.Image = global::xServer.Properties.Resources.cancel;
this.cancelToolStripMenuItem.Name = "cancelToolStripMenuItem";
this.cancelToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
this.cancelToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
this.cancelToolStripMenuItem.Text = "Cancel";
this.cancelToolStripMenuItem.Click += new System.EventHandler(this.cancelToolStripMenuItem_Click);
//
// removeToolStripMenuItem
// clearToolStripMenuItem
//
this.removeToolStripMenuItem.Image = global::xServer.Properties.Resources.delete;
this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
this.removeToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
this.removeToolStripMenuItem.Text = "Remove";
this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click);
this.clearToolStripMenuItem.Image = global::xServer.Properties.Resources.broom;
this.clearToolStripMenuItem.Name = "clearToolStripMenuItem";
this.clearToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
this.clearToolStripMenuItem.Text = "Clear transfers";
this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click);
//
// imgListTransfers
//
@ -387,6 +390,7 @@ namespace xServer.Forms
| System.Windows.Forms.AnchorStyles.Right)));
this.lstTransfers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.hID,
this.hTransferType,
this.hStatus,
this.hFilename});
this.lstTransfers.ContextMenuStrip = this.contextMenuStripTransfers;
@ -405,15 +409,25 @@ namespace xServer.Forms
this.hID.Text = "ID";
this.hID.Width = 128;
//
// hTransferType
//
this.hTransferType.Text = "Transfer Type";
this.hTransferType.Width = 93;
//
// hStatus
//
this.hStatus.Text = "Status";
this.hStatus.Width = 201;
this.hStatus.Width = 173;
//
// hFilename
//
this.hFilename.Text = "Filename";
this.hFilename.Width = 337;
this.hFilename.Width = 289;
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(146, 6);
//
// FrmFileManager
//
@ -477,11 +491,13 @@ namespace xServer.Forms
private AeroListView lstDirectory;
private AeroListView lstTransfers;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem;
private System.Windows.Forms.ToolStripStatusLabel stripLblStatus;
private System.Windows.Forms.Label lblPath;
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem;
private System.Windows.Forms.ColumnHeader hTransferType;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
}
}

View File

@ -22,6 +22,10 @@ namespace xServer.Forms
private readonly Semaphore _limitThreads = new Semaphore(2, 2); // maximum simultaneous file uploads
public Dictionary<int, string> CanceledUploads = new Dictionary<int, string>();
private const int TRANSFER_ID = 0;
private const int TRANSFER_TYPE = 1;
private const int TRANSFER_STATUS = 2;
public FrmFileManager(Client c)
{
_connectClient = c;
@ -94,7 +98,7 @@ namespace xServer.Forms
{
new Core.Packets.ServerPackets.DoDownloadFile(path, id).Execute(_connectClient);
AddTransfer(id, "Downloading...", files.SubItems[0].Text);
AddTransfer(id, "Download", "Pending...", files.SubItems[0].Text);
}
}
}
@ -122,7 +126,7 @@ namespace xServer.Forms
if (string.IsNullOrEmpty(path)) return;
AddTransfer(id, "Uploading...", Path.GetFileName(path));
AddTransfer(id, "Upload", "Pending...", Path.GetFileName(path));
int index = GetTransferIndex(id);
if (index < 0)
@ -150,7 +154,13 @@ namespace xServer.Forms
if (CanceledUploads.ContainsKey(id))
{
UpdateTransferStatus(index, "Canceled", 0);
_limitThreads.Release();
return;
}
index = GetTransferIndex(id);
if (index < 0)
{
_limitThreads.Release();
return;
}
@ -311,42 +321,48 @@ namespace xServer.Forms
private void btnOpenDLFolder_Click(object sender, EventArgs e)
{
if (Directory.Exists(_connectClient.Value.DownloadDirectory))
Process.Start(_connectClient.Value.DownloadDirectory);
else
MessageBox.Show("No files downloaded yet!", "File Manager", MessageBoxButtons.OK,
MessageBoxIcon.Information);
if (!Directory.Exists(_connectClient.Value.DownloadDirectory))
Directory.CreateDirectory(_connectClient.Value.DownloadDirectory);
Process.Start(_connectClient.Value.DownloadDirectory);
}
private void cancelToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (ListViewItem transfer in lstTransfers.SelectedItems)
{
if (transfer.SubItems[1].Text.StartsWith("Downloading"))
if (!transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Downloading") &&
!transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Uploading") &&
!transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Pending")) continue;
int id = int.Parse(transfer.SubItems[TRANSFER_ID].Text);
if (transfer.SubItems[TRANSFER_TYPE].Text == "Download")
{
int id = int.Parse(transfer.SubItems[0].Text);
if (_connectClient != null)
new Core.Packets.ServerPackets.DoDownloadFileCancel(id).Execute(_connectClient);
if (!CommandHandler.CanceledDownloads.ContainsKey(id))
CommandHandler.CanceledDownloads.Add(id, "canceled");
if (_connectClient != null)
new Core.Packets.ServerPackets.DoDownloadFileCancel(int.Parse(transfer.Text)).Execute(
_connectClient);
CommandHandler.RenamedFiles.Remove(id);
if (CommandHandler.RenamedFiles.ContainsKey(id))
CommandHandler.RenamedFiles.Remove(id);
UpdateTransferStatus(transfer.Index, "Canceled", 0);
}
else if (transfer.SubItems[1].Text.StartsWith("Uploading"))
else if (transfer.SubItems[TRANSFER_TYPE].Text == "Upload")
{
int id = int.Parse(transfer.SubItems[0].Text);
if (!CanceledUploads.ContainsKey(id))
CanceledUploads.Add(id, "canceled");
UpdateTransferStatus(transfer.Index, "Canceled", 0);
}
}
}
private void removeToolStripMenuItem_Click(object sender, EventArgs e)
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (ListViewItem transfer in lstTransfers.SelectedItems)
foreach (ListViewItem transfer in lstTransfers.Items)
{
if (transfer.SubItems[1].Text.StartsWith("Downloading") || transfer.SubItems[1].Text.StartsWith("Uploading")) continue;
if (transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Downloading") ||
transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Uploading") ||
transfer.SubItems[TRANSFER_STATUS].Text.StartsWith("Pending")) continue;
transfer.Remove();
}
}
@ -374,7 +390,7 @@ namespace xServer.Forms
if (string.IsNullOrEmpty(path)) return;
AddTransfer(id, "Uploading...", Path.GetFileName(path));
AddTransfer(id, "Upload", "Pending...", Path.GetFileName(path));
int index = GetTransferIndex(id);
if (index < 0)
@ -407,6 +423,13 @@ namespace xServer.Forms
return;
}
index = GetTransferIndex(id);
if (index < 0)
{
_limitThreads.Release();
return;
}
decimal progress =
Math.Round((decimal)((double)(currentBlock + 1) / (double)srcFile.MaxBlocks * 100.0), 2);
@ -482,10 +505,16 @@ namespace xServer.Forms
}
}
public void AddItemToFileBrowser(ListViewItem lvi)
public void AddItemToFileBrowser(string name, string size, PathType type, int imageIndex)
{
try
{
ListViewItem lvi = new ListViewItem(new string[] { name, size, (type != PathType.Back) ? type.ToString() : string.Empty })
{
Tag = type,
ImageIndex = imageIndex
};
lstDirectory.Invoke((MethodInvoker)delegate
{
lstDirectory.Items.Add(lvi);
@ -496,14 +525,15 @@ namespace xServer.Forms
}
}
public void AddTransfer(int id, string status, string filename)
public void AddTransfer(int id, string type, string status, string filename)
{
try
{
ListViewItem lvi =
new ListViewItem(new string[] {id.ToString(), type, status, filename});
lstDirectory.Invoke((MethodInvoker)delegate
{
ListViewItem lvi =
new ListViewItem(new string[] { id.ToString(), status, filename });
lstTransfers.Items.Add(lvi);
});
}
@ -521,7 +551,7 @@ namespace xServer.Forms
{
lstTransfers.Invoke((MethodInvoker)delegate
{
foreach (ListViewItem lvi in lstTransfers.Items.Cast<ListViewItem>().Where(lvi => lvi != null && strId.Equals(lvi.SubItems[0].Text)))
foreach (ListViewItem lvi in lstTransfers.Items.Cast<ListViewItem>().Where(lvi => lvi != null && strId.Equals(lvi.SubItems[TRANSFER_ID].Text)))
{
index = lvi.Index;
break;
@ -540,9 +570,9 @@ namespace xServer.Forms
{
try
{
lstTransfers.Invoke((MethodInvoker)delegate
lstTransfers.Invoke((MethodInvoker) delegate
{
lstTransfers.Items[index].SubItems[1].Text = status;
lstTransfers.Items[index].SubItems[TRANSFER_STATUS].Text = status;
if (imageIndex >= 0)
lstTransfers.Items[index].ImageIndex = imageIndex;
});
@ -550,6 +580,9 @@ namespace xServer.Forms
catch (InvalidOperationException)
{
}
catch (Exception)
{
}
}
/// <summary>

View File

@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAW
EwAAAk1TRnQBSQFMAgEBCwEAAcABAgHAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
EwAAAk1TRnQBSQFMAgEBCwEAAdABAgHQAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -226,7 +226,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABE
CQAAAk1TRnQBSQFMAgEBAgEAATgBAgE4AQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CQAAAk1TRnQBSQFMAgEBAgEAAUgBAgFIAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA