From a3c413de58a2f6cbbf2771294f4ea98bc2d517d4 Mon Sep 17 00:00:00 2001 From: parhelia512 <0011d3@gmail.com> Date: Wed, 23 Jul 2025 12:13:46 +0800 Subject: [PATCH] fix --- src/ui/mainwindow.cpp | 82 +++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 35e1368..d216cf4 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -424,19 +424,18 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi }); QStringList profileList; - auto resp = NetworkRequestHelper::HttpGet("https://api.github.com/repos/throneproj/routeprofiles/releases/latest"); - if (!resp.error.isEmpty()) { - runOnUiThread([=] { - MessageBoxWarning(QObject::tr("Download Profiles"), QObject::tr("Requesting list error: %1").arg(resp.error + "\n" + resp.data)); - }); - return; - } - QJsonObject release = QString2QJsonObject(resp.data); - for (const QJsonValue asset : release["assets"].toArray()) { - auto profile = asset["name"].toString(); - if (profile.section('.', -1) == QString("json") && (profile.startsWith("bypass",Qt::CaseInsensitive) || profile.startsWith("proxy",Qt::CaseInsensitive))) { - profile.chop(5); - profileList.push_back(profile); + for(int retry = 0; retry < 3; retry++) { + auto resp = NetworkRequestHelper::HttpGet("https://api.github.com/repos/throneproj/routeprofiles/releases/latest"); + if (resp.error.isEmpty()) { + QJsonObject release = QString2QJsonObject(resp.data); + for (const QJsonValue asset : release["assets"].toArray()) { + auto profile = asset["name"].toString(); + if (profile.section('.', -1) == QString("json") && (profile.startsWith("bypass",Qt::CaseInsensitive) || profile.startsWith("proxy",Qt::CaseInsensitive))) { + profile.chop(5); + profileList.push_back(profile); + } + } + break; } } @@ -444,35 +443,36 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi { ui->menuRouting_Menu->clear(); ui->menuRouting_Menu->addAction(ui->menu_routing_settings); - - QMenu* profilesMenu = ui->menuRouting_Menu->addMenu(QObject::tr("Download Profiles")); - for (const auto& profile : profileList) - { - auto* action = new QAction(profilesMenu); - action->setText(profile); - connect(action, &QAction::triggered, this, [=]() + if(!profileList.isEmpty()) { + QMenu* profilesMenu = ui->menuRouting_Menu->addMenu(QObject::tr("Download Profiles")); + for (const auto& profile : profileList) { - auto res = NetworkRequestHelper::HttpGet("https://github.com/throneproj/routeprofiles/releases/latest/download/" + profile + ".json"); - if (!res.error.isEmpty()) { - runOnUiThread([=] { - MessageBoxWarning(QObject::tr("Download Profiles"), QObject::tr("Requesting profile error: %1").arg(res.error + "\n" + res.data)); - }); - return; - } - auto err = new QString; - auto parsed = Configs::RoutingChain::parseJsonArray(QString2QJsonArray(res.data), err); - if (!err->isEmpty()) { - MessageBoxInfo(tr("Invalid JSON Array"), tr("The provided input cannot be parsed to a valid route rule array:\n") + *err); - return; - } - auto chain = Configs::ProfileManager::NewRouteChain(); - chain->name = QString(profile).replace('_', ' '); - chain->defaultOutboundID = profile.startsWith("bypass",Qt::CaseInsensitive) ? Configs::proxyID : Configs::directID; - chain->Rules.clear(); - chain->Rules << parsed; - Configs::profileManager->AddRouteChain(chain); - }); - profilesMenu->addAction(action); + auto* action = new QAction(profilesMenu); + action->setText(profile); + connect(action, &QAction::triggered, this, [=]() + { + auto resp = NetworkRequestHelper::HttpGet("https://github.com/throneproj/routeprofiles/releases/latest/download/" + profile + ".json"); + if (!resp.error.isEmpty()) { + runOnUiThread([=] { + MessageBoxWarning(QObject::tr("Download Profiles"), QObject::tr("Requesting profile error: %1").arg(resp.error + "\n" + resp.data)); + }); + return; + } + auto err = new QString; + auto parsed = Configs::RoutingChain::parseJsonArray(QString2QJsonArray(resp.data), err); + if (!err->isEmpty()) { + MessageBoxInfo(tr("Invalid JSON Array"), tr("The provided input cannot be parsed to a valid route rule array:\n") + *err); + return; + } + auto chain = Configs::ProfileManager::NewRouteChain(); + chain->name = QString(profile).replace('_', ' '); + chain->defaultOutboundID = profile.startsWith("bypass",Qt::CaseInsensitive) ? Configs::proxyID : Configs::directID; + chain->Rules.clear(); + chain->Rules << parsed; + Configs::profileManager->AddRouteChain(chain); + }); + profilesMenu->addAction(action); + } } ui->menuRouting_Menu->addSeparator();