mirror of
https://github.com/aclist/dztui.git
synced 2026-10-25 12:12:31 +01:00
Merge pull request #472 from aclist/fix/refresh-ping
fix: refresh ping column on filter action
This commit is contained in:
6 files changed
+37
-29
No files matched your search
@@ -59,14 +59,8 @@ class Details:
|
|||||||
success: bool
|
success: bool
|
||||||
|
|
||||||
|
|
||||||
@dataclass(slots=True)
|
@dataclass(slots=True, frozen=True)
|
||||||
class Record:
|
class Record:
|
||||||
# TODO: investigate whether this enum is still being used;
|
|
||||||
# can this be frozen?
|
|
||||||
"""
|
|
||||||
The gameport field is manipulated by the RowType.CONN_BY_IP method
|
|
||||||
"""
|
|
||||||
|
|
||||||
ip: str
|
ip: str
|
||||||
gameport: int
|
gameport: int
|
||||||
qport: int
|
qport: int
|
||||||
|
|||||||
@@ -7,11 +7,12 @@ import dzgui.util._json as JSON # noqa
|
|||||||
|
|
||||||
|
|
||||||
from dzgui.const.enum import (
|
from dzgui.const.enum import (
|
||||||
FilterMode,
|
|
||||||
Preferences,
|
|
||||||
NotebookPage,
|
|
||||||
ButtonType,
|
ButtonType,
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
|
FilterMode,
|
||||||
|
NotebookPage,
|
||||||
|
Preferences,
|
||||||
|
ServerTab,
|
||||||
)
|
)
|
||||||
|
|
||||||
from dzgui.config.userprefs import UserPrefs
|
from dzgui.config.userprefs import UserPrefs
|
||||||
@@ -37,7 +38,6 @@ logger = logging.getLogger(APP_NAME)
|
|||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from dzgui.api.servers import Record
|
from dzgui.api.servers import Record
|
||||||
from dzgui.const.enum import ServerTab
|
|
||||||
from dzgui.managers.connection import Prerequisites
|
from dzgui.managers.connection import Prerequisites
|
||||||
from dzgui.managers.filter import FilterManager
|
from dzgui.managers.filter import FilterManager
|
||||||
from dzgui.util.dist import Haversine
|
from dzgui.util.dist import Haversine
|
||||||
@@ -498,6 +498,9 @@ class Controller(GObject.GObject):
|
|||||||
|
|
||||||
def set_active_keyword(self, keyword: str) -> None:
|
def set_active_keyword(self, keyword: str) -> None:
|
||||||
self.get_filter_man().set_active_keyword(keyword)
|
self.get_filter_man().set_active_keyword(keyword)
|
||||||
|
ServerModelManager(self, self.get_active_treeview()).refilter(
|
||||||
|
FilterMode.TOGGLE_ON
|
||||||
|
)
|
||||||
|
|
||||||
def get_modtreeview(self) -> "ModTreeView":
|
def get_modtreeview(self) -> "ModTreeView":
|
||||||
return self.mediator.modtreeview
|
return self.mediator.modtreeview
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from dzgui.views.dialogs.generic import ExceptionDialog
|
|||||||
import gi
|
import gi
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk # noqa E402
|
from gi.repository import Gtk, GLib # noqa E402
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from dzgui.api.servers import A2SInfo, Record
|
from dzgui.api.servers import A2SInfo, Record
|
||||||
@@ -390,6 +390,8 @@ class ServerModelManager:
|
|||||||
def _cleanup_on_success(self) -> None:
|
def _cleanup_on_success(self) -> None:
|
||||||
proxy = self.proxy_man.get_proxy_model()
|
proxy = self.proxy_man.get_proxy_model()
|
||||||
self.tv.set_model(proxy)
|
self.tv.set_model(proxy)
|
||||||
|
if self.tv.enum == ServerTab.BROWSER:
|
||||||
|
GLib.idle_add(self.tv.wipe_cache)
|
||||||
if self.preserve_on_fail is True:
|
if self.preserve_on_fail is True:
|
||||||
self.proxy_man.wipe_cache()
|
self.proxy_man.wipe_cache()
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ from dzgui.const.constants import (
|
|||||||
NO_PADDING,
|
NO_PADDING,
|
||||||
SEARCH_ICON,
|
SEARCH_ICON,
|
||||||
)
|
)
|
||||||
from dzgui.const.enum import FilterMode
|
|
||||||
from dzgui.model.servers import ServerModelManager
|
|
||||||
from dzgui.util.format import format_exception
|
from dzgui.util.format import format_exception
|
||||||
from dzgui.util.strings import all_maps
|
from dzgui.util.strings import all_maps
|
||||||
from dzgui.views.components.maps_combo import MapsCombo
|
from dzgui.views.components.maps_combo import MapsCombo
|
||||||
@@ -148,10 +146,6 @@ class KeywordEntry(Gtk.Entry):
|
|||||||
self.controller.set_active_keyword(keyword)
|
self.controller.set_active_keyword(keyword)
|
||||||
logger.info(f"User filtered by keyword '{keyword}'")
|
logger.info(f"User filtered by keyword '{keyword}'")
|
||||||
|
|
||||||
ServerModelManager(
|
|
||||||
self.controller, self.controller.get_active_treeview()
|
|
||||||
).refilter(FilterMode.TOGGLE_ON)
|
|
||||||
|
|
||||||
|
|
||||||
class FilterPanel(Gtk.Box):
|
class FilterPanel(Gtk.Box):
|
||||||
def __init__(self, controller: "Controller") -> None:
|
def __init__(self, controller: "Controller") -> None:
|
||||||
|
|||||||
@@ -309,6 +309,14 @@ class ExceptionDialog(TextBufferDialog):
|
|||||||
content.set_spacing(0)
|
content.set_spacing(0)
|
||||||
content.add(scrollable)
|
content.add(scrollable)
|
||||||
|
|
||||||
|
self.connect("map", self._on_map)
|
||||||
|
|
||||||
|
def _on_map(self, dialog: Self) -> None:
|
||||||
|
button = self.get_widget_for_response(Gtk.ResponseType.OK)
|
||||||
|
if button is None:
|
||||||
|
return
|
||||||
|
button.grab_focus()
|
||||||
|
|
||||||
def _on_page_changed(
|
def _on_page_changed(
|
||||||
self, notebook: Gtk.Notebook, child: Gtk.Box | Gtk.ScrolledWindow, index: int
|
self, notebook: Gtk.Notebook, child: Gtk.Box | Gtk.ScrolledWindow, index: int
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
|
|||||||
self.handler_id: int
|
self.handler_id: int
|
||||||
self.queue: Queue = Queue()
|
self.queue: Queue = Queue()
|
||||||
|
|
||||||
self.seen_cache: list[str] = []
|
self.seen_cache: list[Record] = []
|
||||||
|
|
||||||
prefs = self.controller.get_prefs()
|
prefs = self.controller.get_prefs()
|
||||||
columns = prefs.paths.columns
|
columns = prefs.paths.columns
|
||||||
@@ -341,16 +341,24 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
|
|||||||
control = self.proxy_man.get_control()
|
control = self.proxy_man.get_control()
|
||||||
return model, control
|
return model, control
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def ping_server(
|
def ping_server(
|
||||||
|
self,
|
||||||
model: "FastInsertListStore",
|
model: "FastInsertListStore",
|
||||||
_iter: Gtk.TreeIter,
|
_iter: Gtk.TreeIter,
|
||||||
ip: str,
|
record: Record,
|
||||||
qport: int,
|
|
||||||
ping_column: int,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
_ping = ping(ip, qport)
|
_ping = ping(record.ip, record.qport)
|
||||||
GLib.idle_add(lambda: model.set(_iter, ping_column, _ping))
|
GLib.idle_add(self._redraw, model, _iter, _ping)
|
||||||
|
|
||||||
|
def _redraw(
|
||||||
|
self, model: "FastInsertListStore", _iter: Gtk.TreeIter, _ping: int
|
||||||
|
) -> None:
|
||||||
|
ping_column = 9
|
||||||
|
model.set(_iter, ping_column, _ping)
|
||||||
|
self.queue_draw()
|
||||||
|
|
||||||
|
def wipe_cache(self) -> None:
|
||||||
|
self.seen_cache = []
|
||||||
|
|
||||||
def _get_ping(
|
def _get_ping(
|
||||||
self,
|
self,
|
||||||
@@ -363,13 +371,12 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
|
|||||||
|
|
||||||
addr_column = 7
|
addr_column = 7
|
||||||
qport_column = 8
|
qport_column = 8
|
||||||
ping_column = 9
|
|
||||||
|
|
||||||
addr = model.get_value(_iter, addr_column).split(":")
|
addr = model.get_value(_iter, addr_column).split(":")
|
||||||
ip = addr[0]
|
ip = addr[0]
|
||||||
gameport = addr[1]
|
gameport = int(addr[1])
|
||||||
qport = model.get_value(_iter, qport_column)
|
qport = model.get_value(_iter, qport_column)
|
||||||
record = f"{addr}:{gameport}:{qport}"
|
record = Record(ip, gameport, qport)
|
||||||
|
|
||||||
if record in self.seen_cache:
|
if record in self.seen_cache:
|
||||||
return
|
return
|
||||||
@@ -378,7 +385,7 @@ class ServerTreeView(ContextMixin, TreeView): # type: ignore
|
|||||||
thread = threading.Thread(
|
thread = threading.Thread(
|
||||||
daemon=True,
|
daemon=True,
|
||||||
target=self.ping_server,
|
target=self.ping_server,
|
||||||
args=(model, _iter, ip, qport, ping_column),
|
args=(model, _iter, record),
|
||||||
)
|
)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user