rendered paste body private void AddDownload(object sender, EventArgs e)
{
using (FrmManageDownload frmManageDownload = new FrmManageDownload())
if (frmManageDownload.ShowDialog() == DialogResult.OK)
{
string url = frmManageDownload.textBox1.Text;
string lowerurl = url.ToLowerInvariant();
if (!(lowerurl.StartsWith("http://") || lowerurl.StartsWith("https://") || lowerurl.StartsWith("ftp://")))
url = "http://" + url;
AddDownloadFromMemory(url);
}
}
public void AddDownloadFromMemory(string url)
{
DownloadManager.TemporaryDownloadList.Add(url);
ManagedDownload download = null;
ListViewItem listViewItem = listView1.Items.Add(url);
DownloadContainer downloadContainer = new DownloadContainer(download, listViewItem);
listViewItem.SubItems.Add("Connecting");
ThreadPool.UnsafeQueueUserWorkItem(CreateDownload, new CreateDownloadState(url, listViewItem, downloadContainer));
}
public void AddDownloadFromFile(Protocol protocol, string url, DateTime lastModified, long size, int segmentCount, string id, Segment[] segmentList)
{
ManagedDownload download = null;
ListViewItem listViewItem = listView1.Items.Add(url);
DownloadContainer downloadContainer = new DownloadContainer(download, listViewItem);
download = ManagedDownload.Create(protocol, url, lastModified, size, segmentCount, id, segmentList, DisplayMessage, downloadContainer.ChangeState);
listViewItem.SubItems.Add("Connecting");
DownloadManager.ManagedDownloadList.Add(id, download);
ThreadPool.UnsafeQueueUserWorkItem(CheckDownload, download);
}
private void CheckDownload(object data)
{
(data as ManagedDownload).CheckDownload();
}
private class CreateDownloadState
{
public string url;
public ListViewItem listViewItem;
public DownloadContainer downloadContainer;
private delegate void _RemoveFromTemporaryDownloadList(ManagedDownload download);
private _RemoveFromTemporaryDownloadList delegateRemoveFromTemporaryDownloadList;
public CreateDownloadState(string url, ListViewItem listViewItem, DownloadContainer downloadContainer)
{
this.url = url;
this.listViewItem = listViewItem;
this.downloadContainer = downloadContainer;
delegateRemoveFromTemporaryDownloadList = RemoveFromTemporaryDownloadList;
}
public void RemoveFromTemporaryDownloadList(ManagedDownload download)
{
if (listViewItem.ListView.InvokeRequired)
listViewItem.ListView.BeginInvoke(delegateRemoveFromTemporaryDownloadList, download);
else
{
if (download.id != null)
{
DownloadManager.TemporaryDownloadList.Remove(url);
DownloadManager.ManagedDownloadList.Add(download.id, download);
}
}
}
}
private void CreateDownload(object data)
{
CreateDownloadState createDownloadState = data as CreateDownloadState;
try
{
createDownloadState.downloadContainer.download = ManagedDownload.Create(createDownloadState.url, DisplayMessage, createDownloadState.downloadContainer.ChangeState, /*AddToManagedList*/createDownloadState.RemoveFromTemporaryDownloadList);
}
catch (UriFormatException)
{
DisplayMessage("The URL you have entered is not valid");
listView1.BeginInvoke(delegateRemoveItem, createDownloadState.listViewItem);
return;
}
catch (WebException webException)
{
createDownloadState.downloadContainer.ChangeState("Error: " + webException.Message);
}
}
private void RemoveItem(ListViewItem listViewItem)
{
listView1.Items.Remove(listViewItem);
}
public void DisplayMessage(string message)
{
MessageBox.Show(this, message, "MetroLeech");
}
public class DownloadContainer
{
public ManagedDownload download;
public ListViewItem listViewItem;
private delegate void _ChangeState(string message);
private _ChangeState delegateChangeState;
public DownloadContainer(ManagedDownload download, ListViewItem listViewItem)
{
this.download = download;
this.listViewItem = listViewItem;
delegateChangeState = ChangeState;
}
public void ChangeState(string message)
{
if (listViewItem.ListView.InvokeRequired)
listViewItem.ListView.BeginInvoke(delegateChangeState, message);
else
{
listViewItem.SubItems[1].Text = message;
listViewItem.ListView.Invalidate(listViewItem.SubItems[1].Bounds);
}
}
}