public KernelViewModel(Guid id) { _id = id; this.Edit = new DelegateCommand(() => { if (this == Empty) { return; } KernelEdit.ShowEditWindow(this); }); this.Remove = new DelegateCommand(() => { if (this.Id == Guid.Empty) { return; } DialogWindow.ShowDialog(message: $"您确定删除{this.FullName}内核吗?", title: "确认", onYes: () => { Global.Execute(new RemoveKernelCommand(this.Id)); }, icon: "Icon_Confirm"); }); this.SortUp = new DelegateCommand(() => { KernelViewModel upOne = KernelViewModels.Current.AllKernels.OrderByDescending(a => a.SortNumber).FirstOrDefault(a => a.SortNumber < this.SortNumber); if (upOne != null) { int sortNumber = upOne.SortNumber; upOne.SortNumber = this.SortNumber; Global.Execute(new UpdateKernelCommand(upOne)); this.SortNumber = sortNumber; Global.Execute(new UpdateKernelCommand(this)); KernelViewModels.Current.OnPropertyChanged(nameof(KernelViewModels.AllKernels)); KernelPageViewModel.Current.OnPropertyChanged(nameof(KernelPageViewModel.QueryResults)); KernelPageViewModel.Current.OnPropertyChanged(nameof(KernelPageViewModel.DownloadingVms)); } }); this.SortDown = new DelegateCommand(() => { KernelViewModel nextOne = KernelViewModels.Current.AllKernels.OrderBy(a => a.SortNumber).FirstOrDefault(a => a.SortNumber > this.SortNumber); if (nextOne != null) { int sortNumber = nextOne.SortNumber; nextOne.SortNumber = this.SortNumber; Global.Execute(new UpdateKernelCommand(nextOne)); this.SortNumber = sortNumber; Global.Execute(new UpdateKernelCommand(this)); KernelViewModels.Current.OnPropertyChanged(nameof(KernelViewModels.AllKernels)); KernelPageViewModel.Current.OnPropertyChanged(nameof(KernelPageViewModel.QueryResults)); KernelPageViewModel.Current.OnPropertyChanged(nameof(KernelPageViewModel.DownloadingVms)); } }); this.Publish = new DelegateCommand(() => { DialogWindow.ShowDialog(message: $"您确定发布{this.Code} (v{this.Version})吗?", title: "确认", onYes: () => { this.PublishState = PublishStatus.Published; this.PublishOn = Global.GetTimestamp(); Global.Execute(new UpdateKernelCommand(this)); }, icon: "Icon_Confirm"); }); this.UnPublish = new DelegateCommand(() => { DialogWindow.ShowDialog(message: $"您确定取消发布{this.Code} (v{this.Version})吗?", title: "确认", onYes: () => { this.PublishState = PublishStatus.UnPublished; Global.Execute(new UpdateKernelCommand(this)); }, icon: "Icon_Confirm"); }); this.BrowsePackage = new DelegateCommand(() => { OpenFileDialog openFileDialog = new OpenFileDialog { InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Filter = "zip (*.zip)|*.zip", FilterIndex = 1 }; if (openFileDialog.ShowDialog() == DialogResult.OK) { string package = Path.GetFileName(openFileDialog.FileName); this.Sha1 = HashUtil.Sha1(File.ReadAllBytes(openFileDialog.FileName)); this.Package = package; this.Size = new FileInfo(openFileDialog.FileName).Length; this.KernelProfileVm.Refresh(); } }); this.AddCoinKernel = new DelegateCommand <CoinViewModel>((coinVm) => { int sortNumber = coinVm.CoinKernels.Count == 0 ? 1 : coinVm.CoinKernels.Max(a => a.SortNumber) + 1; Global.Execute(new AddCoinKernelCommand(new CoinKernelViewModel(Guid.NewGuid()) { Args = string.Empty, CoinId = coinVm.Id, Description = string.Empty, KernelId = this.Id, SortNumber = sortNumber })); }); this.AddKernelOutputFilter = new DelegateCommand(() => { new KernelOutputFilterViewModel(Guid.NewGuid()) { KernelId = this.Id }.Edit.Execute(null); }); this.AddKernelOutputTranslater = new DelegateCommand(() => { int sortNumber = this.KernelOutputTranslaters.Count == 0 ? 1 : this.KernelOutputTranslaters.Count + 1; new KernelOutputTranslaterViewModel(Guid.NewGuid()) { KernelId = this.Id, SortNumber = sortNumber }.Edit.Execute(null); }); this.ShowKernelHelp = new DelegateCommand(() => { if (string.IsNullOrEmpty(HelpArg)) { return; } string helpArg = this.HelpArg.Trim(); string asFileFullName = Path.Combine(this.GetKernelDirFullName(), helpArg); // 如果当前内核不处在挖矿中则可以解压缩,否则不能解压缩因为内核文件处在使用中无法覆盖 if (!NTMinerRoot.Current.IsMining || NTMinerRoot.Current.CurrentMineContext.Kernel.GetId() != this.GetId()) { this.ExtractPackage(); } string helpText; if (File.Exists(asFileFullName)) { helpText = File.ReadAllText(asFileFullName, Encoding.UTF8); KernelHelpPage.ShowWindow("内核帮助 - " + this.FullName, helpText); } else { string commandName = this.GetCommandName(fromHelpArg: true); string kernelExeFileFullName = Path.Combine(this.GetKernelDirFullName(), commandName); int exitCode = -1; Windows.Cmd.RunClose(kernelExeFileFullName, helpArg.Substring(commandName.Length), ref exitCode, out helpText); } KernelHelpPage.ShowWindow("内核帮助 - " + this.FullName, helpText); }); this.ClearTranslaterKeyword = new DelegateCommand(() => { this.TranslaterKeyword = string.Empty; }); this.SelectCopySourceKernel = new DelegateCommand <string>((tag) => { KernelCopySourceSelect.ShowWindow(this, tag); }); }
public KernelViewModel(Guid id) { _id = id; this.Save = new DelegateCommand(() => { if (NTMinerRoot.Instance.KernelSet.Contains(this.Id)) { VirtualRoot.Execute(new UpdateKernelCommand(this)); } else { VirtualRoot.Execute(new AddKernelCommand(this)); } CloseWindow?.Invoke(); }); this.Edit = new DelegateCommand <FormType?>((formType) => { if (this == Empty) { return; } KernelEdit.ShowWindow(formType ?? FormType.Edit, this); }); this.Remove = new DelegateCommand(() => { if (this.Id == Guid.Empty) { return; } DialogWindow.ShowDialog(message: $"您确定删除{this.FullName}内核吗?", title: "确认", onYes: () => { VirtualRoot.Execute(new RemoveKernelCommand(this.Id)); }, icon: IconConst.IconConfirm); }); this.Publish = new DelegateCommand(() => { DialogWindow.ShowDialog(message: $"您确定发布{this.Code} (v{this.Version})吗?", title: "确认", onYes: () => { this.PublishState = PublishStatus.Published; this.PublishOn = Timestamp.GetTimestamp(); VirtualRoot.Execute(new UpdateKernelCommand(this)); }, icon: IconConst.IconConfirm); }); this.UnPublish = new DelegateCommand(() => { DialogWindow.ShowDialog(message: $"您确定取消发布{this.Code} (v{this.Version})吗?", title: "确认", onYes: () => { this.PublishState = PublishStatus.UnPublished; VirtualRoot.Execute(new UpdateKernelCommand(this)); }, icon: IconConst.IconConfirm); }); this.BrowsePackage = new DelegateCommand(() => { OpenFileDialog openFileDialog = new OpenFileDialog { InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Filter = "zip (*.zip)|*.zip", FilterIndex = 1 }; if (openFileDialog.ShowDialog() == DialogResult.OK) { string package = Path.GetFileName(openFileDialog.FileName); this.Package = package; this.Size = new FileInfo(openFileDialog.FileName).Length; this.KernelProfileVm.Refresh(); } }); this.AddCoinKernel = new DelegateCommand <CoinViewModel>((coinVm) => { if (coinVm == null || coinVm.Id == Guid.Empty) { return; } int sortNumber = coinVm.CoinKernels.Count == 0 ? 1 : coinVm.CoinKernels.Max(a => a.SortNumber) + 1; VirtualRoot.Execute(new AddCoinKernelCommand(new CoinKernelViewModel(Guid.NewGuid()) { Args = string.Empty, CoinId = coinVm.Id, KernelId = this.Id, SortNumber = sortNumber })); }); this.ShowKernelHelp = new DelegateCommand(() => { if (string.IsNullOrEmpty(HelpArg)) { return; } string kernelDirFullName = this.GetKernelDirFullName(); if (string.IsNullOrEmpty(kernelDirFullName)) { return; } string helpArg = this.HelpArg.Trim(); string asFileFullName = Path.Combine(kernelDirFullName, helpArg); // 如果当前内核不处在挖矿中则可以解压缩,否则不能解压缩因为内核文件处在使用中无法覆盖 if (!NTMinerRoot.Instance.IsMining || NTMinerRoot.Instance.CurrentMineContext.Kernel.GetId() != this.GetId()) { if (!this.IsPackageFileExist()) { DialogWindow.ShowDialog(icon: "Icon_Info", title: "提示", message: "内核未安装"); return; } this.ExtractPackage(); } string helpText; if (File.Exists(asFileFullName)) { helpText = File.ReadAllText(asFileFullName); KernelHelpPage.ShowWindow("内核帮助 - " + this.FullName, helpText); } else { string commandName = this.GetCommandName(fromHelpArg: true); string kernelExeFileFullName = Path.Combine(kernelDirFullName, commandName); int exitCode = -1; Windows.Cmd.RunClose(kernelExeFileFullName, helpArg.Substring(commandName.Length), ref exitCode, out helpText); } KernelHelpPage.ShowWindow("内核帮助 - " + this.FullName, helpText); }); }