fix: handle no favorite server

This commit is contained in:
aclist committed 2026-05-02 21:11:45 +09:00
1 parent 8bcb64810d
commit 9c821e62ee
3 files changed
+41 -36

No files matched your search

+2 -2
View File
@@ -98,10 +98,10 @@ class ConfigManager:
def get_favorites(self) -> list[str]: def get_favorites(self) -> list[str]:
return list(self.lookup(Preferences.IP_LIST)) return list(self.lookup(Preferences.IP_LIST))
def get_favorite(self) -> tuple[str, str] | tuple[None, None]: def get_favorite(self) -> tuple[str, str] | None:
fav = str(self.lookup(Preferences.FAV_LBL)) fav = str(self.lookup(Preferences.FAV_LBL))
if len(fav) < 1: if len(fav) < 1:
return None, None return None
ip = str(self.lookup(Preferences.FAV_SRV)) ip = str(self.lookup(Preferences.FAV_SRV))
addr = ip.split(":") addr = ip.split(":")
return fav, f"{addr[0]}:{addr[2]}" return fav, f"{addr[0]}:{addr[2]}"
+4
View File
@@ -615,3 +615,7 @@ esc_to_return = "Press ESC to return"
question_to_return = "Press ? to return" question_to_return = "Press ? to return"
alert_button_tooltip = "Click to open debug log" alert_button_tooltip = "Click to open debug log"
address_already_saved = "This address is already in your Saved Servers"
stop_scanning = "Stop scanning on first_hit"
abort_tooltip = "Unless you have multiple DayZ servers on your LAN,\nleave this checked to get results faster"
+35 -34
View File
@@ -1,7 +1,8 @@
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from dzgui.const.constants import UDP_PORT
from dzgui.model.servers import ServerModelManager from dzgui.model.servers import ServerModelManager
from dzgui.util.strings import connect_panel, fav_panel, lan_panel from dzgui.strings import connect_panel
from dzgui.views.components.buttons import ( from dzgui.views.components.buttons import (
AddButton, AddButton,
ClipboardButton, ClipboardButton,
@@ -29,26 +30,24 @@ class LanPanel(Gtk.Frame):
self.controller = controller self.controller = controller
self.emitter = controller.get_emitter() self.emitter = controller.get_emitter()
label = BoldLabel(lan_panel.heading) label = BoldLabel(connect_panel.lan_heading)
self.set_label_widget(label) self.set_label_widget(label)
self.default_radio = Gtk.RadioButton.new_with_label( self.default_radio = Gtk.RadioButton.new_with_label(
None, lan_panel.default_button None, connect_panel.lan_default_button
) )
self.custom_radio = Gtk.RadioButton.new_with_label_from_widget( self.custom_radio = Gtk.RadioButton.new_with_label_from_widget(
self.default_radio, lan_panel.custom_button self.default_radio, connect_panel.lan_custom_button
) )
self.entry = PortEntry(controller) self.entry = PortEntry(controller)
self.scan = Gtk.Button(label=lan_panel.scan_button) self.scan = Gtk.Button(label=connect_panel.lan_scan_button)
self.scan.connect("clicked", self._on_scan_clicked) self.scan.connect("clicked", self._on_scan_clicked)
# TODO: strings # TODO: strings
self.early_abort = Gtk.CheckButton(label="Stop scanning on first hit") self.early_abort = Gtk.CheckButton(label=connect_panel.lan_checkbox)
self.early_abort.set_active(True) self.early_abort.set_active(True)
self.early_abort.set_tooltip_text( self.early_abort.set_tooltip_text(connect_panel.lan_abort_tooltip)
"Unless you have multiple DayZ servers on your LAN,\nleave this checked to get results faster"
)
self.entry.connect("activate", self._on_entry_activated) self.entry.connect("activate", self._on_entry_activated)
self.entry.connect("string_validated", self._on_port_validated) self.entry.connect("string_validated", self._on_port_validated)
@@ -100,7 +99,7 @@ class LanPanel(Gtk.Frame):
def scan_ports(self) -> None: def scan_ports(self) -> None:
if self.default_radio.get_active(): if self.default_radio.get_active():
port = 27016 port = UDP_PORT
else: else:
port = int(self.entry.get_text()) port = int(self.entry.get_text())
abort = self.early_abort.get_active() abort = self.early_abort.get_active()
@@ -125,62 +124,65 @@ class FavPanel(Gtk.Frame):
def __init__(self, controller: "Controller") -> None: def __init__(self, controller: "Controller") -> None:
super().__init__(margin_top=10, margin_bottom=5) super().__init__(margin_top=10, margin_bottom=5)
label = BoldLabel(fav_panel.heading) label = BoldLabel(connect_panel.fav_heading)
self.set_label_widget(label) self.set_label_widget(label)
self.controller = controller self.controller = controller
emitter = self.controller.get_emitter() emitter = self.controller.get_emitter()
emitter.connect("fav_server_changed", self._on_fav_server_changed) emitter.connect("fav_server_changed", self._on_fav_server_changed)
# TODO: do not return a None, None tuple self.server_name = ""
self.server_name: str self.server_ip = ""
self.server_ip: str
favorite = self.controller.get_config_man().get_favorite()
if favorite is None:
server_name = connect_panel.favs_empty
else:
self.server_name, self.server_ip = favorite
server_name = f"{self.server_name} ({self.server_ip})"
self.server_name, self.server_ip = (
self.controller.get_config_man().get_favorite()
)
server_name = (
f"{self.server_name} ({self.server_ip})"
if self.server_name is not None
else connect_panel.no_fav
)
self.fav_label = Gtk.Label( self.fav_label = Gtk.Label(
label=server_name, label=server_name,
track_visited_links=False, track_visited_links=False,
halign=Gtk.Align.START, halign=Gtk.Align.START,
hexpand=True, hexpand=True,
) )
self.fav_button = SteamConnectButton()
self.fav_button.connect("clicked", self._on_connect_clicked)
self.copy_button = ClipboardButton(self.controller, self.get_fav_ip)
if favorite is None:
self.toggle_buttons(False)
# NOTE: disable vscrollbar to prevent layout jumping behavior # NOTE: disable vscrollbar to prevent layout jumping behavior
scrollable_label = Gtk.ScrolledWindow(vscrollbar_policy=Gtk.PolicyType.NEVER) scrollable_label = Gtk.ScrolledWindow(vscrollbar_policy=Gtk.PolicyType.NEVER)
scrollable_label.add(self.fav_label) scrollable_label.add(self.fav_label)
self.fav_button = SteamConnectButton()
self.fav_button.connect("clicked", self._on_connect_clicked)
if server_name is None:
self.fav_button.set_sensitive(False)
copy = ClipboardButton(self.controller, self.get_fav_ip)
grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5) grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
grid.attach(scrollable_label, 0, 0, 3, ROWS) grid.attach(scrollable_label, 0, 0, 3, ROWS)
grid.attach_next_to(copy, scrollable_label, Gtk.PositionType.RIGHT, COLS, ROWS) grid.attach_next_to(self.copy_button, scrollable_label, Gtk.PositionType.RIGHT, COLS, ROWS)
grid.attach_next_to(self.fav_button, copy, Gtk.PositionType.RIGHT, COLS, ROWS) grid.attach_next_to(self.fav_button, self.copy_button, Gtk.PositionType.RIGHT, COLS, ROWS)
self.add(grid) self.add(grid)
def toggle_buttons(self, state: bool) -> None:
for button in self.fav_button, self.copy_button:
button.set_sensitive(state)
def _on_connect_clicked(self, button: Gtk.Button) -> None: def _on_connect_clicked(self, button: Gtk.Button) -> None:
self.controller.connect_by_str(self.server_ip) self.controller.connect_by_str(self.server_ip)
def get_fav_ip(self) -> str: def get_fav_ip(self) -> str:
return self.server_ip return self.server_ip
from dzgui.api.servers import Record
def _on_fav_server_changed( def _on_fav_server_changed(
self, emitter: "Emitter", name: str, record: str self, emitter: "Emitter", name: str, record: str
) -> None: ) -> None:
self.server_name = name self.server_name = name
self.server_ip = record self.server_ip = record
self.fav_label.set_text(f"{name} ({record})") self.fav_label.set_text(f"{name} ({record})")
if self.server_name != "":
self.toggle_buttons(True)
class AddPanel(Gtk.Frame): class AddPanel(Gtk.Frame):
@@ -221,10 +223,9 @@ class AddPanel(Gtk.Frame):
self.add(self.grid) self.add(self.grid)
# TODO: dynamic popover text
self.pop = Gtk.Popover() self.pop = Gtk.Popover()
self.pop_label = Gtk.Label( self.pop_label = Gtk.Label(
label="This address is already in your Saved Servers", label=connect_panel.add_popover,
margin_start=10, margin_start=10,
margin_end=10, margin_end=10,
) )