예제 #1
0
        public IList <VisibleFilter> RetrieveVisibleFilters()
        {
            var list = new Collection <VisibleFilter>();

            list.Add(new VisibleFilter(DefaultFilter.Basic)
            {
                Visible = true
            });
            list.Add(new VisibleFilter(DefaultFilter.Content)
            {
                Visible = IsChecked(DefaultFilter.Content)
            });
            list.Add(new VisibleFilter(DefaultFilter.Dates)
            {
                Visible = IsChecked(DefaultFilter.Dates)
            });
            list.Add(new VisibleFilter(DefaultFilter.SizeAndAttributes)
            {
                Visible = IsChecked(DefaultFilter.SizeAndAttributes)
            });
            list.Add(new VisibleFilter(DefaultFilter.Duplicates)
            {
                Visible = IsChecked(DefaultFilter.Duplicates)
            });

            foreach (var p in Plugins.All())
            {
                list.Add(new VisibleFilter(DefaultFilter.Plugin)
                {
                    Visible = IsChecked(DefaultFilter.Plugin, p.PluginId), PluginId = p.PluginId
                });
            }

            return(list);
        }
예제 #2
0
        private void LoadPlugins()
        {
            foreach (var plugin in Plugins.All())
            {
                var page = new TabPage(plugin.TabTitle)
                {
                    UseVisualStyleBackColor = true
                };
                var panel = new Panel {
                    Dock = DockStyle.Fill, Padding = new Padding(3)
                };
                page.Tag = new VisibleFilter(DefaultFilter.Plugin)
                {
                    PluginId = plugin.PluginId, Visible = true
                };

                var control = plugin.BuildTabPage();
                control.Dock = DockStyle.Fill;
                panel.Controls.Add(control);
                page.Controls.Add(panel);

                _tabBucket.Add(page);
                tabsFilterOptions.TabPages.Add(page);
            }
            tabsFilterOptions.TabPages.Remove(tabConfig);
            tabsFilterOptions.TabPages.Add(tabConfig);
        }
예제 #3
0
        private async Task btnPatch_Click(object sender, EventArgs e)
        {
            using var _ = new ControlLock(btnPatch);

            IoC.Notif.ShowStatus("Generating patch...");
            IoC.Notif.ShowUnknownProgress();

            if (Plugins.Any() && !Plugins.All(x => x.ValidateChanges()))
            {
                IoC.Notif.HideProgress();
                IoC.Notif.ShowStatus("Pack install aborted");
                return;
            }

            var sw = new Stopwatch(); sw.Start();

            var success = await Async.Run(CreatePatch);

            Settings.UpdatePatchStatus();

            IoC.Notif.HideProgress();
            if (success)
            {
                IoC.Notif.ShowStatus($"Patch installed ({sw.Elapsed.TotalMilliseconds:n0} ms)");
            }
        }
예제 #4
0
        public ScriptContext Init()
        {
            if (HasInit)
            {
                return(this);
            }
            HasInit = true;

            if (InsertScriptMethods.Count > 0)
            {
                ScriptMethods.InsertRange(0, InsertScriptMethods);
            }
            if (InsertScriptBlocks.Count > 0)
            {
                ScriptBlocks.InsertRange(0, InsertScriptBlocks);
            }
            if (InsertPlugins.Count > 0)
            {
                Plugins.InsertRange(0, InsertPlugins);
            }

            foreach (var assembly in ScanAssemblies.Safe())
            {
                foreach (var type in assembly.GetTypes())
                {
                    if (typeof(IScriptPlugin).IsAssignableFrom(type))
                    {
                        if (Plugins.All(x => x.GetType() != type))
                        {
                            Container.AddSingleton(type);
                            var plugin = (IScriptPlugin)Container.Resolve(type);
                            Plugins.Add(plugin);
                        }
                    }
                }
            }

            Args[ScriptConstants.Debug] = DebugMode;

            Container.AddSingleton(() => this);
            Container.AddSingleton(() => Pages);

            ScriptLanguagesArray = ScriptLanguages.Distinct().ToArray();
            foreach (var scriptLanguage in ScriptLanguagesArray)
            {
                scriptLanguagesMap[scriptLanguage.Name] = scriptLanguage;

                if (scriptLanguage is IConfigureScriptContext init)
                {
                    init.Configure(this);
                }
            }

            var beforePlugins = Plugins.OfType <IScriptPluginBefore>();

            foreach (var plugin in beforePlugins)
            {
                plugin.BeforePluginsLoaded(this);
            }
            foreach (var plugin in Plugins)
            {
                plugin.Register(this);
            }

            OnAfterPlugins?.Invoke(this);

            foreach (var type in ScanTypes)
            {
                ScanType(type);
            }

            foreach (var assembly in ScanAssemblies.Safe())
            {
                foreach (var type in assembly.GetTypes())
                {
                    ScanType(type);
                }
            }

            foreach (var method in ScriptMethods)
            {
                InitMethod(method);
            }

            foreach (var block in ScriptBlocks)
            {
                InitBlock(block);
                blocksMap[block.Name] = block;
            }

            ScriptNamespaces = ScriptNamespaces.Distinct().ToList();

            var allTypes = new List <Type>(ScriptTypes);

            foreach (var asm in ScriptAssemblies)
            {
                allTypes.AddRange(asm.GetTypes());
            }

            foreach (var type in allTypes)
            {
                if (!ScriptTypeNameMap.ContainsKey(type.Name))
                {
                    ScriptTypeNameMap[type.Name] = type;
                }

                var qualifiedName = ProtectedMethods.typeQualifiedName(type);
                if (!ScriptTypeQualifiedNameMap.ContainsKey(qualifiedName))
                {
                    ScriptTypeQualifiedNameMap[qualifiedName] = type;
                }
            }

            var afterPlugins = Plugins.OfType <IScriptPluginAfter>();

            foreach (var plugin in afterPlugins)
            {
                plugin.AfterPluginsLoaded(this);
            }

            return(this);
        }
예제 #5
0
        public ScriptContext Init()
        {
            if (HasInit)
            {
                return(this);
            }
            HasInit = true;

            if (InsertScriptMethods.Count > 0)
            {
                ScriptMethods.InsertRange(0, InsertScriptMethods);
            }
            if (InsertScriptBlocks.Count > 0)
            {
                ScriptBlocks.InsertRange(0, InsertScriptBlocks);
            }
            if (InsertPlugins.Count > 0)
            {
                Plugins.InsertRange(0, InsertPlugins);
            }

            foreach (var assembly in ScanAssemblies.Safe())
            {
                foreach (var type in assembly.GetTypes())
                {
                    if (typeof(IScriptPlugin).IsAssignableFrom(type))
                    {
                        if (Plugins.All(x => x.GetType() != type))
                        {
                            Container.AddSingleton(type);
                            var plugin = (IScriptPlugin)Container.Resolve(type);
                            Plugins.Add(plugin);
                        }
                    }
                }
            }

            Args[ScriptConstants.Debug] = DebugMode;

            Container.AddSingleton(() => this);
            Container.AddSingleton(() => Pages);

            var beforePlugins = Plugins.OfType <IScriptPluginBefore>();

            foreach (var plugin in beforePlugins)
            {
                plugin.BeforePluginsLoaded(this);
            }
            foreach (var plugin in Plugins)
            {
                plugin.Register(this);
            }

            OnAfterPlugins?.Invoke(this);

            foreach (var type in ScanTypes)
            {
                ScanType(type);
            }

            foreach (var assembly in ScanAssemblies.Safe())
            {
                foreach (var type in assembly.GetTypes())
                {
                    ScanType(type);
                }
            }

            foreach (var method in ScriptMethods)
            {
                InitMethod(method);
            }

            foreach (var block in ScriptBlocks)
            {
                InitBlock(block);
                blocksMap[block.Name] = block;
            }

            var afterPlugins = Plugins.OfType <IScriptPluginAfter>();

            foreach (var plugin in afterPlugins)
            {
                plugin.AfterPluginsLoaded(this);
            }

            return(this);
        }
예제 #6
0
        private void btnSearch_Click(object sender, EventArgs e)
        {
            if (_searchEngine != null && _searchEngine.IsRunning)
            {
                _searchEngine.Stop();
                btnSearch.Enabled = false;
                return;
            }

            var directoryInfo = new DirectoryInfo(cmbFolder.Text.Trim('\\') + "\\");

            if (!directoryInfo.Exists)
            {
                MessageBox.Show(@"The specified folder does not exist.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            var text = cmbCriteria.SelectedItem != null ? (string)cmbCriteria.SelectedItem : cmbCriteria.Text;

            try
            {
                if (chkRegularExpressions.Checked)
                {
                    // ReSharper disable ReturnValueOfPureMethodIsNotUsed
                    Regex.IsMatch("", text); // Do nothing with the value, just validate it for argument.
                }
                // ReSharper restore ReturnValueOfPureMethodIsNotUsed
            }
            catch (ArgumentException)
            {
                MessageBox.Show(@"The specified regular expression is not valid.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            statusProgress.Style = ProgressBarStyle.Marquee;
            lstResults.ClearContent();
            _resultsViewIsUpdated = false;

            // Save the criteria
            if (!string.IsNullOrEmpty(text))
            {
                if (cmbCriteria.Items.Contains(text))
                {
                    cmbCriteria.Items.Remove(text);
                }
                cmbCriteria.Items.Insert(0, text);
                cmbCriteria.SelectedItem = 0;
            }
            // Save the content combobox
            var content = cmbContent.SelectedItem != null ? (string)cmbContent.SelectedItem : cmbContent.Text;

            if (!string.IsNullOrEmpty(content))
            {
                if (cmbContent.Items.Contains(content))
                {
                    cmbContent.Items.Remove(content);
                }
                cmbContent.Items.Insert(0, content);
                cmbContent.SelectedItem = 0;
            }

            // Save the content
            btnSearch.Text             = @"Stop";
            statusLabel.Text           = @"Searching... Please wait.";
            statusLabelExceptions.Text = null;
            tabsFilterOptions.Enabled  = false;

            _searchEngine = new SearchEngine(BuildOptions(directoryInfo, text), Plugins.All().Select(f => f.GetCriterion()).Where(f => f != null).SelectMany(f => f));
            _searchEngine.Start(LoadList, LoadListFinished);
        }