Start nvda2speechd for Wine games
This commit is contained in:
@@ -147,6 +147,58 @@ install_with_progress() {
|
|||||||
esac
|
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() {
|
prepare_wine_game_dirs() {
|
||||||
local driveC="${WINEPREFIX}/drive_c"
|
local driveC="${WINEPREFIX}/drive_c"
|
||||||
local gamesWineRoot="${HOME}/.local/games/Wine"
|
local gamesWineRoot="${HOME}/.local/games/Wine"
|
||||||
@@ -256,6 +308,7 @@ add_launcher() {
|
|||||||
set_app_winver "$wineTarget" "$gameWinVer"
|
set_app_winver "$wineTarget" "$gameWinVer"
|
||||||
unset gameWinVer
|
unset gameWinVer
|
||||||
fi
|
fi
|
||||||
|
replace_wine_nvda_dlls
|
||||||
|
|
||||||
cat > "$launcherRecipe" <<LAUNCHER
|
cat > "$launcherRecipe" <<LAUNCHER
|
||||||
run_wine_path '${wineTarget}'
|
run_wine_path '${wineTarget}'
|
||||||
|
|||||||
@@ -63,8 +63,34 @@ run_wine() {
|
|||||||
popd > /dev/null || return 1
|
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() {
|
run_wine_path() {
|
||||||
local wineTarget="$1"
|
local wineTarget="$1"
|
||||||
|
local bridgePid=""
|
||||||
|
local launchStatus=0
|
||||||
local wineDir
|
local wineDir
|
||||||
local wineExec
|
local wineExec
|
||||||
|
|
||||||
@@ -73,8 +99,11 @@ run_wine_path() {
|
|||||||
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
|
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
|
||||||
wineExec="${wineTarget##*\\}"
|
wineExec="${wineTarget##*\\}"
|
||||||
pushd "$wineDir" > /dev/null || return 1
|
pushd "$wineDir" > /dev/null || return 1
|
||||||
wine "$wineExec"
|
start_nvda2speechd bridgePid || true
|
||||||
|
wine "$wineExec" || launchStatus=$?
|
||||||
|
stop_nvda2speechd "$bridgePid"
|
||||||
popd > /dev/null || return 1
|
popd > /dev/null || return 1
|
||||||
|
return "$launchStatus"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_native() {
|
run_native() {
|
||||||
|
|||||||
Reference in New Issue
Block a user