Now About Social Code
aboutsummaryrefslogtreecommitdiff
path: root/src/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.py')
-rw-r--r--src/config.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/config.py b/src/config.py
new file mode 100644
index 0000000..ee9d611
--- /dev/null
+++ b/src/config.py
@@ -0,0 +1,140 @@
+# main.py
+#
+# Copyright 2024 Lucas Fryzek
+# Based on code from QWeeChat
+# Copyright (C) 2011-2022 Sébastien Helleu <flashcode@flashtux.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+"""Configuration for Weegtk."""
+
+import configparser
+import os
+
+from gi.repository import GLib
+
+from pathlib import Path
+
+CONFIG_DIR = f"{GLib.get_user_config_dir()}/weegtk"
+CONFIG_FILENAME = f"{CONFIG_DIR}/weegtk.conf"
+
+CONFIG_DEFAULT_RELAY_LINES = 50
+
+CONFIG_DEFAULT_SECTIONS = ('relay', 'look', 'color', 'ssh')
+CONFIG_DEFAULT_OPTIONS = (('relay.hostname', ''),
+ ('relay.port', ''),
+ ('relay.ssl', 'off'),
+ ('relay.password', ''),
+ ('relay.autoconnect', 'off'),
+ ('relay.lines', str(CONFIG_DEFAULT_RELAY_LINES)),
+ ('ssh.host', ''),
+ ('ssh.port', ''),
+ ('ssh.username', ''),
+ ('ssh.key', ''),
+ ('look.debug', 'off'),
+ ('look.statusbar', 'off'))
+
+# Default colors for WeeChat color options (option name, #rgb value)
+CONFIG_DEFAULT_COLOR_OPTIONS = (
+ ('separator', '#000066'), # 0
+ ('chat', '#000000'), # 1
+ ('chat_time', '#999999'), # 2
+ ('chat_time_delimiters', '#000000'), # 3
+ ('chat_prefix_error', '#FF6633'), # 4
+ ('chat_prefix_network', '#990099'), # 5
+ ('chat_prefix_action', '#000000'), # 6
+ ('chat_prefix_join', '#00CC00'), # 7
+ ('chat_prefix_quit', '#CC0000'), # 8
+ ('chat_prefix_more', '#CC00FF'), # 9
+ ('chat_prefix_suffix', '#330099'), # 10
+ ('chat_buffer', '#000000'), # 11
+ ('chat_server', '#000000'), # 12
+ ('chat_channel', '#000000'), # 13
+ ('chat_nick', '#000000'), # 14
+ ('chat_nick_self', '*#000000'), # 15
+ ('chat_nick_other', '#000000'), # 16
+ ('', '#000000'), # 17 (nick1 -- obsolete)
+ ('', '#000000'), # 18 (nick2 -- obsolete)
+ ('', '#000000'), # 19 (nick3 -- obsolete)
+ ('', '#000000'), # 20 (nick4 -- obsolete)
+ ('', '#000000'), # 21 (nick5 -- obsolete)
+ ('', '#000000'), # 22 (nick6 -- obsolete)
+ ('', '#000000'), # 23 (nick7 -- obsolete)
+ ('', '#000000'), # 24 (nick8 -- obsolete)
+ ('', '#000000'), # 25 (nick9 -- obsolete)
+ ('', '#000000'), # 26 (nick10 -- obsolete)
+ ('chat_host', '#666666'), # 27
+ ('chat_delimiters', '#9999FF'), # 28
+ ('chat_highlight', '#3399CC'), # 29
+ ('chat_read_marker', '#000000'), # 30
+ ('chat_text_found', '#000000'), # 31
+ ('chat_value', '#000000'), # 32
+ ('chat_prefix_buffer', '#000000'), # 33
+ ('chat_tags', '#000000'), # 34
+ ('chat_inactive_window', '#000000'), # 35
+ ('chat_inactive_buffer', '#000000'), # 36
+ ('chat_prefix_buffer_inactive_buffer', '#000000'), # 37
+ ('chat_nick_offline', '#000000'), # 38
+ ('chat_nick_offline_highlight', '#000000'), # 39
+ ('chat_nick_prefix', '#000000'), # 40
+ ('chat_nick_suffix', '#000000'), # 41
+ ('emphasis', '#000000'), # 42
+ ('chat_day_change', '#000000'), # 43
+)
+config_options = {"color": []}
+
+
+def read():
+ """Read config file."""
+ global config_options
+ config = configparser.RawConfigParser()
+ if os.path.isfile(CONFIG_FILENAME):
+ config.read(CONFIG_FILENAME)
+
+ # add missing sections/options
+ for section in CONFIG_DEFAULT_SECTIONS:
+ if not config.has_section(section):
+ config.add_section(section)
+ for option in reversed(CONFIG_DEFAULT_OPTIONS):
+ section, name = option[0].split('.', 1)
+ if not config.has_option(section, name):
+ config.set(section, name, option[1])
+ section = 'color'
+ for option in reversed(CONFIG_DEFAULT_COLOR_OPTIONS):
+ if option[0] and not config.has_option(section, option[0]):
+ config.set(section, option[0], option[1])
+
+ # build list of color options
+ config_options = {"color": []}
+ for option in CONFIG_DEFAULT_COLOR_OPTIONS:
+ if option[0]:
+ config_options["color"].append(config.get('color', option[0]))
+ else:
+ config_options["color"].append('#000000')
+
+ return config
+
+
+def write(config):
+ """Write config file."""
+ Path(CONFIG_DIR).mkdir(mode=0o0700, parents=True, exist_ok=True)
+ with open(CONFIG_FILENAME, 'w') as cfg:
+ config.write(cfg)
+
+
+def color_options():
+ """Return color options."""
+ global config_options
+ return config_options["color"]