public async Task PatchPluginActivatedBoards(string pluginPath, string[] activatedBoards) { var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath); plugin.ActivatedBoards = activatedBoards; await SavePluginInfo(); }
public async Task PatchPluginPriority(string pluginPath, int priority) { var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath); plugin.Priority = priority; await SavePluginInfo(); }
public async Task PatchPluginEnable(string pluginPath, bool enable) { var plugin = LoadedPlugins.FirstOrDefault(x => x.PluginPath == pluginPath); plugin.IsEnabled = enable; await SavePluginInfo(); }
// 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)); }
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; }
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); } } }