public ManualCoinJoinProfileDialogViewModel(CoinJoinProfileViewModelBase current) { _autoCoinjoin = true; _minAnonScoreTarget = current.MinAnonScoreTarget.ToString(); _maxAnonScoreTarget = current.MaxAnonScoreTarget.ToString(); _timeFrames = new[] { new TimeFrameItem("Hours", TimeSpan.Zero), new TimeFrameItem("Days", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[0])), new TimeFrameItem("Weeks", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[1])), new TimeFrameItem("Months", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[2])) }; _selectedTimeFrame = _timeFrames.FirstOrDefault(tf => tf.TimeFrame == TimeSpan.FromHours(current.FeeRateMedianTimeFrameHours)) ?? _timeFrames.First(); SetupCancel(enableCancel: true, enableCancelOnEscape: true, enableCancelOnPressed: true); EnableBack = false; NextCommand = ReactiveCommand.Create(() => { var auto = AutoCoinjoin; var min = int.Parse(MinAnonScoreTarget); var max = int.Parse(MaxAnonScoreTarget); var hours = (int)Math.Floor(SelectedTimeFrame.TimeFrame.TotalHours); Close(DialogResultKind.Normal, new ManualCoinJoinProfile(auto, min, max, hours)); }); this.ValidateProperty(x => x.MinAnonScoreTarget, errors => ValidateInteger(MinAnonScoreTarget, nameof(MinAnonScoreTarget), errors)); this.ValidateProperty(x => x.MaxAnonScoreTarget, errors => ValidateInteger(MaxAnonScoreTarget, nameof(MaxAnonScoreTarget), errors)); }
public ManualCoinJoinProfileDialogViewModel(CoinJoinProfileViewModelBase current, bool autoCoinJoin) { _autoCoinjoin = autoCoinJoin; _anonScoreTarget = current.AnonScoreTarget; _timeFrames = new[] { new TimeFrameItem("Hours", TimeSpan.Zero), new TimeFrameItem("Days", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[0])), new TimeFrameItem("Weeks", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[1])), new TimeFrameItem("Months", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[2])) }; _selectedTimeFrame = _timeFrames.FirstOrDefault(tf => tf.TimeFrame == TimeSpan.FromHours(current.FeeRateMedianTimeFrameHours)) ?? _timeFrames.First(); SetupCancel(enableCancel: true, enableCancelOnEscape: true, enableCancelOnPressed: true); EnableBack = false; NextCommand = ReactiveCommand.Create(() => { var auto = AutoCoinjoin; var target = AnonScoreTarget; var hours = (int)Math.Floor(SelectedTimeFrame.TimeFrame.TotalHours); Close(DialogResultKind.Normal, new ManualCoinJoinProfileDialogViewModelResult(AutoCoinjoin, new ManualCoinJoinProfileViewModel(target, hours))); }); }
public ManualCoinJoinProfileDialogViewModel(CoinJoinProfileViewModelBase current) { _autoCoinjoin = true; _minAnonScoreTarget = current.MinAnonScoreTarget; _maxAnonScoreTarget = current.MaxAnonScoreTarget; _timeFrames = new[] { new TimeFrameItem("Hours", TimeSpan.Zero), new TimeFrameItem("Days", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[0])), new TimeFrameItem("Weeks", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[1])), new TimeFrameItem("Months", TimeSpan.FromHours(Constants.CoinJoinFeeRateMedianTimeFrames[2])) }; _selectedTimeFrame = _timeFrames.FirstOrDefault(tf => tf.TimeFrame == TimeSpan.FromHours(current.FeeRateMedianTimeFrameHours)) ?? _timeFrames.First(); SetupCancel(enableCancel: true, enableCancelOnEscape: true, enableCancelOnPressed: true); EnableBack = false; this.WhenAnyValue(x => x.MinAnonScoreTarget) .Subscribe( x => { if (x >= MaxAnonScoreTarget) { MaxAnonScoreTarget = x + 1; } }); this.WhenAnyValue(x => x.MaxAnonScoreTarget) .Subscribe( x => { if (x <= MinAnonScoreTarget) { MinAnonScoreTarget = x - 1; } }); NextCommand = ReactiveCommand.Create(() => { var auto = AutoCoinjoin; var min = MinAnonScoreTarget; var max = MaxAnonScoreTarget; var hours = (int)Math.Floor(SelectedTimeFrame.TimeFrame.TotalHours); Close(DialogResultKind.Normal, new ManualCoinJoinProfileViewModel(auto, min, max, hours)); }); }
/// <summary> /// 添加计时器 /// </summary> /// <param name="name">计时器名称</param> /// <param name="delay">多少秒执行一次</param> /// <param name="callback">回调函数</param> /// <param name="repeat">重复次数,-1为无限次</param> /// <param name="onOver">结束函数</param> /// <param name="priority">优先级</param> public void Add(string name, float delay, TimeFrameItem.OnTick0 callback, int repeat = -1, TimeFrameItem.OnTick0 onOver = null, int priority = 10) { if (HasFunction(callback) == -1) { TimeFrameItem fti = new TimeFrameItem(name, delay, repeat, callback, onOver, priority); list.Add(fti); } else { for (int i = 0; i < list.Count; i++) { if (list[i].callback == callback) { list[i].delay = delay; list[i].repeat = repeat; list[i].SetEnd = false; } } } }