From 0524cf80d4adc60eabbf140d269b58d0e960d86b Mon Sep 17 00:00:00 2001 From: Observer KRypt0n_ Date: Mon, 4 Jul 2022 08:39:37 +0200 Subject: [PATCH] Updated DXVK / wine versions UI, added dynamic data loading --- assets/dxvk.json | 136 +++++ assets/ui/preferences_general.blp | 82 ++- assets/wine.json | 809 +++++++++++++++++++++++++++++ src/lib/dxvk.rs | 22 + src/lib/mod.rs | 1 + src/ui/preferences/general_page.rs | 75 ++- 6 files changed, 1068 insertions(+), 57 deletions(-) create mode 100644 assets/dxvk.json create mode 100644 assets/wine.json create mode 100644 src/lib/dxvk.rs diff --git a/assets/dxvk.json b/assets/dxvk.json new file mode 100644 index 0000000..5a6d64c --- /dev/null +++ b/assets/dxvk.json @@ -0,0 +1,136 @@ +{ + "vanilla": [ + { + "version": "1.10.1", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.10.1/dxvk-1.10.1.tar.gz", + "recommended": true + }, + { + "version": "1.10", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.10/dxvk-1.10.tar.gz", + "recommended": true + }, + { + "version": "1.9.4", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.9.4/dxvk-1.9.4.tar.gz", + "recommended": true + }, + { + "version": "1.9.3", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.9.3/dxvk-1.9.3.tar.gz", + "recommended": true + }, + { + "version": "1.9.2", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.9.2/dxvk-1.9.2.tar.gz", + "recommended": true + }, + { + "version": "1.9.1", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.9.1/dxvk-1.9.1.tar.gz", + "recommended": true + }, + { + "version": "1.9", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.9/dxvk-1.9.tar.gz", + "recommended": true + }, + { + "version": "1.8.1", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.8.1/dxvk-1.8.1.tar.gz", + "recommended": false + }, + { + "version": "1.8", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.8/dxvk-1.8.tar.gz", + "recommended": false + }, + { + "version": "1.7.3", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.7.3/dxvk-1.7.3.tar.gz", + "recommended": false + }, + { + "version": "1.7.2", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.7.2/dxvk-1.7.2.tar.gz", + "recommended": false + }, + { + "version": "1.7.1", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.7.1/dxvk-1.7.1.tar.gz", + "recommended": false + }, + { + "version": "1.7", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.7/dxvk-1.7.tar.gz", + "recommended": false + }, + { + "version": "1.6.1", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.6.1/dxvk-1.6.1.tar.gz", + "recommended": false + }, + { + "version": "1.6", + "uri": "https://github.com/doitsujin/dxvk/releases/download/v1.6/dxvk-1.6.tar.gz", + "recommended": false + } + ], + "async": [ + { + "version": "1.10.1", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.10.1/dxvk-async-1.10.1.tar.gz", + "recommended": true + }, + { + "version": "1.10", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.10/dxvk-async-1.10.tar.gz", + "recommended": true + }, + { + "version": "1.9.4", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.9.4/dxvk-async-1.9.4.tar.gz", + "recommended": true + }, + { + "version": "1.9.3", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.9.3/dxvk-async-1.9.3.tar.gz", + "recommended": true + }, + { + "version": "1.9.2", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.9.4/dxvk-async-1.9.4.tar.gz", + "recommended": true + }, + { + "version": "1.9.1", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.9.1/dxvk-async-1.9.1.tar.gz", + "recommended": true + }, + { + "version": "1.9", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.9/dxvk-async-1.9.tar.gz", + "recommended": true + }, + { + "version": "1.8.1", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.8.1/dxvk-async-1.8.1.tar.gz", + "recommended": false + }, + { + "version": "1.8", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.8.1/dxvk-async-1.8.1.tar.gz", + "recommended": false + }, + { + "version": "1.7.3", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.7.3/dxvk-async-1.7.3.tar.gz", + "recommended": false + }, + { + "version": "1.7.2", + "uri": "https://github.com/Sporif/dxvk-async/releases/download/1.7.2/dxvk-async-1.7.2.tar.gz", + "recommended": false + } + ] +} \ No newline at end of file diff --git a/assets/ui/preferences_general.blp b/assets/ui/preferences_general.blp index 7b38c0e..b5a434a 100644 --- a/assets/ui/preferences_general.blp +++ b/assets/ui/preferences_general.blp @@ -119,6 +119,18 @@ Adw.PreferencesPage general_page { }; } + Adw.ActionRow { + title: "Recommended only"; + subtitle: "Show only recommended wine versions"; + + Gtk.Switch { + valign: center; + state: true; + } + } + } + + Adw.PreferencesGroup { Adw.ExpanderRow { title: "Wine-GE"; @@ -221,61 +233,25 @@ Adw.PreferencesPage general_page { }; } - Adw.ExpanderRow { - title: "Vanilla"; + Adw.ActionRow { + title: "Recommended only"; + subtitle: "Show only recommended DXVK versions"; - Adw.ActionRow { - title: "1.10.1"; - } - - Adw.ActionRow { - title: "1.10"; - } - - Adw.ActionRow { - title: "1.9.4"; - } - - Adw.ActionRow { - title: "1.9.3"; - } - - Adw.ActionRow { - title: "1.9.2"; - } - - Adw.ActionRow { - title: "1.9.1"; - } - } - - Adw.ExpanderRow { - title: "Async"; - subtitle: "This version is not recommended for usage as can lead to anti-cheat detection"; - - Adw.ActionRow { - title: "1.10.1"; - } - - Adw.ActionRow { - title: "1.10"; - } - - Adw.ActionRow { - title: "1.9.4"; - } - - Adw.ActionRow { - title: "1.9.3"; - } - - Adw.ActionRow { - title: "1.9.2"; - } - - Adw.ActionRow { - title: "1.9.1"; + Gtk.Switch dxvk_recommended_only { + valign: center; + state: true; } } } + + Adw.PreferencesGroup { + Adw.ExpanderRow dxvk_vanilla { + title: "Vanilla"; + } + + Adw.ExpanderRow dxvk_async { + title: "Async"; + subtitle: "This version is not recommended for usage as can lead to anti-cheat detection"; + } + } } diff --git a/assets/wine.json b/assets/wine.json new file mode 100644 index 0000000..124c932 --- /dev/null +++ b/assets/wine.json @@ -0,0 +1,809 @@ +[ + { + "title": "Wine-GE-Proton", + "runners": [ + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-16-x86_64", + "title": "Wine-GE-Proton 7-16", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-16/wine-lutris-GE-Proton7-16-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-15-x86_64", + "title": "Wine-GE-Proton 7-15", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-15/wine-lutris-GE-Proton7-15-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-14-x86_64", + "title": "Wine-GE-Proton 7-14", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-14/wine-lutris-GE-Proton7-14-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-12-x86_64", + "title": "Wine-GE-Proton 7-12", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-12/wine-lutris-GE-Proton7-12-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-11-x86_64", + "title": "Wine-GE-Proton 7-11", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-11/wine-lutris-GE-Proton7-11-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-10-x86_64", + "title": "Wine-GE-Proton 7-10", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-10/wine-lutris-GE-Proton7-10-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-9-x86_64", + "title": "Wine-GE-Proton 7-9", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-9/wine-lutris-GE-Proton7-9-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-8-x86_64", + "title": "Wine-GE-Proton 7-8", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-8/wine-lutris-GE-Proton7-8-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-7-x86_64", + "title": "Wine-GE-Proton 7-7", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-7/wine-lutris-GE-Proton7-7-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-6-x86_64", + "title": "Wine-GE-Proton 7-6", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-6/wine-lutris-GE-Proton7-6-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-5-x86_64", + "title": "Wine-GE-Proton 7-5", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-5/wine-lutris-GE-Proton7-5-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-4-x86_64", + "title": "Wine-GE-Proton 7-4", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-4/wine-lutris-GE-Proton7-4-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-3-x86_64", + "title": "Wine-GE-Proton 7-3", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-3/wine-lutris-GE-Proton7-3-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-2-x86_64", + "title": "Wine-GE-Proton 7-2", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-2/wine-lutris-GE-Proton7-2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-GE-Proton7-1-x86_64", + "title": "Wine-GE-Proton 7-1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton7-1/wine-lutris-GE-Proton7-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-7.2-2-x86_64", + "title": "Wine 7.2 GE 2", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/7.2-GE-2/wine-lutris-ge-7.2-2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-7.2-1-x86_64", + "title": "Wine 7.2 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/7.2-GE-1/wine-lutris-ge-7.2-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-7.1-1-x86_64", + "title": "Wine 7.1 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/7.1-GE-1/wine-lutris-ge-7.1-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-6.21-1-x86_64", + "title": "Wine 6.21 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/6.21-GE-1/wine-lutris-ge-6.21-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-6.20-1-x86_64", + "title": "Wine 6.20 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/6.20-GE-1/wine-lutris-ge-6.20-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-6.19-1-x86_64", + "title": "Wine 6.19 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/6.19-GE-1/wine-lutris-ge-6.19-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-6.18-1-x86_64", + "title": "Wine 6.18 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/6.18-GE-1/wine-lutris-ge-6.18-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Wine-GE-Proton", + "name": "lutris-ge-6.16-1-x86_64", + "title": "Wine 6.16 GE 1", + "uri": "https://github.com/GloriousEggroll/wine-ge-custom/releases/download/6.16-GE-1/lutris-ge-6.16-1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + } + ] + }, + { + "title": "GE-Proton", + "runners": [ + { + "family": "GE-Proton", + "name": "GE-Proton7-20", + "title": "GE-Proton 7-20", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-20/GE-Proton7-20.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-19", + "title": "GE-Proton 7-19", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-19/GE-Proton7-19.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-18", + "title": "GE-Proton 7-18", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-18/GE-Proton7-18.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-17", + "title": "GE-Proton 7-17", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-17/GE-Proton7-17.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-16", + "title": "GE-Proton 7-16", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-16/GE-Proton7-16.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-15", + "title": "GE-Proton 7-15", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-15/GE-Proton7-15.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-13", + "title": "GE-Proton 7-13", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-13/GE-Proton7-13.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-10", + "title": "GE-Proton 7-10", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-10/GE-Proton7-10.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-9", + "title": "GE-Proton 7-9", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-9/GE-Proton7-9.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-8", + "title": "GE-Proton 7-8", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-8/GE-Proton7-8.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-7", + "title": "GE-Proton 7-7", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-7/GE-Proton7-7.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-6", + "title": "GE-Proton 7-6", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-6/GE-Proton7-6.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-5", + "title": "GE-Proton 7-5", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-5/GE-Proton7-5.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-4", + "title": "GE-Proton 7-4", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-4/GE-Proton7-4.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-3", + "title": "GE-Proton 7-3", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-3/GE-Proton7-3.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-2", + "title": "GE-Proton 7-2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-2/GE-Proton7-2.tar.gz", + "files": { + "wine": "dist/bin/wine64", + "wineserver": "dist/bin/wineserver", + "winecfg": "dist/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "GE-Proton7-1", + "title": "GE-Proton 7-1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton7-1/GE-Proton7-1.tar.gz", + "files": { + "wine": "dist/bin/wine64", + "wineserver": "dist/bin/wineserver", + "winecfg": "dist/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-7.2-GE-2", + "title": "Proton 7.2 GE 2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/7.2-GE-2/Proton-7.2-GE-2.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-7.2-GE-1", + "title": "Proton 7.2 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/7.2-GE-1/Proton-7.2-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-7.1-GE-2", + "title": "Proton 7.1 GE 2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/7.1-GE-2/Proton-7.1-GE-2.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-7.1-GE-1", + "title": "Proton 7.1 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/7.1-GE-1/Proton-7.1-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.21-GE-2", + "title": "Proton 6.21 GE 2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.21-GE-2/Proton-6.21-GE-2.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.20-GE-1", + "title": "Proton 6.20 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.20-GE-1/Proton-6.20-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.19-GE-2", + "title": "Proton 6.19 GE 2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.19-GE-2/Proton-6.19-GE-2.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.19-GE-1", + "title": "Proton 6.19 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.19-GE-1/Proton-6.19-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.18-GE-2", + "title": "Proton 6.18 GE 2", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.18-GE-2/Proton-6.18-GE-2.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.18-GE-1", + "title": "Proton 6.18 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.18-GE-1/Proton-6.18-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "GE-Proton", + "name": "Proton-6.16-GE-1", + "title": "Proton 6.16 GE 1", + "uri": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.16-GE-1/Proton-6.16-GE-1.tar.gz", + "files": { + "wine": "files/bin/wine64", + "wineserver": "files/bin/wineserver", + "winecfg": "files/lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + } + ] + }, + { + "title": "Lutris", + "runners": [ + { + "family": "Lutris", + "name": "lutris-7.2-x86_64", + "title": "Lutris 7.2", + "uri": "https://github.com/lutris/wine/releases/download/lutris-wine-7.2/wine-lutris-7.2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-7.1-x86_64", + "title": "Lutris 7.1", + "uri": "https://github.com/lutris/wine/releases/download/lutris-7.1/wine-lutris-7.1-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-6.21-6-x86_64", + "title": "Lutris 6.21-6", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21-6/wine-lutris-6.21-6-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-6.21-5-x86_64", + "title": "Lutris 6.21-5", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21-5/wine-lutris-6.21-5-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-6.21-4-x86_64", + "title": "Lutris 6.21-4", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21-4/wine-lutris-6.21-4-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.21-3-x86_64", + "title": "Lutris 6.21-3", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21-3/wine-lutris-6.21-3-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.21-2-x86_64", + "title": "Lutris 6.21-2", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21-2/wine-lutris-6.21-2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.21-x86_64", + "title": "Lutris 6.21", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.21/wine-lutris-6.21-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.14-4-x86_64", + "title": "Lutris 6.14-4", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.14-4/wine-lutris-6.14-4-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-6.14-3-x86_64", + "title": "Lutris 6.14-3", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.14-3/wine-lutris-6.14-3-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": true + }, + { + "family": "Lutris", + "name": "lutris-6.14-2-x86_64", + "title": "Lutris 6.14-2", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.14-2/wine-lutris-6.14-2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.14-x86_64", + "title": "Lutris 6.14", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.14/wine-lutris-6.14-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.13-3-x86_64", + "title": "Lutris 6.13-3", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.13-3/wine-lutris-6.13-3-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.13-2-x86_64", + "title": "Lutris 6.13-2", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.13-2/wine-lutris-6.13-2-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + }, + { + "family": "Lutris", + "name": "lutris-6.13-x86_64", + "title": "Lutris 6.13", + "uri": "https://github.com/lutris/wine/releases/download/lutris-6.13/wine-lutris-6.13-x86_64.tar.xz", + "files": { + "wine": "bin/wine64", + "wineserver": "bin/wineserver", + "winecfg": "lib64/wine/x86_64-windows/winecfg.exe" + }, + "recommended": false + } + ] + } +] \ No newline at end of file diff --git a/src/lib/dxvk.rs b/src/lib/dxvk.rs new file mode 100644 index 0000000..234bf9d --- /dev/null +++ b/src/lib/dxvk.rs @@ -0,0 +1,22 @@ +use serde::{Serialize, Deserialize}; + +const LIST: &str = include_str!("../../assets/dxvk.json"); + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct List { + pub vanilla: Vec, + pub r#async: Vec +} + +impl List { + pub fn get() -> Result { + Ok(serde_json::from_str(LIST)?) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Version { + pub version: String, + pub uri: String, + pub recommended: bool +} diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 2608f2c..284e078 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,3 +1,4 @@ pub mod consts; pub mod config; pub mod game; +pub mod dxvk; diff --git a/src/ui/preferences/general_page.rs b/src/ui/preferences/general_page.rs index 2e41cc3..3f6e445 100644 --- a/src/ui/preferences/general_page.rs +++ b/src/ui/preferences/general_page.rs @@ -7,24 +7,89 @@ use anime_game_core::prelude::*; use crate::ui::get_object; use crate::lib::config; +use crate::lib::dxvk; #[derive(Clone)] pub struct Page { pub page: adw::PreferencesPage, pub game_version: gtk::Label, - pub patch_version: gtk::Label + pub patch_version: gtk::Label, + + pub dxvk_recommended_only: gtk::Switch, + pub dxvk_vanilla: adw::ExpanderRow, + pub dxvk_async: adw::ExpanderRow } impl Page { pub fn new() -> Result { let builder = gtk::Builder::from_string(include_str!("../../../assets/ui/.dist/preferences_general.ui")); - Ok(Self { + let result = Self { page: get_object(&builder, "general_page")?, + game_version: get_object(&builder, "game_version")?, - patch_version: get_object(&builder, "patch_version")? - }) + patch_version: get_object(&builder, "patch_version")?, + + dxvk_recommended_only: get_object(&builder, "dxvk_recommended_only")?, + dxvk_vanilla: get_object(&builder, "dxvk_vanilla")?, + dxvk_async: get_object(&builder, "dxvk_async")? + }; + + // Update DXVK list + let list = match dxvk::List::get() { + Ok(list) => list, + Err(err) => return Err(err.to_string()) + }; + + let mut components = Vec::new(); + + for version in list.vanilla { + let row = adw::ActionRow::new(); + let button = gtk::Button::new(); + + row.set_title(&version.version); + row.set_visible(version.recommended); + + button.set_icon_name("document-save-symbolic"); + button.set_valign(gtk::Align::Center); + button.add_css_class("flat"); + + row.add_suffix(&button); + + result.dxvk_vanilla.add_row(&row); + components.push((row, version)); + } + + for version in list.r#async { + let row = adw::ActionRow::new(); + let button = gtk::Button::new(); + + row.set_title(&version.version); + row.set_visible(version.recommended); + + button.set_icon_name("document-save-symbolic"); + button.set_valign(gtk::Align::Center); + button.add_css_class("flat"); + + row.add_suffix(&button); + + result.dxvk_async.add_row(&row); + components.push((row, version)); + } + + // Set DXVK recommended only switcher event + result.dxvk_recommended_only.connect_state_notify(move |switcher| { + for (component, version) in &components { + component.set_visible(if switcher.state() { + version.recommended + } else { + true + }); + } + }); + + Ok(result) } pub fn title() -> String { @@ -39,6 +104,7 @@ impl Page { self.game_version.set_tooltip_text(None); self.patch_version.set_tooltip_text(None); + // Update game version status_page.set_description(Some("Updating game info...")); match game.try_get_diff()? { @@ -63,6 +129,7 @@ impl Page { } } + // Update patch version status_page.set_description(Some("Updating patch info...")); match Patch::try_fetch(config.patch.servers)? {