diff --git a/CHANGELOG.md b/CHANGELOG.md index 87312f5..d6fbed4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [6.0.1-beta.3] 2025-11-13 +## Added +- Support sandboxed flatpak + +## Changed +- Preferred client from radio toggle to combobox + +## Fixed +- Config file erroneously getting updated when populating settings menu + ## [6.0.1-beta.2] 2025-11-10 ## Fixed - Python 3.14 error in finally block diff --git a/dzgui.sh b/dzgui.sh index e6cd70e..1c5b633 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -3,7 +3,7 @@ set -o pipefail src_path=$(realpath "$0") -version=6.0.1.beta-2 +version=6.0.1.beta-3 reference_branch="prerelease/6.0.1-beta.1" #CONSTANTS @@ -468,18 +468,7 @@ steam_deps(){ local msg="Found neither Steam nor Flatpak Steam" raise_error_and_quit "$msg" exit 1 - elif [[ -n "$steam" ]] && [[ -n "$flatpak" ]]; then - [[ -n $preferred_client ]] && return 0 - if [[ -z $preferred_client ]]; then - preferred_client="steam" - fi - elif [[ -n "$steam" ]]; then - preferred_client="steam" - else - preferred_client="flatpak" fi - update_config - logger INFO "Preferred client set to '$preferred_client'" } migrate_files(){ if [[ ! -f $config_path/dztuirc.oldapi ]]; then @@ -616,10 +605,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["funcs"]="5d7d92b7b8a9c788b133ce5271a76553" + ["funcs"]="c6e5d68e084be16aa58358fa51ec4586" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["servers.py"]="ed442c3aecf33f777d59dcf53650d263" - ["ui.py"]="2476397883a4272eaf940403ba5a6575" + ["ui.py"]="2276386252bd571b3505cbbc74359732" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["pefile.py"]="21531f2c0d9dfa5f110cf6779f9d22c0" ) @@ -900,6 +889,7 @@ create_config(){ unset default_steam_path unset steam_path + preferred_client="steam" while true; do local player_input="$($steamsafe_zenity \ --forms \ @@ -1061,13 +1051,13 @@ initial_setup(){ watcher_deps check_architecture test_connection - fetch_helpers > >(pdialog "Checking helper files") +# fetch_helpers > >(pdialog "Checking helper files") varcheck source "$config_file" lock legacy_vars legacy_cols - check_version +# check_version check_map_count steam_deps migrate_files diff --git a/helpers/funcs b/helpers/funcs index 631a76f..0e6813c 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -o pipefail -version="6.0.1-beta.2" +version="6.0.1-beta.3" #CONSTANTS aid=221100 @@ -87,17 +87,14 @@ steam_api_url="https://steamcommunity.com/dev/apikey" battlemetrics_api_url="https://www.battlemetrics.com/developers" bm_api="https://api.battlemetrics.com/servers" -if [[ $preferred_client == "steam" ]]; then - steam_cmd="steam" -else - steam_cmd="flatpak run com.valvesoftware.Steam" -fi +steam_cmd="$preferred_client" declare -A funcs=( ["Highlight stale"]="find_stale_mods" ["Change player name"]="update_config_val" ["Change Steam API key"]="update_config_val" ["Change Battlemetrics API key"]="update_config_val" +["Change client"]="update_config_val" ["Change favorite server"]="add_record" ["Add server by IP"]="add_record" ["Add server by ID"]="add_record" @@ -701,13 +698,6 @@ toggle(){ debug="" fi ;; - Toggle[[:space:]]Steam/Flatpak) - if [[ $preferred_client == "steam" ]]; then - preferred_client="flatpak" - else - preferred_client="steam" - fi - ;; Toggle[[:space:]]DZGUI[[:space:]]fullscreen[[:space:]]boot) if [[ $fullscreen == "true" ]]; then fullscreen="false" @@ -806,6 +796,9 @@ update_config_val(){ local context="$1" local value="$2" case $1 in + "Change client") + key="preferred_client" + ;; "Change player name") key="name" if [[ -z "${value// }" ]]; then @@ -831,7 +824,6 @@ update_config_val(){ declare -n nr=$key nr="$value" update_config - echo "Updated the key '$key' to '$value'" return 80 } show_log(){ diff --git a/helpers/ui.py b/helpers/ui.py index 65438fc..2b88f3e 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -3801,12 +3801,22 @@ class Options(Gtk.Box): "Always fullscreen", Preferences.WINDOW, ) - self.steam_toggle = self.make_binary_radio( - "Steam", "Flatpak (experimental)", Preferences.CLIENT - ) + + # TODO: gray out options if not available on system + client_store = Gtk.ListStore(str, str) + client_store.append(["steam", "steam"]) + client_store.append(["flatpak", "flatpak run com.valvesoftware.Steam"]) + client_store.append(["flatpak (container)", "flatpak-spawn --host flatpak run com.valvesoftware.Steam"]) + + renderer_text = Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END) + self.client_combo = Gtk.ComboBox.new_with_model(client_store) + self.client_combo.set_halign(Gtk.Align.START) + self.client_combo.pack_start(renderer_text, True) + self.client_combo.connect("changed", self._on_client_changed) + self.client_combo.add_attribute(renderer_text, "text", 0) pref_rows = [ - [LeftLabel("Steam client"), self.steam_toggle], + [LeftLabel("Steam client"), self.client_combo], [LeftLabel("Window size at boot"), self.fullscreen_toggle], [LeftLabel("Player name"), self.player_box], ] @@ -3991,6 +4001,15 @@ class Options(Gtk.Box): show_wait_dialog = True call_on_thread(show_wait_dialog, cmd, wait_msg, "") + def _on_client_changed(self, combo: Gtk.ComboBox) -> None: + # prevent triggering on initial init + if App.treeview.subpage is not RowType.OPTIONS: + return + ind = combo.get_active() + mod = combo.get_model() + client = mod[ind][1] + call_bash_func("Change client", client) + def _on_branch_changed(self, combo: Gtk.ComboBoxText) -> None: # prevent triggering on initial init if App.treeview.subpage is not RowType.OPTIONS: @@ -4000,11 +4019,9 @@ class Options(Gtk.Box): def _on_radio_toggled( self, button: Gtk.RadioButton, context: Preferences ) -> None: - if App.treeview.subpage is None: + if App.treeview.subpage is not RowType.OPTIONS: return match context: - case Preferences.CLIENT: - toggle = RowType.TGL_STEAM case Preferences.INSTALL: toggle = RowType.TGL_INSTALL state = button.get_group()[0].get_active() @@ -4126,11 +4143,9 @@ class Options(Gtk.Box): radio = 0 self.mod_install_toggle.get_children()[radio].set_active(True) - if client == "flatpak": - radio = 1 - else: - radio = 0 - self.steam_toggle.get_children()[radio].set_active(True) + for ind, row in enumerate(self.client_combo.get_model()): + if row[1] == client: + self.client_combo.set_active(ind) if fullscreen == "true": radio = 1