94 lines
No EOL
3.1 KiB
C#
94 lines
No EOL
3.1 KiB
C#
// Copyright © 2013 The CefSharp Authors. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
using WebBrowser;
|
|
using CefSharp;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Linq.Expressions;
|
|
using System.ComponentModel;
|
|
|
|
namespace DiamondCreeperBrowser
|
|
{
|
|
public class DownloadHandler : IDownloadHandler
|
|
{
|
|
public event EventHandler<DownloadItem> OnBeforeDownloadFired;
|
|
|
|
public event EventHandler<DownloadItem> OnDownloadUpdatedFired;
|
|
|
|
public frmBrowser frmref;
|
|
public DownloadHandler(frmBrowser frm)
|
|
{
|
|
frmref = frm;
|
|
}
|
|
|
|
public DownloadProgress downloadProgress = new DownloadProgress();
|
|
public DownloadItem downloadItem;
|
|
public void OnBeforeDownload(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
|
|
{
|
|
OnBeforeDownloadFired?.Invoke(this, downloadItem);
|
|
|
|
this.downloadItem = downloadItem;
|
|
|
|
try
|
|
{
|
|
frmref.Invoke((Action)delegate
|
|
{
|
|
downloadProgress.Show();
|
|
downloadProgress.FormClosing += DownloadProgress_FormClosing;
|
|
});
|
|
}
|
|
catch (ObjectDisposedException){};
|
|
|
|
|
|
if (!callback.IsDisposed)
|
|
{
|
|
using (callback)
|
|
{
|
|
callback.Continue(downloadItem.SuggestedFileName, showDialog: true);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void DownloadProgress_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
|
|
{
|
|
downloadItem.IsCancelled = true;
|
|
}
|
|
|
|
public Timer fivesecondtimer;
|
|
public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
|
|
{
|
|
OnDownloadUpdatedFired?.Invoke(this, downloadItem);
|
|
|
|
|
|
if (downloadItem.IsComplete)
|
|
{
|
|
fivesecondtimer = new Timer(new TimerCallback(tcallback), null, 1000 * 5, 1000 * 5);
|
|
}
|
|
|
|
|
|
frmref.Invoke((Action)delegate {
|
|
downloadProgress.ProgressBar1.Value = downloadItem.PercentComplete;
|
|
downloadProgress.ProgressPrecentage.Text = downloadItem.PercentComplete.ToString() + "% " + (downloadItem.ReceivedBytes / 0x100000).ToString() + "MB / " + (downloadItem.TotalBytes / 0x100000).ToString() + "MB";
|
|
downloadProgress.ProgressFileName.Text = Path.GetFileName(downloadItem.FullPath);
|
|
downloadProgress.Update();
|
|
try { } catch (InvalidAsynchronousStateException){};
|
|
});
|
|
}
|
|
|
|
private void tcallback(object state)
|
|
{
|
|
try {
|
|
frmref.Invoke((Action)delegate
|
|
{
|
|
downloadProgress.Close();
|
|
});
|
|
}
|
|
catch (InvalidOperationException){};
|
|
|
|
}
|
|
}
|
|
} |