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