Example #1
0
        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());
        }