Beispiel #1
0
 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);
     });
 }
Beispiel #2
0
 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);
     });
 }