private async void Init() { var addins = await LoadAddins(); AllAddins = new SourceList <AddinVM>(); AllAddins.AddRange(addins.Select(s => new AddinVM(s))); var searchObs = this.WhenAnyValue(v => v.Search).Skip(1).Throttle(TimeSpan.FromMilliseconds(300)).Select(s => true); AllAddins.Connect() .Filter(filter) .AutoRefreshOnObservable(c => searchObs) .Bind(out var data) .Subscribe(); Addins = data; if (!fileData.Data.LastAddin.IsNullOrEmpty()) { Addin = AllAddins.Items.FirstOrDefault(a => a.Addin.AddinFile.EqualsIgnoreCase(fileData.Data.LastAddin)); if (Addin != null && !fileData.Data.LastCommand.IsNullOrEmpty()) { Command = Addin.Addin.Commands.FirstOrDefault( c => c.Command.GlobalName == fileData.Data.LastCommand); } } var canStart = this.WhenAnyValue(v => v.Command).Select(s => s != null); Start = CreateCommand( () => { HideMe(); var addin = Addin; var com = Command; fileData.Data.AddinFiles.Remove(addin.Addin.AddinFile); fileData.Data.AddinFiles.Insert(0, addin.Addin.AddinFile); fileData.Data.LastAddin = addin.Addin.AddinFile; fileData.Data.LastCommand = Command.Method.Name; OnClosing(); AllAddins.Remove(addin); AllAddins.Insert(0, addin); Addin = addin; Command = com; AddinManagerService.Invoke(com); }, canStart); RemoveAddin = this.CreateCommand <AddinVM>(a => { AllAddins.Remove(a); fileData.Data.AddinFiles.Remove(a.Addin.AddinFile); }); AddAddin = CreateCommand(AddAddinExec); if (!errors.IsNullOrEmpty()) { ShowMessage(errors, "Đã xảy ra lỗi khi gọi tệp xung đột"); } UpdateCommands = CreateCommand(UpdateCommandsExec); }
private async void Init() { var addins = await LoadAddins(); AllAddins = new ReactiveList <AddinVM>(addins.Select(s => new AddinVM(s))); Addins = AllAddins.CreateDerivedCollection(s => s, filter); if (!fileData.Data.LastAddin.IsNullOrEmpty()) { Addin = AllAddins.FirstOrDefault(a => a.Addin.AddinFile.EqualsIgnoreCase(fileData.Data.LastAddin)); if (Addin != null && !fileData.Data.LastCommand.IsNullOrEmpty()) { Command = Addin.Addin.Commands.FirstOrDefault( c => c.Command.GlobalName == fileData.Data.LastCommand); } } var canStart = this.WhenAnyValue(v => v.Command).Select(s => s != null); Start = CreateCommand(() => { HideMe(); var addin = Addin; var com = Command; fileData.Data.AddinFiles.Remove(addin.Addin.AddinFile); fileData.Data.AddinFiles.Insert(0, addin.Addin.AddinFile); fileData.Data.LastAddin = addin.Addin.AddinFile; fileData.Data.LastCommand = Command.Method.Name; OnClosing(); AllAddins.Remove(addin); AllAddins.Insert(0, addin); Addin = addin; Command = com; AddinManagerService.Invoke(com); }, canStart); RemoveAddin = CreateCommand <AddinVM>(a => { AllAddins.Remove(a); fileData.Data.AddinFiles.Remove(a.Addin.AddinFile); }); AddAddin = CreateCommand(AddAddinExec); if (!errors.IsNullOrEmpty()) { ShowMessage(errors, "Ошибка загрузки файлов сборок"); } this.WhenAnyValue(v => v.Search).Skip(1).Throttle(TimeSpan.FromMilliseconds(300)) .ObserveOn(dispatcher) .Subscribe(s => Addins.Reset()); }
private void AddAddinExec() { var file = SelectAddin(); var addinExist = AllAddins.FirstOrDefault(a => a.Addin.AddinFile.EqualsIgnoreCase(file)); if (addinExist != null) { ShowMessage("Такая сборка уже есть"); Addin = addinExist; return; } var addin = AddinManagerService.GetAddin(file); AllAddins.Insert(0, new AddinVM(addin)); fileData.Data.AddinFiles.Insert(0, file); }
private Task <List <Addin> > LoadAddins() { return(Task.Run(() => { var file = NetLib.IO.Path.GetUserPluginFile("AcadAddinManager", "AcadAddinManagerData.json"); fileData = new LocalFileData <AddinsData>(file, false); fileData.TryLoad(() => new AddinsData()); errors = string.Empty; return fileData.Data.AddinFiles.Select(s => { try { return AddinManagerService.GetAddin(s); } catch (Exception ex) { errors += $"{s} - {ex.Message}.\n\n"; return null; } }) .Where(w => w != null).ToList(); })); }
public void Update() { Addin = AddinManagerService.GetAddin(Addin.AddinFile); AllCommands.Clear(); AllCommands.AddRange(Addin.Commands); }