11import json
22import os
3+ import threading
34from pathlib import Path
45
56# Determine default data directory (mirrors constants.py logic to avoid circular import)
1920
2021class ConfigManager :
2122 _instance = None
23+ _lock = threading .Lock ()
2224
2325 def __new__ (cls ):
2426 if cls ._instance is None :
2527 cls ._instance = super (ConfigManager , cls ).__new__ (cls )
28+ cls ._instance ._rw_lock = threading .Lock ()
2629 cls ._instance ._load_config ()
2730 return cls ._instance
2831
@@ -36,18 +39,22 @@ def _load_config(self):
3639 print (f"Error loading settings: { e } " )
3740
3841 def get (self , key , default = None ):
39- return self ._settings .get (key , default )
42+ with self ._rw_lock :
43+ return self ._settings .get (key , default )
4044
4145 def set (self , key , value ):
42- self ._settings [key ] = value
46+ with self ._rw_lock :
47+ self ._settings [key ] = value
4348
4449 def save (self ):
45- CONFIG_DIR .mkdir (parents = True , exist_ok = True )
46- try :
47- with open (SETTINGS_FILE , "w" ) as f :
48- json .dump (self ._settings , f , indent = 4 )
49- except OSError as e :
50- print (f"Error saving settings: { e } " )
50+ with self ._rw_lock :
51+ CONFIG_DIR .mkdir (parents = True , exist_ok = True )
52+ try :
53+ with open (SETTINGS_FILE , "w" ) as f :
54+ json .dump (self ._settings , f , indent = 4 )
55+ except OSError as e :
56+ print (f"Error saving settings: { e } " )
5157
5258 def get_all (self ):
53- return self ._settings .copy ()
59+ with self ._rw_lock :
60+ return self ._settings .copy ()
0 commit comments