Browse Source
[qt] nuke game compat list (again) (#4201)
[qt] nuke game compat list (again) (#4201)
we have no use for it it's dead code most of the time users just complain about how the list isn't updated ok so what if we update it? great now its more noise added to the git, awesome even if we constantly update it, we introduce new breakage that makes keeping track of things extremely difficult either we integrate with emuready (would violate self containment principles) or we integrate with emuready in a similar fashion to eden news outlet (where we cache the list with some TTL of like 60 mins or whatever) that would be better respecting of "self containment" but would probably require having a quick way to update the list additively, probably filtered to the user's device instead of a global thing, and i dont think emuready has that granularity nor we have the "connect this to that" for the api stuffs another (which is what i propose here) is throw everything out of the window until someone can come up with something better Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4201 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>pull/4202/head
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
19 changed files with 4 additions and 1199 deletions
-
5.reuse/dep5
-
19CMakeLists.txt
-
354dist/compatibility_list/compatibility_list.json
-
5dist/compatibility_list/compatibility_list.qrc
-
50src/qt_common/game_list/model.cpp
-
6src/qt_common/game_list/model.h
-
15src/qt_common/game_list/worker.cpp
-
3src/qt_common/game_list/worker.h
-
13src/yuzu/CMakeLists.txt
-
206src/yuzu/compatdb.cpp
-
40src/yuzu/compatdb.h
-
398src/yuzu/compatdb.ui
-
17src/yuzu/compatibility_list.cpp
-
19src/yuzu/compatibility_list.h
-
12src/yuzu/game/game_list.cpp
-
4src/yuzu/game/game_list.h
-
11src/yuzu/main.ui
-
23src/yuzu/main_window.cpp
-
3src/yuzu/main_window.h
@ -1,354 +0,0 @@ |
|||
[ |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "the-legend-of-zelda-breath-of-the-wild", |
|||
"releases": [ |
|||
{"id": "01007EF00011E000"} |
|||
], |
|||
"title": "The Legend of Zelda: Breath of the Wild" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-mario-odyssey", |
|||
"releases": [ |
|||
{"id": "0100000000010000"} |
|||
], |
|||
"title": "Super Mario Odyssey" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "animal-crossing-new-horizons", |
|||
"releases": [ |
|||
{"id": "01006F8002326000"} |
|||
], |
|||
"title": "Animal Crossing: New Horizons" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-legends-z-a", |
|||
"releases": [ |
|||
{"id": "0100F43008C44000"} |
|||
], |
|||
"title": "Pokémon Legends: Z-A" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "the-legend-of-zelda-tears-of-the-kingdom", |
|||
"releases": [ |
|||
{"id": "0100F2C0115B6000"} |
|||
], |
|||
"title": "The Legend of Zelda: Tears of the Kingdom" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "super-mario-galaxy", |
|||
"releases": [ |
|||
{"id": "010099C022B96000"} |
|||
], |
|||
"title": "Super Mario Galaxy" |
|||
}, |
|||
{ |
|||
"compatibility": 3, |
|||
"directory": "star-wars-republic-commando", |
|||
"releases": [ |
|||
{"id": "0100FA10115F8000"} |
|||
], |
|||
"title": "Star Wars: Republic Commando" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "doki-doki-literature-club-plus", |
|||
"releases": [ |
|||
{"id": "010086901543E000"} |
|||
], |
|||
"title": "Doki Doki Literature Club Plus" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-scarlet", |
|||
"releases": [ |
|||
{"id": "0100A3D008C5C000"} |
|||
], |
|||
"title": "Pokémon Scarlet" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-violet", |
|||
"releases": [ |
|||
{"id": "01008F6008C5E000"} |
|||
], |
|||
"title": "Pokémon Violet" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-legends-arceus", |
|||
"releases": [ |
|||
{"id": "01001E300D162000"} |
|||
], |
|||
"title": "Pokémon Legends: Arceus" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "splatoon-2", |
|||
"releases": [ |
|||
{"id": "01003BC0000A0000"} |
|||
], |
|||
"title": "Splatoon 2" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-smash-bros-ultimate", |
|||
"releases": [ |
|||
{"id": "01006A800016E000"} |
|||
], |
|||
"title": "Super Smash Bros. Ultimate" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "mario-kart-8-deluxe", |
|||
"releases": [ |
|||
{"id": "0100152000022000"} |
|||
], |
|||
"title": "Mario Kart 8 Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "splatoon-3", |
|||
"releases": [ |
|||
{"id": "0100C2500FC20000"} |
|||
], |
|||
"title": "Splatoon 3" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "new-super-mario-bros-u-deluxe", |
|||
"releases": [ |
|||
{"id": "0100EA80032EA000"} |
|||
], |
|||
"title": "New Super Mario Bros. U Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "hyrule-warriors-age-of-calamity", |
|||
"releases": [ |
|||
{"id": "01002B00111A2000"} |
|||
], |
|||
"title": "Hyrule Warriors: Age of Calamity" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "luigis-mansion-3", |
|||
"releases": [ |
|||
{"id": "0100DCA0064A6000"} |
|||
], |
|||
"title": "Luigi's Mansion 3" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-brilliant-diamond", |
|||
"releases": [ |
|||
{"id": "0100000011D90000"} |
|||
], |
|||
"title": "Pokémon Brilliant Diamond" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-shining-pearl", |
|||
"releases": [ |
|||
{"id": "010018E011D92000"} |
|||
], |
|||
"title": "Pokémon Shining Pearl" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-mario-3d-world-bowsers-fury", |
|||
"releases": [ |
|||
{"id": "010028600EBDA000"} |
|||
], |
|||
"title": "Super Mario 3D World + Bowser's Fury" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "the-legend-of-zelda-links-awakening", |
|||
"releases": [ |
|||
{"id": "01006BB00C6F0000"} |
|||
], |
|||
"title": "The Legend of Zelda: Link's Awakening" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "fire-emblem-three-houses", |
|||
"releases": [ |
|||
{"id": "010055D009F78000"} |
|||
], |
|||
"title": "Fire Emblem: Three Houses" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "metroid-dread", |
|||
"releases": [ |
|||
{"id": "010093801237C000"} |
|||
], |
|||
"title": "Metroid Dread" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "paper-mario-the-origami-king", |
|||
"releases": [ |
|||
{"id": "0100A3900C3E2000"} |
|||
], |
|||
"title": "Paper Mario: The Origami King" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "xenoblade-chronicles-definitive-edition", |
|||
"releases": [ |
|||
{"id": "0100FF500E34A000"} |
|||
], |
|||
"title": "Xenoblade Chronicles: Definitive Edition" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "xenoblade-chronicles-3", |
|||
"releases": [ |
|||
{"id": "010074F013262000"} |
|||
], |
|||
"title": "Xenoblade Chronicles 3" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pikmin-3-deluxe", |
|||
"releases": [ |
|||
{"id": "0100F8600D4B0000"} |
|||
], |
|||
"title": "Pikmin 3 Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "donkey-kong-country-tropical-freeze", |
|||
"releases": [ |
|||
{"id": "0100C1F0054B6000"} |
|||
], |
|||
"title": "Donkey Kong Country: Tropical Freeze" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "kirby-and-the-forgotten-land", |
|||
"releases": [ |
|||
{"id": "01004D300C5AE000"} |
|||
], |
|||
"title": "Kirby and the Forgotten Land" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "mario-party-superstars", |
|||
"releases": [ |
|||
{"id": "01006B400D8B2000"} |
|||
], |
|||
"title": "Mario Party Superstars" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "clubhouse-games-51-worldwide-classics", |
|||
"releases": [ |
|||
{"id": "0100F8600D4B0000"} |
|||
], |
|||
"title": "Clubhouse Games: 51 Worldwide Classics" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "ring-fit-adventure", |
|||
"releases": [ |
|||
{"id": "01006B300BAF8000"} |
|||
], |
|||
"title": "Ring Fit Adventure" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "arms", |
|||
"releases": [ |
|||
{"id": "01009B500007C000"} |
|||
], |
|||
"title": "ARMS" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "super-mario-maker-2", |
|||
"releases": [ |
|||
{"id": "01009B90006DC000"} |
|||
], |
|||
"title": "Super Mario Maker 2" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "pokemon-lets-go-pikachu", |
|||
"releases": [ |
|||
{"id": "010003F003A34000"} |
|||
], |
|||
"title": "Pokémon: Let's Go, Pikachu!" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-lets-go-eevee", |
|||
"releases": [ |
|||
{"id": "0100187003A36000"} |
|||
], |
|||
"title": "Pokémon: Let's Go, Eevee!" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-sword", |
|||
"releases": [ |
|||
{"id": "0100ABF008968000"} |
|||
], |
|||
"title": "Pokémon Sword" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-shield", |
|||
"releases": [ |
|||
{"id": "01008DB008C2C000"} |
|||
], |
|||
"title": "Pokémon Shield" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "new-pokemon-snap", |
|||
"releases": [ |
|||
{"id": "0100F4300C182000"} |
|||
], |
|||
"title": "New Pokémon Snap" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "mario-golf-super-rush", |
|||
"releases": [ |
|||
{"id": "0100C9C00E25C000"} |
|||
], |
|||
"title": "Mario Golf: Super Rush" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "mario-tennis-aces", |
|||
"releases": [ |
|||
{"id": "0100BDE00862A000"} |
|||
], |
|||
"title": "Mario Tennis Aces" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "wario-ware-get-it-together", |
|||
"releases": [ |
|||
{"id": "0100563010F22000"} |
|||
], |
|||
"title": "WarioWare: Get It Together!" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "big-brain-academy-brain-vs-brain", |
|||
"releases": [ |
|||
{"id": "0100190010F24000"} |
|||
], |
|||
"title": "Big Brain Academy: Brain vs. Brain" |
|||
} |
|||
] |
|||
@ -1,5 +0,0 @@ |
|||
<RCC> |
|||
<qresource prefix="compatibility_list"> |
|||
<file>compatibility_list.json</file> |
|||
</qresource> |
|||
</RCC> |
|||
@ -1,206 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: 2017 Citra Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include <QButtonGroup>
|
|||
#include <QMessageBox>
|
|||
#include <QPushButton>
|
|||
#include <qtconcurrentrun.h>
|
|||
#include "common/logging.h"
|
|||
#include "ui_compatdb.h"
|
|||
#include "yuzu/compatdb.h"
|
|||
|
|||
CompatDB::CompatDB(QWidget* parent) |
|||
: QWizard(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint), |
|||
ui{std::make_unique<Ui::CompatDB>()} { |
|||
ui->setupUi(this); |
|||
|
|||
connect(ui->radioButton_GameBoot_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_GameBoot_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Gameplay_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Gameplay_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_NoFreeze_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_NoFreeze_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Complete_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Complete_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_Major, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_Minor, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_Major, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_Minor, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
|
|||
connect(button(NextButton), &QPushButton::clicked, this, &CompatDB::Submit); |
|||
connect(&testcase_watcher, &QFutureWatcher<bool>::finished, this, |
|||
&CompatDB::OnTestcaseSubmitted); |
|||
} |
|||
|
|||
CompatDB::~CompatDB() = default; |
|||
|
|||
enum class CompatDBPage { |
|||
Intro = 0, |
|||
GameBoot = 1, |
|||
GamePlay = 2, |
|||
Freeze = 3, |
|||
Completion = 4, |
|||
Graphical = 5, |
|||
Audio = 6, |
|||
Final = 7, |
|||
}; |
|||
|
|||
void CompatDB::Submit() { |
|||
QButtonGroup* compatibility_GameBoot = new QButtonGroup(this); |
|||
compatibility_GameBoot->addButton(ui->radioButton_GameBoot_Yes, 0); |
|||
compatibility_GameBoot->addButton(ui->radioButton_GameBoot_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Gameplay = new QButtonGroup(this); |
|||
compatibility_Gameplay->addButton(ui->radioButton_Gameplay_Yes, 0); |
|||
compatibility_Gameplay->addButton(ui->radioButton_Gameplay_No, 1); |
|||
|
|||
QButtonGroup* compatibility_NoFreeze = new QButtonGroup(this); |
|||
compatibility_NoFreeze->addButton(ui->radioButton_NoFreeze_Yes, 0); |
|||
compatibility_NoFreeze->addButton(ui->radioButton_NoFreeze_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Complete = new QButtonGroup(this); |
|||
compatibility_Complete->addButton(ui->radioButton_Complete_Yes, 0); |
|||
compatibility_Complete->addButton(ui->radioButton_Complete_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Graphical = new QButtonGroup(this); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_Major, 0); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_Minor, 1); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_No, 2); |
|||
|
|||
QButtonGroup* compatibility_Audio = new QButtonGroup(this); |
|||
compatibility_Audio->addButton(ui->radioButton_Audio_Major, 0); |
|||
compatibility_Graphical->addButton(ui->radioButton_Audio_Minor, 1); |
|||
compatibility_Audio->addButton(ui->radioButton_Audio_No, 2); |
|||
|
|||
const int compatibility = static_cast<int>(CalculateCompatibility()); |
|||
|
|||
switch ((static_cast<CompatDBPage>(currentId()))) { |
|||
case CompatDBPage::Intro: |
|||
break; |
|||
case CompatDBPage::GameBoot: |
|||
if (compatibility_GameBoot->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::GamePlay: |
|||
if (compatibility_Gameplay->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Freeze: |
|||
if (compatibility_NoFreeze->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Completion: |
|||
if (compatibility_Complete->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Graphical: |
|||
if (compatibility_Graphical->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Audio: |
|||
if (compatibility_Audio->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Final: |
|||
back(); |
|||
LOG_INFO(Frontend, "Compatibility Rating: {}", compatibility); |
|||
|
|||
button(NextButton)->setEnabled(false); |
|||
button(NextButton)->setText(tr("Submitting")); |
|||
button(CancelButton)->setVisible(false); |
|||
break; |
|||
default: |
|||
LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
int CompatDB::nextId() const { |
|||
switch ((static_cast<CompatDBPage>(currentId()))) { |
|||
case CompatDBPage::Intro: |
|||
return static_cast<int>(CompatDBPage::GameBoot); |
|||
case CompatDBPage::GameBoot: |
|||
if (ui->radioButton_GameBoot_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::GamePlay); |
|||
case CompatDBPage::GamePlay: |
|||
if (ui->radioButton_Gameplay_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Freeze); |
|||
case CompatDBPage::Freeze: |
|||
if (ui->radioButton_NoFreeze_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Completion); |
|||
case CompatDBPage::Completion: |
|||
if (ui->radioButton_Complete_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Graphical); |
|||
case CompatDBPage::Graphical: |
|||
return static_cast<int>(CompatDBPage::Audio); |
|||
case CompatDBPage::Audio: |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
case CompatDBPage::Final: |
|||
return -1; |
|||
default: |
|||
LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); |
|||
return static_cast<int>(CompatDBPage::Intro); |
|||
} |
|||
} |
|||
|
|||
CompatibilityStatus CompatDB::CalculateCompatibility() const { |
|||
if (ui->radioButton_GameBoot_No->isChecked()) { |
|||
return CompatibilityStatus::WontBoot; |
|||
} |
|||
|
|||
if (ui->radioButton_Gameplay_No->isChecked()) { |
|||
return CompatibilityStatus::IntroMenu; |
|||
} |
|||
|
|||
if (ui->radioButton_NoFreeze_No->isChecked() || ui->radioButton_Complete_No->isChecked()) { |
|||
return CompatibilityStatus::Ingame; |
|||
} |
|||
|
|||
if (ui->radioButton_Graphical_Major->isChecked() || ui->radioButton_Audio_Major->isChecked()) { |
|||
return CompatibilityStatus::Ingame; |
|||
} |
|||
|
|||
if (ui->radioButton_Graphical_Minor->isChecked() || ui->radioButton_Audio_Minor->isChecked()) { |
|||
return CompatibilityStatus::Playable; |
|||
} |
|||
|
|||
return CompatibilityStatus::Perfect; |
|||
} |
|||
|
|||
void CompatDB::OnTestcaseSubmitted() { |
|||
if (!testcase_watcher.result()) { |
|||
QMessageBox::critical(this, tr("Communication error"), |
|||
tr("An error occurred while sending the Testcase")); |
|||
button(NextButton)->setEnabled(true); |
|||
button(NextButton)->setText(tr("Next")); |
|||
button(CancelButton)->setVisible(true); |
|||
} else { |
|||
next(); |
|||
// older versions of QT don't support the "NoCancelButtonOnLastPage" option, this is a
|
|||
// workaround
|
|||
button(CancelButton)->setVisible(false); |
|||
} |
|||
} |
|||
|
|||
void CompatDB::EnableNext() { |
|||
button(NextButton)->setEnabled(true); |
|||
} |
|||
@ -1,40 +0,0 @@ |
|||
// SPDX-FileCopyrightText: 2017 Citra Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
#include <QFutureWatcher> |
|||
#include <QWizard> |
|||
|
|||
namespace Ui { |
|||
class CompatDB; |
|||
} |
|||
|
|||
enum class CompatibilityStatus { |
|||
Perfect = 0, |
|||
Playable = 1, |
|||
// Unused: Okay = 2, |
|||
Ingame = 3, |
|||
IntroMenu = 4, |
|||
WontBoot = 5, |
|||
}; |
|||
|
|||
class CompatDB : public QWizard { |
|||
Q_OBJECT |
|||
|
|||
public: |
|||
explicit CompatDB(QWidget* parent = nullptr); |
|||
~CompatDB(); |
|||
int nextId() const override; |
|||
|
|||
private: |
|||
QFutureWatcher<bool> testcase_watcher; |
|||
|
|||
std::unique_ptr<Ui::CompatDB> ui; |
|||
|
|||
void Submit(); |
|||
CompatibilityStatus CalculateCompatibility() const; |
|||
void OnTestcaseSubmitted(); |
|||
void EnableNext(); |
|||
}; |
|||
@ -1,398 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>CompatDB</class> |
|||
<widget class="QWizard" name="CompatDB"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>600</width> |
|||
<height>482</height> |
|||
</rect> |
|||
</property> |
|||
<property name="minimumSize"> |
|||
<size> |
|||
<width>500</width> |
|||
<height>410</height> |
|||
</size> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Report Compatibility</string> |
|||
</property> |
|||
<property name="options"> |
|||
<set>QWizard::WizardOption::DisabledBackButtonOnLastPage|QWizard::WizardOption::HelpButtonOnRight|QWizard::WizardOption::NoBackButtonOnStartPage</set> |
|||
</property> |
|||
<widget class="QWizardPage" name="wizard_Info"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">0</string> |
|||
</attribute> |
|||
<layout class="QVBoxLayout" name="verticalLayout"> |
|||
<item> |
|||
<widget class="QLabel" name="lbl_Spiel"> |
|||
<property name="text"> |
|||
<string><html><head/><body><p><span style=" font-size:10pt;">Should you choose to submit a test case to the </span><a href="https://eden-emulator.github.io/game/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">eden Compatibility List</span></a><span style=" font-size:10pt;">, The following information will be collected and displayed on the site:</span></p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hardware Information (CPU / GPU / Operating System)</li><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Which version of eden you are running</li><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The connected eden account</li></ul></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
<property name="openExternalLinks"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<spacer name="verticalSpacer_2"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_GameBoot"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">1</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout1"> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent1"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game boot?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer1"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_GameBoot_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game starts to output video or audio</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_GameBoot_No"> |
|||
<property name="text"> |
|||
<string>No The game doesn't get past the "Launching..." screen</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_GamePlay"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">2</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout2"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Gameplay_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game gets past the intro/menu and into gameplay</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Gameplay_No"> |
|||
<property name="text"> |
|||
<string>No The game crashes or freezes while loading or using the menu</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent2"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game reach gameplay?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer2"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_NoFreeze"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">3</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout3"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_NoFreeze_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game works without crashes</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_NoFreeze_No"> |
|||
<property name="text"> |
|||
<string>No The game crashes or freezes during gameplay</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent3"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game work without crashing, freezing or locking up during gameplay?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer3"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Complete"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">4</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout4"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Complete_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game can be finished without any workarounds</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Complete_No"> |
|||
<property name="text"> |
|||
<string>No The game can't progress past a certain area</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent4"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Is the game completely playable from start to finish?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer4"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Graphical"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">5</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout5"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_Major"> |
|||
<property name="text"> |
|||
<string>Major The game has major graphical errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_Minor"> |
|||
<property name="text"> |
|||
<string>Minor The game has minor graphical errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="6" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_No"> |
|||
<property name="text"> |
|||
<string>None Everything is rendered as it looks on the Nintendo Switch</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent5"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game have any graphical glitches?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer5"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Audio"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">6</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout6"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_Major"> |
|||
<property name="text"> |
|||
<string>Major The game has major audio errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_Minor"> |
|||
<property name="text"> |
|||
<string>Minor The game has minor audio errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="6" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_No"> |
|||
<property name="text"> |
|||
<string>None Audio is played perfectly</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent6"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game have any audio glitches / missing effects?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer6"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_ThankYou"> |
|||
<property name="title"> |
|||
<string>Thank you for your submission!</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">7</string> |
|||
</attribute> |
|||
</widget> |
|||
</widget> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include <algorithm>
|
|||
|
|||
#include <fmt/ranges.h>
|
|||
|
|||
#include "yuzu/compatibility_list.h"
|
|||
|
|||
CompatibilityList::const_iterator FindMatchingCompatibilityEntry( |
|||
const CompatibilityList& compatibility_list, u64 program_id) { |
|||
return std::find_if(compatibility_list.begin(), compatibility_list.end(), |
|||
[program_id](const auto& element) { |
|||
std::string pid = fmt::format("{:016X}", program_id); |
|||
return element.first == pid; |
|||
}); |
|||
} |
|||
@ -1,19 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <string> |
|||
#include <ankerl/unordered_dense.h> |
|||
|
|||
#include <QString> |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
using CompatibilityList = ankerl::unordered_dense::map<std::string, std::pair<QString, QString>>; |
|||
|
|||
CompatibilityList::const_iterator FindMatchingCompatibilityEntry( |
|||
const CompatibilityList& compatibility_list, u64 program_id); |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue