1
0
Fork 0
mirror of https://github.com/aclist/dztui.git synced 2024-12-29 13:52:03 +01:00

feat: open workshop subscriptions

This commit is contained in:
aclist 2024-12-15 09:08:35 +09:00
parent e6b5e40bb2
commit 4d3d9bf0bb
4 changed files with 88 additions and 2 deletions

View file

@ -1,5 +1,9 @@
# Changelog # Changelog
## [5.6.0-beta.18] 2024-12-14
### Added
- Open Steam workshop subscriptions
## [5.6.0-beta.17] 2024-12-14 ## [5.6.0-beta.17] 2024-12-14
### Added ### Added
- Additional logging - Additional logging

View file

@ -578,10 +578,10 @@ fetch_helpers_by_sum(){
[[ -f "$config_file" ]] && source "$config_file" [[ -f "$config_file" ]] && source "$config_file"
declare -A sums declare -A sums
sums=( sums=(
["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["ui.py"]="24d0525e71c0725a1487926fae7330e4"
["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067"
["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397"
["funcs"]="37897aa36bc2fb6286cee02c8bb07258" ["funcs"]="4c1480fcfae15c4bc1c02a337d1de488"
["lan"]="c62e84ddd1457b71a85ad21da662b9af" ["lan"]="c62e84ddd1457b71a85ad21da662b9af"
) )
local author="aclist" local author="aclist"

View file

@ -104,6 +104,7 @@ declare -A funcs=(
["Connect by IP"]="validate_and_connect" ["Connect by IP"]="validate_and_connect"
["Connect by ID"]="validate_and_connect" ["Connect by ID"]="validate_and_connect"
["Connect from table"]="connect_from_table" ["Connect from table"]="connect_from_table"
["find_id"]="find_id"
["toggle"]="toggle" ["toggle"]="toggle"
["Open link"]="open_link" ["Open link"]="open_link"
["filter"]="dump_servers" ["filter"]="dump_servers"
@ -121,6 +122,7 @@ declare -A funcs=(
["is_in_favs"]="is_in_favs" ["is_in_favs"]="is_in_favs"
["show_log"]="show_log" ["show_log"]="show_log"
["Output system info to log file"]="generate_log" ["Output system info to log file"]="generate_log"
["open_user_workshop"]="open_user_workshop"
["open_workshop_page"]="open_workshop_page" ["open_workshop_page"]="open_workshop_page"
["Add to my servers"]="update_favs_from_table" ["Add to my servers"]="update_favs_from_table"
["Remove from my servers"]="update_favs_from_table" ["Remove from my servers"]="update_favs_from_table"
@ -332,6 +334,19 @@ is_in_favs(){
done done
return 1 return 1
} }
find_id(){
local file="$default_steam_path/config/loginusers.vdf"
[[ ! -f $file ]] && return 1
local res=$(python3 $HOME/.local/share/dzgui/helpers/vdf2json.py \
-i "$file" | jq -r '.users
|to_entries[]
|select(.value.MostRecent=="1")
|.key'
)
[[ -z $res ]] && return 1
printf "%s" "$res"
return 0
}
list_mods(){ list_mods(){
local symlink local symlink
local sep local sep
@ -1051,6 +1066,12 @@ update_config_val(){
show_log(){ show_log(){
< "$debug_log" sed 's/Keyword␞/Keyword/' < "$debug_log" sed 's/Keyword␞/Keyword/'
} }
open_user_workshop(){
shift
local id="$1"
url="https://steamcommunity.com/profiles/$id/myworkshopfiles/?appid=$aid&browsefilter=mysubscriptions"
$steam_cmd steam://openurl/$url &
}
open_workshop_page(){ open_workshop_page(){
shift shift
local id="$1" local id="$1"

View file

@ -215,6 +215,7 @@ class RowType(EnumWithAttrs):
"label": "Toggle mod install mode", "label": "Toggle mod install mode",
"tooltip": "Switch between manual and auto mod installation", "tooltip": "Switch between manual and auto mod installation",
"default": "manual", "default": "manual",
"link_label": "Open Steam Workshop",
"alt": "auto", "alt": "auto",
"val": "auto_install" "val": "auto_install"
} }
@ -756,6 +757,29 @@ def process_tree_option(input, treeview):
case RowType.TGL_BRANCH: case RowType.TGL_BRANCH:
wait_msg = "Updating DZGUI branch" wait_msg = "Updating DZGUI branch"
call_on_thread(False, "toggle", wait_msg, cmd_string) call_on_thread(False, "toggle", wait_msg, cmd_string)
case RowType.TGL_INSTALL:
if query_config(None, "auto_install")[0] == "1":
proc = call_out(transient_parent, "toggle", cmd_string)
grid.update_right_statusbar()
tooltip = format_metadata(command.dict["label"])
transient_parent.grid.update_statusbar(tooltip)
return
# manual -> auto mode
proc = call_out(transient_parent, "find_id", "")
if proc.returncode == 1:
link=None
uid=None
else:
link=command.dict["link_label"]
uid=proc.stdout
manual_sub_msg = """\
When switching from MANUAL to AUTO mod install mode,
DZGUI will manage mod installation and deletion for you.
To prevent conflicts with Steam Workshop subscriptions and old mods from being downloaded
when Steam updates, you should unsubscribe from any existing Workshop mods you manually subscribed to.
Open your Profile > Workshop Items and select 'Unsubscribe from all'
on the right-hand side, then click OK below to enable AUTO mod install mode."""
LinkDialog(transient_parent, textwrap.dedent(manual_sub_msg), Popup.NOTIFY, link, command, uid)
case _: case _:
proc = call_out(transient_parent, "toggle", cmd_string) proc = call_out(transient_parent, "toggle", cmd_string)
grid.update_right_statusbar() grid.update_right_statusbar()
@ -2205,6 +2229,43 @@ class ModDialog(GenericDialog):
subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_workshop_page", mod_id]) subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_workshop_page", mod_id])
class LinkDialog(GenericDialog):
def __init__(self, parent, text, mode, link, command, uid=None):
super().__init__(parent, text, mode)
self.dialog = GenericDialog(parent, text, mode)
self.dialogBox = self.dialog.get_content_area()
self.dialog.set_default_response(Gtk.ResponseType.OK)
self.dialog.set_size_request(500, 0)
if link is not None:
button = Gtk.Button(label=link)
button.set_margin_start(60)
button.set_margin_end(60)
button.connect("clicked", self._on_button_clicked, uid)
self.dialogBox.pack_end(button, False, False, 0)
self.dialog.show_all()
self.dialog.connect("response", self._on_dialog_response, parent, command)
def _on_button_clicked(self, button, uid):
label = button.get_label()
subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_user_workshop", uid])
def _on_dialog_response(self, dialog, resp, parent, command):
match resp:
case Gtk.ResponseType.DELETE_EVENT:
return
case Gtk.ResponseType.OK:
self.dialog.destroy()
proc = call_out(parent, "toggle", command.dict["label"])
parent.grid.update_right_statusbar()
tooltip = format_metadata(command.dict["label"])
parent.grid.update_statusbar(tooltip)
class EntryDialog(GenericDialog): class EntryDialog(GenericDialog):
def __init__(self, parent, text, mode, link): def __init__(self, parent, text, mode, link):
super().__init__(parent, text, mode) super().__init__(parent, text, mode)