internal ProgressActiveScope(RangeProgress progress, LongRunningState isLongRunning)
        {
            _progress = progress;

            SetActive(true);

            if (isLongRunning == LongRunningState.Yes)
            {
                SetIsRunningForLong(true);
            }
            else
            {
                SetIsRunningForLong(false);
                if (isLongRunning == LongRunningState.Detect)
                {
                    _delayForLongRunningSetFlag = new Timer(_delayForLongRunningSetFlag_Tick, null, 1000, -1);
                }
            }

            _internalProgress = ObservableProgress <int> .CreateForUi((value) =>
            {
                _progress.Current = value;
            });

            GC.SuppressFinalize(this);
        }
        public MainViewModel(IEnumerable <IPlugin> plugins,
                             ObservableProgress progress,
                             EventSink eventSink,
                             MainSettings settings,
                             string logPath)
        {
            Plugins = plugins.OrderBy(a => a.Order);

            Settings = settings;

            SettingsList = new List <SettingsViewModel>()
            {
                new SettingsViewModel("View settings", new MainSettingsView
                {
                    DataContext = settings
                })
            }.Concat(ReadSettings(Plugins));

            Progress = progress;

            LogPath = logPath;

            eventSink.NotifyEvent += (s, e) =>
            {
                Notification = e;
            };
        }
    // For simplicity, this code updates a label directly.
    // In a real-world MVVM application, those assignments
    //  would instead be updating a ViewModel property
    //  which is data-bound to the actual UI.
    private async void StartButton_Click(object sender, RoutedEventArgs e)
    {
        MyLabel.Content           = "Starting...";
        var(observable, progress) = ObservableProgress.CreateForUi <int>();
        string result;

        using (observable.Subscribe(value => MyLabel.Content = value))
            result = await Task.Run(() => Solve(progress));
        MyLabel.Content = $"Done! Result: {result}";
    }
        public MainViewModel(IEnumerable <IPlugin> plugins,
                             ObservableProgress progress,
                             EventSink eventSink,
                             MainSettings settings,
                             CommandManagerSettings commandSettings,
                             string logPath,
                             IDialogCoordinator dialogCoordinator,
                             ChocoUpdater chocoUpdater)
        {
            _dialogCoordinator = dialogCoordinator;

            CommandSettings = commandSettings;
#if DEBUG
            CheckUpdates(chocoUpdater);
#endif
            Plugins = plugins.OrderBy(a => a.Order);

            Settings = settings;

            // build settings list
            SettingsList = new List <SettingsViewModel>()
            {
                new SettingsViewModel("View settings", new MainSettingsView
                {
                    DataContext = settings
                })
            }
            .Concat(ReadSettings(Plugins));

            Progress = progress;

            LogPath = logPath;

            // subscribe to errors from serilog
            eventSink.NotifyEvent += (s, e) =>
            {
                Notification = e;
            };

            foreach (var plugin in Plugins)
            {
                plugin.OnStarted();
            }

            Services.CommandManager.Settings = commandSettings;
        }
예제 #5
0
        public void ProgressTest()
        {
            var observableProgress = new ObservableProgress<int>();

            var queue = new Queue<int>();
            var observable = observableProgress.Progress;
            observable.Subscribe(onNext: arg => queue.Enqueue(arg.Value));

            for (int i = 0; i < 10; i++)
            {
                observableProgress.Report(i);
            }

            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(i, queue.Dequeue());
            }
        }
예제 #6
0
        public void ProgressTest()
        {
            var observableProgress = new ObservableProgress <int>();

            var queue      = new Queue <int>();
            var observable = observableProgress.Progress;

            observable.Subscribe(onNext: arg => queue.Enqueue(arg.Value));

            for (int i = 0; i < 10; i++)
            {
                observableProgress.Report(i);
            }

            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(i, queue.Dequeue());
            }
        }
예제 #7
0
        private async Task RefreshAsync(bool browseFromLastFound)
        {
            await ExecuteAsync((ct) =>
            {
                Queue.RefreshInfo();

                if (BrowseLimit.HasValue && BrowseLimit.Value > 0)
                {
                    MessageInfo lastMessage = null;
                    if (browseFromLastFound && Messages.Any())
                    {
                        lastMessage = Messages.Last();
                    }
                    else
                    {
                        Messages.Clear();
                    }
                    MemorySearchCache = null;
                    using (var ps = Progress.Start(BrowseLimit.Value, ct))
                    {
                        using (var internalProgress = ObservableProgress <int> .CreateForUi((count) =>
                        {
                            ps.SetTitle($"Browsing messages... [{count}]");
                        }))
                        {
                            ps.SetTitle("Browsing messages...");

                            foreach (var m in Queue.Browse(BrowseLimit.Value, Filter, ps.CancellationToken, internalProgress, lastMessage, CurrentConverter))
                            {
                                Messages.Add(m);
                                ps.ReportNext();
                            }
                        }
                    }
                    StatusInfoViewModel.LastUpdateTimestamp = DateTime.Now;
                }
            });
        }
예제 #8
0
 protected override IObservable <int> DoWorkInternal(string filePath)
 {
     return(ObservableProgress.CreateAsync <int>(
                progressReporter => ReadFile(filePath, progressReporter)));
 }