Start nvda2speechd for Wine games
This commit is contained in:
@@ -147,6 +147,58 @@ install_with_progress() {
|
||||
esac
|
||||
}
|
||||
|
||||
ensure_wine_accessibility_files() {
|
||||
local accessibilityDir="${HOME}/.local/share/stormux/wine-accessibility"
|
||||
local nvdaControllerClient32Dll="${ipfsGateway}/ipfs/QmTrRrT4QFKSkZ8ivfUawA6iJ6adEyyogccE3nLDTfSK8u?filename=nvdaControllerClient32.dll"
|
||||
local nvdaControllerClient64Dll="${ipfsGateway}/ipfs/QmaYE7RFDtwHCiXCVLcuA3esfFx6E7koidtvrck9AwPuuN?filename=nvdaControllerClient64.dll"
|
||||
local nvda2speechdBinary="${ipfsGateway}/ipfs/QmPxhoNsoFoJC7bCfioBBCcK8tEoSoYpm342z6u7KjFsVz?filename=nvda2speechd"
|
||||
|
||||
download_named "nvdaControllerClient32.dll" "$nvdaControllerClient32Dll"
|
||||
download_named "nvdaControllerClient64.dll" "$nvdaControllerClient64Dll"
|
||||
download_named "nvda2speechd" "$nvda2speechdBinary"
|
||||
|
||||
mkdir -p "$accessibilityDir"
|
||||
cp -f "${cache}/nvdaControllerClient32.dll" "${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
cp -f "${cache}/nvdaControllerClient64.dll" "${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
cp -f "${cache}/nvda2speechd" "${accessibilityDir}/nvda2speechd"
|
||||
chmod 755 "${accessibilityDir}/nvda2speechd"
|
||||
}
|
||||
|
||||
replace_wine_nvda_dlls() {
|
||||
local accessibilityDir="${HOME}/.local/share/stormux/wine-accessibility"
|
||||
local dllFile
|
||||
local dllName
|
||||
local replacement
|
||||
|
||||
[[ -d "${WINEPREFIX:-}" ]] || return 0
|
||||
|
||||
ensure_wine_accessibility_files
|
||||
find -L "$WINEPREFIX" -type f -iname 'nvdaControllerClient*.dll' -print0 | while IFS= read -r -d '' dllFile; do
|
||||
dllName="${dllFile##*/}"
|
||||
replacement=""
|
||||
|
||||
case "${dllName,,}" in
|
||||
nvdacontrollerclient32.dll)
|
||||
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
;;
|
||||
nvdacontrollerclient64.dll)
|
||||
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
;;
|
||||
nvdacontrollerclient.dll)
|
||||
if file "$dllFile" | grep -q 'PE32+'; then
|
||||
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
elif file "$dllFile" | grep -q 'PE32'; then
|
||||
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -n "$replacement" && -f "$replacement" ]]; then
|
||||
cp -f "$replacement" "$dllFile"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
prepare_wine_game_dirs() {
|
||||
local driveC="${WINEPREFIX}/drive_c"
|
||||
local gamesWineRoot="${HOME}/.local/games/Wine"
|
||||
@@ -256,6 +308,7 @@ add_launcher() {
|
||||
set_app_winver "$wineTarget" "$gameWinVer"
|
||||
unset gameWinVer
|
||||
fi
|
||||
replace_wine_nvda_dlls
|
||||
|
||||
cat > "$launcherRecipe" <<LAUNCHER
|
||||
run_wine_path '${wineTarget}'
|
||||
|
||||
@@ -63,8 +63,34 @@ run_wine() {
|
||||
popd > /dev/null || return 1
|
||||
}
|
||||
|
||||
start_nvda2speechd() {
|
||||
local bridgePidVariable="$1"
|
||||
local bridgeBinary="${HOME}/.local/share/stormux/wine-accessibility/nvda2speechd"
|
||||
|
||||
if ! [[ -x "$bridgeBinary" ]]; then
|
||||
bridgeBinary="$(command -v nvda2speechd 2> /dev/null || true)"
|
||||
fi
|
||||
[[ -n "$bridgeBinary" && -x "$bridgeBinary" ]] || return 0
|
||||
|
||||
"$bridgeBinary" > /dev/null 2>&1 &
|
||||
printf -v "$bridgePidVariable" '%s' "$!"
|
||||
sleep 0.2
|
||||
}
|
||||
|
||||
stop_nvda2speechd() {
|
||||
local bridgePid="$1"
|
||||
|
||||
[[ -n "$bridgePid" ]] || return 0
|
||||
if kill -0 "$bridgePid" 2> /dev/null; then
|
||||
kill "$bridgePid" 2> /dev/null || true
|
||||
wait "$bridgePid" 2> /dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
run_wine_path() {
|
||||
local wineTarget="$1"
|
||||
local bridgePid=""
|
||||
local launchStatus=0
|
||||
local wineDir
|
||||
local wineExec
|
||||
|
||||
@@ -73,8 +99,11 @@ run_wine_path() {
|
||||
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
|
||||
wineExec="${wineTarget##*\\}"
|
||||
pushd "$wineDir" > /dev/null || return 1
|
||||
wine "$wineExec"
|
||||
start_nvda2speechd bridgePid || true
|
||||
wine "$wineExec" || launchStatus=$?
|
||||
stop_nvda2speechd "$bridgePid"
|
||||
popd > /dev/null || return 1
|
||||
return "$launchStatus"
|
||||
}
|
||||
|
||||
run_native() {
|
||||
|
||||
Reference in New Issue
Block a user