Ejemplo n.º 1
0
        public async Task PatchPluginActivatedBoards(string pluginPath, string[] activatedBoards)
        {
            var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath);

            plugin.ActivatedBoards = activatedBoards;
            await SavePluginInfo();
        }
Ejemplo n.º 2
0
        public async Task PatchPluginPriority(string pluginPath, int priority)
        {
            var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath);

            plugin.Priority = priority;
            await SavePluginInfo();
        }
Ejemplo n.º 3
0
        public async Task PatchPluginEnable(string pluginPath, bool enable)
        {
            var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath);

            plugin.IsEnabled = enable;
            await SavePluginInfo();
        }
Ejemplo n.º 4
0
        // Board settings will allow only key-value pair and value is not nested item or array.
        // ex.
        // Settings: {
        //     "Name" : "text", // allow
        //     "Users" : [ "Kain", "KOJIMA" ] // allow
        //     "UserDetail" : [ { "name" : "kain", auth: false } ] // disallow
        // }
        public async Task <string> GetBoardPluginSetting(string boardKey, string pluginPath)
        {
            var path = GetPluginBoardSettingPath(boardKey, pluginPath);

            if (!File.Exists(path))
            {
                var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath);
                if (plugin == null)
                {
                    throw new InvalidOperationException("Not found plugin");
                }
                else
                {
                    if (plugin.HasBoardSetting)
                    {
                        return(JsonConvert.SerializeObject(plugin.DefaultBoardSetting));
                    }
                    else
                    {
                        throw new InvalidOperationException("This plugin cannot has settings.");
                    }
                }
            }
            return(await File.ReadAllTextAsync(path));
        }
Ejemplo n.º 5
0
        public async Task SaveBoardPluginSetting(string boardKey, string pluginPath, JObject settings)
        {
            var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath);

            if (plugin == null)
            {
                throw new InvalidOperationException("Not found plugin");
            }
            else if (!plugin.HasBoardSetting)
            {
                throw new InvalidOperationException("This plugin cannot has settings.");
            }
            var path     = GetPluginBoardSettingPath(boardKey, pluginPath);
            var saveTask = File.WriteAllTextAsync(path, settings.ToString());

            plugin.BoardSetting[boardKey] = settings.ToObject <object>();
            await saveTask;
        }
Ejemplo n.º 6
0
        public async void RunPlugins(PluginTypes types, Board board, Thread thread, Response response, Session session)
        {
            var targetPlugin = LoadedPlugins.Where(x => (x.PluginType & types) == types &&
                                                   x.IsEnabled &&
                                                   x.Valid &&
                                                   x.ActivatedBoards.Contains(board.BoardKey))
                               .OrderBy(x => x.Priority);

            foreach (var item in targetPlugin)
            {
                try
                {
                    await item.Script.RunAsync(new ZerochSharpPlugin(board, thread, response, types,
                                                                     item.BoardSetting?[board.BoardKey] as dynamic, session));
                }
                catch (CompilationErrorException ex)
                {
                    Console.WriteLine("Error in plugin running.");
                    Console.WriteLine(ex.Message);
                    var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == item.PluginPath);
                    if (plugin == null)
                    {
                        throw new InvalidOperationException();
                    }

                    plugin.Valid = false;
                    await SavePluginInfo();

                    Console.WriteLine($"Plugin {item.PluginName} is disabled.");
                }
                catch (Exception e)
                {
                    throw new InvalidOperationException("error in running plugin", e);
                }
            }
        }