示例#1
0
		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();
        }
示例#3
0
        public static T AddTo <T>(this T disposable, MultipleDisposable obj) where T : IDisposable
        {
            if (obj == null)
            {
                disposable.Dispose();
            }
            else
            {
                obj.Add(disposable);
            }

            return(disposable);
        }
示例#4
0
        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;
        }
示例#5
0
        // 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));
        }
示例#6
0
        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();
        }
示例#7
0
        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());
            }
        }
		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 DisposableNotifier()
		{
			this.CompositeDisposable = new MultipleDisposable();
		}
 public DisposableNotifier()
 {
     this.CompositeDisposable = new MultipleDisposable();
 }