From 970651b421cd1fe85db299939643edc7c827d6c0 Mon Sep 17 00:00:00 2001 From: DanielSvoboda Date: Fri, 7 Feb 2025 14:58:58 -0300 Subject: [PATCH] Fix - 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 --- src/qt_gui/compatibility_info.cpp | 49 ++++++++++++------------------- src/qt_gui/compatibility_info.h | 3 +- src/qt_gui/game_list_frame.cpp | 6 ++-- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/qt_gui/compatibility_info.cpp b/src/qt_gui/compatibility_info.cpp index e4b36f4b4..4422621b8 100644 --- a/src/qt_gui/compatibility_info.cpp +++ b/src/qt_gui/compatibility_info.cpp @@ -22,21 +22,31 @@ void CompatibilityInfoClass::UpdateCompatibilityDatabase(QWidget* parent, bool f if (!forced && LoadCompatibilityFile()) 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"); QNetworkRequest request(url); 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); dialog.setWindowTitle(tr("Loading...")); + dialog.setWindowModality(Qt::WindowModal); + dialog.setMinimumDuration(0); + dialog.setValue(0); - if (!WaitForReply(reply)) { - reply->deleteLater(); - QMessageBox::critical(parent, tr("Error"), - tr("Timeout while downloading compatibility data.")); - return; - } + connect(reply, &QNetworkReply::downloadProgress, + [&dialog](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + dialog.setMaximum(bytesTotal); + 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) { QMessageBox::critical(parent, tr("Error"), @@ -63,27 +73,6 @@ void CompatibilityInfoClass::UpdateCompatibilityDatabase(QWidget* parent, bool f 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) { QString title_id = QString::fromStdString(serial); 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(), Qt::ISODate), compatibility_entry_obj["url"].toString(), - compatibility_entry_obj["issue_number"].toInt()}; + compatibility_entry_obj["issue_number"].toString()}; return compatibility_entry; } } diff --git a/src/qt_gui/compatibility_info.h b/src/qt_gui/compatibility_info.h index c96738f32..7e70e998b 100644 --- a/src/qt_gui/compatibility_info.h +++ b/src/qt_gui/compatibility_info.h @@ -47,7 +47,7 @@ struct CompatibilityEntry { QString version; QDateTime last_tested; QString url; - int issue_number; + QString issue_number; }; class CompatibilityInfoClass : public QObject { @@ -80,7 +80,6 @@ public: CompatibilityEntry GetCompatibilityInfo(const std::string& serial); const QString GetCompatStatusString(const CompatibilityStatus status); void ExtractCompatibilityInfo(QByteArray response); - static bool WaitForReply(QNetworkReply* reply); private: QNetworkAccessManager* m_network_manager; diff --git a/src/qt_gui/game_list_frame.cpp b/src/qt_gui/game_list_frame.cpp index 64c0f17ba..e3fc4981d 100644 --- a/src/qt_gui/game_list_frame.cpp +++ b/src/qt_gui/game_list_frame.cpp @@ -77,8 +77,10 @@ GameListFrame::GameListFrame(std::shared_ptr game_info_get, }); connect(this, &QTableWidget::cellClicked, this, [=, this](int row, int column) { - if (column == 2 && !m_game_info->m_games[row].compatibility.url.isEmpty()) { - QDesktopServices::openUrl(QUrl(m_game_info->m_games[row].compatibility.url)); + if (column == 2) { + 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)); } }); }