Files
DemonEditor/app/settings.py

403 lines
13 KiB
Python
Raw Normal View History

2019-12-13 13:31:07 +03:00
import json
import os
from pprint import pformat
from textwrap import dedent
2019-12-22 20:42:29 +03:00
from enum import Enum, IntEnum
2019-12-13 13:31:07 +03:00
from pathlib import Path
CONFIG_PATH = str(Path.home()) + "/.config/demon-editor/"
CONFIG_FILE = CONFIG_PATH + "config.json"
DATA_PATH = "data/"
2019-12-22 20:42:29 +03:00
class Defaults(Enum):
""" Default program settings """
DEFAULT_PROFILE = "default"
BACKUP_BEFORE_DOWNLOADING = True
BACKUP_BEFORE_SAVE = True
V5_SUPPORT = False
HTTP_API_SUPPORT = False
ENABLE_YT_DL = False
ENABLE_SEND_TO = False
USE_COLORS = True
NEW_COLOR = "rgb(255,230,204)"
EXTRA_COLOR = "rgb(179,230,204)"
FAV_CLICK_MODE = 0
def get_default_settings():
return {
"version": 1,
"default_profile": Defaults.DEFAULT_PROFILE.value,
"profiles": {"default": SettingsType.ENIGMA_2.get_default_settings()},
"v5_support": Defaults.V5_SUPPORT.value,
"http_api_support": Defaults.HTTP_API_SUPPORT.value,
"enable_yt_dl": Defaults.ENABLE_YT_DL.value,
"enable_send_to": Defaults.ENABLE_SEND_TO.value,
"use_colors": Defaults.USE_COLORS.value,
"new_color": Defaults.NEW_COLOR.value,
"extra_color": Defaults.EXTRA_COLOR.value,
"fav_click_mode": Defaults.FAV_CLICK_MODE.value
}
class SettingsType(IntEnum):
2019-12-13 13:31:07 +03:00
""" Profiles for settings """
2019-12-22 20:42:29 +03:00
ENIGMA_2 = 0
NEUTRINO_MP = 1
def get_default_settings(self):
""" Returns default settings for current type """
if self is self.ENIGMA_2:
return {"setting_type": self,
"host": "127.0.0.1", "port": "21", "user": "root", "password": "root", "timeout": 5,
"http_user": "root", "http_password": "", "http_port": "80", "http_timeout": 5,
"telnet_user": "root", "telnet_password": "", "telnet_port": "23", "telnet_timeout": 5,
"services_path": "/etc/enigma2/", "user_bouquet_path": "/etc/enigma2/",
"satellites_xml_path": "/etc/tuxbox/", "data_local_path": DATA_PATH + "enigma2/",
"picons_path": "/usr/share/enigma2/picon",
"picons_local_path": DATA_PATH + "enigma2/picons/",
"backup_local_path": DATA_PATH + "enigma2/backup/"}
elif self is self.NEUTRINO_MP:
return {"setting_type": self,
"host": "127.0.0.1", "port": "21", "user": "root", "password": "root", "timeout": 5,
"http_user": "", "http_password": "", "http_port": "80", "http_timeout": 2,
"telnet_user": "root", "telnet_password": "", "telnet_port": "23", "telnet_timeout": 1,
"services_path": "/var/tuxbox/config/zapit/", "user_bouquet_path": "/var/tuxbox/config/zapit/",
"satellites_xml_path": "/var/tuxbox/config/", "data_local_path": DATA_PATH + "neutrino/",
"picons_path": "/usr/share/tuxbox/neutrino/icons/logo/",
"picons_local_path": DATA_PATH + "neutrino/picons/",
"backup_local_path": DATA_PATH + "neutrino/backup/"}
class SettingsException(Exception):
pass
2019-12-13 13:31:07 +03:00
class Settings:
__INSTANCE = None
2019-12-22 20:42:29 +03:00
__VERSION = 1
2019-12-13 13:31:07 +03:00
def __init__(self):
2019-12-22 20:42:29 +03:00
settings = get_settings()
if self.__VERSION > settings.get("version", 0):
write_settings(get_default_settings())
raise SettingsException("Outdated version of the settings format!")
self._settings = settings
self._current_profile = self._settings.get("default_profile", "default")
self._profiles = self._settings.get("profiles", {"default": SettingsType.ENIGMA_2.get_default_settings()})
self._cp_settings = self._profiles.get(self._current_profile) # Current profile settings
2019-12-13 13:31:07 +03:00
def __str__(self):
return dedent(""" Current profile: {}
Current profile options:
{}
Full config:
{}
""").format(self._current_profile,
2019-12-22 20:42:29 +03:00
pformat(self._cp_settings),
pformat(self._settings))
2019-12-13 13:31:07 +03:00
@classmethod
def get_instance(cls):
if not cls.__INSTANCE:
cls.__INSTANCE = Settings()
return cls.__INSTANCE
def save(self):
2019-12-22 20:42:29 +03:00
write_settings(self._settings)
2019-12-13 13:31:07 +03:00
def reset(self, force_write=False):
2019-12-22 20:42:29 +03:00
for k, v in self.setting_type.get_default_settings().items():
self._cp_settings[k] = v
2019-12-13 13:31:07 +03:00
if force_write:
2019-12-22 20:42:29 +03:00
self.save()
def get_default(self, p_name):
""" Returns default value for current settings type """
return self.setting_type.get_default_settings().get(p_name)
2019-12-13 13:31:07 +03:00
def add(self, name, value):
""" Adds extra options """
2019-12-22 20:42:29 +03:00
self._settings[name] = value
2019-12-13 13:31:07 +03:00
def get(self, name):
2019-12-22 20:42:29 +03:00
""" Returns extra options or None """
return self._settings.get(name, None)
2019-12-13 13:31:07 +03:00
@property
2019-12-22 20:42:29 +03:00
def profiles(self):
return self._profiles
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
@profiles.setter
def profiles(self, ps):
self._profiles = ps
self._settings["profiles"] = self._profiles
2019-12-13 13:31:07 +03:00
@property
2019-12-22 20:42:29 +03:00
def setting_type(self):
return SettingsType(self._cp_settings.get("setting_type", SettingsType.ENIGMA_2.value))
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
@setting_type.setter
def setting_type(self, s_type):
self._cp_settings["setting_type"] = s_type
for k, v in s_type.get_default_settings().items():
self._cp_settings[k] = v
2019-12-13 13:31:07 +03:00
@property
def host(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("host", self.get_default("host"))
2019-12-13 13:31:07 +03:00
@host.setter
def host(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["host"] = value
2019-12-13 13:31:07 +03:00
@property
def port(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("port", self.get_default("port"))
2019-12-13 13:31:07 +03:00
@port.setter
def port(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["port"] = value
2019-12-13 13:31:07 +03:00
@property
def user(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("user", self.get_default("user"))
2019-12-13 13:31:07 +03:00
@user.setter
def user(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["user"] = value
2019-12-13 13:31:07 +03:00
@property
def password(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("password", self.get_default("password"))
2019-12-13 13:31:07 +03:00
@password.setter
def password(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["password"] = value
2019-12-13 13:31:07 +03:00
@property
def http_user(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("http_user", self.get_default("http_user"))
2019-12-13 13:31:07 +03:00
@http_user.setter
def http_user(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["http_user"] = value
2019-12-13 13:31:07 +03:00
@property
def http_password(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("http_password", self.get_default("http_password"))
2019-12-13 13:31:07 +03:00
@http_password.setter
def http_password(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["http_password"] = value
2019-12-13 13:31:07 +03:00
@property
def http_port(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("http_port", self.get_default("http_port"))
2019-12-13 13:31:07 +03:00
@http_port.setter
def http_port(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["http_port"] = value
2019-12-13 13:31:07 +03:00
@property
def http_timeout(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("http_timeout", self.get_default("http_timeout"))
2019-12-13 13:31:07 +03:00
@http_timeout.setter
def http_timeout(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["http_timeout"] = value
2019-12-13 13:31:07 +03:00
@property
def telnet_user(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("telnet_user", self.get_default("telnet_user"))
2019-12-13 13:31:07 +03:00
@telnet_user.setter
def telnet_user(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["telnet_user"] = value
2019-12-13 13:31:07 +03:00
@property
def telnet_password(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("telnet_password", self.get_default("telnet_password"))
2019-12-13 13:31:07 +03:00
@telnet_password.setter
def telnet_password(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["telnet_password"] = value
2019-12-13 13:31:07 +03:00
@property
def telnet_port(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("telnet_port", self.get_default("telnet_port"))
2019-12-13 13:31:07 +03:00
@telnet_port.setter
def telnet_port(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["telnet_port"] = value
2019-12-13 13:31:07 +03:00
@property
def telnet_timeout(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("telnet_timeout", self.get_default("telnet_timeout"))
2019-12-13 13:31:07 +03:00
@telnet_timeout.setter
def telnet_timeout(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["telnet_timeout"] = value
2019-12-13 13:31:07 +03:00
@property
def services_path(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("services_path", self.get_default("services_path"))
2019-12-13 13:31:07 +03:00
@services_path.setter
def services_path(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["services_path"] = value
2019-12-13 13:31:07 +03:00
@property
def user_bouquet_path(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("user_bouquet_path", self.get_default("user_bouquet_path"))
2019-12-13 13:31:07 +03:00
@user_bouquet_path.setter
def user_bouquet_path(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["user_bouquet_path"] = value
2019-12-13 13:31:07 +03:00
@property
def satellites_xml_path(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("satellites_xml_path", self.get_default("satellites_xml_path"))
2019-12-13 13:31:07 +03:00
@satellites_xml_path.setter
def satellites_xml_path(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["satellites_xml_path"] = value
2019-12-13 13:31:07 +03:00
@property
2019-12-22 20:42:29 +03:00
def data_local_path(self):
return self._cp_settings.get("data_local_path", self.get_default("data_local_path"))
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
@data_local_path.setter
def data_local_path(self, value):
self._cp_settings["data_local_path"] = value
2019-12-13 13:31:07 +03:00
@property
def picons_path(self):
2019-12-22 20:42:29 +03:00
return self._cp_settings.get("picons_path", self.get_default("picons_path"))
2019-12-13 13:31:07 +03:00
@picons_path.setter
def picons_path(self, value):
2019-12-22 20:42:29 +03:00
self._cp_settings["picons_path"] = value
2019-12-13 13:31:07 +03:00
@property
2019-12-22 20:42:29 +03:00
def picons_local_path(self):
return self._cp_settings.get("picons_local_path", self.get_default("picons_local_path"))
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
@picons_local_path.setter
def picons_local_path(self, value):
self._cp_settings["picons_local_path"] = value
2019-12-13 13:31:07 +03:00
@property
2019-12-22 20:42:29 +03:00
def backup_local_path(self):
return self._cp_settings.get("backup_local_path", self.get_default("backup_local_path"))
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
@backup_local_path.setter
def backup_local_path(self, value):
self._cp_settings["backup_local_path"] = value
# ***** Program settings *****
2019-12-13 13:31:07 +03:00
@property
def backup_before_save(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("backup_before_save", Defaults.BACKUP_BEFORE_SAVE.value)
2019-12-13 13:31:07 +03:00
@backup_before_save.setter
def backup_before_save(self, value):
2019-12-22 20:42:29 +03:00
self._settings["backup_before_save"] = value
2019-12-13 13:31:07 +03:00
@property
def backup_before_downloading(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("backup_before_downloading", Defaults.BACKUP_BEFORE_DOWNLOADING.value)
2019-12-13 13:31:07 +03:00
@backup_before_downloading.setter
def backup_before_downloading(self, value):
2019-12-22 20:42:29 +03:00
self._settings["backup_before_downloading"] = value
2019-12-13 13:31:07 +03:00
@property
def v5_support(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("v5_support", Defaults.V5_SUPPORT.value)
2019-12-13 13:31:07 +03:00
@v5_support.setter
def v5_support(self, value):
2019-12-22 20:42:29 +03:00
self._settings["v5_support"] = value
2019-12-13 13:31:07 +03:00
@property
def http_api_support(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("http_api_support", Defaults.HTTP_API_SUPPORT.value)
2019-12-13 13:31:07 +03:00
@http_api_support.setter
def http_api_support(self, value):
2019-12-22 20:42:29 +03:00
self._settings["http_api_support"] = value
2019-12-13 13:31:07 +03:00
@property
def enable_yt_dl(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("enable_yt_dl", Defaults.ENABLE_YT_DL.value)
2019-12-13 13:31:07 +03:00
@enable_yt_dl.setter
def enable_yt_dl(self, value):
2019-12-22 20:42:29 +03:00
self._settings["enable_yt_dl"] = value
2019-12-13 13:31:07 +03:00
@property
def enable_send_to(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("enable_send_to", Defaults.ENABLE_SEND_TO.value)
2019-12-13 13:31:07 +03:00
@enable_send_to.setter
def enable_send_to(self, value):
2019-12-22 20:42:29 +03:00
self._settings["enable_send_to"] = value
2019-12-13 13:31:07 +03:00
@property
def use_colors(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("use_colors", Defaults.USE_COLORS.value)
2019-12-13 13:31:07 +03:00
@use_colors.setter
def use_colors(self, value):
2019-12-22 20:42:29 +03:00
self._settings["use_colors"] = value
2019-12-13 13:31:07 +03:00
@property
def new_color(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("new_color", Defaults.NEW_COLOR.value)
2019-12-13 13:31:07 +03:00
@new_color.setter
def new_color(self, value):
2019-12-22 20:42:29 +03:00
self._settings["new_color"] = value
2019-12-13 13:31:07 +03:00
@property
def extra_color(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("extra_color", Defaults.EXTRA_COLOR.value)
2019-12-13 13:31:07 +03:00
@extra_color.setter
def extra_color(self, value):
2019-12-22 20:42:29 +03:00
self._settings["extra_color"] = value
2019-12-13 13:31:07 +03:00
@property
def fav_click_mode(self):
2019-12-22 20:42:29 +03:00
return self._settings.get("fav_click_mode", Defaults.FAV_CLICK_MODE.value)
2019-12-13 13:31:07 +03:00
@fav_click_mode.setter
def fav_click_mode(self, value):
2019-12-22 20:42:29 +03:00
self._settings["fav_click_mode"] = value
2019-12-13 13:31:07 +03:00
2019-12-22 20:42:29 +03:00
def get_settings():
2019-12-13 13:31:07 +03:00
os.makedirs(os.path.dirname(CONFIG_PATH), exist_ok=True) # create dir if not exist
os.makedirs(os.path.dirname(DATA_PATH), exist_ok=True)
if not os.path.isfile(CONFIG_FILE) or os.stat(CONFIG_FILE).st_size == 0:
2019-12-22 20:42:29 +03:00
write_settings(get_default_settings())
2019-12-13 13:31:07 +03:00
with open(CONFIG_FILE, "r") as config_file:
return json.load(config_file)
2019-12-22 20:42:29 +03:00
def write_settings(config):
2019-12-13 13:31:07 +03:00
with open(CONFIG_FILE, "w") as config_file:
json.dump(config, config_file, indent=" ")
if __name__ == "__main__":
pass