- html_url has been removed, the url is now built dynamically from the issue_number, and the file has decreased in size from 537kb to 355KB;
-Fix QProgressDialog
- change the correct directory, from my ford to the official one
This commit is contained in:
DanielSvoboda 2025-02-07 14:58:58 -03:00
parent 4c8f6692d3
commit 970651b421
3 changed files with 24 additions and 34 deletions

View File

@ -22,21 +22,31 @@ void CompatibilityInfoClass::UpdateCompatibilityDatabase(QWidget* parent, bool f
if (!forced && LoadCompatibilityFile()) if (!forced && LoadCompatibilityFile())
return; return;
QUrl url("https://github.com/DanielSvoboda/shadps4-game-compatibility/releases/latest/download/" QUrl url("https://github.com/shadps4-emu/shadps4-game-compatibility/releases/latest/download/"
"compatibility_data.json"); "compatibility_data.json");
QNetworkRequest request(url); QNetworkRequest request(url);
QNetworkReply* reply = m_network_manager->get(request); QNetworkReply* reply = m_network_manager->get(request);
QProgressDialog dialog(tr("Fetching compatibility data, please wait"), tr("Cancel"), 0, 0, QProgressDialog dialog(tr("Fetching compatibility data, please wait"), tr("Cancel"), 0, 100,
parent); parent);
dialog.setWindowTitle(tr("Loading...")); dialog.setWindowTitle(tr("Loading..."));
dialog.setWindowModality(Qt::WindowModal);
dialog.setMinimumDuration(0);
dialog.setValue(0);
if (!WaitForReply(reply)) { connect(reply, &QNetworkReply::downloadProgress,
reply->deleteLater(); [&dialog](qint64 bytesReceived, qint64 bytesTotal) {
QMessageBox::critical(parent, tr("Error"), if (bytesTotal > 0) {
tr("Timeout while downloading compatibility data.")); dialog.setMaximum(bytesTotal);
return; dialog.setValue(bytesReceived);
} }
});
connect(&dialog, &QProgressDialog::canceled, reply, &QNetworkReply::abort);
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
if (reply->error() != QNetworkReply::NoError) { if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(parent, tr("Error"), QMessageBox::critical(parent, tr("Error"),
@ -63,27 +73,6 @@ void CompatibilityInfoClass::UpdateCompatibilityDatabase(QWidget* parent, bool f
LoadCompatibilityFile(); LoadCompatibilityFile();
} }
bool CompatibilityInfoClass::WaitForReply(QNetworkReply* reply) {
// Returns true if reply succeeded, false if reply timed out
QTimer timer;
timer.setSingleShot(true);
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(5000);
loop.exec();
if (timer.isActive()) {
timer.stop();
return true;
} else {
disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
reply->abort();
return false;
}
};
CompatibilityEntry CompatibilityInfoClass::GetCompatibilityInfo(const std::string& serial) { CompatibilityEntry CompatibilityInfoClass::GetCompatibilityInfo(const std::string& serial) {
QString title_id = QString::fromStdString(serial); QString title_id = QString::fromStdString(serial);
if (m_compatibility_database.contains(title_id)) { if (m_compatibility_database.contains(title_id)) {
@ -99,7 +88,7 @@ CompatibilityEntry CompatibilityInfoClass::GetCompatibilityInfo(const std::strin
QDateTime::fromString(compatibility_entry_obj["last_tested"].toString(), QDateTime::fromString(compatibility_entry_obj["last_tested"].toString(),
Qt::ISODate), Qt::ISODate),
compatibility_entry_obj["url"].toString(), compatibility_entry_obj["url"].toString(),
compatibility_entry_obj["issue_number"].toInt()}; compatibility_entry_obj["issue_number"].toString()};
return compatibility_entry; return compatibility_entry;
} }
} }

View File

@ -47,7 +47,7 @@ struct CompatibilityEntry {
QString version; QString version;
QDateTime last_tested; QDateTime last_tested;
QString url; QString url;
int issue_number; QString issue_number;
}; };
class CompatibilityInfoClass : public QObject { class CompatibilityInfoClass : public QObject {
@ -80,7 +80,6 @@ public:
CompatibilityEntry GetCompatibilityInfo(const std::string& serial); CompatibilityEntry GetCompatibilityInfo(const std::string& serial);
const QString GetCompatStatusString(const CompatibilityStatus status); const QString GetCompatStatusString(const CompatibilityStatus status);
void ExtractCompatibilityInfo(QByteArray response); void ExtractCompatibilityInfo(QByteArray response);
static bool WaitForReply(QNetworkReply* reply);
private: private:
QNetworkAccessManager* m_network_manager; QNetworkAccessManager* m_network_manager;

View File

@ -77,8 +77,10 @@ GameListFrame::GameListFrame(std::shared_ptr<GameInfoClass> game_info_get,
}); });
connect(this, &QTableWidget::cellClicked, this, [=, this](int row, int column) { connect(this, &QTableWidget::cellClicked, this, [=, this](int row, int column) {
if (column == 2 && !m_game_info->m_games[row].compatibility.url.isEmpty()) { if (column == 2) {
QDesktopServices::openUrl(QUrl(m_game_info->m_games[row].compatibility.url)); auto url_issues = "https://github.com/shadps4-emu/shadps4-game-compatibility/issues/";
QDesktopServices::openUrl(
QUrl(url_issues + m_game_info->m_games[row].compatibility.issue_number));
} }
}); });
} }