Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d4ee181
fix: exempt systemDefined depots from license check (#1088)
jeremybernstein Apr 3, 2026
bc610de
fix: virtual keyboard key handling (#1080)
AndreVto Apr 3, 2026
8ca244f
Dont take symlinks into account during size calculation (#1093)
unbelievableflavour Apr 3, 2026
2f3591b
Added uplay support on top of ubisoft connect (#1075)
unbelievableflavour Apr 3, 2026
690cee2
fix: keep perf hud fps tracking on unrelated window unmaps (#1097)
xXJSONDeruloXx Apr 4, 2026
fbfdddf
Feat & Fix: Environment variables presets + VKD3D_SHADER_MODEL=6_0 se…
Catpotatos Apr 5, 2026
262126d
fix: add app paths to goldberg config to fix games dlc detection (#1098)
joshuatam Apr 5, 2026
39fcb26
fix: remove 30s brightness blackout from ambient download overlay (#1…
xXJSONDeruloXx Apr 5, 2026
7299e08
Fix touchpad right-click (#1071)
Nightwalker743 Apr 5, 2026
41e0c06
fix: fallback fps tracking for non-Vulkan games (#1101)
xXJSONDeruloXx Apr 5, 2026
cf52cc1
Revert "fix: fallback fps tracking for non-Vulkan games (#1101)" (#1110)
utkarshdalal Apr 5, 2026
fda883c
Feat/Fix: add OpenAL Soft Audio support, added presets for WINEDLLOVE…
Catpotatos Apr 5, 2026
345b246
Runtime does apply BCN emulation to Proton x86_x64 unconditionaly, so…
Catpotatos Apr 5, 2026
6788cda
fix: cache recovered sizes for legacy steam installs (#1111)
xXJSONDeruloXx Apr 6, 2026
7ed9bdb
request best config for specific store (#1115)
utkarshdalal Apr 6, 2026
107cb70
bumped version
Apr 6, 2026
ee04230
fix: reduce GC pressure in CaseInsensitiveFileSystem (#1120)
jeremybernstein Apr 6, 2026
8f95184
dropped version for testing
Apr 6, 2026
e39888e
Added verify files to GOG, clear prerequisite markers on verify, allo…
Apr 7, 2026
f5200c5
fix: do not crash on game start on Meta Quest (#1105)
lvonasek Apr 7, 2026
e563e79
Don't show logged out steam splash when offline and steam games are i…
utkarshdalal Apr 7, 2026
110651b
Hide local saves only setting (#1139)
utkarshdalal Apr 7, 2026
9a53b1a
Added back best config for non steam games, except remove executable …
utkarshdalal Apr 8, 2026
24508c2
bumped version code for 0.9 full release
Apr 8, 2026
d25eaa6
fix: prevent carousel touch loss during pagination (#1127)
xXJSONDeruloXx Apr 8, 2026
55c0796
fix: Download support files for gen 2 (#1130)
unbelievableflavour Apr 8, 2026
e80c2a3
exp(): get fexcore automatic.
phobos665 Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions .github/workflows/update-fexcore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Update FEXCore

on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:

permissions:
contents: write
pull-requests: write

jobs:
update-fexcore:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install zstd
run: sudo apt-get install -y zstd

- name: Find latest FEXCore .wcp
id: check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Fetch the file listing from the upstream repo via the GitHub API.
# Authenticate to avoid anonymous rate-limit (60 req/hr).
RESPONSE=$(curl -sf \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: Bearer $GH_TOKEN" \
"https://api.github.com/repos/StevenMXZ/Winlator-Contents/contents/FEXCore")

# Pick the file with the highest YYMM version.
# Only considers files whose names start with 4 digits (e.g. 2604.wcp, 2508.1.wcp).
LATEST=$(python3 - <<'EOF'
import sys, json, re

data = json.loads(sys.stdin.read())
files = [f["name"] for f in data if f["type"] == "file" and f["name"].endswith(".wcp")]

best = None
best_ver = (-1, -1)
for name in files:
m = re.match(r'^(\d{4})(?:\.(\d+))?\.wcp$', name)
if m:
ver = (int(m.group(1)), int(m.group(2) or 0))
if ver > best_ver:
best_ver = ver
best = name

print(best or "")
EOF
<<< "$RESPONSE")

if [[ -z "$LATEST" ]]; then
echo "Could not determine latest .wcp file." >&2
exit 1
fi

# Extract the YYMM version (first four digits) for the output filename.
VERSION=$(echo "$LATEST" | grep -oP '^\d{4}')
TZST_PATH="app/src/main/assets/fexcore/fexcore-${VERSION}.tzst"

echo "LATEST_FILE=$LATEST" >> "$GITHUB_OUTPUT"
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
echo "TZST_PATH=$TZST_PATH" >> "$GITHUB_OUTPUT"

if [[ -f "$TZST_PATH" ]]; then
echo "ALREADY_EXISTS=true" >> "$GITHUB_OUTPUT"
echo "fexcore-${VERSION}.tzst already present — nothing to do."
else
echo "ALREADY_EXISTS=false" >> "$GITHUB_OUTPUT"
echo "New release found: $LATEST → $TZST_PATH"
fi

- name: Download ${{ steps.check.outputs.LATEST_FILE }}
if: steps.check.outputs.ALREADY_EXISTS == 'false'
run: |
curl -fL -o latest.wcp \
"https://raw.githubusercontent.com/StevenMXZ/Winlator-Contents/main/FEXCore/${{ steps.check.outputs.LATEST_FILE }}"

- name: Convert .wcp → .tzst
if: steps.check.outputs.ALREADY_EXISTS == 'false'
run: |
chmod +x tools/convert-wcp-to-tzst.sh
./tools/convert-wcp-to-tzst.sh latest.wcp "${{ steps.check.outputs.TZST_PATH }}"

- name: Update arrays.xml
if: steps.check.outputs.ALREADY_EXISTS == 'false'
run: |
VERSION="${{ steps.check.outputs.VERSION }}"
ARRAYS_XML="app/src/main/res/values/arrays.xml"

# Check if this version is already listed in arrays.xml.
if grep -qF "<item>${VERSION}</item>" "$ARRAYS_XML"; then
echo "Version $VERSION already present in arrays.xml — skipping XML update."
else
# Insert the new version as the last <item> of fexcore_version_entries.
# We find the closing </string-array> that follows the fexcore_version_entries
# block and insert directly before it.
python3 - "$ARRAYS_XML" "$VERSION" <<'PYEOF'
import sys, re

path, version = sys.argv[1], sys.argv[2]
with open(path, "r", encoding="utf-8") as f:
content = f.read()

# Find the fexcore_version_entries block and append the new item before its closing tag.
pattern = r'(name="fexcore_version_entries".*?)(</string-array>)'
replacement = r'\g<1> <item>' + version + r'</item>\n \g<2>'
new_content, count = re.subn(pattern, replacement, content, count=1, flags=re.DOTALL)

if count == 0:
print("ERROR: fexcore_version_entries array not found in arrays.xml", file=sys.stderr)
sys.exit(1)

with open(path, "w", encoding="utf-8") as f:
f.write(new_content)

print(f"Appended <item>{version}</item> to fexcore_version_entries.")
PYEOF
fi

- name: Create PR branch, commit, and open PR
if: steps.check.outputs.ALREADY_EXISTS == 'false'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ steps.check.outputs.VERSION }}"
BRANCH="fexcore/update-${VERSION}"

git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

git checkout -b "$BRANCH"
git add "${{ steps.check.outputs.TZST_PATH }}"
git add app/src/main/res/values/arrays.xml
git commit -m "chore: add FEXCore ${VERSION}"
git push origin "$BRANCH"

gh pr create \
--title "chore: add FEXCore ${VERSION}" \
--body "Automated update from [StevenMXZ/Winlator-Contents](https://github.com/StevenMXZ/Winlator-Contents/tree/main/FEXCore).

- Converted \`${{ steps.check.outputs.LATEST_FILE }}\` → \`${{ steps.check.outputs.TZST_PATH }}\`
- Added \`${VERSION}\` to \`fexcore_version_entries\` in \`arrays.xml\`" \
--head "$BRANCH" \
--base "$(git remote show origin | awk '/HEAD branch/ {print $NF}')"
37 changes: 37 additions & 0 deletions THIRD_PARTY_NOTICES
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,40 @@ You can copy, modify, distribute and perform the work, even for commercial
purposes, all without asking permission.

Full license text: https://creativecommons.org/publicdomain/zero/1.0/

---

## OpenAL Soft

**Library:** OpenAL Soft v1.25.1
**Author:** kcat (Chris Robinson) and contributors
**Source:** https://openal-soft.org/ / https://github.com/kcat/openal-soft
**License:** LGPL-2.1 (GNU Lesser General Public License v2.1)

Pre-compiled Windows DLLs (openal32.dll, soft_oal.dll) for both x86 and
x86_64 architectures are included in `app/src/main/assets/wincomponents/openal.tzst`.
These DLLs are extracted at runtime only when the user explicitly sets the
`WINEDLLOVERRIDES` environment variable to reference openal32 or soft_oal.

As required by LGPL-2.1, the complete source code for the version used is
available at:
https://github.com/kcat/openal-soft/releases/tag/1.25.1

Users may substitute their own build of OpenAL Soft by replacing the DLLs
in the wineprefix `drive_c/windows/system32/` and `drive_c/windows/syswow64/`
directories.

### License Text: LGPL-2.1

This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
for more details.

Full license text: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html

2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ android {
minSdk = 26
targetSdk = 28

versionCode = 13
versionCode = 14
versionName = "0.9.0"

buildConfigField("boolean", "GOLD", "false")
Expand Down
Loading
Loading