mirror of
https://github.com/aclist/dztui.git
synced 2024-12-27 21:02:36 +01:00
fix: more performant link traversal
This commit is contained in:
parent
21e9e140d1
commit
4e968e63e5
3 changed files with 77 additions and 19 deletions
|
@ -1,5 +1,13 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [5.6.0-beta.20] 2024-12-23
|
||||||
|
### Added
|
||||||
|
- Output real and resolved mod ids to logs (temporary)
|
||||||
|
- Added -steam launch parameter
|
||||||
|
### Fixed
|
||||||
|
- Only iterate on missing symlinks
|
||||||
|
- Move logging up
|
||||||
|
|
||||||
## [5.6.0-beta.19] 2024-12-18
|
## [5.6.0-beta.19] 2024-12-18
|
||||||
### Added
|
### Added
|
||||||
- Redact usernames in log files
|
- Redact usernames in log files
|
||||||
|
|
9
dzgui.sh
9
dzgui.sh
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
version=5.6.0-beta.19
|
version=5.6.0-beta.20
|
||||||
|
|
||||||
#CONSTANTS
|
#CONSTANTS
|
||||||
aid=221100
|
aid=221100
|
||||||
|
@ -587,7 +587,7 @@ fetch_helpers_by_sum(){
|
||||||
["ui.py"]="99544ccef6060125509c4b689a808a15"
|
["ui.py"]="99544ccef6060125509c4b689a808a15"
|
||||||
["query_v2.py"]="55d339ba02512ac69de288eb3be41067"
|
["query_v2.py"]="55d339ba02512ac69de288eb3be41067"
|
||||||
["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397"
|
["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397"
|
||||||
["funcs"]="05f104fcdf27222f04046d41ec48d692"
|
["funcs"]="6371f34f2040de5df82bc9064ad4d26d"
|
||||||
["lan"]="c62e84ddd1457b71a85ad21da662b9af"
|
["lan"]="c62e84ddd1457b71a85ad21da662b9af"
|
||||||
)
|
)
|
||||||
local author="aclist"
|
local author="aclist"
|
||||||
|
@ -893,10 +893,10 @@ test_connection(){
|
||||||
if [[ $res -ne 200 ]]; then
|
if [[ $res -ne 200 ]]; then
|
||||||
logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback"
|
logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback"
|
||||||
remote_host=cb
|
remote_host=cb
|
||||||
|
logger INFO "Set remote host to '${hr["codeberg.org"]}'"
|
||||||
res=$(get_response_code "${hr["codeberg.org"]}")
|
res=$(get_response_code "${hr["codeberg.org"]}")
|
||||||
[[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})"
|
[[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})"
|
||||||
fi
|
fi
|
||||||
logger INFO "Set remote host to '${hr["codeberg.org"]}'"
|
|
||||||
if [[ $remote_host == "cb" ]]; then
|
if [[ $remote_host == "cb" ]]; then
|
||||||
url_prefix="https://codeberg.org/$author/$repo/raw/branch"
|
url_prefix="https://codeberg.org/$author/$repo/raw/branch"
|
||||||
releases_url="https://codeberg.org/$author/$repo/releases/download/browser"
|
releases_url="https://codeberg.org/$author/$repo/releases/download/browser"
|
||||||
|
@ -1004,6 +1004,9 @@ main(){
|
||||||
uninstall &&
|
uninstall &&
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
if [[ $1 == "--steam" ]] || [[ $1 == "-s" ]]; then
|
||||||
|
export STEAM_LAUNCH=1
|
||||||
|
fi
|
||||||
|
|
||||||
set_im_module
|
set_im_module
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ prefix="dzg"
|
||||||
log_path="$state_path/logs"
|
log_path="$state_path/logs"
|
||||||
debug_log="$log_path/DZGUI_DEBUG.log"
|
debug_log="$log_path/DZGUI_DEBUG.log"
|
||||||
system_log="$log_path/DZGUI_SYSTEM.log"
|
system_log="$log_path/DZGUI_SYSTEM.log"
|
||||||
|
mod_log="$log_path/DZGUI_MODIDS.log"
|
||||||
|
meta_log="$log_path/DZGUI_META.log"
|
||||||
|
|
||||||
#STATE FILES
|
#STATE FILES
|
||||||
history_file="$state_path/$prefix.history"
|
history_file="$state_path/$prefix.history"
|
||||||
|
@ -866,12 +868,12 @@ test_connection(){
|
||||||
if [[ $res -ne 200 ]]; then
|
if [[ $res -ne 200 ]]; then
|
||||||
logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback"
|
logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback"
|
||||||
remote_host=cb
|
remote_host=cb
|
||||||
|
logger INFO "Set remote host to '${hr["codeberg.org"]}'"
|
||||||
res=$(get_response_code "${hr["codeberg.org"]}")
|
res=$(get_response_code "${hr["codeberg.org"]}")
|
||||||
if [[ $res -ne 200 ]]; then
|
if [[ $res -ne 200 ]]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
logger INFO "Set remote host to '${hr["codeberg.org"]}'"
|
|
||||||
if [[ $remote_host == "cb" ]]; then
|
if [[ $remote_host == "cb" ]]; then
|
||||||
url_prefix="https://codeberg.org/$author/$repo/raw/branch"
|
url_prefix="https://codeberg.org/$author/$repo/raw/branch"
|
||||||
releases_url="https://codeberg.org/$author/$repo/releases/download/browser"
|
releases_url="https://codeberg.org/$author/$repo/releases/download/browser"
|
||||||
|
@ -1165,6 +1167,12 @@ $(print_ip_list | sed 's/"//g')
|
||||||
Mods:
|
Mods:
|
||||||
$(list_mods | sed 's/^/\t/g')
|
$(list_mods | sed 's/^/\t/g')
|
||||||
DOC
|
DOC
|
||||||
|
#2024-12-13
|
||||||
|
find $workshop_dir -mindepth 1 -maxdepth 1 -type d | awk -F/ '{print $NF}' | sort > $mod_log
|
||||||
|
find $workshop_dir -mindepth 1 -name meta.cpp | while read -r line; do
|
||||||
|
cat "$line" | awk '/publishedid/ {print $3}' | sed 's/;//g;s/\r//g'
|
||||||
|
done | sort > $meta_log
|
||||||
|
#END
|
||||||
printf "Wrote system log to %s" "$system_log"
|
printf "Wrote system log to %s" "$system_log"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -1220,22 +1228,61 @@ legacy_symlinks(){
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
symlinks(){
|
symlinks(){
|
||||||
readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d)
|
_merge(){
|
||||||
[[ ${#mod_dirs[@]} -eq 0 ]] && return
|
comm -23 <(printf "%s\n" "${mods[@]}" | sort) <(printf "%s\n" "${targets[@]}" | sort)
|
||||||
logger INFO "Generating symlinks in new format"
|
}
|
||||||
for d in "${mod_dirs[@]}"; do
|
_pulse(){
|
||||||
# suppress errors if mods are downloading at boot
|
zenity --pulsate --progress --auto-close --no-cancel --title="DZGUI"
|
||||||
[[ ! -f "$d/meta.cpp" ]] && continue
|
}
|
||||||
id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}')
|
_create_links(){
|
||||||
encoded_id=$(encode "$id")
|
local arr=("$@")
|
||||||
link="@$encoded_id"
|
local encoded_id
|
||||||
if [[ -h "$game_dir/$link" ]]; then
|
local link
|
||||||
logger INFO "Symlink already exists: '$link' for mod '$id'"
|
local mod
|
||||||
continue
|
for ((i=0; i<${#arr[@]}; i++)); do
|
||||||
|
encoded_id=$(encode "${arr[$i]}")
|
||||||
|
link="@$encoded_id"
|
||||||
|
mod="${arr[$i]}"
|
||||||
|
logger INFO "Creating link '$game_dir/$link' for '$workshop_dir/$mod'"
|
||||||
|
[[ $STEAM_LAUNCH -eq 1 ]] && echo "# Creating mod link $((i+1))/${#arr[@]}"
|
||||||
|
ln -s "$workshop_dir/$mod" "$game_dir/$link"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
readarray -t mods < <(find $workshop_dir -mindepth 1 -name meta.cpp | awk -F/ 'NF=NF-1{print $NF}')
|
||||||
|
readarray -t links < <(find $game_dir -type l)
|
||||||
|
|
||||||
|
if [[ ${#mods[@]} -eq 0 ]]; then
|
||||||
|
logger INFO "No mods present, aborting"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${#links[@]} -eq 0 ]]; then
|
||||||
|
logger INFO "No symlinks present in '$game_dir', creating them"
|
||||||
|
if [[ $STEAM_LAUNCH -eq 1 ]]; then
|
||||||
|
_create_links "${mods[@]}" > >(_pulse)
|
||||||
|
else
|
||||||
|
_create_links "${mods[@]}"
|
||||||
fi
|
fi
|
||||||
ln -fs "$d" "$game_dir/$link"
|
return
|
||||||
logger INFO "Created symlink '$link' for mod '$id'"
|
fi
|
||||||
done
|
|
||||||
|
readarray -t targets < <(printf "%s\n" "${links[@]}" | xargs readlink -f | awk -F/ '{print $NF}')
|
||||||
|
readarray -t hits < <(_merge)
|
||||||
|
|
||||||
|
if [[ ${#hits[@]} -eq 0 ]]; then
|
||||||
|
logger INFO "Symlinks are up to date, skipping"
|
||||||
|
return
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# update missing targets
|
||||||
|
logger INFO "Found ${#hits[@]} unlinked mods"
|
||||||
|
if [[ $STEAM_LAUNCH -eq 1 ]]; then
|
||||||
|
_create_links "${hits[@]}" > >(_pulse)
|
||||||
|
else
|
||||||
|
_create_links "${hits[@]}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
update_history(){
|
update_history(){
|
||||||
local record="$1"
|
local record="$1"
|
||||||
|
|
Loading…
Reference in a new issue