protected virtual async Task ShowDownloadWindow(Channel channel) { var viewModel = new DownloadWindowViewModel(AppInfo, _logger, RemoteContentDownloader); var artifactPath = CreateTempPath(channel.ArtifactUrl); var window = new DownloadWindow { DataContext = viewModel }; bool[] finishedDownloading = { false }; viewModel.ContinueWithInstallationCommand = new DelegateCommand(e => { _logger.Log("Continue after downloading artifact"); _analyticsLogger.LogContinueWithInstallation(); OnArtifactDownloadedEvent(new SingleEventArgs <string>(artifactPath)); window.Close(); if (ShouldOpenArtifact(channel, artifactPath)) { OpenArtifact(artifactPath); _logger.Log("Opened artifact"); } }, o => finishedDownloading[0]); SetOwner(window); OnWindowWillBeDisplayed(window, channel); window.Show(); var savedAt = await viewModel.StartAsync(channel, artifactPath).ConfigureAwait(true); finishedDownloading[0] = true; ((DelegateCommand)viewModel.ContinueWithInstallationCommand).RaiseCanExecuteChanged(); if (string.IsNullOrWhiteSpace(savedAt)) { window.Close(); ShowErrorWindow(); } }
public static void AddDownload(DownloadFileInfo downloadItem) { DownloadWindow tempWindow = null; lock (DownloadWindows) { if (!DownloadWindows.TryGetValue(downloadItem.Id, out tempWindow))//不在缓存列表 { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = downloadItem.SuggestedFileName; sfd.Filter = "所有文件|*"; var res = sfd.ShowDialog(); if (res == DialogResult.OK) { tempWindow = new DownloadWindow(); var vm = new DownloadItemViewModel() { FullPath = sfd.FileName, ID = downloadItem.Id, ReceivedBytes = 0, Url = downloadItem.Url, TotalBytes = downloadItem.TotalBytes }; tempWindow.Closed += (s, e) => { tempWindow.DataContext = null; tempWindow.Close(); DownloadWindows.TryRemove(downloadItem.Id, out tempWindow); }; tempWindow.DataContext = vm; tempWindow.Show(); tempWindow.Activate(); DownloadWindows.TryAdd(downloadItem.Id, tempWindow); } } } }
protected virtual void ShowDownloadWindow(RemoteAppcast appcast) { var viewModel = new DownloadWindowViewModel(_appInfo, _logger, RemoteContentDownloader); var artifactPath = CreateTempPath(appcast.ArtifactUrl); var window = new DownloadWindow { DataContext = viewModel }; viewModel.ContinueWithInstallationCommand = new DelegateCommand(e => { _logger.Log("Continue after downloading artifact"); _analyticsLogger.LogContinueWithInstallation(); OnArtifactDownloadedEvent(new SingleEventArgs <string>(artifactPath)); window.Close(); if (ShouldOpenArtifact(appcast, artifactPath)) { OpenArtifact(artifactPath); _logger.Log("Opened artifact"); } }); SetOwner(window); viewModel.StartAsync(appcast, artifactPath); window.ShowDialog(); }
public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) { try { if (!string.IsNullOrEmpty(downloadItem.FullPath)) { DownloadWindow tempWindow = null; if (DownloadWindows.TryGetValue(downloadItem.Id, out tempWindow))//存在缓存里 { var vm = tempWindow.DataContext as DownloadItemViewModel; vm.ReceivedBytes = downloadItem.ReceivedBytes; vm.TotalBytes = downloadItem.TotalBytes; if (downloadItem.IsComplete)//删除完成删除 { tempWindow.Close(); callback.Dispose(); DownloadWindows.TryRemove(downloadItem.Id, out tempWindow); } } else { if (CacheList.Count(c => c.ID == downloadItem.Id) > 0) { return; } tempWindow = new DownloadWindow(); var vm = new DownloadItemViewModel() { FullPath = downloadItem.FullPath, ID = downloadItem.Id, ReceivedBytes = downloadItem.ReceivedBytes, TotalBytes = downloadItem.TotalBytes, Url = downloadItem.Url }; tempWindow.Closed += (s, e) => { CacheList.Add(new CacheModel() { ID = downloadItem.Id, AddTime = DateTime.Now }); downloadItem.IsCancelled = true; tempWindow.DataContext = null; tempWindow.Close(); callback.Dispose(); DownloadWindows.TryRemove(downloadItem.Id, out tempWindow); Application.Current.Dispatcher.Invoke(new Action(() => { if (hideWindow != null) { hideWindow.Close(); } })); }; tempWindow.DataContext = vm; tempWindow.Show(); tempWindow.Activate(); DownloadWindows.TryAdd(downloadItem.Id, tempWindow); } } } catch (Exception ex) { Logger.Error(ex); } }