This commit is contained in:
parhelia512 2025-07-23 12:13:46 +08:00 committed by Nova
parent 705108275b
commit a3c413de58

View File

@ -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();