mirror of
https://github.com/aclist/dztui.git
synced 2026-10-30 14:42:54 +01:00
feat: progress bar WIP
This commit is contained in:
1 parent
b9fe87cf90
commit
4d0bb2f4f8
7 files changed
+116
-94
No files matched your search
@@ -44,3 +44,9 @@
|
|||||||
- Local documentation
|
- Local documentation
|
||||||
- Offline mods
|
- Offline mods
|
||||||
- Move debug mode to developers only
|
- Move debug mode to developers only
|
||||||
|
|
||||||
|
## Devs
|
||||||
|
- Show deprecation warnings
|
||||||
|
- Options -> Dev page
|
||||||
|
- Raw debug command
|
||||||
|
- Moved debug log to this mode
|
||||||
+17
-17
@@ -262,7 +262,7 @@ class Controller(GObject.GObject):
|
|||||||
c = self.mediator.statusbar.statusbar.get_context_id(context)
|
c = self.mediator.statusbar.statusbar.get_context_id(context)
|
||||||
self.mediator.statusbar.statusbar.pop(c)
|
self.mediator.statusbar.statusbar.pop(c)
|
||||||
|
|
||||||
# TODO:
|
# TODO: refactor any modules using this
|
||||||
@deprecated("use set_by_context")
|
@deprecated("use set_by_context")
|
||||||
def set_statusbar(self, text: str, context: str) -> int:
|
def set_statusbar(self, text: str, context: str) -> int:
|
||||||
msg_id = self.mediator.statusbar.set_text(text, context)
|
msg_id = self.mediator.statusbar.set_text(text, context)
|
||||||
@@ -297,7 +297,6 @@ class Controller(GObject.GObject):
|
|||||||
|
|
||||||
self.emitter.emit("distcalc_ended", dist, context)
|
self.emitter.emit("distcalc_ended", dist, context)
|
||||||
|
|
||||||
# TODO: threading
|
|
||||||
def delete_multiple_mods(self) -> None:
|
def delete_multiple_mods(self) -> None:
|
||||||
sel = self.mediator.modtreeview.get_selection()
|
sel = self.mediator.modtreeview.get_selection()
|
||||||
model, pathlist = sel.get_selected_rows()
|
model, pathlist = sel.get_selected_rows()
|
||||||
@@ -392,11 +391,11 @@ class Controller(GObject.GObject):
|
|||||||
total = 10
|
total = 10
|
||||||
with ThreadPoolExecutor() as executor:
|
with ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(job, key, APPID_DAYZ, param) for param in params]
|
futures = [executor.submit(job, key, APPID_DAYZ, param) for param in params]
|
||||||
#wait(futures)
|
# wait(futures)
|
||||||
for future in as_completed(futures):
|
for future in as_completed(futures):
|
||||||
try:
|
try:
|
||||||
i += 1
|
i += 1
|
||||||
GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(i/total))
|
GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(i / total))
|
||||||
res = future.result(timeout=3)
|
res = future.result(timeout=3)
|
||||||
if res.status != 200 or not res.parsed:
|
if res.status != 200 or not res.parsed:
|
||||||
# TODO: pop warning dialog, create enum around various failure states
|
# TODO: pop warning dialog, create enum around various failure states
|
||||||
@@ -410,7 +409,6 @@ class Controller(GObject.GObject):
|
|||||||
print(e)
|
print(e)
|
||||||
self.cleanup_func = CleanupFunc(self.cleanup_on_failure)
|
self.cleanup_func = CleanupFunc(self.cleanup_on_failure)
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
TODO: e.g. class method like 'total'
|
TODO: e.g. class method like 'total'
|
||||||
total of 10 params for this call
|
total of 10 params for this call
|
||||||
@@ -429,7 +427,7 @@ class Controller(GObject.GObject):
|
|||||||
GLib.idle_add(
|
GLib.idle_add(
|
||||||
lambda: self.wait_dialog.format_secondary_text("Unpacking servers")
|
lambda: self.wait_dialog.format_secondary_text("Unpacking servers")
|
||||||
)
|
)
|
||||||
GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(10/total))
|
GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(10 / total))
|
||||||
|
|
||||||
# TODO: additional ping column pass, collated
|
# TODO: additional ping column pass, collated
|
||||||
parsed = Servers.parse_json(serv)
|
parsed = Servers.parse_json(serv)
|
||||||
@@ -507,6 +505,7 @@ class Controller(GObject.GObject):
|
|||||||
|
|
||||||
def delete_single_mod_cleanup(self, _iter: Gtk.TreeIter) -> None:
|
def delete_single_mod_cleanup(self, _iter: Gtk.TreeIter) -> None:
|
||||||
self.get_mod_store().remove(_iter)
|
self.get_mod_store().remove(_iter)
|
||||||
|
remove_stale_signatures(self.prefs.paths.config, self.prefs.paths.version)
|
||||||
|
|
||||||
# TODO: strings
|
# TODO: strings
|
||||||
@call_on_thread("deleting mod")
|
@call_on_thread("deleting mod")
|
||||||
@@ -574,6 +573,7 @@ class Controller(GObject.GObject):
|
|||||||
# add to saved servers model verbatim and sort in place
|
# add to saved servers model verbatim and sort in place
|
||||||
# update tab with !
|
# update tab with !
|
||||||
# update config file with IP
|
# update config file with IP
|
||||||
|
# TODO: needs threading
|
||||||
case ContextMenu.ADD_SERVER:
|
case ContextMenu.ADD_SERVER:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -593,10 +593,7 @@ class Controller(GObject.GObject):
|
|||||||
# Gtk.TreeModel, row-inserted/row-deleted
|
# Gtk.TreeModel, row-inserted/row-deleted
|
||||||
# updates statusbar
|
# updates statusbar
|
||||||
# FIXME: signal should instead be emitted off of treeview when rows added/inserted
|
# FIXME: signal should instead be emitted off of treeview when rows added/inserted
|
||||||
#self.update_mod_statusbar()
|
# self.update_mod_statusbar()
|
||||||
remove_stale_signatures(
|
|
||||||
self.prefs.paths.config, self.prefs.paths.version
|
|
||||||
)
|
|
||||||
|
|
||||||
# call a2s on thread and update ephemeral model in situ
|
# call a2s on thread and update ephemeral model in situ
|
||||||
case ContextMenu.REFRESH_PLAYERS:
|
case ContextMenu.REFRESH_PLAYERS:
|
||||||
@@ -610,12 +607,15 @@ class Controller(GObject.GObject):
|
|||||||
# reverse of ADD_SERVER
|
# reverse of ADD_SERVER
|
||||||
case ContextMenu.REMOVE_SERVER:
|
case ContextMenu.REMOVE_SERVER:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
case ContextMenu.SET_FAV:
|
case ContextMenu.SET_FAV:
|
||||||
self.set_fav()
|
self.set_fav()
|
||||||
|
|
||||||
# NOTE: spawns dedicated dialogs
|
# NOTE: spawns dedicated dialogs
|
||||||
|
# TODO: needs threading
|
||||||
case ContextMenu.SHOW_DETAILS:
|
case ContextMenu.SHOW_DETAILS:
|
||||||
pass
|
pass
|
||||||
|
# TODO: needs threading
|
||||||
case ContextMenu.SHOW_MODS:
|
case ContextMenu.SHOW_MODS:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -634,8 +634,7 @@ class Controller(GObject.GObject):
|
|||||||
log = self.prefs.paths.debug
|
log = self.prefs.paths.debug
|
||||||
store = self.model_man.get_log_store()
|
store = self.model_man.get_log_store()
|
||||||
store.clear()
|
store.clear()
|
||||||
# NOTE: this model is reloaded each time as log changes, rather than adding
|
# NOTE: this model is reloaded each time as log changes
|
||||||
# atomic events
|
|
||||||
try:
|
try:
|
||||||
with open(log, "r") as f:
|
with open(log, "r") as f:
|
||||||
lines = [
|
lines = [
|
||||||
@@ -872,7 +871,7 @@ class Controller(GObject.GObject):
|
|||||||
dialog = ExceptionDialog(self, "API TIMEOUT")
|
dialog = ExceptionDialog(self, "API TIMEOUT")
|
||||||
dialog.run()
|
dialog.run()
|
||||||
|
|
||||||
#def push_data_failure(self) -> None:
|
# def push_data_failure(self) -> None:
|
||||||
# #treeview = self.get_active_treeview()
|
# #treeview = self.get_active_treeview()
|
||||||
# #treeview.set_loaded(True)
|
# #treeview.set_loaded(True)
|
||||||
# # TODO: wipe control model on failure or keep old results?
|
# # TODO: wipe control model on failure or keep old results?
|
||||||
@@ -910,7 +909,6 @@ class Controller(GObject.GObject):
|
|||||||
model[path][4] = HEX_RED
|
model[path][4] = HEX_RED
|
||||||
self.emitter.emit("mods_highlighted")
|
self.emitter.emit("mods_highlighted")
|
||||||
|
|
||||||
|
|
||||||
@call_on_thread(strings.dialog.working)
|
@call_on_thread(strings.dialog.working)
|
||||||
def highlight_stale(self) -> None:
|
def highlight_stale(self) -> None:
|
||||||
stale = find_stale_mods(self.prefs.paths.config)
|
stale = find_stale_mods(self.prefs.paths.config)
|
||||||
@@ -947,7 +945,9 @@ class Controller(GObject.GObject):
|
|||||||
if res is True:
|
if res is True:
|
||||||
self.update_config(key, text)
|
self.update_config(key, text)
|
||||||
else:
|
else:
|
||||||
self.cleanup_func = CleanupFunc(lambda: self.emitter.emit("api_change_failed"))
|
self.cleanup_func = CleanupFunc(
|
||||||
|
lambda: self.emitter.emit("api_change_failed")
|
||||||
|
)
|
||||||
|
|
||||||
def set_resolution(self, window: "OuterWindow") -> None:
|
def set_resolution(self, window: "OuterWindow") -> None:
|
||||||
if self.prefs.is_game_mode:
|
if self.prefs.is_game_mode:
|
||||||
@@ -1016,6 +1016,7 @@ class Controller(GObject.GObject):
|
|||||||
self.filter_threaded(mode, label)
|
self.filter_threaded(mode, label)
|
||||||
|
|
||||||
def populate_model(self) -> None:
|
def populate_model(self) -> None:
|
||||||
|
# NOTE: prepare GTK objects outside of thread
|
||||||
treeview = self.get_active_treeview()
|
treeview = self.get_active_treeview()
|
||||||
if treeview.is_loaded() is True:
|
if treeview.is_loaded() is True:
|
||||||
self.emitter.emit("servers_loaded", treeview.get_enum())
|
self.emitter.emit("servers_loaded", treeview.get_enum())
|
||||||
@@ -1045,8 +1046,6 @@ class Controller(GObject.GObject):
|
|||||||
def get_dist_cache(self) -> dict[str, "Haversine"]:
|
def get_dist_cache(self) -> dict[str, "Haversine"]:
|
||||||
return self.dist_cache
|
return self.dist_cache
|
||||||
|
|
||||||
# TODO: use model manager, map and keyword caches
|
|
||||||
# TODO: model cache that hooks checkbox signal
|
|
||||||
def get_help_store(self) -> Gtk.ListStore:
|
def get_help_store(self) -> Gtk.ListStore:
|
||||||
return self.model_man.get_help_store()
|
return self.model_man.get_help_store()
|
||||||
|
|
||||||
@@ -1091,6 +1090,7 @@ class Controller(GObject.GObject):
|
|||||||
mode = FilterMode.TOGGLE_OFF
|
mode = FilterMode.TOGGLE_OFF
|
||||||
self.refilter_model(mode, label)
|
self.refilter_model(mode, label)
|
||||||
|
|
||||||
|
# TODO: map man should be consolidated into filter man
|
||||||
def _on_map_selection_changed(self, emitter: Emitter, selection: str) -> None:
|
def _on_map_selection_changed(self, emitter: Emitter, selection: str) -> None:
|
||||||
map_man = self.get_map_man()
|
map_man = self.get_map_man()
|
||||||
map_man.set_selected_map(selection)
|
map_man.set_selected_map(selection)
|
||||||
|
|||||||
@@ -44,3 +44,9 @@
|
|||||||
- Local documentation
|
- Local documentation
|
||||||
- Offline mods
|
- Offline mods
|
||||||
- Move debug mode to developers only
|
- Move debug mode to developers only
|
||||||
|
|
||||||
|
## Devs
|
||||||
|
- Show deprecation warnings
|
||||||
|
- Options -> Dev page
|
||||||
|
- Raw debug command
|
||||||
|
- Moved debug log to this mode
|
||||||
@@ -52,7 +52,6 @@ class FilteredModelManager:
|
|||||||
self.ping_cache: dict[str, int] = {}
|
self.ping_cache: dict[str, int] = {}
|
||||||
|
|
||||||
self.ephemeral_model: ListStore = None
|
self.ephemeral_model: ListStore = None
|
||||||
#= self.new_model_from_class(ServerColumns)
|
|
||||||
|
|
||||||
self.control_model: list = None
|
self.control_model: list = None
|
||||||
self.filtered: list = None
|
self.filtered: list = None
|
||||||
@@ -125,7 +124,7 @@ class FilteredModelManager:
|
|||||||
rows = self.sort_rows(rows)
|
rows = self.sort_rows(rows)
|
||||||
for row in rows:
|
for row in rows:
|
||||||
clone.append(row)
|
clone.append(row)
|
||||||
#else:
|
# else:
|
||||||
# print("nothing to filter, sending none")
|
# print("nothing to filter, sending none")
|
||||||
# clone = None
|
# clone = None
|
||||||
|
|
||||||
@@ -222,7 +221,6 @@ class FilteredModelManager:
|
|||||||
rows = [row for row in rows if row[0].isascii()]
|
rows = [row for row in rows if row[0].isascii()]
|
||||||
case strings.filter_lowpop:
|
case strings.filter_lowpop:
|
||||||
rows = [row for row in rows if (row[4] / row[5] * 100) > 30]
|
rows = [row for row in rows if (row[4] / row[5] * 100) > 30]
|
||||||
# FIXME: can create logically opposed contexts like "official + modded"
|
|
||||||
case strings.filter_modded:
|
case strings.filter_modded:
|
||||||
rows = [row for row in rows if not row[11]]
|
rows = [row for row in rows if not row[11]]
|
||||||
return rows
|
return rows
|
||||||
@@ -254,7 +252,6 @@ class FilteredModelManager:
|
|||||||
filters = self.controller.get_filters()
|
filters = self.controller.get_filters()
|
||||||
refiltered = self.filter_toggle_on(filters)
|
refiltered = self.filter_toggle_on(filters)
|
||||||
self.set_filtered(refiltered)
|
self.set_filtered(refiltered)
|
||||||
#self.set_success(True)
|
|
||||||
|
|
||||||
def convert_model_to_list(self, model: ListStore) -> list:
|
def convert_model_to_list(self, model: ListStore) -> list:
|
||||||
return [[el for el in row] for row in model]
|
return [[el for el in row] for row in model]
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import gi
|
import gi
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa
|
from gi.repository import Gtk, GLib, Gdk, GObject, Pango # noqa
|
||||||
|
|
||||||
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING
|
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING
|
||||||
from dzgui.const.enum import Popup
|
from dzgui.const.enum import Popup
|
||||||
|
|
||||||
|
|
||||||
class EntryDialog(GenericDialog):
|
class EntryDialog(GenericDialog):
|
||||||
def __init__(self, text: str, mode: Popup, link: str, button_type=None):
|
def __init__(self, text: str, mode: Popup, link: str, button_type=None):
|
||||||
super().__init__(text, mode)
|
super().__init__(text, mode)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from dzgui.views.components.labels import BoldLabel
|
|||||||
from dzgui.views.trees.tree_base import TreeView
|
from dzgui.views.trees.tree_base import TreeView
|
||||||
|
|
||||||
import gi # noqa E402
|
import gi # noqa E402
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk # noqa E402
|
from gi.repository import Gtk # noqa E402
|
||||||
|
|
||||||
@@ -16,20 +17,19 @@ if TYPE_CHECKING:
|
|||||||
from dzgui.config.userprefs import UserPrefs
|
from dzgui.config.userprefs import UserPrefs
|
||||||
from dzgui.config.xdg import Xdg
|
from dzgui.config.xdg import Xdg
|
||||||
|
|
||||||
|
|
||||||
class Developers(Gtk.ScrolledWindow):
|
class Developers(Gtk.ScrolledWindow):
|
||||||
"""
|
"""
|
||||||
Shows TreeViews displaying contents of parsed XDG paths
|
Shows TreeViews displaying contents of parsed XDG paths
|
||||||
and user preferences
|
and user preferences
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, controller: "Controller") -> None:
|
def __init__(self, controller: "Controller") -> None:
|
||||||
super().__init__(
|
super().__init__()
|
||||||
)
|
|
||||||
|
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
self.box = Gtk.Box(
|
self.box = Gtk.Box(
|
||||||
orientation=Gtk.Orientation.VERTICAL,
|
orientation=Gtk.Orientation.VERTICAL, margin_start=10, margin_end=10
|
||||||
margin_start=10,
|
|
||||||
margin_end=10
|
|
||||||
)
|
)
|
||||||
|
|
||||||
heading = Gtk.Label(label=developers.header)
|
heading = Gtk.Label(label=developers.header)
|
||||||
@@ -42,8 +42,9 @@ class Developers(Gtk.ScrolledWindow):
|
|||||||
paths_label = BoldLabel(developers.paths_label)
|
paths_label = BoldLabel(developers.paths_label)
|
||||||
prefs_label = BoldLabel(developers.prefs_label)
|
prefs_label = BoldLabel(developers.prefs_label)
|
||||||
|
|
||||||
paths_tree = self._make_tree(self.controller.prefs.paths)
|
prefs = self.controller.get_prefs()
|
||||||
prefs_tree = self._make_tree(self.controller.prefs)
|
paths_tree = self._make_tree(prefs.paths)
|
||||||
|
prefs_tree = self._make_tree(prefs)
|
||||||
trees_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
|
trees_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
|
||||||
|
|
||||||
path = Gtk.TreePath.new_from_indices([0])
|
path = Gtk.TreePath.new_from_indices([0])
|
||||||
@@ -72,9 +73,12 @@ class Developers(Gtk.ScrolledWindow):
|
|||||||
store = Gtk.ListStore(str, str)
|
store = Gtk.ListStore(str, str)
|
||||||
for field in fields(prefs):
|
for field in fields(prefs):
|
||||||
if field.name == "paths":
|
if field.name == "paths":
|
||||||
break
|
continue
|
||||||
k, v = field.name, getattr(prefs, field.name)
|
k, v = field.name, getattr(prefs, field.name)
|
||||||
store.append((k, str(v)))
|
store.append((k, str(v)))
|
||||||
|
|
||||||
view.set_model(store)
|
view.set_model(store)
|
||||||
return view
|
return view
|
||||||
|
|
||||||
|
def grab_content_area(self) -> None:
|
||||||
|
return
|
||||||
@@ -69,7 +69,14 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
logger.critical(e)
|
logger.critical(e)
|
||||||
valid_json = False
|
valid_json = False
|
||||||
|
|
||||||
|
width_map = {
|
||||||
|
"Name": 800,
|
||||||
|
"Map": 300,
|
||||||
|
"IP": 240,
|
||||||
|
}
|
||||||
|
|
||||||
# TODO: abstract
|
# TODO: abstract
|
||||||
|
# FIXME: resize col width func causes snapping behavior
|
||||||
browser_cols = strings.browser_cols
|
browser_cols = strings.browser_cols
|
||||||
for i, column_title in enumerate(browser_cols):
|
for i, column_title in enumerate(browser_cols):
|
||||||
renderer = Gtk.CellRendererText()
|
renderer = Gtk.CellRendererText()
|
||||||
@@ -77,8 +84,6 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
||||||
column.set_resizable(True)
|
column.set_resizable(True)
|
||||||
column.set_sort_column_id(i)
|
column.set_sort_column_id(i)
|
||||||
#if column_title == "Ping":
|
|
||||||
# column.set_cell_data_func(renderer, self._get_ping)
|
|
||||||
|
|
||||||
if valid_json:
|
if valid_json:
|
||||||
try:
|
try:
|
||||||
@@ -88,18 +93,20 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
column.set_fixed_width(saved_size)
|
column.set_fixed_width(saved_size)
|
||||||
column.set_expand(True)
|
column.set_expand(True)
|
||||||
else:
|
else:
|
||||||
if column_title == "Name":
|
w = width_map[column_title]
|
||||||
column.set_fixed_width(800)
|
column.set_fixed_width(w)
|
||||||
if column_title == "Map":
|
#if column_title == "Name":
|
||||||
column.set_fixed_width(300)
|
# column.set_fixed_width(800)
|
||||||
|
#if column_title == "Map":
|
||||||
|
# column.set_fixed_width(300)
|
||||||
|
|
||||||
# TODO: standardize widths based on column title and longest content
|
# TODO: standardize widths based on column title and longest content
|
||||||
# TODO: resize col width func causes snapping behavior
|
#if column_title == "Name":
|
||||||
if column_title == "Name":
|
# column.set_fixed_width(500)
|
||||||
column.set_fixed_width(500)
|
#if column_title == "Map":
|
||||||
if column_title == "Map":
|
# column.set_fixed_width(200)
|
||||||
column.set_fixed_width(200)
|
#if column_title == "IP":
|
||||||
if column_title == "IP":
|
# column.set_fixed_width(240)
|
||||||
column.set_fixed_width(240)
|
|
||||||
|
|
||||||
column.connect("notify::fixed-width", self._on_col_width_changed)
|
column.connect("notify::fixed-width", self._on_col_width_changed)
|
||||||
self.append_column(column)
|
self.append_column(column)
|
||||||
@@ -129,38 +136,38 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
store = self.map_man.get_map_store()
|
store = self.map_man.get_map_store()
|
||||||
self.emitter.emit("load_maps", store)
|
self.emitter.emit("load_maps", store)
|
||||||
|
|
||||||
def _get_ping(
|
#def _get_ping(
|
||||||
self,
|
# self,
|
||||||
column: Gtk.TreeViewColumn,
|
# column: Gtk.TreeViewColumn,
|
||||||
cell: Gtk.CellRendererText,
|
# cell: Gtk.CellRendererText,
|
||||||
model: Gtk.TreeModel,
|
# model: Gtk.TreeModel,
|
||||||
it: Gtk.TreeIter,
|
# it: Gtk.TreeIter,
|
||||||
data: Any,
|
# data: Any,
|
||||||
):
|
#):
|
||||||
def ping(model, it, ip: str):
|
# def ping(model, it, ip: str):
|
||||||
# TODO: use a2s to ping server
|
# # TODO: use a2s to ping server
|
||||||
# a2s.info -> "ping" key
|
# # a2s.info -> "ping" key
|
||||||
# Servers.ping() -> this accepts a whole row
|
# # Servers.ping() -> this accepts a whole row
|
||||||
# try, if failure just abort
|
# # try, if failure just abort
|
||||||
self.res = ip.replace(":", "%")
|
# self.res = ip.replace(":", "%")
|
||||||
num = 11111
|
# num = 11111
|
||||||
GLib.idle_add(lambda: model.set(it, 9, num))
|
# GLib.idle_add(lambda: model.set(it, 9, num))
|
||||||
|
|
||||||
addr = model.get_value(it, 7).split(":")[0]
|
# addr = model.get_value(it, 7).split(":")[0]
|
||||||
qport = model.get_value(it, 8)
|
# qport = model.get_value(it, 8)
|
||||||
ip = f"{addr}:{qport}"
|
# ip = f"{addr}:{qport}"
|
||||||
|
|
||||||
thread = threading.Thread(
|
# thread = threading.Thread(
|
||||||
daemon=True,
|
# daemon=True,
|
||||||
target=ping,
|
# target=ping,
|
||||||
args=(
|
# args=(
|
||||||
model,
|
# model,
|
||||||
it,
|
# it,
|
||||||
ip,
|
# ip,
|
||||||
),
|
# ),
|
||||||
)
|
# )
|
||||||
thread.start()
|
# thread.start()
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
def start_timeout(self) -> None:
|
def start_timeout(self) -> None:
|
||||||
self.queue_id = GLib.timeout_add(QUEUE_CHECK_DELAY, self._check_result_queue)
|
self.queue_id = GLib.timeout_add(QUEUE_CHECK_DELAY, self._check_result_queue)
|
||||||
@@ -171,27 +178,27 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
def get_filter_man(self) -> FilteredModelManager:
|
def get_filter_man(self) -> FilteredModelManager:
|
||||||
return self.filter_man
|
return self.filter_man
|
||||||
|
|
||||||
def shrink_to_fit(self) -> None:
|
#def shrink_to_fit(self) -> None:
|
||||||
cols = self.get_columns()
|
# cols = self.get_columns()
|
||||||
# TODO: run on only one treeview and propagate results
|
# # TODO: run on only one treeview and propagate results
|
||||||
# TODO: does not shrink name, map, ip fields to fit
|
# # TODO: does not shrink name, map, ip fields to fit
|
||||||
# TODO: col width changed signal is buggy on current treeview
|
# # TODO: col width changed signal is buggy on current treeview
|
||||||
for col in cols:
|
# for col in cols:
|
||||||
title = col.get_title()
|
# title = col.get_title()
|
||||||
if title == "Name":
|
# if title == "Name":
|
||||||
continue
|
# continue
|
||||||
if title == "Map":
|
# if title == "Map":
|
||||||
continue
|
# continue
|
||||||
if title == "IP":
|
# if title == "IP":
|
||||||
continue
|
# continue
|
||||||
label = Gtk.Label(label=title)
|
# label = Gtk.Label(label=title)
|
||||||
pango = label.get_layout()
|
# pango = label.get_layout()
|
||||||
size = pango.get_pixel_size()
|
# size = pango.get_pixel_size()
|
||||||
if size.width > 50:
|
# if size.width > 50:
|
||||||
width = size.width * 1.30
|
# width = size.width * 1.30
|
||||||
else:
|
# else:
|
||||||
width = size.width * 1.65
|
# width = size.width * 1.65
|
||||||
col.set_fixed_width(width)
|
# col.set_fixed_width(width)
|
||||||
|
|
||||||
def get_enum(self) -> None:
|
def get_enum(self) -> None:
|
||||||
return self.enum
|
return self.enum
|
||||||
@@ -277,7 +284,7 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
if event.state is Gdk.ModifierType.CONTROL_MASK:
|
if event.state is Gdk.ModifierType.CONTROL_MASK:
|
||||||
match event.keyval:
|
match event.keyval:
|
||||||
case Gdk.KEY_r:
|
case Gdk.KEY_r:
|
||||||
# TODO: unimplemented
|
# TODO: unimplemented, threading
|
||||||
self.refresh_player_count()
|
self.refresh_player_count()
|
||||||
case Gdk.KEY_f:
|
case Gdk.KEY_f:
|
||||||
self.emitter.emit("request_keyword_focus")
|
self.emitter.emit("request_keyword_focus")
|
||||||
|
|||||||
Reference in new issue
Block a user