diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2023-01-14 06:27:50 +0100 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2024-02-18 11:32:53 +0100 |
commit | eed3b0a919e3790c4383548e3d30c83070465e7d (patch) | |
tree | 9fa8e3dda5a25fd903a53523e9dbbaa3809a4f50 /slack/config.py | |
parent | 01583ccd6e4aa1755ac2ab4151a20537cfc0c8dc (diff) | |
download | wee-slack-eed3b0a919e3790c4383548e3d30c83070465e7d.tar.gz |
Split weechat and slack config
Diffstat (limited to 'slack/config.py')
-rw-r--r-- | slack/config.py | 153 |
1 files changed, 8 insertions, 145 deletions
diff --git a/slack/config.py b/slack/config.py index 6150ff7..b2e2c07 100644 --- a/slack/config.py +++ b/slack/config.py @@ -1,7 +1,6 @@ from __future__ import annotations -from dataclasses import dataclass -from typing import Generic, TypeVar, Union, cast +from typing import Union import weechat @@ -9,149 +8,13 @@ from slack.api import SlackWorkspace from slack.log import print_error from slack.shared import shared from slack.util import get_callback_name - - -class WeeChatColor(str): - pass - - -@dataclass -class WeeChatConfig: - name: str - - def __post_init__(self): - self.pointer = weechat.config_new(self.name, "", "") - - -@dataclass -class WeeChatSection: - weechat_config: WeeChatConfig - name: str - user_can_add_options: bool = False - user_can_delete_options: bool = False - callback_read: str = "" - callback_write: str = "" - - def __post_init__(self): - self.pointer = weechat.config_new_section( - self.weechat_config.pointer, - self.name, - self.user_can_add_options, - self.user_can_delete_options, - self.callback_read, - "", - self.callback_write, - "", - "", - "", - "", - "", - "", - "", - ) - - -WeeChatOptionType = TypeVar("WeeChatOptionType", bound=Union[int, str]) - - -@dataclass -class WeeChatOption(Generic[WeeChatOptionType]): - section: WeeChatSection - name: str - description: str - default_value: WeeChatOptionType - min_value: Union[int, None] = None - max_value: Union[int, None] = None - string_values: Union[str, None] = None - parent_option: Union[WeeChatOption[WeeChatOptionType], None] = None - - def __post_init__(self): - self._pointer = self._create_weechat_option() - - @property - def value(self) -> WeeChatOptionType: - if weechat.config_option_is_null(self._pointer): - if self.parent_option: - return self.parent_option.value - return self.default_value - - if isinstance(self.default_value, bool): - return cast(WeeChatOptionType, weechat.config_boolean(self._pointer) == 1) - if isinstance(self.default_value, int): - return cast(WeeChatOptionType, weechat.config_integer(self._pointer)) - if isinstance(self.default_value, WeeChatColor): - color = weechat.config_color(self._pointer) - return cast(WeeChatOptionType, WeeChatColor(color)) - return cast(WeeChatOptionType, weechat.config_string(self._pointer)) - - @value.setter - def value(self, value: WeeChatOptionType): - rc = self.value_set_as_str(str(value)) - if rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR: - raise Exception(f"Failed to value for option: {self.name}") - - def value_set_as_str(self, value: str) -> int: - return weechat.config_option_set(self._pointer, value, 1) - - def value_set_null(self) -> int: - if not self.parent_option: - raise Exception( - f"Can't set null value for option without parent: {self.name}" - ) - return weechat.config_option_set_null(self._pointer, 1) - - @property - def weechat_type(self) -> str: - if self.string_values: - return "integer" - if isinstance(self.default_value, bool): - return "boolean" - if isinstance(self.default_value, int): - return "integer" - if isinstance(self.default_value, WeeChatColor): - return "color" - return "string" - - def _create_weechat_option(self) -> str: - if self.parent_option: - parent_option_name = ( - f"{self.parent_option.section.weechat_config.name}" - f".{self.parent_option.section.name}" - f".{self.parent_option.name}" - ) - name = f"{self.name} << {parent_option_name}" - default_value = None - null_value_allowed = True - else: - name = self.name - default_value = str(self.default_value) - null_value_allowed = False - - value = None - - if shared.weechat_version < 0x3050000: - default_value = str(self.default_value) - value = default_value - - return weechat.config_new_option( - self.section.weechat_config.pointer, - self.section.pointer, - name, - self.weechat_type, - self.description, - self.string_values or "", - self.min_value or -(2**31), - self.max_value or 2**31 - 1, - default_value, - value, - null_value_allowed, - "", - "", - "", - "", - "", - "", - ) +from slack.weechat_config import ( + WeeChatColor, + WeeChatConfig, + WeeChatOption, + WeeChatOptionType, + WeeChatSection, +) class SlackConfigSectionColor: |