|
23 | 23 | from pathlib import Path |
24 | 24 | from typing import Callable, Iterator, Tuple |
25 | 25 |
|
26 | | -from linien_common.config import USER_DATA_PATH |
| 26 | +from linien_common.config import USER_DATA_PATH, create_backup_file |
27 | 27 |
|
28 | 28 | logger = logging.getLogger(__name__) |
29 | 29 | logger.setLevel(logging.DEBUG) |
30 | 30 |
|
31 | 31 | UI_PATH = Path(__file__).parents[0].resolve() / "ui" |
32 | | - |
| 32 | +SETTINGS_STORE_FILENAME = "settings.json" |
33 | 33 | # don't plot more often than once per `DEFAULT_PLOT_RATE_LIMIT` seconds |
34 | 34 | DEFAULT_PLOT_RATE_LIMIT = 0.1 |
35 | 35 |
|
@@ -118,19 +118,22 @@ def __iter__(self) -> Iterator[Tuple[str, Setting]]: |
118 | 118 |
|
119 | 119 | def save_settings(settings: Settings) -> None: |
120 | 120 | data = {name: setting.value for name, setting in settings} |
121 | | - with open(USER_DATA_PATH / "settings.json", "w") as f: |
| 121 | + with open(USER_DATA_PATH / SETTINGS_STORE_FILENAME, "w") as f: |
122 | 122 | json.dump(data, f, indent=0) |
123 | 123 |
|
124 | 124 |
|
125 | 125 | def load_settings() -> Settings: |
126 | 126 | settings = Settings() |
| 127 | + filename = USER_DATA_PATH / SETTINGS_STORE_FILENAME |
127 | 128 | try: |
128 | | - with open(USER_DATA_PATH / "settings.json", "r") as f: |
| 129 | + with open(filename, "r") as f: |
129 | 130 | data = json.load(f) |
130 | 131 | for name, value in data.items(): |
131 | 132 | if name in settings.__dict__: |
132 | 133 | getattr(settings, name).value = value |
133 | 134 | except FileNotFoundError: |
134 | 135 | save_settings(settings) |
135 | | - |
| 136 | + except json.JSONDecodeError: |
| 137 | + logger.error(f"Settings file {filename} was corrupted.") |
| 138 | + create_backup_file(filename) |
136 | 139 | return settings |
0 commit comments