public TailViewStateController([NotNull] TailViewModel tailView, IStateBucketService stateBucketService, ISchedulerProvider schedulerProvider, ITailViewStateRestorer tailViewStateRestorer, ILogger logger, bool loadDefaults)
        {
            if (tailView == null) throw new ArgumentNullException(nameof(tailView));

            _tailView = tailView;

            var converter = new TailViewToStateConverter();

            bool loadingSettings=false;
            const string type = "TailView";
            logger.Info("Loading state for {0}", tailView.Name);

            //Load state

            if (loadDefaults)
            {
                stateBucketService
                    .Lookup(type, tailView.Name)
                    .IfHasValue(tailviewstate =>
                    {
                        schedulerProvider.Background.Schedule(() =>
                        {
                            try
                            {
                                loadingSettings = true;
                                tailViewStateRestorer.Restore(tailView, tailviewstate);
                            }
                            finally
                            {
                                loadingSettings = false;
                            }

                        });
                    });
            }

            //write latest to file when something triggers a change
            var selectedChanged = tailView.SearchCollection
                    .WhenValueChanged(sc=>sc.Selected,false)
                    .Where(vm => vm !=null)
                    .Select(vm=>vm.Text);

            var metaChanged = _tailView.SearchMetadataCollection.Metadata.Connect()
                    .ToCollection()
                    .Select(metaData => metaData.ToArray());

            var writer = selectedChanged.CombineLatest(metaChanged,(selected, metadata)=>new { selected , metadata })
                        .Where(_=> !loadingSettings)
                        .Throttle(TimeSpan.FromMilliseconds(250))
                        .Select(x => converter.Convert(_tailView.Name, x.selected, x.metadata))
                    .Subscribe(state =>
                    {
                        stateBucketService.Write(type, tailView.Name, state);
                    });

            _cleanUp = new CompositeDisposable(writer);
        }
Beispiel #2
0
 public void Restore(ViewState state)
 {
     _tailViewStateRestorer.Restore(_tailView, state.State);
 }
Beispiel #3
0
        public TailViewStateController([NotNull] TailViewModel tailView, IStateBucketService stateBucketService, ISchedulerProvider schedulerProvider, ITailViewStateRestorer tailViewStateRestorer, ILogger logger, bool loadDefaults)
        {
            if (tailView == null)
            {
                throw new ArgumentNullException(nameof(tailView));
            }

            var tailView1 = tailView;


            var converter = new TailViewToStateConverter();

            bool         loadingSettings = false;
            const string type            = "TailView";

            logger.Info("Loading state for {0}", tailView.Name);

            //Load state

            if (loadDefaults)
            {
                stateBucketService
                .Lookup(type, tailView.Name)
                .IfHasValue(tailviewstate =>
                {
                    schedulerProvider.Background.Schedule(() =>
                    {
                        try
                        {
                            loadingSettings = true;
                            tailViewStateRestorer.Restore(tailView, tailviewstate);
                        }
                        finally
                        {
                            loadingSettings = false;
                        }
                    });
                });
            }

            //write latest to file when something triggers a change
            var selectedChanged = tailView.SearchCollection
                                  .WhenValueChanged(sc => sc.Selected, false)
                                  .Where(vm => vm != null)
                                  .Select(vm => vm.Text);

            var metaChanged = tailView1.SearchMetadataCollection.Metadata.Connect()
                              .ToCollection()
                              .Select(metaData => metaData.ToArray());

            var writer = selectedChanged.CombineLatest(metaChanged, (selected, metadata) => new { selected, metadata })
                         .Where(_ => !loadingSettings)
                         .Throttle(TimeSpan.FromMilliseconds(250))
                         .Select(x => converter.Convert(tailView1.Name, x.selected, x.metadata))
                         .Subscribe(state =>
            {
                stateBucketService.Write(type, tailView.Name, state);
            });

            _cleanUp = new CompositeDisposable(writer);
        }