mirror of
https://github.com/aclist/dztui.git
synced 2026-08-26 09:47:36 +02:00
feat: concatenate launch parameters
This commit is contained in:
parent
1268c388b0
commit
ed8e79455b
@ -462,7 +462,7 @@ def query_playercount(record: Record) -> tuple[int, int] | None:
|
||||
|
||||
def query_by_ip(addr: str) -> A2SInfo:
|
||||
record = short_ip_to_record(addr)
|
||||
return query_by_record(record)
|
||||
return query_by_record(record, update_gameport=True)
|
||||
|
||||
def query_by_id(server_id: int, key: str) -> dict[Any] | None:
|
||||
"""
|
||||
@ -472,9 +472,11 @@ def query_by_id(server_id: int, key: str) -> dict[Any] | None:
|
||||
return query_by_record(record)
|
||||
|
||||
|
||||
def query_by_record(record: Record) -> A2SInfo:
|
||||
def query_by_record(record: Record, update_gameport: bool = False) -> A2SInfo:
|
||||
try:
|
||||
info = a2s.info((record.ip, record.qport), 3.0)
|
||||
if update_gameport:
|
||||
record = Record(record.ip, info.port, record.qport)
|
||||
return A2SInfo(record, info)
|
||||
except Exception as e:
|
||||
logger.warning(e)
|
||||
|
||||
@ -14,9 +14,13 @@ logger = logging.getLogger(APP_NAME)
|
||||
|
||||
|
||||
def concat_mods(mods: list[str]) -> str:
|
||||
from dzgui.util.symlink import _hash
|
||||
|
||||
hashes = []
|
||||
for mod in mods:
|
||||
mods[mod] = f"@{mod}"
|
||||
return ";".join(mods)
|
||||
md5sum = _hash(mod)
|
||||
hashes.append(md5sum)
|
||||
return ";".join(hashes)
|
||||
|
||||
|
||||
def get_local_signatures(version_file: Path) -> dict[str, int]:
|
||||
|
||||
@ -30,9 +30,10 @@ from dzgui.const.constants import (
|
||||
APPID_DAYZ_EXP,
|
||||
APPNAME_DAYZ,
|
||||
APPNAME_DAYZ_EXP,
|
||||
DAYZ_BINARY,
|
||||
)
|
||||
from dzgui.const.enum import Preferences
|
||||
from dzgui.init.proc import foreground, is_dayz_running, is_steam_running
|
||||
from dzgui.init.proc import foreground, is_dayz_running, is_steam_running, is_running
|
||||
from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager
|
||||
from dzgui.strings.server_mods import checkmark, resync
|
||||
from dzgui.util.format import format_mib
|
||||
@ -241,26 +242,29 @@ class ConnectionManager:
|
||||
dialog = ExceptionDialog(self.controller, server_timeout)
|
||||
dialog.run()
|
||||
|
||||
# TODO: threading
|
||||
def _connect_steam(self) -> None:
|
||||
print(self.record.ip)
|
||||
print(self.record.gameport)
|
||||
print(self.appid)
|
||||
|
||||
addr = f"{self.record.ip}:{self.record.gameport}"
|
||||
playername = "test"
|
||||
playername = self.controller.query_config(Preferences.NAME)
|
||||
proc = connect(addr, self.appid, playername, self.remote_mod_ids)
|
||||
# TODO: test returncode
|
||||
# proc.returncode
|
||||
# TODO: wait for DAYZ_BINARY to load
|
||||
# TODO: add to history file and list store
|
||||
|
||||
@call_on_thread("Waiting for Steam to update mods")
|
||||
# self.thread_man.update_dialog("Waiting for DayZ to launch")
|
||||
# while not is_running(DAYZ_BINARY):
|
||||
# time.sleep(1)
|
||||
# TODO: wait for DAYZ_BINARY to load
|
||||
# on cleanup:
|
||||
# TODO: add to history file and list store
|
||||
# proxy_model.append_to_history()
|
||||
|
||||
def _update_mods(self, raise_window: bool) -> None:
|
||||
# NOTE: fast enqueue all mods in auto mode
|
||||
prefs = self.controller.get_prefs()
|
||||
|
||||
# TODO: increment dialog progress message
|
||||
for title, mod, stamp, size in self.missing_mods:
|
||||
# TODO: boolean cancel button on threadman dialog sets event inside threadman
|
||||
# TODO: check for early cancel event via sigint
|
||||
# check for early cancel event via sigint
|
||||
enqueue_mod(mod, self.appid)
|
||||
time.sleep(2)
|
||||
|
||||
@ -282,18 +286,15 @@ class ConnectionManager:
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
# TODO: update version file
|
||||
update_signatures(self.missing_mods, prefs.paths.version)
|
||||
|
||||
# TODO: get config path or just push steam path directly
|
||||
rebuild_symlinks(prefs.paths.config)
|
||||
# TODO: update tree checkmarks when finished
|
||||
# TODO: make this internal to preconnect page
|
||||
func = StoredFunc(self.controller.update_status)
|
||||
self.thread_man.set_cleanup_func(func)
|
||||
|
||||
@call_on_thread("Waiting for Steam to update mods")
|
||||
def update_and_connect(self, raise_window: bool) -> None:
|
||||
if len(self.missing_mods) > 0:
|
||||
self._update_mods(raise_window)
|
||||
else:
|
||||
self._connect_steam()
|
||||
func = StoredFunc(self.controller.update_status)
|
||||
self.thread_man.set_cleanup_func(func)
|
||||
|
||||
@ -72,6 +72,9 @@ class ThreadingManager:
|
||||
def set_job_count(self, jobs: int) -> None:
|
||||
self.jobs = jobs
|
||||
|
||||
def update_dialog(self, msg: str) -> None:
|
||||
GLib.idle_add(lambda: self.wait_dialog.update_text(msg))
|
||||
|
||||
def increment_dialog(self) -> None:
|
||||
GLib.idle_add(self.wait_dialog.increment)
|
||||
|
||||
|
||||
@ -40,7 +40,6 @@ class NewPlayerCount:
|
||||
queue: int
|
||||
|
||||
|
||||
|
||||
class ServerModelManager:
|
||||
def __init__(self, controller: "Controller", tv: "ServerTreeView") -> None:
|
||||
|
||||
@ -174,9 +173,11 @@ class ServerModelManager:
|
||||
]
|
||||
for future in as_completed(futures):
|
||||
res = future.result(timeout=API_TIMEOUT)
|
||||
|
||||
self.thread_man.increment_dialog()
|
||||
# NOTE: failing entries are culled
|
||||
if res is None:
|
||||
# TODO: log which servers failed
|
||||
continue
|
||||
servers.append(res)
|
||||
if len(servers) == 0:
|
||||
@ -257,9 +258,7 @@ class ServerModelManager:
|
||||
proxy_man = self._get_proxy_man()
|
||||
proxy_man.update_playercount(self.playercount)
|
||||
|
||||
def _parse_single_record(
|
||||
self, response: "A2SInfo", delete: bool = False
|
||||
) -> None:
|
||||
def _parse_single_record(self, response: "A2SInfo", delete: bool = False) -> None:
|
||||
self.preserve_on_fail = True
|
||||
row = response.as_row()
|
||||
if row is None:
|
||||
@ -275,7 +274,7 @@ class ServerModelManager:
|
||||
proxy_man = self._get_proxy_man()
|
||||
config_man = self.controller.get_config_man()
|
||||
fqip = Servers.response_to_fqip(row)
|
||||
record = response.get_record() #Servers.response_to_record(row)
|
||||
record = response.get_record() # Servers.response_to_record(row)
|
||||
|
||||
# TODO: less convoluted
|
||||
if delete:
|
||||
|
||||
@ -9,6 +9,7 @@ from dzgui.const.enum import NotebookPage
|
||||
from dzgui.controllers.emitter import Emitter
|
||||
from dzgui.controllers.mc import Controller
|
||||
from dzgui.util import css, strings
|
||||
from dzgui.util.keys import is_ctrl_mask
|
||||
from dzgui.views.components.connect_panel import ConnectPanel
|
||||
from dzgui.views.components.crumbs import Breadcrumbs
|
||||
from dzgui.views.components.right_panel import RightPanel
|
||||
@ -164,7 +165,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook): # type: ignore
|
||||
def _on_keypress(self, widget: Gtk.Widget, event: Gdk.EventKey) -> bool:
|
||||
match event.keyval:
|
||||
case Gdk.KEY_Right | Gdk.KEY_l:
|
||||
if event.state is Gdk.ModifierType.CONTROL_MASK:
|
||||
if is_ctrl_mask(event):
|
||||
return False
|
||||
MainController.get_emitter().emit("request_button_box_focus")
|
||||
return True
|
||||
|
||||
@ -3,6 +3,7 @@ from typing import TYPE_CHECKING
|
||||
from dzgui.const.constants import UDP_PORT
|
||||
from dzgui.model.servers import ServerModelManager
|
||||
from dzgui.strings import connect_panel
|
||||
from dzgui.util.keys import is_ctrl_mask
|
||||
from dzgui.views.components.buttons import (
|
||||
AddButton,
|
||||
ClipboardButton,
|
||||
@ -78,7 +79,7 @@ class LanPanel(Gtk.Frame):
|
||||
self.entry.set_sensitive(False)
|
||||
|
||||
def _on_lan_keypress(self, widget: Gtk.Entry, event: Gdk.EventKey) -> bool:
|
||||
if event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
if is_ctrl_mask(event):
|
||||
if event.keyval == Gdk.KEY_d:
|
||||
self.default_radio.set_active(True)
|
||||
self.controller.grab_active_treeview()
|
||||
|
||||
@ -109,6 +109,9 @@ class WaitDialog(GenericDialog):
|
||||
else:
|
||||
spinner.start()
|
||||
|
||||
def update_text(self, msg: str) -> None:
|
||||
self.format_secondary_text(msg)
|
||||
|
||||
def increment(self, msg: str = "") -> None:
|
||||
if msg != "":
|
||||
self.format_secondary_text(msg)
|
||||
|
||||
@ -2,7 +2,7 @@ import logging
|
||||
|
||||
from dzgui.const.constants import APP_NAME
|
||||
from dzgui.const.enum import ContextMenu
|
||||
from dzgui.util.keys import is_navkey
|
||||
from dzgui.util.keys import is_ctrl_mask, is_navkey
|
||||
from dzgui.util.strings import edit_note
|
||||
from dzgui.views.trees.tree_base import TreeView
|
||||
|
||||
@ -30,7 +30,7 @@ class ContextMixin(TreeView):
|
||||
return False
|
||||
self._process_button_event(event)
|
||||
case Gdk.EventType.KEY_PRESS:
|
||||
if event.state is not Gdk.ModifierType.CONTROL_MASK:
|
||||
if not is_ctrl_mask(event):
|
||||
return False
|
||||
if event.keyval is not Gdk.KEY_l:
|
||||
return False
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
from dzgui.const.enum import CursorPosition
|
||||
from dzgui.const.constants import SEPARATOR
|
||||
from dzgui.util.keys import is_ctrl_mask
|
||||
|
||||
import gi
|
||||
|
||||
@ -19,7 +20,7 @@ class CursorMixin:
|
||||
case Gdk.KEY_k:
|
||||
self._move_cursor(CursorPosition.UP)
|
||||
case Gdk.KEY_l | Gdk.KEY_Right:
|
||||
if event.state is Gdk.ModifierType.CONTROL_MASK:
|
||||
if is_ctrl_mask(event):
|
||||
return
|
||||
self.emitter.emit("request_button_box_focus") # type: ignore
|
||||
case _:
|
||||
|
||||
@ -7,6 +7,7 @@ from dzgui.const.constants import (
|
||||
)
|
||||
from dzgui.const.enum import NotebookPage
|
||||
from dzgui.util.css import add_class
|
||||
from dzgui.util.keys import is_ctrl_mask
|
||||
from dzgui.util.localize import number
|
||||
from dzgui.strings.server_mods import checkmark
|
||||
from dzgui.strings import preconnect
|
||||
@ -211,6 +212,9 @@ class PreConnectionAssistant(Gtk.ScrolledWindow):
|
||||
def _on_keypress(self, widget: Self, event: Gdk.EventKey) -> None:
|
||||
if event.keyval == Gdk.KEY_Escape:
|
||||
self.back.emit("clicked")
|
||||
if is_ctrl_mask(event):
|
||||
if event.keyval == Gdk.KEY_u:
|
||||
self.ok.emit("clicked")
|
||||
|
||||
def _on_ok_clicked(self, button: Gtk.Button) -> None:
|
||||
# TODO: cancel mod downloads
|
||||
|
||||
@ -12,6 +12,7 @@ from dzgui.managers.filter import FilterManager
|
||||
from dzgui.model.proxy_model import ProxyModelManager
|
||||
from dzgui.util import strings
|
||||
from dzgui.util.dist import CalcDist
|
||||
from dzgui.util.keys import is_ctrl_mask
|
||||
from dzgui.views.mixins.context_mixin import ContextMixin
|
||||
from typing import Literal, TYPE_CHECKING
|
||||
|
||||
@ -229,7 +230,7 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
|
||||
return True
|
||||
|
||||
def _on_server_keypress(self, treeview: Gtk.TreeView, event: Gdk.EventKey) -> None:
|
||||
if event.state is Gdk.ModifierType.CONTROL_MASK:
|
||||
if is_ctrl_mask(event):
|
||||
match event.keyval:
|
||||
case Gdk.KEY_f:
|
||||
self.emitter.emit("request_keyword_focus")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user