public KanColleProxy() { this.compositeDisposable = new MultipleDisposable(); this.connectableSessionSource = Observable .FromEvent<Action<Session>, Session>( action => action, h => HttpProxy.AfterSessionComplete += h, h => HttpProxy.AfterSessionComplete -= h) .Publish(); this.apiSource = this.connectableSessionSource .Where(s => s.Request.PathAndQuery.StartsWith("/kcsapi")) .Where(s => s.Response.MimeType.Equals("text/plain")) #region .Do(debug) #if DEBUG .Do(session => { Debug.WriteLine("=================================================="); Debug.WriteLine("Nekoxy session: "); Debug.WriteLine(session); Debug.WriteLine(""); }) #endif #endregion .Publish(); }
private void UpdateFleets() { this.fleetListeners?.Dispose(); this.fleetListeners = new MultipleDisposable(); this.Fleets = KanColleClient.Current.Homeport.Organization.Fleets .Select(kvp => this.ToViewModel(kvp.Value)) .ToArray(); this.SelectedFleet = this.Fleets.FirstOrDefault(); }
public static T AddTo <T>(this T disposable, MultipleDisposable obj) where T : IDisposable { if (obj == null) { disposable.Dispose(); } else { obj.Add(disposable); } return(disposable); }
private async void UpdateFleets() { this.fleetListeners?.Dispose(); this.fleetListeners = new MultipleDisposable(); this.Fleets = KanColleClient.Current.Homeport.Organization.Fleets .Select(x => this.ToViewModel(x.Value)) .ToArray(); IEnumerable <ItemViewModel> result; if (KanColleClient.Current.Homeport.Organization.Combined && KanColleSettings.MergeCombinedFleet) { var cfvm = MakeCombinedFleetViewModel(KanColleClient.Current.Homeport.Organization.CombinedFleet); var fleets = this.Fleets.Where(x => cfvm.Source.Fleets.All(f => f != x.Source)); result = EnumerableEx.Return <ItemViewModel>(cfvm) .Concat(fleets.Select(x => new FleetViewModel(x.Source))); } else { result = this.Fleets .Select(x => new FleetViewModel(x.Source)) .OfType <ItemViewModel>(); } { var list = result.ToList(); list.Add(this.AirBase); result = list; } this.Fleets2 = result.ToArray(); // SelectedFleet 이 무시되는 현상. 이유는 불명. await Task.Delay(200); if (!this.Fleets2.Any(x => x == this.SelectedFleet)) { this.SelectedFleet = this.Fleets2.FirstOrDefault(); } prevCombined = KanColleClient.Current.Homeport.Organization.Combined; }
// Creates a cell of collection from collection of cells. Useful when you need to agrigate collections of dynamic data. public static ICell <IEnumerable <T> > ToCellOfCollection <T>(this IEnumerable <ICell <T> > cells) { Func <IEnumerable <T> > values = () => cells.Select(cell => cell.value); return(new AnonymousCell <IEnumerable <T> >((Action <IEnumerable <T> > reaction) => { var group = new MultipleDisposable(); foreach (var cell in cells) { group.Add(cell.OnChanged(() => { if (group.disposed) { return; } reaction(values()); })); } return group; }, values)); }
private void UpdateFleets() { this.fleetListeners?.Dispose(); this.fleetListeners = new MultipleDisposable(); this.Fleets = KanColleClient.Current.Homeport.Organization.Fleets .Select(x => this.ToViewModel(x.Value)) .ToArray(); if (KanColleClient.Current.Homeport.Organization.Combined && KanColleSettings.MergeCombinedFleet) { var cfvm = MakeCombinedFleetViewModel(KanColleClient.Current.Homeport.Organization.CombinedFleet); var fleets = this.Fleets.Where(x => cfvm.Source.Fleets.All(f => f != x.Source)); this.Fleets2 = EnumerableEx.Return <ItemViewModel>(cfvm) .Concat(fleets.Select(x => new FleetViewModel(x.Source))) .ToArray(); } else { this.Fleets2 = this.Fleets.Select(x => new FleetViewModel(x.Source)) .OfType <ItemViewModel>() .ToArray(); } // SelectedFleet 이 무시되는 현상. 이유는 불명. new System.Threading.Thread(() => { System.Threading.Thread.Sleep(200); if (!this.Fleets2.Any(x => x == this.SelectedFleet)) { this.SelectedFleet = this.Fleets2.FirstOrDefault(); } }).Start(); }
public WipCommitVm(RepositoryVm repos, TwoPaneLayoutVm twoPaneLayout) { Debug.Assert(repos != null); _repos = repos; TwoPaneLayout = twoPaneLayout ?? new TwoPaneLayoutVm().AddTo(MultipleDisposable); SelectedWipFiles = new ObservableCollection<WipFileVm>(); SelectedWipFiles.CollectionChangedAsObservable() .Subscribe(_ => { var count = SelectedWipFiles.Count; if (count == 0) DiffFileViewSource = WipFiles.Value.FirstOrDefault(); else if (count == 1) DiffFileViewSource = SelectedWipFiles.FirstOrDefault(); else DiffFileViewSource = SelectedWipFiles; }) .AddTo(MultipleDisposable); SummaryRemaining = this.ObserveProperty(x => x.Summary) .Select(x => 80 - x.Length) .ToReadOnlyReactiveProperty() .AddTo(MultipleDisposable); SummaryRemainingBrush = SummaryRemaining .Select(x => { if (x < 0) return Brushes.Red; if (x < 20) return Brushes.DarkRed; return Brushes.Gray; }) .ToReadOnlyReactiveProperty() .AddTo(MultipleDisposable); CommitCommand = this.ObserveProperty(x => x.Summary) .Select(x => string.IsNullOrWhiteSpace(x) == false) .ToReactiveCommand() .AddTo(MultipleDisposable); CommitCommand.Subscribe(_ => repos.Commit((Summary + "\n\n" + Description).Trim())) .AddTo(MultipleDisposable); DiscardChangesCommand = SelectedWipFiles.CollectionChangedAsObservable() .Select(x => SelectedWipFiles.Any()) .ToReactiveCommand() .AddTo(MultipleDisposable); DiscardChangesCommand.Subscribe(_ => repos.DiscardChanges(SelectedWipFiles.Select(x => x.Path.Value)) ).AddTo(MultipleDisposable); // IsAllSelected 関係 { IsAllSelected = new ReactiveProperty<bool?>().AddTo(MultipleDisposable); IsAllSelected.Subscribe(i => { // UI からの操作では on/off のどちらかに設定する if (_isInUpdateIsAllSelected == false) { if (i.HasValue == false) { IsAllSelected.Value = false; return; } } if (i.HasValue == false) return; WipFiles.Value.ForEach(x => x.IsInStaging.Value = i.Value); }).AddTo(MultipleDisposable); this.ObserveProperty(x => x.WipFiles) .Subscribe(x => { _isInStageingDisposer?.Dispose(); _isInStageingDisposer = new MultipleDisposable(); x.Value.ForEach(y => y.IsInStaging.Subscribe(_ => UpdateIsAllSelected()).AddTo(_isInStageingDisposer)); }) .AddTo(MultipleDisposable); MultipleDisposable.Add(() => _isInStageingDisposer?.Dispose()); } }
public DisposableNotifier() { this.CompositeDisposable = new MultipleDisposable(); }