mirror of
https://github.com/aclist/dztui.git
synced 2026-08-27 18:27:07 +02:00
feat: add/connect by record or str
This commit is contained in:
parent
2fa51c80f4
commit
e568814a11
@ -471,12 +471,27 @@ def query_by_id(addr: str, key: str) -> Optional[dict]:
|
||||
|
||||
|
||||
def query_by_ip(addr: str) -> Optional[dict]:
|
||||
record = short_ip_to_record(addr)
|
||||
return query_by_record(record)
|
||||
|
||||
|
||||
def query_by_record(record: Record) -> Optional[dict]:
|
||||
try:
|
||||
record = addr.split(":")
|
||||
# TODO: create a Record object
|
||||
ip, qport = record[0], record[1]
|
||||
res = query_direct(ip, int(qport))
|
||||
return query_direct(record.ip, record.qport)
|
||||
except Exception as e:
|
||||
logger.critical(e)
|
||||
return None
|
||||
return res
|
||||
|
||||
|
||||
def short_ip_to_record(addr: str) -> Optional[Record]:
|
||||
r = addr.split(":")
|
||||
if len(r) != 2:
|
||||
return None
|
||||
return Record(r[0], 0, int(r[1]))
|
||||
|
||||
|
||||
def fqip_to_record(addr: str) -> Optional[Record]:
|
||||
r = addr.split(":")
|
||||
if len(r) != 3:
|
||||
return None
|
||||
return Record(r[0], int(r[1]), int(r[2]))
|
||||
|
||||
@ -2,11 +2,10 @@ import inspect
|
||||
import logging
|
||||
import shutil
|
||||
import threading
|
||||
import traceback
|
||||
|
||||
from functools import wraps
|
||||
from pathlib import Path
|
||||
from typing import Any, Callable, TYPE_CHECKING
|
||||
from typing import Any, Callable, Union, TYPE_CHECKING
|
||||
from warnings import deprecated
|
||||
|
||||
import dzgui.api.pefile as PeFile
|
||||
@ -25,8 +24,6 @@ from dzgui.const.constants import (
|
||||
APPID_DAYZ,
|
||||
APPID_DAYZ_EXP,
|
||||
HEX_RED,
|
||||
WINDOW_DEFAULT_X,
|
||||
WINDOW_DEFAULT_Y,
|
||||
)
|
||||
from dzgui.const.enum import (
|
||||
FilterMode,
|
||||
@ -36,7 +33,6 @@ from dzgui.const.enum import (
|
||||
ContextMenu,
|
||||
)
|
||||
|
||||
from dzgui.config import update
|
||||
from dzgui.config.query import lookup
|
||||
from dzgui.config.userprefs import UserPrefs
|
||||
from dzgui.controllers.emitter import Emitter
|
||||
@ -47,7 +43,6 @@ from dzgui.model.proxy_model import ProxyModelManager
|
||||
from dzgui.model.servers import ServerModelManager
|
||||
from dzgui.model.model_factory import ModelFactory
|
||||
from dzgui.util import strings
|
||||
from dzgui.util._json import read_json, write_json
|
||||
from dzgui.util.diag import write_diagnostic
|
||||
from dzgui.util.format import format_mods, format_player_count
|
||||
from dzgui.util.localize import number
|
||||
@ -63,6 +58,7 @@ from gi.repository import Gtk, Gdk, GLib, GObject # noqa E402
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.api.servers import Record
|
||||
from dzgui.const.enum import ServerTab
|
||||
from dzgui.managers.filter_man import FilterManager
|
||||
from dzgui.util.dist import Haversine
|
||||
@ -590,7 +586,7 @@ class Controller(GObject.GObject):
|
||||
return treeview.get_model() is not None
|
||||
|
||||
def _on_check_toggled(self, emitter: Emitter, label: str, state: bool) -> None:
|
||||
print('check toggled, refiltering')
|
||||
print("check toggled, refiltering")
|
||||
filter_man = self.get_filter_man()
|
||||
filter_man.set_filter(label, state)
|
||||
|
||||
@ -620,17 +616,21 @@ class Controller(GObject.GObject):
|
||||
def get_config_man(self) -> ConfigManager:
|
||||
return self.config_man
|
||||
|
||||
def add_server(self, addr: str) -> None:
|
||||
def add_by_str(self, addr: str) -> None:
|
||||
saved_tree = self.get_servers().get_saved()
|
||||
if addr.isdigit():
|
||||
ServerModelManager(self, saved).add_by_id(addr)
|
||||
else:
|
||||
ServerModelManager(self, saved).add_by_ip(addr)
|
||||
ServerModelManager(self, saved_tree).add_by_str(addr)
|
||||
|
||||
def connect_server(self, addr: str) -> None:
|
||||
def add_by_record(self, record: "Record") -> None:
|
||||
saved_tree = self.get_servers().get_saved()
|
||||
ServerModelManager(self, saved_tree).add_by_record(record)
|
||||
|
||||
def connect_by_str(self, addr: str) -> None:
|
||||
if addr.isdigit():
|
||||
config_man = self.get_config_man()
|
||||
key = config_man.lookup(Preferences.BM)
|
||||
ConnectionManager(self).connect_by_id(addr, key)
|
||||
else:
|
||||
ConnectionManager(self).connect_by_ip(addr)
|
||||
|
||||
def connect_by_record(self, record: "Record") -> None:
|
||||
ConnectionManager(self).connect_by_record(record)
|
||||
|
||||
@ -26,8 +26,7 @@ class ConnectionManager:
|
||||
res = Servers.query_by_id(addr, key)
|
||||
if res is None:
|
||||
self.thread_man.set_cleanup_func(StoredFunc(self._connection_failure))
|
||||
# TODO: add to history if successful
|
||||
print("CONNECT")
|
||||
|
||||
print(res)
|
||||
|
||||
@call_on_thread(dialog.querying)
|
||||
@ -35,8 +34,16 @@ class ConnectionManager:
|
||||
res = Servers.query_by_ip(addr)
|
||||
if res is None:
|
||||
self.thread_man.set_cleanup_func(StoredFunc(self._connection_failure))
|
||||
|
||||
print(res)
|
||||
|
||||
@call_on_thread(dialog.querying)
|
||||
def connect_by_record(self, record: Servers.Record) -> None:
|
||||
res = Servers.query_by_record(record)
|
||||
if res is None:
|
||||
self.thread_man.set_cleanup_func(StoredFunc(self._connection_failure))
|
||||
|
||||
# TODO: add to history if successful
|
||||
print("CONNECT")
|
||||
print(res)
|
||||
|
||||
def _connection_failure(self) -> None:
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
import gi
|
||||
import logging
|
||||
from typing import Union, TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import ContextMenu, Preferences
|
||||
from dzgui.managers.connection import ConnectionManager
|
||||
from dzgui.managers.thread_man import ThreadingManager
|
||||
from dzgui.model.servers import ServerModelManager
|
||||
from dzgui.util import strings
|
||||
@ -60,12 +59,12 @@ class ContextMenuManager:
|
||||
|
||||
# THREADED
|
||||
case ContextMenu.ADD_SERVER:
|
||||
record = self.treeview.get_record_string()
|
||||
ServerModelManager(self.controller, self.treeview).add_by_ip(record)
|
||||
# TODO: update tab with !
|
||||
record = self.treeview.get_record()
|
||||
self.controller.add_by_record(record)
|
||||
case ContextMenu.CONNECT:
|
||||
record = self.treeview.get_record_string()
|
||||
ConnectionManager(self.controller).connect_by_ip(record)
|
||||
record = self.treeview.get_record()
|
||||
self.controller.connect_by_record(record)
|
||||
|
||||
case ContextMenu.REFRESH_PLAYERS:
|
||||
# get record
|
||||
# call a2s on thread
|
||||
|
||||
@ -2,7 +2,7 @@ import logging
|
||||
import threading
|
||||
from concurrent.futures import as_completed
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import Optional, TYPE_CHECKING
|
||||
from typing import Union, TYPE_CHECKING
|
||||
|
||||
import dzgui.api.servers as Servers
|
||||
from dzgui.const.enum import FilterMode, Preferences, ServerTab
|
||||
@ -192,13 +192,23 @@ class ServerModelManager:
|
||||
config_man = self.controller.get_config_man()
|
||||
key = config_man.lookup(Preferences.BM)
|
||||
res = Servers.query_by_id(addr, key)
|
||||
self.parse_single_record(res)
|
||||
self._parse_single_record(res)
|
||||
|
||||
@call_on_thread(dialog.querying)
|
||||
def add_by_ip(self, addr: str) -> None:
|
||||
res = Servers.query_by_ip(addr)
|
||||
self._parse_single_record(res)
|
||||
|
||||
def add_by_record(self, record: Servers.Record) -> None:
|
||||
res = Servers.query_by_record(record)
|
||||
self._parse_single_record(res)
|
||||
|
||||
def add_by_str(self, addr: str) -> None:
|
||||
if addr.isdigit():
|
||||
self.add_by_id(addr)
|
||||
else:
|
||||
self.add_by_ip(addr)
|
||||
|
||||
def _parse_single_record(self, response: dict) -> None:
|
||||
if response is None:
|
||||
self.thread_man.set_cleanup_func(StoredFunc(self._cleanup_on_failure))
|
||||
|
||||
@ -204,11 +204,11 @@ class AddPanel(Gtk.Frame):
|
||||
|
||||
def _on_connect_clicked(self, button: Gtk.Button) -> None:
|
||||
addr = self.entry.get_text()
|
||||
self.controller.connect_server(addr)
|
||||
self.controller.connect_by_str(addr)
|
||||
|
||||
def _add_server(self) -> None:
|
||||
addr = self.entry.get_text()
|
||||
self.controller.add_server(addr)
|
||||
self.controller.add_by_str(addr)
|
||||
|
||||
def _on_activate(self, entry: Gtk.Entry) -> None:
|
||||
# NOTE: default action is to add a record, not connect
|
||||
|
||||
Loading…
Reference in New Issue
Block a user