public void OnDownloadUpdated(IWebBrowser webBrowser, IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) { var hasId = downloads.TryGetValue(downloadItem.Id, out var id); if (hasId) { var state = new DownloadItemState(id) { Completion = downloadItem.PercentComplete / 100.0, FullPath = downloadItem.FullPath, IsCancelled = downloadItem.IsCancelled, IsComplete = downloadItem.IsComplete, Url = downloadItem.Url }; Task.Run(() => DownloadUpdated?.Invoke(state)); } if (downloadItem.IsComplete || downloadItem.IsCancelled) { logger.Debug($"Download of '{downloadItem.Url}' {(downloadItem.IsComplete ? "is complete" : "was cancelled")}."); if (callbacks.TryRemove(downloadItem.Id, out DownloadFinishedCallback finished) && finished != null) { Task.Run(() => finished.Invoke(downloadItem.IsComplete, downloadItem.FullPath)); } if (hasId) { downloads.TryRemove(downloadItem.Id, out _); } } }
public DownloadItemStateChangedEventArgs(DownloadItem item, DownloadItemState oldState, DownloadItemState newState, Exception ex) { DownloadItem = item; OldState = oldState; NewState = newState; Exception = ex; }
public void Update(DownloadItemState state) { ItemName.Text = Uri.TryCreate(state.Url, UriKind.Absolute, out var uri) ? Path.GetFileName(uri.AbsolutePath) : state.Url; Progress.Value = state.Completion * 100; Status.Text = $"{text.Get(TextKey.BrowserWindow_Downloading)} ({state.Completion * 100}%)"; if (File.Exists(state.FullPath)) { ItemName.Text = Path.GetFileName(state.FullPath); Icon.Content = new Image { Source = IconLoader.LoadIconFor(new FileInfo(state.FullPath)) }; } if (state.IsCancelled) { Progress.Visibility = System.Windows.Visibility.Collapsed; Status.Text = text.Get(TextKey.BrowserWindow_DownloadCancelled); } else if (state.IsComplete) { Progress.Visibility = System.Windows.Visibility.Collapsed; Status.Text = text.Get(TextKey.BrowserWindow_DownloadComplete); } }
private DownloadItem(string url, DownloadItemState state, string referer) { if (!Uri.TryCreate(url, UriKind.Absolute, out _uri)) { throw new ArgumentException("Invalid url: {0}".FormatWith(url)); } _state = state; if (!IsReady && !IsStopped) { throw new ApplicationException("{0} cannot be the inital state for download item.".FormatWith(state)); } _referer = referer; }
private void DownloadHandler_DownloadUpdated(DownloadItemState state) { window.UpdateDownloadState(state); }
public DownloadItemStateChangedEventArgs(DownloadItem item, DownloadItemState oldState, DownloadItemState newState) { DownloadItem = item; OldState = oldState; NewState = newState; }
protected virtual void OnStateChanged(DownloadItem item, DownloadItemState oldState, DownloadItemState newState) { StateChanged?.Invoke(this, new DownloadItemStateChangedEventArgs(item, oldState, newState)); }
public DownloadItem(string url, string referer, string path, DownloadItemState state = DownloadItemState.Queued) : this(url, state, referer) { FilePath = path; }
private void DownloadHandler_DownloadUpdated(DownloadItemState state) { // No downloading UI requested. }