aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/roster.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/roster.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/roster.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/roster.py b/packages/meshbay-node/src/meshbay_node/roster.py
index ff5282d..cf0d421 100644
--- a/packages/meshbay-node/src/meshbay_node/roster.py
+++ b/packages/meshbay-node/src/meshbay_node/roster.py
@@ -754,6 +754,41 @@ class Roster:
str(float(debounce_secs)), set_by)
return await self.scan_settings(group_id)
+ # ── Node-wide daemon settings ───────────────────────────────────────────
+ # Same pattern as TMDB config: stored under NODE_WIDE_GROUP_ID.
+ # On startup, node.toml values are the defaults; the roster override
+ # takes precedence at runtime. Changing a setting writes to both
+ # roster.db (immediate) and node.toml (survives a DB wipe).
+ SETTING_INVITE_TTL = "invite_ttl_hours"
+ SETTING_PAIR_TTL = "pair_ttl_hours"
+ SETTING_DEVICE_TTL = "device_request_ttl_minutes"
+ SETTING_MAX_STREAMS = "max_concurrent_streams"
+ SETTING_TRANSCODE = "transcode_incompatible_video"
+
+ async def node_settings(self, defaults: dict) -> dict:
+ """Current effective settings: roster override if present, else config default."""
+ result = {}
+ for key, setting in [
+ ("invite_ttl_hours", self.SETTING_INVITE_TTL),
+ ("pair_ttl_hours", self.SETTING_PAIR_TTL),
+ ("device_request_ttl_minutes", self.SETTING_DEVICE_TTL),
+ ("max_concurrent_streams", self.SETTING_MAX_STREAMS),
+ ("transcode_incompatible_video", self.SETTING_TRANSCODE),
+ ]:
+ stored = await self.get_setting(self.NODE_WIDE_GROUP_ID, setting)
+ if stored is not None:
+ if key == "transcode_incompatible_video":
+ result[key] = stored != "0"
+ else:
+ result[key] = int(stored)
+ else:
+ result[key] = defaults.get(key)
+ return result
+
+ async def set_node_setting(self, key: str, value: str,
+ set_by: str = "") -> None:
+ await self.set_setting(self.NODE_WIDE_GROUP_ID, key, value, set_by)
+
async def create_invite(
self,
group_id: str,