From bfd1d3e0f9b2e0bfa4d1d2ad10bffe9da1b30812 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 17 Jun 2026 02:52:57 +0900 Subject: [PATCH] change: move workshop button to mods page --- dzgui/const/enum.py | 10 +++++----- dzgui/controllers/mc.py | 4 ++-- dzgui/managers/contextmenu.py | 4 ++-- dzgui/strings/dialogs.py | 2 +- dzgui/util/strings.py | 12 ++++++------ dzgui/views/components/mod_panel.py | 9 +++++---- dzgui/views/pages/mods.py | 24 ++++++++++++++++++++++-- dzgui/views/pages/options.py | 20 +++----------------- 8 files changed, 46 insertions(+), 39 deletions(-) diff --git a/dzgui/const/enum.py b/dzgui/const/enum.py index 9e84cc5..feab780 100644 --- a/dzgui/const/enum.py +++ b/dzgui/const/enum.py @@ -168,7 +168,7 @@ class ContextMenu(EnumWithAttrs): COPY_LOG_CLIPBOARD = {"label": strings.copy_log} COPY_SERVER_IP = {"label": strings.copy_ip} COPY_SERVER_NAME = {"label": strings.copy_name} - DELETE_MOD = {"label": strings.delete_mod} + UNSUB_MOD = {"label": strings.unsub_mod} OPEN_WORKSHOP = {"label": strings.open_workshop} REFRESH_PLAYERS = {"label": strings.refresh_players} REMOVE_HISTORY = {"label": strings.remove_history} @@ -184,7 +184,7 @@ class ContextMenuGroup(Enum): """ SERVER_MOD = (ContextMenu.OPEN_WORKSHOP,) - MOD = (ContextMenu.OPEN_WORKSHOP, ContextMenu.DELETE_MOD) + MOD = (ContextMenu.OPEN_WORKSHOP, ContextMenu.UNSUB_MOD) MOD_OFFLINE = (None,) LOG = (ContextMenu.COPY_LOG_CLIPBOARD,) SERVER_BROWSER = ( @@ -250,9 +250,9 @@ class ModButton(EnumWithAttrs): "label": strings.mod_panel.unhighlight_stale, "tooltip": strings.mod_panel.unhighlight_stale_tooltip, } - DELETE_SELECTED = { - "label": strings.mod_panel.delete_selected, - "tooltip": strings.mod_panel.delete_selected_tooltip, + UNSUB_SELECTED = { + "label": strings.mod_panel.unsub_selected, + "tooltip": strings.mod_panel.unsub_selected_tooltip, } SELECT_STALE = { "label": strings.mod_panel.select_stale, diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index c7168ab..33c2ce7 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -233,7 +233,7 @@ class Controller(GObject.GObject): mod_man = self.mediator.modtreeview.get_mod_man() mod_man.toggle_mod_selection(state) - def delete_mods( + def unsub_mods( self, treeview: Union["ModTreeView", "OfflineModTreeView", None] = None ) -> None: if treeview is None: @@ -241,7 +241,7 @@ class Controller(GObject.GObject): else: view = treeview mod_man = view.get_mod_man() - mod_man.delete_mods() + mod_man.unsub_mods() def get_mod_store(self) -> Gtk.TreeModel | None: return self.mediator.modtreeview.get_model() diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 7701b1c..37e6b81 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -80,8 +80,8 @@ class ContextMenuManager: if isinstance(self.treeview, (ModTreeView, OfflineModTreeView)): match action: - case ContextMenu.DELETE_MOD: - self.controller.delete_mods(self.treeview) + case ContextMenu.UNSUB_MOD: + self.controller.unsub_mods(self.treeview) case ContextMenu.OPEN_WORKSHOP: self.open_mod_page() diff --git a/dzgui/strings/dialogs.py b/dzgui/strings/dialogs.py index 5df7bb7..57c27a6 100644 --- a/dzgui/strings/dialogs.py +++ b/dzgui/strings/dialogs.py @@ -7,7 +7,7 @@ update_success = "Updated successfully. Please exit and relaunch." load_error_lan = "Failed to find any servers on your network.\nCheck the server query port or your firewall settings." fetching_mods = "Fetching mod metadata" -deleting_mods = "Deleting mods" +deleting_mods = "Unsubscribing mods" scanning_mods = "Scanning mods" parsing_mods = "Parsing mods" diff --git a/dzgui/util/strings.py b/dzgui/util/strings.py index 3d1a0e4..060dcd8 100644 --- a/dzgui/util/strings.py +++ b/dzgui/util/strings.py @@ -52,7 +52,7 @@ show_mods = "Show server-side mods" show_details = "Show server details" refresh_players = "Refresh player count" open_workshop = "Open in Steam Workshop" -delete_mod = "Delete mod" +unsub_mod = "Unsubscribe mod" copy_name = "Copy name to clipboard" copy_ip = "Copy IP to clipboard" copy_log = "Copy record(s) to clipboard" @@ -215,8 +215,8 @@ class ModPanelStrings: unhighlight_stale_tooltip: str highlight_stale: str highlight_stale_tooltip: str - delete_selected: str - delete_selected_tooltip: str + unsub_selected: str + unsub_selected_tooltip: str unselect_all: str unselect_all_tooltip: str select_all: str @@ -337,8 +337,8 @@ mod_panel = ModPanelStrings( "Shows locally-installed mods which are not used by any server " "in your Saved Servers" ), - delete_selected="Delete selected", - delete_selected_tooltip="Deletes selected mods from the system", + unsub_selected="Unsubscribe selected", + unsub_selected_tooltip="Unsubscribes from selected mods", unselect_all="Unselect all", unselect_all_tooltip="Bulk unselects all mods", select_all="Select all", @@ -463,7 +463,7 @@ crumbs = Crumbs( thanks="Help > Special thanks", developers="Options > Developers", default="Servers > ", - offline="Mods > Play offline" + offline="Mods > Play offline", ) no_mods = "No local mods found." diff --git a/dzgui/views/components/mod_panel.py b/dzgui/views/components/mod_panel.py index 194ab2e..b1c19ea 100644 --- a/dzgui/views/components/mod_panel.py +++ b/dzgui/views/components/mod_panel.py @@ -11,7 +11,8 @@ gi.require_version("Gtk", "3.0") from gi.repository import Gtk # noqa E402 if TYPE_CHECKING: - from dzgui.controllers.mc import Controller, Emitter + from dzgui.controllers.mc import Controller + from dzgui.controllers.emitter import Emitter class EnumeratedModButton(Gtk.Button): @@ -48,7 +49,7 @@ class ModSelectionPanel(Gtk.Box): buttons = ( ModButton.SELECT_ALL, ModButton.UNSELECT_ALL, - ModButton.DELETE_SELECTED, + ModButton.UNSUB_SELECTED, ) for button in buttons: b = EnumeratedModButton(button) @@ -100,8 +101,8 @@ class ModSelectionPanel(Gtk.Box): self.controller.toggle_mod_selection(True) case ModButton.UNSELECT_ALL: self.controller.toggle_mod_selection(False) - case ModButton.DELETE_SELECTED: - self.controller.delete_mods() + case ModButton.UNSUB_SELECTED: + self.controller.unsub_mods() case ModButton.HIGHLIGHT_STALE: self.controller.highlight_stale() case ModButton.UNHIGHLIGHT_STALE: diff --git a/dzgui/views/pages/mods.py b/dzgui/views/pages/mods.py index fdd1e7b..df13967 100644 --- a/dzgui/views/pages/mods.py +++ b/dzgui/views/pages/mods.py @@ -1,5 +1,9 @@ +from pathlib import Path + from typing import Self, TYPE_CHECKING -from dzgui.const.enum import NotebookPage +from dzgui.api.steam import find_user_id +from dzgui.const.enum import NotebookPage, Preferences +from dzgui.views.components.buttons import SteamWorkshopButton from dzgui.views.components.scrollable import NoOverlayScrolledWindow from dzgui.views.trees.tree_mods import ModTreeView @@ -26,6 +30,19 @@ class Mods(Gtk.Box): self.controller.register_widget("modtreeview", self.tree) self.emitter = controller.get_emitter() + # TODO: move + default_steam_path = self.controller.query_config(Preferences.DEFAULT) + steam_path = Path(default_steam_path) + uid = find_user_id(steam_path) + + pretty_uid = "" if uid is None else uid + hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) + workshop_button = SteamWorkshopButton() + workshop_button.set_margin_top(10) + workshop_button.set_margin_bottom(10) + workshop_button.connect( + "clicked", lambda _: self.controller.open_user_workshop(pretty_uid) + ) self.offline_button = Gtk.Button( label="Play offline", halign=Gtk.Align.START, @@ -34,7 +51,10 @@ class Mods(Gtk.Box): ) self.offline_button.connect("clicked", self._on_offline_clicked) - self.add(self.offline_button) + hbox.add(workshop_button) + hbox.add(self.offline_button) + + self.add(hbox) self.add(self.box) self.connect("map", self._on_map) diff --git a/dzgui/views/pages/options.py b/dzgui/views/pages/options.py index 29b5130..f97530f 100644 --- a/dzgui/views/pages/options.py +++ b/dzgui/views/pages/options.py @@ -2,7 +2,7 @@ from pathlib import Path from typing import TYPE_CHECKING from dzgui.api import pefile as PeFile -from dzgui.api.steam import find_user_id + from dzgui.config import query from dzgui.const.constants import ( APPID_DAYZ, @@ -19,7 +19,8 @@ from dzgui.const.endpoints import STEAM_API_SETUP, BM_API_SETUP from dzgui.const.enum import Preferences, ServerTab from dzgui.strings import errors, options from dzgui.util import strings, css, open_links -from dzgui.views.components.buttons import SteamWorkshopButton + +# from dzgui.views.components.buttons import SteamWorkshopButton from dzgui.views.components.labels import LeftLabel from dzgui.views.components.eventbox import InfoEventBox from dzgui.views.components.buttons import WebButton @@ -134,16 +135,6 @@ class Options(Gtk.Box): [LeftLabel(strings.options.name), self.player_box], ] - eb = InfoEventBox(options.workshop_eventbox, controller) - - workshop_button = SteamWorkshopButton() - workshop_button.connect( - "clicked", lambda _: self.controller.open_user_workshop(self.uid) - ) - mod_rows = [ - [LeftLabel(options.workshop_label), workshop_button, eb], - ] - self.dayz_version_label = Gtk.Label(label=strings.null) self.dayz_exp_version_label = Gtk.Label(label=strings.null) @@ -169,7 +160,6 @@ class Options(Gtk.Box): api_box.add(api_links_box) prefs_grid = self._make_grid(pref_rows) - mods_grid = self._make_grid(mod_rows) version_grid = self._make_grid(version_rows) col = 1 @@ -190,7 +180,6 @@ class Options(Gtk.Box): for pair in [ (api_box, strings.options.api_keys), (prefs_grid, strings.options.prefs), - (mods_grid, strings.options.mods), (version_grid, strings.options.version), ]: @@ -416,9 +405,6 @@ class Options(Gtk.Box): bm = self.controller.query_config(Preferences.BM) steam_path = Path(default_steam_path) - # NOTE: this is a best effort guess at the most recent user - uid = find_user_id(steam_path) - self.uid = "" if uid is None else uid self.old_steam = steam self.old_bm = bm