コード例 #1
0
        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 _);
                }
            }
        }
コード例 #2
0
 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);
            }
        }
コード例 #4
0
ファイル: DownloadItem.cs プロジェクト: CodeFork/PureLib
        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;
        }
コード例 #5
0
 private void DownloadHandler_DownloadUpdated(DownloadItemState state)
 {
     window.UpdateDownloadState(state);
 }
コード例 #6
0
ファイル: DownloadItem.cs プロジェクト: CodeFork/PureLib
 public DownloadItemStateChangedEventArgs(DownloadItem item, DownloadItemState oldState, DownloadItemState newState)
 {
     DownloadItem = item;
     OldState     = oldState;
     NewState     = newState;
 }
コード例 #7
0
ファイル: DownloadItem.cs プロジェクト: CodeFork/PureLib
 protected virtual void OnStateChanged(DownloadItem item, DownloadItemState oldState, DownloadItemState newState)
 {
     StateChanged?.Invoke(this, new DownloadItemStateChangedEventArgs(item, oldState, newState));
 }
コード例 #8
0
ファイル: DownloadItem.cs プロジェクト: CodeFork/PureLib
 public DownloadItem(string url, string referer, string path,
                     DownloadItemState state = DownloadItemState.Queued) : this(url, state, referer)
 {
     FilePath = path;
 }
コード例 #9
0
ファイル: MainWindow.cs プロジェクト: inspera/Chrominimum
 private void DownloadHandler_DownloadUpdated(DownloadItemState state)
 {
     // No downloading UI requested.
 }