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); }
public HeaderedView Create(ViewState state) { var converter = new TailViewToStateConverter(); var converted = converter.Convert(state.State); var file = converted.FileName; var viewModel = CreateView(new FileInfo(file)); var restorer = (IPersistentView)viewModel; restorer.Restore(state); return new HeaderedView(new FileHeader(new FileInfo(file)), viewModel); }
ViewState IPersistentView.CaptureState() { var coverter = new TailViewToStateConverter(); var state = coverter.Convert(_tailView.Name, _tailView.SearchCollection.Selected.Text, _tailView.SearchMetadataCollection.Metadata.Items.ToArray()); return new ViewState(TailViewModelConstants.ViewKey, state); }
public void Restore(TailViewModel view, State state) { var converter = new TailViewToStateConverter(); Restore(view,converter.Convert(state)); }