dns ui: keep defaults visible and apply active set workflow
This commit is contained in:
@@ -69,7 +69,7 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
|
|
||||||
hint = QLabel(
|
hint = QLabel(
|
||||||
"One DNS per row. Checkbox means ACTIVE for resolver wave mode. "
|
"One DNS per row. Checkbox means ACTIVE for resolver wave mode. "
|
||||||
"Benchmark checks all rows and shows health."
|
"Benchmark checks all rows and shows health. Resolver applies up to 12 active DNS."
|
||||||
)
|
)
|
||||||
hint.setWordWrap(True)
|
hint.setWordWrap(True)
|
||||||
hint.setStyleSheet("color: gray;")
|
hint.setStyleSheet("color: gray;")
|
||||||
@@ -93,11 +93,8 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
self.btn_reset = QPushButton("Reset defaults")
|
self.btn_reset = QPushButton("Reset defaults")
|
||||||
self.btn_reset.clicked.connect(self.on_reset_defaults)
|
self.btn_reset.clicked.connect(self.on_reset_defaults)
|
||||||
row_btns.addWidget(self.btn_reset)
|
row_btns.addWidget(self.btn_reset)
|
||||||
self.btn_reload = QPushButton("Reload active set")
|
self.btn_save_pool = QPushButton("Apply resolver DNS")
|
||||||
self.btn_reload.clicked.connect(self.on_reload_pool)
|
self.btn_save_pool.clicked.connect(self.on_apply_resolver_dns)
|
||||||
row_btns.addWidget(self.btn_reload)
|
|
||||||
self.btn_save_pool = QPushButton("Save active set")
|
|
||||||
self.btn_save_pool.clicked.connect(self.on_save_pool)
|
|
||||||
row_btns.addWidget(self.btn_save_pool)
|
row_btns.addWidget(self.btn_save_pool)
|
||||||
row_btns.addStretch(1)
|
row_btns.addStretch(1)
|
||||||
root.addLayout(row_btns)
|
root.addLayout(row_btns)
|
||||||
@@ -173,6 +170,7 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
def _load_sources(self) -> None:
|
def _load_sources(self) -> None:
|
||||||
rows: List[tuple[bool, str]] = []
|
rows: List[tuple[bool, str]] = []
|
||||||
|
|
||||||
|
# Priority 1: backend upstream pool
|
||||||
try:
|
try:
|
||||||
st = self.ctrl.dns_upstream_pool_view()
|
st = self.ctrl.dns_upstream_pool_view()
|
||||||
for item in st.items:
|
for item in st.items:
|
||||||
@@ -183,6 +181,7 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
except Exception:
|
except Exception:
|
||||||
rows = []
|
rows = []
|
||||||
|
|
||||||
|
# Priority 2: local settings cache (when backend is not available)
|
||||||
if not rows:
|
if not rows:
|
||||||
raw = str(self.settings.value("dns_benchmark/upstreams", "") or "").strip()
|
raw = str(self.settings.value("dns_benchmark/upstreams", "") or "").strip()
|
||||||
if raw:
|
if raw:
|
||||||
@@ -202,6 +201,19 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
if not rows:
|
if not rows:
|
||||||
rows = [(True, item) for item in DEFAULT_UPSTREAMS]
|
rows = [(True, item) for item in DEFAULT_UPSTREAMS]
|
||||||
|
|
||||||
|
# Keep developer defaults always visible in list.
|
||||||
|
merged: List[tuple[bool, str]] = []
|
||||||
|
seen = set()
|
||||||
|
by_addr = {addr: enabled for enabled, addr in rows}
|
||||||
|
for addr in DEFAULT_UPSTREAMS:
|
||||||
|
merged.append((bool(by_addr.get(addr, False)), addr))
|
||||||
|
seen.add(addr)
|
||||||
|
for enabled, addr in rows:
|
||||||
|
if addr in seen:
|
||||||
|
continue
|
||||||
|
merged.append((enabled, addr))
|
||||||
|
rows = merged
|
||||||
|
|
||||||
self.tbl_sources.blockSignals(True)
|
self.tbl_sources.blockSignals(True)
|
||||||
self.tbl_sources.setRowCount(0)
|
self.tbl_sources.setRowCount(0)
|
||||||
for enabled, addr in rows:
|
for enabled, addr in rows:
|
||||||
@@ -283,6 +295,17 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
self._save_settings()
|
self._save_settings()
|
||||||
|
|
||||||
def on_reset_defaults(self) -> None:
|
def on_reset_defaults(self) -> None:
|
||||||
|
btn = QMessageBox.question(
|
||||||
|
self,
|
||||||
|
"Reset DNS defaults",
|
||||||
|
"Reset list to 12 developer default DNS entries?\n"
|
||||||
|
"This does not apply to resolver until you click 'Apply resolver DNS'.",
|
||||||
|
QMessageBox.Yes | QMessageBox.No,
|
||||||
|
QMessageBox.No,
|
||||||
|
)
|
||||||
|
if btn != QMessageBox.Yes:
|
||||||
|
return
|
||||||
|
|
||||||
self.tbl_sources.blockSignals(True)
|
self.tbl_sources.blockSignals(True)
|
||||||
self.tbl_sources.setRowCount(0)
|
self.tbl_sources.setRowCount(0)
|
||||||
for item in DEFAULT_UPSTREAMS:
|
for item in DEFAULT_UPSTREAMS:
|
||||||
@@ -290,22 +313,20 @@ class DNSBenchmarkDialog(QDialog):
|
|||||||
self.tbl_sources.blockSignals(False)
|
self.tbl_sources.blockSignals(False)
|
||||||
self._save_settings()
|
self._save_settings()
|
||||||
|
|
||||||
def on_reload_pool(self) -> None:
|
def on_apply_resolver_dns(self) -> None:
|
||||||
self._safe(self._load_sources, "Reload DNS active set error")
|
|
||||||
|
|
||||||
def on_save_pool(self) -> None:
|
|
||||||
def work() -> None:
|
def work() -> None:
|
||||||
payload = self._source_payload()
|
payload = self._source_payload()
|
||||||
st = self.ctrl.dns_upstream_pool_save(payload)
|
st = self.ctrl.dns_upstream_pool_save(payload)
|
||||||
active = sum(1 for x in st.items if x.enabled)
|
active = sum(1 for x in st.items if x.enabled)
|
||||||
total = len(st.items)
|
total = len(st.items)
|
||||||
|
applied = active if active < 12 else 12
|
||||||
self._save_settings()
|
self._save_settings()
|
||||||
self.lbl_summary.setText(f"Saved active DNS set: active={active}/{total}")
|
self.lbl_summary.setText(f"Applied resolver DNS: active={active}/{total}, applied={applied}/12")
|
||||||
self.lbl_summary.setStyleSheet("color: green;")
|
self.lbl_summary.setStyleSheet("color: green;")
|
||||||
if self.refresh_cb:
|
if self.refresh_cb:
|
||||||
self.refresh_cb()
|
self.refresh_cb()
|
||||||
|
|
||||||
self._safe(work, "Save DNS active set error")
|
self._safe(work, "Apply resolver DNS error")
|
||||||
|
|
||||||
def on_run_benchmark(self) -> None:
|
def on_run_benchmark(self) -> None:
|
||||||
def work() -> None:
|
def work() -> None:
|
||||||
|
|||||||
@@ -739,13 +739,16 @@ RU: Источник wildcard IP: резолвер, runtime nftset SmartDNS, и
|
|||||||
total += 1
|
total += 1
|
||||||
if bool(getattr(item, "enabled", False)):
|
if bool(getattr(item, "enabled", False)):
|
||||||
active.append(addr)
|
active.append(addr)
|
||||||
|
applied = len(active)
|
||||||
|
if applied > 12:
|
||||||
|
applied = 12
|
||||||
if not active:
|
if not active:
|
||||||
text = f"Resolver upstreams: active=0/{total} (empty set)"
|
text = f"Resolver upstreams: active=0/{total} (empty set)"
|
||||||
else:
|
else:
|
||||||
preview = ", ".join(active[:4])
|
preview = ", ".join(active[:4])
|
||||||
if len(active) > 4:
|
if len(active) > 4:
|
||||||
preview += f", +{len(active)-4} more"
|
preview += f", +{len(active)-4} more"
|
||||||
text = f"Resolver upstreams: active={len(active)}/{total} [{preview}]"
|
text = f"Resolver upstreams: active={len(active)}/{total}, applied={applied}/12 [{preview}]"
|
||||||
self.lbl_dns_resolver_upstreams.setText(text)
|
self.lbl_dns_resolver_upstreams.setText(text)
|
||||||
self.lbl_dns_resolver_upstreams.setStyleSheet("color: gray;")
|
self.lbl_dns_resolver_upstreams.setStyleSheet("color: gray;")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user