Exemplo n.º 1
0
        /// <summary>
        /// This event could be raised from multiple threads. Only perform thread-safe operations
        /// </summary>
        private void PackageRestoreManager_PackageRestored(object sender, PackageRestoredEventArgs args)
        {
            if (Token.IsCancellationRequested)
            {
                _canceled = true;
                return;
            }

            if (args.Restored)
            {
                var packageIdentity = args.Package;
                Interlocked.Increment(ref CurrentCount);

                ThreadHelper.JoinableTaskFactory.RunAsync(async delegate
                {
                    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
                    var progressData = new ThreadedWaitDialogProgressData(string.Format(CultureInfo.CurrentCulture,
                                                                                        Resources.RestoredPackage,
                                                                                        packageIdentity),
                                                                          string.Empty,
                                                                          string.Empty,
                                                                          isCancelable: true,
                                                                          currentStep: CurrentCount,
                                                                          totalSteps: TotalCount);
                    ThreadedWaitDialogProgress.Report(progressData);
                });
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// This event could be raised from multiple threads. Only perform thread-safe operations
        /// </summary>
        private void PackageRestoreManager_PackageRestored(object sender, PackageRestoredEventArgs args)
        {
            PackageIdentity packageIdentity = args.Package;

            if (args.Restored && CancellationTokenSource != null && !CancellationTokenSource.IsCancellationRequested)
            {
                bool canceled = false;
                Interlocked.Increment(ref CurrentCount);

                // The rate at which the packages are restored is much higher than the rate at which a wait dialog can be updated
                // And, this event is raised by multiple threads
                // So, only try to update the wait dialog if an update is not already in progress. Use the int 'WaitDialogUpdateGate' for this purpose
                // Always, set it to 1 below and gets its old value. If the old value is 0, go and update, otherwise, bail
                if (Interlocked.Equals(Interlocked.Exchange(ref WaitDialogUpdateGate, 1), 0))
                {
                    _waitDialog.UpdateProgress(
                        String.Format(CultureInfo.CurrentCulture, Resources.RestoredPackage, packageIdentity.ToString()),
                        String.Empty,
                        szStatusBarText: null,
                        iCurrentStep: CurrentCount,
                        iTotalSteps: TotalCount,
                        fDisableCancel: false,
                        pfCanceled: out canceled);

                    Interlocked.Exchange(ref WaitDialogUpdateGate, 0);
                }
            }
        }
Exemplo n.º 3
0
        public void Execute_SolutionHasOneProjectWithOneUnrestoredPackage_PackageRestoredEventFiredForPackage()
        {
            FakePackageManagementProject project = CreateSolutionWithOneProject();

            project.AddPackageReference("MyPackage", "1.0");
            FakePackage package = AddPackageToPriorityRepository("MyPackage", "1.0");

            CreateAction();
            CapturePackageRestoredEvents();

            action.Execute();

            PackageRestoredEventArgs eventArgs = packageRestoredEvents [0];

            Assert.AreEqual(package, eventArgs.Package);
        }
        // This event could be raised from multiple threads. Only perform thread-safe operations
        private void PackageRestoreManager_PackageRestored(
            object sender,
            PackageRestoredEventArgs args)
        {
            if (_status != NuGetOperationStatus.Cancelled && args.Restored)
            {
                var packageIdentity = args.Package;
                Interlocked.Increment(ref _currentCount);

                _logger.Do((_, progress) =>
                {
                    progress?.ReportProgress(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            Resources.RestoredPackage,
                            packageIdentity),
                        (uint)_currentCount,
                        (uint)_missingPackagesCount);
                });
            }
        }
Exemplo n.º 5
0
        public void Execute_ProjectHasOneUnrestoredPackage_PackageRestoredEventFiredForPackage()
        {
            FakePackageManagementProject project = CreateSolutionWithOneProject();

            project.AddPackageReference("MyPackage", "1.0");
            FakePackage package = AddPackageToPriorityRepository("MyPackage", "1.0");

            CreateAction();
            CapturePackageRestoredEvents();
            var dotNetProject = new FakeDotNetProject();

            dotNetProject.Name = "MyProject";
            solution.FakeProjectsToReturnFromGetProject.Add("MyProject", project);
            action.Project = dotNetProject;

            action.Execute();

            PackageRestoredEventArgs eventArgs = packageRestoredEvents [0];

            Assert.AreEqual(package, eventArgs.Package);
        }
Exemplo n.º 6
0
        // This event could be raised from multiple threads. Only perform thread-safe operations
        private void PackageRestoreManager_PackageRestored(
            object sender,
            PackageRestoredEventArgs args)
        {
            if (_status != NuGetOperationStatus.Cancelled && args.Restored)
            {
                var packageIdentity = args.Package;
                Interlocked.Increment(ref _currentCount);

                NuGetUIThreadHelper.JoinableTaskFactory.Run(async() =>
                {
                    // capture current progress from the current execution context
                    var progress = RestoreOperationProgressUI.Current;

                    await progress?.ReportProgressAsync(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            Resources.RestoredPackage,
                            packageIdentity),
                        (uint)_currentCount,
                        (uint)_missingPackagesCount);
                });
            }
        }