plugin defined settings!!!!

This commit is contained in:
SpookyDervish
2025-10-30 17:45:30 +11:00
parent 13862bdad5
commit 94c2a72c41
5 changed files with 156 additions and 39 deletions

View File

@@ -2,6 +2,7 @@ from textual.app import App
from pathlib import Path
import os
import configparser
from typing import Any
class ConfigHandler:
@@ -9,8 +10,43 @@ class ConfigHandler:
self.app: App = app
self.config: configparser.ConfigParser = configparser.ConfigParser()
self.plugin_defined_settings = {}
self.config_dir: str = self.ensure_hidden_config_dir()
self.load_settings()
def define_plugin_setting(self, plugin_name: str, option_name: str, description: str, option_type: str, default_value: Any, on_changed_func = None):
actual_type = None
if option_type == "boolean":
actual_type = bool
elif option_type == "string":
actual_type = str
elif option_type == "float":
actual_type = float
elif option_type == "integer":
actual_type = int
else:
raise Exception(f"Invalid type name \"{option_type}\".")
if plugin_name in self.plugin_defined_settings:
self.plugin_defined_settings[plugin_name][option_name] = {
"option_name": option_name,
"description": description,
"type": actual_type,
"default_value": default_value,
"on_changed_func": on_changed_func
}
else:
self.plugin_defined_settings[plugin_name] = {option_name: {
"option_name": option_name,
"description": description,
"type": actual_type,
"default_value": default_value,
"on_changed_func": on_changed_func
}}
# user hasnt used this plugin before
if self.get("plugin_" + plugin_name, option_name) == None:
self.set("plugin_" + plugin_name, option_name, default_value)
def ensure_hidden_config_dir(self):
config_dir = Path.home() / ".berry"
@@ -19,10 +55,18 @@ class ConfigHandler:
return config_dir
def get(self, section: str, option: str):
return self.config.get(section, option)
return self.config.get(section, option, fallback=None)
def set(self, section: str, option: str, new_value: str):
if not self.config.has_section(section):
self.config.add_section(section)
self.config.set(section, option, new_value)
if section.startswith("plugin_"):
section = section.removeprefix("plugin_")
if self.plugin_defined_settings[section].get("on_changed_func", None) != None:
self.plugin_defined_settings[section]["on_changed_func"](new_value)
self.write_settings()
def apply_settings(self):