34 lines
1.0 KiB
Python
34 lines
1.0 KiB
Python
"""RDP / RDG flap auto-disconnect settings (ui_settings singleton)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models.ui_settings import UI_SETTINGS_ROW_ID, UiSettings
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RdpFlapSettings:
|
|
auto_disconnect: bool
|
|
source: str = "db"
|
|
|
|
|
|
def get_effective_rdp_flap_settings(db: Session) -> RdpFlapSettings:
|
|
row = db.get(UiSettings, UI_SETTINGS_ROW_ID)
|
|
if row is None:
|
|
return RdpFlapSettings(auto_disconnect=False, source="default")
|
|
return RdpFlapSettings(auto_disconnect=bool(row.auto_rdp_flap_disconnect), source="db")
|
|
|
|
|
|
def upsert_rdp_flap_settings(db: Session, *, auto_disconnect: bool) -> RdpFlapSettings:
|
|
row = db.get(UiSettings, UI_SETTINGS_ROW_ID)
|
|
if row is None:
|
|
row = UiSettings(id=UI_SETTINGS_ROW_ID, show_sidebar_system_stats=True)
|
|
db.add(row)
|
|
row.auto_rdp_flap_disconnect = bool(auto_disconnect)
|
|
db.commit()
|
|
db.refresh(row)
|
|
return get_effective_rdp_flap_settings(db)
|