feat: add by id or ip WIP

This commit is contained in:
aclist 2026-02-19 23:08:10 +09:00
parent decc1f636c
commit 42544c6dcc
2 changed files with 67 additions and 12 deletions

View File

@ -15,7 +15,7 @@ import dzgui.api.pefile as PeFile
import dzgui.api.servers as Servers
import dzgui.util._json as JSON # noqa
from dzgui.api.probe import test_steam_api, test_bm_api
from dzgui.api.bm import map_id_to_record
from dzgui.api.mods import (
get_delimited_mods,
get_local_mod_path,
@ -23,14 +23,7 @@ from dzgui.api.mods import (
_hash,
remove_stale_signatures,
)
from dzgui.const.enum import (
FilterMode,
Preferences,
NotebookPage,
ButtonType,
ContextMenu,
)
from dzgui.api.probe import test_steam_api, test_bm_api
from dzgui.const.constants import (
APPID_DAYZ,
APPID_DAYZ_EXP,
@ -38,6 +31,13 @@ from dzgui.const.constants import (
WINDOW_DEFAULT_X,
WINDOW_DEFAULT_Y,
)
from dzgui.const.enum import (
FilterMode,
Preferences,
NotebookPage,
ButtonType,
ContextMenu,
)
from dzgui.config import update
from dzgui.config.query import lookup
@ -460,6 +460,43 @@ class Controller(GObject.GObject):
parsed = Servers.parse_json(serv)
self.push_data_success(parsed, FilterMode.INITIAL)
def query_ip_id(self, addr: str) -> None:
# NOTE: Battlemetrics
if addr.isdigit():
config = self.prefs.paths.config
resolved = map_id_to_record(config, addr)
res = Servers.query_direct(resolved.ip, resolved.qport)
else:
record = addr.split(":")
ip, qport = record[0], record[1]
res = Servers.query_direct(ip, int(qport))
return res
# TODO: strings
@call_on_thread("querying address")
def connect_by_id_or_ip(self, addr: str) -> None:
res = self.query_ip_id(addr)
def cleanup_on_insert(self) -> None:
print(self.get_cleanup_func())
treeview = self.get_active_treeview()
# TODO; update control model in filtered_model
model = treeview.get_model().append(self.insert_record[0])
@call_on_thread("querying address")
def add_by_id_or_ip(self, addr: str) -> None:
res = self.query_ip_id(addr)
self.insert_record = Servers.parse_json([res])
#if res is None:
# # TODO: set cleanupfunc with dialog
# return
# TODO: add into saved servers file
# TODO: update saved servers model
# if current focus is not save servers, update label
# TODO: add ip here
self.set_cleanup_func(StoredFunc(lambda: self.cleanup_on_insert()))
def dump_api(self) -> None:
key = self.query_config(Preferences.STEAM)
job = Servers.query_api
@ -749,7 +786,7 @@ class Controller(GObject.GObject):
# CHORE: test if treeview's sort method inserts row at the correct index
# inserting a row serializes file on disk, updates control model for that tab, and
# reapplies filters to ephemeral model; since filters are applied, in-situ insertion might not be necessary
self.to_insert.connect("row-inserted", lambda: print("row inserted into model"))
self.to_insert.connect("row-inserted", lambda *args: print("row inserted into model"))
# TODO: signals or other approach to deferring map
# model insertion after thread closes
@ -833,6 +870,9 @@ class Controller(GObject.GObject):
stale = find_stale_mods(self.prefs.paths.config)
self.cleanup_func = StoredFunc(self.highlight_stale_cleanup, stale)
def set_cleanup_func(self, func: StoredFunc) -> None:
self.cleanup_func = func
def get_cleanup_func(self) -> StoredFunc:
return self.cleanup_func
@ -841,7 +881,7 @@ class Controller(GObject.GObject):
func = self.get_cleanup_func()
if func is not None:
func.call()
self.cleanup_func = None
self.set_cleanup_func(None)
self.mediator.window.set_sensitive(True)
def dump_diagnostics(self) -> None:
@ -922,6 +962,7 @@ class Controller(GObject.GObject):
) -> None:
filter_man.filter(mode, label)
self.to_insert = filter_man.get_model()
print("filtering threaded")
self.cleanup_func = StoredFunc(self.cleanup_on_success)
# TODO: call filter_man methods directly

View File

@ -40,7 +40,7 @@ class LanPanel(Gtk.Frame):
self.scan = Gtk.Button(label=lan_panel.scan_button)
self.scan.connect("clicked", self._on_scan_clicked)
# TODO: strings
self.early_abort = Gtk.CheckButton("Stop scanning on first hit")
self.early_abort = Gtk.CheckButton(label="Stop scanning on first hit")
self.early_abort.set_active(True)
self.early_abort.set_tooltip_text(
"Unless you have multiple DayZ servers on your LAN,\nleave this checked to get results faster"
@ -153,11 +153,14 @@ class AddPanel(Gtk.Frame):
self.set_label_widget(label)
self.add_server = AddButton()
self.add_server.connect("clicked", self._on_add_clicked)
self.conn_server = SteamConnectButton()
self.conn_server.set_sensitive(False)
self.add_server.set_sensitive(False)
self.entry = IpEntry(controller)
self.entry.connect("activate", self._on_activate)
self.entry.connect("string_validated", self._on_ip_validated)
self.emitter.connect(
"request_ip_entry_focus", lambda _: self.entry.grab_focus()
@ -174,6 +177,17 @@ class AddPanel(Gtk.Frame):
self.add(self.grid)
def _submit_query(self) -> None:
text = self.entry.get_text()
self.controller.add_by_id_or_ip(text)
def _on_activate(self, entry: Gtk.Entry) -> None:
self._submit_query()
def _on_add_clicked(self, button: Gtk.Button) -> None:
self._submit_query()
def _on_ip_validated(self, entry: Gtk.Entry, state: bool) -> None:
self.conn_server.set_sensitive(state)
self.add_server.set_sensitive(state)