diff --git a/src/pyj/session.pyj b/src/pyj/session.pyj index 31fef9a831..e7f19e4c16 100644 --- a/src/pyj/session.pyj +++ b/src/pyj/session.pyj @@ -372,11 +372,14 @@ class UserSessionData(SessionData): self.echo_changes = True def defval(self, key): - return session_defaults()[key] + ans = session_defaults()[key] + if ans: + ans = window.structuredClone(ans) + return ans def get(self, key, defval): if defval is undefined: - defval = session_defaults()[key] + defval = self.defval(key) return SessionData.get(self, (self.prefix + key), defval) def get_library_option(self, library_id, key, defval): @@ -384,7 +387,7 @@ class UserSessionData(SessionData): return self.get(key, defval) lkey = key + '-||-' + library_id if defval is undefined: - defval = session_defaults()[key] + defval = self.defval(key) return self.get(lkey, defval) def set(self, key, value): diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index b9d3d91866..3bcc8c8457 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -157,11 +157,17 @@ def manifest_received(key, initial_position, pathtoebook, highlights, book_url, xhr.error_html or None) +def clone(x): + if x: + x = window.structuredClone(x) + return x + + class SessionData: def __init__(self, prefs): defaults = session_defaults() - self.data = {k: defaults[k] if prefs[k] is undefined else prefs[k] for k in defaults} + self.data = {k: clone(defaults[k]) if prefs[k] is undefined else clone(prefs[k]) for k in defaults} def get(self, key, defval): ans = self.data[key] @@ -173,7 +179,7 @@ class SessionData: def set(self, key, val): if val is None: - self.data[key] = session_defaults()[key] + self.data[key] = clone(session_defaults()[key]) else: self.data[key] = val to_python.set_session_data(key, val) @@ -183,14 +189,14 @@ class SessionData: for key in Object.keys(changes): val = changes[key] if val is None: - self.data[key] = defaults[key] + self.data[key] = clone(defaults[key]) else: self.data[key] = val to_python.set_session_data(changes, None) def clear(self): defaults = session_defaults() - self.data = {k: defaults[k] for k in defaults} + self.data = {k: clone(defaults[k]) for k in defaults} to_python.set_session_data('*', None)