mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-08-04 20:36:59 +00:00
Compare commits
No commits in common. "master" and "Canary-1.3.89" have entirely different histories.
master
...
Canary-1.3
80
.github/workflows/canary.yml
vendored
80
.github/workflows/canary.yml
vendored
@ -105,48 +105,46 @@ jobs:
|
|||||||
|
|
||||||
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz"
|
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
# If anyone wants to look into why appimagetool randomly errors with exit code 8, that would be cool
|
|
||||||
|
|
||||||
# - name: Build AppImage (Linux)
|
- name: Build AppImage (Linux)
|
||||||
# if: matrix.platform.os == 'ubuntu-latest'
|
if: matrix.platform.os == 'ubuntu-latest'
|
||||||
# run: |
|
run: |
|
||||||
# BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
|
BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
|
||||||
# PLATFORM_NAME="${{ matrix.platform.name }}"
|
PLATFORM_NAME="${{ matrix.platform.name }}"
|
||||||
#
|
|
||||||
# sudo apt install -y zsync desktop-file-utils appstream
|
sudo apt install -y zsync desktop-file-utils appstream
|
||||||
#
|
|
||||||
# mkdir -p tools
|
mkdir -p tools
|
||||||
# export PATH="$PATH:$(readlink -f tools)"
|
export PATH="$PATH:$(readlink -f tools)"
|
||||||
#
|
|
||||||
# # Setup appimagetool
|
# Setup appimagetool
|
||||||
# wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||||
# chmod +x tools/appimagetool
|
chmod +x tools/appimagetool
|
||||||
# chmod +x distribution/linux/appimage/build-appimage.sh
|
chmod +x distribution/linux/appimage/build-appimage.sh
|
||||||
#
|
|
||||||
# # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
|
# Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
|
||||||
# if [ "$PLATFORM_NAME" = "linux-x64" ]; then
|
if [ "$PLATFORM_NAME" = "linux-x64" ]; then
|
||||||
# ARCH_NAME=x64
|
ARCH_NAME=x64
|
||||||
# export ARCH=x86_64
|
export ARCH=x86_64
|
||||||
# elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
|
elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
|
||||||
# ARCH_NAME=arm64
|
ARCH_NAME=arm64
|
||||||
# export ARCH=aarch64
|
export ARCH=aarch64
|
||||||
# else
|
else
|
||||||
# echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
|
echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
|
||||||
# exit 1
|
exit 1
|
||||||
# fi
|
fi
|
||||||
#
|
|
||||||
# export UFLAG="gh-releases-zsync|${{ secrets.RC_OWNER }}${{ secrets.RC_CANARY_NAME }}|latest|*-$ARCH_NAME.AppImage.zsync"
|
export UFLAG="gh-releases-zsync|${{ secrets.RC_OWNER }}${{ secrets.RC_CANARY_NAME }}|latest|*-$ARCH_NAME.AppImage.zsync"
|
||||||
# BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
|
BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
|
||||||
#
|
|
||||||
# pushd publish_appimage
|
pushd publish_appimage
|
||||||
# mv Ryujinx.AppImage ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage
|
mv Ryujinx.AppImage ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage
|
||||||
# mv Ryujinx.AppImage.zsync ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
|
mv Ryujinx.AppImage.zsync ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
|
||||||
# popd
|
popd
|
||||||
#
|
|
||||||
# gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage"
|
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage"
|
||||||
# gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
|
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
|
||||||
# shell: bash
|
shell: bash
|
||||||
|
|
||||||
macos_release:
|
macos_release:
|
||||||
name: Release MacOS universal
|
name: Release MacOS universal
|
||||||
|
80
.github/workflows/release.yml
vendored
80
.github/workflows/release.yml
vendored
@ -96,48 +96,46 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build AppImage (Linux)
|
||||||
|
if: matrix.platform.os == 'ubuntu-latest'
|
||||||
|
run: |
|
||||||
|
BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
|
||||||
|
PLATFORM_NAME="${{ matrix.platform.name }}"
|
||||||
|
|
||||||
|
sudo apt install -y zsync desktop-file-utils appstream
|
||||||
|
|
||||||
|
mkdir -p tools
|
||||||
|
export PATH="$PATH:$(readlink -f tools)"
|
||||||
|
|
||||||
|
# Setup appimagetool
|
||||||
|
wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||||
|
chmod +x tools/appimagetool
|
||||||
|
chmod +x distribution/linux/appimage/build-appimage.sh
|
||||||
|
|
||||||
|
# Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
|
||||||
|
if [ "$PLATFORM_NAME" = "linux-x64" ]; then
|
||||||
|
ARCH_NAME=x64
|
||||||
|
export ARCH=x86_64
|
||||||
|
elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
|
||||||
|
ARCH_NAME=arm64
|
||||||
|
export ARCH=aarch64
|
||||||
|
else
|
||||||
|
echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync"
|
||||||
|
BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
|
||||||
|
|
||||||
|
pushd publish_appimage
|
||||||
|
mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
|
||||||
|
mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
|
||||||
|
popd
|
||||||
|
|
||||||
# If anyone wants to look into why appimagetool randomly errors with exit code 8, that would be cool
|
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage"
|
||||||
|
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
|
||||||
# - name: Build AppImage (Linux)
|
shell: bash
|
||||||
# if: matrix.platform.os == 'ubuntu-latest'
|
|
||||||
# run: |
|
|
||||||
# BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
|
|
||||||
# PLATFORM_NAME="${{ matrix.platform.name }}"
|
|
||||||
#
|
|
||||||
# sudo apt install -y zsync desktop-file-utils appstream
|
|
||||||
#
|
|
||||||
# mkdir -p tools
|
|
||||||
# export PATH="$PATH:$(readlink -f tools)"
|
|
||||||
#
|
|
||||||
# # Setup appimagetool
|
|
||||||
# wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
|
||||||
# chmod +x tools/appimagetool
|
|
||||||
# chmod +x distribution/linux/appimage/build-appimage.sh
|
|
||||||
#
|
|
||||||
# # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
|
|
||||||
# if [ "$PLATFORM_NAME" = "linux-x64" ]; then
|
|
||||||
# ARCH_NAME=x64
|
|
||||||
# export ARCH=x86_64
|
|
||||||
# elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
|
|
||||||
# ARCH_NAME=arm64
|
|
||||||
# export ARCH=aarch64
|
|
||||||
# else
|
|
||||||
# echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
|
|
||||||
# exit 1
|
|
||||||
# fi
|
|
||||||
#
|
|
||||||
# export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync"
|
|
||||||
# BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
|
|
||||||
#
|
|
||||||
# pushd publish_appimage
|
|
||||||
# mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
|
|
||||||
# mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
|
|
||||||
# popd
|
|
||||||
#
|
|
||||||
# gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage"
|
|
||||||
# gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
|
|
||||||
# shell: bash
|
|
||||||
|
|
||||||
macos_release:
|
macos_release:
|
||||||
name: Release MacOS universal
|
name: Release MacOS universal
|
||||||
|
@ -40,10 +40,8 @@
|
|||||||
<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />
|
<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />
|
||||||
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" Version="6.1.2-build3" />
|
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" Version="6.1.2-build3" />
|
||||||
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
|
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
|
||||||
<PackageVersion Include="Ryujinx.LibHac" Version="0.21.0-alpha.116" />
|
<PackageVersion Include="Ryujinx.LibHac" Version="0.20.0" />
|
||||||
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
|
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
|
||||||
<PackageVersion Include="Ryujinx.UpdateClient" Version="1.0.29" />
|
|
||||||
<PackageVersion Include="Ryujinx.Systems.Update.Common" Version="1.0.29" />
|
|
||||||
<PackageVersion Include="Gommon" Version="2.7.1.1" />
|
<PackageVersion Include="Gommon" Version="2.7.1.1" />
|
||||||
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
||||||
<PackageVersion Include="Sep" Version="0.6.0" />
|
<PackageVersion Include="Sep" Version="0.6.0" />
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
# Ryujinx
|
# Ryujinx
|
||||||
|
|
||||||
[](https://update.ryujinx.app/latest/stable)
|
[](https://git.ryujinx.app/ryubing/ryujinx/-/releases)
|
||||||
[](https://update.ryujinx.app/latest/canary)
|
[](https://git.ryujinx.app/ryubing/canary/-/releases)
|
||||||
<br>
|
<br>
|
||||||
<a href="https://discord.gg/PEuzjrFXUA">
|
<a href="https://discord.gg/PEuzjrFXUA">
|
||||||
<img src="https://img.shields.io/discord/1294443224030511104?color=5865F2&label=Ryubing&logo=discord&logoColor=white" alt="Discord">
|
<img src="https://img.shields.io/discord/1294443224030511104?color=5865F2&label=Ryubing&logo=discord&logoColor=white" alt="Discord">
|
||||||
|
@ -77,8 +77,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Gene
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
.editorconfig = .editorconfig
|
.editorconfig = .editorconfig
|
||||||
@ -86,9 +84,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||||||
.github\workflows\canary.yml = .github\workflows\canary.yml
|
.github\workflows\canary.yml = .github\workflows\canary.yml
|
||||||
Directory.Packages.props = Directory.Packages.props
|
Directory.Packages.props = Directory.Packages.props
|
||||||
.github\workflows\release.yml = .github\workflows\release.yml
|
.github\workflows\release.yml = .github\workflows\release.yml
|
||||||
nuget.config = nuget.config
|
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
2971
assets/locales.json
2971
assets/locales.json
File diff suppressed because it is too large
Load Diff
@ -188,8 +188,6 @@
|
|||||||
01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27
|
01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27
|
||||||
01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18
|
01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18
|
||||||
01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12
|
01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12
|
||||||
01009E8012976000,"AKIBA'S TRIP: Hellbound & Debriefed",,playable,2025-07-30 23:22:47
|
|
||||||
0100D74019A0E000,"AKIBA'S TRIP: Undead & Undressed Director's Cut",,playable,2025-07-31 13:58:42
|
|
||||||
010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35
|
010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35
|
||||||
0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36
|
0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36
|
||||||
010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27
|
010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27
|
||||||
@ -1097,7 +1095,6 @@
|
|||||||
0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08
|
0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08
|
||||||
010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14
|
010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14
|
||||||
01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58
|
01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58
|
||||||
010018f01e0a0000,"Eternights",,playable,2025-07-30 12:10:24
|
|
||||||
0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32
|
0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32
|
||||||
010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12
|
010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12
|
||||||
01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30
|
01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30
|
||||||
@ -1243,8 +1240,6 @@
|
|||||||
010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38
|
010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38
|
||||||
010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27
|
010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27
|
||||||
0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24
|
0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24
|
||||||
0100c4e018a24000,"FRONT MISSION 2: Remake",,playable,2025-07-30 12:11:23
|
|
||||||
01007E6019872000,"FRONT MISSION 3: Remake",,playable,2025-07-30 12:12:02
|
|
||||||
0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59
|
0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59
|
||||||
0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36
|
0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36
|
||||||
010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33
|
010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33
|
||||||
@ -1523,7 +1518,6 @@
|
|||||||
010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53
|
010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53
|
||||||
0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15
|
0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15
|
||||||
0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22
|
0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22
|
||||||
010059801B736000,"IronFall: Invasion",,playable,2025-07-30 11:42:30
|
|
||||||
01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57
|
01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57
|
||||||
01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29
|
01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29
|
||||||
0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37
|
0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37
|
||||||
@ -2263,7 +2257,6 @@
|
|||||||
010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00
|
010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00
|
||||||
0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54
|
0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54
|
||||||
010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04
|
010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04
|
||||||
010008c01e742000,"Pokémon Friends",crash;services,menus,2025-07-24 13:32:00
|
|
||||||
01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32
|
01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32
|
||||||
01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22
|
01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22
|
||||||
0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37
|
0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37
|
||||||
@ -2312,7 +2305,6 @@
|
|||||||
010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19
|
010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19
|
||||||
010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45
|
010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45
|
||||||
0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33
|
0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33
|
||||||
0100c3a017834000,"Prodeus",,playable,2025-07-30 12:07:52
|
|
||||||
0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12
|
0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12
|
||||||
0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43
|
0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43
|
||||||
01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27
|
01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27
|
||||||
@ -2444,7 +2436,6 @@
|
|||||||
0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14
|
0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14
|
||||||
01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06
|
01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06
|
||||||
010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02
|
010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02
|
||||||
0100D1801A0F4000,"Risk of Rain Returns",,playable,2025-06-28 04:24:04
|
|
||||||
010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05
|
010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05
|
||||||
0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28
|
0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28
|
||||||
010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47
|
010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47
|
||||||
@ -2755,7 +2746,6 @@
|
|||||||
01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51
|
01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51
|
||||||
010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33
|
010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33
|
||||||
0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05
|
0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05
|
||||||
0100E1D01EB2E000,"Squeakross: Home Squeak Home",,playable,2025-06-16 02:02:00
|
|
||||||
010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08
|
010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08
|
||||||
0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32
|
0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32
|
||||||
0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16
|
0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16
|
||||||
@ -2775,7 +2765,7 @@
|
|||||||
0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51
|
0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51
|
||||||
01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19
|
01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19
|
||||||
0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19
|
0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19
|
||||||
01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",,playable,2025-07-30 12:09:37
|
01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11
|
||||||
010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43
|
010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43
|
||||||
01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55
|
01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55
|
||||||
010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05
|
010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05
|
||||||
@ -2983,7 +2973,6 @@
|
|||||||
0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28
|
0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28
|
||||||
01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35
|
01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35
|
||||||
0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06
|
0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06
|
||||||
0100BA5013E52000,"The Falconeer: Warrior Edition",,playable,2025-07-30 12:04:50
|
|
||||||
01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16
|
01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16
|
||||||
01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08
|
01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08
|
||||||
0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39
|
0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39
|
||||||
@ -3027,7 +3016,6 @@
|
|||||||
01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32
|
01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32
|
||||||
0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05
|
0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05
|
||||||
01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07
|
01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07
|
||||||
01009C901ACEE000,"The Legend of Nayuta: Boundless Trails",,ingame,2025-06-12 15:47
|
|
||||||
01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01
|
01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01
|
||||||
0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58
|
0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58
|
||||||
01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46
|
01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46
|
||||||
@ -3206,7 +3194,6 @@
|
|||||||
010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05
|
010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05
|
||||||
0100752011628000,"TTV2",,playable,2020-11-27 13:21:36
|
0100752011628000,"TTV2",,playable,2020-11-27 13:21:36
|
||||||
0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20
|
0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20
|
||||||
0100D1A01D7BA000,"Turbo Overkill",,playable,2025-07-30 12:08:57
|
|
||||||
010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24
|
010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24
|
||||||
0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05
|
0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05
|
||||||
010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56
|
010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56
|
||||||
@ -3230,8 +3217,6 @@
|
|||||||
0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56
|
0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56
|
||||||
01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45
|
01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45
|
||||||
010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18
|
010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18
|
||||||
01009B700D0B8000,"Undead Horde",,playable,2025-07-30 12:05:05
|
|
||||||
0100FC301A878000,"Undead Horde 2: Necropolis",,playable,2025-07-30 12:06:07
|
|
||||||
01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58
|
01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58
|
||||||
010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46
|
010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46
|
||||||
01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00
|
01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00
|
||||||
|
|
16
nuget.config
16
nuget.config
@ -5,21 +5,7 @@
|
|||||||
<clear />
|
<clear />
|
||||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||||
<!-- Only needed when using pre-release versions of Ryujinx.LibHac. -->
|
<!-- Only needed when using pre-release versions of Ryujinx.LibHac. -->
|
||||||
<add key="LibHacAlpha" value="https://git.ryujinx.app/api/v4/projects/17/packages/nuget/index.json" />
|
<!--<add key="LibHacAlpha" value="https://git.ryujinx.app/api/v4/projects/17/packages/nuget/index.json" />-->
|
||||||
<add key="Ryujinx.UpdateClient" value="https://git.ryujinx.app/api/v4/projects/71/packages/nuget/index.json" />
|
<add key="Ryujinx.UpdateClient" value="https://git.ryujinx.app/api/v4/projects/71/packages/nuget/index.json" />
|
||||||
</packageSources>
|
</packageSources>
|
||||||
<packageSourceMapping>
|
|
||||||
<!-- key value for <packageSource> should match key values from <packageSources> element -->
|
|
||||||
<!-- These are defined and .NET still yells about multiple package sources with no mappings. Not sure what to do, this is in the docs lol -->
|
|
||||||
<packageSource key="nuget.org">
|
|
||||||
<package pattern="*" />
|
|
||||||
</packageSource>
|
|
||||||
<packageSource key="Ryujinx.UpdateClient">
|
|
||||||
<package pattern="Ryujinx.UpdateClient" />
|
|
||||||
<package pattern="Ryujinx.Systems.Update.Common" />
|
|
||||||
</packageSource>
|
|
||||||
<packageSource key="LibHacAlpha">
|
|
||||||
<package pattern="Ryujinx.LibHac" />
|
|
||||||
</packageSource>
|
|
||||||
</packageSourceMapping>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -33,7 +33,7 @@ namespace Ryujinx.BuildValidationTasks
|
|||||||
LocalesJson json;
|
LocalesJson json;
|
||||||
|
|
||||||
if (isGitRunner && data.Contains("\r\n"))
|
if (isGitRunner && data.Contains("\r\n"))
|
||||||
throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, rebuild locally to fix...");
|
throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix...");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -86,7 +86,7 @@ namespace Ryujinx.BuildValidationTasks
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isGitRunner && encounteredIssue)
|
if (isGitRunner && encounteredIssue)
|
||||||
throw new JsonException("1 or more locales are invalid! Rebuild locally to fix...");
|
throw new JsonException("1 or more locales are invalid!");
|
||||||
|
|
||||||
string jsonString = JsonSerializer.Serialize(json, _jsonOptions);
|
string jsonString = JsonSerializer.Serialize(json, _jsonOptions);
|
||||||
|
|
||||||
@ -102,7 +102,6 @@ namespace Ryujinx.BuildValidationTasks
|
|||||||
|
|
||||||
struct LocalesJson
|
struct LocalesJson
|
||||||
{
|
{
|
||||||
public Dictionary<string, string> Info { get; set; }
|
|
||||||
public List<string> Languages { get; set; }
|
public List<string> Languages { get; set; }
|
||||||
public List<LocalesEntry> Locales { get; set; }
|
public List<LocalesEntry> Locales { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -10,18 +10,8 @@
|
|||||||
<Exec WorkingDirectory="$(ProjectDir)bin\Debug\$(TargetFramework)\"
|
<Exec WorkingDirectory="$(ProjectDir)bin\Debug\$(TargetFramework)\"
|
||||||
Command="dotnet Ryujinx.BuildValidationTasks.dll "$(ProjectDir)..\..\\""
|
Command="dotnet Ryujinx.BuildValidationTasks.dll "$(ProjectDir)..\..\\""
|
||||||
ConsoleToMsBuild="true"
|
ConsoleToMsBuild="true"
|
||||||
Condition="'$(RuntimeIdentifier)' == ''"
|
Condition="'$(RuntimeIdentifier)' == ''"
|
||||||
IgnoreExitCode="true">
|
/>
|
||||||
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
|
|
||||||
<Output TaskParameter="ExitCode" PropertyName="BuildExitCode"/>
|
|
||||||
</Exec>
|
|
||||||
|
|
||||||
<PropertyGroup Condition=" '$(OutputOfExec.IndexOf(Unhandled exception))' != '-1'">
|
|
||||||
<ErrorOutput>$(OutputOfExec.Substring($(OutputOfExec.IndexOf("Unhandled exception"))))</ErrorOutput>
|
|
||||||
<ErrorOutput>$(ErrorOutput.Substring(0, $(ErrorOutput.IndexOf(';'))))</ErrorOutput>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Error Text="$(ErrorOutput)" Condition=" '$(BuildExitCode)' != '0'"/>
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
@ -93,7 +93,6 @@ namespace Ryujinx.Common
|
|||||||
//The Pokémon Franchise
|
//The Pokémon Franchise
|
||||||
"0100f4300bf2c000", // New Pokémon Snap
|
"0100f4300bf2c000", // New Pokémon Snap
|
||||||
"0100000011d90000", // Pokémon Brilliant Diamond
|
"0100000011d90000", // Pokémon Brilliant Diamond
|
||||||
"010008c01e742000", // Pokémon Friends
|
|
||||||
"01001f5010dfa000", // Pokémon Legends: Arceus
|
"01001f5010dfa000", // Pokémon Legends: Arceus
|
||||||
"01003d200baa2000", // Pokémon Mystery Dungeon - Rescue Team DX
|
"01003d200baa2000", // Pokémon Mystery Dungeon - Rescue Team DX
|
||||||
"0100a3d008c5c000", // Pokémon Scarlet
|
"0100a3d008c5c000", // Pokémon Scarlet
|
||||||
@ -196,7 +195,6 @@ namespace Ryujinx.Common
|
|||||||
"01008d100d43e000", // Saints Row IV
|
"01008d100d43e000", // Saints Row IV
|
||||||
"0100de600beee000", // Saints Row: The Third - The Full Package
|
"0100de600beee000", // Saints Row: The Third - The Full Package
|
||||||
"01001180021fa000", // Shovel Knight: Specter of Torment
|
"01001180021fa000", // Shovel Knight: Specter of Torment
|
||||||
"0100e1D01eb2e000", // Squeakross: Home Squeak Home
|
|
||||||
"0100e65002bb8000", // Stardew Valley
|
"0100e65002bb8000", // Stardew Valley
|
||||||
"0100d7a01b7a2000", // Star Wars: Bounty Hunter
|
"0100d7a01b7a2000", // Star Wars: Bounty Hunter
|
||||||
"0100800015926000", // Suika Game
|
"0100800015926000", // Suika Game
|
||||||
|
@ -21,21 +21,6 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandCmif(3)] // 20.0.0+
|
|
||||||
// CreateLibraryAppletEx(u32, u32, u64) -> object<nn::am::service::ILibraryAppletAccessor>
|
|
||||||
public ResultCode CreateLibraryAppletEx(ServiceCtx context)
|
|
||||||
{
|
|
||||||
AppletId appletId = (AppletId)context.RequestData.ReadInt32();
|
|
||||||
|
|
||||||
_ = context.RequestData.ReadInt32(); // libraryAppletMode
|
|
||||||
|
|
||||||
_ = context.RequestData.ReadUInt64(); // threadId
|
|
||||||
|
|
||||||
MakeObject(context, new ILibraryAppletAccessor(appletId, context.Device.System));
|
|
||||||
|
|
||||||
return ResultCode.Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
[CommandCmif(10)]
|
[CommandCmif(10)]
|
||||||
// CreateStorage(u64) -> object<nn::am::service::IStorage>
|
// CreateStorage(u64) -> object<nn::am::service::IStorage>
|
||||||
public ResultCode CreateStorage(ServiceCtx context)
|
public ResultCode CreateStorage(ServiceCtx context)
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
namespace Ryujinx.Ava.Common.Models.Github
|
||||||
|
{
|
||||||
|
public class GithubReleaseAssetJsonResponse
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string State { get; set; }
|
||||||
|
public string BrowserDownloadUrl { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.Common.Models.Github
|
||||||
|
{
|
||||||
|
public class GithubReleasesJsonResponse
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string TagName { get; set; }
|
||||||
|
public List<GithubReleaseAssetJsonResponse> Assets { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.Common.Models.Github
|
||||||
|
{
|
||||||
|
[JsonSerializable(typeof(GithubReleasesJsonResponse), GenerationMode = JsonSourceGenerationMode.Metadata)]
|
||||||
|
public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext;
|
||||||
|
}
|
@ -65,8 +65,6 @@
|
|||||||
<PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'linux-arm64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
|
<PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'linux-arm64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
|
||||||
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" />
|
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" />
|
||||||
<PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'linux-arm64' AND '$(RuntimeIdentifier)' != 'win-x64' AND '$(RuntimeIdentifier)' != 'win-arm64'" />
|
<PackageReference Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'linux-arm64' AND '$(RuntimeIdentifier)' != 'win-x64' AND '$(RuntimeIdentifier)' != 'win-arm64'" />
|
||||||
<PackageReference Include="Ryujinx.UpdateClient" />
|
|
||||||
<PackageReference Include="Ryujinx.Systems.Update.Common" />
|
|
||||||
<PackageReference Include="securifybv.ShellLink" />
|
<PackageReference Include="securifybv.ShellLink" />
|
||||||
<PackageReference Include="Sep" />
|
<PackageReference Include="Sep" />
|
||||||
<PackageReference Include="Silk.NET.Vulkan" />
|
<PackageReference Include="Silk.NET.Vulkan" />
|
||||||
|
@ -75,7 +75,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
private readonly long _ticksPerFrame;
|
private readonly long _ticksPerFrame;
|
||||||
private readonly Stopwatch _chrono;
|
private readonly Stopwatch _chrono;
|
||||||
private readonly Stopwatch _playTimer;
|
|
||||||
private long _ticks;
|
private long _ticks;
|
||||||
|
|
||||||
private readonly AccountManager _accountManager;
|
private readonly AccountManager _accountManager;
|
||||||
@ -176,7 +175,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
_chrono = new Stopwatch();
|
_chrono = new Stopwatch();
|
||||||
_ticksPerFrame = Stopwatch.Frequency / TargetFps;
|
_ticksPerFrame = Stopwatch.Frequency / TargetFps;
|
||||||
_playTimer = new Stopwatch();
|
|
||||||
|
|
||||||
if (ApplicationPath.StartsWith("@SystemContent"))
|
if (ApplicationPath.StartsWith("@SystemContent"))
|
||||||
{
|
{
|
||||||
@ -567,7 +565,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
_isActive = false;
|
_isActive = false;
|
||||||
_playTimer.Stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Exit()
|
private void Exit()
|
||||||
@ -619,7 +616,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
private void Dispose()
|
private void Dispose()
|
||||||
{
|
{
|
||||||
if (Device.Processes != null)
|
if (Device.Processes != null)
|
||||||
MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText, _playTimer.Elapsed);
|
MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText);
|
||||||
|
|
||||||
ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState;
|
ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState;
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
|
ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
|
||||||
@ -638,7 +635,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
_gpuCancellationTokenSource.Dispose();
|
_gpuCancellationTokenSource.Dispose();
|
||||||
|
|
||||||
_chrono.Stop();
|
_chrono.Stop();
|
||||||
_playTimer.Stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisposeGpu()
|
public void DisposeGpu()
|
||||||
@ -872,7 +868,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
|
ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
|
||||||
appMetadata => appMetadata.UpdatePreGame()
|
appMetadata => appMetadata.UpdatePreGame()
|
||||||
);
|
);
|
||||||
_playTimer.Start();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -882,7 +877,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
Device?.System.TogglePauseEmulation(false);
|
Device?.System.TogglePauseEmulation(false);
|
||||||
|
|
||||||
_viewModel.IsPaused = false;
|
_viewModel.IsPaused = false;
|
||||||
_playTimer.Start();
|
|
||||||
_viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI);
|
_viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI);
|
||||||
Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed");
|
Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed");
|
||||||
}
|
}
|
||||||
@ -892,7 +886,6 @@ namespace Ryujinx.Ava.Systems
|
|||||||
Device?.System.TogglePauseEmulation(true);
|
Device?.System.TogglePauseEmulation(true);
|
||||||
|
|
||||||
_viewModel.IsPaused = true;
|
_viewModel.IsPaused = true;
|
||||||
_playTimer.Stop();
|
|
||||||
_viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI, LocaleManager.Instance[LocaleKeys.Paused]);
|
_viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI, LocaleManager.Instance[LocaleKeys.Paused]);
|
||||||
Logger.Info?.Print(LogClass.Emulation, "Emulation was paused");
|
Logger.Info?.Print(LogClass.Emulation, "Emulation was paused");
|
||||||
}
|
}
|
||||||
|
@ -33,11 +33,19 @@ namespace Ryujinx.Ava.Systems.AppLibrary
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates <see cref="LastPlayed"/> and <see cref="TimePlayed"/>. Call this after a game ends.
|
/// Updates <see cref="LastPlayed"/> and <see cref="TimePlayed"/>. Call this after a game ends.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="playTime">The active gameplay time this past session.</param>
|
public void UpdatePostGame()
|
||||||
public void UpdatePostGame(TimeSpan playTime)
|
|
||||||
{
|
{
|
||||||
|
DateTime? prevLastPlayed = LastPlayed;
|
||||||
UpdatePreGame();
|
UpdatePreGame();
|
||||||
TimePlayed += playTime;
|
|
||||||
|
if (!prevLastPlayed.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeSpan diff = DateTime.UtcNow - prevLastPlayed.Value;
|
||||||
|
double newTotalSeconds = TimePlayed.Add(diff).TotalSeconds;
|
||||||
|
TimePlayed = TimeSpan.FromSeconds(Math.Round(newTotalSeconds, MidpointRounding.AwayFromZero));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,26 +4,42 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Helper;
|
using Ryujinx.Common.Helper;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Systems.Update.Client;
|
|
||||||
using Ryujinx.Systems.Update.Common;
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Net.Http.Json;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.Systems
|
namespace Ryujinx.Ava.Systems
|
||||||
{
|
{
|
||||||
internal static partial class Updater
|
internal static partial class Updater
|
||||||
{
|
{
|
||||||
private static VersionResponse _versionResponse;
|
private static string CreateUpdateQueryUrl()
|
||||||
|
{
|
||||||
|
#pragma warning disable CS8524
|
||||||
|
var os = RunningPlatform.CurrentOS switch
|
||||||
|
#pragma warning restore CS8524
|
||||||
|
{
|
||||||
|
OperatingSystemType.MacOS => "mac",
|
||||||
|
OperatingSystemType.Linux => "linux",
|
||||||
|
OperatingSystemType.Windows => "win"
|
||||||
|
};
|
||||||
|
|
||||||
private static UpdateClient CreateUpdateClient()
|
var arch = RunningPlatform.Architecture switch
|
||||||
=> UpdateClient.Builder()
|
{
|
||||||
.WithServerEndpoint("https://update.ryujinx.app") // This is the default, and doesn't need to be provided; it's here for transparency.
|
Architecture.Arm64 => "arm",
|
||||||
.WithLogger((format, args, caller) =>
|
Architecture.X64 => "amd64",
|
||||||
Logger.Info?.Print(
|
_ => null
|
||||||
LogClass.Application,
|
};
|
||||||
args.Length is 0 ? format : format.Format(args),
|
|
||||||
caller: caller)
|
if (arch is null)
|
||||||
);
|
return null;
|
||||||
|
|
||||||
|
var rc = ReleaseInformation.IsCanaryBuild ? "canary" : "stable";
|
||||||
|
|
||||||
|
return $"https://update.ryujinx.app/latest/query?os={os}&arch={arch}&rc={rc}";
|
||||||
|
}
|
||||||
|
|
||||||
public static async Task<Optional<(Version Current, Version Incoming)>> CheckVersionAsync(bool showVersionUpToDate = false)
|
public static async Task<Optional<(Version Current, Version Incoming)>> CheckVersionAsync(bool showVersionUpToDate = false)
|
||||||
{
|
{
|
||||||
@ -41,31 +57,39 @@ namespace Ryujinx.Ava.Systems
|
|||||||
return default;
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
using UpdateClient updateClient = CreateUpdateClient();
|
if (CreateUpdateQueryUrl() is not {} updateUrl)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application, "Could not determine URL for updates.");
|
||||||
|
|
||||||
|
_running = false;
|
||||||
|
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.Info?.Print(LogClass.Application, $"Checking for updates from {updateUrl}.");
|
||||||
|
|
||||||
|
// Get latest version number from update.ryujinx.app API
|
||||||
|
using HttpClient jsonClient = ConstructHttpClient();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_versionResponse = await updateClient.QueryLatestAsync(ReleaseInformation.IsCanaryBuild
|
UpdaterResponse response =
|
||||||
? ReleaseChannel.Canary
|
await jsonClient.GetFromJsonAsync(updateUrl, UpdaterResponseJsonContext.Default.UpdaterResponse);
|
||||||
: ReleaseChannel.Stable);
|
|
||||||
|
_buildVer = response.Tag;
|
||||||
|
_buildUrl = response.DownloadUrl;
|
||||||
|
_changelogUrlFormat = response.ReleaseUrlFormat;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.Error?.Print(LogClass.Application, $"An error occurred when requesting for updates ({e.GetType().AsFullNamePrettyString()}): {e.Message}");
|
Logger.Error?.Print(LogClass.Application, $"An error occurred when parsing JSON response from API ({e.GetType().AsFullNamePrettyString()}): {e.Message}");
|
||||||
|
|
||||||
_running = false;
|
_running = false;
|
||||||
return default;
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_versionResponse == null)
|
|
||||||
{
|
|
||||||
// logging is done via the UpdateClient library
|
|
||||||
_running = false;
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If build URL not found, assume no new update is available.
|
// If build URL not found, assume no new update is available.
|
||||||
if (_versionResponse.ArtifactUrl is null or "")
|
if (_buildUrl is null or "")
|
||||||
{
|
{
|
||||||
if (showVersionUpToDate)
|
if (showVersionUpToDate)
|
||||||
{
|
{
|
||||||
@ -75,7 +99,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
if (userResult is UserResult.Ok)
|
if (userResult is UserResult.Ok)
|
||||||
{
|
{
|
||||||
OpenHelper.OpenUrl(_versionResponse.ReleaseUrlFormat.Format(currentVersion));
|
OpenHelper.OpenUrl(_changelogUrlFormat.Format(currentVersion));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +111,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!Version.TryParse(_versionResponse.Version, out Version newVersion))
|
if (!Version.TryParse(_buildVer, out Version newVersion))
|
||||||
{
|
{
|
||||||
Logger.Error?.Print(LogClass.Application,
|
Logger.Error?.Print(LogClass.Application,
|
||||||
$"Failed to convert the received {RyujinxApp.FullAppName} version from the update server!");
|
$"Failed to convert the received {RyujinxApp.FullAppName} version from the update server!");
|
||||||
@ -103,5 +127,17 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
return (currentVersion, newVersion);
|
return (currentVersion, newVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JsonSerializable(typeof(UpdaterResponse))]
|
||||||
|
partial class UpdaterResponseJsonContext : JsonSerializerContext;
|
||||||
|
|
||||||
|
public class UpdaterResponse
|
||||||
|
{
|
||||||
|
[JsonPropertyName("tag")] public string Tag { get; set; }
|
||||||
|
[JsonPropertyName("download_url")] public string DownloadUrl { get; set; }
|
||||||
|
[JsonPropertyName("web_url")] public string ReleaseUrl { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore] public string ReleaseUrlFormat => ReleaseUrl.Replace(Tag, "{0}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,13 @@ using ICSharpCode.SharpZipLib.GZip;
|
|||||||
using ICSharpCode.SharpZipLib.Tar;
|
using ICSharpCode.SharpZipLib.Tar;
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
using ICSharpCode.SharpZipLib.Zip;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
|
using Ryujinx.Ava.Common.Models.Github;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.Utilities;
|
using Ryujinx.Ava.Utilities;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Helper;
|
using Ryujinx.Common.Helper;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
|
using Ryujinx.Common.Utilities;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -33,13 +35,17 @@ namespace Ryujinx.Ava.Systems
|
|||||||
private static readonly string _updateDir = Path.Combine(Path.GetTempPath(), "Ryujinx", "update");
|
private static readonly string _updateDir = Path.Combine(Path.GetTempPath(), "Ryujinx", "update");
|
||||||
private static readonly string _updatePublishDir = Path.Combine(_updateDir, "publish");
|
private static readonly string _updatePublishDir = Path.Combine(_updateDir, "publish");
|
||||||
private const int ConnectionCount = 4;
|
private const int ConnectionCount = 4;
|
||||||
|
|
||||||
|
private static string _buildVer;
|
||||||
|
private static string _buildUrl;
|
||||||
private static long _buildSize;
|
private static long _buildSize;
|
||||||
private static bool _updateSuccessful;
|
private static bool _updateSuccessful;
|
||||||
private static bool _running;
|
private static bool _running;
|
||||||
|
|
||||||
private static readonly string[] _windowsDependencyDirs = [];
|
private static readonly string[] _windowsDependencyDirs = [];
|
||||||
|
|
||||||
|
private static string _changelogUrlFormat = null;
|
||||||
|
|
||||||
public static async Task BeginUpdateAsync(bool showVersionUpToDate = false)
|
public static async Task BeginUpdateAsync(bool showVersionUpToDate = false)
|
||||||
{
|
{
|
||||||
if (_running)
|
if (_running)
|
||||||
@ -66,7 +72,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
if (userResult is UserResult.Ok)
|
if (userResult is UserResult.Ok)
|
||||||
{
|
{
|
||||||
OpenHelper.OpenUrl(_versionResponse.ReleaseUrlFormat.Format(currentVersion));
|
OpenHelper.OpenUrl(_changelogUrlFormat.Format(currentVersion));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +92,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
// GitLab instance is located in Ukraine. Connection times will vary across the world.
|
// GitLab instance is located in Ukraine. Connection times will vary across the world.
|
||||||
buildSizeClient.Timeout = TimeSpan.FromSeconds(10);
|
buildSizeClient.Timeout = TimeSpan.FromSeconds(10);
|
||||||
|
|
||||||
HttpResponseMessage message = await buildSizeClient.GetAsync(new Uri(_versionResponse.ArtifactUrl), HttpCompletionOption.ResponseHeadersRead);
|
HttpResponseMessage message = await buildSizeClient.GetAsync(new Uri(_buildUrl), HttpCompletionOption.ResponseHeadersRead);
|
||||||
|
|
||||||
_buildSize = message.Content.Headers.ContentRange.Length.Value;
|
_buildSize = message.Content.Headers.ContentRange.Length.Value;
|
||||||
}
|
}
|
||||||
@ -116,7 +122,7 @@ namespace Ryujinx.Ava.Systems
|
|||||||
switch (shouldUpdate)
|
switch (shouldUpdate)
|
||||||
{
|
{
|
||||||
case UserResult.Yes:
|
case UserResult.Yes:
|
||||||
await UpdateRyujinx(_versionResponse.ArtifactUrl);
|
await UpdateRyujinx(_buildUrl);
|
||||||
break;
|
break;
|
||||||
// Secondary button maps to no, which in this case is the show changelog button.
|
// Secondary button maps to no, which in this case is the show changelog button.
|
||||||
case UserResult.No:
|
case UserResult.No:
|
||||||
|
57
src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml
Executable file → Normal file
57
src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml
Executable file → Normal file
@ -14,7 +14,8 @@
|
|||||||
Command="{Binding ToggleFavorite}"
|
Command="{Binding ToggleFavorite}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuToggleFavorite}"
|
Header="{ext:Locale GameListContextMenuToggleFavorite}"
|
||||||
Icon="{ext:Icon fa-solid fa-star}" />
|
Icon="{ext:Icon fa-solid fa-star}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuToggleFavoriteToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding CreateApplicationShortcut}"
|
Command="{Binding CreateApplicationShortcut}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
@ -40,64 +41,71 @@
|
|||||||
Command="{Binding OpenApplicationCompatibility}"
|
Command="{Binding OpenApplicationCompatibility}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuShowCompatEntry}"
|
Header="{ext:Locale GameListContextMenuShowCompatEntry}"
|
||||||
Icon="{ext:Icon fa-solid fa-database}"
|
Icon="{ext:Icon mdi-gamepad}"
|
||||||
ToolTip.Tip="{ext:Locale GameListContextMenuShowCompatEntryToolTip}"/>
|
ToolTip.Tip="{ext:Locale GameListContextMenuShowCompatEntryToolTip}"/>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenApplicationData}"
|
Command="{Binding OpenApplicationData}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuShowGameData}"
|
Header="{ext:Locale GameListContextMenuShowGameData}"
|
||||||
Icon="{ext:Icon fa-solid fa-chart-line}" />
|
Icon="{ext:Icon mdi-chart-line}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuShowGameDataToolTip}"/>
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenUserSaveDirectory}"
|
Command="{Binding OpenUserSaveDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuOpenUserSaveDirectory}"
|
Header="{ext:Locale GameListContextMenuOpenUserSaveDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-sd-card}"
|
Icon="{ext:Icon mdi-folder-account}"
|
||||||
IsEnabled="{Binding OpenUserSaveDirectoryEnabled}" />
|
IsEnabled="{Binding OpenUserSaveDirectoryEnabled}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuOpenUserSaveDirectoryToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenDeviceSaveDirectory}"
|
Command="{Binding OpenDeviceSaveDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuOpenDeviceSaveDirectory}"
|
Header="{ext:Locale GameListContextMenuOpenDeviceSaveDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-hard-drive}"
|
IsEnabled="{Binding OpenDeviceSaveDirectoryEnabled}"
|
||||||
IsEnabled="{Binding OpenDeviceSaveDirectoryEnabled}" />
|
ToolTip.Tip="{ext:Locale GameListContextMenuOpenDeviceSaveDirectoryToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenBcatSaveDirectory}"
|
Command="{Binding OpenBcatSaveDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuOpenBcatSaveDirectory}"
|
Header="{ext:Locale GameListContextMenuOpenBcatSaveDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-box-archive}"
|
IsEnabled="{Binding OpenBcatSaveDirectoryEnabled}"
|
||||||
IsEnabled="{Binding OpenBcatSaveDirectoryEnabled}" />
|
ToolTip.Tip="{ext:Locale GameListContextMenuOpenBcatSaveDirectoryToolTip}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenTitleUpdateManager}"
|
Command="{Binding OpenTitleUpdateManager}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuManageTitleUpdates}"
|
Header="{ext:Locale GameListContextMenuManageTitleUpdates}"
|
||||||
Icon="{ext:Icon fa-solid fa-code-compare}" />
|
Icon="{ext:Icon fa-solid fa-code-compare}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuManageTitleUpdatesToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenDownloadableContentManager}"
|
Command="{Binding OpenDownloadableContentManager}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuManageDlc}"
|
Header="{ext:Locale GameListContextMenuManageDlc}"
|
||||||
Icon="{ext:Icon fa-solid fa-download}" />
|
Icon="{ext:Icon fa-solid fa-download}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuManageDlcToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenCheatManager}"
|
Command="{Binding OpenCheatManager}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuManageCheat}"
|
Header="{ext:Locale GameListContextMenuManageCheat}"
|
||||||
Icon="{ext:Icon fa-solid fa-code}" />
|
Icon="{ext:Icon fa-solid fa-code}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuManageCheatToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenModManager}"
|
Command="{Binding OpenModManager}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuManageMod}"
|
Header="{ext:Locale GameListContextMenuManageMod}"
|
||||||
Icon="{ext:Icon fa-solid fa-sliders}" />
|
Icon="{ext:Icon mdi-view-module}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuManageModToolTip}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenModsDirectory}"
|
Command="{Binding OpenModsDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuOpenModsDirectory}"
|
Header="{ext:Locale GameListContextMenuOpenModsDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
Icon="{ext:Icon mdi-folder-file}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuOpenModsDirectoryToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenSdModsDirectory}"
|
Command="{Binding OpenSdModsDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuOpenSdModsDirectory}"
|
Header="{ext:Locale GameListContextMenuOpenSdModsDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder}"
|
Icon="{ext:Icon mdi-folder-file}"
|
||||||
ToolTip.Tip="{ext:Locale GameListContextMenuOpenSdModsDirectoryToolTip}" />
|
ToolTip.Tip="{ext:Locale GameListContextMenuOpenSdModsDirectoryToolTip}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@ -105,37 +113,40 @@
|
|||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuTrimXCI}"
|
Header="{ext:Locale GameListContextMenuTrimXCI}"
|
||||||
IsEnabled="{Binding TrimXCIEnabled}"
|
IsEnabled="{Binding TrimXCIEnabled}"
|
||||||
Icon="{ext:Icon fa-solid fa-scissors}"
|
|
||||||
ToolTip.Tip="{ext:Locale GameListContextMenuTrimXCIToolTip}" />
|
ToolTip.Tip="{ext:Locale GameListContextMenuTrimXCIToolTip}" />
|
||||||
<MenuItem Header="{ext:Locale GameListContextMenuCacheManagement}" Icon="{ext:Icon fa-solid fa-memory}">
|
<MenuItem Header="{ext:Locale GameListContextMenuCacheManagement}" Icon="{ext:Icon mdi-cached}">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding PurgePtcCache}"
|
Command="{Binding PurgePtcCache}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuCacheManagementPurgePptc}"
|
Header="{ext:Locale GameListContextMenuCacheManagementPurgePptc}"
|
||||||
Icon="{ext:Icon fa-solid fa-arrow-rotate-right}"
|
Icon="{ext:Icon mdi-refresh}"
|
||||||
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementPurgePptcToolTip}" />
|
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementPurgePptcToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding NukePtcCache}"
|
Command="{Binding NukePtcCache}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuCacheManagementNukePptc}"
|
Header="{ext:Locale GameListContextMenuCacheManagementNukePptc}"
|
||||||
Icon="{ext:Icon fa-solid fa-trash-can}" />
|
Icon="{ext:Icon mdi-delete-alert}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementNukePptcToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding PurgeShaderCache}"
|
Command="{Binding PurgeShaderCache}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuCacheManagementPurgeShaderCache}"
|
Header="{ext:Locale GameListContextMenuCacheManagementPurgeShaderCache}"
|
||||||
Icon="{ext:Icon fa-solid fa-trash-can}" />
|
Icon="{ext:Icon mdi-delete-alert}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementPurgeShaderCacheToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenPtcDirectory}"
|
Command="{Binding OpenPtcDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuCacheManagementOpenPptcDirectory}"
|
Header="{ext:Locale GameListContextMenuCacheManagementOpenPptcDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
Icon="{ext:Icon mdi-folder-arrow-up-down}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementOpenPptcDirectoryToolTip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenShaderCacheDirectory}"
|
Command="{Binding OpenShaderCacheDirectory}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
Header="{ext:Locale GameListContextMenuCacheManagementOpenShaderCacheDirectory}"
|
Header="{ext:Locale GameListContextMenuCacheManagementOpenShaderCacheDirectory}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder}" />
|
Icon="{ext:Icon mdi-folder-arrow-up-down}"
|
||||||
|
ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="{ext:Locale GameListContextMenuExtractData}" Icon="{ext:Icon fa-solid fa-file-export}">
|
<MenuItem Header="{ext:Locale GameListContextMenuExtractData}">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding ExtractApplicationExeFs}"
|
Command="{Binding ExtractApplicationExeFs}"
|
||||||
CommandParameter="{Binding}"
|
CommandParameter="{Binding}"
|
||||||
|
@ -310,15 +310,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
private void TotalTimePlayed_Recalculated(Optional<TimeSpan> ts)
|
private void TotalTimePlayed_Recalculated(Optional<TimeSpan> ts)
|
||||||
{
|
{
|
||||||
if (ts.HasValue)
|
|
||||||
{
|
|
||||||
var formattedPlayTime = ValueFormatUtils.FormatTimeSpan(ts.Value);
|
|
||||||
LocaleManager.Instance.SetDynamicValues(LocaleKeys.GameListLabelTotalTimePlayed, formattedPlayTime);
|
|
||||||
ShowTotalTimePlayed = formattedPlayTime != string.Empty;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowTotalTimePlayed = ts.HasValue;
|
ShowTotalTimePlayed = ts.HasValue;
|
||||||
|
|
||||||
|
if (ts.HasValue)
|
||||||
|
LocaleManager.Instance.SetDynamicValues(LocaleKeys.GameListLabelTotalTimePlayed, ValueFormatUtils.FormatTimeSpan(ts.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ShowTotalTimePlayed
|
public bool ShowTotalTimePlayed
|
||||||
@ -339,6 +334,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
_listSelectedApplication = value;
|
_listSelectedApplication = value;
|
||||||
|
|
||||||
if (_listSelectedApplication != null && ListAppContextMenu == null)
|
if (_listSelectedApplication != null && ListAppContextMenu == null)
|
||||||
|
|
||||||
ListAppContextMenu = new ApplicationContextMenu();
|
ListAppContextMenu = new ApplicationContextMenu();
|
||||||
else if (_listSelectedApplication == null && ListAppContextMenu != null)
|
else if (_listSelectedApplication == null && ListAppContextMenu != null)
|
||||||
ListAppContextMenu = null!;
|
ListAppContextMenu = null!;
|
||||||
@ -1692,8 +1688,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
RendererHostControl.Focus();
|
RendererHostControl.Focus();
|
||||||
});
|
});
|
||||||
|
|
||||||
public static void UpdateGameMetadata(string titleId, TimeSpan playTime)
|
public static void UpdateGameMetadata(string titleId)
|
||||||
=> ApplicationLibrary.LoadAndSaveMetaData(titleId, appMetadata => appMetadata.UpdatePostGame(playTime));
|
=> ApplicationLibrary.LoadAndSaveMetaData(titleId, appMetadata => appMetadata.UpdatePostGame());
|
||||||
|
|
||||||
public void RefreshFirmwareStatus()
|
public void RefreshFirmwareStatus()
|
||||||
{
|
{
|
||||||
|
68
src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml
Executable file → Normal file
68
src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml
Executable file → Normal file
@ -32,23 +32,27 @@
|
|||||||
Command="{Binding OpenFile}"
|
Command="{Binding OpenFile}"
|
||||||
Header="{ext:Locale MenuBarFileOpenFromFile}"
|
Header="{ext:Locale MenuBarFileOpenFromFile}"
|
||||||
Icon="{ext:Icon fa-solid fa-file}"
|
Icon="{ext:Icon fa-solid fa-file}"
|
||||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||||
|
ToolTip.Tip="{ext:Locale LoadApplicationFileTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenFolder}"
|
Command="{Binding OpenFolder}"
|
||||||
Header="{ext:Locale MenuBarFileOpenUnpacked}"
|
Header="{ext:Locale MenuBarFileOpenUnpacked}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder-open}"
|
Icon="{ext:Icon fa-solid fa-folder}"
|
||||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||||
|
ToolTip.Tip="{ext:Locale LoadApplicationFolderTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding LoadDlcFromFolder}"
|
Command="{Binding LoadDlcFromFolder}"
|
||||||
Header="{ext:Locale MenuBarFileLoadDlcFromFolder}"
|
Header="{ext:Locale MenuBarFileLoadDlcFromFolder}"
|
||||||
Icon="{ext:Icon fa-solid fa-download}"
|
Icon="{ext:Icon fa-solid fa-download}"
|
||||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||||
|
ToolTip.Tip="{ext:Locale LoadDlcFromFolderTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding LoadTitleUpdatesFromFolder}"
|
Command="{Binding LoadTitleUpdatesFromFolder}"
|
||||||
Header="{ext:Locale MenuBarFileLoadTitleUpdatesFromFolder}"
|
Header="{ext:Locale MenuBarFileLoadTitleUpdatesFromFolder}"
|
||||||
Icon="{ext:Icon fa-solid fa-code-compare}"
|
Icon="{ext:Icon fa-solid fa-code-compare}"
|
||||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||||
<MenuItem Header="{ext:Locale MenuBarFileOpenApplet}" IsEnabled="{Binding IsAppletMenuActive}" Icon="{ext:Icon fa-solid fa-microchip}">
|
ToolTip.Tip="{ext:Locale LoadTitleUpdatesFromFolderTooltip}" />
|
||||||
|
<MenuItem Header="{ext:Locale MenuBarFileOpenApplet}" IsEnabled="{Binding IsAppletMenuActive}" Icon="{ext:Icon mdi-launch}">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="MiiAppletMenuItem"
|
Name="MiiAppletMenuItem"
|
||||||
Header="{ext:Locale MenuBarFileOpenAppletOpenMiiApplet}"
|
Header="{ext:Locale MenuBarFileOpenAppletOpenMiiApplet}"
|
||||||
@ -59,20 +63,21 @@
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenRyujinxFolder}"
|
Command="{Binding OpenRyujinxFolder}"
|
||||||
Header="{ext:Locale MenuBarFileOpenEmuFolder}"
|
Header="{ext:Locale MenuBarFileOpenEmuFolder}"
|
||||||
Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
ToolTip.Tip="{ext:Locale OpenRyujinxFolderTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenScreenshotsFolder}"
|
Command="{Binding OpenScreenshotsFolder}"
|
||||||
Header="{ext:Locale MenuBarFileOpenScreenshotsFolder}"
|
Header="{ext:Locale MenuBarFileOpenScreenshotsFolder}"
|
||||||
Icon="{ext:Icon fa-solid fa-desktop}" />
|
ToolTip.Tip="{ext:Locale OpenScreenshotFolderTooltip}"/>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenLogsFolder}"
|
Command="{Binding OpenLogsFolder}"
|
||||||
Header="{ext:Locale MenuBarFileOpenLogsFolder}"
|
Header="{ext:Locale MenuBarFileOpenLogsFolder}"
|
||||||
Icon="{ext:Icon fa-solid fa-file-lines}" />
|
ToolTip.Tip="{ext:Locale OpenRyujinxLogsTooltip}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="CloseRyujinxMenuItem"
|
Name="CloseRyujinxMenuItem"
|
||||||
Header="{ext:Locale MenuBarFileExit}"
|
Header="{ext:Locale MenuBarFileExit}"
|
||||||
Icon="{ext:Icon fa-solid fa-power-off}" />
|
Icon="{ext:Icon fa-solid fa-xmark}"
|
||||||
|
ToolTip.Tip="{ext:Locale ExitTooltip}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarOptions}">
|
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarOptions}">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@ -128,7 +133,7 @@
|
|||||||
Name="ChangeLanguageMenuItem"
|
Name="ChangeLanguageMenuItem"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
Header="{ext:Locale MenuBarOptionsChangeLanguage}"
|
Header="{ext:Locale MenuBarOptionsChangeLanguage}"
|
||||||
Icon="{ext:Icon fa-solid fa-globe}"
|
Icon="{ext:Icon fa-solid fa-language}"
|
||||||
Classes="withCheckbox">
|
Classes="withCheckbox">
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@ -141,14 +146,16 @@
|
|||||||
Padding="0"
|
Padding="0"
|
||||||
Header="{ext:Locale MenuBarOptionsSettings}"
|
Header="{ext:Locale MenuBarOptionsSettings}"
|
||||||
Icon="{ext:Icon fa-solid fa-gear}"
|
Icon="{ext:Icon fa-solid fa-gear}"
|
||||||
|
ToolTip.Tip="{ext:Locale OpenSettingsTooltip}"
|
||||||
Classes="withCheckbox">
|
Classes="withCheckbox">
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding ManageProfiles}"
|
Command="{Binding ManageProfiles}"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
Header="{ext:Locale MenuBarOptionsManageUserProfiles}"
|
Header="{ext:Locale MenuBarOptionsManageUserProfiles}"
|
||||||
Icon="{ext:Icon fa-solid fa-user}"
|
Icon="{ext:Icon mdi-account}"
|
||||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||||
|
ToolTip.Tip="{ext:Locale OpenProfileManagerTooltip}"
|
||||||
Classes="withCheckbox">
|
Classes="withCheckbox">
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
@ -176,34 +183,35 @@
|
|||||||
Header="{ext:Locale MenuBarOptionsStopEmulation}"
|
Header="{ext:Locale MenuBarOptionsStopEmulation}"
|
||||||
Icon="{ext:Icon fa-solid fa-stop}"
|
Icon="{ext:Icon fa-solid fa-stop}"
|
||||||
InputGesture="Escape"
|
InputGesture="Escape"
|
||||||
IsEnabled="{Binding IsGameRunning}" />
|
IsEnabled="{Binding IsGameRunning}"
|
||||||
<MenuItem Command="{Binding SimulateWakeUpMessage}" Header="{ext:Locale MenuBarOptionsSimulateWakeUpMessage}" Icon="{ext:Icon fa-solid fa-sun}" />
|
ToolTip.Tip="{ext:Locale StopEmulationTooltip}" />
|
||||||
|
<MenuItem Command="{Binding SimulateWakeUpMessage}" Header="{ext:Locale MenuBarOptionsSimulateWakeUpMessage}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenAmiiboWindow}"
|
Command="{Binding OpenAmiiboWindow}"
|
||||||
AttachedToVisualTree="ScanAmiiboMenuItem_AttachedToVisualTree"
|
AttachedToVisualTree="ScanAmiiboMenuItem_AttachedToVisualTree"
|
||||||
Header="{ext:Locale MenuBarActionsScanAmiibo}"
|
Header="{ext:Locale MenuBarActionsScanAmiibo}"
|
||||||
Icon="{ext:Icon fa-solid fa-cube}"
|
Icon="{ext:Icon mdi-cube-scan}"
|
||||||
InputGesture="Ctrl + A"
|
InputGesture="Ctrl + A"
|
||||||
IsEnabled="{Binding IsAmiiboRequested}" />
|
IsEnabled="{Binding IsAmiiboRequested}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding OpenBinFile}"
|
Command="{Binding OpenBinFile}"
|
||||||
AttachedToVisualTree="ScanBinAmiiboMenuItem_AttachedToVisualTree"
|
AttachedToVisualTree="ScanBinAmiiboMenuItem_AttachedToVisualTree"
|
||||||
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
||||||
Icon="{ext:Icon fa-solid fa-cube}"
|
Icon="{ext:Icon mdi-cube-scan}"
|
||||||
IsVisible="{Binding CanScanAmiiboBinaries}"
|
IsVisible="{Binding CanScanAmiiboBinaries}"
|
||||||
InputGesture="Ctrl + B"
|
InputGesture="Ctrl + B"
|
||||||
IsEnabled="{Binding IsAmiiboBinRequested}" />
|
IsEnabled="{Binding IsAmiiboBinRequested}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding TakeScreenshot}"
|
Command="{Binding TakeScreenshot}"
|
||||||
Header="{ext:Locale MenuBarFileToolsTakeScreenshot}"
|
Header="{ext:Locale MenuBarFileToolsTakeScreenshot}"
|
||||||
Icon="{ext:Icon fa-solid fa-camera}"
|
Icon="{ext:Icon mdi-monitor-screenshot}"
|
||||||
InputGesture="{Binding ScreenshotKey}"
|
InputGesture="{Binding ScreenshotKey}"
|
||||||
IsEnabled="{Binding IsGameRunning}" />
|
IsEnabled="{Binding IsGameRunning}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Command="{Binding HideUi}"
|
Command="{Binding HideUi}"
|
||||||
Header="{ext:Locale MenuBarFileToolsHideUi}"
|
Header="{ext:Locale MenuBarFileToolsHideUi}"
|
||||||
Icon="{ext:Icon fa-solid fa-eye-slash}"
|
Icon="{ext:Icon mdi-eye-off}"
|
||||||
InputGesture="{Binding ShowUiKey}"
|
InputGesture="{Binding ShowUiKey}"
|
||||||
IsEnabled="{Binding IsGameRunning}" />
|
IsEnabled="{Binding IsGameRunning}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@ -214,12 +222,12 @@
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarActions}" IsVisible="{Binding EnableNonGameRunningControls}">
|
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarActions}" IsVisible="{Binding EnableNonGameRunningControls}">
|
||||||
<MenuItem Header="{ext:Locale MenuBarActionsInstallKeys}" Icon="{ext:Icon fa-solid fa-key}">
|
<MenuItem Header="{ext:Locale MenuBarActionsInstallKeys}" Icon="{ext:Icon fa-solid fa-key}">
|
||||||
<MenuItem Command="{Binding InstallKeysFromFile}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFile}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
<MenuItem Command="{Binding InstallKeysFromFile}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFile}" Icon="{ext:Icon mdi-file-cog}" />
|
||||||
<MenuItem Command="{Binding InstallKeysFromFolder}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFolder}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
<MenuItem Command="{Binding InstallKeysFromFolder}" Header="{ext:Locale MenuBarFileActionsInstallKeysFromFolder}" Icon="{ext:Icon mdi-folder-cog}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="{ext:Locale MenuBarActionsInstallFirmware}" Icon="{ext:Icon fa-solid fa-floppy-disk}">
|
<MenuItem Header="{ext:Locale MenuBarActionsInstallFirmware}" Icon="{ext:Icon fa-solid fa-download}">
|
||||||
<MenuItem Command="{Binding InstallFirmwareFromFile}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromFile}" Icon="{ext:Icon fa-solid fa-file-code}" />
|
<MenuItem Command="{Binding InstallFirmwareFromFile}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromFile}" Icon="{ext:Icon mdi-file-cog}" />
|
||||||
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromDirectory}" Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale MenuBarActionsInstallFirmwareFromDirectory}" Icon="{ext:Icon mdi-folder-cog}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="{ext:Locale MenuBarActionsManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}">
|
<MenuItem Header="{ext:Locale MenuBarActionsManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}">
|
||||||
<MenuItem Name="InstallFileTypesMenuItem" Header="{ext:Locale MenuBarActionsInstallFileTypes}" IsEnabled="{Binding AreMimeTypesRegistered, Converter={x:Static BoolConverters.Not}}" />
|
<MenuItem Name="InstallFileTypesMenuItem" Header="{ext:Locale MenuBarActionsInstallFileTypes}" IsEnabled="{Binding AreMimeTypesRegistered, Converter={x:Static BoolConverters.Not}}" />
|
||||||
@ -240,34 +248,36 @@
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
Name="AboutWindowMenuItem"
|
Name="AboutWindowMenuItem"
|
||||||
Header="{ext:Locale MenuBarHelpAbout}"
|
Header="{ext:Locale MenuBarHelpAbout}"
|
||||||
Icon="{ext:Icon fa-solid fa-circle-info}" />
|
Icon="{ext:Icon fa-solid fa-circle-info}"
|
||||||
|
ToolTip.Tip="{ext:Locale OpenAboutTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="UpdateMenuItem"
|
Name="UpdateMenuItem"
|
||||||
IsEnabled="{Binding CanUpdate}"
|
IsEnabled="{Binding CanUpdate}"
|
||||||
Header="{ext:Locale MenuBarHelpCheckForUpdates}"
|
Header="{ext:Locale MenuBarHelpCheckForUpdates}"
|
||||||
Icon="{ext:Icon fa-solid fa-rotate}" />
|
Icon="{ext:Icon mdi-update}"
|
||||||
|
ToolTip.Tip="{ext:Locale CheckUpdatesTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="CompatibilityListMenuItem"
|
Name="CompatibilityListMenuItem"
|
||||||
Header="{ext:Locale CompatibilityListOpen}"
|
Header="{ext:Locale CompatibilityListOpen}"
|
||||||
Icon="{ext:Icon fa-solid fa-database}"/>
|
Icon="{ext:Icon mdi-gamepad}"/>
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarHelpFaqAndGuides}" Icon="{ext:Icon fa-solid fa-question}" >
|
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarHelpFaqAndGuides}" Icon="{ext:Icon fa-solid fa-question}" >
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="FaqMenuItem"
|
Name="FaqMenuItem"
|
||||||
Header="{ext:Locale MenuBarHelpFaq}"
|
Header="{ext:Locale MenuBarHelpFaq}"
|
||||||
Icon="{ext:Icon fa-brands fa-gitlab}"
|
Icon="{ext:Icon fa-github}"
|
||||||
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/FAQ-&-Troubleshooting"
|
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/FAQ-&-Troubleshooting"
|
||||||
ToolTip.Tip="{ext:Locale MenuBarHelpFaqTooltip}" />
|
ToolTip.Tip="{ext:Locale MenuBarHelpFaqTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="SetupGuideMenuItem"
|
Name="SetupGuideMenuItem"
|
||||||
Header="{ext:Locale MenuBarHelpSetup}"
|
Header="{ext:Locale MenuBarHelpSetup}"
|
||||||
Icon="{ext:Icon fa-brands fa-gitlab}"
|
Icon="{ext:Icon fa-github}"
|
||||||
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/Setup-&-Configuration-Guide"
|
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/Setup-&-Configuration-Guide"
|
||||||
ToolTip.Tip="{ext:Locale MenuBarHelpSetupTooltip}" />
|
ToolTip.Tip="{ext:Locale MenuBarHelpSetupTooltip}" />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Name="LdnGuideMenuItem"
|
Name="LdnGuideMenuItem"
|
||||||
Header="{ext:Locale MenuBarHelpMultiplayer}"
|
Header="{ext:Locale MenuBarHelpMultiplayer}"
|
||||||
Icon="{ext:Icon fa-brands fa-gitlab}"
|
Icon="{ext:Icon fa-github}"
|
||||||
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/Multiplayer-(LDN-Local-Wireless)-Guide"
|
CommandParameter="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/Multiplayer-(LDN-Local-Wireless)-Guide"
|
||||||
ToolTip.Tip="{ext:Locale MenuBarHelpMultiplayerTooltip}" />
|
ToolTip.Tip="{ext:Locale MenuBarHelpMultiplayerTooltip}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
@ -64,7 +64,6 @@
|
|||||||
MinWidth="200"
|
MinWidth="200"
|
||||||
Height="6"
|
Height="6"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Margin="0, 0, 5, 0"
|
|
||||||
Foreground="{DynamicResource SystemAccentColorLight2}"
|
Foreground="{DynamicResource SystemAccentColorLight2}"
|
||||||
IsVisible="{Binding StatusBarVisible}"
|
IsVisible="{Binding StatusBarVisible}"
|
||||||
Maximum="{Binding StatusBarProgressMaximum}"
|
Maximum="{Binding StatusBarProgressMaximum}"
|
||||||
@ -236,6 +235,7 @@
|
|||||||
Minimum="0"
|
Minimum="0"
|
||||||
SmallChange="0.01"
|
SmallChange="0.01"
|
||||||
TickFrequency="0.05"
|
TickFrequency="0.05"
|
||||||
|
ToolTip.Tip="{ext:Locale AudioVolumeTooltip}"
|
||||||
Value="{Binding Volume}" />
|
Value="{Binding Volume}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Flyout>
|
</Flyout>
|
||||||
|
@ -49,7 +49,8 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
Margin="10,0"
|
Margin="10,0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{ext:Locale IconSize}" />
|
Text="{ext:Locale IconSize}"
|
||||||
|
ToolTip.Tip="{ext:Locale IconSizeTooltip}" />
|
||||||
<controls:SliderScroll
|
<controls:SliderScroll
|
||||||
Width="150"
|
Width="150"
|
||||||
Height="35"
|
Height="35"
|
||||||
@ -60,6 +61,7 @@
|
|||||||
Maximum="4"
|
Maximum="4"
|
||||||
Minimum="1"
|
Minimum="1"
|
||||||
TickFrequency="1"
|
TickFrequency="1"
|
||||||
|
ToolTip.Tip="{ext:Locale IconSizeTooltip}"
|
||||||
Value="{Binding GridSizeScale}" />
|
Value="{Binding GridSizeScale}" />
|
||||||
<CheckBox
|
<CheckBox
|
||||||
Margin="0"
|
Margin="0"
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
Width="250" />
|
Width="250" />
|
||||||
<ComboBox SelectedIndex="{Binding AudioBackend}"
|
<ComboBox SelectedIndex="{Binding AudioBackend}"
|
||||||
Width="350"
|
Width="350"
|
||||||
ToolTip.Tip="{ext:Locale AudioBackendTooltip}"
|
|
||||||
HorizontalContentAlignment="Left">
|
HorizontalContentAlignment="Left">
|
||||||
<ComboBoxItem>
|
<ComboBoxItem>
|
||||||
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendDummy}" />
|
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendDummy}" />
|
||||||
@ -52,8 +51,10 @@
|
|||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
<TextBlock VerticalAlignment="Center"
|
<TextBlock VerticalAlignment="Center"
|
||||||
Text="{ext:Locale SettingsTabSystemAudioVolume}"
|
Text="{ext:Locale SettingsTabSystemAudioVolume}"
|
||||||
|
ToolTip.Tip="{ext:Locale AudioVolumeTooltip}"
|
||||||
Width="250" />
|
Width="250" />
|
||||||
<ui:NumberBox Value="{Binding Volume}"
|
<ui:NumberBox Value="{Binding Volume}"
|
||||||
|
ToolTip.Tip="{ext:Locale AudioVolumeTooltip}"
|
||||||
Width="350"
|
Width="350"
|
||||||
SmallChange="1"
|
SmallChange="1"
|
||||||
LargeChange="10"
|
LargeChange="10"
|
||||||
@ -65,6 +66,7 @@
|
|||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
<controls:SliderScroll Value="{Binding Volume}"
|
<controls:SliderScroll Value="{Binding Volume}"
|
||||||
Margin="250,0,0,0"
|
Margin="250,0,0,0"
|
||||||
|
ToolTip.Tip="{ext:Locale AudioVolumeTooltip}"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Maximum="100"
|
Maximum="100"
|
||||||
SmallChange="1"
|
SmallChange="1"
|
||||||
|
@ -285,10 +285,12 @@
|
|||||||
Spacing="10">
|
Spacing="10">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock VerticalAlignment="Center"
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{ext:Locale ShaderDumpPathTooltip}"
|
||||||
Text="{ext:Locale SettingsTabGraphicsShaderDumpPath}"
|
Text="{ext:Locale SettingsTabGraphicsShaderDumpPath}"
|
||||||
Width="250" />
|
Width="250" />
|
||||||
<TextBox Text="{Binding ShaderDumpPath}"
|
<TextBox Text="{Binding ShaderDumpPath}"
|
||||||
Width="350" />
|
Width="350"
|
||||||
|
ToolTip.Tip="{ext:Locale ShaderDumpPathTooltip}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
Width="250" />
|
Width="250" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
SelectedIndex="{Binding Region}"
|
SelectedIndex="{Binding Region}"
|
||||||
|
ToolTip.Tip="{ext:Locale RegionTooltip}"
|
||||||
HorizontalContentAlignment="Left"
|
HorizontalContentAlignment="Left"
|
||||||
Width="350">
|
Width="350">
|
||||||
<ComboBoxItem>
|
<ComboBoxItem>
|
||||||
@ -71,9 +72,11 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{ext:Locale SettingsTabSystemSystemLanguage}"
|
Text="{ext:Locale SettingsTabSystemSystemLanguage}"
|
||||||
|
ToolTip.Tip="{ext:Locale LanguageTooltip}"
|
||||||
Width="250" />
|
Width="250" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
SelectedIndex="{Binding Language}"
|
SelectedIndex="{Binding Language}"
|
||||||
|
ToolTip.Tip="{ext:Locale LanguageTooltip}"
|
||||||
HorizontalContentAlignment="Left"
|
HorizontalContentAlignment="Left"
|
||||||
Width="350">
|
Width="350">
|
||||||
<ComboBoxItem>
|
<ComboBoxItem>
|
||||||
@ -138,6 +141,7 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{ext:Locale SettingsTabSystemSystemTimeZone}"
|
Text="{ext:Locale SettingsTabSystemSystemTimeZone}"
|
||||||
|
ToolTip.Tip="{ext:Locale TimezoneTooltip}"
|
||||||
Width="250" />
|
Width="250" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Name="TimeZoneBox"
|
Name="TimeZoneBox"
|
||||||
@ -148,6 +152,7 @@
|
|||||||
SelectionChanged="TimeZoneBox_OnSelectionChanged"
|
SelectionChanged="TimeZoneBox_OnSelectionChanged"
|
||||||
Text="{Binding Path=TimeZone, Mode=OneWay}"
|
Text="{Binding Path=TimeZone, Mode=OneWay}"
|
||||||
TextChanged="TimeZoneBox_OnTextChanged"
|
TextChanged="TimeZoneBox_OnTextChanged"
|
||||||
|
ToolTip.Tip="{ext:Locale TimezoneTooltip}"
|
||||||
ValueMemberBinding="{Binding Mode=OneWay, Converter={x:Static helpers:TimeZoneConverter.Instance}}" />
|
ValueMemberBinding="{Binding Mode=OneWay, Converter={x:Static helpers:TimeZoneConverter.Instance}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel
|
<StackPanel
|
||||||
@ -158,11 +163,13 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{ext:Locale SettingsTabSystemSystemTime}"
|
Text="{ext:Locale SettingsTabSystemSystemTime}"
|
||||||
|
ToolTip.Tip="{ext:Locale TimeTooltip}"
|
||||||
Width="250"/>
|
Width="250"/>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
IsEnabled="{Binding !MatchSystemTime}"
|
IsEnabled="{Binding !MatchSystemTime}"
|
||||||
SelectedDate="{Binding CurrentDate}"
|
SelectedDate="{Binding CurrentDate}"
|
||||||
|
ToolTip.Tip="{ext:Locale TimeTooltip}"
|
||||||
Width="350" />
|
Width="350" />
|
||||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@ -176,7 +183,8 @@
|
|||||||
ClockIdentifier="24HourClock"
|
ClockIdentifier="24HourClock"
|
||||||
IsEnabled="{Binding !MatchSystemTime}"
|
IsEnabled="{Binding !MatchSystemTime}"
|
||||||
SelectedTime="{Binding CurrentTime}"
|
SelectedTime="{Binding CurrentTime}"
|
||||||
Width="350" />
|
Width="350"
|
||||||
|
ToolTip.Tip="{ext:Locale TimeTooltip}" />
|
||||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel
|
<StackPanel
|
||||||
@ -281,7 +289,6 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{ext:Locale SettingsTabSystemDramSize}"
|
Text="{ext:Locale SettingsTabSystemDramSize}"
|
||||||
ToolTip.Tip="{ext:Locale DRamTooltip}"
|
|
||||||
Width="250" />
|
Width="250" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
SelectedIndex="{Binding DramSize}"
|
SelectedIndex="{Binding DramSize}"
|
||||||
|
@ -213,13 +213,13 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void Application_Opened(object sender, ApplicationOpenedEventArgs args)
|
public void Application_Opened(object sender, ApplicationOpenedEventArgs args)
|
||||||
{
|
{
|
||||||
if (args.Application != null)
|
if (args.Application != null)
|
||||||
{
|
{
|
||||||
ViewModel.SelectedIcon = args.Application.Icon;
|
ViewModel.SelectedIcon = args.Application.Icon;
|
||||||
|
|
||||||
await ViewModel.LoadApplication(args.Application);
|
ViewModel.LoadApplication(args.Application).Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user