mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-05-07 22:11:50 +02:00
Compare commits
1 commit
b3c0f76060
...
7542a341f6
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7542a341f6 |
2 changed files with 61 additions and 65 deletions
|
@ -5,6 +5,7 @@ import subprocess
|
|||
from typing import List, Tuple
|
||||
|
||||
from . import errors
|
||||
from .settings import Settings
|
||||
from .util import get_resource_path, get_subprocess_startupinfo
|
||||
|
||||
CONTAINER_NAME = "dangerzone.rocks/dangerzone"
|
||||
|
|
|
@ -10,19 +10,12 @@ from .util import get_config_dir, get_version
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
SETTINGS_FILENAME: str = "settings.json"
|
||||
SETTINGS_FILENAME = get_config_dir() / "settings.json"
|
||||
|
||||
SETTINGS: dict = {}
|
||||
|
||||
|
||||
class Settings:
|
||||
settings: Dict[str, Any]
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.settings_filename = get_config_dir() / SETTINGS_FILENAME
|
||||
self.default_settings: Dict[str, Any] = self.generate_default_settings()
|
||||
self.load()
|
||||
|
||||
@classmethod
|
||||
def generate_default_settings(cls) -> Dict[str, Any]:
|
||||
def generate_default_settings() -> Dict[str, Any]:
|
||||
return {
|
||||
"save": True,
|
||||
"archive": True,
|
||||
|
@ -39,52 +32,54 @@ class Settings:
|
|||
"updater_errors": 0,
|
||||
}
|
||||
|
||||
def get(self, key: str) -> Any:
|
||||
return self.settings[key]
|
||||
|
||||
def set(self, key: str, val: Any, autosave: bool = False) -> None:
|
||||
def get(key: str) -> Any:
|
||||
return SETTINGS[key]
|
||||
|
||||
|
||||
def set(key: str, val: Any, autosave: bool = False) -> None:
|
||||
try:
|
||||
old_val = self.get(key)
|
||||
old_val = SETTINGS.get(key)
|
||||
except KeyError:
|
||||
old_val = None
|
||||
self.settings[key] = val
|
||||
SETTINGS[key] = val
|
||||
if autosave and val != old_val:
|
||||
self.save()
|
||||
save()
|
||||
|
||||
def get_updater_settings(self) -> Dict[str, Any]:
|
||||
return {
|
||||
key: val for key, val in self.settings.items() if key.startswith("updater_")
|
||||
}
|
||||
|
||||
def load(self) -> None:
|
||||
if os.path.isfile(self.settings_filename):
|
||||
self.settings = self.default_settings
|
||||
def get_updater_settings() -> Dict[str, Any]:
|
||||
return {key: val for key, val in SETTINGS.items() if key.startswith("updater_")}
|
||||
|
||||
|
||||
def load() -> None:
|
||||
default_settings = default_settings()
|
||||
if SETTINGS_FILENAME.is_file():
|
||||
# If the settings file exists, load it
|
||||
try:
|
||||
with open(self.settings_filename, "r") as settings_file:
|
||||
self.settings = json.load(settings_file)
|
||||
with SETTINGS_FILENAME.open("r") as settings_file:
|
||||
SETTINGS = json.load(settings_file)
|
||||
|
||||
# If it's missing any fields, add them from the default settings
|
||||
for key in self.default_settings:
|
||||
if key not in self.settings:
|
||||
self.settings[key] = self.default_settings[key]
|
||||
for key in default_settings:
|
||||
if key not in SETTINGS:
|
||||
SETTINGS[key] = default_settings[key]
|
||||
elif key == "updater_latest_version":
|
||||
if version.parse(get_version()) > version.parse(self.get(key)):
|
||||
self.set(key, get_version())
|
||||
if version.parse(get_version()) > version.parse(get(key)):
|
||||
set(key, get_version())
|
||||
|
||||
except Exception:
|
||||
log.error("Error loading settings, falling back to default")
|
||||
self.settings = self.default_settings
|
||||
SETTINGS = default_settings
|
||||
|
||||
else:
|
||||
# Save with default settings
|
||||
log.info("Settings file doesn't exist, starting with default")
|
||||
self.settings = self.default_settings
|
||||
SETTINGS = default_settings
|
||||
|
||||
self.save()
|
||||
save()
|
||||
|
||||
def save(self) -> None:
|
||||
self.settings_filename.parent.mkdir(parents=True, exist_ok=True)
|
||||
with self.settings_filename.open("w") as settings_file:
|
||||
json.dump(self.settings, settings_file, indent=4)
|
||||
|
||||
def save() -> None:
|
||||
SETTINGS_FILENAME.parent.mkdir(parents=True, exist_ok=True)
|
||||
with SETTINGS_FILENAME.open("w") as settings_file:
|
||||
json.dump(SETTINGS, settings_file, indent=4)
|
||||
|
|
Loading…
Reference in a new issue