diff --git a/rpcs3/rpcs3qt/update_manager.cpp b/rpcs3/rpcs3qt/update_manager.cpp index 4e7f77038f..cd2d9df875 100644 --- a/rpcs3/rpcs3qt/update_manager.cpp +++ b/rpcs3/rpcs3qt/update_manager.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -67,11 +66,12 @@ void update_manager::check_for_updates(bool automatic, bool check_only, bool aut if (automatic) { // Don't check for updates on local builds - if (rpcs3::is_local_build()) - { - update_log.notice("Skipped automatic update check: this is a local build"); - return; - } + // TEST: commented out — revert before merging + // if (rpcs3::is_local_build()) + // { + // update_log.notice("Skipped automatic update check: this is a local build"); + // return; + // } #ifdef __linux__ // Don't check for updates on startup if RPCS3 is not running from an AppImage. if (!::getenv("APPIMAGE")) @@ -114,7 +114,8 @@ void update_manager::check_for_updates(bool automatic, bool check_only, bool aut const utils::OS_version os = utils::get_OS_version(); const std::string url = fmt::format("https://update.rpcs3.net/?api=v3&c=%s&os_type=%s&os_arch=%s&os_version=%i.%i.%i", - rpcs3::get_commit_and_hash().second, os.type, os.arch, os.version_major, os.version_minor, os.version_patch); + "9b6bc7c1", os.type, os.arch, os.version_major, os.version_minor, os.version_patch); + // TEST: hardcoded hash — revert to rpcs3::get_commit_and_hash().second before merging m_downloader->start(url, true, !automatic, true, tr("Checking For Updates"), true); } @@ -284,6 +285,13 @@ bool update_manager::handle_json(bool automatic, bool check_only, bool auto_acce update_log.notice("JSON changelog entry does not contain a title string."); } + if (QJsonValue pr = changelog_entry["pr"]; pr.isDouble()) + { + entry.pr = pr.toInt(); + } + + update_log.notice("Changelog entry: version='%s', title='%s', pr=%d", entry.version, entry.title, entry.pr); + m_update_info.changelog.push_back(std::move(entry)); } else @@ -302,6 +310,19 @@ bool update_manager::handle_json(bool automatic, bool check_only, bool auto_acce } } + // TEST: assign PR numbers to entries — remove before merging + { + static const int test_prs[] = {18459, 18103, 18419, 18456, 18395, 18453, 18302, 18445}; + const int test_count = static_cast(sizeof(test_prs) / sizeof(test_prs[0])); + for (int i = 0; i < static_cast(m_update_info.changelog.size()) && i < test_count; i++) + { + if (m_update_info.changelog[i].pr == 0) + { + m_update_info.changelog[i].pr = test_prs[i]; + } + } + } + if (check_only) { update_log.notice("Update postponed. Check only is active"); @@ -366,10 +387,7 @@ void update_manager::update(bool auto_accept) .arg(support_message); } - // Build HTML changelog with clickable PR links - // Technique adapted from shadPS4 Emulator Project (shadps4-qtlauncher) - // Original: Copyright 2024 shadPS4 Emulator Project, GPL-2.0-or-later - // Used here under GPL-2.0 (compatible with RPCS3's GPL-2.0-only) + // Build HTML changelog with clickable PR links when available QString changelog_html; for (const changelog_data& entry : m_update_info.changelog) @@ -380,28 +398,14 @@ void update_manager::update(bool auto_accept) if (!changelog_html.isEmpty()) changelog_html += QStringLiteral("
"); - changelog_html += tr("  • %0: %1").arg(version_str, title_str); - } - - // Convert PR references like (#1234) into clickable GitHub links - if (!changelog_html.isEmpty()) - { - const QRegularExpression re(QStringLiteral("\\(\\#(\\d+)\\)")); - QString linked_changelog; - qsizetype last_index = 0; - QRegularExpressionMatchIterator it = re.globalMatch(changelog_html); - - while (it.hasNext()) + if (entry.pr > 0) { - const QRegularExpressionMatch match = it.next(); - linked_changelog += changelog_html.mid(last_index, match.capturedStart() - last_index); - const QString pr_num = match.captured(1); - linked_changelog += QStringLiteral("(#%0)").arg(pr_num); - last_index = match.capturedEnd(); + changelog_html += tr("  • %0: %1 (#%2)").arg(version_str, title_str, QString::number(entry.pr)); + } + else + { + changelog_html += tr("  • %0: %1").arg(version_str, title_str); } - - linked_changelog += changelog_html.mid(last_index); - changelog_html = linked_changelog; } QMessageBox mb(QMessageBox::Icon::Question, tr("Update Available"), update_message, QMessageBox::Yes | QMessageBox::No, m_downloader->get_progress_dialog() ? m_downloader->get_progress_dialog() : m_parent); diff --git a/rpcs3/rpcs3qt/update_manager.h b/rpcs3/rpcs3qt/update_manager.h index 98ef5cf3f1..d03d2c5a59 100644 --- a/rpcs3/rpcs3qt/update_manager.h +++ b/rpcs3/rpcs3qt/update_manager.h @@ -29,6 +29,7 @@ private: struct changelog_data { + int pr = 0; QString version; QString title; };